diff --git a/.changeset/aao-endpoint-engineering.md b/.changeset/aao-endpoint-engineering.md new file mode 100644 index 00000000000..f6f46b611d7 --- /dev/null +++ b/.changeset/aao-endpoint-engineering.md @@ -0,0 +1,5 @@ +--- +'@audius/sdk': patch +--- + +Point the production anti-abuse oracle endpoint at `https://anti-abuse-oracle.audius.engineering`, replacing the old `https://discoveryprovider.audius.co` host in the SDK services config and supporting clients/services. diff --git a/.changeset/notifications-path-id-rename.md b/.changeset/notifications-path-id-rename.md new file mode 100644 index 00000000000..877f8e70010 --- /dev/null +++ b/.changeset/notifications-path-id-rename.md @@ -0,0 +1,22 @@ +--- +'@audius/sdk': major +--- + +Rename the path field on `getNotifications` and `getPlaylistUpdates` from `userId` to `id`, matching the convention used by every `/users/{id}/…` method. Add an optional `userId` query field that carries the requester id for personalization of embedded `related.users` (e.g. `does_current_user_follow`). + +**Migration:** + +```ts +// Before +sdk.notifications.getNotifications({ userId: 'aE9MA' }) +sdk.notifications.getPlaylistUpdates({ userId: 'aE9MA' }) + +// After +sdk.notifications.getNotifications({ + id: 'aE9MA', // notifications owner (was `userId`) + userId: 'aE9MA' // requester id, for personalization of related.users +}) +sdk.notifications.getPlaylistUpdates({ id: 'aE9MA', userId: 'aE9MA' }) +``` + +The two ids differ only when a manager reads a managed user's notifications; in the normal flow they're the same value. The wire format and server URL are unchanged — only the request type shape was renamed to remove a collision between the path and the new query parameter. diff --git a/.changeset/personalization-three-endpoints.md b/.changeset/personalization-three-endpoints.md new file mode 100644 index 00000000000..c9541b8079c --- /dev/null +++ b/.changeset/personalization-three-endpoints.md @@ -0,0 +1,13 @@ +--- +'@audius/sdk': minor +--- + +Add an optional `userId?: string` query parameter to three endpoints so the backend can personalize embedded users in `related.users` / collection owners (`does_current_user_follow`, etc.): + +- `events.getRemixContests` +- `users.getContestsByUser` +- `playlists.getPlaylistsNewReleases` + +Without this, the endpoints' handlers (`app.getMyId(c)`) resolved the requester id from the missing `?user_id=` query and got `0`, so embedded user objects came back with `does_current_user_follow: false` for everyone. Clients that primed those into a shared cache (e.g. via `primeRelatedData` / `primeCollectionData`) silently poisoned follow state for the surfaced artists. + +Existing callers continue to work unchanged — the field is optional. Pass `Id.parse(currentUserId)` (or whichever id your app treats as "me") to opt in. diff --git a/.changeset/remove-fingerprintjs.md b/.changeset/remove-fingerprintjs.md new file mode 100644 index 00000000000..4aad5102436 --- /dev/null +++ b/.changeset/remove-fingerprintjs.md @@ -0,0 +1,8 @@ +--- +'@audius/common': patch +'@audius/sdk-legacy': patch +'@audius/web': patch +'@audius/mobile': patch +--- + +Remove FingerprintJS from all clients and services. Sign-in no longer collects a `visitorId`, the identity service's fingerprint-based OTP bypass is gone (new devices always require OTP), and the anti-abuse-oracle drops the per-fingerprint device-count scoring and UI section. diff --git a/.circleci/config.yml b/.circleci/config.yml index f7090d45b2c..702181cb0fe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -91,7 +91,6 @@ jobs: - ./packages/ddex-entrypoint/node_modules - ./packages/create-audius-app/node_modules - ./packages/dotenv-linter/bin - - ./packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules generate-release-branch: working_directory: ~/apps diff --git a/.circleci/scripts/docker-tag-images.sh b/.circleci/scripts/docker-tag-images.sh index 3ec9b90ab0d..23b6f7bc8e9 100755 --- a/.circleci/scripts/docker-tag-images.sh +++ b/.circleci/scripts/docker-tag-images.sh @@ -40,7 +40,6 @@ discovery=( discovery-provider-notifications discovery-provider-openresty es-indexer - solana-relay staking anti-abuse archiver diff --git a/.circleci/src/commands/@mobile-commands.yml b/.circleci/src/commands/@mobile-commands.yml index 850930e0fe7..fa90ea9c1c2 100644 --- a/.circleci/src/commands/@mobile-commands.yml +++ b/.circleci/src/commands/@mobile-commands.yml @@ -38,11 +38,6 @@ mobile-prepare-ios: command: | cd packages/mobile/ios bundle exec pod install - - run: - name: Install Sentry CLI - command: | - curl -sL https://sentry.io/get-cli/ | bash - echo export SENTRY_BINARY=/usr/local/bin/sentry-cli >> "$BASH_ENV" - run: name: Build dependencies no_output_timeout: 60m diff --git a/.circleci/src/jobs/@integration-jobs.yml b/.circleci/src/jobs/@integration-jobs.yml index d8bc8d9308c..5e078240c3d 100644 --- a/.circleci/src/jobs/@integration-jobs.yml +++ b/.circleci/src/jobs/@integration-jobs.yml @@ -26,7 +26,6 @@ e2e-init: - packages/libs/dist - packages/sdk/node_modules - packages/sdk/dist - - packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules e2e-test: machine: true diff --git a/.circleci/src/jobs/@web-jobs.yml b/.circleci/src/jobs/@web-jobs.yml index 8ac409f4a9c..d908a9f5a2b 100644 --- a/.circleci/src/jobs/@web-jobs.yml +++ b/.circleci/src/jobs/@web-jobs.yml @@ -143,30 +143,6 @@ web-deploy-production-cloudflare: copy-robots: true # - web-deploy-sourcemaps-s3 -web-deploy-sentry-sourcemaps: - working_directory: ~/apps - docker: - - image: cimg/node:20.19 - steps: - - checkout - - attach_workspace: - at: ./ - - run: - name: cut-sentry-release - command: | - cd packages/web - ../../node_modules/.bin/sentry-cli --auth-token ${SENTRY_AUTH_TOKEN} releases --org audius --project audius-client new ${CIRCLE_SHA1} - - run: - name: upload-sourcemaps - command: | - cd packages/web - ../../node_modules/.bin/sentry-cli --auth-token ${SENTRY_AUTH_TOKEN} releases --org audius --project audius-client files ${CIRCLE_SHA1} upload-sourcemaps --no-rewrite build-production/static/js - - run: - name: finalize-release - command: | - cd packages/web - ../../node_modules/.bin/sentry-cli --auth-token ${SENTRY_AUTH_TOKEN} releases --org audius --project audius-client finalize ${CIRCLE_SHA1} - web-dist-mac-production: working_directory: ~/apps # run on macos so dmg can be created and signed. diff --git a/.circleci/src/workflows/discovery.yml b/.circleci/src/workflows/discovery.yml index c57bcd529ec..18ee48a711c 100644 --- a/.circleci/src/workflows/discovery.yml +++ b/.circleci/src/workflows/discovery.yml @@ -3,7 +3,7 @@ jobs: - push-docker-image: name: push-discovery-provider context: [Vercel, dockerhub] - service: discovery-provider discovery-provider-openresty discovery-provider-notifications staking solana-relay es-indexer anti-abuse archiver + service: discovery-provider discovery-provider-openresty discovery-provider-notifications staking es-indexer anti-abuse archiver filters: branches: only: main diff --git a/.circleci/src/workflows/release.yml b/.circleci/src/workflows/release.yml index d748f9c1a9d..36f0e198061 100644 --- a/.circleci/src/workflows/release.yml +++ b/.circleci/src/workflows/release.yml @@ -8,7 +8,7 @@ jobs: - push-docker-image: name: push-discovery-provider context: [Vercel, dockerhub, slack-secrets] - service: discovery-provider discovery-provider-notifications discovery-provider-openresty solana-relay staking es-indexer anti-abuse archiver + service: discovery-provider discovery-provider-notifications discovery-provider-openresty staking es-indexer anti-abuse archiver notify_slack_on_failure: true - commit-audius-docker-compose-and-notify: context: [slack-secrets, github] diff --git a/.circleci/src/workflows/web.yml b/.circleci/src/workflows/web.yml index 3a5fcdac6dd..95916d4802a 100644 --- a/.circleci/src/workflows/web.yml +++ b/.circleci/src/workflows/web.yml @@ -70,14 +70,6 @@ jobs: filters: branches: only: /^main$/ - - web-deploy-sentry-sourcemaps: - context: Audius Client - requires: - - web-hold-production - filters: - branches: - only: /^main$/ - # Distribute production desktop binaries on main. - web-hold-dist-mac-production: type: approval diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index df1369dc3e0..dbd607c362b 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -25,13 +25,80 @@ on: - production env: - NODE_VERSION: '22.21.1' + NODE_VERSION: '24.10.0' jobs: - # Initialize: Install dependencies, lint & typecheck - mobile-init: - name: Mobile Init (Install, Lint & Typecheck) + # Install dependencies and warm the node_modules cache shared by every downstream job. + # Kept separate from lint/typecheck so OTA + build jobs don't wait on verify (~3.5 min). + mobile-install: + name: Mobile Install runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: package-lock.json + + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + + - name: Create concatenated patch file + id: patch-file + run: | + ls -d -- packages/*/patches/*.patch 2>/dev/null | xargs cat > combined-patch-file.txt || touch combined-patch-file.txt + echo "patch_checksum=$(sha256sum combined-patch-file.txt | cut -d' ' -f1)" >> $GITHUB_OUTPUT + + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v4 + with: + path: | + node_modules + packages/mobile/node_modules + packages/common/node_modules + packages/libs/node_modules + packages/libs/dist + packages/sdk/node_modules + packages/sdk/dist + packages/harmony/node_modules + packages/dotenv-linter/bin + key: npm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ steps.patch-file.outputs.patch_checksum }} + restore-keys: | + npm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}- + npm-cache-mobile-${{ runner.os }}-${{ hashFiles('package-lock.json') }}- + + - name: Install dependencies + env: + CI: true + NODE_OPTIONS: --max-old-space-size=8192 + run: | + if [[ -d node_modules ]]; then + echo "Using cached node_modules, running postinstall..." + npm run postinstall + # Ensure dotenv-linter binary is installed (install script downloads it) + if [[ ! -f packages/dotenv-linter/bin/dotenv-linter ]]; then + echo "dotenv-linter binary missing, running install script..." + (cd packages/dotenv-linter && npm run install) + fi + else + echo "No cache found, running fresh install..." + # Clear npm cache to avoid EEXIST conflicts + npm cache clean --force || true + # Try npm ci first, fallback to npm install if lock file is out of sync + npm ci --prefer-offline || npm install --prefer-offline + fi + + # Verify: lint & typecheck. Runs in parallel with OTA/build jobs — failure still fails the workflow, + # but does not block the OTA publish on the critical path. + mobile-verify: + name: Mobile Verify (Lint & Typecheck) + runs-on: ubuntu-latest + needs: mobile-install steps: - name: Checkout code uses: actions/checkout@v4 @@ -81,16 +148,13 @@ jobs: if [[ -d node_modules ]]; then echo "Using cached node_modules, running postinstall..." npm run postinstall - # Ensure dotenv-linter binary is installed (install script downloads it) if [[ ! -f packages/dotenv-linter/bin/dotenv-linter ]]; then echo "dotenv-linter binary missing, running install script..." (cd packages/dotenv-linter && npm run install) fi else echo "No cache found, running fresh install..." - # Clear npm cache to avoid EEXIST conflicts npm cache clean --force || true - # Try npm ci first, fallback to npm install if lock file is out of sync npm ci --prefer-offline || npm install --prefer-offline fi @@ -100,7 +164,7 @@ jobs: mobile-version-check: name: Mobile Version Change Check runs-on: ubuntu-latest - needs: mobile-init + needs: mobile-install if: (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'workflow_dispatch' outputs: current_version: ${{ steps.version-check.outputs.current_version }} @@ -129,12 +193,23 @@ jobs: echo "version_unchanged=false" >> "$GITHUB_OUTPUT" fi - # OTA Release: publish JS bundle updates when native app version is unchanged + # OTA Release: publish JS bundle updates when native app version is unchanged. + # Matrixed over platforms so iOS and Android publish in parallel. mobile-ota-release: - name: Mobile OTA Release (CodePush) + name: Mobile OTA Release (CodePush, ${{ matrix.platform }}) runs-on: ubuntu-latest - needs: [mobile-init, mobile-version-check] + needs: [mobile-install, mobile-version-check] if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.mobile-version-check.outputs.version_unchanged == 'true') || (github.event_name == 'workflow_dispatch' && (github.event.inputs.ota_channel == 'rc' || github.event.inputs.ota_channel == '')) + # Serialize per-platform publishes so two concurrent runs can't read-modify-write + # the same s3://.../mobile-ota/histories//rc/.json and clobber each + # other's release entry. + concurrency: + group: mobile-ota-release-rc-${{ matrix.platform }} + cancel-in-progress: false + strategy: + fail-fast: false + matrix: + platform: [ios, android] steps: - name: Checkout code uses: actions/checkout@v4 @@ -148,11 +223,51 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + + - name: Create concatenated patch file + id: patch-file + run: | + ls -d -- packages/*/patches/*.patch 2>/dev/null | xargs cat > combined-patch-file.txt || touch combined-patch-file.txt + echo "patch_checksum=$(sha256sum combined-patch-file.txt | cut -d' ' -f1)" >> $GITHUB_OUTPUT + + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v4 + with: + path: | + node_modules + packages/mobile/node_modules + packages/common/node_modules + packages/libs/node_modules + packages/libs/dist + packages/sdk/node_modules + packages/sdk/dist + packages/harmony/node_modules + packages/dotenv-linter/bin + key: npm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ steps.patch-file.outputs.patch_checksum }} + restore-keys: | + npm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}- + npm-cache-mobile-${{ runner.os }}-${{ hashFiles('package-lock.json') }}- + - name: Install dependencies env: CI: true NODE_OPTIONS: --max-old-space-size=8192 - run: npm ci --prefer-offline || npm install --prefer-offline + run: | + if [[ -d node_modules ]]; then + echo "Using cached node_modules, running postinstall..." + npm run postinstall + if [[ ! -f packages/dotenv-linter/bin/dotenv-linter ]]; then + echo "dotenv-linter binary missing, running install script..." + (cd packages/dotenv-linter && npm run install) + fi + else + echo "No cache found, running fresh install..." + npm cache clean --force || true + npm ci --prefer-offline || npm install --prefer-offline + fi - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 @@ -170,7 +285,16 @@ jobs: echo "channel=rc" >> "$GITHUB_OUTPUT" fi - - name: Publish OTA updates (iOS + Android) + # @bravemobile/react-native-code-push@12.3.2 hardcodes + # `node_modules/.bin/react-native` relative to cwd. After #14365 the + # react-native dep hoists to root node_modules, so the bin is only at + # ./node_modules/.bin/react-native — not packages/mobile/node_modules/.bin/. + - name: Symlink react-native CLI into packages/mobile/node_modules/.bin + run: | + mkdir -p packages/mobile/node_modules/.bin + ln -sf "$(pwd)/node_modules/.bin/react-native" packages/mobile/node_modules/.bin/react-native + + - name: Publish OTA update (${{ matrix.platform }}) env: OTA_S3_BUCKET: ${{ secrets.OTA_S3_BUCKET }} OTA_S3_PREFIX: mobile-ota @@ -185,32 +309,30 @@ jobs: OTA_APP_VERSION="${MAJOR}.${MINOR}.${OTA_PATCH}" cd packages/mobile - npx code-push create-history --binary-version "$BINARY_VERSION" --platform ios --identifier "$OTA_CHANNEL" || true - npx code-push create-history --binary-version "$BINARY_VERSION" --platform android --identifier "$OTA_CHANNEL" || true - npx code-push release \ --binary-version "$BINARY_VERSION" \ --app-version "$OTA_APP_VERSION" \ - --platform ios \ + --platform ${{ matrix.platform }} \ --identifier "$OTA_CHANNEL" \ --entry-file index.js - npx code-push release \ - --binary-version "$BINARY_VERSION" \ - --app-version "$OTA_APP_VERSION" \ - --platform android \ - --identifier "$OTA_CHANNEL" \ - --entry-file index.js - - # OTA Release (Production): manual + environment approval gate + # OTA Release (Production): manual + environment approval gate. + # Matrixed over platforms so iOS and Android publish in parallel. mobile-ota-release-production: - name: Mobile OTA Release (Production, Approved) + name: Mobile OTA Release (Production, ${{ matrix.platform }}) runs-on: ubuntu-latest - needs: [mobile-init, mobile-version-check] + needs: [mobile-install, mobile-version-check] if: github.event_name == 'workflow_dispatch' && github.event.inputs.ota_channel == 'production' environment: name: mobile-production-ota url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + concurrency: + group: mobile-ota-release-production-${{ matrix.platform }} + cancel-in-progress: false + strategy: + fail-fast: false + matrix: + platform: [ios, android] steps: - name: Checkout code uses: actions/checkout@v4 @@ -224,11 +346,51 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + + - name: Create concatenated patch file + id: patch-file + run: | + ls -d -- packages/*/patches/*.patch 2>/dev/null | xargs cat > combined-patch-file.txt || touch combined-patch-file.txt + echo "patch_checksum=$(sha256sum combined-patch-file.txt | cut -d' ' -f1)" >> $GITHUB_OUTPUT + + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v4 + with: + path: | + node_modules + packages/mobile/node_modules + packages/common/node_modules + packages/libs/node_modules + packages/libs/dist + packages/sdk/node_modules + packages/sdk/dist + packages/harmony/node_modules + packages/dotenv-linter/bin + key: npm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ steps.patch-file.outputs.patch_checksum }} + restore-keys: | + npm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}- + npm-cache-mobile-${{ runner.os }}-${{ hashFiles('package-lock.json') }}- + - name: Install dependencies env: CI: true NODE_OPTIONS: --max-old-space-size=8192 - run: npm ci --prefer-offline || npm install --prefer-offline + run: | + if [[ -d node_modules ]]; then + echo "Using cached node_modules, running postinstall..." + npm run postinstall + if [[ ! -f packages/dotenv-linter/bin/dotenv-linter ]]; then + echo "dotenv-linter binary missing, running install script..." + (cd packages/dotenv-linter && npm run install) + fi + else + echo "No cache found, running fresh install..." + npm cache clean --force || true + npm ci --prefer-offline || npm install --prefer-offline + fi - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 @@ -237,7 +399,16 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - name: Publish OTA updates to production (iOS + Android) + # @bravemobile/react-native-code-push@12.3.2 hardcodes + # `node_modules/.bin/react-native` relative to cwd. After #14365 the + # react-native dep hoists to root node_modules, so the bin is only at + # ./node_modules/.bin/react-native — not packages/mobile/node_modules/.bin/. + - name: Symlink react-native CLI into packages/mobile/node_modules/.bin + run: | + mkdir -p packages/mobile/node_modules/.bin + ln -sf "$(pwd)/node_modules/.bin/react-native" packages/mobile/node_modules/.bin/react-native + + - name: Publish OTA update to production (${{ matrix.platform }}) env: OTA_S3_BUCKET: ${{ secrets.OTA_S3_BUCKET }} OTA_S3_PREFIX: mobile-ota @@ -251,28 +422,18 @@ jobs: OTA_APP_VERSION="${MAJOR}.${MINOR}.${OTA_PATCH}" cd packages/mobile - npx code-push create-history --binary-version "$BINARY_VERSION" --platform ios --identifier "$OTA_CHANNEL" || true - npx code-push create-history --binary-version "$BINARY_VERSION" --platform android --identifier "$OTA_CHANNEL" || true - - npx code-push release \ - --binary-version "$BINARY_VERSION" \ - --app-version "$OTA_APP_VERSION" \ - --platform ios \ - --identifier "$OTA_CHANNEL" \ - --entry-file index.js - npx code-push release \ --binary-version "$BINARY_VERSION" \ --app-version "$OTA_APP_VERSION" \ - --platform android \ + --platform ${{ matrix.platform }} \ --identifier "$OTA_CHANNEL" \ --entry-file index.js # iOS Release Candidate: Build and upload mobile-build-upload-releasecandidate-ios: name: iOS Release Candidate Build & Upload - runs-on: macos-15 - needs: [mobile-init, mobile-version-check] + runs-on: macos-26 + needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' steps: - name: Checkout code @@ -285,6 +446,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -367,11 +531,6 @@ jobs: cd packages/mobile/ios RCT_NEW_ARCH_ENABLED=0 bundle exec pod install - - name: Install Sentry CLI - run: | - curl -sL https://sentry.io/get-cli/ | bash - echo "$HOME/.sentry-cli/bin" >> $GITHUB_PATH - - name: Build dependencies timeout-minutes: 60 run: npx turbo run build --filter=@audius/mobile @@ -425,9 +584,6 @@ jobs: APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} run: | cd packages/mobile/ios bundle exec fastlane build_and_upload bundle_id:co.audius.audiusmusic.releasecandidate @@ -446,7 +602,7 @@ jobs: mobile-build-upload-releasecandidate-android: name: Android Release Candidate Build & Upload runs-on: ubuntu-latest - needs: [mobile-init, mobile-version-check] + needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' steps: - name: Checkout code @@ -459,6 +615,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Setup Java uses: actions/setup-java@v4 with: @@ -514,6 +673,20 @@ jobs: distribution: 'temurin' java-version: '17' + # The "Free disk space" step above removes $AGENT_TOOLSDIRECTORY, which + # also wipes the Node 24 install from the earlier setup-node step. Without + # this re-setup, npm ci falls back to the runner's system Node 22 and the + # mobile workspace's "engines" check fails with EBADENGINE. + - name: Setup Node.js (after disk cleanup) + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: package-lock.json + + - name: Upgrade npm to 11.10.0 (after disk cleanup) + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -661,8 +834,8 @@ jobs: # iOS Production: Build and upload (requires approval) mobile-build-upload-production-ios-main: name: iOS Production Build & Upload - runs-on: macos-15 - needs: [mobile-init, mobile-version-check] + runs-on: macos-26 + needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' environment: name: mobile-production-ios @@ -678,6 +851,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -754,11 +930,6 @@ jobs: cd packages/mobile/ios RCT_NEW_ARCH_ENABLED=0 bundle exec pod install - - name: Install Sentry CLI - run: | - curl -sL https://sentry.io/get-cli/ | bash - echo "$HOME/.sentry-cli/bin" >> $GITHUB_PATH - - name: Build dependencies timeout-minutes: 60 run: npx turbo run build --filter=@audius/mobile @@ -812,9 +983,6 @@ jobs: APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} run: | cd packages/mobile/ios bundle exec fastlane build_and_upload bundle_id:co.audius.audiusmusic @@ -823,7 +991,7 @@ jobs: mobile-build-upload-production-android-main: name: Android Production Build & Upload runs-on: ubuntu-latest - needs: [mobile-init, mobile-version-check] + needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' environment: name: mobile-production-android @@ -839,6 +1007,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Setup Java uses: actions/setup-java@v4 with: @@ -894,6 +1065,20 @@ jobs: distribution: 'temurin' java-version: '17' + # The "Free disk space" step above removes $AGENT_TOOLSDIRECTORY, which + # also wipes the Node 24 install from the earlier setup-node step. Without + # this re-setup, npm ci falls back to the runner's system Node 22 and the + # mobile workspace's "engines" check fails with EBADENGINE. + - name: Setup Node.js (after disk cleanup) + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: package-lock.json + + - name: Upgrade npm to 11.10.0 (after disk cleanup) + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | diff --git a/.github/workflows/publish-packages.yml b/.github/workflows/publish-packages.yml index 7a264cd168b..a31a55ecb2a 100644 --- a/.github/workflows/publish-packages.yml +++ b/.github/workflows/publish-packages.yml @@ -14,7 +14,7 @@ permissions: concurrency: ${{ github.workflow }}-${{ github.ref }} env: - NODE_VERSION: "22.21.1" + NODE_VERSION: "24.10.0" jobs: changes: @@ -56,7 +56,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 22.21.1 + node-version: 24.10.0 # registry-url for correct registry targeting, but do NOT use always-auth # (that's for token auth, not OIDC) registry-url: "https://registry.npmjs.org" @@ -65,7 +65,7 @@ jobs: run: | echo "Current npm version: $(npm --version)" # OIDC trusted publishing requires npm 11.5.1+ - npm install -g npm@latest + npm install -g npm@11.10.0 echo "Updated npm version: $(npm --version)" - name: Create concatenated patch file diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 4bd0feb596c..f17d6e55340 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -23,7 +23,7 @@ on: workflow_dispatch: env: - NODE_VERSION: '22.21.1' + NODE_VERSION: '24.10.0' jobs: sdk-ci: @@ -40,6 +40,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 95ba393d1d5..346b4b2187a 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -26,7 +26,7 @@ on: workflow_dispatch: env: - NODE_VERSION: '22.21.1' + NODE_VERSION: '24.10.0' jobs: web-init: @@ -43,6 +43,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -99,6 +102,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -159,6 +165,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -216,6 +225,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -288,6 +300,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -379,6 +394,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -547,6 +565,9 @@ jobs: cache: 'npm' cache-dependency-path: package-lock.json + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -622,6 +643,9 @@ jobs: with: node-version: ${{ env.NODE_VERSION }} + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -738,6 +762,9 @@ jobs: with: node-version: ${{ env.NODE_VERSION }} + - name: Upgrade npm to 11.10.0 + run: npm install -g npm@11.10.0 + - name: Create concatenated patch file id: patch-file run: | @@ -837,92 +864,3 @@ jobs: job_url="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" json_content="{ \"blocks\": [{ \"type\": \"section\", \"text\": { \"type\": \"mrkdwn\", \"text\": \"Deployed production <${job_url}|v${deploying_version}> to web \n\" } }]}" curl -f -X POST -H 'Content-type: application/json' --data "$json_content" $SLACK_WEBHOOK - - web-deploy-sentry-sourcemaps: - name: Web Deploy Sentry Sourcemaps - runs-on: ubuntu-latest - needs: [web-build, web-check-ssr-bundlesize] - if: github.ref == 'refs/heads/main' - environment: - name: production - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - - - name: Create concatenated patch file - id: patch-file - run: | - ls -d -- packages/*/patches/*.patch 2>/dev/null | xargs cat > combined-patch-file.txt || touch combined-patch-file.txt - echo "patch_checksum=$(sha256sum combined-patch-file.txt | cut -d' ' -f1)" >> $GITHUB_OUTPUT - - - name: Cache node modules - id: cache-node-modules - uses: actions/cache@v4 - with: - path: | - node_modules - packages/web/node_modules - packages/harmony/node_modules - packages/common/node_modules - packages/libs/node_modules - packages/sdk/node_modules - key: npm-cache-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ steps.patch-file.outputs.patch_checksum }} - restore-keys: | - npm-cache-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}- - - - name: Install dependencies (if cache miss) - if: steps.cache-node-modules.outputs.cache-hit != 'true' - env: - CI: true - SKIP_POD_INSTALL: true - SKIP_ANDROID_INSTALL: true - ANDROID_HOME: /tmp/android-sdk-dummy - NODE_OPTIONS: --max-old-space-size=8192 - run: | - mkdir -p /tmp/android-sdk-dummy - npm ci --prefer-offline - - - name: Run postinstall (if cache hit) - if: steps.cache-node-modules.outputs.cache-hit == 'true' - env: - CI: true - SKIP_POD_INSTALL: true - SKIP_ANDROID_INSTALL: true - ANDROID_HOME: /tmp/android-sdk-dummy - NODE_OPTIONS: --max-old-space-size=8192 - run: | - mkdir -p /tmp/android-sdk-dummy - npm run postinstall - - - name: Download builds - uses: actions/download-artifact@v4 - with: - name: builds - path: packages/web - - - name: Cut Sentry release - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: | - cd packages/web - ../../node_modules/.bin/sentry-cli --auth-token ${SENTRY_AUTH_TOKEN} releases --org audius --project audius-client new ${{ github.sha }} - - - name: Upload sourcemaps - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: | - cd packages/web - ../../node_modules/.bin/sentry-cli --auth-token ${SENTRY_AUTH_TOKEN} sourcemaps upload --org audius --project audius-client --release ${{ github.sha }} build-production/static/js - - - name: Finalize release - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: | - cd packages/web - ../../node_modules/.bin/sentry-cli --auth-token ${SENTRY_AUTH_TOKEN} releases --org audius --project audius-client finalize ${{ github.sha }} - diff --git a/.npmrc b/.npmrc index 05e748da567..2eed4ab469d 100644 --- a/.npmrc +++ b/.npmrc @@ -1,8 +1,13 @@ # TODO: Remove legacy-peer-deps when all peerDependency conflicts # have been resolved in the dependency tree legacy-peer-deps=true +engine-strict=true # ECONNRESET on npm i # possible fix: https://stackoverflow.com/a/61378723 # timeout=60000 # Removed: causes ERR_INVALID_ARG_TYPE with Node 22+ -prefer-offline=true \ No newline at end of file +prefer-offline=true + +# Supply-chain: only install package versions that were published at least +# 7 days ago. Added in npm via https://github.com/npm/cli/pull/8965. +min-release-age=7 \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 59ba107c0b2..78a26fa51c9 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.21.1 \ No newline at end of file +v24.10.0 diff --git a/dev-tools/compose/docker-compose.pedalboard.dev.yml b/dev-tools/compose/docker-compose.pedalboard.dev.yml index 04886390b5c..f43ebdd737c 100644 --- a/dev-tools/compose/docker-compose.pedalboard.dev.yml +++ b/dev-tools/compose/docker-compose.pedalboard.dev.yml @@ -35,15 +35,6 @@ services: volumes: - ${PROJECT_ROOT}:/app - solana-relay: - extends: - file: docker-compose.pedalboard.prod.yml - service: solana-relay - build: - dockerfile: ${PROJECT_ROOT}/packages/discovery-provider/plugins/pedalboard/docker/Dockerfile.dev - volumes: - - ${PROJECT_ROOT}:/app - archiver: user: ${DOCKER_UID:-root}:${DOCKER_GID:-root} extends: diff --git a/dev-tools/compose/docker-compose.pedalboard.prod.yml b/dev-tools/compose/docker-compose.pedalboard.prod.yml index 4a6285a6871..172eaf1e569 100644 --- a/dev-tools/compose/docker-compose.pedalboard.prod.yml +++ b/dev-tools/compose/docker-compose.pedalboard.prod.yml @@ -45,42 +45,6 @@ services: profiles: - pedalboard - solana-relay: - build: - context: ${PROJECT_ROOT} - dockerfile: ${PROJECT_ROOT}/packages/discovery-provider/plugins/pedalboard/docker/Dockerfile.prod - args: - app_name: solana-relay - TURBO_TEAM: '${TURBO_TEAM:-}' - TURBO_TOKEN: '${TURBO_TOKEN:-}' - env_file: .env # used by the startup script - environment: - audius_solana_rewards_manager_program_address: '${SOLANA_REWARD_MANAGER_PUBLIC_KEY}' - audius_solana_rewards_manager_account: '${SOLANA_REWARD_MANAGER_PDA_PUBLIC_KEY}' - audius_solana_user_bank_program_address: '${SOLANA_CLAIMABLE_TOKENS_PUBLIC_KEY}' - audius_solana_payment_router_program_address: '${SOLANA_PAYMENT_ROUTER_PUBLIC_KEY}' - audius_solana_waudio_mint: '${SOLANA_TOKEN_MINT_PUBLIC_KEY}' - audius_solana_usdc_mint: '${SOLANA_USDC_TOKEN_MINT_PUBLIC_KEY}' - audius_solana_fee_payer_wallets: '[{"privateKey":${SOLANA_FEEPAYER_SECRET_KEY}}]' - restart: always - profiles: - - discovery - deploy: - mode: replicated - replicas: '${DISCOVERY_PROVIDER_REPLICAS}' - healthcheck: - test: ['CMD', 'curl', '-f', 'http://127.0.0.1:6002/solana/health_check'] - interval: 1s - timeout: 1s - retries: 120 - depends_on: - db: - condition: service_healthy - discovery-provider-redis: - condition: service_healthy - solana-test-validator: - condition: service_healthy - archiver: container_name: archiver build: diff --git a/dev-tools/compose/docker-compose.yml b/dev-tools/compose/docker-compose.yml index adc91cc6c07..79125ae052b 100644 --- a/dev-tools/compose/docker-compose.yml +++ b/dev-tools/compose/docker-compose.yml @@ -172,12 +172,6 @@ services: service: staking <<: *common - solana-relay: - extends: - file: docker-compose.pedalboard.${DOCKERCOMPOSE_ENV_TYPE:-dev}.yml - service: solana-relay - <<: *common - anti-abuse: extends: file: docker-compose.pedalboard.${DOCKERCOMPOSE_ENV_TYPE:-dev}.yml diff --git a/dev-tools/compose/nginx_ingress.conf b/dev-tools/compose/nginx_ingress.conf index 50486b4f3e6..617d328c0f6 100644 --- a/dev-tools/compose/nginx_ingress.conf +++ b/dev-tools/compose/nginx_ingress.conf @@ -22,13 +22,6 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - location ~ ^/solana(/.*)?$ { - resolver 127.0.0.11 valid=30s; - proxy_pass http://audius-solana-relay-1:6002/solana$1; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - location ~ ^/console(/.*)?$ { resolver 127.0.0.11 valid=30s; proxy_pass http://audiusd-1:26659/console$1; @@ -64,13 +57,6 @@ server { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - - location ~ ^/solana(/.*)?$ { - resolver 127.0.0.11 valid=30s; - proxy_pass http://audius-solana-relay-2:6002/solana$1; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } } server { @@ -84,13 +70,6 @@ server { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - - location ~ ^/solana(/.*)?$ { - resolver 127.0.0.11 valid=30s; - proxy_pass http://audius-solana-relay-3:6002/solana$1; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } } # diff --git a/monitoring/vector/vector.toml b/monitoring/vector/vector.toml index 62d29813d68..9fee4fb2a4d 100644 --- a/monitoring/vector/vector.toml +++ b/monitoring/vector/vector.toml @@ -12,8 +12,6 @@ "notifications", "chain", "mediorum", - "relay", - "solana-relay", "core", "audiusd" ] diff --git a/package-lock.json b/package-lock.json index 65fe58ea243..64b2bda8be6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@emotion/eslint-plugin": "11.12.0", - "@sentry/cli": "3.1.0", + "@react-native/metro-babel-transformer": "0.79.5", "@tsconfig/strictest": "2.0.2", "@types/keyv": "4.2.0", "@types/react": "19.0.0", @@ -77,6 +77,10 @@ "typescript": "5.0.4", "vike": "^0.4.247", "wait-on": "7.2.0" + }, + "engines": { + "node": ">=24.10.0", + "npm": ">=11.10.0" } }, "node_modules/@0no-co/graphql.web": { @@ -2864,6 +2868,7 @@ }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.25.9", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -3221,6 +3226,7 @@ "version": "7.26.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" @@ -3279,6 +3285,7 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.25.9", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -3413,6 +3420,7 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.25.9", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -3456,6 +3464,7 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.25.9", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -3684,6 +3693,7 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.26.5", "regenerator-transform": "^0.15.2" @@ -4130,6 +4140,25 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/register": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz", + "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.18.3", "license": "MIT", @@ -5725,6 +5754,7 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -6080,14 +6110,6 @@ "node": ">=11" } }, - "node_modules/@coral-xyz/anchor-errors": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.31.1.tgz", - "integrity": "sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==", - "engines": { - "node": ">=10" - } - }, "node_modules/@coral-xyz/anchor/node_modules/camelcase": { "version": "6.3.0", "license": "MIT", @@ -7893,16 +7915,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -12620,51 +12632,6 @@ "node": ">=14" } }, - "node_modules/@fingerprintjs/fingerprintjs": { - "version": "3.3.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - } - }, - "node_modules/@fingerprintjs/fingerprintjs-pro": { - "version": "3.5.6", - "dependencies": { - "@fingerprintjs/fingerprintjs": "3.3.3", - "tslib": "^2.0.1" - } - }, - "node_modules/@fingerprintjs/fingerprintjs-pro-react-native": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@fingerprintjs/fingerprintjs-pro-react-native/-/fingerprintjs-pro-react-native-3.9.0.tgz", - "integrity": "sha512-eu8AkyILtV7MU+70aVO8Prn0nEe9gKi9yohE8//hunOv6B0F4QbwJEFp9r6BW9isxw1LKGvjVq640XvR+iUbCw==", - "license": "MIT", - "peerDependencies": { - "@fingerprintjs/fingerprintjs-pro-spa": "^1.3.2", - "expo": ">=51.0.0", - "react": "*", - "react-dom": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@fingerprintjs/fingerprintjs-pro-spa": { - "optional": true - }, - "expo": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@fingerprintjs/fingerprintjs-pro-server-api": { - "version": "4.1.2", - "license": "MIT", - "engines": { - "node": ">=18.17.0" - } - }, "node_modules/@floating-ui/core": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", @@ -12958,456 +12925,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.1.1" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@improbable-eng/grpc-web": { "version": "0.14.1", "license": "Apache-2.0", @@ -14266,2675 +13783,1737 @@ "multiformats": "^9.5.4" } }, - "node_modules/@irys/arweave": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@irys/arweave/-/arweave-0.0.2.tgz", - "integrity": "sha512-ddE5h4qXbl0xfGlxrtBIwzflaxZUDlDs43TuT0u1OMfyobHul4AA1VEX72Rpzw2bOh4vzoytSqA1jCM7x9YtHg==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", "dependencies": { - "asn1.js": "^5.4.1", - "async-retry": "^1.3.3", - "axios": "^1.4.0", - "base64-js": "^1.5.1", - "bignumber.js": "^9.1.1" + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" } }, - "node_modules/@irys/arweave/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "license": "ISC", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "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" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@irys/arweave/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@irys/arweave/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@irys/bundles": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@irys/bundles/-/bundles-0.0.1.tgz", - "integrity": "sha512-yeQNzElERksFbfbNxJQsMkhtkI3+tNqIMZ/Wwxh76NVBmCnCP5huefOv7ET0MOO7TEQL+TqvKSqmFklYSvTyHw==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@irys/arweave": "^0.0.2", - "@noble/ed25519": "^1.6.1", - "base64url": "^3.0.1", - "bs58": "^4.0.1", - "keccak": "^3.0.2", - "secp256k1": "^5.0.0" + "ansi-regex": "^6.0.1" }, - "optionalDependencies": { - "@randlabs/myalgo-connect": "^1.1.2", - "algosdk": "^1.13.1", - "arweave-stream-tx": "^1.1.0", - "multistream": "^4.1.0", - "tmp-promise": "^3.0.2" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "license": "ISC", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/console": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] + "node_modules/@jest/core/node_modules/emittery": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/jest-docblock": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/jest-leak-detector": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/jest-runner": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "node_modules/@jest/core/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/source-map-support": { + "version": "0.5.13", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@irys/bundles/node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/@irys/bundles/node_modules/algosdk": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", - "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", - "optional": true, + "node_modules/@jest/globals": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.2", - "cross-fetch": "^3.1.5", - "hi-base32": "^0.5.1", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "json-bigint": "^1.0.0", - "tweetnacl": "^1.0.3", - "vlq": "^2.0.4" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=14.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@irys/bundles/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node_modules/@irys/bundles/node_modules/secp256k1": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", - "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", - "hasInstallScript": true, + "node_modules/@jest/globals/node_modules/@jest/expect": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/bundles/node_modules/vlq": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", - "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", - "optional": true - }, - "node_modules/@irys/bundles/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, "engines": { - "node": ">=10.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "node-notifier": { "optional": true } } }, - "node_modules/@irys/query": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@irys/query/-/query-0.0.9.tgz", - "integrity": "sha512-uBIy8qeOQupUSBzR+1KU02JJXFp5Ue9l810PIbBF/ylUB8RTreUFkyyABZ7J3FUaOIXFYrT7WVFSJSzXM7P+8w==", + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "async-retry": "^1.3.3", - "axios": "^1.4.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@irys/query/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@irys/query/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@irys/query/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/@irys/upload": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@irys/upload/-/upload-0.0.14.tgz", - "integrity": "sha512-6XdkyS5cVINcPjv1MzA6jDsawfG7Bw6sq5wilNx5B4X7nNotBPC3SuRrZs06G/0BTUj15W+TRO/tZTDWRUfZzA==", - "dependencies": { - "@irys/bundles": "^0.0.1", - "@irys/upload-core": "^0.0.9", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2", - "csv-parse": "^5.5.6", - "csv-stringify": "^6.5.1", - "inquirer": "^8.2.0", - "mime-types": "^2.1.35" + "node": ">=10" } }, - "node_modules/@irys/upload-core": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@irys/upload-core/-/upload-core-0.0.9.tgz", - "integrity": "sha512-Ha4pX8jgYBA3dg5KHDPk+Am0QO+SmvnmgCwKa6uiDXZKuVr0neSx4V1OAHoP+As+j7yYgfChdsdrvsNzZGGehA==", + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@irys/bundles": "^0.0.1", - "@irys/query": "^0.0.9", - "@supercharge/promise-pool": "^3.1.1", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@irys/upload-core/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@irys/upload-core/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/@jest/reporters/node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@irys/upload-core/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/@irys/upload-solana": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@irys/upload-solana/-/upload-solana-0.1.8.tgz", - "integrity": "sha512-pJyG8uJ3NIpbIGDA9hYRHij5xF1DrU0QMa4i2mVJlYwbSdQfNdcJ8SdT4ZsrTh1g/+OWMzbo2l/ziMY1Js9HGA==", - "dependencies": { - "@irys/bundles": "^0.0.3", - "@irys/upload": "^0.0.15", - "@irys/upload-core": "^0.0.10", - "@solana/spl-token": "^0.4.8", - "@solana/web3.js": "^1.95.3", - "async-retry": "^1.3.3", - "bignumber.js": "^9.1.2", - "bs58": "5.0.0", - "tweetnacl": "^1.0.3" - } + "node_modules/@jest/reporters/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/schemas": { + "version": "29.6.3", + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/source-map": { + "version": "29.6.3", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/test-result": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "node_modules/@jest/test-sequencer/node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/transform": { + "version": "29.7.0", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "license": "ISC", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/types": { + "version": "29.6.3", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/bmp": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/core": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "node_modules/@jimp/core/node_modules/buffer": { + "version": "5.7.1", "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "consulting", + "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" + "node_modules/@jimp/core/node_modules/file-type": { + "version": "9.0.0", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/custom": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/gif": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/jpeg": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/plugin-blit": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@irys/bundles": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@irys/bundles/-/bundles-0.0.3.tgz", - "integrity": "sha512-zSorcWJO0W7WHBPaTF6C3FNig1ZrCSKIDqnkk91SLl9jcybz5bWmthUFL2D7ywzh1XV5tZQC09bkNJRcXeeGOA==", + "node_modules/@jimp/plugin-blur": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@irys/arweave": "^0.0.2", - "@noble/ed25519": "^1.6.1", - "base64url": "^3.0.1", - "bs58": "^4.0.1", - "keccak": "^3.0.2", - "secp256k1": "^5.0.0", - "starknet": "^6.21.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "optionalDependencies": { - "@randlabs/myalgo-connect": "^1.1.2", - "algosdk": "^1.13.1", - "arweave-stream-tx": "^1.1.0", - "multistream": "^4.1.0", - "tmp-promise": "^3.0.2" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@irys/bundles/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@jimp/plugin-circle": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@irys/upload": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@irys/upload/-/upload-0.0.15.tgz", - "integrity": "sha512-VS1ieI8Hipv7F/odL2rDfn0S9VCwj3GFhROI8el0RjzpcaXCobezP0V4yuvppyB+E4Oiu6xQTXooaIBh/S7xPA==", + "node_modules/@jimp/plugin-color": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@irys/bundles": "^0.0.3", - "@irys/upload-core": "^0.0.10", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2", - "csv-parse": "^5.5.6", - "csv-stringify": "^6.5.1", - "inquirer": "^8.2.0", - "mime-types": "^2.1.35" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@irys/upload-core": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@irys/upload-core/-/upload-core-0.0.10.tgz", - "integrity": "sha512-E7kCNSOTPqwBbnd2wnnklPrR0HtLnENmu5NVhgs+B9cUeyN9AcvzRDOJLKNmYS6q514bDwb/PUgB+vP/070now==", + "node_modules/@jimp/plugin-contain": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@irys/bundles": "^0.0.3", - "@irys/query": "^0.0.9", - "@supercharge/promise-pool": "^3.1.1", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/@solana/spl-token": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.13.tgz", - "integrity": "sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==", + "node_modules/@jimp/plugin-cover": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-group": "^0.0.7", - "@solana/spl-token-metadata": "^0.1.6", - "buffer": "^6.0.3" - }, - "engines": { - "node": ">=16" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, "peerDependencies": { - "@solana/web3.js": "^1.95.5" + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/@irys/upload-solana/node_modules/algosdk": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", - "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", - "optional": true, + "node_modules/@jimp/plugin-crop": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.2", - "cross-fetch": "^3.1.5", - "hi-base32": "^0.5.1", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "json-bigint": "^1.0.0", - "tweetnacl": "^1.0.3", - "vlq": "^2.0.4" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "node_modules/@jimp/plugin-displace": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@irys/upload-solana/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "node_modules/@jimp/plugin-dither": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "base-x": "^4.0.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/bs58/node_modules/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" - }, - "node_modules/@irys/upload-solana/node_modules/csv-parse": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz", - "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==" - }, - "node_modules/@irys/upload-solana/node_modules/csv-stringify": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.6.0.tgz", - "integrity": "sha512-YW32lKOmIBgbxtu3g5SaiqWNwa/9ISQt2EcgOq0+RAIFufFp9is6tqNnKahqE5kuKvrnYAzs28r+s6pXJR8Vcw==" - }, - "node_modules/@irys/upload-solana/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "node_modules/@jimp/plugin-fisheye": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/@jimp/plugin-flip": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + "node_modules/@jimp/plugin-gaussian": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } }, - "node_modules/@irys/upload-solana/node_modules/secp256k1": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", - "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", - "hasInstallScript": true, + "node_modules/@jimp/plugin-invert": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload-solana/node_modules/vlq": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", - "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", - "optional": true + "node_modules/@jimp/plugin-mask": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } }, - "node_modules/@irys/upload-solana/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "engines": { - "node": ">=10.0.0" + "node_modules/@jimp/plugin-normalize": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" } }, - "node_modules/@irys/upload/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "node_modules/@jimp/plugin-resize": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/upload/node_modules/csv-parse": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz", - "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==" + "node_modules/@jimp/plugin-rotate": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } }, - "node_modules/@irys/upload/node_modules/csv-stringify": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.6.0.tgz", - "integrity": "sha512-YW32lKOmIBgbxtu3g5SaiqWNwa/9ISQt2EcgOq0+RAIFufFp9is6tqNnKahqE5kuKvrnYAzs28r+s6pXJR8Vcw==" + "node_modules/@jimp/plugin-scale": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } }, - "node_modules/@irys/upload/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "node_modules/@jimp/plugin-shadow": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" } }, - "node_modules/@irys/upload/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/@jimp/plugin-threshold": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" } }, - "node_modules/@irys/web-upload": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@irys/web-upload/-/web-upload-0.0.14.tgz", - "integrity": "sha512-vBIslG2KSGyeJjZNTbSvLmGO/bbHS1jcDkD0A1aLgx7xkiTpfdbXOrn4hznPkzQhPtluX4aL44On0GXrEcD8eQ==", + "node_modules/@jimp/plugins": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@irys/bundles": "^0.0.1", - "@irys/upload-core": "^0.0.9", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2", - "mime-types": "^2.1.35" + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/web-upload-solana": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@irys/web-upload-solana/-/web-upload-solana-0.1.8.tgz", - "integrity": "sha512-jzPihVOFbvTiJRwsWDOiip8CNk2I5TAkyZwWbkeFJQRvX95HOw1iI4KlbeBTDc6EJcyj8BWsxkMqIE/cBqlKoQ==", - "dependencies": { - "@irys/bundles": "^0.0.3", - "@irys/upload-core": "^0.0.10", - "@irys/web-upload": "^0.0.15", - "@solana/spl-token": "^0.4.8", - "@solana/web3.js": "^1.95.3", - "async-retry": "^1.3.3", - "bignumber.js": "^9.1.2", - "bs58": "5.0.0", - "tweetnacl": "^1.0.3" + "node_modules/@jimp/png": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/tiff": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/types": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jimp/utils": { + "version": "0.14.0", + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@josephg/resolvable": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@juggle/resize-observer": { + "version": "3.3.1", + "license": "Apache-2.0" + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==" + }, + "node_modules/@lezer/common": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.1.tgz", + "integrity": "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==", + "license": "MIT" + }, + "node_modules/@lezer/css": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.1.tgz", + "integrity": "sha512-PYAKeUVBo3HFThruRyp/iK91SwiZJnzXh8QzkQlwijB5y+N5iB28+iLk78o2zmKqqV0uolNhCwFqB8LA7b0Svg==", + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lezer/highlight": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@lezer/common": "^1.3.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lezer/html": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz", + "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lezer/javascript": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz", + "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] + "node_modules/@lezer/lr": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.8.tgz", + "integrity": "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lezer/xml": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz", + "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lezer/yaml": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.4.tgz", + "integrity": "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==", + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.4.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz", + "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "license": "BSD-3-Clause", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@lit-labs/ssr-dom-shim": "^1.0.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "url": "https://github.com/sponsors/malept" }, { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" } ], + "license": "Apache-2.0", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@malept/cross-spawn-promise/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" + "node_modules/@malept/cross-spawn-promise/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@malept/cross-spawn-promise/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" + "node_modules/@malept/cross-spawn-promise/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@irys/web-upload-solana/node_modules/@irys/bundles": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@irys/bundles/-/bundles-0.0.3.tgz", - "integrity": "sha512-zSorcWJO0W7WHBPaTF6C3FNig1ZrCSKIDqnkk91SLl9jcybz5bWmthUFL2D7ywzh1XV5tZQC09bkNJRcXeeGOA==", + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@irys/arweave": "^0.0.2", - "@noble/ed25519": "^1.6.1", - "base64url": "^3.0.1", - "bs58": "^4.0.1", - "keccak": "^3.0.2", - "secp256k1": "^5.0.0", - "starknet": "^6.21.0" + "universalify": "^2.0.0" }, "optionalDependencies": { - "@randlabs/myalgo-connect": "^1.1.2", - "algosdk": "^1.13.1", - "arweave-stream-tx": "^1.1.0", - "multistream": "^4.1.0", - "tmp-promise": "^3.0.2" - } - }, - "node_modules/@irys/web-upload-solana/node_modules/@irys/bundles/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" + "graceful-fs": "^4.1.6" } }, - "node_modules/@irys/web-upload-solana/node_modules/@irys/upload-core": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@irys/upload-core/-/upload-core-0.0.10.tgz", - "integrity": "sha512-E7kCNSOTPqwBbnd2wnnklPrR0HtLnENmu5NVhgs+B9cUeyN9AcvzRDOJLKNmYS6q514bDwb/PUgB+vP/070now==", - "dependencies": { - "@irys/bundles": "^0.0.3", - "@irys/query": "^0.0.9", - "@supercharge/promise-pool": "^3.1.1", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2" - } - }, - "node_modules/@irys/web-upload-solana/node_modules/@irys/web-upload": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@irys/web-upload/-/web-upload-0.0.15.tgz", - "integrity": "sha512-ajwy+CHEL+OH6UpO3dDT6xAK5XmJy2xK9Qb4aj+7uphSUczEiSxuSsO0sz/ekAgO/Ymwgkdozk3U1WAnUjbxMg==", - "dependencies": { - "@irys/bundles": "^0.0.3", - "@irys/upload-core": "^0.0.10", - "async-retry": "^1.3.3", - "axios": "^1.7.5", - "base64url": "^3.0.1", - "bignumber.js": "^9.1.2", - "mime-types": "^2.1.35" + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/@solana/spl-token": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.13.tgz", - "integrity": "sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==", + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "license": "MIT", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-group": "^0.0.7", - "@solana/spl-token-metadata": "^0.1.6", - "buffer": "^6.0.3" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.95.5" + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "license": "MIT" }, - "node_modules/@irys/web-upload-solana/node_modules/algosdk": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-1.24.1.tgz", - "integrity": "sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww==", - "optional": true, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "license": "MIT", "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.2", - "cross-fetch": "^3.1.5", - "hi-base32": "^0.5.1", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "json-bigint": "^1.0.0", - "tweetnacl": "^1.0.3", - "vlq": "^2.0.4" - }, - "engines": { - "node": ">=14.0.0" + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "license": "MIT" }, - "node_modules/@irys/web-upload-solana/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", + "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "license": "MIT" }, - "node_modules/@irys/web-upload-solana/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", "dependencies": { - "base-x": "^4.0.0" + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@irys/web-upload-solana/node_modules/bs58/node_modules/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" + "node_modules/@mdx-js/mdx/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, - "node_modules/@irys/web-upload-solana/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node_modules/@mdx-js/mdx/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" } }, - "node_modules/@irys/web-upload-solana/node_modules/form-data": { + "node_modules/@mdx-js/mdx/node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "@types/unist": "*" } }, - "node_modules/@irys/web-upload-solana/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + "node_modules/@mdx-js/mdx/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" }, - "node_modules/@irys/web-upload-solana/node_modules/secp256k1": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", - "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" + "node_modules/@mdx-js/mdx/node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=18.0.0" + "node": ">=0.4.0" } }, - "node_modules/@irys/web-upload-solana/node_modules/vlq": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", - "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", - "optional": true - }, - "node_modules/@irys/web-upload-solana/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node_modules/@mdx-js/mdx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@irys/web-upload/node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "node_modules/@mdx-js/mdx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@irys/web-upload/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node_modules/@mdx-js/mdx/node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@irys/web-upload/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/@mdx-js/mdx/node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "license": "MIT", - "engines": { - "node": "20 || >=22" + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "license": "ISC", + "node_modules/@mdx-js/mdx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", "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" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/@mdx-js/mdx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", - "engines": { - "node": ">=12" - }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/@mdx-js/mdx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", - "engines": { - "node": ">=12" - }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { "node": ">=12" }, @@ -16942,2820 +15521,3001 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/@mdx-js/mdx/node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "@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" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "license": "MIT", - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@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" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core/node_modules/@jest/environment": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@types/mdast": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@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" } }, - "node_modules/@jest/core/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@mdx-js/mdx/node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "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" } }, - "node_modules/@jest/core/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core/node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core/node_modules/emittery": { - "version": "0.13.1", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core/node_modules/jest-docblock": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/core/node_modules/jest-environment-node": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/core/node_modules/jest-leak-detector": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/core/node_modules/jest-runner": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" } }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=8" + "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" } }, - "node_modules/@jest/core/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/@mdx-js/mdx/node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" } }, - "node_modules/@jest/core/node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/globals/node_modules/@jest/environment": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/@jest/globals/node_modules/@jest/expect": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "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" } }, - "node_modules/@jest/globals/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" } }, - "node_modules/@jest/globals/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@mdx-js/mdx/node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/@jest/globals/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@mdx-js/mdx/node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx/node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@mdx-js/mdx/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=10" + "node": ">= 12" } }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@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" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/reporters/node_modules/yallist": { + "node_modules/@mdx-js/mdx/node_modules/unist-util-stringify-position": { "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@types/unist": "^3.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "dev": true, + "node_modules/@mdx-js/mdx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", + "node_modules/@mdx-js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@types/mdx": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@mdx-js/rollup": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.1.1.tgz", + "integrity": "sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@mdx-js/mdx": "^3.0.0", + "@rollup/pluginutils": "^5.0.0", + "source-map": "^0.7.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "rollup": ">=2" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@mdx-js/rollup/node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", + "node_modules/@mdx-js/rollup/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", + "node_modules/@mdx-js/rollup/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@mdx-js/rollup/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/@mdx-js/rollup/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "license": "ISC", + "node_modules/@mdx-js/rollup/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "@types/unist": "^3.0.0" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/types": { - "version": "29.6.3", + "node_modules/@mdx-js/rollup/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@mdx-js/rollup/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", + "node_modules/@metamask/eth-json-rpc-provider": { + "version": "1.0.1", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@metamask/json-rpc-engine": "^7.0.0", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/safe-event-emitter": { + "version": "3.1.1", + "license": "ISC", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/utils": { + "version": "5.0.2", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/@jimp/bmp": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "bmp-js": "^0.1.0" + "yallist": "^4.0.0" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": ">=10" } }, - "node_modules/@jimp/core": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/semver": { + "version": "7.6.0", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@jimp/core/node_modules/buffer": { - "version": "5.7.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@metamask/json-rpc-engine": { + "version": "7.3.3", + "license": "ISC", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jimp/core/node_modules/file-type": { - "version": "9.0.0", - "license": "MIT", + "node_modules/@metamask/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { + "version": "3.1.1", + "license": "ISC", "engines": { - "node": ">=6" + "node": ">=12.0.0" } }, - "node_modules/@jimp/custom": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/json-rpc-middleware-stream": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.2.tgz", + "integrity": "sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.14.0" + "@metamask/json-rpc-engine": "^8.0.2", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jimp/gif": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/json-rpc-middleware-stream/node_modules/@metamask/json-rpc-engine": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", + "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jimp/jpeg": { - "version": "0.14.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "jpeg-js": "^0.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "node_modules/@metamask/json-rpc-middleware-stream/node_modules/@metamask/safe-event-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", + "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", + "license": "ISC", + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@jimp/plugin-blit": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/object-multiplex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.1.0.tgz", + "integrity": "sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "once": "^1.4.0", + "readable-stream": "^3.6.2" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@jimp/plugin-blur": { - "version": "0.14.0", + "node_modules/@metamask/onboarding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@metamask/onboarding/-/onboarding-1.0.1.tgz", + "integrity": "sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "bowser": "^2.9.0" } }, - "node_modules/@jimp/plugin-circle": { - "version": "0.14.0", + "node_modules/@metamask/providers": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-16.1.0.tgz", + "integrity": "sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "@metamask/json-rpc-engine": "^8.0.1", + "@metamask/json-rpc-middleware-stream": "^7.0.1", + "@metamask/object-multiplex": "^2.0.0", + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^8.3.0", + "detect-browser": "^5.2.0", + "extension-port-stream": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "is-stream": "^2.0.0", + "readable-stream": "^3.6.2", + "webextension-polyfill": "^0.10.0" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@jimp/plugin-color": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/providers/node_modules/@metamask/json-rpc-engine": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", + "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "tinycolor2": "^1.4.1" + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jimp/plugin-contain": { - "version": "0.14.0", + "node_modules/@metamask/providers/node_modules/@metamask/safe-event-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", + "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", + "license": "ISC", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/rpc-errors": { + "version": "6.2.1", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "@metamask/utils": "^8.3.0", + "fast-safe-stringify": "^2.0.6" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jimp/plugin-cover": { - "version": "0.14.0", + "node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/@metamask/superstruct": { + "version": "3.1.0", "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils": { + "version": "8.4.0", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "@ethereumjs/tx": "^4.2.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "superstruct": "^1.0.3", + "uuid": "^9.0.1" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jimp/plugin-crop": { - "version": "0.14.0", + "node_modules/@metamask/utils/node_modules/@scure/base": { + "version": "1.1.3", "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@metamask/utils/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "yallist": "^4.0.0" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "engines": { + "node": ">=10" } }, - "node_modules/@jimp/plugin-displace": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metamask/utils/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "lru-cache": "^6.0.0" }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@jimp/plugin-dither": { - "version": "0.14.0", + "node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/utils/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@metaplex-foundation/beet": { + "version": "0.7.2", + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "ansicolors": "^0.3.2", + "assert": "^2.1.0", + "bn.js": "^5.2.0", + "debug": "^4.3.3" } }, - "node_modules/@jimp/plugin-fisheye": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/beet-solana": { + "version": "0.4.1", + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@metaplex-foundation/beet": ">=0.1.0", + "@solana/web3.js": "^1.56.2", + "bs58": "^5.0.0", + "debug": "^4.3.4" } }, - "node_modules/@jimp/plugin-flip": { - "version": "0.14.0", + "node_modules/@metaplex-foundation/beet-solana/node_modules/base-x": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/@metaplex-foundation/beet-solana/node_modules/bs58": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-rotate": ">=0.3.5" + "base-x": "^4.0.0" } }, - "node_modules/@jimp/plugin-gaussian": { - "version": "0.14.0", + "node_modules/@metaplex-foundation/beet/node_modules/assert": { + "version": "2.1.0", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, - "node_modules/@jimp/plugin-invert": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/cusper": { + "version": "0.0.2", + "license": "Apache-2.0" + }, + "node_modules/@metaplex-foundation/mpl-token-metadata": { + "version": "3.2.1", + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "@metaplex-foundation/mpl-toolbox": "^0.9.4" }, "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@metaplex-foundation/umi": ">= 0.8.2 < 1" } }, - "node_modules/@jimp/plugin-mask": { - "version": "0.14.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, + "node_modules/@metaplex-foundation/mpl-toolbox": { + "version": "0.9.4", + "license": "Apache-2.0", "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@metaplex-foundation/umi": ">= 0.8.2 < 1" } }, - "node_modules/@jimp/plugin-normalize": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/umi": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-1.2.0.tgz", + "integrity": "sha512-SIcDO8O9gRYL2C5ntsedVfpRBICK7ZoMB5ap8P5N2TEJ/QC205UxDzhdQsImdWQG1DQ7XJsDXWiiFzccpFZcSg==", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@metaplex-foundation/umi-options": "^1.2.0", + "@metaplex-foundation/umi-public-keys": "^1.2.0", + "@metaplex-foundation/umi-serializers": "^1.2.0" } }, - "node_modules/@jimp/plugin-print": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-1.2.0.tgz", + "integrity": "sha512-dNEfhDg9PUoosU46SnmB8PzdhgAF7qJ0RUkn5keLKU2s0Xy2DKZVtdaELTfMZZckhaDvOzRTKdphTRrEwIjbyw==" + }, + "node_modules/@metaplex-foundation/umi-public-keys": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-1.2.0.tgz", + "integrity": "sha512-UZISKLcrsAQ3M17JCkNIXtacoKHpSNEgXHGcxyJp7zfJkdLDq5Qlvd7KeyZoYC7A7XuA3lAlVY14qhhIwC5p5w==", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "load-bmfont": "^1.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5" + "@metaplex-foundation/umi-serializers-encodings": "^1.2.0" } }, - "node_modules/@jimp/plugin-resize": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-serializers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-1.2.0.tgz", + "integrity": "sha512-7ivgqVP6ZouN13EBN5aMirjoX2x0Ja7IuzrBeIa8YYrxGcy7YQp+fUj4YCPtMClzsETgJ5jL8EZnZPpZX4dxaQ==", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@metaplex-foundation/umi-options": "^1.2.0", + "@metaplex-foundation/umi-public-keys": "^1.2.0", + "@metaplex-foundation/umi-serializers-core": "^1.2.0", + "@metaplex-foundation/umi-serializers-encodings": "^1.2.0", + "@metaplex-foundation/umi-serializers-numbers": "^1.2.0" } }, - "node_modules/@jimp/plugin-rotate": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-serializers-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-1.2.0.tgz", + "integrity": "sha512-9scqhjkjW8tJ+/q1veh73jQjo9vvgTN5iN4OfOYFMtFVTT8/y2AVxGmniV/DbQC5wIgx7WTZkAnJmqOMs2904Q==" + }, + "node_modules/@metaplex-foundation/umi-serializers-encodings": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-1.2.0.tgz", + "integrity": "sha512-Yo3TPI9ei8Z5eTJ1UeT12+pYaQ1zMSn57/M/3r4WAOTFtTCOuKsDRKg8eBQCpBuffH8yGUbRs0poy1n25IzeNg==", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" + "@metaplex-foundation/umi-serializers-core": "^1.2.0" } }, - "node_modules/@jimp/plugin-scale": { - "version": "0.14.0", - "license": "MIT", + "node_modules/@metaplex-foundation/umi-serializers-numbers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-1.2.0.tgz", + "integrity": "sha512-ZBVb498GHYlfB+1JzOcczJ1LrCYWr0IiiXjeEAf+64mSSp3IFwK7D3rjL6RZ05bjxBzuWDJVRzI+mFVFC9UgtQ==", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" + "@metaplex-foundation/umi-serializers-core": "^1.2.0" } }, - "node_modules/@jimp/plugin-shadow": { - "version": "0.14.0", + "node_modules/@motionone/animation": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blur": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" } }, - "node_modules/@jimp/plugin-threshold": { - "version": "0.14.0", + "node_modules/@motionone/dom": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", + "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-color": ">=0.8.0", - "@jimp/plugin-resize": ">=0.8.0" + "@motionone/animation": "^10.18.0", + "@motionone/generators": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" } }, - "node_modules/@jimp/plugins": { - "version": "0.14.0", + "node_modules/@motionone/easing": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.14.0", - "@jimp/plugin-blur": "^0.14.0", - "@jimp/plugin-circle": "^0.14.0", - "@jimp/plugin-color": "^0.14.0", - "@jimp/plugin-contain": "^0.14.0", - "@jimp/plugin-cover": "^0.14.0", - "@jimp/plugin-crop": "^0.14.0", - "@jimp/plugin-displace": "^0.14.0", - "@jimp/plugin-dither": "^0.14.0", - "@jimp/plugin-fisheye": "^0.14.0", - "@jimp/plugin-flip": "^0.14.0", - "@jimp/plugin-gaussian": "^0.14.0", - "@jimp/plugin-invert": "^0.14.0", - "@jimp/plugin-mask": "^0.14.0", - "@jimp/plugin-normalize": "^0.14.0", - "@jimp/plugin-print": "^0.14.0", - "@jimp/plugin-resize": "^0.14.0", - "@jimp/plugin-rotate": "^0.14.0", - "@jimp/plugin-scale": "^0.14.0", - "@jimp/plugin-shadow": "^0.14.0", - "@jimp/plugin-threshold": "^0.14.0", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" } }, - "node_modules/@jimp/png": { - "version": "0.14.0", + "node_modules/@motionone/generators": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "pngjs": "^3.3.3" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" } }, - "node_modules/@jimp/tiff": { - "version": "0.14.0", + "node_modules/@motionone/svelte": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/svelte/-/svelte-10.16.4.tgz", + "integrity": "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" } }, - "node_modules/@jimp/types": { - "version": "0.14.0", + "node_modules/@motionone/types": { + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", + "license": "MIT" + }, + "node_modules/@motionone/utils": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.14.0", - "@jimp/gif": "^0.14.0", - "@jimp/jpeg": "^0.14.0", - "@jimp/png": "^0.14.0", - "@jimp/tiff": "^0.14.0", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" + "@motionone/types": "^10.17.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" } }, - "node_modules/@jimp/utils": { - "version": "0.14.0", + "node_modules/@motionone/vue": { + "version": "10.16.4", + "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", + "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", + "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" } }, - "node_modules/@josephg/resolvable": { - "version": "1.0.1", - "dev": true, - "license": "ISC" + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mswjs/cookies": { + "version": "0.2.2", + "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@mswjs/interceptors": { + "version": "0.17.10", + "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@open-draft/until": "^1.0.3", + "@types/debug": "^4.1.7", + "@xmldom/xmldom": "^0.8.3", + "debug": "^4.3.3", + "headers-polyfill": "3.2.5", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.2.4", + "web-encoding": "^1.1.5" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", + "node_modules/@mswjs/interceptors/node_modules/events": { + "version": "3.3.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=0.8.x" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", + "node_modules/@mswjs/interceptors/node_modules/strict-event-emitter": { + "version": "0.2.8", + "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "events": "^3.3.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "node_modules/@multiformats/base-x": { + "version": "4.0.1", "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "node_modules/@multiformats/murmur3": { + "version": "1.1.3", + "license": "(Apache-2.0 AND MIT)", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "multiformats": "^9.5.4", + "murmurhash3js-revisited": "^3.0.0" } }, - "node_modules/@juggle/resize-observer": { - "version": "3.3.1", - "license": "Apache-2.0" - }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==" + "node_modules/@mysten/bcs": { + "version": "0.11.1", + "license": "Apache-2.0", + "dependencies": { + "bs58": "^5.0.0" + } }, - "node_modules/@lezer/common": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.1.tgz", - "integrity": "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==", + "node_modules/@mysten/bcs/node_modules/base-x": { + "version": "4.0.0", "license": "MIT" }, - "node_modules/@lezer/css": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.1.tgz", - "integrity": "sha512-PYAKeUVBo3HFThruRyp/iK91SwiZJnzXh8QzkQlwijB5y+N5iB28+iLk78o2zmKqqV0uolNhCwFqB8LA7b0Svg==", + "node_modules/@mysten/bcs/node_modules/bs58": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.3.0" + "base-x": "^4.0.0" } }, - "node_modules/@lezer/highlight": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", - "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", - "license": "MIT", + "node_modules/@mysten/sui.js": { + "version": "0.50.1", + "license": "Apache-2.0", "dependencies": { - "@lezer/common": "^1.3.0" + "@graphql-typed-document-node/core": "^3.2.0", + "@mysten/bcs": "0.11.1", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "@scure/bip32": "^1.3.1", + "@scure/bip39": "^1.2.1", + "@suchipi/femver": "^1.0.0", + "bech32": "^2.0.0", + "gql.tada": "^1.2.0", + "graphql": "^16.8.1", + "superstruct": "^1.0.3", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=16" } }, - "node_modules/@lezer/html": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz", - "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", + "node_modules/@nestjs/common": { + "version": "8.2.6", + "dev": true, "license": "MIT", "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" + "axios": "0.24.0", + "iterare": "1.2.1", + "tslib": "2.3.1", + "uuid": "8.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "cache-manager": "*", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "cache-manager": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } } }, - "node_modules/@lezer/javascript": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz", - "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", + "node_modules/@nestjs/common/node_modules/axios": { + "version": "0.24.0", + "dev": true, "license": "MIT", "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.1.3", - "@lezer/lr": "^1.3.0" + "follow-redirects": "^1.14.4" } }, - "node_modules/@lezer/json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", - "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "node_modules/@nestjs/common/node_modules/follow-redirects": { + "version": "1.15.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/@lezer/lr": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.8.tgz", - "integrity": "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==", + "node_modules/@nestjs/common/node_modules/tslib": { + "version": "2.3.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@nestjs/common/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@nestjs/core": { + "version": "8.2.6", + "dev": true, + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@lezer/common": "^1.0.0" + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "object-hash": "2.2.0", + "path-to-regexp": "3.2.0", + "tslib": "2.3.1", + "uuid": "8.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0", + "@nestjs/microservices": "^8.0.0", + "@nestjs/platform-express": "^8.0.0", + "@nestjs/websockets": "^8.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } } }, - "node_modules/@lezer/xml": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz", - "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", + "node_modules/@nestjs/core/node_modules/tslib": { + "version": "2.3.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@nestjs/core/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.6", "license": "MIT", "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" + "glob": "7.1.7" } }, - "node_modules/@lezer/yaml": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.4.tgz", - "integrity": "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==", + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "dev": true, "license": "MIT", "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.4.0" + "eslint-scope": "5.1.1" } }, - "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz", - "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==", - "license": "BSD-3-Clause" + "node_modules/@noble/ciphers": { + "version": "0.4.1", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@lit/reactive-element": { - "version": "1.6.3", - "license": "BSD-3-Clause", + "node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@malept/cross-spawn-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", - "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", - "dev": true, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.0", "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + "url": "https://paulmillr.com/funding/" } ], - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 8" } }, - "node_modules/@malept/cross-spawn-promise/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, - "node_modules/@malept/cross-spawn-promise/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/@npmcli/config": { + "version": "6.4.0", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@malept/cross-spawn-promise/node_modules/shebang-command": { + "node_modules/@npmcli/config/node_modules/abbrev": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@malept/cross-spawn-promise/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/@npmcli/config/node_modules/ini": { + "version": "4.1.1", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "node_modules/@npmcli/config/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" } }, - "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@npmcli/config/node_modules/nopt": { + "version": "7.2.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@npmcli/config/node_modules/semver": { + "version": "7.5.4", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "universalify": "^2.0.0" + "lru-cache": "^6.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@malept/flatpak-bundler/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@npmcli/config/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": ">= 10.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" + "node_modules/@npmcli/fs/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "license": "MIT" - }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "license": "MIT", + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "node_modules/@npmcli/fs/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@npmcli/git": { "version": "4.1.0", - "license": "MIT" + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/@marijn/find-cluster-break": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", - "license": "MIT" + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/@mdx-js/mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", - "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", - "license": "MIT", + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "acorn": "^8.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-scope": "^1.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "recma-build-jsx": "^1.0.0", - "recma-jsx": "^1.0.0", - "recma-stringify": "^1.0.0", - "rehype-recma": "^1.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" + "lru-cache": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@mdx-js/mdx/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", + "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@types/unist": "*" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@mdx-js/mdx/node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "@types/unist": "*" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" + "node_modules/@npmcli/git/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/@mdx-js/mdx/node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "license": "MIT", + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, "bin": { - "acorn": "bin/acorn" + "installed-package-contents": "lib/index.js" }, "engines": { - "node": ">=0.4.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/character-reference-invalid": { + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "node_modules/@npmcli/map-workspaces/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/foreground-child": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@mdx-js/mdx/node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "license": "MIT", + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@mdx-js/mdx/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "@types/estree": "^1.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@mdx-js/mdx/node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "node_modules/@npmcli/map-workspaces/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/path-key": { + "version": "3.1.1", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, - "node_modules/@mdx-js/mdx/node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "node_modules/@npmcli/map-workspaces/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" + "shebang-regex": "^3.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, - "node_modules/@mdx-js/mdx/node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "node_modules/@npmcli/map-workspaces/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@mdx-js/mdx/node_modules/is-hexadecimal": { + "node_modules/@npmcli/move-file": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-from-markdown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", - "license": "MIT", + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", "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" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdx": { + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "license": "MIT", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "which": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "license": "MIT", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "isexe": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdx-jsx": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", - "license": "MIT", + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "isexe": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "node_modules/@nsure-ai/web-client-sdk": { + "version": "1.1.92", + "resolved": "https://registry.npmjs.org/@nsure-ai/web-client-sdk/-/web-client-sdk-1.1.92.tgz", + "integrity": "sha512-ofhBJX0z1JdD24dyzZ4Y7kktM0IYIAxJvVICA0JoQ/Hjc2s0MNfy8jfHQN4JG7tEtODi7wkUA9rDnnvu4gDe4w==", + "license": "ISC" + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "node_modules/@nuxtjs/opencollective/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, "license": "MIT", "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" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "node_modules/@nuxtjs/opencollective/node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@nuxtjs/opencollective/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "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" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "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" - } + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "dev": true, + "license": "MIT" }, - "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdx-expression": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", - "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", - "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", - "license": "MIT", + "node_modules/@open-draft/until": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.4.26", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" + "@nestjs/common": "8.2.6", + "@nestjs/core": "8.2.6", + "@nuxtjs/opencollective": "0.3.2", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "3.6.0", + "concurrently": "6.5.1", + "console.table": "0.10.0", + "fs-extra": "10.0.0", + "glob": "7.1.6", + "inquirer": "8.2.0", + "lodash": "4.17.21", + "reflect-metadata": "0.1.13", + "rxjs": "7.5.2", + "tslib": "2.0.3" + }, + "bin": { + "openapi-generator-cli": "main.js" + }, + "engines": { + "node": ">=10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/openapi_generator" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "node_modules/@openapitools/openapi-generator-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-types": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "node_modules/@openapitools/openapi-generator-cli/node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "node_modules/@openapitools/openapi-generator-cli/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "node_modules/@openapitools/openapi-generator-cli/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/commander": { + "version": "8.3.0", + "dev": true, "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">= 12" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-factory-mdx-expression": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", - "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/concurrently": { + "version": "6.5.1", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "node_modules/@openapitools/openapi-generator-cli/node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/concurrently/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/fs-extra": { + "version": "10.0.0", + "dev": true, "license": "MIT", "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" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "node_modules/@openapitools/openapi-generator-cli/node_modules/glob": { + "version": "7.1.6", + "dev": true, + "license": "ISC", "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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/inquirer": { + "version": "8.2.0", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs": { + "version": "7.5.2", + "dev": true, + "license": "Apache-2.0", "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" + "tslib": "^2.1.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/node_modules/tslib": { + "version": "2.6.2", + "dev": true, + "license": "0BSD" }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-events-to-acorn": { + "node_modules/@openapitools/openapi-generator-cli/node_modules/tslib": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", - "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "dev": true, + "license": "0BSD" }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-normalize-identifier": { + "node_modules/@openapitools/openapi-generator-cli/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "dev": true, "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-types": "^2.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/@openapitools/openapi-generator-cli/node_modules/yargs": { + "version": "16.2.0", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "node_modules/@opencensus/core": { + "version": "0.0.9", + "license": "Apache-2.0", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "continuation-local-storage": "^3.2.1", + "log-driver": "^1.2.7", + "semver": "^5.5.0", + "shimmer": "^1.2.0", + "uuid": "^3.2.1" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@mdx-js/mdx/node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "node_modules/@opencensus/core/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/@mdx-js/mdx/node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", + "node_modules/@opencensus/propagation-b3": { + "version": "0.0.8", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" + "@opencensus/core": "^0.0.8", + "uuid": "^3.2.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=6.0" } }, - "node_modules/@mdx-js/mdx/node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx/node_modules/remark-mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", - "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", - "license": "MIT", + "node_modules/@opencensus/propagation-b3/node_modules/@opencensus/core": { + "version": "0.0.8", + "license": "Apache-2.0", "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" + "continuation-local-storage": "^3.2.1", + "log-driver": "^1.2.7", + "semver": "^5.5.0", + "shimmer": "^1.2.0", + "uuid": "^3.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6.0" } }, - "node_modules/@mdx-js/mdx/node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@opencensus/propagation-b3/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", + "node_modules/@opentelemetry/api": { + "version": "1.3.0", + "license": "Apache-2.0", "engines": { - "node": ">= 12" + "node": ">=8.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", + "node_modules/@opentelemetry/api-metrics": { + "version": "0.31.0", + "license": "Apache-2.0", "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" + "@opentelemetry/api": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=14" } }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.8.0", + "license": "Apache-2.0", + "engines": { + "node": ">=14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "license": "MIT", + "node_modules/@opentelemetry/core": { + "version": "1.17.1", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^3.0.0" + "@opentelemetry/semantic-conventions": "1.17.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.7.0" } }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.17.1", + "license": "Apache-2.0", + "engines": { + "node": ">=14" } }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation": { + "version": "0.31.0", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "@opentelemetry/api-metrics": "0.31.0", + "require-in-the-middle": "^5.0.3", + "semver": "^7.3.2", + "shimmer": "^1.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.29.0", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" + "@opentelemetry/instrumentation": "^0.29.2", + "@types/bunyan": "1.8.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.12.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@mdx-js/mdx/node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@opentelemetry/api-metrics": { + "version": "0.29.2", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" + "@opentelemetry/api": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.12.0" } }, - "node_modules/@mdx-js/mdx/node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@opentelemetry/instrumentation": { + "version": "0.29.2", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" + "@opentelemetry/api-metrics": "0.29.2", + "require-in-the-middle": "^5.0.3", + "semver": "^7.3.2", + "shimmer": "^1.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@mdx-js/react": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", - "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "yallist": "^4.0.0" }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" + "engines": { + "node": ">=10" } }, - "node_modules/@mdx-js/rollup": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.1.1.tgz", - "integrity": "sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@rollup/pluginutils": "^5.0.0", - "source-map": "^0.7.0", - "vfile": "^6.0.0" + "lru-cache": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "rollup": ">=2" + "engines": { + "node": ">=10" } }, - "node_modules/@mdx-js/rollup/node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.30.0", + "license": "Apache-2.0", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/instrumentation": "^0.29.2", + "@opentelemetry/semantic-conventions": "^1.0.0", + "@types/express": "4.17.13" }, "engines": { - "node": ">=14.0.0" + "node": ">=8.12.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@mdx-js/rollup/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@mdx-js/rollup/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@mdx-js/rollup/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/api-metrics": { + "version": "0.29.2", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@mdx-js/rollup/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", "engines": { - "node": ">= 12" + "node": ">=8.12.0" } }, - "node_modules/@mdx-js/rollup/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/instrumentation": { + "version": "0.29.2", + "license": "Apache-2.0", "dependencies": { - "@types/unist": "^3.0.0" + "@opentelemetry/api-metrics": "0.29.2", + "require-in-the-middle": "^5.0.3", + "semver": "^7.3.2", + "shimmer": "^1.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@mdx-js/rollup/node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "node_modules/@opentelemetry/instrumentation-express/node_modules/@types/express": { + "version": "4.17.13", "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@mdx-js/rollup/node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-express/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" + "yallist": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10" } }, - "node_modules/@metamask/eth-json-rpc-provider": { - "version": "1.0.1", + "node_modules/@opentelemetry/instrumentation-express/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", "dependencies": { - "@metamask/json-rpc-engine": "^7.0.0", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^5.0.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" } }, - "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/safe-event-emitter": { - "version": "3.1.1", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation-express/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.31.0", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.5.0", + "@opentelemetry/instrumentation": "0.31.0", + "@opentelemetry/semantic-conventions": "1.5.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">=12.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/utils": { - "version": "5.0.2", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "1.5.0", + "license": "Apache-2.0", "dependencies": { - "@ethereumjs/tx": "^4.1.2", - "@types/debug": "^4.1.7", - "debug": "^4.3.4", - "semver": "^7.3.8", - "superstruct": "^1.0.3" + "@opentelemetry/semantic-conventions": "1.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.2.0" } }, - "node_modules/@metamask/eth-json-rpc-provider/node_modules/lru-cache": { + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.5.0", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/lru-cache": { "version": "6.0.0", "license": "ISC", "dependencies": { @@ -19765,8 +18525,8 @@ "node": ">=10" } }, - "node_modules/@metamask/eth-json-rpc-provider/node_modules/semver": { - "version": "7.6.0", + "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { + "version": "7.5.4", "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -19778,183 +18538,176 @@ "node": ">=10" } }, - "node_modules/@metamask/eth-json-rpc-provider/node_modules/yallist": { + "node_modules/@opentelemetry/instrumentation-http/node_modules/yallist": { "version": "4.0.0", "license": "ISC" }, - "node_modules/@metamask/json-rpc-engine": { - "version": "7.3.3", + "node_modules/@opentelemetry/instrumentation/node_modules/lru-cache": { + "version": "6.0.0", "license": "ISC", "dependencies": { - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@metamask/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { - "version": "3.1.1", - "license": "ISC", - "engines": { - "node": ">=12.0.0" + "node": ">=10" } }, - "node_modules/@metamask/json-rpc-middleware-stream": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.2.tgz", - "integrity": "sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==", + "node_modules/@opentelemetry/instrumentation/node_modules/semver": { + "version": "7.5.4", "license": "ISC", "dependencies": { - "@metamask/json-rpc-engine": "^8.0.2", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.0", - "readable-stream": "^3.6.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" } }, - "node_modules/@metamask/json-rpc-middleware-stream/node_modules/@metamask/json-rpc-engine": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", - "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.0" + "@opentelemetry/core": "1.8.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/json-rpc-middleware-stream/node_modules/@metamask/safe-event-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", - "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", - "license": "ISC", + "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/core": { + "version": "1.8.0", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.8.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/object-multiplex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.1.0.tgz", - "integrity": "sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==", - "license": "ISC", + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "once": "^1.4.0", - "readable-stream": "^3.6.2" + "@opentelemetry/core": "1.8.0" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/onboarding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@metamask/onboarding/-/onboarding-1.0.1.tgz", - "integrity": "sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==", - "license": "MIT", + "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/core": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "bowser": "^2.9.0" + "@opentelemetry/semantic-conventions": "1.8.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/providers": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-16.1.0.tgz", - "integrity": "sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==", - "license": "MIT", + "node_modules/@opentelemetry/resources": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "@metamask/json-rpc-engine": "^8.0.1", - "@metamask/json-rpc-middleware-stream": "^7.0.1", - "@metamask/object-multiplex": "^2.0.0", - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.1.1", - "@metamask/utils": "^8.3.0", - "detect-browser": "^5.2.0", - "extension-port-stream": "^3.0.0", - "fast-deep-equal": "^3.1.3", - "is-stream": "^2.0.0", - "readable-stream": "^3.6.2", - "webextension-polyfill": "^0.10.0" + "@opentelemetry/core": "1.8.0", + "@opentelemetry/semantic-conventions": "1.8.0" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/providers/node_modules/@metamask/json-rpc-engine": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", - "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", - "license": "ISC", + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.0" + "@opentelemetry/semantic-conventions": "1.8.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/providers/node_modules/@metamask/safe-event-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", - "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", - "license": "ISC", + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.8.0", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.8.0", + "@opentelemetry/resources": "1.8.0", + "@opentelemetry/semantic-conventions": "1.8.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/rpc-errors": { - "version": "6.2.1", - "license": "MIT", + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "@metamask/utils": "^8.3.0", - "fast-safe-stringify": "^2.0.6" + "@opentelemetry/semantic-conventions": "1.8.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/safe-event-emitter": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/@metamask/superstruct": { - "version": "3.1.0", - "license": "MIT", + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.8.0", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.8.0", + "@opentelemetry/core": "1.8.0", + "@opentelemetry/propagator-b3": "1.8.0", + "@opentelemetry/propagator-jaeger": "1.8.0", + "@opentelemetry/sdk-trace-base": "1.8.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">=16.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/utils": { - "version": "8.4.0", - "license": "ISC", + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/core": { + "version": "1.8.0", + "license": "Apache-2.0", "dependencies": { - "@ethereumjs/tx": "^4.2.0", - "@noble/hashes": "^1.3.1", - "@scure/base": "^1.1.3", - "@types/debug": "^4.1.7", - "debug": "^4.3.4", - "pony-cause": "^2.1.10", - "semver": "^7.5.4", - "superstruct": "^1.0.3", - "uuid": "^9.0.1" + "@opentelemetry/semantic-conventions": "1.8.0" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@metamask/utils/node_modules/@scure/base": { - "version": "1.1.3", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.4.0" } }, - "node_modules/@metamask/utils/node_modules/lru-cache": { + "node_modules/@opentelemetry/sdk-trace-node/node_modules/lru-cache": { "version": "6.0.0", "license": "ISC", "dependencies": { @@ -19964,7 +18717,7 @@ "node": ">=10" } }, - "node_modules/@metamask/utils/node_modules/semver": { + "node_modules/@opentelemetry/sdk-trace-node/node_modules/semver": { "version": "7.5.4", "license": "ISC", "dependencies": { @@ -19977,818 +18730,627 @@ "node": ">=10" } }, - "node_modules/@metamask/utils/node_modules/uuid": { - "version": "9.0.1", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@metamask/utils/node_modules/yallist": { + "node_modules/@opentelemetry/sdk-trace-node/node_modules/yallist": { "version": "4.0.0", "license": "ISC" }, - "node_modules/@metaplex-foundation/beet": { - "version": "0.7.2", - "license": "Apache-2.0", - "dependencies": { - "ansicolors": "^0.3.2", - "assert": "^2.1.0", - "bn.js": "^5.2.0", - "debug": "^4.3.3" - } - }, - "node_modules/@metaplex-foundation/beet-solana": { - "version": "0.4.1", + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.8.0", "license": "Apache-2.0", - "dependencies": { - "@metaplex-foundation/beet": ">=0.1.0", - "@solana/web3.js": "^1.56.2", - "bs58": "^5.0.0", - "debug": "^4.3.4" + "engines": { + "node": ">=14" } }, - "node_modules/@metaplex-foundation/beet-solana/node_modules/base-x": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/@metaplex-foundation/beet-solana/node_modules/bs58": { - "version": "5.0.0", + "node_modules/@openzeppelin/contract-loader": { + "version": "0.4.0", + "dev": true, "license": "MIT", "dependencies": { - "base-x": "^4.0.0" + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "try-require": "^1.2.1" } }, - "node_modules/@metaplex-foundation/beet/node_modules/assert": { - "version": "2.1.0", + "node_modules/@openzeppelin/test-helpers": { + "version": "0.5.6", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "@openzeppelin/contract-loader": "^0.4.0", + "@truffle/contract": "^4.0.35 <4.2.2", + "ansi-colors": "^3.2.3", + "chai": "^4.2.0", + "chai-bn": "^0.2.1", + "ethjs-abi": "^0.2.1", + "lodash.flatten": "^4.4.0", + "semver": "^5.6.0", + "web3": "^1.2.1", + "web3-utils": "^1.2.1" } }, - "node_modules/@metaplex-foundation/cusper": { - "version": "0.0.2", - "license": "Apache-2.0" + "node_modules/@openzeppelin/test-helpers/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/@metaplex-foundation/mpl-token-metadata": { - "version": "3.2.1", + "node_modules/@optimizely/js-sdk-datafile-manager": { + "version": "0.5.0", "license": "Apache-2.0", "dependencies": { - "@metaplex-foundation/mpl-toolbox": "^0.9.4" + "@optimizely/js-sdk-logging": "^0.1.0", + "@optimizely/js-sdk-utils": "^0.2.0", + "decompress-response": "^4.2.1" + }, + "engines": { + "node": ">=6.0.0" }, "peerDependencies": { - "@metaplex-foundation/umi": ">= 0.8.2 < 1" + "@react-native-community/async-storage": "^1.2.0" } }, - "node_modules/@metaplex-foundation/mpl-toolbox": { - "version": "0.9.4", + "node_modules/@optimizely/js-sdk-event-processor": { + "version": "0.4.0", "license": "Apache-2.0", - "peerDependencies": { - "@metaplex-foundation/umi": ">= 0.8.2 < 1" + "dependencies": { + "@optimizely/js-sdk-logging": "^0.1.0", + "@optimizely/js-sdk-utils": "^0.2.0" } }, - "node_modules/@metaplex-foundation/umi": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi/-/umi-1.2.0.tgz", - "integrity": "sha512-SIcDO8O9gRYL2C5ntsedVfpRBICK7ZoMB5ap8P5N2TEJ/QC205UxDzhdQsImdWQG1DQ7XJsDXWiiFzccpFZcSg==", + "node_modules/@optimizely/js-sdk-logging": { + "version": "0.1.0", + "license": "MIT", "dependencies": { - "@metaplex-foundation/umi-options": "^1.2.0", - "@metaplex-foundation/umi-public-keys": "^1.2.0", - "@metaplex-foundation/umi-serializers": "^1.2.0" + "@optimizely/js-sdk-utils": "^0.1.0" } }, - "node_modules/@metaplex-foundation/umi-http-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-http-fetch/-/umi-http-fetch-1.4.1.tgz", - "integrity": "sha512-ItvPkRPTXWH6YeBB7WTS3qKCDVrjEhGpb+fCBypzCkdXvS9zRwN+I/I6IcB+GJnEFdTIip8+XSeWMOrW8ZDCkQ==", + "node_modules/@optimizely/js-sdk-logging/node_modules/@optimizely/js-sdk-utils": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "uuid": "^3.3.2" + } + }, + "node_modules/@optimizely/js-sdk-utils": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "uuid": "^3.3.2" + } + }, + "node_modules/@optimizely/optimizely-sdk": { + "version": "4.0.0", + "license": "Apache-2.0", "dependencies": { - "node-fetch": "^2.6.7" + "@optimizely/js-sdk-datafile-manager": "^0.5.0", + "@optimizely/js-sdk-event-processor": "^0.4.0", + "@optimizely/js-sdk-logging": "^0.1.0", + "@optimizely/js-sdk-utils": "^0.2.0", + "json-schema": "^0.2.3", + "murmurhash": "0.0.2", + "uuid": "^3.3.2" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^1.4.1" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@metaplex-foundation/umi-http-fetch/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">= 10.0.0" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" } }, - "node_modules/@metaplex-foundation/umi-http-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/@metaplex-foundation/umi-http-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/@metaplex-foundation/umi-http-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@metaplex-foundation/umi-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-options/-/umi-options-1.2.0.tgz", - "integrity": "sha512-dNEfhDg9PUoosU46SnmB8PzdhgAF7qJ0RUkn5keLKU2s0Xy2DKZVtdaELTfMZZckhaDvOzRTKdphTRrEwIjbyw==" - }, - "node_modules/@metaplex-foundation/umi-public-keys": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-public-keys/-/umi-public-keys-1.2.0.tgz", - "integrity": "sha512-UZISKLcrsAQ3M17JCkNIXtacoKHpSNEgXHGcxyJp7zfJkdLDq5Qlvd7KeyZoYC7A7XuA3lAlVY14qhhIwC5p5w==", + "node_modules/@parcel/watcher-wasm": { + "version": "2.4.1", + "bundleDependencies": [ + "napi-wasm" + ], + "license": "MIT", "dependencies": { - "@metaplex-foundation/umi-serializers-encodings": "^1.2.0" + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@metaplex-foundation/umi-rpc-chunk-get-accounts": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-rpc-chunk-get-accounts/-/umi-rpc-chunk-get-accounts-1.4.1.tgz", - "integrity": "sha512-3aHQe/XT9+LZe6f3PHX0RSmUPeDB+3J2l29dQDq80KdGDfL19ELogaP5OutsKB1W3NoXBSwzhuOjtE6gG9aQgA==", - "peerDependencies": { - "@metaplex-foundation/umi": "^1.4.1" - } + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" }, - "node_modules/@metaplex-foundation/umi-rpc-web3js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-rpc-web3js/-/umi-rpc-web3js-1.4.1.tgz", - "integrity": "sha512-xR0KVz6n3RZ3qO8axxIhDCBjki9jj7fYgKijO0zJC85YZeuos6A6vuA14LpTaonWlkD892M3Ua0YC7dUOL9CzQ==", - "dependencies": { - "@metaplex-foundation/umi-web3js-adapters": "^1.4.1" + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^1.4.1", - "@solana/web3.js": "^1.72.0" + "engines": { + "node": ">=0.10" } }, - "node_modules/@metaplex-foundation/umi-serializer-data-view": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializer-data-view/-/umi-serializer-data-view-1.4.1.tgz", - "integrity": "sha512-SSJvXkjj0+Rfz7ZbYD8yMmF/5dRQgqzUW/FkH6si/EiYxyTmRmMaeCo85RZAUSjbJgpz8DFwLmLceptFiTwk5A==", - "peerDependencies": { - "@metaplex-foundation/umi": "^1.4.1" + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": "^16 || ^18 || >= 20" } }, - "node_modules/@metaplex-foundation/umi-serializers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers/-/umi-serializers-1.2.0.tgz", - "integrity": "sha512-7ivgqVP6ZouN13EBN5aMirjoX2x0Ja7IuzrBeIa8YYrxGcy7YQp+fUj4YCPtMClzsETgJ5jL8EZnZPpZX4dxaQ==", - "dependencies": { - "@metaplex-foundation/umi-options": "^1.2.0", - "@metaplex-foundation/umi-public-keys": "^1.2.0", - "@metaplex-foundation/umi-serializers-core": "^1.2.0", - "@metaplex-foundation/umi-serializers-encodings": "^1.2.0", - "@metaplex-foundation/umi-serializers-numbers": "^1.2.0" + "node_modules/@paulmillr/qr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", + "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", + "license": "(MIT OR Apache-2.0)", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@metaplex-foundation/umi-serializers-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-1.2.0.tgz", - "integrity": "sha512-9scqhjkjW8tJ+/q1veh73jQjo9vvgTN5iN4OfOYFMtFVTT8/y2AVxGmniV/DbQC5wIgx7WTZkAnJmqOMs2904Q==" - }, - "node_modules/@metaplex-foundation/umi-serializers-encodings": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-1.2.0.tgz", - "integrity": "sha512-Yo3TPI9ei8Z5eTJ1UeT12+pYaQ1zMSn57/M/3r4WAOTFtTCOuKsDRKg8eBQCpBuffH8yGUbRs0poy1n25IzeNg==", + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.8", + "license": "MIT", "dependencies": { - "@metaplex-foundation/umi-serializers-core": "^1.2.0" + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, - "node_modules/@metaplex-foundation/umi-serializers-numbers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-1.2.0.tgz", - "integrity": "sha512-ZBVb498GHYlfB+1JzOcczJ1LrCYWr0IiiXjeEAf+64mSSp3IFwK7D3rjL6RZ05bjxBzuWDJVRzI+mFVFC9UgtQ==", + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "license": "MIT", "dependencies": { - "@metaplex-foundation/umi-serializers-core": "^1.2.0" + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@metaplex-foundation/umi-transaction-factory-web3js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-transaction-factory-web3js/-/umi-transaction-factory-web3js-1.4.1.tgz", - "integrity": "sha512-ppygQl2W5NZ1s/w6rBldQekTpgdVKaNEwK4bHRf81+mnJTgsH1iXl72M4y1ARNt3472Fv910vZQo9/XYeRbSaQ==", + "node_modules/@peculiar/webcrypto": { + "version": "1.4.3", + "license": "MIT", "dependencies": { - "@metaplex-foundation/umi-web3js-adapters": "^1.4.1" + "@peculiar/asn1-schema": "^2.3.6", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.2", + "tslib": "^2.5.0", + "webcrypto-core": "^1.7.7" }, - "peerDependencies": { - "@metaplex-foundation/umi": "^1.4.1", - "@solana/web3.js": "^1.72.0" + "engines": { + "node": ">=10.12.0" } }, - "node_modules/@metaplex-foundation/umi-uploader-irys": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-uploader-irys/-/umi-uploader-irys-1.2.0.tgz", - "integrity": "sha512-yD2+s+fCKQgQCfc3qusc7cSo5H5yjznhimCxJfYjJAtE7kal0MoyIdICoRy1Da4cxo/F8qoDhJ3QzxTvqMu39A==", - "dependencies": { - "@irys/upload": "^0.0.14", - "@irys/upload-solana": "^0.1.7", - "@irys/web-upload": "^0.0.14", - "@irys/web-upload-solana": "^0.1.7", - "@metaplex-foundation/umi-web3js-adapters": "^1.2.0", - "@supercharge/promise-pool": "^3.2.0", - "bignumber.js": "^9.1.2", - "buffer": "^6.0.3" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "^1.2.0", - "@solana/web3.js": "^1.72.0" - } + "node_modules/@pedalboard/anti-abuse-oracle": { + "resolved": "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle", + "link": true }, - "node_modules/@metaplex-foundation/umi-web3js-adapters": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-web3js-adapters/-/umi-web3js-adapters-1.4.1.tgz", - "integrity": "sha512-9LkueHDVVljRY83HcaRxGh011zMwrFpvlgb2VrkYlhC7afTM7VrDw4oxdR1zwC80bXyf0D1gyKqi+ANO8QQqtw==", - "dependencies": { - "buffer": "^6.0.3" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "^1.4.1", - "@solana/web3.js": "^1.72.0" - } + "node_modules/@pedalboard/archiver": { + "resolved": "packages/discovery-provider/plugins/pedalboard/apps/archiver", + "link": true }, - "node_modules/@meteora-ag/cp-amm-sdk": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@meteora-ag/cp-amm-sdk/-/cp-amm-sdk-1.1.7.tgz", - "integrity": "sha512-i45rCAqDc8JvdNS+Jp5A+NnabjNiujmTCEb7WQRQH33ZBrNA+/Yec+KJMsfLyXaKaJSo5vITiQKrBgx+/rfsHA==", + "node_modules/@pedalboard/basekit": { + "resolved": "packages/discovery-provider/plugins/pedalboard/packages/basekit", + "link": true + }, + "node_modules/@pedalboard/logger": { + "resolved": "packages/discovery-provider/plugins/pedalboard/packages/logger", + "link": true + }, + "node_modules/@pedalboard/staking": { + "resolved": "packages/discovery-provider/plugins/pedalboard/apps/staking", + "link": true + }, + "node_modules/@pedalboard/storage": { + "resolved": "packages/discovery-provider/plugins/pedalboard/packages/storage", + "link": true + }, + "node_modules/@phosphor-icons/core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@phosphor-icons/core/-/core-2.1.1.tgz", + "integrity": "sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==", + "license": "MIT" + }, + "node_modules/@pinata/sdk": { + "version": "1.1.13", + "dev": true, + "license": "MIT", "dependencies": { - "@coral-xyz/anchor": "^0.31.0", - "@solana/spl-token": "^0.4.8", - "@solana/web3.js": "^1.95.3", - "@types/bn.js": "^5.1.0", - "chain": "^0.4.0", - "decimal.js": "^10.4.2", - "invariant": "^2.2.4" + "axios": "^0.21.1", + "base-path-converter": "^1.0.2", + "form-data": "^2.3.3", + "is-ipfs": "^0.6.0", + "recursive-fs": "^1.1.2" } }, - "node_modules/@meteora-ag/cp-amm-sdk/node_modules/@coral-xyz/anchor": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", - "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "node_modules/@pinata/sdk/node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", "dependencies": { - "@coral-xyz/anchor-errors": "^0.31.1", - "@coral-xyz/borsh": "^0.31.1", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.69.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "eventemitter3": "^4.0.7", - "pako": "^2.0.3", - "superstruct": "^0.15.4", - "toml": "^3.0.0" - }, - "engines": { - "node": ">=17" + "follow-redirects": "^1.14.0" } }, - "node_modules/@meteora-ag/cp-amm-sdk/node_modules/@coral-xyz/borsh": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", - "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", - "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" - }, + "node_modules/@pinata/sdk/node_modules/follow-redirects": { + "version": "1.15.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4.0" }, - "peerDependencies": { - "@solana/web3.js": "^1.69.0" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/@meteora-ag/cp-amm-sdk/node_modules/@solana/spl-token": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.14.tgz", - "integrity": "sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==", + "node_modules/@pinata/sdk/node_modules/form-data": { + "version": "2.5.1", + "dev": true, + "license": "MIT", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-group": "^0.0.7", - "@solana/spl-token-metadata": "^0.1.6", - "buffer": "^6.0.3" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.95.5" + "node": ">= 0.12" } }, - "node_modules/@meteora-ag/cp-amm-sdk/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/@meteora-ag/cp-amm-sdk/node_modules/superstruct": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", - "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" - }, - "node_modules/@meteora-ag/dynamic-bonding-curve-sdk": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@meteora-ag/dynamic-bonding-curve-sdk/-/dynamic-bonding-curve-sdk-1.3.8.tgz", - "integrity": "sha512-xdAtwUXi9gcGYLzgkF9hkMZgLaAuYfPBBSP4LNVotu86g6aG956pGUDWifuiWWI8AL0yb1EmwQBKLftAjZYWJg==", - "dependencies": { - "@coral-xyz/anchor": "^0.31.0", - "@solana/spl-token": "^0.4.13", - "@solana/web3.js": "^1.98.0", - "bn.js": "^5.2.1", - "decimal.js": "^10.5.0" + "node_modules/@pkgr/core": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, - "peerDependencies": { - "typescript": "^5" + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@meteora-ag/dynamic-bonding-curve-sdk/node_modules/@coral-xyz/anchor": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", - "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "license": "MIT", "dependencies": { - "@coral-xyz/anchor-errors": "^0.31.1", - "@coral-xyz/borsh": "^0.31.1", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.69.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "eventemitter3": "^4.0.7", - "pako": "^2.0.3", - "superstruct": "^0.15.4", - "toml": "^3.0.0" + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=17" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@meteora-ag/dynamic-bonding-curve-sdk/node_modules/@coral-xyz/borsh": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", - "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", + "node_modules/@pkgr/utils/node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@solana/web3.js": "^1.69.0" + "node": ">= 8" } }, - "node_modules/@meteora-ag/dynamic-bonding-curve-sdk/node_modules/@solana/spl-token": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.14.tgz", - "integrity": "sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==", + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "license": "MIT", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-group": "^0.0.7", - "@solana/spl-token-metadata": "^0.1.6", - "buffer": "^6.0.3" - }, - "engines": { - "node": ">=16" + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" }, - "peerDependencies": { - "@solana/web3.js": "^1.95.5" - } - }, - "node_modules/@meteora-ag/dynamic-bonding-curve-sdk/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@meteora-ag/dynamic-bonding-curve-sdk/node_modules/superstruct": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", - "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" - }, - "node_modules/@meteora-ag/met-lock-sdk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@meteora-ag/met-lock-sdk/-/met-lock-sdk-1.0.1.tgz", - "integrity": "sha512-v3yGJPI7LucdQnTyY/3LGhKlNtC5B7RcbN9QYliav/s9ToANVqqV7Elpa3gbQ0qUtzCSqmYHOWQ/8dW9/Hq7KA==", - "dependencies": { - "@coral-xyz/anchor": "^0.31.0", - "@solana/spl-token": "^0.4.13", - "@solana/web3.js": "^1.98.0", - "bn.js": "^5.2.1", - "decimal.js": "^10.5.0" - }, - "peerDependencies": { - "typescript": "^5" + "node_modules/@pkgr/utils/node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@meteora-ag/met-lock-sdk/node_modules/@coral-xyz/anchor": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.31.1.tgz", - "integrity": "sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==", + "node_modules/@pkgr/utils/node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", "dependencies": { - "@coral-xyz/anchor-errors": "^0.31.1", - "@coral-xyz/borsh": "^0.31.1", - "@noble/hashes": "^1.3.1", - "@solana/web3.js": "^1.69.0", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "eventemitter3": "^4.0.7", - "pako": "^2.0.3", - "superstruct": "^0.15.4", - "toml": "^3.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=17" + "node": ">=8" } }, - "node_modules/@meteora-ag/met-lock-sdk/node_modules/@coral-xyz/borsh": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.31.1.tgz", - "integrity": "sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==", - "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" - }, + "node_modules/@pkgr/utils/node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@solana/web3.js": "^1.69.0" + "node": ">=8" } }, - "node_modules/@meteora-ag/met-lock-sdk/node_modules/@solana/spl-token": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.14.tgz", - "integrity": "sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==", + "node_modules/@playwright/test": { + "version": "1.42.1", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@solana/buffer-layout": "^4.0.0", - "@solana/buffer-layout-utils": "^0.2.0", - "@solana/spl-token-group": "^0.0.7", - "@solana/spl-token-metadata": "^0.1.6", - "buffer": "^6.0.3" + "playwright": "1.42.1" }, - "engines": { - "node": ">=16" + "bin": { + "playwright": "cli.js" }, - "peerDependencies": { - "@solana/web3.js": "^1.95.5" - } - }, - "node_modules/@meteora-ag/met-lock-sdk/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16" } }, - "node_modules/@meteora-ag/met-lock-sdk/node_modules/superstruct": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", - "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" - }, - "node_modules/@motionone/animation": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", - "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", - "license": "MIT", + "node_modules/@pm2/agent": { + "version": "2.0.3", + "license": "AGPL-3.0", "dependencies": { - "@motionone/easing": "^10.18.0", - "@motionone/types": "^10.17.1", - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" + "async": "~3.2.0", + "chalk": "~3.0.0", + "dayjs": "~1.8.24", + "debug": "~4.3.1", + "eventemitter2": "~5.0.1", + "fast-json-patch": "^3.0.0-1", + "fclone": "~1.0.11", + "nssocket": "0.6.0", + "pm2-axon": "~4.0.1", + "pm2-axon-rpc": "~0.7.0", + "proxy-agent": "~6.3.0", + "semver": "~7.5.0", + "ws": "~7.4.0" } }, - "node_modules/@motionone/dom": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.18.0.tgz", - "integrity": "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==", + "node_modules/@pm2/agent/node_modules/ansi-styles": { + "version": "4.3.0", "license": "MIT", "dependencies": { - "@motionone/animation": "^10.18.0", - "@motionone/generators": "^10.18.0", - "@motionone/types": "^10.17.1", - "@motionone/utils": "^10.18.0", - "hey-listen": "^1.0.8", - "tslib": "^2.3.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@motionone/easing": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", - "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", - "license": "MIT", - "dependencies": { - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" - } + "node_modules/@pm2/agent/node_modules/async": { + "version": "3.2.5", + "license": "MIT" }, - "node_modules/@motionone/generators": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", - "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", + "node_modules/@pm2/agent/node_modules/chalk": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "@motionone/types": "^10.17.1", - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@motionone/svelte": { - "version": "10.16.4", - "resolved": "https://registry.npmjs.org/@motionone/svelte/-/svelte-10.16.4.tgz", - "integrity": "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==", - "license": "MIT", - "dependencies": { - "@motionone/dom": "^10.16.4", - "tslib": "^2.3.1" - } + "node_modules/@pm2/agent/node_modules/dayjs": { + "version": "1.8.36", + "license": "MIT" }, - "node_modules/@motionone/types": { - "version": "10.17.1", - "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", - "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", + "node_modules/@pm2/agent/node_modules/eventemitter2": { + "version": "5.0.1", "license": "MIT" }, - "node_modules/@motionone/utils": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", - "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", - "license": "MIT", + "node_modules/@pm2/agent/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "@motionone/types": "^10.17.1", - "hey-listen": "^1.0.8", - "tslib": "^2.3.1" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@motionone/vue": { - "version": "10.16.4", - "resolved": "https://registry.npmjs.org/@motionone/vue/-/vue-10.16.4.tgz", - "integrity": "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==", - "deprecated": "Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion", - "license": "MIT", + "node_modules/@pm2/agent/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", "dependencies": { - "@motionone/dom": "^10.16.4", - "tslib": "^2.3.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@mswjs/cookies": { - "version": "0.2.2", - "dev": true, + "node_modules/@pm2/agent/node_modules/supports-color": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "@types/set-cookie-parser": "^2.4.0", - "set-cookie-parser": "^2.4.6" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/@mswjs/interceptors": { - "version": "0.17.10", - "dev": true, + "node_modules/@pm2/agent/node_modules/ws": { + "version": "7.4.6", "license": "MIT", - "dependencies": { - "@open-draft/until": "^1.0.3", - "@types/debug": "^4.1.7", - "@xmldom/xmldom": "^0.8.3", - "debug": "^4.3.3", - "headers-polyfill": "3.2.5", - "outvariant": "^1.2.1", - "strict-event-emitter": "^0.2.4", - "web-encoding": "^1.1.5" - }, "engines": { - "node": ">=14" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@mswjs/interceptors/node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", + "node_modules/@pm2/agent/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@pm2/io": { + "version": "5.0.2", + "license": "Apache-2", + "dependencies": { + "@opencensus/core": "0.0.9", + "@opencensus/propagation-b3": "0.0.8", + "async": "~2.6.1", + "debug": "~4.3.1", + "eventemitter2": "^6.3.1", + "require-in-the-middle": "^5.0.0", + "semver": "~7.5.4", + "shimmer": "^1.2.0", + "signal-exit": "^3.0.3", + "tslib": "1.9.3" + }, "engines": { - "node": ">=0.8.x" + "node": ">=6.0" } }, - "node_modules/@mswjs/interceptors/node_modules/strict-event-emitter": { - "version": "0.2.8", - "dev": true, + "node_modules/@pm2/io/node_modules/async": { + "version": "2.6.4", "license": "MIT", "dependencies": { - "events": "^3.3.0" + "lodash": "^4.17.14" } }, - "node_modules/@multiformats/base-x": { - "version": "4.0.1", - "license": "MIT" - }, - "node_modules/@multiformats/murmur3": { - "version": "1.1.3", - "license": "(Apache-2.0 AND MIT)", + "node_modules/@pm2/io/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "multiformats": "^9.5.4", - "murmurhash3js-revisited": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@mysten/bcs": { - "version": "0.11.1", - "license": "Apache-2.0", + "node_modules/@pm2/io/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", "dependencies": { - "bs58": "^5.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@mysten/bcs/node_modules/base-x": { - "version": "4.0.0", - "license": "MIT" + "node_modules/@pm2/io/node_modules/tslib": { + "version": "1.9.3", + "license": "Apache-2.0" }, - "node_modules/@mysten/bcs/node_modules/bs58": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "base-x": "^4.0.0" - } + "node_modules/@pm2/io/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" }, - "node_modules/@mysten/sui.js": { - "version": "0.50.1", - "license": "Apache-2.0", + "node_modules/@pm2/js-api": { + "version": "0.6.7", + "license": "Apache-2", "dependencies": { - "@graphql-typed-document-node/core": "^3.2.0", - "@mysten/bcs": "0.11.1", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "@scure/bip32": "^1.3.1", - "@scure/bip39": "^1.2.1", - "@suchipi/femver": "^1.0.0", - "bech32": "^2.0.0", - "gql.tada": "^1.2.0", - "graphql": "^16.8.1", - "superstruct": "^1.0.3", - "tweetnacl": "^1.0.3" + "async": "^2.6.3", + "axios": "^0.21.0", + "debug": "~4.3.1", + "eventemitter2": "^6.3.1", + "ws": "^7.0.0" }, "engines": { - "node": ">=16" + "node": ">=4.0" } }, - "node_modules/@nestjs/common": { - "version": "8.2.6", - "dev": true, + "node_modules/@pm2/js-api/node_modules/async": { + "version": "2.6.4", "license": "MIT", "dependencies": { - "axios": "0.24.0", - "iterare": "1.2.1", - "tslib": "2.3.1", - "uuid": "8.3.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "cache-manager": "*", - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "cache-manager": { - "optional": true - }, - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } + "lodash": "^4.17.14" } }, - "node_modules/@nestjs/common/node_modules/axios": { - "version": "0.24.0", - "dev": true, + "node_modules/@pm2/js-api/node_modules/axios": { + "version": "0.21.4", "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.14.0" } }, - "node_modules/@nestjs/common/node_modules/follow-redirects": { + "node_modules/@pm2/js-api/node_modules/follow-redirects": { "version": "1.15.3", - "dev": true, "funding": [ { "type": "individual", @@ -20805,1831 +19367,2727 @@ } } }, - "node_modules/@nestjs/common/node_modules/tslib": { - "version": "2.3.1", - "dev": true, - "license": "0BSD" + "node_modules/@pm2/pm2-version-check": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1" + } }, - "node_modules/@nestjs/common/node_modules/uuid": { - "version": "8.3.2", + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=12.22.0" } }, - "node_modules/@nestjs/core": { - "version": "8.2.6", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@nuxtjs/opencollective": "0.3.2", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "object-hash": "2.2.0", - "path-to-regexp": "3.2.0", - "tslib": "2.3.1", - "uuid": "8.3.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0", - "@nestjs/microservices": "^8.0.0", - "@nestjs/platform-express": "^8.0.0", - "@nestjs/websockets": "^8.0.0", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" + "graceful-fs": "4.2.10" }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } + "engines": { + "node": ">=12.22.0" } }, - "node_modules/@nestjs/core/node_modules/tslib": { - "version": "2.3.1", + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", "dev": true, - "license": "0BSD" + "license": "ISC" }, - "node_modules/@nestjs/core/node_modules/uuid": { - "version": "8.3.2", + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.5.6", - "license": "MIT", + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@project-serum/anchor": { + "version": "0.24.1", + "license": "(MIT OR Apache-2.0)", "dependencies": { - "glob": "7.1.7" + "@project-serum/borsh": "^0.2.5", + "@solana/web3.js": "^1.36.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^5.3.1", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" } }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "7.1.7", - "license": "ISC", + "node_modules/@project-serum/borsh": { + "version": "0.2.5", + "license": "Apache-2.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" }, "engines": { - "node": "*" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@solana/web3.js": "^1.2.0" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-scope": "5.1.1" - } + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "license": "BSD-3-Clause" }, - "node_modules/@noble/ciphers": { - "version": "0.4.1", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "license": "BSD-3-Clause" }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "license": "MIT", + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "license": "BSD-3-Clause", "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@noble/ed25519": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.5.tgz", - "integrity": "sha512-xuS0nwRMQBvSxDa7UxMb61xTiH3MxTgUfhyPUALVIe0FlOAz4sjELwyDRyUvqeEYfRSG9qNjFIycqLZppg4RSA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "license": "BSD-3-Clause" }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "license": "BSD-3-Clause" }, - "node_modules/@noble/secp256k1": { - "version": "1.7.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/@radix-ui/colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", + "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==", "license": "MIT" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@radix-ui/react-accessible-icon": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz", + "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==", "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@radix-ui/react-visually-hidden": "1.2.3" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/config": { - "version": "6.4.0", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/config/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/config/node_modules/ini": { - "version": "4.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/config/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/config/node_modules/nopt": { - "version": "7.2.0", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", "dependencies": { - "abbrev": "^2.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" }, - "bin": { - "nopt": "bin/nopt.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/config/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/config/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "license": "ISC", + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@radix-ui/react-primitive": "2.1.3" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", + "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@radix-ui/react-primitive": "2.1.3" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "bin": { - "node-which": "bin/which.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/git/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" }, - "bin": { - "installed-package-contents": "lib/index.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@babel/runtime": "^7.13.10" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/foreground-child": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.3.10", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/minipass": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/path-key": { - "version": "3.1.1", - "dev": true, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/map-workspaces/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "dev": true, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "bin": { - "rimraf": "bin.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" }, - "bin": { - "node-which": "bin/which.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-form": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.8.tgz", + "integrity": "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-label": "2.1.7", + "@radix-ui/react-primitive": "2.1.3" }, - "bin": { - "node-which": "bin/which.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@nsure-ai/web-client-sdk": { - "version": "1.1.92", - "resolved": "https://registry.npmjs.org/@nsure-ai/web-client-sdk/-/web-client-sdk-1.1.92.tgz", - "integrity": "sha512-ofhBJX0z1JdD24dyzZ4Y7kktM0IYIAxJvVICA0JoQ/Hjc2s0MNfy8jfHQN4JG7tEtODi7wkUA9rDnnvu4gDe4w==", - "license": "ISC" - }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "dev": true, + "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nuxtjs/opencollective/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@radix-ui/react-primitive": "2.1.3" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@nuxtjs/opencollective/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@nuxtjs/opencollective/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@open-draft/deferred-promise": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", - "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", - "dev": true - }, - "node_modules/@open-draft/logger": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", - "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", - "dev": true, - "dependencies": { - "is-node-process": "^1.2.0", - "outvariant": "^1.4.0" + "node_modules/@radix-ui/react-icons": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", + "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" } }, - "node_modules/@open-draft/until": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@openapitools/openapi-generator-cli": { - "version": "2.4.26", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", "dependencies": { - "@nestjs/common": "8.2.6", - "@nestjs/core": "8.2.6", - "@nuxtjs/opencollective": "0.3.2", - "chalk": "4.1.2", - "commander": "8.3.0", - "compare-versions": "3.6.0", - "concurrently": "6.5.1", - "console.table": "0.10.0", - "fs-extra": "10.0.0", - "glob": "7.1.6", - "inquirer": "8.2.0", - "lodash": "4.17.21", - "reflect-metadata": "0.1.13", - "rxjs": "7.5.2", - "tslib": "2.0.3" - }, - "bin": { - "openapi-generator-cli": "main.js" + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": ">=10.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/openapi_generator" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@radix-ui/react-primitive": "2.1.4" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@radix-ui/react-slot": "1.2.4" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/commander": { - "version": "8.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/concurrently": { - "version": "6.5.1", - "dev": true, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "bin": { - "concurrently": "bin/concurrently.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/concurrently/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", "dependencies": { - "tslib": "^1.9.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, - "engines": { - "npm": ">=2.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/concurrently/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/fs-extra": { - "version": "10.0.0", - "dev": true, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=12" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/glob": { - "version": "7.1.6", - "dev": true, - "license": "ISC", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": "*" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/inquirer": { - "version": "8.2.0", - "dev": true, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.2.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, + "node_modules/@radix-ui/react-menubar/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs": { - "version": "7.5.2", - "dev": true, - "license": "Apache-2.0", + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/rxjs/node_modules/tslib": { - "version": "2.6.2", - "dev": true, - "license": "0BSD" - }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/tslib": { - "version": "2.0.3", - "dev": true, - "license": "0BSD" - }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/universalify": { - "version": "2.0.1", - "dev": true, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, + "node_modules/@radix-ui/react-one-time-password-field": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz", + "integrity": "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/yargs": { - "version": "16.2.0", - "dev": true, + "node_modules/@radix-ui/react-one-time-password-field/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opencensus/core": { - "version": "0.0.9", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-password-toggle-field": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.3.tgz", + "integrity": "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==", + "license": "MIT", "dependencies": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^5.5.0", - "shimmer": "^1.2.0", - "uuid": "^3.2.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-is-hydrated": "0.1.0" }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@opencensus/core/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opencensus/propagation-b3": { - "version": "0.0.8", - "license": "Apache-2.0", - "dependencies": { - "@opencensus/core": "^0.0.8", - "uuid": "^3.2.1" + "node_modules/@radix-ui/react-password-toggle-field/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=6.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opencensus/propagation-b3/node_modules/@opencensus/core": { - "version": "0.0.8", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", "dependencies": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^5.5.0", - "shimmer": "^1.2.0", - "uuid": "^3.2.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@opencensus/propagation-b3/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.3.0", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/api-metrics": { - "version": "0.31.0", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.0.0" + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=14" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.8.0", - "license": "Apache-2.0", - "engines": { - "node": ">=14" + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/core": { - "version": "1.17.1", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.17.1" - }, - "engines": { - "node": ">=14" + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.7.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.17.1", - "license": "Apache-2.0", - "engines": { - "node": ">=14" + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.31.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/api-metrics": "0.31.0", - "require-in-the-middle": "^5.0.3", - "semver": "^7.3.2", - "shimmer": "^1.2.1" - }, - "engines": { - "node": ">=14" + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-bunyan": { - "version": "0.29.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/instrumentation": "^0.29.2", - "@types/bunyan": "1.8.7" - }, - "engines": { - "node": ">=8.12.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@opentelemetry/api-metrics": { - "version": "0.29.2", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.0.0" + "node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=8.12.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@opentelemetry/instrumentation": { - "version": "0.29.2", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/api-metrics": "0.29.2", - "require-in-the-middle": "^5.0.3", - "semver": "^7.3.2", - "shimmer": "^1.2.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.30.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-progress": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "^1.0.0", - "@opentelemetry/instrumentation": "^0.29.2", - "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/express": "4.17.13" - }, - "engines": { - "node": ">=8.12.0" + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" - } - }, - "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/api-metrics": { - "version": "0.29.2", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=8.12.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/instrumentation": { - "version": "0.29.2", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/api-metrics": "0.29.2", - "require-in-the-middle": "^5.0.3", - "semver": "^7.3.2", - "shimmer": "^1.2.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-express/node_modules/@types/express": { - "version": "4.17.13", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-express/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-express/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-express/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.31.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.5.0", - "@opentelemetry/instrumentation": "0.31.0", - "@opentelemetry/semantic-conventions": "1.5.0", - "semver": "^7.3.5" + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { - "version": "1.5.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.5.0" - }, - "engines": { - "node": ">=14" + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.2.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.5.0", - "license": "Apache-2.0", - "engines": { - "node": ">=14" + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@radix-ui/react-separator": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@radix-ui/react-primitive": "2.1.3" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@opentelemetry/instrumentation/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/instrumentation/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@opentelemetry/propagator-b3": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.8.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/core": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.8.0" - }, - "engines": { - "node": ">=14" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.8.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/core": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.8.0" - }, - "engines": { - "node": ">=14" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/resources": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.8.0", - "@opentelemetry/semantic-conventions": "1.8.0" - }, - "engines": { - "node": ">=14" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-toolbar": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.11.tgz", + "integrity": "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.8.0" - }, - "engines": { - "node": ">=14" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-separator": "1.1.7", + "@radix-ui/react-toggle-group": "1.1.11" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.8.0", - "@opentelemetry/resources": "1.8.0", - "@opentelemetry/semantic-conventions": "1.8.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.8.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", "dependencies": { - "@opentelemetry/context-async-hooks": "1.8.0", - "@opentelemetry/core": "1.8.0", - "@opentelemetry/propagator-b3": "1.8.0", - "@opentelemetry/propagator-jaeger": "1.8.0", - "@opentelemetry/sdk-trace-base": "1.8.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">=14" + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/core": { - "version": "1.8.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.8.0" - }, - "engines": { - "node": ">=14" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.4.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@radix-ui/react-use-callback-ref": "1.1.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "use-sync-external-store": "^1.5.0" }, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/@radix-ui/react-use-is-hydrated/node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.8.0", - "license": "Apache-2.0", - "engines": { - "node": ">=14" + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openzeppelin/contract-loader": { - "version": "0.4.0", - "dev": true, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "try-require": "^1.2.1" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openzeppelin/test-helpers": { - "version": "0.5.6", - "dev": true, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", "license": "MIT", "dependencies": { - "@openzeppelin/contract-loader": "^0.4.0", - "@truffle/contract": "^4.0.35 <4.2.2", - "ansi-colors": "^3.2.3", - "chai": "^4.2.0", - "chai-bn": "^0.2.1", - "ethjs-abi": "^0.2.1", - "lodash.flatten": "^4.4.0", - "semver": "^5.6.0", - "web3": "^1.2.1", - "web3-utils": "^1.2.1" + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@openzeppelin/test-helpers/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@optimizely/js-sdk-datafile-manager": { - "version": "0.5.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", "dependencies": { - "@optimizely/js-sdk-logging": "^0.1.0", - "@optimizely/js-sdk-utils": "^0.2.0", - "decompress-response": "^4.2.1" - }, - "engines": { - "node": ">=6.0.0" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { - "@react-native-community/async-storage": "^1.2.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@optimizely/js-sdk-event-processor": { - "version": "0.4.0", - "license": "Apache-2.0", + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@react-native-async-storage/async-storage": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", + "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", "dependencies": { - "@optimizely/js-sdk-logging": "^0.1.0", - "@optimizely/js-sdk-utils": "^0.2.0" + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.60 <1.0" } }, - "node_modules/@optimizely/js-sdk-logging": { - "version": "0.1.0", + "node_modules/@react-native-clipboard/clipboard": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.16.3.tgz", + "integrity": "sha512-cMIcvoZKIrShzJHEaHbTAp458R9WOv0fB6UyC7Ek4Qk561Ow/DrzmmJmH/rAZg21Z6ixJ4YSdFDC14crqIBmCQ==", + "license": "MIT", + "workspaces": [ + "example" + ], + "peerDependencies": { + "react": ">= 16.9.0", + "react-native": ">= 0.61.5", + "react-native-macos": ">= 0.61.0", + "react-native-windows": ">= 0.61.0" + }, + "peerDependenciesMeta": { + "react-native-macos": { + "optional": true + }, + "react-native-windows": { + "optional": true + } + } + }, + "node_modules/@react-native-community/blur": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@react-native-community/blur/-/blur-4.4.1.tgz", + "integrity": "sha512-XBSsRiYxE/MOEln2ayunShfJtWztHwUxLFcSL20o+HNNRnuUDv+GXkF6FmM2zE8ZUfrnhQ/zeTqvnuDPGw6O8A==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-native-community/cli": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-18.0.0.tgz", + "integrity": "sha512-DyKptlG78XPFo7tDod+we5a3R+U9qjyhaVFbOPvH4pFNu5Dehewtol/srl44K6Cszq0aEMlAJZ3juk0W4WnOJA==", + "dev": true, "license": "MIT", "dependencies": { - "@optimizely/js-sdk-utils": "^0.1.0" + "@react-native-community/cli-clean": "18.0.0", + "@react-native-community/cli-config": "18.0.0", + "@react-native-community/cli-doctor": "18.0.0", + "@react-native-community/cli-server-api": "18.0.0", + "@react-native-community/cli-tools": "18.0.0", + "@react-native-community/cli-types": "18.0.0", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "rnc-cli": "build/bin.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@optimizely/js-sdk-logging/node_modules/@optimizely/js-sdk-utils": { - "version": "0.1.0", + "node_modules/@react-native-community/cli-clean": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-18.0.0.tgz", + "integrity": "sha512-+k64EnJaMI5U8iNDF9AftHBJW+pO/isAhncEXuKRc6IjRtIh6yoaUIIf5+C98fgjfux7CNRZAMQIkPbZodv2Gw==", + "dev": true, "license": "MIT", "dependencies": { - "uuid": "^3.3.2" + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, - "node_modules/@optimizely/js-sdk-utils": { - "version": "0.2.0", + "node_modules/@react-native-community/cli-clean/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, "license": "MIT", "dependencies": { - "uuid": "^3.3.2" + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@optimizely/optimizely-sdk": { - "version": "4.0.0", - "license": "Apache-2.0", + "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { - "@optimizely/js-sdk-datafile-manager": "^0.5.0", - "@optimizely/js-sdk-event-processor": "^0.4.0", - "@optimizely/js-sdk-logging": "^0.1.0", - "@optimizely/js-sdk-utils": "^0.2.0", - "json-schema": "^0.2.3", - "murmurhash": "0.0.2", - "uuid": "^3.3.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@parcel/watcher": { - "version": "2.4.1", + "node_modules/@react-native-community/cli-clean/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.4.1", - "@parcel/watcher-darwin-arm64": "2.4.1", - "@parcel/watcher-darwin-x64": "2.4.1", - "@parcel/watcher-freebsd-x64": "2.4.1", - "@parcel/watcher-linux-arm-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-musl": "2.4.1", - "@parcel/watcher-linux-x64-glibc": "2.4.1", - "@parcel/watcher-linux-x64-musl": "2.4.1", - "@parcel/watcher-win32-arm64": "2.4.1", - "@parcel/watcher-win32-ia32": "2.4.1", - "@parcel/watcher-win32-x64": "2.4.1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.4.1", - "cpu": [ - "arm64" - ], + "node_modules/@react-native-community/cli-clean/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">= 8" } }, - "node_modules/@parcel/watcher-wasm": { - "version": "2.4.1", - "bundleDependencies": [ - "napi-wasm" - ], + "node_modules/@react-native-community/cli-clean/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", "dependencies": { - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "napi-wasm": "^1.1.0" + "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" }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" + "node_modules/@react-native-community/cli-clean/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.1.0", + "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", "engines": { - "node": "^16 || ^18 || >= 20" - } - }, - "node_modules/@paulmillr/qr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", - "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", - "license": "(MIT OR Apache-2.0)", + "node": ">=10" + }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" + "node_modules/@react-native-community/cli-clean/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" } }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", + "node_modules/@react-native-community/cli-clean/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8.0.0" - } + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@peculiar/webcrypto": { - "version": "1.4.3", + "node_modules/@react-native-community/cli-clean/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.5.0", - "webcrypto-core": "^1.7.7" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=10.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pedalboard/anti-abuse-oracle": { - "resolved": "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle", - "link": true - }, - "node_modules/@pedalboard/archiver": { - "resolved": "packages/discovery-provider/plugins/pedalboard/apps/archiver", - "link": true - }, - "node_modules/@pedalboard/basekit": { - "resolved": "packages/discovery-provider/plugins/pedalboard/packages/basekit", - "link": true - }, - "node_modules/@pedalboard/logger": { - "resolved": "packages/discovery-provider/plugins/pedalboard/packages/logger", - "link": true - }, - "node_modules/@pedalboard/solana-relay": { - "resolved": "packages/discovery-provider/plugins/pedalboard/apps/solana-relay", - "link": true + "node_modules/@react-native-community/cli-clean/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@pedalboard/staking": { - "resolved": "packages/discovery-provider/plugins/pedalboard/apps/staking", - "link": true + "node_modules/@react-native-community/cli-clean/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@pedalboard/storage": { - "resolved": "packages/discovery-provider/plugins/pedalboard/packages/storage", - "link": true + "node_modules/@react-native-community/cli-clean/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@phosphor-icons/core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@phosphor-icons/core/-/core-2.1.1.tgz", - "integrity": "sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==", - "license": "MIT" + "node_modules/@react-native-community/cli-clean/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@pinata/sdk": { - "version": "1.1.13", + "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "axios": "^0.21.1", - "base-path-converter": "^1.0.2", - "form-data": "^2.3.3", - "is-ipfs": "^0.6.0", - "recursive-fs": "^1.1.2" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@pinata/sdk/node_modules/axios": { - "version": "0.21.4", + "node_modules/@react-native-community/cli-config": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-18.0.0.tgz", + "integrity": "sha512-GUGvyek06JRF4mfd9zXao9YQW4+H8ny69HznqNXVRtVSIIekFyjOpKQeSEzdcyqJEEa5gej22GOz1JCHMKBccg==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.0" + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "cosmiconfig": "^9.0.0", + "deepmerge": "^4.3.0", + "fast-glob": "^3.3.2", + "joi": "^17.2.1" } }, - "node_modules/@pinata/sdk/node_modules/follow-redirects": { - "version": "1.15.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/@react-native-community/cli-config-android": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-18.0.1.tgz", + "integrity": "sha512-1wzmGLfS7qgzm0ZfwX/f6Lat/af8/UYdjwtb3ap6RfKNclvIoap0wN6uBeiANmLfk0/BhoG8K1vKtIPwlU/V1A==", + "license": "MIT", + "dependencies": { + "@react-native-community/cli-tools": "18.0.1", + "chalk": "^4.1.2", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.4.1" + } + }, + "node_modules/@react-native-community/cli-config-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=4.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pinata/sdk/node_modules/form-data": { - "version": "2.5.1", - "dev": true, + "node_modules/@react-native-community/cli-config-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", + "node_modules/@react-native-community/cli-config-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", - "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/@pkgr/core": { - "version": "0.1.0", - "dev": true, + "node_modules/@react-native-community/cli-config-apple": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-18.0.1.tgz", + "integrity": "sha512-ybr1ZrOSd/Z+oCJ1qVSKVQauvneObTu3VjvYPhhrme7tUUSaYmd3iikaWonbKk5rVp+2WqOFR6Cy7XqVfwwG8A==", + "license": "MIT", + "dependencies": { + "@react-native-community/cli-tools": "18.0.1", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", + "node_modules/@react-native-community/cli-config-apple/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@pkgr/utils/node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/@react-native-community/cli-config-apple/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -22640,31 +22098,63 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", + "node_modules/@react-native-community/cli-config-apple/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "license": "MIT", "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "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" }, "engines": { - "node": ">=14.16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pkgr/utils/node_modules/path-key": { + "node_modules/@react-native-community/cli-config-apple/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@pkgr/utils/node_modules/shebang-command": { + "node_modules/@react-native-community/cli-config-apple/node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -22673,48 +22163,51 @@ "node": ">=8" } }, - "node_modules/@pkgr/utils/node_modules/shebang-regex": { + "node_modules/@react-native-community/cli-config-apple/node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@playwright/test": { - "version": "1.42.1", - "dev": true, - "license": "Apache-2.0", + "node_modules/@react-native-community/cli-config-apple/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { - "playwright": "1.42.1" - }, - "bin": { - "playwright": "cli.js" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/@pm2/agent": { - "version": "2.0.3", - "license": "AGPL-3.0", + "node_modules/@react-native-community/cli-config/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, + "license": "MIT", "dependencies": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.3.1", - "eventemitter2": "~5.0.1", - "fast-json-patch": "^3.0.0-1", - "fclone": "~1.0.11", - "nssocket": "0.6.0", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~6.3.0", - "semver": "~7.5.0", - "ws": "~7.4.0" + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@pm2/agent/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -22726,127 +22219,197 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pm2/agent/node_modules/async": { - "version": "3.2.5", - "license": "MIT" + "node_modules/@react-native-community/cli-config/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" }, - "node_modules/@pm2/agent/node_modules/chalk": { - "version": "3.0.0", + "node_modules/@react-native-community/cli-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@pm2/agent/node_modules/dayjs": { - "version": "1.8.36", - "license": "MIT" - }, - "node_modules/@pm2/agent/node_modules/eventemitter2": { - "version": "5.0.1", - "license": "MIT" - }, - "node_modules/@pm2/agent/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@pm2/agent/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@react-native-community/cli-config/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">= 8" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "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" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@pm2/agent/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@react-native-community/cli-config/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pm2/agent/node_modules/ws": { - "version": "7.4.6", + "node_modules/@react-native-community/cli-config/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node": ">=10" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pm2/agent/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@pm2/io": { - "version": "5.0.2", - "license": "Apache-2", - "dependencies": { - "@opencensus/core": "0.0.9", - "@opencensus/propagation-b3": "0.0.8", - "async": "~2.6.1", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "~7.5.4", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, + "node_modules/@react-native-community/cli-config/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=6.0" + "node": ">=10.17.0" } }, - "node_modules/@pm2/io/node_modules/async": { - "version": "2.6.4", + "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@pm2/io/node_modules/lru-cache": { + "node_modules/@react-native-community/cli-config/node_modules/locate-path": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pm2/io/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "node_modules/@react-native-community/cli-config/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -22854,2616 +22417,1511 @@ "node": ">=10" } }, - "node_modules/@pm2/io/node_modules/tslib": { - "version": "1.9.3", - "license": "Apache-2.0" - }, - "node_modules/@pm2/io/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@pm2/js-api": { - "version": "0.6.7", - "license": "Apache-2", + "node_modules/@react-native-community/cli-config/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", "dependencies": { - "async": "^2.6.3", - "axios": "^0.21.0", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "ws": "^7.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/@pm2/js-api/node_modules/async": { - "version": "2.6.4", + "node_modules/@react-native-community/cli-config/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" + "engines": { + "node": ">=8" } }, - "node_modules/@pm2/js-api/node_modules/axios": { - "version": "0.21.4", + "node_modules/@react-native-community/cli-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@pm2/js-api/node_modules/follow-redirects": { - "version": "1.15.3", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/@react-native-community/cli-doctor": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-18.0.0.tgz", + "integrity": "sha512-cD3LJfu2h2QSFmZai+fl7RrORKodd5XHSuB7Y9oF1zkebpRYN720vaUtK+GsepqBOElwKk5gl8uVolJ3j+xm8A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "dependencies": { + "@react-native-community/cli-config": "18.0.0", + "@react-native-community/cli-platform-android": "18.0.0", + "@react-native-community/cli-platform-apple": "18.0.0", + "@react-native-community/cli-platform-ios": "18.0.0", + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.13.0", + "execa": "^5.0.0", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" } }, - "node_modules/@pm2/pm2-version-check": { - "version": "1.0.4", + "node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.1" + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12.22.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", + "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "4.2.10" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=12.22.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", + "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "license": "MIT" - }, - "node_modules/@project-serum/anchor": { - "version": "0.24.1", - "license": "(MIT OR Apache-2.0)", + "node_modules/@react-native-community/cli-doctor/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", "dependencies": { - "@project-serum/borsh": "^0.2.5", - "@solana/web3.js": "^1.36.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^5.3.1", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "toml": "^3.0.0" + "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" }, "engines": { - "node": ">=11" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@project-serum/borsh": { - "version": "0.2.5", - "license": "Apache-2.0", + "node_modules/@react-native-community/cli-doctor/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, - "peerDependencies": { - "@solana/web3.js": "^1.2.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "node_modules/@react-native-community/cli-doctor/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "license": "BSD-3-Clause" - }, - "node_modules/@radix-ui/colors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", - "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==", - "license": "MIT" - }, - "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" + "node_modules/@react-native-community/cli-doctor/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } }, - "node_modules/@radix-ui/react-accessible-icon": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz", - "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==", + "node_modules/@react-native-community/cli-doctor/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-visually-hidden": "1.2.3" + "p-locate": "^5.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-accordion": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", - "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "node_modules/@react-native-community/cli-doctor/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collapsible": "1.1.12", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "p-limit": "^3.0.2" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-doctor/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", - "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "node_modules/@react-native-community/cli-doctor/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dialog": "1.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "shebang-regex": "^3.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-doctor/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/yaml": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", + "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "node_modules/@react-native-community/cli-platform-android": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-18.0.0.tgz", + "integrity": "sha512-3Y3RleN/des1C3oRS6s6fDvFYKN0KwsLrYFRpVx9vzdDnH1OGyFJOy4DbrruSPtdNiHUpvvHnOOxeLMj0+/tmw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@react-native-community/cli-config-android": "18.0.0", + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "logkitty": "^0.7.1" } }, - "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", - "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "node_modules/@react-native-community/cli-platform-android/node_modules/@react-native-community/cli-config-android": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-18.0.0.tgz", + "integrity": "sha512-pgnhEO2cmOeb+bBFEBZFYjeFjDTqWoV0JTorTiugj9bb4RQRCl8cr35baVlBGhxAuaio3722CsJ9GRF1oHjP8w==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.4.1" } }, - "node_modules/@radix-ui/react-avatar": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", - "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "node_modules/@react-native-community/cli-platform-android/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", - "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", - "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "node_modules/@react-native-community/cli-platform-android/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "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" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@react-native-community/cli-platform-android/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "p-locate": "^5.0.0" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", + "node_modules/@react-native-community/cli-platform-android/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" + "p-limit": "^3.0.2" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "node_modules/@react-native-community/cli-platform-android/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@radix-ui/react-context-menu": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", - "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "shebang-regex": "^3.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@react-native-community/cli-platform-apple": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-18.0.0.tgz", + "integrity": "sha512-zD18gdP5Wr8BSLJ79xtHuPYcg2Vi/nL+WsGsPm7TZjzR5ZU2WbY/tZ+qTGVTQYhQaah+92sU+Dam7gStMrF/fA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@react-native-community/cli-config-apple": "18.0.0", + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.4.1" } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/@react-native-community/cli-config-apple": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-18.0.0.tgz", + "integrity": "sha512-6edjTt3mlNMFBuB/Xd6u0O7GEkhJiKvQgmcoBH18FsNy5cpiHDwQsG8EWM5cHeINp1gMK845qq9fFsTko6gqyQ==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "@react-native-community/cli-tools": "18.0.0", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "color-convert": "^2.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "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" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-form": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.8.tgz", - "integrity": "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-label": "2.1.7", - "@radix-ui/react-primitive": "2.1.3" + "p-locate": "^5.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "p-limit": "^3.0.2" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", - "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", - "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "shebang-regex": "^3.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", - "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", + "node_modules/@react-native-community/cli-platform-ios": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-18.0.0.tgz", + "integrity": "sha512-05Nvkkre/4Gao1TYqyP1wGet8td1dAH0CLJKqLNl9Te6ihnrQ8/8OhjIna5xw0iEFr9An8VdLfaPu1Dgv2qAnQ==", + "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" + "dependencies": { + "@react-native-community/cli-platform-apple": "18.0.0" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "node_modules/@react-native-community/cli-server-api": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-18.0.0.tgz", + "integrity": "sha512-tdmGV7ZntYmzrXWheZNpAy6dVI2yrsX4sQH+xAzU7lCfKHk6J8GucxedduXnB5qBB4JgSrrbzg2RLNxv5v0S/Q==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@react-native-community/cli-tools": "18.0.0", + "body-parser": "^1.20.3", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "open": "^6.2.0", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^6.2.3" } }, - "node_modules/@radix-ui/react-label": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", - "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { + "version": "15.0.20", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz", + "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@types/yargs-parser": "*" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-slot": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", - "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "node_modules/@react-native-community/cli-server-api/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 0.8" } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/react-menubar": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", - "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "node_modules/@react-native-community/cli-server-api/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-menubar/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", - "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "node_modules/@react-native-community/cli-server-api/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.8" } }, - "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@radix-ui/react-one-time-password-field": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz", - "integrity": "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==", + "node_modules/@react-native-community/cli-server-api/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "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" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-one-time-password-field/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@radix-ui/react-password-toggle-field": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.3.tgz", - "integrity": "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==", + "node_modules/@react-native-community/cli-server-api/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-is-hydrated": "0.1.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-password-toggle-field/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "node_modules/@react-native-community/cli-server-api/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">= 0.8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node_modules/@react-native-community/cli-server-api/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "node_modules/@react-native-community/cli-server-api/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "safer-buffer": ">= 2.1.2 < 3" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" + "p-locate": "^5.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-native-community/cli-server-api/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "ee-first": "1.1.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.8" } }, - "node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "is-wsl": "^1.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.3" + "p-limit": "^3.0.2" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-progress": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", - "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "node_modules/@react-native-community/cli-server-api/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-native-community/cli-server-api/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", - "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-server-api/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "shebang-regex": "^3.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "node_modules/@react-native-community/cli-server-api/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.8" } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", - "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "async-limiter": "~1.0.0" } }, - "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-tools": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz", + "integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==", "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "@vscode/sudo-prompt": "^9.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "launch-editor": "^2.9.1", + "mime": "^2.4.1", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2" } }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@react-native-community/cli-tools/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", - "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "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" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@radix-ui/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "node_modules/@react-native-community/cli-tools/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-tools/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", + "node_modules/@react-native-community/cli-tools/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "p-locate": "^5.0.0" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-switch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", - "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "p-limit": "^3.0.2" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-tools/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "node_modules/@react-native-community/cli-tools/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "shebang-regex": "^3.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-toast": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", - "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "node_modules/@react-native-community/cli-tools/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@react-native-community/cli-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-18.0.0.tgz", + "integrity": "sha512-J84+4IRXl8WlVdoe1maTD5skYZZO9CbQ6LNXEHx1kaZcFmvPZKfjsaxuyQ+8BsSqZnM2izOw8dEWnAp/Zuwb0w==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "dependencies": { + "joi": "^17.2.1" } }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", - "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.11.tgz", - "integrity": "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-separator": "1.1.7", - "@radix-ui/react-toggle-group": "1.1.11" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", - "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", - "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.5.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-is-hydrated/node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, - "node_modules/@randlabs/communication-bridge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz", - "integrity": "sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg==", - "optional": true - }, - "node_modules/@randlabs/myalgo-connect": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz", - "integrity": "sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA==", - "optional": true, - "dependencies": { - "@randlabs/communication-bridge": "1.0.1" - } - }, - "node_modules/@react-native-async-storage/async-storage": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", - "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", - "dependencies": { - "merge-options": "^3.0.4" - }, - "peerDependencies": { - "react-native": "^0.0.0-0 || >=0.60 <1.0" - } - }, - "node_modules/@react-native-clipboard/clipboard": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.16.3.tgz", - "integrity": "sha512-cMIcvoZKIrShzJHEaHbTAp458R9WOv0fB6UyC7Ek4Qk561Ow/DrzmmJmH/rAZg21Z6ixJ4YSdFDC14crqIBmCQ==", - "license": "MIT", - "workspaces": [ - "example" - ], - "peerDependencies": { - "react": ">= 16.9.0", - "react-native": ">= 0.61.5", - "react-native-macos": ">= 0.61.0", - "react-native-windows": ">= 0.61.0" - }, - "peerDependenciesMeta": { - "react-native-macos": { - "optional": true - }, - "react-native-windows": { - "optional": true - } - } - }, - "node_modules/@react-native-community/blur": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@react-native-community/blur/-/blur-4.4.1.tgz", - "integrity": "sha512-XBSsRiYxE/MOEln2ayunShfJtWztHwUxLFcSL20o+HNNRnuUDv+GXkF6FmM2zE8ZUfrnhQ/zeTqvnuDPGw6O8A==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@react-native-community/cli-config-android": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-18.0.1.tgz", - "integrity": "sha512-1wzmGLfS7qgzm0ZfwX/f6Lat/af8/UYdjwtb3ap6RfKNclvIoap0wN6uBeiANmLfk0/BhoG8K1vKtIPwlU/V1A==", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "18.0.1", - "chalk": "^4.1.2", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1" - } - }, - "node_modules/@react-native-community/cli-config-android/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-config-android/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-config-android/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-config-apple": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-18.0.1.tgz", - "integrity": "sha512-ybr1ZrOSd/Z+oCJ1qVSKVQauvneObTu3VjvYPhhrme7tUUSaYmd3iikaWonbKk5rVp+2WqOFR6Cy7XqVfwwG8A==", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "18.0.1", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-config-apple/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz", - "integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==", + "node_modules/@react-native-community/cli/node_modules/@react-native-community/cli-tools": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz", + "integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==", + "dev": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", @@ -25478,10 +23936,11 @@ "semver": "^7.5.2" } }, - "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -25493,10 +23952,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "node_modules/@react-native-community/cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -25509,10 +23969,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-tools/node_modules/cross-spawn": { + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@react-native-community/cli/node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -25523,10 +23994,11 @@ "node": ">= 8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "node_modules/@react-native-community/cli/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -25546,10 +24018,11 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@react-native-community/cli-tools/node_modules/find-up": { + "node_modules/@react-native-community/cli/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -25562,10 +24035,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/get-stream": { + "node_modules/@react-native-community/cli/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -25574,19 +24048,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/human-signals": { + "node_modules/@react-native-community/cli/node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { + "node_modules/@react-native-community/cli/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -25598,10 +24074,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { + "node_modules/@react-native-community/cli/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -25613,19 +24090,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/path-key": { + "node_modules/@react-native-community/cli/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/@react-native-community/cli/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -25634,10 +24113,11 @@ "node": ">=10" } }, - "node_modules/@react-native-community/cli-tools/node_modules/shebang-command": { + "node_modules/@react-native-community/cli/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -25646,19 +24126,21 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/shebang-regex": { + "node_modules/@react-native-community/cli/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "node_modules/@react-native-community/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -25696,31 +24178,33 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.78.3.tgz", - "integrity": "sha512-gQGoxEq7CuY/LjnHjORrNnJzUkx0YH7r/U1bvdznaaZ4CLcRFa1nKZEmZMv0h9moVqzr7GUbphJzS+RwqoGYIg==", + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.79.5.tgz", + "integrity": "sha512-N4Kt1cKxO5zgM/BLiyzuuDNquZPiIgfktEQ6TqJ/4nKA8zr4e8KJgU6Tb2eleihDO4E24HmkvGc73naybKRz/w==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.78.3.tgz", - "integrity": "sha512-yKs7KR9CzqGaM8mZi4vdjgaNgqomj094U325h2GWqsdj9+m/lf8e/Crd9sLDFtK0W2UCbcVw2L+M8okqXJ3oHw==", + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.5.tgz", + "integrity": "sha512-Rt/imdfqXihD/sn0xnV4flxxb1aLLjPtMF1QleQjEhJsTUPpH4TFlfOpoCvsrXoDl4OIcB1k4FVM24Ez92zf5w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.78.3" + "@react-native/codegen": "0.79.5" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.78.3.tgz", - "integrity": "sha512-L1DRY8CYbrnpFoqVgeRW1FO8ZfgagYd3nx0M+9oaqG/VFX5rrfoMt011ZDeoYpmNayZS7klkqCFQLXVWAMPNBA==", + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.79.5.tgz", + "integrity": "sha512-GDUYIWslMLbdJHEgKNfrOzXk8EDKxKzbwmBXUugoiSlr6TyepVZsj3GZDLEFarOcTwH1EXXHJsixihk8DCRQDA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -25764,7 +24248,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.78.3", + "@react-native/babel-plugin-codegen": "0.79.5", "babel-plugin-syntax-hermes-parser": "0.25.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -25777,29 +24261,31 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@react-native/babel-preset/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -25816,13 +24302,14 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -25832,12 +24319,13 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -25848,30 +24336,32 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@react-native/babel-preset/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -25881,25 +24371,27 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@react-native/babel-preset/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -25909,16 +24401,17 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -25928,13 +24421,14 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", - "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -25948,31 +24442,33 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@react-native/babel-preset/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -25980,9 +24476,10 @@ } }, "node_modules/@react-native/babel-preset/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -25993,13 +24490,14 @@ } }, "node_modules/@react-native/babel-preset/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { @@ -26010,6 +24508,7 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", @@ -26020,12 +24519,13 @@ } }, "node_modules/@react-native/babel-preset/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -26035,12 +24535,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/@react-native/babel-preset/node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -26058,28 +24560,28 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/@react-native/babel-preset/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@react-native/codegen": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.78.3.tgz", - "integrity": "sha512-p6mbFm6vvDskMj3zBzFIhHc85i2G/f47HwkFLJYSdWUITrPaVlXLSjSoCQPhYSNqrMv2g376OZZ+QXjp50XnTQ==", + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.79.5.tgz", + "integrity": "sha512-FO5U1R525A1IFpJjy+KVznEinAgcs3u7IbnbRJUG9IH/MBXi2lEU2LtN+JarJ81MCfW4V2p0pg6t/3RGHFRrlQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", "glob": "^7.1.1", "hermes-parser": "0.25.1", "invariant": "^2.2.4", - "jscodeshift": "^17.0.0", "nullthrows": "^1.1.1", "yargs": "^17.6.2" }, @@ -26087,33 +24589,200 @@ "node": ">=18" }, "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "@babel/core": "*" } }, - "node_modules/@react-native/codegen/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "node_modules/@react-native/community-cli-plugin": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.5.tgz", + "integrity": "sha512-ApLO1ARS8JnQglqS3JAHk0jrvB+zNW3dvNJyXPZPoygBpZVbf8sjvqeBiaEYpn8ETbFWddebC4HoQelDndnrrA==", + "license": "MIT", + "dependencies": { + "@react-native/dev-middleware": "0.79.5", + "chalk": "^4.0.0", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "metro": "^0.82.0", + "metro-config": "^0.82.0", + "metro-core": "^0.82.0", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@react-native-community/cli": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.79.5.tgz", + "integrity": "sha512-WQ49TRpCwhgUYo5/n+6GGykXmnumpOkl4Lr2l2o2buWU9qPOwoiBqJAtmWEXsAug4ciw3eLiVfthn5ufs0VB0A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.79.5.tgz", + "integrity": "sha512-U7r9M/SEktOCP/0uS6jXMHmYjj4ESfYCkNAenBjFjjsRWekiHE+U/vRMeO+fG9gq4UCcBAUISClkQCowlftYBw==", + "license": "MIT", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.79.5", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.79.5.tgz", + "integrity": "sha512-K3QhfFNKiWKF3HsCZCEoWwJPSMcPJQaeqOmzFP4RL8L3nkpgUwn74PfSCcKHxooVpS6bMvJFQOz7ggUZtNVT+A==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.79.5.tgz", + "integrity": "sha512-a2wsFlIhvd9ZqCD5KPRsbCQmbZi6KxhRN++jrqG0FUTEV5vY7MvjjUqDILwJd2ZBZsf7uiDuClCcKqA+EEdbvw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.79.5.tgz", + "integrity": "sha512-83Kmlwyg+XKvXXGH6agxiQdEwXKJuaGco2KPPmHSFp/jxKan+HFYZOKTmmxRM7ysULuafsuDYLcyicYeGAJ2rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@react-native/babel-preset": "0.79.5", + "hermes-parser": "0.25.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -26129,14 +24798,15 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@react-native/codegen/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -26145,13 +24815,14 @@ "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -26161,15 +24832,16 @@ "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -26178,26 +24850,28 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -26206,80 +24880,45 @@ "node": ">=6.0.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/preset-typescript": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", - "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@react-native/codegen/node_modules/@babel/register": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.3.tgz", - "integrity": "sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@react-native/codegen/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -26289,1877 +24928,726 @@ "node": ">=6.9.0" } }, - "node_modules/@react-native/codegen/node_modules/convert-source-map": { + "node_modules/@react-native/metro-babel-transformer/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, - "node_modules/@react-native/codegen/node_modules/jscodeshift": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-17.3.0.tgz", - "integrity": "sha512-LjFrGOIORqXBU+jwfC9nbkjmQfFldtMIoS6d9z2LG/lkmyNXsJAySPT+2SWXJEoE68/bCWcxKpXH37npftgmow==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/preset-flow": "^7.24.7", - "@babel/preset-typescript": "^7.24.7", - "@babel/register": "^7.24.6", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.7", - "neo-async": "^2.5.0", - "picocolors": "^1.0.1", - "recast": "^0.23.11", - "tmp": "^0.2.3", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - }, - "peerDependenciesMeta": { - "@babel/preset-env": { - "optional": true - } - } - }, - "node_modules/@react-native/codegen/node_modules/semver": { + "node_modules/@react-native/metro-babel-transformer/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@react-native/codegen/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/@react-native/normalize-color": { + "version": "2.1.0", + "license": "MIT" }, - "node_modules/@react-native/codegen/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/@react-native/normalize-colors": { + "version": "0.74.85", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", + "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==", + "license": "MIT" }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.78.3.tgz", - "integrity": "sha512-Ax4mYFHxWH7xDsfPr7UR+WHBXAv3rXNzROEc7xVNsbNtpNVTHSqawUfDzH8jCO4rJEYQU18RARHwhBIXKwLFew==", + "node_modules/@react-native/virtualized-lists": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.79.5.tgz", + "integrity": "sha512-EUPM2rfGNO4cbI3olAbhPkIt3q7MapwCwAJBzUfWlZ/pu0PRNOnMQ1IvaXTf3TpeozXV52K1OdprLEI/kI5eUA==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.78.3", - "@react-native/metro-babel-transformer": "0.78.3", - "chalk": "^4.0.0", - "debug": "^2.2.0", "invariant": "^2.2.4", - "metro": "^0.81.3", - "metro-config": "^0.81.3", - "metro-core": "^0.81.3", - "readline": "^1.3.0", - "semver": "^7.1.3" + "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@react-native-community/cli": "*" + "@types/react": "^19.0.0", + "react": "*", + "react-native": "*" }, "peerDependenciesMeta": { - "@react-native-community/cli": { + "@types/react": { "optional": true } } }, - "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@react-navigation/core": { + "version": "7.13.6", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-7.13.6.tgz", + "integrity": "sha512-7QG29HAWOR8wYuPkfTN8L2Po+kE1xn3nsi2sS35sGngq8HYZRHfXvxrhrAZYfFnFq2hUtOhcXnSS6vEWU/5rmA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@react-navigation/routers": "^7.5.2", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.3.11", + "query-string": "^7.1.3", + "react-is": "^19.1.0", + "use-latest-callback": "^0.2.4", + "use-sync-external-store": "^1.5.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "react": ">= 18.2.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@react-navigation/core/node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@react-navigation/core/node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@react-navigation/core/node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.78.3.tgz", - "integrity": "sha512-ImYGtEI9zsF/pietY45M8vd3OVWEkECbOngOhul0GVHECBsSHuOaQ/8PoxWl9Rps+8p1048aIMsPT9QzEtGwtQ==", - "license": "BSD-3-Clause", + "node_modules/@react-navigation/core/node_modules/react-is": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz", + "integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==", + "license": "MIT" + }, + "node_modules/@react-navigation/core/node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/@react-native/dev-middleware": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.78.3.tgz", - "integrity": "sha512-7upCJUYTFt3AwDQqByWDmTdlHYU93AdU+rsndis2xsJI4h7DrEjKtvvEgFOJG+jGHcyct9vNu1S+Jj2g8DRguQ==", + "node_modules/@react-navigation/core/node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.78.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "selfsigned": "^2.4.1", - "serve-static": "^1.16.2", - "ws": "^6.2.3" - }, - "engines": { - "node": ">=18" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@react-navigation/elements": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-2.9.2.tgz", + "integrity": "sha512-J1GltOAGowNLznEphV/kr4zs0U7mUBO1wVA2CqpkN8ePBsoxrAmsd+T5sEYUCXN9KgTDFvc6IfcDqrGSQngd/g==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "color": "^4.2.3", + "use-latest-callback": "^0.2.4", + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@react-native-masked-view/masked-view": ">= 0.2.0", + "@react-navigation/native": "^7.1.25", + "react": ">= 18.2.0", + "react-native": "*", + "react-native-safe-area-context": ">= 4.0.0" + }, + "peerDependenciesMeta": { + "@react-native-masked-view/masked-view": { + "optional": true + } } }, - "node_modules/@react-native/dev-middleware/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/@react-navigation/elements/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=12.5.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@react-navigation/elements/node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/@react-navigation/native": { + "version": "7.1.25", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.25.tgz", + "integrity": "sha512-zQeWK9txDePWbYfqTs0C6jeRdJTm/7VhQtW/1IbJNDi9/rFIRzZule8bdQPAnf8QWUsNujRmi1J9OG/hhfbalg==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@react-navigation/core": "^7.13.6", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.3.11", + "use-latest-callback": "^0.2.4" + }, + "peerDependencies": { + "react": ">= 18.2.0", + "react-native": "*" } }, - "node_modules/@react-native/dev-middleware/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/@react-navigation/routers": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-7.5.2.tgz", + "integrity": "sha512-kymreY5aeTz843E+iPAukrsOtc7nabAH6novtAPREmmGu77dQpfxPB2ZWpKb5nRErIRowp1kYRoN2Ckl+S6JYw==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "nanoid": "^3.3.11" } }, - "node_modules/@react-native/dev-middleware/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/@react-navigation/stack": { + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-7.6.12.tgz", + "integrity": "sha512-hq5d+lWUwBnwPcBNyUYHiirzRuiD5YhQDIgZWzRConfcRwI/qwFW5+5bCCJ3fQZnNlP05UA4ZlI6r1ysU6y6ww==", "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "@react-navigation/elements": "^2.9.2", + "color": "^4.2.3", + "use-latest-callback": "^0.2.4" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@react-navigation/native": "^7.1.25", + "react": ">= 18.2.0", + "react-native": "*", + "react-native-gesture-handler": ">= 2.0.0", + "react-native-safe-area-context": ">= 4.0.0", + "react-native-screens": ">= 4.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/@react-native/dev-middleware/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/@react-navigation/stack/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">= 0.8" + "node": ">=12.5.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "node_modules/@react-spring/animated": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-10.0.3.tgz", + "integrity": "sha512-7MrxADV3vaUADn2V9iYhaIL6iOWRx9nCJjYrsk2AHD2kwPr6fg7Pt0v+deX5RnCDmCKNnD6W5fasiyM8D+wzJQ==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/@react-spring/core": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-10.0.3.tgz", + "integrity": "sha512-D4DwNO68oohDf/0HG2G0Uragzb9IA1oXblxrd6MZAcBcUQG2EHUWXewjdECMPLNmQvlYVyyBRH6gPxXM5DX7DQ==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@react-spring/animated": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/@react-spring/rafz": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-10.0.3.tgz", + "integrity": "sha512-Ri2/xqt8OnQ2iFKkxKMSF4Nqv0LSWnxXT4jXFzBDsHgeeH/cHxTLupAWUwmV9hAGgmEhBmh5aONtj3J6R/18wg==", "license": "MIT" }, - "node_modules/@react-native/dev-middleware/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "node_modules/@react-spring/shared": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-10.0.3.tgz", + "integrity": "sha512-geCal66nrkaQzUVhPkGomylo+Jpd5VPK8tPMEDevQEfNSWAQP15swHm+MCRG4wVQrQlTi9lOzKzpRoTL3CA84Q==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "@react-spring/rafz": "~10.0.3", + "@react-spring/types": "~10.0.3" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" + "node_modules/@react-spring/types": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.0.3.tgz", + "integrity": "sha512-H5Ixkd2OuSIgHtxuHLTt7aJYfhMXKXT/rK32HPD/kSrOB6q6ooeiWAXkBy7L8F3ZxdkBb9ini9zP9UwnEFzWgQ==", + "license": "MIT" }, - "node_modules/@react-native/dev-middleware/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/@react-spring/web": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-10.0.3.tgz", + "integrity": "sha512-ndU+kWY81rHsT7gTFtCJ6mrVhaJ6grFmgTnENipzmKqot4HGf5smPNK+cZZJqoGeDsj9ZsiWPW4geT/NyD484A==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@react-spring/animated": "~10.0.3", + "@react-spring/core": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "node_modules/@redux-devtools/app": { + "version": "6.0.0", + "dev": true, "license": "MIT", "dependencies": { - "async-limiter": "~1.0.0" + "@babel/runtime": "^7.23.5", + "@redux-devtools/chart-monitor": "^5.0.0", + "@redux-devtools/core": "^4.0.0", + "@redux-devtools/inspector-monitor": "^6.0.0", + "@redux-devtools/inspector-monitor-test-tab": "^4.0.0", + "@redux-devtools/inspector-monitor-trace-tab": "^4.0.0", + "@redux-devtools/log-monitor": "^5.0.0", + "@redux-devtools/rtk-query-monitor": "^5.0.0", + "@redux-devtools/slider-monitor": "^5.0.0", + "@redux-devtools/ui": "^1.3.1", + "@reduxjs/toolkit": "^1.9.7", + "d3-state-visualizer": "^2.0.0", + "javascript-stringify": "^2.1.0", + "jsan": "^3.1.14", + "jsondiffpatch": "^0.5.0", + "localforage": "^1.10.0", + "lodash": "^4.17.21", + "react-icons": "^4.12.0", + "react-is": "^18.2.0", + "react-redux": "^8.1.3", + "redux": "^4.2.1", + "redux-persist": "^6.0.0", + "socketcluster-client": "^17.2.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "@types/styled-components": "^5.1.34", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0", + "styled-components": "^5.3.11" } }, - "node_modules/@react-native/eslint-config": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.76.9.tgz", - "integrity": "sha512-qPAF8o01NQBOfpr+oaVXRABC/GEqNs378cUBNsqQjXpVHJtF13cbMF+2YEpp4zKfv3JSWtdrHd3oAK0UF86O4Q==", + "node_modules/@redux-devtools/app/node_modules/@babel/runtime": { + "version": "7.23.9", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.25.2", - "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.76.9", - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-ft-flow": "^2.0.1", - "eslint-plugin-jest": "^27.9.0", - "eslint-plugin-react": "^7.30.1", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-native": "^4.0.0" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": ">=8", - "prettier": ">=2" + "node": ">=6.9.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "node_modules/@redux-devtools/app/node_modules/@redux-devtools/core": { + "version": "4.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/runtime": "^7.23.5", + "@redux-devtools/instrument": "^2.2.0", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "react-redux": "^7.0.0 || ^8.0.0 || ^9.0.0", + "redux": "^3.5.2 || ^4.0.0 || ^5.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "node_modules/@redux-devtools/app/node_modules/@reduxjs/toolkit": { + "version": "1.9.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@redux-devtools/app/node_modules/immer": { + "version": "9.0.21", + "dev": true, + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/immer" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "node_modules/@redux-devtools/app/node_modules/react-icons": { + "version": "4.12.0", "dev": true, "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "*" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "node_modules/@redux-devtools/app/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@redux-devtools/app/node_modules/react-redux": { + "version": "8.1.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "node_modules/@redux-devtools/app/node_modules/regenerator-runtime": { + "version": "0.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@redux-devtools/app/node_modules/reselect": { + "version": "4.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@redux-devtools/chart-monitor": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.23.5", + "@types/redux-devtools-themes": "^1.0.3", + "d3-state-visualizer": "^2.0.0", + "deepmerge": "^4.3.1", + "redux-devtools-themes": "^1.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@redux-devtools/core": "^4.0.0", + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "redux": "^3.4.0 || ^4.0.0 || ^5.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "node_modules/@redux-devtools/chart-monitor/node_modules/@babel/runtime": { + "version": "7.23.9", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "node_modules/@redux-devtools/chart-monitor/node_modules/regenerator-runtime": { + "version": "0.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@redux-devtools/cli": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@apollo/server": "^4.9.5", + "@emotion/react": "^11.11.3", + "@redux-devtools/app": "^6.0.0", + "@types/react": "^18.2.46", + "body-parser": "^1.20.2", + "chalk": "^5.3.0", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "electron": "^27.2.0", + "express": "^4.18.2", + "get-port": "^7.0.0", + "graphql": "^16.8.1", + "knex": "^3.1.0", + "lodash-es": "^4.17.21", + "minimist": "^1.2.8", + "morgan": "^1.10.0", + "open": "^10.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-is": "^18.2.0", + "semver": "^7.5.4", + "socketcluster-server": "^19.0.1", + "sqlite3": "^5.1.6", + "styled-components": "^5.3.11", + "uuid": "^9.0.1" }, "bin": { - "parser": "bin/babel-parser.js" + "redux-devtools": "bin/redux-devtools.js" }, "engines": { - "node": ">=6.0.0" + "node": ">= 18.12.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "node_modules/@redux-devtools/cli/node_modules/body-parser": { + "version": "1.20.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "node_modules/@redux-devtools/cli/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" + "ms": "2.0.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "node_modules/@redux-devtools/cli/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@redux-devtools/cli/node_modules/bundle-name": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "node_modules/@redux-devtools/cli/node_modules/bytes": { + "version": "3.1.2", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/@redux-devtools/cli/node_modules/commander": { + "version": "10.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "node": ">=14" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "node_modules/@redux-devtools/cli/node_modules/cors": { + "version": "2.8.5", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.10" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "node_modules/@redux-devtools/cli/node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 8" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "node_modules/@redux-devtools/cli/node_modules/default-browser": { + "version": "5.2.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/@redux-devtools/cli/node_modules/default-browser-id": { + "version": "5.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "node_modules/@redux-devtools/cli/node_modules/depd": { + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">= 0.8" + } + }, + "node_modules/@redux-devtools/cli/node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/@redux-devtools/cli/node_modules/get-port": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "node_modules/@redux-devtools/cli/node_modules/http-errors": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/@redux-devtools/cli/node_modules/iconv-lite": { + "version": "0.4.24", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/@react-native/eslint-config/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "node_modules/@redux-devtools/cli/node_modules/is-wsl": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "is-inside-container": "^1.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native/eslint-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@react-native/eslint-config/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@react-native/eslint-config/node_modules/eslint-config-prettier": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/@react-native/eslint-config/node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.10.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/@react-native/eslint-config/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@react-native/eslint-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@react-native/eslint-config/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@react-native/eslint-plugin": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.76.9.tgz", - "integrity": "sha512-8tIIbICmbsYBUy/Zxl7FF9O0OfQa2ycBUHOWiAN16l7fR9CEyfqM3wY5gcJFPTB9gafGfOR/44876S/vhzNdCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.78.3.tgz", - "integrity": "sha512-Nrg3TRd/kjE+qOvukqeP5GqD1/oMd25X2yv370lWHBt9d0RJ0d008almkb5fHxQa+vKPeiAEhK726qCX8YXvIQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.78.3.tgz", - "integrity": "sha512-RvWAV2qU+XgMRVF+WIJQIqKdfrth1ghhdzAoKkXpXRKgWPps/6ZSCFgxkSjYaxAwXREOEx8/HunSmXDCsW+0ag==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.78.3.tgz", - "integrity": "sha512-VSzAJ5G7uD1F5nG6NagHZFq6Q6dpsCU6LH+2j7iTsXZ9QUSds54f+WP5RC0UHZcVkQavSfqzu3+wj4pYGv5Pzg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.78.3", - "hermes-parser": "0.25.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/@react-native/metro-babel-transformer/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@react-native/metro-config": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.78.3.tgz", - "integrity": "sha512-ImYGVJmqyo7oVjNpaCZoZXxkvbF54lDPSvUjTSUD+RcR+Hj2xTuPhehql8+nAkeF14c7iWh7SKLRdj+9STht3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@react-native/js-polyfills": "0.78.3", - "@react-native/metro-babel-transformer": "0.78.3", - "metro-config": "^0.81.3", - "metro-runtime": "^0.81.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/normalize-color": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.74.85", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz", - "integrity": "sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==", - "license": "MIT" - }, - "node_modules/@react-native/typescript-config": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.76.9.tgz", - "integrity": "sha512-68xGswpZOrCvDd1Wu6H7ZdluIDmNbN0Uq8RVnm+IQMnYx90fVHL+iNW4hClgoY/TIcsWnQQL6shES4n/1kz/fg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@react-navigation/core": { - "version": "7.13.6", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-7.13.6.tgz", - "integrity": "sha512-7QG29HAWOR8wYuPkfTN8L2Po+kE1xn3nsi2sS35sGngq8HYZRHfXvxrhrAZYfFnFq2hUtOhcXnSS6vEWU/5rmA==", - "license": "MIT", - "dependencies": { - "@react-navigation/routers": "^7.5.2", - "escape-string-regexp": "^4.0.0", - "fast-deep-equal": "^3.1.3", - "nanoid": "^3.3.11", - "query-string": "^7.1.3", - "react-is": "^19.1.0", - "use-latest-callback": "^0.2.4", - "use-sync-external-store": "^1.5.0" - }, - "peerDependencies": { - "react": ">= 18.2.0" - } - }, - "node_modules/@react-navigation/core/node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@react-navigation/core/node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-navigation/core/node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", - "license": "MIT", - "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-navigation/core/node_modules/react-is": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz", - "integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==", - "license": "MIT" - }, - "node_modules/@react-navigation/core/node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-navigation/core/node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-navigation/elements": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-2.9.2.tgz", - "integrity": "sha512-J1GltOAGowNLznEphV/kr4zs0U7mUBO1wVA2CqpkN8ePBsoxrAmsd+T5sEYUCXN9KgTDFvc6IfcDqrGSQngd/g==", - "license": "MIT", - "dependencies": { - "color": "^4.2.3", - "use-latest-callback": "^0.2.4", - "use-sync-external-store": "^1.5.0" - }, - "peerDependencies": { - "@react-native-masked-view/masked-view": ">= 0.2.0", - "@react-navigation/native": "^7.1.25", - "react": ">= 18.2.0", - "react-native": "*", - "react-native-safe-area-context": ">= 4.0.0" - }, - "peerDependenciesMeta": { - "@react-native-masked-view/masked-view": { - "optional": true - } - } - }, - "node_modules/@react-navigation/elements/node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/@react-navigation/elements/node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-navigation/native": { - "version": "7.1.25", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.25.tgz", - "integrity": "sha512-zQeWK9txDePWbYfqTs0C6jeRdJTm/7VhQtW/1IbJNDi9/rFIRzZule8bdQPAnf8QWUsNujRmi1J9OG/hhfbalg==", - "license": "MIT", - "dependencies": { - "@react-navigation/core": "^7.13.6", - "escape-string-regexp": "^4.0.0", - "fast-deep-equal": "^3.1.3", - "nanoid": "^3.3.11", - "use-latest-callback": "^0.2.4" - }, - "peerDependencies": { - "react": ">= 18.2.0", - "react-native": "*" - } - }, - "node_modules/@react-navigation/routers": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-7.5.2.tgz", - "integrity": "sha512-kymreY5aeTz843E+iPAukrsOtc7nabAH6novtAPREmmGu77dQpfxPB2ZWpKb5nRErIRowp1kYRoN2Ckl+S6JYw==", - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11" - } - }, - "node_modules/@react-navigation/stack": { - "version": "7.6.12", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-7.6.12.tgz", - "integrity": "sha512-hq5d+lWUwBnwPcBNyUYHiirzRuiD5YhQDIgZWzRConfcRwI/qwFW5+5bCCJ3fQZnNlP05UA4ZlI6r1ysU6y6ww==", - "license": "MIT", - "dependencies": { - "@react-navigation/elements": "^2.9.2", - "color": "^4.2.3", - "use-latest-callback": "^0.2.4" - }, - "peerDependencies": { - "@react-navigation/native": "^7.1.25", - "react": ">= 18.2.0", - "react-native": "*", - "react-native-gesture-handler": ">= 2.0.0", - "react-native-safe-area-context": ">= 4.0.0", - "react-native-screens": ">= 4.0.0" - } - }, - "node_modules/@react-navigation/stack/node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/@react-spring/animated": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-10.0.3.tgz", - "integrity": "sha512-7MrxADV3vaUADn2V9iYhaIL6iOWRx9nCJjYrsk2AHD2kwPr6fg7Pt0v+deX5RnCDmCKNnD6W5fasiyM8D+wzJQ==", - "license": "MIT", - "dependencies": { - "@react-spring/shared": "~10.0.3", - "@react-spring/types": "~10.0.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-spring/core": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-10.0.3.tgz", - "integrity": "sha512-D4DwNO68oohDf/0HG2G0Uragzb9IA1oXblxrd6MZAcBcUQG2EHUWXewjdECMPLNmQvlYVyyBRH6gPxXM5DX7DQ==", - "license": "MIT", - "dependencies": { - "@react-spring/animated": "~10.0.3", - "@react-spring/shared": "~10.0.3", - "@react-spring/types": "~10.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-spring/donate" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-spring/rafz": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-10.0.3.tgz", - "integrity": "sha512-Ri2/xqt8OnQ2iFKkxKMSF4Nqv0LSWnxXT4jXFzBDsHgeeH/cHxTLupAWUwmV9hAGgmEhBmh5aONtj3J6R/18wg==", - "license": "MIT" - }, - "node_modules/@react-spring/shared": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-10.0.3.tgz", - "integrity": "sha512-geCal66nrkaQzUVhPkGomylo+Jpd5VPK8tPMEDevQEfNSWAQP15swHm+MCRG4wVQrQlTi9lOzKzpRoTL3CA84Q==", - "license": "MIT", - "dependencies": { - "@react-spring/rafz": "~10.0.3", - "@react-spring/types": "~10.0.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-spring/types": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.0.3.tgz", - "integrity": "sha512-H5Ixkd2OuSIgHtxuHLTt7aJYfhMXKXT/rK32HPD/kSrOB6q6ooeiWAXkBy7L8F3ZxdkBb9ini9zP9UwnEFzWgQ==", - "license": "MIT" - }, - "node_modules/@react-spring/web": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-10.0.3.tgz", - "integrity": "sha512-ndU+kWY81rHsT7gTFtCJ6mrVhaJ6grFmgTnENipzmKqot4HGf5smPNK+cZZJqoGeDsj9ZsiWPW4geT/NyD484A==", - "license": "MIT", - "dependencies": { - "@react-spring/animated": "~10.0.3", - "@react-spring/core": "~10.0.3", - "@react-spring/shared": "~10.0.3", - "@react-spring/types": "~10.0.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/client": { - "version": "1.5.12", - "license": "MIT", - "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/client/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@redis/graph": { - "version": "1.1.1", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/json": { - "version": "1.0.6", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/search": { - "version": "1.1.6", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/time-series": { - "version": "1.0.5", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redux-devtools/app": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.5", - "@redux-devtools/chart-monitor": "^5.0.0", - "@redux-devtools/core": "^4.0.0", - "@redux-devtools/inspector-monitor": "^6.0.0", - "@redux-devtools/inspector-monitor-test-tab": "^4.0.0", - "@redux-devtools/inspector-monitor-trace-tab": "^4.0.0", - "@redux-devtools/log-monitor": "^5.0.0", - "@redux-devtools/rtk-query-monitor": "^5.0.0", - "@redux-devtools/slider-monitor": "^5.0.0", - "@redux-devtools/ui": "^1.3.1", - "@reduxjs/toolkit": "^1.9.7", - "d3-state-visualizer": "^2.0.0", - "javascript-stringify": "^2.1.0", - "jsan": "^3.1.14", - "jsondiffpatch": "^0.5.0", - "localforage": "^1.10.0", - "lodash": "^4.17.21", - "react-icons": "^4.12.0", - "react-is": "^18.2.0", - "react-redux": "^8.1.3", - "redux": "^4.2.1", - "redux-persist": "^6.0.0", - "socketcluster-client": "^17.2.2" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0", - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "@types/styled-components": "^5.1.34", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0", - "styled-components": "^5.3.11" - } - }, - "node_modules/@redux-devtools/app/node_modules/@babel/runtime": { - "version": "7.23.9", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@redux-devtools/app/node_modules/@redux-devtools/core": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.5", - "@redux-devtools/instrument": "^2.2.0", - "lodash": "^4.17.21" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "react-redux": "^7.0.0 || ^8.0.0 || ^9.0.0", - "redux": "^3.5.2 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@redux-devtools/app/node_modules/@reduxjs/toolkit": { - "version": "1.9.7", - "dev": true, - "license": "MIT", - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@redux-devtools/app/node_modules/immer": { - "version": "9.0.21", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/@redux-devtools/app/node_modules/react-icons": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@redux-devtools/app/node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@redux-devtools/app/node_modules/react-redux": { - "version": "8.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/@redux-devtools/app/node_modules/regenerator-runtime": { - "version": "0.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@redux-devtools/app/node_modules/reselect": { - "version": "4.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@redux-devtools/chart-monitor": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.5", - "@types/redux-devtools-themes": "^1.0.3", - "d3-state-visualizer": "^2.0.0", - "deepmerge": "^4.3.1", - "redux-devtools-themes": "^1.0.0" - }, - "peerDependencies": { - "@redux-devtools/core": "^4.0.0", - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "redux": "^3.4.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@redux-devtools/chart-monitor/node_modules/@babel/runtime": { - "version": "7.23.9", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@redux-devtools/chart-monitor/node_modules/regenerator-runtime": { - "version": "0.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@redux-devtools/cli": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@apollo/server": "^4.9.5", - "@emotion/react": "^11.11.3", - "@redux-devtools/app": "^6.0.0", - "@types/react": "^18.2.46", - "body-parser": "^1.20.2", - "chalk": "^5.3.0", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "electron": "^27.2.0", - "express": "^4.18.2", - "get-port": "^7.0.0", - "graphql": "^16.8.1", - "knex": "^3.1.0", - "lodash-es": "^4.17.21", - "minimist": "^1.2.8", - "morgan": "^1.10.0", - "open": "^10.0.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-is": "^18.2.0", - "semver": "^7.5.4", - "socketcluster-server": "^19.0.1", - "sqlite3": "^5.1.6", - "styled-components": "^5.3.11", - "uuid": "^9.0.1" - }, - "bin": { - "redux-devtools": "bin/redux-devtools.js" - }, - "engines": { - "node": ">= 18.12.0" - } - }, - "node_modules/@redux-devtools/cli/node_modules/body-parser": { - "version": "1.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/@redux-devtools/cli/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@redux-devtools/cli/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@redux-devtools/cli/node_modules/bundle-name": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redux-devtools/cli/node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@redux-devtools/cli/node_modules/commander": { - "version": "10.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@redux-devtools/cli/node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@redux-devtools/cli/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@redux-devtools/cli/node_modules/default-browser": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redux-devtools/cli/node_modules/default-browser-id": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redux-devtools/cli/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@redux-devtools/cli/node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/@redux-devtools/cli/node_modules/get-port": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redux-devtools/cli/node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@redux-devtools/cli/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@redux-devtools/cli/node_modules/is-wsl": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redux-devtools/cli/node_modules/knex": { - "version": "3.1.0", + "node_modules/@redux-devtools/cli/node_modules/knex": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { @@ -36377,54 +33865,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/starknet": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/starknet/-/starknet-1.1.0.tgz", - "integrity": "sha512-83g3M6Ix2qRsPN4wqLDqiRZ2GBNbjVWfboJE/9UjfG+MHr6oDSu/CWgy8hsBSJejr09DkkL+l0Ze4KVrlCIdtQ==", - "dependencies": { - "@noble/curves": "~1.7.0", - "@noble/hashes": "~1.6.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/starknet/node_modules/@noble/curves": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", - "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==", - "dependencies": { - "@noble/hashes": "1.6.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/starknet/node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz", - "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/starknet/node_modules/@noble/hashes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", - "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -36519,470 +33959,6 @@ "node": "6.* || 8.* || >=10.*" } }, - "node_modules/@sentry-internal/feedback": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.117.0.tgz", - "integrity": "sha512-4X+NnnY17W74TymgLFH7/KPTVYpEtoMMJh8HzVdCmHTOE6j32XKBeBMRaXBhmNYmEgovgyRKKf2KvtSfgw+V1Q==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.117.0", - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sentry-internal/replay-canvas": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.117.0.tgz", - "integrity": "sha512-7hjIhwEcoosr+BIa0AyEssB5xwvvlzUpvD5fXu4scd3I3qfX8gdnofO96a8r+LrQm3bSj+eN+4TfKEtWb7bU5A==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.117.0", - "@sentry/replay": "7.117.0", - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sentry-internal/tracing": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.117.0.tgz", - "integrity": "sha512-fAIyijNvKBZNA12IcKo+dOYDRTNrzNsdzbm3DP37vJRKVQu19ucqP4Y6InvKokffDP2HZPzFPDoGXYuXkDhUZg==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.117.0", - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/browser": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.117.0.tgz", - "integrity": "sha512-29X9HlvDEKIaWp6XKlNPPSNND0U6P/ede5WA2nVHfs1zJLWdZ7/ijuMc0sH/CueEkqHe/7gt94hBcI7HOU/wSw==", - "license": "MIT", - "dependencies": { - "@sentry-internal/feedback": "7.117.0", - "@sentry-internal/replay-canvas": "7.117.0", - "@sentry-internal/tracing": "7.117.0", - "@sentry/core": "7.117.0", - "@sentry/integrations": "7.117.0", - "@sentry/replay": "7.117.0", - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.1.0.tgz", - "integrity": "sha512-ngnx6E8XjXpg1uzma45INfKCS8yurb/fl3cZdXTCa2wmek8b4N6WIlmOlTKFTBrV54OauF6mloJxAlpuzoQR6g==", - "dev": true, - "hasInstallScript": true, - "license": "FSL-1.1-MIT", - "dependencies": { - "progress": "^2.0.3", - "proxy-from-env": "^1.1.0", - "undici": "^6.22.0", - "which": "^2.0.2" - }, - "bin": { - "sentry-cli": "bin/sentry-cli" - }, - "engines": { - "node": ">= 18" - }, - "optionalDependencies": { - "@sentry/cli-darwin": "3.1.0", - "@sentry/cli-linux-arm": "3.1.0", - "@sentry/cli-linux-arm64": "3.1.0", - "@sentry/cli-linux-i686": "3.1.0", - "@sentry/cli-linux-x64": "3.1.0", - "@sentry/cli-win32-arm64": "3.1.0", - "@sentry/cli-win32-i686": "3.1.0", - "@sentry/cli-win32-x64": "3.1.0" - } - }, - "node_modules/@sentry/cli-darwin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.1.0.tgz", - "integrity": "sha512-xT1WlCHenGGO29Lq/wKaIthdqZzNzZhlPs7dXrzlBx9DyA2Jnl0g7WEau0oWi8GyJGVRXCJMiCydR//Tb5qVwA==", - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-linux-arm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.1.0.tgz", - "integrity": "sha512-kbP3/8/Ct/Jbm569KDXbFIyMyPypIegObvIT7LdSsfdYSZdBd396GV7vUpSGKiLUVVN0xjn8OqQ48AVGfjmuMg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-linux-arm64": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.1.0.tgz", - "integrity": "sha512-Jm/iHLKiHxrZYlAq2tT07amiegEVCOAQT9Unilr6djjcZzS2tcI9ThSRQvjP9tFpFRKop+NyNGE3XHXf69r00g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-linux-i686": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.1.0.tgz", - "integrity": "sha512-f/PK/EGK5vFOy7LC4Riwb+BEE20Nk7RbEFEMjvRq26DpETCrZYUGlbpIKvJFKOaUmr79aAkFCA/EjJiYfcQP2Q==", - "cpu": [ - "x86", - "ia32" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-linux-x64": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.1.0.tgz", - "integrity": "sha512-T+v8x1ujhixZrOrH0sVhsW6uLwK4n0WS+B+5xV46WqUKe32cbYotursp2y53ROjgat8SQDGeP/VnC0Qa3Y2fEA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-win32-arm64": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.1.0.tgz", - "integrity": "sha512-2DIPq6aW2DC34EDC9J0xwD+9BpFnKdFGdIcQUZMS+5pXlU6V7o8wpZxZAM8TdYNmsPkkQGKp7Dhl/arWpvNgrw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-win32-i686": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.1.0.tgz", - "integrity": "sha512-2NuywEiiZn6xJ1yAV2xjv/nuHiy6kZU5XR3RSAIrPdEZD1nBoMsH/gB2FufQw58Ziz/7otFcX+vtGpJjbIT5mQ==", - "cpu": [ - "x86", - "ia32" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli-win32-x64": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.1.0.tgz", - "integrity": "sha512-Ip405Yqdrr+l9TImsZOJz6c9Nb4zvXcmtOIBKLHc9cowpfXfmlqsHbDp7Xh4+k4L0uLr9i+8ilgQ6ypcuF4UCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "FSL-1.1-MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/cli/node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/@sentry/core": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.117.0.tgz", - "integrity": "sha512-1XZ4/d/DEwnfM2zBMloXDwX+W7s76lGKQMgd8bwgPJZjjEztMJ7X0uopKAGwlQcjn242q+hsCBR6C+fSuI5kvg==", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/hub": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "6.2.5", - "@sentry/utils": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/@sentry/types": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/@sentry/utils": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/integrations": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.117.0.tgz", - "integrity": "sha512-U3suSZysmU9EiQqg0ga5CxveAyNbi9IVdsapMDq5EQGNcVDvheXtULs+BOc11WYP3Kw2yWB38VDqLepfc/Fg2g==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.117.0", - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0", - "localforage": "^1.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/minimal": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "6.2.5", - "@sentry/types": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/@sentry/types": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/node": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "6.2.5", - "@sentry/hub": "6.2.5", - "@sentry/tracing": "6.2.5", - "@sentry/types": "6.2.5", - "@sentry/utils": "6.2.5", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/@sentry/core": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "6.2.5", - "@sentry/minimal": "6.2.5", - "@sentry/types": "6.2.5", - "@sentry/utils": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/@sentry/types": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/@sentry/utils": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/replay": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.117.0.tgz", - "integrity": "sha512-V4DfU+x4UsA4BsufbQ8jHYa5H0q5PYUgso2X1PR31g1fpx7yiYguSmCfz1UryM6KkH92dfTnqXapDB44kXOqzQ==", - "license": "MIT", - "dependencies": { - "@sentry-internal/tracing": "7.117.0", - "@sentry/core": "7.117.0", - "@sentry/types": "7.117.0", - "@sentry/utils": "7.117.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sentry/tracing": { - "version": "6.2.5", - "license": "MIT", - "dependencies": { - "@sentry/hub": "6.2.5", - "@sentry/minimal": "6.2.5", - "@sentry/types": "6.2.5", - "@sentry/utils": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/@sentry/types": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/@sentry/utils": { - "version": "6.2.5", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "6.2.5", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/types": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.117.0.tgz", - "integrity": "sha512-5dtdulcUttc3F0Te7ekZmpSp/ebt/CA71ELx0uyqVGjWsSAINwskFD77sdcjqvZWek//WjiYX1+GRKlpJ1QqsA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/utils": { - "version": "7.117.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.117.0.tgz", - "integrity": "sha512-KkcLY8643SGBiDyPvMQOubBkwVX5IPknMHInc7jYC8pDVncGp7C65Wi506bCNPpKCWspUd/0VDNWOOen51/qKA==", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.117.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@shikijs/core": { "version": "1.29.2", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz", @@ -37316,6 +34292,24 @@ "type-detect": "4.0.8" } }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, "node_modules/@sinonjs/formatio": { "version": "3.2.2", "dev": true, @@ -37382,109 +34376,6 @@ "node": ">= 10" } }, - "node_modules/@solana/codecs": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-rc.1.tgz", - "integrity": "sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==", - "dependencies": { - "@solana/codecs-core": "2.0.0-rc.1", - "@solana/codecs-data-structures": "2.0.0-rc.1", - "@solana/codecs-numbers": "2.0.0-rc.1", - "@solana/codecs-strings": "2.0.0-rc.1", - "@solana/options": "2.0.0-rc.1" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@solana/codecs-core": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz", - "integrity": "sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==", - "dependencies": { - "@solana/errors": "2.0.0-rc.1" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@solana/codecs-data-structures": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz", - "integrity": "sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==", - "dependencies": { - "@solana/codecs-core": "2.0.0-rc.1", - "@solana/codecs-numbers": "2.0.0-rc.1", - "@solana/errors": "2.0.0-rc.1" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@solana/codecs-numbers": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz", - "integrity": "sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==", - "dependencies": { - "@solana/codecs-core": "2.0.0-rc.1", - "@solana/errors": "2.0.0-rc.1" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@solana/codecs-strings": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz", - "integrity": "sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==", - "dependencies": { - "@solana/codecs-core": "2.0.0-rc.1", - "@solana/codecs-numbers": "2.0.0-rc.1", - "@solana/errors": "2.0.0-rc.1" - }, - "peerDependencies": { - "fastestsmallesttextencoderdecoder": "^1.0.22", - "typescript": ">=5" - } - }, - "node_modules/@solana/errors": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-rc.1.tgz", - "integrity": "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==", - "dependencies": { - "chalk": "^5.3.0", - "commander": "^12.1.0" - }, - "bin": { - "errors": "bin/cli.mjs" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@solana/errors/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@solana/options": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.0.0-rc.1.tgz", - "integrity": "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==", - "dependencies": { - "@solana/codecs-core": "2.0.0-rc.1", - "@solana/codecs-data-structures": "2.0.0-rc.1", - "@solana/codecs-numbers": "2.0.0-rc.1", - "@solana/codecs-strings": "2.0.0-rc.1", - "@solana/errors": "2.0.0-rc.1" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, "node_modules/@solana/spl-token": { "version": "0.3.8", "license": "Apache-2.0", @@ -37500,34 +34391,6 @@ "@solana/web3.js": "^1.47.4" } }, - "node_modules/@solana/spl-token-group": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz", - "integrity": "sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==", - "dependencies": { - "@solana/codecs": "2.0.0-rc.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.95.3" - } - }, - "node_modules/@solana/spl-token-metadata": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz", - "integrity": "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==", - "dependencies": { - "@solana/codecs": "2.0.0-rc.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@solana/web3.js": "^1.95.3" - } - }, "node_modules/@solana/wallet-adapter-base": { "version": "0.9.23", "license": "Apache-2.0", @@ -38050,14 +34913,6 @@ "version": "1.0.0", "license": "MIT" }, - "node_modules/@supercharge/promise-pool": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", - "integrity": "sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg==", - "engines": { - "node": ">=8" - } - }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "license": "MIT", @@ -41848,15 +38703,6 @@ "version": "0.7.33", "license": "MIT" }, - "node_modules/@types/multer": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", - "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, "node_modules/@types/node": { "version": "18.17.0", "license": "MIT" @@ -42144,97 +38990,6 @@ "redux-saga": "*" } }, - "node_modules/@types/redux-sentry-middleware": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@sentry/browser": "^5.0.0 || ^6.0.0", - "redux": "^4.0.0" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/@sentry/browser": { - "version": "6.19.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/@sentry/core": { - "version": "6.19.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/@sentry/hub": { - "version": "6.19.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/@sentry/minimal": { - "version": "6.19.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/@sentry/types": { - "version": "6.19.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/@sentry/utils": { - "version": "6.19.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/redux-sentry-middleware/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/@types/request-ip": { "version": "0.0.41", "dev": true, @@ -43212,7 +39967,9 @@ "license": "ISC" }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, "node_modules/@unhead/vue": { @@ -46797,83 +43554,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true, - "license": "ISC" - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true, - "license": "MIT" - }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", @@ -46992,54 +43672,6 @@ "@webassemblyjs/utf8": "1.13.2" } }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true, - "license": "MIT" - }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", @@ -48162,52 +44794,6 @@ "web3-utils": "^1.2.1" } }, - "node_modules/abi-wan-kanabi": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/abi-wan-kanabi/-/abi-wan-kanabi-2.2.4.tgz", - "integrity": "sha512-0aA81FScmJCPX+8UvkXLki3X1+yPQuWxEkqXBVKltgPAK79J+NB+Lp5DouMXa7L6f+zcRlIA/6XO7BN/q9fnvg==", - "dependencies": { - "ansicolors": "^0.3.2", - "cardinal": "^2.1.1", - "fs-extra": "^10.0.0", - "yargs": "^17.7.2" - }, - "bin": { - "generate": "dist/generate.js" - } - }, - "node_modules/abi-wan-kanabi/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/abi-wan-kanabi/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/abi-wan-kanabi/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/abort-controller": { "version": "3.0.0", "license": "MIT", @@ -48508,16 +45094,6 @@ } } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, "node_modules/ajv-formats": { "version": "2.1.1", "license": "MIT", @@ -48719,6 +45295,8 @@ }, "node_modules/ansi-fragments": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", "dev": true, "license": "MIT", "dependencies": { @@ -48729,6 +45307,8 @@ }, "node_modules/ansi-fragments/node_modules/ansi-regex": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, "license": "MIT", "engines": { @@ -48737,6 +45317,8 @@ }, "node_modules/ansi-fragments/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -48748,6 +45330,8 @@ }, "node_modules/ansi-fragments/node_modules/astral-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, "license": "MIT", "engines": { @@ -48756,6 +45340,8 @@ }, "node_modules/ansi-fragments/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -48764,16 +45350,22 @@ }, "node_modules/ansi-fragments/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/ansi-fragments/node_modules/colorette": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true, "license": "MIT" }, "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, "license": "MIT", "engines": { @@ -48782,6 +45374,8 @@ }, "node_modules/ansi-fragments/node_modules/slice-ansi": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -48795,6 +45389,8 @@ }, "node_modules/ansi-fragments/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "license": "MIT", "dependencies": { @@ -49700,18 +46296,6 @@ "node": ">=0.10.0" } }, - "node_modules/arweave-stream-tx": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz", - "integrity": "sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ==", - "optional": true, - "dependencies": { - "exponential-backoff": "^3.1.0" - }, - "peerDependencies": { - "arweave": "^1.10.0" - } - }, "node_modules/as-table": { "version": "1.0.55", "dev": true, @@ -51869,6 +48453,7 @@ }, "node_modules/base64url": { "version": "3.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -53735,18 +50320,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, "node_modules/cartonne": { "version": "2.2.0", "license": "(Apache-2.0 AND MIT)", @@ -53938,14 +50511,6 @@ "chai": "^4.0.0" } }, - "node_modules/chain": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chain/-/chain-0.4.2.tgz", - "integrity": "sha512-GtM+TlN398yBhtSp1D2dBLQomKM3Umbji3h2/NdCqAWSMKhWbjlz33j0e55rStsEZD+8OLRHuz7kWd0U3xKMDg==", - "engines": { - "node": ">=18" - } - }, "node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", @@ -54447,6 +51012,7 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "dev": true, "license": "ISC", "engines": { "node": ">= 10" @@ -54814,6 +51380,8 @@ }, "node_modules/command-exists": { "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true, "license": "MIT" }, @@ -55454,6 +52022,7 @@ }, "node_modules/cookie": { "version": "0.4.2", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -55500,43 +52069,6 @@ "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "license": "ISC" - }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/copy-descriptor": { "version": "0.1.1", "dev": true, @@ -56403,13 +52935,6 @@ "node": ">=6" } }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true, - "license": "MIT" - }, "node_modules/d": { "version": "1.0.1", "license": "ISC", @@ -59404,84 +55929,6 @@ "node": ">=10.0.0" } }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/enhanced-resolve/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/enhanced-resolve/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/enquirer": { "version": "2.4.1", "license": "MIT", @@ -59628,15 +56075,21 @@ } }, "node_modules/errorhandler": { - "version": "1.5.1", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.2.tgz", + "integrity": "sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "escape-html": "~1.0.3" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/es-abstract": { @@ -64184,15 +60637,6 @@ } } }, - "node_modules/fetch-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-3.0.1.tgz", - "integrity": "sha512-ZGXe8Y5Z/1FWqQ9q/CrJhkUD73DyBU9VF0hBQmEO/wPHe4A9PKTjplFDLeFX8aOsYypZUcX5Ji/eByn3VCVO3Q==", - "dependencies": { - "set-cookie-parser": "^2.4.8", - "tough-cookie": "^4.0.0" - } - }, "node_modules/fetch-mock": { "version": "9.9.1", "dev": true, @@ -64271,16 +60715,9 @@ "react-native": "*" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "deprecated": "This module is no longer supported.", - "dev": true, - "license": "ISC" - }, "node_modules/figures": { "version": "3.2.0", + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -64294,6 +60731,7 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -64632,57 +61070,6 @@ "node": ">=0.4.0" } }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/focus-trap": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", @@ -65012,60 +61399,6 @@ "node": ">= 8" } }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "license": "ISC" @@ -69279,13 +65612,6 @@ "version": "1.1.13", "license": "BSD-3-Clause" }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true, - "license": "MIT" - }, "node_modules/ignore": { "version": "5.3.2", "license": "MIT", @@ -69499,6 +65825,7 @@ }, "node_modules/inquirer": { "version": "8.2.6", + "dev": true, "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", @@ -69523,6 +65850,7 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -69536,6 +65864,7 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -69550,6 +65879,7 @@ }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -71401,20 +67731,6 @@ } } }, - "node_modules/jest-config/node_modules/@jest/environment": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/jest-config/node_modules/@jest/expect": { "version": "29.7.0", "dev": true, @@ -71427,38 +67743,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-config/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/jest-config/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/jest-config/node_modules/babel-jest": { "version": "29.7.0", "dev": true, @@ -71575,22 +67859,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/jest-environment-node": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/jest-config/node_modules/jest-leak-detector": { "version": "29.7.0", "dev": true, @@ -72209,6 +68477,23 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-get-type": { "version": "29.6.3", "license": "MIT", @@ -73373,52 +69658,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/@jest/environment": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/jest-runtime/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -74057,25 +70296,6 @@ "@babel/preset-env": "^7.1.6" } }, - "node_modules/jscodeshift/node_modules/@babel/register": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz", - "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/jscodeshift/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -75761,16 +71981,6 @@ "node": ">=4" } }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, "node_modules/loader-utils": { "version": "2.0.4", "dev": true, @@ -76084,6 +72294,8 @@ }, "node_modules/logkitty": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -76097,6 +72309,8 @@ }, "node_modules/logkitty/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "license": "ISC", "dependencies": { @@ -76107,11 +72321,15 @@ }, "node_modules/logkitty/node_modules/y18n": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "node_modules/logkitty/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { @@ -76133,6 +72351,8 @@ }, "node_modules/logkitty/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "license": "ISC", "dependencies": { @@ -76194,11 +72414,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lossless-json": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-4.2.0.tgz", - "integrity": "sha512-bsHH3x+7acZfqokfn9Ks/ej96yF/z6oGGw1aBmXesq4r3fAjhdG4uYuqzDgZMk5g1CZUd5w3kwwIp9K1LOYUiA==" - }, "node_modules/lottie-react": { "version": "2.4.0", "license": "MIT", @@ -76260,10 +72475,6 @@ "@types/unist": "*" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "license": "MIT" - }, "node_modules/lru-cache": { "version": "5.1.1", "license": "ISC", @@ -79326,57 +75537,6 @@ "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", "license": "BSD-2-Clause" }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/meow": { "version": "6.1.1", "license": "MIT", @@ -79555,9 +75715,9 @@ } }, "node_modules/metro": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.5.tgz", - "integrity": "sha512-YpFF0DDDpDVygeca2mAn7K0+us+XKmiGk4rIYMz/CRdjFoCGqAei/IQSpV0UrGfQbToSugpMQeQJveaWSH88Hg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.5.tgz", + "integrity": "sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -79571,28 +75731,28 @@ "chalk": "^4.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", - "debug": "^2.2.0", + "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.25.1", + "hermes-parser": "0.29.1", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.81.5", - "metro-cache": "0.81.5", - "metro-cache-key": "0.81.5", - "metro-config": "0.81.5", - "metro-core": "0.81.5", - "metro-file-map": "0.81.5", - "metro-resolver": "0.81.5", - "metro-runtime": "0.81.5", - "metro-source-map": "0.81.5", - "metro-symbolicate": "0.81.5", - "metro-transform-plugins": "0.81.5", - "metro-transform-worker": "0.81.5", + "metro-babel-transformer": "0.82.5", + "metro-cache": "0.82.5", + "metro-cache-key": "0.82.5", + "metro-config": "0.82.5", + "metro-core": "0.82.5", + "metro-file-map": "0.82.5", + "metro-resolver": "0.82.5", + "metro-runtime": "0.82.5", + "metro-source-map": "0.82.5", + "metro-symbolicate": "0.82.5", + "metro-transform-plugins": "0.82.5", + "metro-transform-worker": "0.82.5", "mime-types": "^2.1.27", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -79609,14 +75769,14 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.5.tgz", - "integrity": "sha512-oKCQuajU5srm+ZdDcFg86pG/U8hkSjBlkyFjz380SZ4TTIiI5F+OQB830i53D8hmqmcosa4wR/pnKv8y4Q3dLw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.5.tgz", + "integrity": "sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.25.1", + "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, "engines": { @@ -79624,29 +75784,29 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/metro-babel-transformer/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -79663,13 +75823,13 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -79679,12 +75839,12 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -79695,14 +75855,14 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -79712,25 +75872,25 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/metro-babel-transformer/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -79740,31 +75900,31 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/metro-babel-transformer/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -79772,9 +75932,9 @@ } }, "node_modules/metro-babel-transformer/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -79790,6 +75950,21 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.29.1" + } + }, "node_modules/metro-babel-transformer/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -79800,23 +75975,24 @@ } }, "node_modules/metro-cache": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.5.tgz", - "integrity": "sha512-wOsXuEgmZMZ5DMPoz1pEDerjJ11AuMy9JifH4yNW7NmWS0ghCRqvDxk13LsElzLshey8C+my/tmXauXZ3OqZgg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.5.tgz", + "integrity": "sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q==", "license": "MIT", "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", - "metro-core": "0.81.5" + "https-proxy-agent": "^7.0.5", + "metro-core": "0.82.5" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-cache-key": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.5.tgz", - "integrity": "sha512-lGWnGVm1UwO8faRZ+LXQUesZSmP1LOg14OVR+KNPBip8kbMECbQJ8c10nGesw28uQT7AE0lwQThZPXlxDyCLKQ==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.5.tgz", + "integrity": "sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -79825,20 +76001,42 @@ "node": ">=18.18" } }, + "node_modules/metro-cache/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/metro-cache/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/metro-config": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.5.tgz", - "integrity": "sha512-oDRAzUvj6RNRxratFdcVAqtAsg+T3qcKrGdqGZFUdwzlFJdHGR9Z413sW583uD2ynsuOjA2QB6US8FdwiBdNKg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.5.tgz", + "integrity": "sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g==", "license": "MIT", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.81.5", - "metro-cache": "0.81.5", - "metro-core": "0.81.5", - "metro-runtime": "0.81.5" + "metro": "0.82.5", + "metro-cache": "0.82.5", + "metro-core": "0.82.5", + "metro-runtime": "0.82.5" }, "engines": { "node": ">=18.18" @@ -79895,26 +76093,26 @@ } }, "node_modules/metro-core": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.5.tgz", - "integrity": "sha512-+2R0c8ByfV2N7CH5wpdIajCWa8escUFd8TukfoXyBq/vb6yTCsznoA25FhNXJ+MC/cz1L447Zj3vdUfCXIZBwg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.5.tgz", + "integrity": "sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.81.5" + "metro-resolver": "0.82.5" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-file-map": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.5.tgz", - "integrity": "sha512-mW1PKyiO3qZvjeeVjj1brhkmIotObA3/9jdbY1fQQYvEWM6Ml7bN/oJCRDGn2+bJRlG+J8pwyJ+DgdrM4BsKyg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.5.tgz", + "integrity": "sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ==", "license": "MIT", "dependencies": { - "debug": "^2.2.0", + "debug": "^4.4.0", "fb-watchman": "^2.0.0", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", @@ -79929,24 +76127,32 @@ } }, "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/metro-minify-terser": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.5.tgz", - "integrity": "sha512-/mn4AxjANnsSS3/Bb+zA1G5yIS5xygbbz/OuPaJYs0CPcZCaWt66D+65j4Ft/nJkffUxcwE9mk4ubpkl3rjgtw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.5.tgz", + "integrity": "sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", @@ -79957,9 +76163,9 @@ } }, "node_modules/metro-minify-terser/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -79975,9 +76181,9 @@ "license": "MIT" }, "node_modules/metro-minify-terser/node_modules/terser": { - "version": "5.44.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", - "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "version": "5.47.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.47.1.tgz", + "integrity": "sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -79993,9 +76199,9 @@ } }, "node_modules/metro-resolver": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.5.tgz", - "integrity": "sha512-6BX8Nq3g3go3FxcyXkVbWe7IgctjDTk6D9flq+P201DfHHQ28J+DWFpVelFcrNTn4tIfbP/Bw7u/0g2BGmeXfQ==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.5.tgz", + "integrity": "sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -80005,9 +76211,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.5.tgz", - "integrity": "sha512-M/Gf71ictUKP9+77dV/y8XlAWg7xl76uhU7ggYFUwEdOHHWPG6gLBr1iiK0BmTjPFH8yRo/xyqMli4s3oGorPQ==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.5.tgz", + "integrity": "sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", @@ -80018,18 +76224,18 @@ } }, "node_modules/metro-runtime/node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/metro-source-map": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.5.tgz", - "integrity": "sha512-Jz+CjvCKLNbJZYJTBeN3Kq9kIJf6b61MoLBdaOQZJ5Ajhw6Pf95Nn21XwA8BwfUYgajsi6IXsp/dTZsYJbN00Q==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.5.tgz", + "integrity": "sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -80037,9 +76243,9 @@ "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.81.5", + "metro-symbolicate": "0.82.5", "nullthrows": "^1.1.1", - "ob1": "0.81.5", + "ob1": "0.82.5", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -80048,14 +76254,14 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.5.tgz", - "integrity": "sha512-X3HV3n3D6FuTE11UWFICqHbFMdTavfO48nXsSpnNGFkUZBexffu0Xd+fYKp+DJLNaQr3S+lAs8q9CgtDTlRRuA==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.5.tgz", + "integrity": "sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.81.5", + "metro-source-map": "0.82.5", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -80068,9 +76274,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.5.tgz", - "integrity": "sha512-MmHhVx/1dJC94FN7m3oHgv5uOjKH8EX8pBeu1pnPMxbJrx6ZuIejO0k84zTSaQTZ8RxX1wqwzWBpXAWPjEX8mA==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.5.tgz", + "integrity": "sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -80085,29 +76291,29 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/metro-transform-plugins/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -80124,13 +76330,13 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -80140,12 +76346,12 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -80156,14 +76362,14 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -80173,25 +76379,25 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/metro-transform-plugins/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -80201,31 +76407,31 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/metro-transform-plugins/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -80233,9 +76439,9 @@ } }, "node_modules/metro-transform-plugins/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -80261,9 +76467,9 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.5.tgz", - "integrity": "sha512-lUFyWVHa7lZFRSLJEv+m4jH8WrR5gU7VIjUlg4XmxQfV8ngY4V10ARKynLhMYPeQGl7Qvf+Ayg0eCZ272YZ4Mg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.5.tgz", + "integrity": "sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -80271,13 +76477,13 @@ "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "metro": "0.81.5", - "metro-babel-transformer": "0.81.5", - "metro-cache": "0.81.5", - "metro-cache-key": "0.81.5", - "metro-minify-terser": "0.81.5", - "metro-source-map": "0.81.5", - "metro-transform-plugins": "0.81.5", + "metro": "0.82.5", + "metro-babel-transformer": "0.82.5", + "metro-cache": "0.82.5", + "metro-cache-key": "0.82.5", + "metro-minify-terser": "0.82.5", + "metro-source-map": "0.82.5", + "metro-transform-plugins": "0.82.5", "nullthrows": "^1.1.1" }, "engines": { @@ -80285,29 +76491,29 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/metro-transform-worker/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -80324,13 +76530,13 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -80340,12 +76546,12 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -80356,14 +76562,14 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -80373,25 +76579,25 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/metro-transform-worker/node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -80401,31 +76607,31 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/metro-transform-worker/node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -80433,9 +76639,9 @@ } }, "node_modules/metro-transform-worker/node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -80499,29 +76705,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/metro/node_modules/@babel/core/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/metro/node_modules/@babel/core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/metro/node_modules/@babel/generator": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", @@ -80631,29 +76814,6 @@ "node": ">=6.9.0" } }, - "node_modules/metro/node_modules/@babel/traverse/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/metro/node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/metro/node_modules/@babel/types": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", @@ -80711,18 +76871,41 @@ "license": "MIT" }, "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.29.1" } }, "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/metro/node_modules/semver": { @@ -82085,79 +78268,6 @@ } } }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mississippi/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/mississippi/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/mississippi/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/mississippi/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/mississippi/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/mitt": { "version": "3.0.1", "license": "MIT" @@ -82858,43 +78968,6 @@ "@motionone/vue": "^10.16.2" } }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "license": "ISC" - }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/mri": { "version": "1.2.0", "license": "MIT", @@ -83452,30 +79525,6 @@ "buffer": "^5.5.0" } }, - "node_modules/multistream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", - "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "once": "^1.4.0", - "readable-stream": "^3.6.0" - } - }, "node_modules/murmurhash": { "version": "0.0.2" }, @@ -83863,6 +79912,8 @@ }, "node_modules/nocache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", "dev": true, "license": "MIT", "engines": { @@ -84134,177 +80185,6 @@ "version": "0.4.0", "license": "MIT" }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/node-libs-browser/node_modules/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/node-libs-browser/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-libs-browser/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-libs-browser/node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/node-libs-browser/node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-libs-browser/node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/node-libs-react-native": { "version": "1.2.1", "license": "MIT", @@ -84665,6 +80545,8 @@ }, "node_modules/node-stream-zip": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "dev": true, "license": "MIT", "engines": { @@ -86400,9 +82282,9 @@ } }, "node_modules/ob1": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.5.tgz", - "integrity": "sha512-iNpbeXPLmaiT9I5g16gFFFjsF3sGxLpYG2EGP3dfFB4z+l9X60mp/yRzStHhMtuNt8qmf7Ww80nOPQHngHhnIQ==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.5.tgz", + "integrity": "sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -87302,58 +83184,6 @@ "node": ">=12" } }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/param-case": { "version": "3.0.4", "dev": true, @@ -87979,35 +83809,6 @@ "pino": "bin.js" } }, - "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "node_modules/pino-abstract-transport/node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.4.2", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/pino-http": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-10.4.0.tgz", @@ -89615,10 +85416,6 @@ "node": ">=8" } }, - "node_modules/process-warning": { - "version": "2.3.0", - "license": "MIT" - }, "node_modules/progress": { "version": "2.0.3", "license": "MIT", @@ -89982,29 +85779,6 @@ "once": "^1.3.1" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.0", "license": "MIT", @@ -90145,10 +85919,12 @@ } }, "node_modules/qs": { - "version": "6.11.2", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -90898,6 +86674,65 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/react-native": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.79.5.tgz", + "integrity": "sha512-jVihwsE4mWEHZ9HkO1J2eUZSwHyDByZOqthwnGrVZCh6kTQBCm4v8dicsyDa6p0fpWNE5KicTcpX/XXl0ASJFg==", + "license": "MIT", + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.79.5", + "@react-native/codegen": "0.79.5", + "@react-native/community-cli-plugin": "0.79.5", + "@react-native/gradle-plugin": "0.79.5", + "@react-native/js-polyfills": "0.79.5", + "@react-native/normalize-colors": "0.79.5", + "@react-native/virtualized-lists": "0.79.5", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.25.1", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "commander": "^12.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.82.0", + "metro-source-map": "^0.82.0", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.1", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.25.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "react": "^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-native-animatable": { "version": "1.3.3", "license": "MIT", @@ -91588,88 +87423,16 @@ "react-native": ">=0.60.0" } }, - "node_modules/react-native/node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/react-native/node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-native/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-native/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-native/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "extraneous": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/react-native/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "extraneous": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.79.5.tgz", + "integrity": "sha512-nGXMNMclZgzLUxijQQ38Dm3IAEhgxuySAWQHnljFtfB0JdaMwpe0Ox9H7Tp2OgrEA+EMEv+Od9ElKlHwGKmmvQ==", + "license": "MIT" }, "node_modules/react-native/node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "extraneous": true, "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", @@ -91691,7 +87454,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "extraneous": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -91704,131 +87466,40 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/react-native/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/react-native/node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "extraneous": true, + "node_modules/react-native/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-native/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "extraneous": true, + "node_modules/react-native/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, "node_modules/react-native/node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "extraneous": true, "license": "MIT" }, - "node_modules/react-native/node_modules/metro-runtime": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.5.tgz", - "integrity": "sha512-M/Gf71ictUKP9+77dV/y8XlAWg7xl76uhU7ggYFUwEdOHHWPG6gLBr1iiK0BmTjPFH8yRo/xyqMli4s3oGorPQ==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/react-native/node_modules/metro-source-map": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.5.tgz", - "integrity": "sha512-Jz+CjvCKLNbJZYJTBeN3Kq9kIJf6b61MoLBdaOQZJ5Ajhw6Pf95Nn21XwA8BwfUYgajsi6IXsp/dTZsYJbN00Q==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.81.5", - "nullthrows": "^1.1.1", - "ob1": "0.81.5", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/react-native/node_modules/metro-symbolicate": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.5.tgz", - "integrity": "sha512-X3HV3n3D6FuTE11UWFICqHbFMdTavfO48nXsSpnNGFkUZBexffu0Xd+fYKp+DJLNaQr3S+lAs8q9CgtDTlRRuA==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.81.5", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/react-native/node_modules/ob1": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.5.tgz", - "integrity": "sha512-iNpbeXPLmaiT9I5g16gFFFjsF3sGxLpYG2EGP3dfFB4z+l9X60mp/yRzStHhMtuNt8qmf7Ww80nOPQHngHhnIQ==", - "extraneous": true, - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18.18" - } - }, "node_modules/react-native/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "extraneous": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -91843,31 +87514,12 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "extraneous": true, - "license": "MIT" - }, - "node_modules/react-native/node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-native/node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", - "extraneous": true, "license": "MIT" }, "node_modules/react-native/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "extraneous": true, + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -91880,7 +87532,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "extraneous": true, "license": "MIT", "engines": { "node": ">=8" @@ -91890,7 +87541,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "extraneous": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -91903,7 +87553,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "extraneous": true, "license": "MIT", "dependencies": { "async-limiter": "~1.0.0" @@ -92799,12 +88448,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "license": "BSD" - }, "node_modules/readonly-date": { "version": "1.0.0", "license": "Apache-2.0" @@ -92816,39 +88459,6 @@ "node": ">= 12.13.0" } }, - "node_modules/recast": { - "version": "0.23.11", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", - "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", - "license": "MIT", - "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/ast-types": { - "version": "0.16.1", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rechoir": { "version": "0.8.0", "license": "MIT", @@ -93272,14 +88882,6 @@ "node": ">=8" } }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dependencies": { - "esprima": "~4.0.0" - } - }, "node_modules/redis": { "version": "2.8.0", "license": "MIT", @@ -93382,10 +88984,6 @@ "hasInstallScript": true, "license": "MIT" }, - "node_modules/redux-sentry-middleware": { - "version": "0.1.8", - "license": "MIT" - }, "node_modules/redux-thunk": { "version": "2.4.2", "license": "MIT", @@ -93444,6 +89042,7 @@ }, "node_modules/regenerator-transform": { "version": "0.15.2", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" @@ -95170,10 +90769,6 @@ "node": ">= 4" } }, - "node_modules/request-ip": { - "version": "3.3.0", - "license": "MIT" - }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", "license": "MIT", @@ -96767,6 +92362,7 @@ }, "node_modules/run-async": { "version": "2.4.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -96793,23 +92389,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/run-queue/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "license": "ISC" - }, "node_modules/run-series": { "version": "1.1.9", "funding": [ @@ -99123,13 +94702,6 @@ "atomic-sleep": "^1.0.0" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true, - "license": "MIT" - }, "node_modules/source-map": { "version": "0.5.7", "license": "BSD-3-Clause", @@ -100114,72 +95686,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/starknet": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/starknet/-/starknet-6.24.1.tgz", - "integrity": "sha512-g7tiCt73berhcNi41otlN3T3kxZnIvZhMi8WdC21Y6GC6zoQgbI2z1t7JAZF9c4xZiomlanwVnurcpyfEdyMpg==", - "dependencies": { - "@noble/curves": "1.7.0", - "@noble/hashes": "1.6.0", - "@scure/base": "1.2.1", - "@scure/starknet": "1.1.0", - "abi-wan-kanabi": "^2.2.3", - "fetch-cookie": "~3.0.0", - "isomorphic-fetch": "~3.0.0", - "lossless-json": "^4.0.1", - "pako": "^2.0.4", - "starknet-types-07": "npm:@starknet-io/types-js@^0.7.10", - "ts-mixer": "^6.0.3" - } - }, - "node_modules/starknet-types-07": { - "name": "@starknet-io/types-js", - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@starknet-io/types-js/-/types-js-0.7.10.tgz", - "integrity": "sha512-1VtCqX4AHWJlRRSYGSn+4X1mqolI1Tdq62IwzoU2vUuEE72S1OlEeGhpvd6XsdqXcfHmVzYfj8k1XtKBQqwo9w==" - }, - "node_modules/starknet/node_modules/@noble/curves": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", - "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==", - "dependencies": { - "@noble/hashes": "1.6.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/starknet/node_modules/@noble/hashes": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz", - "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/starknet/node_modules/@scure/base": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", - "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/starknet/node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, "node_modules/stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -100281,17 +95787,6 @@ "writable-consumable-stream": "^3.0.1" } }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, "node_modules/stream-http": { "version": "3.2.0", "license": "MIT", @@ -101117,16 +96612,18 @@ } }, "node_modules/sucrase": { - "version": "3.35.0", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -101137,14 +96634,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", "dev": true, @@ -101153,120 +96642,6 @@ "node": ">= 6" } }, - "node_modules/sucrase/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/sucrase/node_modules/foreground-child": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.3.10", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minipass": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sudo-prompt": { - "version": "9.2.1", - "dev": true, - "license": "MIT" - }, "node_modules/sumchecker": { "version": "3.0.1", "dev": true, @@ -102593,13 +97968,6 @@ "node": ">=0.8" } }, - "node_modules/thread-stream": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "real-require": "^0.2.0" - } - }, "node_modules/throat": { "version": "5.0.0", "license": "MIT" @@ -102842,7 +98210,7 @@ }, "node_modules/tmp-promise": { "version": "3.0.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "tmp": "^0.2.0" @@ -103089,57 +98457,6 @@ "node": ">=6" } }, - "node_modules/toucan-js": { - "version": "3.3.1", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.76.0", - "@sentry/integrations": "7.76.0", - "@sentry/types": "7.76.0", - "@sentry/utils": "7.76.0" - } - }, - "node_modules/toucan-js/node_modules/@sentry/core": { - "version": "7.76.0", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.76.0", - "@sentry/utils": "7.76.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/toucan-js/node_modules/@sentry/integrations": { - "version": "7.76.0", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.76.0", - "@sentry/types": "7.76.0", - "@sentry/utils": "7.76.0", - "localforage": "^1.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/toucan-js/node_modules/@sentry/types": { - "version": "7.76.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/toucan-js/node_modules/@sentry/utils": { - "version": "7.76.0", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.76.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/touch": { "version": "3.1.0", "dev": true, @@ -103166,6 +98483,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -103178,6 +98496,7 @@ }, "node_modules/tough-cookie/node_modules/punycode": { "version": "2.3.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -103185,6 +98504,7 @@ }, "node_modules/tough-cookie/node_modules/universalify": { "version": "0.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -103502,11 +98822,6 @@ "node": ">=8" } }, - "node_modules/ts-mixer": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" - }, "node_modules/ts-mocha": { "version": "10.0.0", "license": "MIT", @@ -109695,17 +105010,6 @@ "node": ">=10.13.0" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "license": "MIT", @@ -110299,17 +105603,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-errors": { - "version": "1.3.1", - "license": "LGPL-3.0", - "dependencies": { - "web3-types": "^1.10.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, "node_modules/web3-eth": { "version": "1.8.2", "license": "LGPL-3.0", @@ -111930,14 +107223,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-types": { - "version": "1.10.0", - "license": "LGPL-3.0", - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, "node_modules/web3-utils": { "version": "1.3.4", "license": "LGPL-3.0", @@ -111968,21 +107253,6 @@ "version": "1.9.1", "license": "MIT" }, - "node_modules/web3-validator": { - "version": "2.0.6", - "license": "LGPL-3.0", - "dependencies": { - "ethereum-cryptography": "^2.0.0", - "util": "^0.12.5", - "web3-errors": "^1.2.0", - "web3-types": "^1.6.0", - "zod": "^3.21.4" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, "node_modules/web3/node_modules/ethereum-cryptography": { "version": "0.1.3", "license": "MIT", @@ -112397,27 +107667,6 @@ "node": ">=10.0.0" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack/node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -112835,16 +108084,6 @@ "node": ">=0.4.0" } }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.7" - } - }, "node_modules/workerd": { "version": "1.20240223.1", "dev": true, @@ -114465,12 +109704,6 @@ "node": ">=18" } }, - "packages/commands/node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "license": "MIT" - }, "packages/commands/node_modules/commander": { "version": "9.5.0", "license": "MIT", @@ -114522,7 +109755,6 @@ "@audius/fetch-nft": "0.2.8", "@audius/fixed-decimal": "*", "@audius/sdk": "*", - "@fingerprintjs/fingerprintjs-pro": "3.5.6", "@jup-ag/api": "6.0.48", "@metaplex-foundation/mpl-token-metadata": "2.5.2", "@optimizely/optimizely-sdk": "4.0.0", @@ -114628,25 +109860,6 @@ "proxy-compare": "^3.0.0" } }, - "packages/common/node_modules/redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "packages/common/node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "packages/common/node_modules/type-fest": { "version": "4.26.1", "license": "(MIT OR CC0-1.0)", @@ -114677,7 +109890,6 @@ "@audius/sdk": "*", "@audius/spl": "*", "@pedalboard/archiver": "*", - "@pedalboard/solana-relay": "*", "@pedalboard/staking": "*" } }, @@ -114976,2711 +110188,1565 @@ "url": "0.11.1", "web3": "1.8.2", "xmlhttprequest": "1.8.0", - "zod": "3.21.4" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@audius/sdk-legacy": { - "name": "@audius/sdk", - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@audius/sdk/-/sdk-5.0.0.tgz", - "integrity": "sha512-W8nBFdNIADbwU2YNIDXJL44Qx+wf7RtNZ47Ttv/tI7p1+hLMPpJU8gq7YXK5gZvx9NGgQMWSVAQQ1nCra7HbRw==", - "dependencies": { - "@audius/fixed-decimal": "0.1.0", - "@audius/hedgehog": "3.0.0-alpha.1", - "@audius/spl": "1.0.1", - "@babel/core": "^7.23.7", - "@babel/plugin-proposal-class-static-block": "7.21.0", - "@babel/runtime": "7.18.3", - "@certusone/wormhole-sdk": "0.1.1", - "@ethersproject/solidity": "5.0.5", - "@improbable-eng/grpc-web-node-http-transport": "0.15.0", - "@noble/hashes": "^1.3.0", - "@noble/secp256k1": "1.7.0", - "@project-serum/anchor": "0.24.1", - "@scure/base": "1.1.1", - "@solana/spl-token": "0.3.8", - "@solana/web3.js": "1.93.4", - "abi-decoder": "2.4.0", - "ajv": "6.12.2", - "assert": "2.0.0", - "async-retry": "1.3.1", - "axios": "0.19.2", - "bn.js": "5.2.1", - "borsh": "0.4.0", - "browser-or-node": "^2.1.1", - "bs58": "4.0.1", - "cipher-base": "1.0.4", - "crc-32": "1.2.2", - "cross-fetch": "4.0.0", - "elliptic": "6.5.4", - "esm": "3.2.25", - "eth-sig-util": "2.5.4", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "7.1.4", - "ethereumjs-wallet": "1.0.2", - "ethers": "5.4.7", - "file-type": "16.5.3", - "form-data": "3.0.0", - "hashids": "2.2.10", - "interface-blockstore": "2.0.3", - "interface-store": "2.0.2", - "ipfs-unixfs-importer": "9.0.6", - "isomorphic-ws": "5.0.0", - "jsonschema": "1.2.6", - "keccak256": "1.0.2", - "lodash": "4.17.21", - "micro-aes-gcm": "0.4.0", - "multiformats": "9.9.0", - "node-abort-controller": "3.1.1", - "node-localstorage": "1.3.1", - "proper-url-join": "2.1.1", - "rollup-plugin-shim": "1.0.0", - "safe-buffer": "5.2.1", - "secp256k1": "4.0.2", - "semver": "6.3.0", - "snakecase-keys": "5.4.5", - "stream-browserify": "3.0.0", - "strtok3": "6.3.0", - "token-types": "4.2.1", - "ulid": "2.3.0", - "url": "0.11.1", - "web3": "1.8.2", - "xmlhttprequest": "1.8.0", - "zod": "3.21.4" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@audius/spl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@audius/spl/-/spl-1.0.1.tgz", - "integrity": "sha512-vhW1UEzQHPeMuxuYGIiJJoD+a8l7Ui7Fqsne5R1LcFXJek5dlKTAvILY9qWSqWRFeAIVY8Uo/dKmmJ1Y2OteIA==", - "dependencies": { - "@coral-xyz/anchor": "0.29.0", - "@noble/hashes": "1.4.0", - "@solana/buffer-layout": "4.0.1", - "@solana/buffer-layout-utils": "0.2.0", - "@solana/spl-token": "0.3.8", - "@solana/web3.js": "1.93.4" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@noble/curves": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", - "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", - "dependencies": { - "@noble/hashes": "1.7.1" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", - "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@solana/web3.js": { - "version": "1.93.4", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.93.4.tgz", - "integrity": "sha512-6hHtSYmkUPwcm3eGeqBanMT3pDAhTprrm2IUoboSjNN4gKCBEkY9uIeS2TZKLpsGY+R6fDub5pRi+e4xFVv55w==", - "dependencies": { - "@babel/runtime": "^7.24.7", - "@noble/curves": "^1.4.0", - "@noble/hashes": "^1.4.0", - "@solana/buffer-layout": "^4.0.1", - "agentkeepalive": "^4.5.0", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.3", - "fast-stable-stringify": "^1.0.0", - "jayson": "^4.1.0", - "node-fetch": "^2.7.0", - "rpc-websockets": "^9.0.2", - "superstruct": "^1.0.4" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@solana/web3.js/node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@solana/web3.js/node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/express": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", - "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/node": { - "version": "15.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", - "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/async-retry": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", - "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", - "dependencies": { - "retry": "0.12.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/borsh": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.4.0.tgz", - "integrity": "sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==", - "dependencies": { - "@types/bn.js": "^4.11.5", - "bn.js": "^5.0.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/borsh/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dependencies": { - "@types/node": "*" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/envalid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/envalid/-/envalid-8.0.0.tgz", - "integrity": "sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==", - "dev": true, - "dependencies": { - "tslib": "2.6.2" - }, - "engines": { - "node": ">=8.12" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "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" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/eth-sig-util": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.4.tgz", - "integrity": "sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==", - "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", - "dependencies": { - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/eth-sig-util/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "deprecated": "This library has been deprecated and usage is discouraged.", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dependencies": { - "@types/node": "*" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-util": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", - "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-wallet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", - "deprecated": "New package name format for new versions: @ethereumjs/wallet. Please update.", - "dependencies": { - "aes-js": "^3.1.2", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^7.1.2", - "randombytes": "^2.1.0", - "scrypt-js": "^3.0.1", - "utf8": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/hashids": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", - "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "zod": "3.21.4" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@audius/sdk-legacy": { + "name": "@audius/sdk", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@audius/sdk/-/sdk-5.0.0.tgz", + "integrity": "sha512-W8nBFdNIADbwU2YNIDXJL44Qx+wf7RtNZ47Ttv/tI7p1+hLMPpJU8gq7YXK5gZvx9NGgQMWSVAQQ1nCra7HbRw==", "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" + "@audius/fixed-decimal": "0.1.0", + "@audius/hedgehog": "3.0.0-alpha.1", + "@audius/spl": "1.0.1", + "@babel/core": "^7.23.7", + "@babel/plugin-proposal-class-static-block": "7.21.0", + "@babel/runtime": "7.18.3", + "@certusone/wormhole-sdk": "0.1.1", + "@ethersproject/solidity": "5.0.5", + "@improbable-eng/grpc-web-node-http-transport": "0.15.0", + "@noble/hashes": "^1.3.0", + "@noble/secp256k1": "1.7.0", + "@project-serum/anchor": "0.24.1", + "@scure/base": "1.1.1", + "@solana/spl-token": "0.3.8", + "@solana/web3.js": "1.93.4", + "abi-decoder": "2.4.0", + "ajv": "6.12.2", + "assert": "2.0.0", + "async-retry": "1.3.1", + "axios": "0.19.2", + "bn.js": "5.2.1", + "borsh": "0.4.0", + "browser-or-node": "^2.1.1", + "bs58": "4.0.1", + "cipher-base": "1.0.4", + "crc-32": "1.2.2", + "cross-fetch": "4.0.0", + "elliptic": "6.5.4", + "esm": "3.2.25", + "eth-sig-util": "2.5.4", + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "7.1.4", + "ethereumjs-wallet": "1.0.2", + "ethers": "5.4.7", + "file-type": "16.5.3", + "form-data": "3.0.0", + "hashids": "2.2.10", + "interface-blockstore": "2.0.3", + "interface-store": "2.0.2", + "ipfs-unixfs-importer": "9.0.6", + "isomorphic-ws": "5.0.0", + "jsonschema": "1.2.6", + "keccak256": "1.0.2", + "lodash": "4.17.21", + "micro-aes-gcm": "0.4.0", + "multiformats": "9.9.0", + "node-abort-controller": "3.1.1", + "node-localstorage": "1.3.1", + "proper-url-join": "2.1.1", + "rollup-plugin-shim": "1.0.0", + "safe-buffer": "5.2.1", + "secp256k1": "4.0.2", + "semver": "6.3.0", + "snakecase-keys": "5.4.5", + "stream-browserify": "3.0.0", + "strtok3": "6.3.0", + "token-types": "4.2.1", + "ulid": "2.3.0", + "url": "0.11.1", + "web3": "1.8.2", + "xmlhttprequest": "1.8.0", + "zod": "3.21.4" }, "engines": { - "node": ">= 10.14.2" + "node": ">=14.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@audius/spl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@audius/spl/-/spl-1.0.1.tgz", + "integrity": "sha512-vhW1UEzQHPeMuxuYGIiJJoD+a8l7Ui7Fqsne5R1LcFXJek5dlKTAvILY9qWSqWRFeAIVY8Uo/dKmmJ1Y2OteIA==", "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" + "@coral-xyz/anchor": "0.29.0", + "@noble/hashes": "1.4.0", + "@solana/buffer-layout": "4.0.1", + "@solana/buffer-layout-utils": "0.2.0", + "@solana/spl-token": "0.3.8", + "@solana/web3.js": "1.93.4" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", "@jest/types": "^26.6.2", + "@types/node": "*", "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", + "jest-message-util": "^26.6.2", "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" + "slash": "^3.0.0" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-config": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/core": { "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", "jest-util": "^26.6.2", "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-environment-node": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/environment": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", "@jest/fake-timers": "^26.6.2", "@jest/types": "^26.6.2", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-mock": "^26.6.2" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-haste-map": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/fake-timers": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "dependencies": { "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", + "@sinonjs/fake-timers": "^6.0.1", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-matcher-utils": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/globals": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-message-util": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/reporters": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" }, "engines": { "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" + "optionalDependencies": { + "node-notifier": "^8.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-resolve": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/source-map": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", + "callsites": "^3.0.0", "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" + "source-map": "^0.6.0" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "dependencies": { + "@jest/console": "^26.6.2", "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-runner": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/test-sequencer": { "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", + "@babel/core": "^7.1.0", "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", + "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-serializer": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@jest/types": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "graceful-fs": "^4.2.4" + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" }, "engines": { "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@noble/curves": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" + "@noble/hashes": "1.7.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", "engines": { - "node": ">=10" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { - "node": ">= 10.14.2" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" + "@sinonjs/commons": "^1.7.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@solana/web3.js": { + "version": "1.93.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.93.4.tgz", + "integrity": "sha512-6hHtSYmkUPwcm3eGeqBanMT3pDAhTprrm2IUoboSjNN4gKCBEkY9uIeS2TZKLpsGY+R6fDub5pRi+e4xFVv55w==", "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" + "@babel/runtime": "^7.24.7", + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.0", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^1.0.4" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@solana/web3.js/node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">= 10.13.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jsonschema": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.6.tgz", - "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==", - "engines": { - "node": "*" + "node": ">=6.9.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@solana/web3.js/node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/express": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", + "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==", "dev": true, "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==" + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@types/yargs-parser": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "bin": { - "semver": "bin/semver" + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "acorn": "^8.11.0" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ee-first": "1.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 10" + "node": ">= 8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/async-retry": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", + "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", "dependencies": { - "side-channel": "^1.0.6" - }, + "retry": "0.12.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { - "node": ">=0.6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/borsh": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.4.0.tgz", + "integrity": "sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==", "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "@types/bn.js": "^4.11.5", + "bn.js": "^5.0.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "engines": { - "node": ">= 4" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/borsh/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "semver": "~7.0.0" + "fill-range": "^7.1.1" }, - "engines": { - "node": ">=8.10.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=8.0" + "node": ">= 0.10" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "node-fetch": "^2.6.12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">=14.17" + "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, "engines": { - "node": ">=10.10.0" + "node": ">=0.3.1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", "dev": true, "engines": { - "node": ">= 8" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", "dev": true, - "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" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/envalid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/envalid/-/envalid-8.0.0.tgz", + "integrity": "sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "tslib": "2.6.2" }, "engines": { - "node": ">=6" + "node": ">=8.12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "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" } }, - "packages/discovery-provider/plugins/pedalboard/apps/app-template": { - "name": "@pedalboard/app-template", - "version": "0.0.30", - "extraneous": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/eth-sig-util": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.4.tgz", + "integrity": "sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==", + "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", "dependencies": { - "@pedalboard/basekit": "*", - "@pedalboard/logger": "*", - "@pedalboard/storage": "*", - "body-parser": "^1.19.0", - "cors": "^2.8.5", - "express": "^4.17.1", - "morgan": "^1.10.0" - }, - "devDependencies": { - "@types/body-parser": "^1.19.0", - "@types/cors": "^2.8.10", - "@types/express": "^4.17.12", - "@types/jest": "^26.0.22", - "@types/morgan": "^1.9.2", - "@types/node": "^15.12.2", - "@types/supertest": "^2.0.11", - "esbuild": "^0.14.38", - "esbuild-register": "^3.3.2", - "eslint": "8.56.0", - "eslint-config-custom-server": "*", - "jest": "^26.6.3", - "jest-presets": "*", - "nodemon": "^2.0.15", - "supertest": "^6.1.3", - "tsconfig": "*", - "typescript": "^4.5.3" + "ethereumjs-abi": "0.6.8", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver": { - "name": "@pedalboard/archiver", - "version": "0.0.1", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/eth-sig-util/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dependencies": { - "@audius/sdk": "*", - "@pedalboard/basekit": "*", - "@pedalboard/logger": "*", - "@pedalboard/storage": "*", - "archiver": "7.0.1", - "async-mutex": "0.5.0", - "bullmq": "5.41.7", - "cors": "2.8.5", - "envalid": "8.0.0", - "express": "4.17.1", - "node-fetch": "2.7.0", - "pino-http": "10.4.0" - }, - "devDependencies": { - "@types/archiver": "6.0.3", - "@types/cors": "2.8.10", - "@types/express": "4.17.12", - "@types/node": "18.19.79", - "@types/node-fetch": "2.6.4", - "esbuild": "0.14.38", - "esbuild-register": "3.3.2", - "eslint": "8.56.0", - "eslint-config-custom-server": "*", - "ts-node": "10.9.2", - "tsconfig": "*", - "typescript": "5.4.5", - "vitest": "0.34.6" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "deprecated": "This library has been deprecated and usage is discouraged.", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dependencies": { - "@types/connect": "*", "@types/node": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", - "dev": true + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/express": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", - "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/node": { - "version": "18.19.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.79.tgz", - "integrity": "sha512-90K8Oayimbctc5zTPHPfZloc/lGVs7f3phUAAMcTgEPtg8kKquGZDERC8K4vkBYkQQh48msiYUslYtxTWvqcAg==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", "dependencies": { - "undici-types": "~5.26.4" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", - "dev": true, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ethereumjs-wallet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", + "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", + "deprecated": "New package name format for new versions: @ethereumjs/wallet. Please update.", "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "aes-js": "^3.1.2", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^7.1.2", + "randombytes": "^2.1.0", + "scrypt-js": "^3.0.1", + "utf8": "^3.0.0", + "uuid": "^8.3.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { - "acorn": "^8.11.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", - "dependencies": { - "tslib": "^2.4.0" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" - } + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/hashids": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", + "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "safe-buffer": "5.1.2" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { - "object-assign": "^4", - "vary": "^1" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { - "node": ">=0.3.1" + "node": ">=0.12.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/envalid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/envalid/-/envalid-8.0.0.tgz", - "integrity": "sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, "dependencies": { - "tslib": "2.6.2" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=8.12" + "node": ">=8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", - "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, - "hasInstallScript": true, + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, "bin": { - "esbuild": "bin/esbuild" + "jest": "bin/jest.js" }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" }, - "optionalDependencies": { - "esbuild-android-64": "0.14.38", - "esbuild-android-arm64": "0.14.38", - "esbuild-darwin-64": "0.14.38", - "esbuild-darwin-arm64": "0.14.38", - "esbuild-freebsd-64": "0.14.38", - "esbuild-freebsd-arm64": "0.14.38", - "esbuild-linux-32": "0.14.38", - "esbuild-linux-64": "0.14.38", - "esbuild-linux-arm": "0.14.38", - "esbuild-linux-arm64": "0.14.38", - "esbuild-linux-mips64le": "0.14.38", - "esbuild-linux-ppc64le": "0.14.38", - "esbuild-linux-riscv64": "0.14.38", - "esbuild-linux-s390x": "0.14.38", - "esbuild-netbsd-64": "0.14.38", - "esbuild-openbsd-64": "0.14.38", - "esbuild-sunos-64": "0.14.38", - "esbuild-windows-32": "0.14.38", - "esbuild-windows-64": "0.14.38", - "esbuild-windows-arm64": "0.14.38" + "engines": { + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-android-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", - "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-android-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", - "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", - "cpu": [ - "arm64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-darwin-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", - "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-darwin-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", - "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", - "cpu": [ - "arm64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-freebsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", - "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-freebsd-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", - "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", - "cpu": [ - "arm64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-32": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", - "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", - "cpu": [ - "ia32" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", - "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-arm": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", - "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", - "cpu": [ - "arm" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", - "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", - "cpu": [ - "arm64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-mips64le": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", - "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", - "cpu": [ - "mips64el" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-ppc64le": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", - "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", - "cpu": [ - "ppc64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-riscv64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", - "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", - "cpu": [ - "riscv64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-s390x": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", - "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", - "cpu": [ - "s390x" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-netbsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", - "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-openbsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", - "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, "engines": { - "node": ">=12" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-register": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.3.2.tgz", - "integrity": "sha512-jceAtTO6zxPmCfSD5cBb3rgIK1vmuqCKYwgylHiS1BF4pq0jJiJb4K2QMuqF4BEw7XDBRatYzip0upyTzfkgsQ==", - "dev": true, - "peerDependencies": { - "esbuild": ">=0.12 <1" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-sunos-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", - "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-windows-32": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", - "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", - "cpu": [ - "ia32" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, "engines": { - "node": ">=12" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-windows-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", - "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", - "cpu": [ - "x64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-windows-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", - "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", - "cpu": [ - "arm64" - ], + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">= 0.8" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 10.14.2" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/jsonschema": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.6.tgz", + "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==", "engines": { - "node": ">=4" + "node": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/ms": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/node-fetch": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", @@ -117699,26 +111765,126 @@ } } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -117726,80 +111892,132 @@ "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.10.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "semver": "~7.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.10.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/tr46": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/ts-node": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", @@ -117842,12 +112060,13 @@ } } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/tslib": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/typescript": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", @@ -117860,12 +112079,43 @@ "node": ">=14.17" } }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/webidl-conversions": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/whatwg-url": { + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", @@ -117874,24 +112124,80 @@ "webidl-conversions": "^3.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/sla-auditor": { - "name": "@pedalboard/sla-auditor", + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/app-template": { + "name": "@pedalboard/app-template", "version": "0.0.30", "extraneous": true, "dependencies": { - "@audius/sdk-legacy": "*", "@pedalboard/basekit": "*", "@pedalboard/logger": "*", "@pedalboard/storage": "*", - "@truffle/hdwallet-provider": "^1.7.0", "body-parser": "^1.19.0", "cors": "^2.8.5", - "dotenv": "^16.1.4", "express": "^4.17.1", - "knex": "^2.4.2", - "morgan": "^1.10.0", - "semver": "^7.5.3", - "ts-results": "^3.3.0" + "morgan": "^1.10.0" }, "devDependencies": { "@types/body-parser": "^1.19.0", @@ -117900,7 +112206,6 @@ "@types/jest": "^26.0.22", "@types/morgan": "^1.9.2", "@types/node": "^15.12.2", - "@types/semver": "^7.5.0", "@types/supertest": "^2.0.11", "esbuild": "^0.14.38", "esbuild-register": "^3.3.2", @@ -117911,232 +112216,63 @@ "nodemon": "^2.0.15", "supertest": "^6.1.3", "tsconfig": "*", - "typescript": "5.0.4" + "typescript": "^4.5.3" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay": { - "name": "@pedalboard/solana-relay", - "version": "0.0.23", + "packages/discovery-provider/plugins/pedalboard/apps/archiver": { + "name": "@pedalboard/archiver", + "version": "0.0.1", "dependencies": { - "@audius/spl": "*", - "@jup-ag/api": "6.0.48", - "@metaplex-foundation/umi": "1.2.0", - "@metaplex-foundation/umi-bundle-defaults": "1.2.0", - "@metaplex-foundation/umi-uploader-irys": "1.2.0", - "@meteora-ag/cp-amm-sdk": "1.1.7", - "@meteora-ag/dynamic-bonding-curve-sdk": "1.3.8", - "@meteora-ag/met-lock-sdk": "1.0.1", - "@noble/curves": "1.4.2", + "@audius/sdk": "*", "@pedalboard/basekit": "*", "@pedalboard/logger": "*", "@pedalboard/storage": "*", - "@solana/web3.js": "1.98.0", - "axios": "1.6.8", - "body-parser": "1.19.0", - "borsh": "0.3.1", - "bs58": "4.0.1", - "buffer": "6.0.3", + "archiver": "7.0.1", + "async-mutex": "0.5.0", + "bullmq": "5.41.7", "cors": "2.8.5", - "cross-fetch": "3.1.8", - "dotenv": "16.4.5", "envalid": "8.0.0", - "eth-sig-util": "3.0.1", "express": "4.17.1", - "keccak256": "1.0.6", - "morgan": "1.10.0", - "multer": "2.0.2", - "pino": "8.16.1", - "redis": "4.6.11", - "request-ip": "3.3.0", - "secp256k1": "5.0.0", - "sharp": "0.33.4", - "uuid": "8.3.2", - "web3-eth-accounts": "4.1.2", - "web3-utils": "4.2.3" + "node-fetch": "2.7.0", + "pino-http": "10.4.0" }, "devDependencies": { - "@audius/sdk": "*", - "@types/bn.js": "5.1.0", - "@types/body-parser": "1.19.0", + "@types/archiver": "6.0.3", "@types/cors": "2.8.10", "@types/express": "4.17.12", - "@types/morgan": "1.9.2", - "@types/multer": "1.4.7", - "@types/node": "15.12.2", - "@types/request-ip": "0.0.41", - "@types/supertest": "2.0.11", - "@types/uuid": "9.0.8", + "@types/node": "18.19.79", + "@types/node-fetch": "2.6.4", "esbuild": "0.14.38", "esbuild-register": "3.3.2", "eslint": "8.56.0", "eslint-config-custom-server": "*", + "ts-node": "10.9.2", "tsconfig": "*", - "tsx": "4.19.2", - "typescript": "5.0.4", + "typescript": "5.4.5", "vitest": "0.34.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@jup-ag/api": { - "version": "6.0.48", - "resolved": "https://registry.npmjs.org/@jup-ag/api/-/api-6.0.48.tgz", - "integrity": "sha512-H66m/cIqdVIA0qLI2X76UOhuMXkS/+uI6e4KQuU3fn6FSBhCX/9fwt/4IdwES4KWXwGtvqhsg2ExkB9tRtNhyA==", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@metaplex-foundation/umi-bundle-defaults": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-bundle-defaults/-/umi-bundle-defaults-1.2.0.tgz", - "integrity": "sha512-xbBxnvsADoC/L40HOvWWnrfE1q+7FCSwZ+LsYi3dWn8A93FhcI2gpxZ+Uqy+LzHDmGmuipdECbTRFdSBLMulBA==", - "dependencies": { - "@metaplex-foundation/umi-downloader-http": "^1.2.0", - "@metaplex-foundation/umi-eddsa-web3js": "^1.0.1", - "@metaplex-foundation/umi-http-fetch": "^1.2.0", - "@metaplex-foundation/umi-program-repository": "^1.2.0", - "@metaplex-foundation/umi-rpc-chunk-get-accounts": "^1.2.0", - "@metaplex-foundation/umi-rpc-web3js": "^1.2.0", - "@metaplex-foundation/umi-serializer-data-view": "^1.2.0", - "@metaplex-foundation/umi-transaction-factory-web3js": "^1.2.0" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "^1.2.0", - "@solana/web3.js": "^1.72.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@metaplex-foundation/umi-downloader-http": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-downloader-http/-/umi-downloader-http-1.2.0.tgz", - "integrity": "sha512-voEu9BFePmPGkucZCIVDOGkkvBMuzkeHjkvmSP3E2i0YT5299HryR8sr7i9G4uNwKF/FIVdTw1qQnW61cpS2qQ==", - "peerDependencies": { - "@metaplex-foundation/umi": "^1.2.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@metaplex-foundation/umi-eddsa-web3js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-eddsa-web3js/-/umi-eddsa-web3js-1.1.1.tgz", - "integrity": "sha512-rL22HATY7W02DqJLdBKZ8jedhMtd7iKReIFNPXLGnVeUpDwxXaqWPySZxZ+2TjY6f+Idoq2g2TpPCUGND/iOeA==", - "dependencies": { - "@metaplex-foundation/umi-web3js-adapters": "1.1.1", - "@noble/curves": "^1.0.0", - "yaml": "^2.7.0" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "1.1.1", - "@solana/web3.js": "^1.72.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@metaplex-foundation/umi-program-repository": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-program-repository/-/umi-program-repository-1.2.0.tgz", - "integrity": "sha512-mbsE0BPmqv3cMfk/jn+EKoUDJHbUieFcp8o2eRSkVBJhjXqkfLJgJ8s3koBn8vv5mcmavEBDqPYNqJQs93je0g==", - "peerDependencies": { - "@metaplex-foundation/umi": "^1.2.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@metaplex-foundation/umi-web3js-adapters": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@metaplex-foundation/umi-web3js-adapters/-/umi-web3js-adapters-1.1.1.tgz", - "integrity": "sha512-UXP2aY3ce59nSxsVJ4sFLtGCHpesqLTxTag2yI6grCXe0dEz+1kONMn0XFRLcYgiSKOcptJSoJWbILlHnUsWDg==", - "dependencies": { - "buffer": "^6.0.3" - }, - "peerDependencies": { - "@metaplex-foundation/umi": "1.1.1", - "@solana/web3.js": "^1.72.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@meteora-ag/dynamic-bonding-curve-sdk/node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "extraneous": true - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@noble/curves": { - "version": "1.4.2", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@noble/hashes": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@scure/base": { - "version": "1.1.6", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@scure/bip32": { - "version": "1.3.3", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@scure/bip39": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/body-parser": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/body-parser": { "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/cors": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/cors": { "version": "2.8.10", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/express": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/express": { "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", + "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -118144,48 +112280,67 @@ "@types/serve-static": "*" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/morgan": { - "version": "1.9.2", + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/node": { + "version": "18.19.79", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.79.tgz", + "integrity": "sha512-90K8Oayimbctc5zTPHPfZloc/lGVs7f3phUAAMcTgEPtg8kKquGZDERC8K4vkBYkQQh48msiYUslYtxTWvqcAg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/node": "*" + "undici-types": "~5.26.4" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/node": { - "version": "15.12.2", - "dev": true, - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/supertest": { - "version": "2.0.11", + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/@types/node-fetch": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/superagent": "*" + "@types/node": "*", + "form-data": "^3.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/@types/uuid": { - "version": "9.0.8", + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "license": "MIT" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/axios": { - "version": "1.6.8", - "license": "MIT", + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dependencies": { + "tslib": "^2.4.0" + } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/body-parser": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/body-parser": { "version": "1.19.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dependencies": { "bytes": "3.1.0", "content-type": "~1.0.4", @@ -118202,65 +112357,18 @@ "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/bytes": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/bytes": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "engines": { "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/content-disposition": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/content-disposition": { "version": "0.5.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dependencies": { "safe-buffer": "5.1.2" }, @@ -118268,16 +112376,18 @@ "node": ">= 0.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/cookie": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/cookie": { "version": "0.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "engines": { "node": ">= 0.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/cors": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/cors": { "version": "2.8.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -118286,16 +112396,27 @@ "node": ">= 0.10" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/cross-fetch": { - "version": "3.1.8", - "license": "MIT", + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "node-fetch": "^2.6.12" + "ms": "2.0.0" + } + }, + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/envalid": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/envalid": { "version": "8.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/envalid/-/envalid-8.0.0.tgz", + "integrity": "sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==", "dependencies": { "tslib": "2.6.2" }, @@ -118303,11 +112424,12 @@ "node": ">=8.12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", + "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -118337,7 +112459,7 @@ "esbuild-windows-arm64": "0.14.38" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-android-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-android-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", @@ -118353,7 +112475,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-android-arm64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-android-arm64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", @@ -118369,7 +112491,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-darwin-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-darwin-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", @@ -118385,13 +112507,14 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-darwin-arm64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-darwin-arm64": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", + "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -118400,7 +112523,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-freebsd-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-freebsd-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", @@ -118416,7 +112539,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-freebsd-arm64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-freebsd-arm64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", @@ -118432,7 +112555,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-32": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-32": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", @@ -118448,7 +112571,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", @@ -118464,7 +112587,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-arm": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-arm": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", @@ -118480,7 +112603,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-arm64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-arm64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", @@ -118496,7 +112619,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-mips64le": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-mips64le": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", @@ -118512,7 +112635,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-ppc64le": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-ppc64le": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", @@ -118528,7 +112651,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-riscv64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-riscv64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", @@ -118544,7 +112667,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-linux-s390x": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-linux-s390x": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", @@ -118560,7 +112683,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-netbsd-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-netbsd-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", @@ -118576,7 +112699,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-openbsd-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-openbsd-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", @@ -118592,15 +112715,16 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-register": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-register": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.3.2.tgz", + "integrity": "sha512-jceAtTO6zxPmCfSD5cBb3rgIK1vmuqCKYwgylHiS1BF4pq0jJiJb4K2QMuqF4BEw7XDBRatYzip0upyTzfkgsQ==", "dev": true, - "license": "MIT", "peerDependencies": { "esbuild": ">=0.12 <1" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-sunos-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-sunos-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", @@ -118616,7 +112740,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-windows-32": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-windows-32": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", @@ -118632,7 +112756,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-windows-64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-windows-64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", @@ -118648,7 +112772,7 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/esbuild-windows-arm64": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/esbuild-windows-arm64": { "version": "0.14.38", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", @@ -118664,82 +112788,10 @@ "node": ">=12" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/eth-sig-util": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "license": "MIT", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/ethereum-cryptography/node_modules/node-addon-api": { - "version": "2.0.2", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/ethereum-cryptography/node_modules/secp256k1": { - "version": "4.0.3", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/ethereumjs-abi": { - "version": "0.6.8", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/eventemitter3": { - "version": "5.0.1", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/express": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/express": { "version": "4.17.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", @@ -118776,20 +112828,10 @@ "node": ">= 0.10.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/finalhandler": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/finalhandler": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -118803,50 +112845,10 @@ "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/follow-redirects": { - "version": "1.15.6", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/form-data": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/http-errors": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/http-errors": { "version": "1.7.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -118858,9 +112860,10 @@ "node": ">= 0.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/iconv-lite": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -118868,26 +112871,15 @@ "node": ">=0.10.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/inherits": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/inherits": { "version": "2.0.3", - "license": "ISC" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/keccak256": { - "version": "1.0.6", - "license": "MIT", - "dependencies": { - "bn.js": "^5.2.0", - "buffer": "^6.0.3", - "keccak": "^3.0.2" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/keccak256/node_modules/bn.js": { - "version": "5.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/mime": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, @@ -118895,30 +112887,15 @@ "node": ">=4" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/multer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", - "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.6.0", - "concat-stream": "^2.0.0", - "mkdirp": "^0.5.6", - "object-assign": "^4.1.1", - "type-is": "^1.6.18", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">= 10.16.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/node-addon-api": { - "version": "5.1.0", - "license": "MIT" + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/node-fetch": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -118934,44 +112911,23 @@ } } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/path-to-regexp": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/path-to-regexp": { "version": "0.1.7", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/pino": { - "version": "8.16.1", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/pino-std-serializers": { - "version": "6.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/qs": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/qs": { "version": "6.7.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "engines": { "node": ">=0.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/raw-body": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/raw-body": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dependencies": { "bytes": "3.1.0", "http-errors": "1.7.2", @@ -118982,51 +112938,15 @@ "node": ">= 0.8" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/redis": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.11.tgz", - "integrity": "sha512-kg1Lt4NZLYkAjPOj/WcyIGWfZfnyfKo1Wg9YKVSlzhFwxpFIl3LYI8BWy1Ab963LLDsTz2+OwdsesHKljB3WMQ==", - "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.5.12", - "@redis/graph": "1.1.1", - "@redis/json": "1.0.6", - "@redis/search": "1.1.6", - "@redis/time-series": "1.0.5" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/safe-buffer": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/secp256k1": { - "version": "5.0.0", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/send": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/send": { "version": "0.17.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -119046,24 +112966,15 @@ "node": ">= 0.8.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/send/node_modules/ms": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/send/node_modules/ms": { "version": "2.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/serve-static": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/serve-static": { "version": "1.14.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -119074,189 +112985,145 @@ "node": ">= 0.8.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/setprototypeof": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/setprototypeof": { "version": "1.1.1", - "license": "ISC" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/sharp": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", - "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.0" - }, - "engines": { - "libvips": ">=8.15.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.4", - "@img/sharp-darwin-x64": "0.33.4", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.4", - "@img/sharp-linux-arm64": "0.33.4", - "@img/sharp-linux-s390x": "0.33.4", - "@img/sharp-linux-x64": "0.33.4", - "@img/sharp-linuxmusl-arm64": "0.33.4", - "@img/sharp-linuxmusl-x64": "0.33.4", - "@img/sharp-wasm32": "0.33.4", - "@img/sharp-win32-ia32": "0.33.4", - "@img/sharp-win32-x64": "0.33.4" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/sonic-boom": { - "version": "3.7.0", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/statuses": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/statuses": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { "node": ">= 0.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/toidentifier": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/toidentifier": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "engines": { "node": ">=0.6" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/tr46": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/web3-eth-accounts": { - "version": "4.1.2", - "license": "LGPL-3.0", + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "crc-32": "^1.2.2", - "ethereum-cryptography": "^2.0.0", - "web3-errors": "^1.1.4", - "web3-types": "^1.6.0", - "web3-utils": "^4.2.3", - "web3-validator": "^2.0.5" + "@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" }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/web3-eth-accounts/node_modules/@noble/curves": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.3" + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/web3-eth-accounts/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "license": "MIT", - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/web3-utils": { - "version": "4.2.3", - "license": "LGPL-3.0", - "dependencies": { - "ethereum-cryptography": "^2.0.0", - "eventemitter3": "^5.0.1", - "web3-errors": "^1.1.4", - "web3-types": "^1.6.0", - "web3-validator": "^2.0.5" + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "license": "MIT", - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "node": ">=14.17" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/webidl-conversions": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/whatwg-url": { + "packages/discovery-provider/plugins/pedalboard/apps/archiver/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "packages/discovery-provider/plugins/pedalboard/apps/solana-relay/node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "bin": { - "yaml": "bin.mjs" + "packages/discovery-provider/plugins/pedalboard/apps/sla-auditor": { + "name": "@pedalboard/sla-auditor", + "version": "0.0.30", + "extraneous": true, + "dependencies": { + "@audius/sdk-legacy": "*", + "@pedalboard/basekit": "*", + "@pedalboard/logger": "*", + "@pedalboard/storage": "*", + "@truffle/hdwallet-provider": "^1.7.0", + "body-parser": "^1.19.0", + "cors": "^2.8.5", + "dotenv": "^16.1.4", + "express": "^4.17.1", + "knex": "^2.4.2", + "morgan": "^1.10.0", + "semver": "^7.5.3", + "ts-results": "^3.3.0" }, - "engines": { - "node": ">= 14.6" + "devDependencies": { + "@types/body-parser": "^1.19.0", + "@types/cors": "^2.8.10", + "@types/express": "^4.17.12", + "@types/jest": "^26.0.22", + "@types/morgan": "^1.9.2", + "@types/node": "^15.12.2", + "@types/semver": "^7.5.0", + "@types/supertest": "^2.0.11", + "esbuild": "^0.14.38", + "esbuild-register": "^3.3.2", + "eslint": "8.56.0", + "eslint-config-custom-server": "*", + "jest": "^26.6.3", + "jest-presets": "*", + "nodemon": "^2.0.15", + "supertest": "^6.1.3", + "tsconfig": "*", + "typescript": "5.0.4" } }, "packages/discovery-provider/plugins/pedalboard/apps/staking": { @@ -128602,19 +122469,6 @@ "dev": true, "license": "MIT" }, - "packages/embed/node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "packages/embed/node_modules/esbuild": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", @@ -128761,28 +122615,6 @@ "node": ">=0.10.0" } }, - "packages/embed/node_modules/react-router": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.11.0.tgz", - "integrity": "sha512-uI4JkMmjbWCZc01WVP2cH7ZfSzH91JAZUDd7/nIprDgWxBV1TkkmLToFh7EbMTcMak8URFRa2YoBL/W8GWnCTQ==", - "license": "MIT", - "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } - } - }, "packages/embed/node_modules/react-transition-group": { "version": "4.4.5", "license": "BSD-3-Clause", @@ -130631,280 +124463,6 @@ "@types/react": "*" } }, - "packages/harmony/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true, - "license": "MIT" - }, - "packages/harmony/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true, - "license": "MIT" - }, - "packages/harmony/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true, - "license": "MIT" - }, - "packages/harmony/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "packages/harmony/node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true, - "license": "MIT" - }, - "packages/harmony/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "packages/harmony/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "packages/harmony/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "packages/harmony/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "packages/harmony/node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/harmony/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "packages/harmony/node_modules/cacache/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "packages/harmony/node_modules/cacache/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "packages/harmony/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "packages/harmony/node_modules/chokidar/node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "packages/harmony/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" - }, "packages/harmony/node_modules/classnames": { "version": "2.5.1", "license": "MIT" @@ -130931,72 +124489,6 @@ "version": "3.1.3", "license": "MIT" }, - "packages/harmony/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/harmony/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "packages/harmony/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "packages/harmony/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/harmony/node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "packages/harmony/node_modules/find-cache-dir": { "version": "3.3.2", "dev": true, @@ -131038,20 +124530,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "packages/harmony/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "packages/harmony/node_modules/inline-style-prefixer": { "version": "7.0.0", "license": "MIT", @@ -131060,94 +124538,6 @@ "fast-loops": "^1.1.3" } }, - "packages/harmony/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/harmony/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "packages/harmony/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/harmony/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "packages/harmony/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/harmony/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "packages/harmony/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "packages/harmony/node_modules/jsonfile": { "version": "6.1.0", "dev": true, @@ -131159,45 +124549,6 @@ "graceful-fs": "^4.1.6" } }, - "packages/harmony/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "packages/harmony/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "packages/harmony/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "packages/harmony/node_modules/lru-cache": { "version": "6.0.0", "dev": true, @@ -131231,31 +124582,6 @@ "semver": "bin/semver.js" } }, - "packages/harmony/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "packages/harmony/node_modules/nano-css": { "version": "5.6.1", "license": "Unlicense", @@ -131274,55 +124600,6 @@ "react-dom": "*" } }, - "packages/harmony/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/harmony/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/harmony/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "packages/harmony/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "packages/harmony/node_modules/pkg-dir": { "version": "4.2.0", "dev": true, @@ -131376,34 +124653,6 @@ "react-dom": "^16.3.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "packages/harmony/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "packages/harmony/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "packages/harmony/node_modules/rollup": { "version": "4.3.0", "dev": true, @@ -131447,21 +124696,6 @@ "typescript": ">=2.4.0" } }, - "packages/harmony/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, "packages/harmony/node_modules/semver": { "version": "7.5.4", "dev": true, @@ -131476,16 +124710,6 @@ "node": ">=10" } }, - "packages/harmony/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "packages/harmony/node_modules/slash": { "version": "4.0.0", "dev": true, @@ -131497,163 +124721,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/harmony/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, "packages/harmony/node_modules/stylis": { "version": "4.3.1", "license": "MIT" }, - "packages/harmony/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.6.tgz", - "integrity": "sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "packages/harmony/node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "packages/harmony/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "packages/harmony/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "packages/harmony/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, "packages/harmony/node_modules/universalify": { "version": "2.0.1", "dev": true, @@ -131662,78 +124733,6 @@ "node": ">= 10.0.0" } }, - "packages/harmony/node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "packages/harmony/node_modules/webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "packages/harmony/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, - "license": "ISC" - }, "packages/harmony/node_modules/yallist": { "version": "4.0.0", "dev": true, @@ -131748,7 +124747,6 @@ "@audius/sdk-legacy": "*", "@audius/spl": "*", "@certusone/wormhole-sdk": "0.1.1", - "@fingerprintjs/fingerprintjs-pro-server-api": "4.1.2", "@improbable-eng/grpc-web-node-http-transport": "0.15.0", "@opentelemetry/api": "1.3.0", "@opentelemetry/instrumentation": "0.31.0", @@ -131761,7 +124759,6 @@ "@optimizely/optimizely-sdk": "4.6.0", "@sendgrid/client": "7.7.0", "@sendgrid/mail": "7.7.0", - "@sentry/node": "6.2.5", "@solana/buffer-layout": "4.0.1", "@solana/buffer-layout-utils": "0.2.0", "@solana/spl-token": "0.3.8", @@ -131834,7 +124831,7 @@ "typescript": "5.0.4" }, "engines": { - "node": "~14.0.0" + "node": ">=18.0.0" } }, "packages/identity-service/node_modules/@optimizely/js-sdk-datafile-manager": { @@ -133091,52 +126088,6 @@ "node": ">=12" } }, - "packages/libs/node_modules/@jest/environment": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/libs/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/libs/node_modules/@jest/fake-timers/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "packages/libs/node_modules/@jest/fake-timers/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "packages/libs/node_modules/@metamask/abi-utils": { "version": "2.0.4", "license": "(Apache-2.0 AND MIT)", @@ -134601,7 +127552,7 @@ }, "packages/mobile": { "name": "@audius/mobile", - "version": "1.5.179", + "version": "1.5.180", "dependencies": { "@amplitude/analytics-react-native": "1.4.11", "@audius/common": "*", @@ -134614,7 +127565,6 @@ "@ebay/nice-modal-react": "^1.2.13", "@emotion/native": "^11.11.0", "@emotion/react": "11.14.0", - "@fingerprintjs/fingerprintjs-pro-react-native": "3.9.0", "@gorhom/bottom-sheet": "5.2.8", "@gorhom/portal": "1.0.14", "@hcaptcha/react-native-hcaptcha": "1.6.0", @@ -134670,7 +127620,7 @@ "promise": "8.3.0", "query-string": "7.0.1", "react": "19.0.0", - "react-native": "0.78.3", + "react-native": "0.79.5", "react-native-autolink": "4.2.0", "react-native-bars": "2.4.2", "react-native-blob-util": "0.19.4", @@ -134743,14 +127693,14 @@ "@babel/plugin-transform-react-jsx": "7.21.0", "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", - "@react-native-community/cli": "^15.0.1", - "@react-native-community/cli-platform-android": "^15.0.1", - "@react-native-community/cli-platform-ios": "^15.0.1", - "@react-native/babel-preset": "0.78.3", - "@react-native/eslint-config": "0.76.9", - "@react-native/metro-babel-transformer": "0.78.3", - "@react-native/metro-config": "0.78.3", - "@react-native/typescript-config": "0.76.9", + "@react-native-community/cli": "18.0.0", + "@react-native-community/cli-platform-android": "18.0.0", + "@react-native-community/cli-platform-ios": "18.0.0", + "@react-native/babel-preset": "0.79.5", + "@react-native/eslint-config": "0.79.5", + "@react-native/metro-babel-transformer": "0.79.5", + "@react-native/metro-config": "0.79.5", + "@react-native/typescript-config": "0.79.5", "@redux-devtools/cli": "4.0.0", "@testing-library/jest-native": "5.4.3", "@testing-library/react-native": "12.4.3", @@ -135705,145 +128655,6 @@ "@babel/core": "^7.0.0" } }, - "packages/mobile/node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/@jest/create-cache-key-function/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/@jest/create-cache-key-function/node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "packages/mobile/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/@jest/environment/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "packages/mobile/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "packages/mobile/node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "packages/mobile/node_modules/@jest/types": { "version": "27.5.1", "license": "MIT", @@ -135949,279 +128760,6 @@ "react-native": "^0.0.0-0 || >=0.65 <1.0" } }, - "packages/mobile/node_modules/@react-native-community/cli": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-15.0.1.tgz", - "integrity": "sha512-xIGPytx2bj5HxFk0c7S25AVuJowHmEFg5LFC9XosKc0TSOjP1r6zGC6OqC/arQV/pNuqmZN2IFnpgJn0Bn+hhQ==", - "dev": true, - "dependencies": { - "@react-native-community/cli-clean": "15.0.1", - "@react-native-community/cli-config": "15.0.1", - "@react-native-community/cli-debugger-ui": "15.0.1", - "@react-native-community/cli-doctor": "15.0.1", - "@react-native-community/cli-server-api": "15.0.1", - "@react-native-community/cli-tools": "15.0.1", - "@react-native-community/cli-types": "15.0.1", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "deepmerge": "^4.3.0", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.2", - "semver": "^7.5.2" - }, - "bin": { - "rnc-cli": "build/bin.js" - }, - "engines": { - "node": ">=18" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-clean": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-15.0.1.tgz", - "integrity": "sha512-flGTfT005UZvW2LAXVowZ/7ri22oiiZE4pPgMvc8klRxO5uofKIRuohgiHybHtiCo/HNqIz45JmZJvuFrhc4Ow==", - "dev": true, - "dependencies": { - "@react-native-community/cli-tools": "15.0.1", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-config": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-15.0.1.tgz", - "integrity": "sha512-SL3/9zIyzQQPKWei0+W1gNHxCPurrxqpODUWnVLoP38DNcvYCGtsRayw/4DsXgprZfBC+FsscNpd3IDJrG59XA==", - "dev": true, - "dependencies": { - "@react-native-community/cli-tools": "15.0.1", - "chalk": "^4.1.2", - "cosmiconfig": "^9.0.0", - "deepmerge": "^4.3.0", - "fast-glob": "^3.3.2", - "joi": "^17.2.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-config-apple": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-15.0.1.tgz", - "integrity": "sha512-GEHUx4NRp9W9or6vygn0TgNeFkcJdNjrtko0vQEJAS4gJdWqP/9LqqwJNlUfaW5jHBN7TKALAMlfRmI12Op3sg==", - "dev": true, - "dependencies": { - "@react-native-community/cli-tools": "15.0.1", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-debugger-ui": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-15.0.1.tgz", - "integrity": "sha512-xkT2TLS8zg5r7Vl9l/2f7JVUoFECnVBS+B5ivrSu2PNZhKkr9lRmJFxC9aVLFb5lIxQQKNDvEyiIDNfP7wjJiA==", - "dev": true, - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-doctor": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-15.0.1.tgz", - "integrity": "sha512-YCu44lZR3zZxJJYVTqYZFz9cT9KBfbKI4q2MnKOvkamt00XY3usooMqfuwBAdvM/yvpx7M5w8kbM/nPyj4YCvQ==", - "dev": true, - "dependencies": { - "@react-native-community/cli-config": "15.0.1", - "@react-native-community/cli-platform-android": "15.0.1", - "@react-native-community/cli-platform-apple": "15.0.1", - "@react-native-community/cli-platform-ios": "15.0.1", - "@react-native-community/cli-tools": "15.0.1", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "deepmerge": "^4.3.0", - "envinfo": "^7.13.0", - "execa": "^5.0.0", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-platform-android": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-15.0.1.tgz", - "integrity": "sha512-QlAMomj6H6TY6pHwjTYMsHDQLP5eLzjAmyW1qb03w/kyS/72elK2bjsklNWJrscFY9TMQLqw7qoAsXf1m5t/dg==", - "dev": true, - "dependencies": { - "@react-native-community/cli-tools": "15.0.1", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1", - "logkitty": "^0.7.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-platform-apple": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-15.0.1.tgz", - "integrity": "sha512-iQj1Dt2fr/Q7X2CQhyhWnece3eLDCark1osfiwpViksOfTH2WdpNS3lIwlFcIKhsieFU7YYwbNuFqQ3tF9Dlvw==", - "dev": true, - "dependencies": { - "@react-native-community/cli-config-apple": "15.0.1", - "@react-native-community/cli-tools": "15.0.1", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.4.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-platform-ios": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-15.0.1.tgz", - "integrity": "sha512-6pKzXEIgGL20eE1uOn8iSsNBlMzO1LG+pQOk+7mvD172EPhKm/lRzUVDX5gO/2jvsGoNw6VUW0JX1FI2firwqA==", - "dev": true, - "dependencies": { - "@react-native-community/cli-platform-apple": "15.0.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-server-api": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-15.0.1.tgz", - "integrity": "sha512-f3rb3t1ELLaMSX5/LWO/IykglBIgiP3+pPnyl8GphHnBpf3bdIcp7fHlHLemvHE06YxT2nANRxRPjy1gNskenA==", - "dev": true, - "dependencies": { - "@react-native-community/cli-debugger-ui": "15.0.1", - "@react-native-community/cli-tools": "15.0.1", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^6.2.3" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-server-api/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "packages/mobile/node_modules/@react-native-community/cli-tools": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-15.0.1.tgz", - "integrity": "sha512-N79A+u/94roanfmNohVcNGu6Xg+0idh63JHZFLC9OJJuZwTifGMLDfSTHZATpR1J7rebozQ5ClcSUePavErnSg==", - "dev": true, - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "open": "^6.2.0", - "ora": "^5.4.1", - "prompts": "^2.4.2", - "semver": "^7.5.2", - "shell-quote": "^1.7.3", - "sudo-prompt": "^9.0.0" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "packages/mobile/node_modules/@react-native-community/cli-types": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-15.0.1.tgz", - "integrity": "sha512-sWiJ62kkGu2mgYni2dsPxOMBzpwTjNsDH1ubY4mqcNEI9Zmzs0vRwwDUEhYqwNGys9+KpBKoZRrT2PAlhO84xA==", - "dev": true, - "dependencies": { - "joi": "^17.2.1" - } - }, - "packages/mobile/node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "packages/mobile/node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "packages/mobile/node_modules/@react-native-community/datetimepicker": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-8.3.0.tgz", @@ -136258,35 +128796,67 @@ "react-native": ">=0.57" } }, - "packages/mobile/node_modules/@react-native/normalize-colors": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.78.3.tgz", - "integrity": "sha512-/Nbuhc65xSVE3KFCejQEI9pgF+uwArj6EMHMVCkRtUqkM88Ng+f+8E7PyNN0hDUnj2Vr30FwBczdwm1kQLTWZA==", - "license": "MIT" - }, - "packages/mobile/node_modules/@react-native/virtualized-lists": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.78.3.tgz", - "integrity": "sha512-LgZYG6GmKXGoEEIvWyK8HCka4O4th5aWurB4Ah7XH9WI2ZDvIZLwJNhOU+rbCK4kKCS175/rOioajMAI/U/3iA==", + "packages/mobile/node_modules/@react-native/eslint-config": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.79.5.tgz", + "integrity": "sha512-ScU+K65K/VL0q1FOBbRYdDU77NqJwsEMecZt/LgbQWDOuPEolU6cB3OyVP9Oji8GgAusGlsaJqQC8gkQeLLxpA==", + "dev": true, "license": "MIT", "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" + "@babel/core": "^7.25.2", + "@babel/eslint-parser": "^7.25.1", + "@react-native/eslint-plugin": "0.79.5", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-ft-flow": "^2.0.1", + "eslint-plugin-jest": "^27.9.0", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-native": "^4.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@types/react": "^19.0.0", - "react": "*", - "react-native": "*" + "eslint": ">=8", + "prettier": ">=2" + } + }, + "packages/mobile/node_modules/@react-native/eslint-plugin": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.79.5.tgz", + "integrity": "sha512-OUplb18Jaq524t1FYShOWr/dXyIeDsa1l1+Q2XdbdmYzxt5jarzDCP4Oj9VXikoElJwx9nh29CZ+PKNb0BQTNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "packages/mobile/node_modules/@react-native/metro-config": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.79.5.tgz", + "integrity": "sha512-XH4gnyl+UWs1KM6/fmXqTXd4P0CQUI5C203v9iIvsdLm2AGAdv9ju/jo0QMJSbA7FE1Mz4j0r5skmrlN4SbamA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native/js-polyfills": "0.79.5", + "@react-native/metro-babel-transformer": "0.79.5", + "metro-config": "^0.82.0", + "metro-runtime": "^0.82.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=18" } }, + "packages/mobile/node_modules/@react-native/typescript-config": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.79.5.tgz", + "integrity": "sha512-qvXPilb8G4Au4/DDM336D5CLpT6P8rzRtH2eEUjBnG8UHfRwOUylMJ0QRh95OD+7E4xSyoEdzDvKkhEF8mDRrA==", + "dev": true, + "license": "MIT" + }, "packages/mobile/node_modules/@react-navigation/bottom-tabs": { "version": "6.5.11", "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.11.tgz", @@ -136371,24 +128941,6 @@ "react-native-screens": ">= 3.0.0" } }, - "packages/mobile/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "packages/mobile/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "packages/mobile/node_modules/@solana-mobile/mobile-wallet-adapter-protocol": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/@solana-mobile/mobile-wallet-adapter-protocol/-/mobile-wallet-adapter-protocol-2.2.5.tgz", @@ -136545,6 +129097,235 @@ "@types/yargs-parser": "*" } }, + "packages/mobile/node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/mobile/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "packages/mobile/node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/mobile/node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/mobile/node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/mobile/node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "packages/mobile/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/mobile/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/mobile/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/mobile/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "packages/mobile/node_modules/ansi-styles": { "version": "4.3.0", "license": "MIT", @@ -136569,14 +129350,9 @@ "node": ">= 8" } }, - "packages/mobile/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "packages/mobile/node_modules/babel-jest": { "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { "@jest/transform": "^29.6.3", @@ -136667,6 +129443,16 @@ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "license": "MIT" }, + "packages/mobile/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "packages/mobile/node_modules/bs58": { "version": "5.0.0", "license": "MIT", @@ -136723,15 +129509,6 @@ "node": ">=12.5.0" } }, - "packages/mobile/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "packages/mobile/node_modules/copy-to-clipboard": { "version": "3.3.3", "license": "MIT", @@ -136739,46 +129516,6 @@ "toggle-selection": "^1.0.6" } }, - "packages/mobile/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "packages/mobile/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "packages/mobile/node_modules/css-select": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", @@ -136819,58 +129556,56 @@ "node": ">=0.10" } }, - "packages/mobile/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "packages/mobile/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "packages/mobile/node_modules/eslint-config-prettier": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", + "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "packages/mobile/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "packages/mobile/node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "packages/mobile/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "packages/mobile/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "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" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://opencollective.com/eslint" } }, "packages/mobile/node_modules/filter-obj": { @@ -136880,22 +129615,6 @@ "node": ">=0.10.0" } }, - "packages/mobile/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/mobile/node_modules/fsevents": { "version": "2.3.3", "license": "MIT", @@ -136907,18 +129626,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "packages/mobile/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/mobile/node_modules/gifted-charts-core": { "version": "0.1.46", "resolved": "https://registry.npmjs.org/gifted-charts-core/-/gifted-charts-core-0.1.46.tgz", @@ -136928,36 +129635,6 @@ "react-native": "*" } }, - "packages/mobile/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "packages/mobile/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "packages/mobile/node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -136978,75 +129655,6 @@ ], "license": "BSD-3-Clause" }, - "packages/mobile/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "packages/mobile/node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/mobile/node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "packages/mobile/node_modules/jest-environment-node/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "packages/mobile/node_modules/jest-haste-map": { "version": "27.5.1", "license": "MIT", @@ -137118,37 +129726,10 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "packages/mobile/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "packages/mobile/node_modules/json-schema": { "version": "0.4.0", "license": "(AFL-2.1 OR BSD-3-Clause)" }, - "packages/mobile/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/mobile/node_modules/lottie-react-native": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-7.3.4.tgz", @@ -137178,69 +129759,31 @@ "node": ">=10" } }, - "packages/mobile/node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "license": "MIT" - }, - "packages/mobile/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "packages/mobile/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "packages/mobile/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/mobile/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "packages/mobile/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, + "license": "ISC", "dependencies": { - "p-limit": "^3.0.2" + "brace-expansion": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "packages/mobile/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "packages/mobile/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "packages/mobile/node_modules/pretty-format": { "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -137253,6 +129796,7 @@ }, "packages/mobile/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -137263,6 +129807,7 @@ }, "packages/mobile/node_modules/pretty-format/node_modules/react-is": { "version": "18.2.0", + "dev": true, "license": "MIT" }, "packages/mobile/node_modules/prop-types": { @@ -137290,65 +129835,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/mobile/node_modules/react-native": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.78.3.tgz", - "integrity": "sha512-e8fMZ/hUHWest9VUaM7tz8AghfekwfSEbZOBrrN2dVt+wYvzEMWYPY3RopUf3M1UhKUdIlNBuCX0eQ8VDhdXGA==", - "license": "MIT", - "dependencies": { - "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.78.3", - "@react-native/codegen": "0.78.3", - "@react-native/community-cli-plugin": "0.78.3", - "@react-native/gradle-plugin": "0.78.3", - "@react-native/js-polyfills": "0.78.3", - "@react-native/normalize-colors": "0.78.3", - "@react-native/virtualized-lists": "0.78.3", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.25.1", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "commander": "^12.0.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.6.3", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.81.3", - "metro-source-map": "^0.81.3", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^6.0.1", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.25.0", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^19.0.0", - "react": "^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "packages/mobile/node_modules/react-native-autolink": { "version": "4.2.0", "license": "MIT", @@ -137681,105 +130167,6 @@ "node": ">=10" } }, - "packages/mobile/node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "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.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "packages/mobile/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/mobile/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "packages/mobile/node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "packages/mobile/node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "packages/mobile/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "packages/mobile/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/mobile/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "packages/mobile/node_modules/slash": { "version": "3.0.0", "license": "MIT", @@ -137801,37 +130188,6 @@ "node": ">=6" } }, - "packages/mobile/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "packages/mobile/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/mobile/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "packages/mobile/node_modules/supports-color": { "version": "7.2.0", "license": "MIT", @@ -137862,30 +130218,10 @@ "typedarray-to-buffer": "^3.1.5" } }, - "packages/mobile/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, "packages/mobile/node_modules/yallist": { "version": "4.0.0", "license": "ISC" }, - "packages/mobile/node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "packages/protocol-dashboard": { "name": "@audius/protocol-dashboard", "version": "0.1.18", @@ -138759,16 +131095,6 @@ } } }, - "packages/protocol-dashboard/node_modules/@types/bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "packages/protocol-dashboard/node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -138991,19 +131317,6 @@ "dev": true, "license": "MIT" }, - "packages/protocol-dashboard/node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "packages/protocol-dashboard/node_modules/cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -140201,28 +132514,6 @@ "node": ">=0.10.0" } }, - "packages/protocol-dashboard/node_modules/react-router": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.11.0.tgz", - "integrity": "sha512-uI4JkMmjbWCZc01WVP2cH7ZfSzH91JAZUDd7/nIprDgWxBV1TkkmLToFh7EbMTcMak8URFRa2YoBL/W8GWnCTQ==", - "license": "MIT", - "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } - } - }, "packages/protocol-dashboard/node_modules/react-virtualized": { "version": "9.22.6", "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.6.tgz", @@ -140737,7 +133028,7 @@ "wait-for-expect": "3.0.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=24.0.0" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "4.24.0" @@ -144066,7 +136357,6 @@ "@emotion/react": "11.14.0", "@emotion/server": "11.11.0", "@emotion/styled": "11.14.0", - "@fingerprintjs/fingerprintjs-pro": "3.5.6", "@google/model-viewer": "3.3.0", "@hcaptcha/react-hcaptcha": "0.3.6", "@juggle/resize-observer": "^3.3.1", @@ -144081,7 +136371,6 @@ "@reown/appkit-adapter-solana": "1.7.1", "@reown/appkit-adapter-wagmi": "1.7.1", "@reown/appkit-wallet-button": "1.7.1", - "@sentry/browser": "^7.117.0", "@solana/spl-token": "0.3.8", "@solana/web3.js": "1.98.0", "@stripe/crypto": "0.0.4", @@ -144145,12 +136434,10 @@ "redux": "4.1.1", "redux-persist": "6.0.0", "redux-saga": "1.1.3", - "redux-sentry-middleware": "0.1.8", "redux-thunk": "2.4.2", "reselect": "4.0.0", "semver": "6.3.0", "tar": "6.1.11", - "toucan-js": "3.3.1", "type-fest": "4.26.1", "typed-redux-saga": "1.3.1", "typesafe-actions": "5.1.0", @@ -144189,7 +136476,6 @@ "@types/react-table": "7.7.12", "@types/react-twitter-auth": "0.0.4", "@types/react-virtualized": "9.21.21", - "@types/redux-sentry-middleware": "0.2.1", "@types/resize-observer-browser": "0.1.7", "@vitejs/plugin-react-swc": "4.2.2", "abort-controller": "3.0.0", @@ -146306,19 +138592,6 @@ "dev": true, "license": "MIT" }, - "packages/web/node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "packages/web/node_modules/core-js": { "version": "2.6.12", "hasInstallScript": true, @@ -146891,28 +139164,6 @@ "react-is": "^16.13.1" } }, - "packages/web/node_modules/react-router": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.11.0.tgz", - "integrity": "sha512-uI4JkMmjbWCZc01WVP2cH7ZfSzH91JAZUDd7/nIprDgWxBV1TkkmLToFh7EbMTcMak8URFRa2YoBL/W8GWnCTQ==", - "license": "MIT", - "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } - } - }, "packages/web/node_modules/react-use": { "version": "15.3.8", "license": "Unlicense", diff --git a/package.json b/package.json index 7c85de87577..915f0a83c51 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,6 @@ "mobile:example:upload": "cd packages/mobile/examples/upload && npx expo start", "EMBED======================================": "", "embed:prod": "npm run start:prod -w embed", - "embed:stage": "npm run start:stage -w embed", "embed:dev": "npm run start:dev -w embed", "HARMONY====================================": "", "harmony": "turbo run start --filter=@audius/harmony", @@ -82,7 +81,7 @@ }, "devDependencies": { "@emotion/eslint-plugin": "11.12.0", - "@sentry/cli": "3.1.0", + "@react-native/metro-babel-transformer": "0.79.5", "@tsconfig/strictest": "2.0.2", "@types/keyv": "4.2.0", "@types/react": "19.0.0", @@ -162,5 +161,9 @@ "webpack": "5.88.2", "elliptic": "6.6.1" }, - "packageManager": "npm@9.6.7" + "packageManager": "npm@11.10.0", + "engines": { + "node": ">=24.10.0", + "npm": ">=11.10.0" + } } diff --git a/packages/common/package.json b/packages/common/package.json index 690a0e80356..02e9851fb96 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -38,7 +38,6 @@ "@audius/fetch-nft": "0.2.8", "@audius/fixed-decimal": "*", "@audius/sdk": "*", - "@fingerprintjs/fingerprintjs-pro": "3.5.6", "@jup-ag/api": "6.0.48", "@metaplex-foundation/mpl-token-metadata": "2.5.2", "@optimizely/optimizely-sdk": "4.0.0", diff --git a/packages/common/src/api/tan-query/coins/useFanClubByTicker.ts b/packages/common/src/api/tan-query/coins/useFanClubByTicker.ts index 98a97d91cdb..269698ab01d 100644 --- a/packages/common/src/api/tan-query/coins/useFanClubByTicker.ts +++ b/packages/common/src/api/tan-query/coins/useFanClubByTicker.ts @@ -20,7 +20,7 @@ import { useFanClub, getFanClubQueryKey } from './useFanClub' /** * Function to check if a coin ticker is available for use. * Returns true if available, false if taken. - * Handles 404 errors gracefully without reporting them to Sentry. + * Swallows 404 errors so they are treated as "available". */ export const fetchCoinTickerAvailability = async ( ticker: string, diff --git a/packages/common/src/api/tan-query/coins/useRedeemCoin.ts b/packages/common/src/api/tan-query/coins/useRedeemCoin.ts index 49ce0e9aab9..392629c1aaf 100644 --- a/packages/common/src/api/tan-query/coins/useRedeemCoin.ts +++ b/packages/common/src/api/tan-query/coins/useRedeemCoin.ts @@ -1,7 +1,6 @@ import { Id } from '@audius/sdk' import { useMutation, useQueryClient } from '@tanstack/react-query' -import { Feature } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -15,7 +14,7 @@ type RedeemCoinParams = { } export const useRedeemCoin = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() @@ -47,13 +46,8 @@ export const useRedeemCoin = () => { queryKey: getFanClubQueryKey(mint) }) }, - onError: (error: Error, args, _context) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'RedeemCoin', - feature: Feature.FanClubs - }) + onError: (error: Error, _args, _context) => { + console.error(error) // Toast generic error message toast({ diff --git a/packages/common/src/api/tan-query/coins/useRedeemCoinCode.ts b/packages/common/src/api/tan-query/coins/useRedeemCoinCode.ts index e3c68c6b191..26ea104bb81 100644 --- a/packages/common/src/api/tan-query/coins/useRedeemCoinCode.ts +++ b/packages/common/src/api/tan-query/coins/useRedeemCoinCode.ts @@ -1,7 +1,6 @@ import { Id } from '@audius/sdk' import { useMutation, useQueryClient } from '@tanstack/react-query' -import { Feature } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -16,7 +15,7 @@ type RedeemCoinCodeParams = { } export const useRedeemCoinCode = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() @@ -49,13 +48,8 @@ export const useRedeemCoinCode = () => { queryKey: getFanClubQueryKey(mint) }) }, - onError: (error: Error, args, _context) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'RedeemCoinCode', - feature: Feature.FanClubs - }) + onError: (error: Error, _args, _context) => { + console.error(error) // TODO: Should 'Please try again' be added to the end of the message? // Toast generic error message diff --git a/packages/common/src/api/tan-query/collection/useDeleteCollection.ts b/packages/common/src/api/tan-query/collection/useDeleteCollection.ts index 3dfd339fae2..20a9bc17800 100644 --- a/packages/common/src/api/tan-query/collection/useDeleteCollection.ts +++ b/packages/common/src/api/tan-query/collection/useDeleteCollection.ts @@ -5,7 +5,6 @@ import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' import { useAppContext } from '~/context/appContext' import { Name } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { accountActions } from '~/store' @@ -25,7 +24,7 @@ type MutationContext = { } export const useDeleteCollection = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { data: currentUserId } = useCurrentUserId() @@ -88,7 +87,7 @@ export const useDeleteCollection = () => { return { previousCollection } }, - onError: (error, { collectionId }, context?: MutationContext) => { + onError: (error, _args, context?: MutationContext) => { // Roll back optimistic updates if the mutation fails if (context?.previousCollection) { const collection = context.previousCollection @@ -101,14 +100,7 @@ export const useDeleteCollection = () => { }) } - reportToSentry({ - error, - additionalInfo: { - collectionId - }, - feature: Feature.Edit, - name: 'Delete Collection' - }) + console.error(error) }, onSuccess: async (_, { collectionId }) => { // Invalidate and refetch collection queries to ensure cache consistency diff --git a/packages/common/src/api/tan-query/collection/useNewAlbumReleases.ts b/packages/common/src/api/tan-query/collection/useNewAlbumReleases.ts index 8b46674bb26..f4897486816 100644 --- a/packages/common/src/api/tan-query/collection/useNewAlbumReleases.ts +++ b/packages/common/src/api/tan-query/collection/useNewAlbumReleases.ts @@ -1,3 +1,4 @@ +import { Id } from '@audius/sdk' import { useQuery, useQueryClient } from '@tanstack/react-query' import { userCollectionMetadataFromSDK } from '~/adapters/collection' @@ -7,6 +8,7 @@ import { ID } from '~/models' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, QueryOptions } from '../types' +import { useCurrentUserId } from '../users/account/useCurrentUserId' import { entityCacheOptions } from '../utils/entityCacheOptions' import { primeCollectionData } from '../utils/primeCollectionData' @@ -28,6 +30,7 @@ export const useNewAlbumReleases = ( const { limit = 10 } = args const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() + const { data: currentUserId } = useCurrentUserId() const idQuery = useQuery({ queryKey: getNewAlbumReleasesQueryKey({ limit }), @@ -35,7 +38,11 @@ export const useNewAlbumReleases = ( const sdk = await audiusSdk() const { data = [] } = await sdk.playlists.getPlaylistsNewReleases({ limit, - type: 'album' + type: 'album', + // Requester id so the backend personalizes embedded album-owner users + // (e.g. does_current_user_follow). primeCollectionData fans these out + // into the shared user cache, so without this they'd poison it. + userId: currentUserId ? Id.parse(currentUserId) : undefined }) const collections = transformAndCleanList( data, diff --git a/packages/common/src/api/tan-query/comments/useComment.ts b/packages/common/src/api/tan-query/comments/useComment.ts index 2f6a17018cc..7b9c5233f95 100644 --- a/packages/common/src/api/tan-query/comments/useComment.ts +++ b/packages/common/src/api/tan-query/comments/useComment.ts @@ -6,14 +6,14 @@ import { useDispatch } from 'react-redux' import { commentFromSDK } from '~/adapters' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { messages } from './types' import { getCommentQueryKey } from './utils' export const useComment = (commentId: ID | null | undefined) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const dispatch = useDispatch() const queryRes = useQuery({ @@ -36,14 +36,10 @@ export const useComment = (commentId: ID | null | undefined) => { useEffect(() => { if (error) { - reportToSentry({ - error, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch(toast({ content: messages.loadError('comments') })) } - }, [error, dispatch, reportToSentry]) + }, [error, dispatch]) return queryRes } diff --git a/packages/common/src/api/tan-query/comments/useCommentReplies.ts b/packages/common/src/api/tan-query/comments/useCommentReplies.ts index 509facc7af8..728ca6bfd32 100644 --- a/packages/common/src/api/tan-query/comments/useCommentReplies.ts +++ b/packages/common/src/api/tan-query/comments/useCommentReplies.ts @@ -6,7 +6,7 @@ import { useDispatch } from 'react-redux' import { replyCommentFromSDK, transformAndCleanList } from '~/adapters' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID } from '~/models' +import { Comment, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QueryOptions } from '../types' @@ -27,7 +27,7 @@ export const useCommentReplies = ( { commentId, pageSize = COMMENT_REPLIES_PAGE_SIZE }: GetRepliesArgs, options?: QueryOptions ) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const startingLimit = 3 // comments will load in with 3 already so we don't start pagination at 0 @@ -80,14 +80,10 @@ export const useCommentReplies = ( useEffect(() => { if (error) { - reportToSentry({ - error, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch(toast({ content: messages.loadError('replies') })) } - }, [error, dispatch, reportToSentry]) + }, [error, dispatch]) const { data: replies } = useComments(replyIds) diff --git a/packages/common/src/api/tan-query/comments/useDeleteComment.ts b/packages/common/src/api/tan-query/comments/useDeleteComment.ts index eaab048aed7..499d7d8dca1 100644 --- a/packages/common/src/api/tan-query/comments/useDeleteComment.ts +++ b/packages/common/src/api/tan-query/comments/useDeleteComment.ts @@ -4,7 +4,7 @@ import { cloneDeep } from 'lodash' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID, ReplyComment } from '~/models' +import { Comment, ID, ReplyComment } from '~/models' import { toast } from '~/store/ui/toast/slice' import { messages } from './types' @@ -23,7 +23,7 @@ export type DeleteCommentArgs = { } export const useDeleteComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -100,12 +100,7 @@ export const useDeleteComment = () => { onError: (error: Error, args) => { const { trackId, currentSort } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Toast standard error message dispatch(toast({ content: messages.mutationError('deleting') })) // Since this mutation handles sort data, its difficult to undo the optimistic update so we just re-load everything diff --git a/packages/common/src/api/tan-query/comments/useDeleteTextPost.ts b/packages/common/src/api/tan-query/comments/useDeleteTextPost.ts index f0e6faef09d..ceee8c06e73 100644 --- a/packages/common/src/api/tan-query/comments/useDeleteTextPost.ts +++ b/packages/common/src/api/tan-query/comments/useDeleteTextPost.ts @@ -4,7 +4,7 @@ import { cloneDeep } from 'lodash' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { FanClubFeedItem, getFanClubFeedQueryKey } from './useFanClubFeed' @@ -18,7 +18,7 @@ export type DeleteTextPostArgs = { } export const useDeleteTextPost = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -60,12 +60,7 @@ export const useDeleteTextPost = () => { }) }, onError: (error: Error, args) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch(toast({ content: 'There was an error deleting the post.' })) // Reset to server state queryClient.invalidateQueries({ diff --git a/packages/common/src/api/tan-query/comments/useEditComment.ts b/packages/common/src/api/tan-query/comments/useEditComment.ts index e8f15d60b65..86da25874c7 100644 --- a/packages/common/src/api/tan-query/comments/useEditComment.ts +++ b/packages/common/src/api/tan-query/comments/useEditComment.ts @@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { CommentOrReply, messages } from './types' @@ -20,7 +20,7 @@ export type EditCommentArgs = { } export const useEditComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -62,12 +62,7 @@ export const useEditComment = () => { }, onError: (error: Error, args, context) => { const { commentId } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Toast standard error message dispatch(toast({ content: messages.mutationError('editing') })) diff --git a/packages/common/src/api/tan-query/comments/useEventComments.ts b/packages/common/src/api/tan-query/comments/useEventComments.ts index b1c8147cb2c..6f1bc7dba70 100644 --- a/packages/common/src/api/tan-query/comments/useEventComments.ts +++ b/packages/common/src/api/tan-query/comments/useEventComments.ts @@ -6,7 +6,7 @@ import { useDispatch } from 'react-redux' import { commentFromSDK } from '~/adapters' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -54,7 +54,7 @@ export const useEventComments = ({ pageSize = EVENT_COMMENTS_PAGE_SIZE, enabled = true }: UseEventCommentsArgs) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { data: currentUserId } = useCurrentUserId() @@ -100,11 +100,7 @@ export const useEventComments = ({ useEffect(() => { if (error) { - reportToSentry({ - error, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch( toast({ content: @@ -112,7 +108,7 @@ export const useEventComments = ({ }) ) } - }, [error, dispatch, reportToSentry]) + }, [error, dispatch]) return queryRes } diff --git a/packages/common/src/api/tan-query/comments/useFanClubFeed.ts b/packages/common/src/api/tan-query/comments/useFanClubFeed.ts index 6440ee73299..6e8fbafa707 100644 --- a/packages/common/src/api/tan-query/comments/useFanClubFeed.ts +++ b/packages/common/src/api/tan-query/comments/useFanClubFeed.ts @@ -6,7 +6,7 @@ import { useDispatch } from 'react-redux' import { commentFromSDK } from '~/adapters' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -46,7 +46,7 @@ export const useFanClubFeed = ({ pageSize = FAN_CLUB_FEED_PAGE_SIZE, enabled = true }: UseFanClubFeedArgs) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { data: currentUserId } = useCurrentUserId() @@ -99,18 +99,14 @@ export const useFanClubFeed = ({ useEffect(() => { if (error) { - reportToSentry({ - error, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch( toast({ content: 'There was an error loading the feed. Please try again.' }) ) } - }, [error, dispatch, reportToSentry]) + }, [error, dispatch]) return queryRes } diff --git a/packages/common/src/api/tan-query/comments/useMuteUser.ts b/packages/common/src/api/tan-query/comments/useMuteUser.ts index 5fd789795bb..94ef3047b7c 100644 --- a/packages/common/src/api/tan-query/comments/useMuteUser.ts +++ b/packages/common/src/api/tan-query/comments/useMuteUser.ts @@ -3,7 +3,7 @@ import { cloneDeep } from 'lodash' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID } from '~/models' +import { Comment, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { messages } from './types' @@ -22,7 +22,7 @@ export type MuteUserArgs = { } export const useMuteUser = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() @@ -94,12 +94,7 @@ export const useMuteUser = () => { }, onError: (error: Error, args) => { const { trackId, currentSort } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Generic toast error dispatch(toast({ content: messages.muteUserError })) diff --git a/packages/common/src/api/tan-query/comments/usePinComment.ts b/packages/common/src/api/tan-query/comments/usePinComment.ts index b59c8acd111..23766ee67ed 100644 --- a/packages/common/src/api/tan-query/comments/usePinComment.ts +++ b/packages/common/src/api/tan-query/comments/usePinComment.ts @@ -4,7 +4,7 @@ import { cloneDeep } from 'lodash' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { Nullable } from '~/utils' @@ -23,7 +23,7 @@ export type PinCommentArgs = { } export const usePinComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -88,12 +88,7 @@ export const usePinComment = () => { }, onError: (error: Error, args) => { const { trackId, currentSort, previousPinnedCommentId } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Toast standard error message dispatch(toast({ content: messages.mutationError('pinning') })) queryClient.setQueryData( diff --git a/packages/common/src/api/tan-query/comments/usePostComment.ts b/packages/common/src/api/tan-query/comments/usePostComment.ts index f068348d38a..7048bccdffc 100644 --- a/packages/common/src/api/tan-query/comments/usePostComment.ts +++ b/packages/common/src/api/tan-query/comments/usePostComment.ts @@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { cloneDeep } from 'lodash' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID } from '~/models' +import { Comment, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { @@ -26,7 +26,7 @@ export type PostCommentArgs = { } export const usePostComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -113,12 +113,7 @@ export const usePostComment = () => { }, onError: (error: Error, args) => { const { trackId, currentSort } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Undo comment count change subtractCommentCount(queryClient, trackId) // Toast generic error message diff --git a/packages/common/src/api/tan-query/comments/usePostEventComment.ts b/packages/common/src/api/tan-query/comments/usePostEventComment.ts index 0a7242d67e6..9fe45937f52 100644 --- a/packages/common/src/api/tan-query/comments/usePostEventComment.ts +++ b/packages/common/src/api/tan-query/comments/usePostEventComment.ts @@ -2,7 +2,7 @@ import { Id } from '@audius/sdk' import { useMutation, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID } from '~/models' +import { Comment, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -31,7 +31,7 @@ export type PostEventCommentArgs = { * the event's owner, so there's no client-side branching here. */ export const usePostEventComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -153,12 +153,7 @@ export const usePostEventComment = () => { // "I pressed send and it disappeared" experience. Mirrors how the // track-comment hook (usePostComment) handles success. onError: (error: Error, args) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) toast({ content: 'There was an error posting your comment. Please try again.' }) diff --git a/packages/common/src/api/tan-query/comments/usePostTextUpdate.ts b/packages/common/src/api/tan-query/comments/usePostTextUpdate.ts index 4aed18ed4fd..53aa1ceebf6 100644 --- a/packages/common/src/api/tan-query/comments/usePostTextUpdate.ts +++ b/packages/common/src/api/tan-query/comments/usePostTextUpdate.ts @@ -2,7 +2,7 @@ import { Id } from '@audius/sdk' import { useMutation, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID } from '~/models' +import { Comment, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { getFanClubFeedQueryKey } from './useFanClubFeed' @@ -18,7 +18,7 @@ export type PostTextUpdateArgs = { } export const usePostTextUpdate = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -93,12 +93,7 @@ export const usePostTextUpdate = () => { }) }, onError: (error: Error, args) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) toast({ content: 'There was an error posting your update. Please try again.' }) diff --git a/packages/common/src/api/tan-query/comments/useReactToComment.ts b/packages/common/src/api/tan-query/comments/useReactToComment.ts index bd891a92e26..24bcd5ff0c3 100644 --- a/packages/common/src/api/tan-query/comments/useReactToComment.ts +++ b/packages/common/src/api/tan-query/comments/useReactToComment.ts @@ -7,7 +7,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { CommentOrReply, messages } from './types' @@ -24,7 +24,7 @@ export type ReactToCommentArgs = { } export const useReactToComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -81,12 +81,7 @@ export const useReactToComment = () => { }, onError: (error: Error, args, context) => { const { commentId } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Toast standard error message dispatch(toast({ content: messages.mutationError('reacting to') })) diff --git a/packages/common/src/api/tan-query/comments/useReportComment.ts b/packages/common/src/api/tan-query/comments/useReportComment.ts index cfe0d94f9d2..642993b156f 100644 --- a/packages/common/src/api/tan-query/comments/useReportComment.ts +++ b/packages/common/src/api/tan-query/comments/useReportComment.ts @@ -4,7 +4,7 @@ import { cloneDeep } from 'lodash' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Comment, Feature, ID, ReplyComment } from '~/models' +import { Comment, ID, ReplyComment } from '~/models' import { toast } from '~/store/ui/toast/slice' import { messages } from './types' @@ -23,7 +23,7 @@ export type ReportCommentArgs = { } export const useReportComment = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -76,12 +76,7 @@ export const useReportComment = () => { }, onError: (error: Error, args) => { const { trackId, currentSort } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) // Generic toast error dispatch(toast({ content: messages.mutationError('reporting') })) diff --git a/packages/common/src/api/tan-query/comments/useTrackComments.ts b/packages/common/src/api/tan-query/comments/useTrackComments.ts index aa91c56d2c5..a6872592c7d 100644 --- a/packages/common/src/api/tan-query/comments/useTrackComments.ts +++ b/packages/common/src/api/tan-query/comments/useTrackComments.ts @@ -10,7 +10,7 @@ import { useDispatch } from 'react-redux' import { commentFromSDK, transformAndCleanList } from '~/adapters' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QueryOptions } from '../types' @@ -36,7 +36,7 @@ export const useTrackComments = ( }: GetCommentsByTrackArgs, options?: QueryOptions ) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const isMutating = useIsMutating() const queryClient = useQueryClient() const dispatch = useDispatch() @@ -83,14 +83,10 @@ export const useTrackComments = ( useEffect(() => { if (error) { - reportToSentry({ - error, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch(toast({ content: messages.loadError('comments') })) } - }, [error, dispatch, reportToSentry]) + }, [error, dispatch]) const { data: comments } = useComments(commentIds) diff --git a/packages/common/src/api/tan-query/comments/useUpdateCommentNotificationSetting.ts b/packages/common/src/api/tan-query/comments/useUpdateCommentNotificationSetting.ts index ad2b6dd400b..f81ebfbfae6 100644 --- a/packages/common/src/api/tan-query/comments/useUpdateCommentNotificationSetting.ts +++ b/packages/common/src/api/tan-query/comments/useUpdateCommentNotificationSetting.ts @@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { CommentOrReply, messages } from './types' @@ -16,7 +16,7 @@ export type UpdateCommentNotificationSettingArgs = { } export const useUpdateCommentNotificationSetting = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() return useMutation({ @@ -46,12 +46,7 @@ export const useUpdateCommentNotificationSetting = () => { }, onError: (error: Error, args) => { const { commentId } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch( toast({ content: messages.updateCommentNotificationSettingError }) ) diff --git a/packages/common/src/api/tan-query/comments/useUpdateTrackCommentNotificationSetting.ts b/packages/common/src/api/tan-query/comments/useUpdateTrackCommentNotificationSetting.ts index e14fbfde506..e8d00273951 100644 --- a/packages/common/src/api/tan-query/comments/useUpdateTrackCommentNotificationSetting.ts +++ b/packages/common/src/api/tan-query/comments/useUpdateTrackCommentNotificationSetting.ts @@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { messages } from './types' @@ -15,7 +15,7 @@ export type UpdateTrackCommentNotificationSettingArgs = { } export const useUpdateTrackCommentNotificationSetting = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() @@ -38,12 +38,7 @@ export const useUpdateTrackCommentNotificationSetting = () => { }, onError: (error: Error, args) => { const { trackId } = args - reportToSentry({ - error, - additionalInfo: args, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch(toast({ content: messages.muteUserError })) queryClient.resetQueries({ diff --git a/packages/common/src/api/tan-query/comments/useUserComments.ts b/packages/common/src/api/tan-query/comments/useUserComments.ts index 3b4f5652936..81255eef905 100644 --- a/packages/common/src/api/tan-query/comments/useUserComments.ts +++ b/packages/common/src/api/tan-query/comments/useUserComments.ts @@ -10,7 +10,7 @@ import { useDispatch } from 'react-redux' import { commentFromSDK, transformAndCleanList } from '~/adapters' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QueryOptions } from '../types' @@ -31,7 +31,7 @@ export const useUserComments = ( }, options?: QueryOptions ) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const { data: currentUserId } = useCurrentUserId() const isMutating = useIsMutating() const queryClient = useQueryClient() @@ -75,14 +75,10 @@ export const useUserComments = ( useEffect(() => { if (error) { - reportToSentry({ - error, - name: 'Comments', - feature: Feature.Comments - }) + console.error(error) dispatch(toast({ content: messages.loadError('comments') })) } - }, [error, dispatch, reportToSentry]) + }, [error, dispatch]) const { data: comments } = useComments(commentIds) diff --git a/packages/common/src/api/tan-query/developer-apps/useDeleteDeveloperApp.ts b/packages/common/src/api/tan-query/developer-apps/useDeleteDeveloperApp.ts index e82a50fb7b7..56137ecb76d 100644 --- a/packages/common/src/api/tan-query/developer-apps/useDeleteDeveloperApp.ts +++ b/packages/common/src/api/tan-query/developer-apps/useDeleteDeveloperApp.ts @@ -3,9 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' import { DeveloperApp } from '~/schemas/developerApps' - import { useCurrentUserId } from '../users/account/useCurrentUserId' - import { getDeveloperAppsQueryKey } from './useDeveloperApps' export const useDeleteDeveloperApp = () => { @@ -19,24 +17,32 @@ export const useDeleteDeveloperApp = () => { throw new Error('No current user ID') } const sdk = await audiusSdk() - await sdk.developerApps.deleteDeveloperApp({ userId: Id.parse(currentUserId), address: apiKey }) return {} }, - onSuccess: (_response, apiKey) => { - if (!currentUserId) { - throw new Error('No current user ID') - } + onMutate: async (apiKey) => { + if (!currentUserId) return + const queryKey = getDeveloperAppsQueryKey(currentUserId) + await queryClient.cancelQueries({ queryKey }) + const previousApps = queryClient.getQueryData(queryKey) queryClient.setQueryData( - getDeveloperAppsQueryKey(currentUserId), + queryKey, (oldData: DeveloperApp[] | undefined) => { if (!oldData) return [] return oldData.filter((app) => app.apiKey !== apiKey) } ) + return { previousApps } + }, + onError: (_error, _apiKey, context) => { + if (!currentUserId || !context?.previousApps) return + queryClient.setQueryData( + getDeveloperAppsQueryKey(currentUserId), + context.previousApps + ) } }) } diff --git a/packages/common/src/api/tan-query/events/index.ts b/packages/common/src/api/tan-query/events/index.ts index 02b651d0aa3..02343128438 100644 --- a/packages/common/src/api/tan-query/events/index.ts +++ b/packages/common/src/api/tan-query/events/index.ts @@ -10,7 +10,6 @@ export * from './useFollowEvent' export * from './useRemixContest' export * from './useRemixContestWinners' export * from './useUserHasRemixContest' -export * from './useUserRemixContests' // Mutations export * from './useCreateEvent' diff --git a/packages/common/src/api/tan-query/events/useAllRemixContests.ts b/packages/common/src/api/tan-query/events/useAllRemixContests.ts index 4cb17807356..22c2e41e101 100644 --- a/packages/common/src/api/tan-query/events/useAllRemixContests.ts +++ b/packages/common/src/api/tan-query/events/useAllRemixContests.ts @@ -2,16 +2,12 @@ import { EventEntityTypeEnum, EventEventTypeEnum, GetRemixContestsStatusEnum, + Id, OptionalHashId, Event as SDKEvent } from '@audius/sdk' import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query' -import { QUERY_KEYS } from '../queryKeys' -import { QueryKey, QueryOptions } from '../types' - -import { getEventIdsByEntityIdQueryKey, getEventQueryKey } from './utils' - import { eventMetadataFromSDK } from '~/adapters/event' import { getRemixesCountQueryKey } from '~/api/tan-query/remixes/useRemixes' import { useQueryContext } from '~/api/tan-query/utils' @@ -19,6 +15,12 @@ import { primeRelatedData } from '~/api/tan-query/utils/primeRelatedData' import { ID } from '~/models' import { removeNullable } from '~/utils' +import { QUERY_KEYS } from '../queryKeys' +import { QueryKey, QueryOptions } from '../types' +import { useCurrentUserId } from '../users/account/useCurrentUserId' + +import { getEventIdsByEntityIdQueryKey, getEventQueryKey } from './utils' + const DEFAULT_PAGE_SIZE = 25 export type RemixContestStatus = GetRemixContestsStatusEnum @@ -61,6 +63,7 @@ export const useAllRemixContests = ( ) => { const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() + const { data: currentUserId } = useCurrentUserId() return useInfiniteQuery({ queryKey: getAllRemixContestsQueryKey({ pageSize, status }), @@ -74,7 +77,11 @@ export const useAllRemixContests = ( const { data, related } = await sdk.events.getRemixContests({ limit: pageSize, offset: pageParam, - status + status, + // Requester id so the backend personalizes embedded related.users + // (e.g. does_current_user_follow). Without it the cache primes those + // users un-personalized and other surfaces read the bad state. + userId: currentUserId ? Id.parse(currentUserId) : undefined }) // Prime related tracks + users (full objects, delivered alongside the diff --git a/packages/common/src/api/tan-query/events/useCreateEvent.ts b/packages/common/src/api/tan-query/events/useCreateEvent.ts index 68ab0c4877d..7b70b18543e 100644 --- a/packages/common/src/api/tan-query/events/useCreateEvent.ts +++ b/packages/common/src/api/tan-query/events/useCreateEvent.ts @@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { cloneDeep } from 'lodash' import { useQueryContext } from '~/api/tan-query/utils' -import { Event, Feature, ID } from '~/models' +import { Event, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -21,7 +21,7 @@ export type CreateEventArgs = { } export const useCreateEvent = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -87,12 +87,7 @@ export const useCreateEvent = () => { return { prevEntityState, prevEventTypeState } }, onError: (error: Error, args, context) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'Events', - feature: Feature.Events - }) + console.error(error) // Revert the optimistic updates queryClient.resetQueries({ diff --git a/packages/common/src/api/tan-query/events/useDeleteEvent.ts b/packages/common/src/api/tan-query/events/useDeleteEvent.ts index d5a3278e07a..3fae7299d16 100644 --- a/packages/common/src/api/tan-query/events/useDeleteEvent.ts +++ b/packages/common/src/api/tan-query/events/useDeleteEvent.ts @@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { cloneDeep } from 'lodash' import { useQueryContext } from '~/api/tan-query/utils' -import { Event, Feature, ID } from '~/models' +import { Event, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { getEventQueryKey, getEventIdsByEntityIdQueryKey } from './utils' @@ -13,7 +13,7 @@ export type DeleteEventArgs = { } export const useDeleteEvent = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -111,12 +111,7 @@ export const useDeleteEvent = () => { ) } - reportToSentry({ - error, - additionalInfo: args, - name: 'Events', - feature: Feature.Events - }) + console.error(error) toast({ content: 'There was an error deleting the event. Please try again' diff --git a/packages/common/src/api/tan-query/events/useEventFollowers.ts b/packages/common/src/api/tan-query/events/useEventFollowers.ts index 73574dff4e4..036d12644ec 100644 --- a/packages/common/src/api/tan-query/events/useEventFollowers.ts +++ b/packages/common/src/api/tan-query/events/useEventFollowers.ts @@ -3,7 +3,7 @@ import { useQuery, useQueryClient } from '@tanstack/react-query' import { userMetadataListFromSDK } from '~/adapters/user' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, QueryOptions } from '../types' @@ -34,7 +34,7 @@ export const useEventFollowers = ( { eventId, limit = DEFAULT_LIMIT }: UseEventFollowersArgs, options?: QueryOptions ) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const { data: currentUserId } = useCurrentUserId() const queryClient = useQueryClient() @@ -54,11 +54,7 @@ export const useEventFollowers = ( if (users.length) primeUserData({ users, queryClient }) return users.map((u) => u.user_id) } catch (error) { - reportToSentry({ - error: error as Error, - name: 'Events', - feature: Feature.Events - }) + console.error('Events', error as Error) return [] } }, diff --git a/packages/common/src/api/tan-query/events/useFollowEvent.ts b/packages/common/src/api/tan-query/events/useFollowEvent.ts index 6e549a9de0a..b1e3e38324a 100644 --- a/packages/common/src/api/tan-query/events/useFollowEvent.ts +++ b/packages/common/src/api/tan-query/events/useFollowEvent.ts @@ -2,7 +2,7 @@ import { encodeHashId } from '@audius/sdk' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature, ID } from '~/models' +import { ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -65,7 +65,7 @@ export const useEventFollowState = (eventId: ID | null | undefined) => { } export const useFollowEvent = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -96,11 +96,7 @@ export const useFollowEvent = () => { getEventFollowStateQueryKey(eventId, userId), ctx?.prev ?? { isFollowed: false, followerCount: 0 } ) - reportToSentry({ - error, - name: 'Events', - feature: Feature.Events - }) + console.error(error) toast({ content: 'Could not follow contest. Please try again.' }) }, onSettled: (_data, _err, { userId, eventId }) => { @@ -117,7 +113,7 @@ export const useFollowEvent = () => { } export const useUnfollowEvent = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -142,11 +138,7 @@ export const useUnfollowEvent = () => { getEventFollowStateQueryKey(eventId, userId), ctx?.prev ?? { isFollowed: true, followerCount: 0 } ) - reportToSentry({ - error, - name: 'Events', - feature: Feature.Events - }) + console.error(error) toast({ content: 'Could not unfollow contest. Please try again.' }) }, onSettled: (_data, _err, { userId, eventId }) => { diff --git a/packages/common/src/api/tan-query/events/useUpdateEvent.ts b/packages/common/src/api/tan-query/events/useUpdateEvent.ts index 3ff305ef47c..0694a48e4f7 100644 --- a/packages/common/src/api/tan-query/events/useUpdateEvent.ts +++ b/packages/common/src/api/tan-query/events/useUpdateEvent.ts @@ -2,7 +2,7 @@ import { EventEntityTypeEnum, EventEventTypeEnum } from '@audius/sdk' import { useMutation, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' -import { Event, Feature, ID } from '~/models' +import { Event, ID } from '~/models' import { toast } from '~/store/ui/toast/slice' import { QUERY_KEYS } from '../queryKeys' @@ -20,7 +20,7 @@ export type UpdateEventArgs = { } export const useUpdateEvent = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() return useMutation({ @@ -53,12 +53,7 @@ export const useUpdateEvent = () => { return { previousEvent: currentEvent } }, onError: (error: Error, args, context) => { - reportToSentry({ - error, - additionalInfo: args, - name: 'Events', - feature: Feature.Events - }) + console.error(error) // Revert the optimistic updates if (context?.previousEvent) { diff --git a/packages/common/src/api/tan-query/events/useUserRemixContests.ts b/packages/common/src/api/tan-query/events/useUserRemixContests.ts index b8c08df1093..8e210b87492 100644 --- a/packages/common/src/api/tan-query/events/useUserRemixContests.ts +++ b/packages/common/src/api/tan-query/events/useUserRemixContests.ts @@ -17,6 +17,7 @@ import { removeNullable } from '~/utils' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, QueryOptions } from '../types' +import { useCurrentUserId } from '../users/account/useCurrentUserId' import { getEventIdsByEntityIdQueryKey, getEventQueryKey } from './utils' @@ -67,6 +68,7 @@ export const useUserRemixContests = ( ) => { const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() + const { data: currentUserId } = useCurrentUserId() return useInfiniteQuery({ queryKey: getUserRemixContestsQueryKey({ userId, pageSize, status }), @@ -82,7 +84,11 @@ export const useUserRemixContests = ( id: Id.parse(userId), limit: pageSize, offset: pageParam, - status + status, + // Requester id so the backend personalizes embedded related.users + // (e.g. does_current_user_follow). Path `id` is the contest host; + // query `userId` is the current user viewing the page. + userId: currentUserId ? Id.parse(currentUserId) : undefined }) // Prime related tracks + users (full objects, delivered alongside the diff --git a/packages/common/src/api/tan-query/jupiter/useSwapCoins.ts b/packages/common/src/api/tan-query/jupiter/useSwapCoins.ts index 867ffb437d0..d2757271115 100644 --- a/packages/common/src/api/tan-query/jupiter/useSwapCoins.ts +++ b/packages/common/src/api/tan-query/jupiter/useSwapCoins.ts @@ -13,7 +13,6 @@ import { } from '~/api' import { QUERY_KEYS } from '~/api/tan-query/queryKeys' import type { QueryContextType } from '~/api/tan-query/utils/QueryContext' -import { Feature } from '~/models' import { FollowSource } from '~/models/Analytics' import type { User } from '~/models/User' import { JupiterQuoteResult } from '~/services/Jupiter' @@ -230,15 +229,13 @@ const autoFollowArtistOnCoinPurchase = async ({ queryClient, audiusSdk, dispatch, - followUser, - reportToSentry + followUser }: { outputMint: string queryClient: ReturnType audiusSdk: QueryContextType['audiusSdk'] dispatch: ReturnType followUser: ReturnType['mutate'] - reportToSentry: QueryContextType['reportToSentry'] }) => { if (!outputMint || NON_FAN_CLUB_MINTS.includes(outputMint)) { return @@ -275,12 +272,7 @@ const autoFollowArtistOnCoinPurchase = async ({ source: FollowSource.OVERFLOW }) } catch (error) { - reportToSentry({ - name: 'AutoFollowArtistOnCoinPurchaseError', - error: error as Error, - feature: Feature.TanQuery, - additionalInfo: { outputMint } - }) + console.error('AutoFollowArtistOnCoinPurchaseError', error as Error) } } @@ -290,8 +282,7 @@ const autoFollowArtistOnCoinPurchase = async ({ */ export const useSwapCoins = () => { const queryClient = useQueryClient() - const { solanaWalletService, reportToSentry, audiusSdk, env } = - useQueryContext() + const { solanaWalletService, audiusSdk, env } = useQueryContext() const { data: user } = useCurrentAccountUser() const { coins } = useTradeableCoins() const dispatch = useDispatch() @@ -334,18 +325,17 @@ export const useSwapCoins = () => { errorStage = result.errorStage } - reportToSentry({ - name: `JupiterSwap${result.errorStage || errorStage}Error`, - error: new Error(result.error?.message || 'Unknown swap error'), - feature: Feature.TanQuery, - additionalInfo: { + console.error( + `JupiterSwap${result.errorStage || errorStage}Error`, + new Error(result.error?.message || 'Unknown swap error'), + { params, signature, errorStage: result.errorStage || errorStage, firstQuoteResponse: firstQuoteResult?.quote, secondQuoteResponse: secondQuoteResult?.quote } - }) + ) // Throw error so React Query calls onError instead of onSuccess throw new Error(result.error?.message || 'Swap failed') @@ -353,17 +343,12 @@ export const useSwapCoins = () => { return result } catch (error: unknown) { - reportToSentry({ - name: `JupiterSwap${errorStage}Error`, - error: error as Error, - feature: Feature.TanQuery, - additionalInfo: { - params, - signature, - errorStage, - firstQuoteResponse: firstQuoteResult?.quote, - secondQuoteResponse: secondQuoteResult?.quote - } + console.error(`JupiterSwap${errorStage}Error`, error, { + params, + signature, + errorStage, + firstQuoteResponse: firstQuoteResult?.quote, + secondQuoteResponse: secondQuoteResult?.quote }) return getSwapErrorResponse({ @@ -383,8 +368,7 @@ export const useSwapCoins = () => { queryClient, audiusSdk, dispatch, - followUser, - reportToSentry + followUser }) }, onMutate: () => { diff --git a/packages/common/src/api/tan-query/lineups/useForYouFeed.ts b/packages/common/src/api/tan-query/lineups/useForYouFeed.ts index 6e2fee98dae..9a0a16b864d 100644 --- a/packages/common/src/api/tan-query/lineups/useForYouFeed.ts +++ b/packages/common/src/api/tan-query/lineups/useForYouFeed.ts @@ -1,4 +1,4 @@ -import { Id, GetUserRecommendedTracksTimeRangeEnum } from '@audius/sdk' +import { Id } from '@audius/sdk' import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query' import { userTrackMetadataFromSDK } from '~/adapters/track' @@ -24,11 +24,9 @@ export const getForYouFeedQueryKey = (userId: ID | null | undefined) => { } /** - * "For You" feed for the Feed page. Backed by the same recommended-tracks - * endpoint that powers the Explore page's For You section - * (`GET /v1/users/{id}/recommended-tracks`). The dedicated - * `/feed/for-you` endpoint has been retired in favor of consolidating on - * the recommended-tracks source — see the API repo for the deletion. + * "For You" feed for the Feed page. Backed by the dedicated + * `GET /v1/users/{id}/feed/for-you` endpoint — a lean 3-source pipeline + * (in-network, trending, underground) with linear ranking and diversity pass. */ export const useForYouFeed = ( { @@ -57,12 +55,11 @@ export const useForYouFeed = ( const isFirstPage = pageParam === 0 const currentPageSize = isFirstPage ? initialPageSize : loadMorePageSize const sdk = await audiusSdk() - const { data = [] } = await sdk.users.getUserRecommendedTracks({ + const { data = [] } = await sdk.users.getUserForYouFeed({ id: Id.parse(currentUserId), userId: Id.parse(currentUserId), limit: currentPageSize, - offset: pageParam, - timeRange: GetUserRecommendedTracksTimeRangeEnum.Week + offset: pageParam }) const tracks = primeTrackData({ diff --git a/packages/common/src/api/tan-query/notifications/useNotificationUnreadCount.ts b/packages/common/src/api/tan-query/notifications/useNotificationUnreadCount.ts index 8dd6b3a2732..6a6905b0bce 100644 --- a/packages/common/src/api/tan-query/notifications/useNotificationUnreadCount.ts +++ b/packages/common/src/api/tan-query/notifications/useNotificationUnreadCount.ts @@ -35,14 +35,14 @@ export const useNotificationUnreadCount = () => { const response = await ( sdk.notifications as { getNotifications: (params: { - userId: string + id: string limit?: number }) => Promise<{ data?: { unreadCount?: number } }> } ).getNotifications({ - userId: Id.parse(currentUserId), + id: Id.parse(currentUserId), limit: 0 }) return response?.data?.unreadCount ?? 0 diff --git a/packages/common/src/api/tan-query/notifications/useNotifications.ts b/packages/common/src/api/tan-query/notifications/useNotifications.ts index 42bb24a8388..96782a04b85 100644 --- a/packages/common/src/api/tan-query/notifications/useNotifications.ts +++ b/packages/common/src/api/tan-query/notifications/useNotifications.ts @@ -14,10 +14,7 @@ import { useRemoteVar } from '~/hooks' import { ChallengeRewardID } from '~/models' import { ID } from '~/models/Identifiers' import { StringKeys } from '~/services' -import { - NotificationType, - Notification -} from '~/store/notifications/types' +import { NotificationType, Notification } from '~/store/notifications/types' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, QueryOptions } from '../types' @@ -79,6 +76,10 @@ export const useNotifications = (options?: QueryOptions) => { queryFn: async ({ pageParam = null }) => { const sdk = await audiusSdk() const response = await sdk.notifications.getNotifications({ + id: Id.parse(currentUserId), + // Requester id sent as `?user_id=` so the backend personalizes + // embedded related.users (e.g. does_current_user_follow). The path + // id alone identifies the notifications owner, not the requester. userId: Id.parse(currentUserId), limit: DEFAULT_LIMIT, timestamp: pageParam?.timestamp, diff --git a/packages/common/src/api/tan-query/playlist-updates/usePlaylistUpdates.ts b/packages/common/src/api/tan-query/playlist-updates/usePlaylistUpdates.ts index 6c66ab09fdd..6a090008574 100644 --- a/packages/common/src/api/tan-query/playlist-updates/usePlaylistUpdates.ts +++ b/packages/common/src/api/tan-query/playlist-updates/usePlaylistUpdates.ts @@ -38,13 +38,17 @@ export const usePlaylistUpdates = ( const sdk = await audiusSdk() // sdk.notifications.getPlaylistUpdates is not currently typed in the // public SDK surface; cast to the expected shape used in the legacy saga. + // userId carries the requester id as `?user_id=` so the backend can + // personalize related.users in the response. const response = (await ( sdk.notifications as { getPlaylistUpdates: (params: { - userId: string + id: string + userId?: string }) => Promise } ).getPlaylistUpdates({ + id: Id.parse(currentUserId), userId: Id.parse(currentUserId) })) as PlaylistUpdatesResponse | undefined diff --git a/packages/common/src/api/tan-query/purchases/useAudioTransactions.ts b/packages/common/src/api/tan-query/purchases/useAudioTransactions.ts index a0eabfd862d..007098749b3 100644 --- a/packages/common/src/api/tan-query/purchases/useAudioTransactions.ts +++ b/packages/common/src/api/tan-query/purchases/useAudioTransactions.ts @@ -1,13 +1,14 @@ +import { useCallback, useRef } from 'react' + import { GetAudioTransactionsSortMethodEnum, GetAudioTransactionsSortDirectionEnum, Id } from '@audius/sdk' -import { useQuery } from '@tanstack/react-query' +import { InfiniteData, useInfiniteQuery } from '@tanstack/react-query' import { audioTransactionFromSdk } from '~/adapters/audioTransactions' import { useQueryContext } from '~/api/tan-query/utils' -import { ID } from '~/models' import { TransactionDetails } from '~/store/ui/transaction-details/types' import { Nullable } from '~/utils/typeUtils' @@ -16,60 +17,65 @@ import { QueryKey, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' type GetAudioTransactionsArgs = { - page?: number pageSize?: number sortMethod?: GetAudioTransactionsSortMethodEnum sortDirection?: GetAudioTransactionsSortDirectionEnum } +// /v1/users/{id}/transactions/audio caps `limit` at 100 server-side. Keep the +// page size at or below that. export const DEFAULT_AUDIO_TRANSACTIONS_BATCH_SIZE = 50 export const getAudioTransactionsQueryKey = ({ userId, - page, sortMethod, sortDirection, pageSize -}: GetAudioTransactionsArgs & { userId: Nullable | undefined }) => +}: GetAudioTransactionsArgs & { userId: Nullable | undefined }) => [ QUERY_KEYS.audioTransactions, userId, { - page, sortMethod, sortDirection, pageSize } - ] as unknown as QueryKey + ] as unknown as QueryKey> export const useAudioTransactions = ( - args: GetAudioTransactionsArgs, + args: GetAudioTransactionsArgs = {}, options?: QueryOptions ) => { const { audiusSdk } = useQueryContext() const { data: userId } = useCurrentUserId() const { - page = 0, pageSize = DEFAULT_AUDIO_TRANSACTIONS_BATCH_SIZE, sortMethod, sortDirection } = args - const queryResults = useQuery({ + const queryResult = useInfiniteQuery({ queryKey: getAudioTransactionsQueryKey({ userId, - page, sortMethod, sortDirection, pageSize }), - queryFn: async () => { + initialPageParam: 0, + getNextPageParam: ( + lastPage: TransactionDetails[], + allPages: TransactionDetails[][] + ) => { + if (lastPage.length < pageSize) return undefined + return allPages.length * pageSize + }, + queryFn: async ({ pageParam }) => { if (!userId) return [] const sdk = await audiusSdk() const response = await sdk.users.getAudioTransactions({ id: Id.parse(userId), - offset: page * pageSize, + offset: pageParam, limit: pageSize, sortMethod, sortDirection @@ -79,9 +85,24 @@ export const useAudioTransactions = ( return response.data.map(audioTransactionFromSdk) }, + select: (data) => data.pages.flat(), ...options, enabled: options?.enabled !== false && !!userId }) - return queryResults + // Stable identity for loadNextPage so the consuming Table's `loadMoreRows` + // doesn't change every render. Mirrors the pattern in usePurchases. + const queryResultRef = useRef(queryResult) + queryResultRef.current = queryResult + const loadNextPage = useCallback(() => { + const q = queryResultRef.current + if (q.isFetching || !q.hasNextPage) return undefined + return q.fetchNextPage() + }, []) + + return { + ...queryResult, + data: queryResult.data, + loadNextPage + } } diff --git a/packages/common/src/api/tan-query/remixes/useRemixes.ts b/packages/common/src/api/tan-query/remixes/useRemixes.ts index 8c91855203f..ba836b076e0 100644 --- a/packages/common/src/api/tan-query/remixes/useRemixes.ts +++ b/packages/common/src/api/tan-query/remixes/useRemixes.ts @@ -12,6 +12,10 @@ import { } from '@tanstack/react-query' import { useDispatch } from 'react-redux' +import { transformAndCleanList, userTrackMetadataFromSDK } from '~/adapters' +import { useQueryContext } from '~/api/tan-query/utils' +import { remixesPageActions } from '~/store/pages' + import { QUERY_KEYS } from '../queryKeys' import { getTrackQueryKey } from '../tracks/useTrack' import { LineupData, QueryKey, QueryOptions } from '../types' @@ -19,10 +23,6 @@ import { useCurrentUserId } from '../users/account/useCurrentUserId' import { getUserQueryKey } from '../users/useUser' import { primeTrackData } from '../utils/primeTrackData' -import { transformAndCleanList, userTrackMetadataFromSDK } from '~/adapters' -import { useQueryContext } from '~/api/tan-query/utils' -import { remixesPageActions } from '~/store/pages' - const DEFAULT_PAGE_SIZE = 10 export type UseRemixesArgs = { diff --git a/packages/common/src/api/tan-query/remixes/useRemixesLineup.ts b/packages/common/src/api/tan-query/remixes/useRemixesLineup.ts index a8a0b27b628..f95268bfa0d 100644 --- a/packages/common/src/api/tan-query/remixes/useRemixesLineup.ts +++ b/packages/common/src/api/tan-query/remixes/useRemixesLineup.ts @@ -3,6 +3,10 @@ import { useEffect, useMemo } from 'react' import { EntityType } from '@audius/sdk' import { useDispatch } from 'react-redux' +import { useRemixContestWinners } from '~/api/tan-query/events/useRemixContestWinners' +import { ID } from '~/models' +import { remixesPageActions } from '~/store/pages' + import { LineupData, QueryOptions } from '../types' import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' @@ -13,10 +17,6 @@ import { getRemixesQueryKey } from './useRemixes' -import { useRemixContestWinners } from '~/api/tan-query/events/useRemixContestWinners' -import { ID } from '~/models' -import { remixesPageActions } from '~/store/pages' - const DEFAULT_PAGE_SIZE = 10 export const useRemixesLineup = ( diff --git a/packages/common/src/api/tan-query/tracks/useDeleteTrack.ts b/packages/common/src/api/tan-query/tracks/useDeleteTrack.ts index acf8cd3be1b..d873ed25e1c 100644 --- a/packages/common/src/api/tan-query/tracks/useDeleteTrack.ts +++ b/packages/common/src/api/tan-query/tracks/useDeleteTrack.ts @@ -4,7 +4,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' import { useAppContext } from '~/context/appContext' import { Name } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { Track } from '~/models/Track' import { UserMetadata } from '~/models/User' @@ -27,7 +26,7 @@ type MutationContext = { } export const useDeleteTrack = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() const { data: currentUser } = useUser(currentUserId) @@ -134,12 +133,7 @@ export const useDeleteTrack = () => { }) } - reportToSentry({ - error, - additionalInfo: { trackId }, - name: 'Delete Track', - feature: Feature.Edit - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/tracks/useDownloadTrackStems.ts b/packages/common/src/api/tan-query/tracks/useDownloadTrackStems.ts index 1b402577157..ea3d4424e70 100644 --- a/packages/common/src/api/tan-query/tracks/useDownloadTrackStems.ts +++ b/packages/common/src/api/tan-query/tracks/useDownloadTrackStems.ts @@ -2,7 +2,6 @@ import { Id } from '@audius/sdk' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useQueryContext } from '~/api/tan-query/utils' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { QUERY_KEYS } from '../queryKeys' @@ -39,7 +38,7 @@ export const getDownloadTrackStemsQueryKey = (trackId: ID) => { } export const useDownloadTrackStems = ({ trackId }: { trackId: ID }) => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() @@ -76,11 +75,7 @@ export const useDownloadTrackStems = ({ trackId }: { trackId: ID }) => { ) }, onError: (error) => { - reportToSentry({ - error, - name: 'Failed to initiate stems archive download', - feature: Feature.Remixes - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/tracks/useFavoriteTrack.ts b/packages/common/src/api/tan-query/tracks/useFavoriteTrack.ts index 7ff9c3197f2..61cab5a2172 100644 --- a/packages/common/src/api/tan-query/tracks/useFavoriteTrack.ts +++ b/packages/common/src/api/tan-query/tracks/useFavoriteTrack.ts @@ -5,7 +5,6 @@ import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' import { useAppContext } from '~/context/appContext' import { Name } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { Track } from '~/models/Track' import { accountActions } from '~/store/account' @@ -23,7 +22,7 @@ type FavoriteTrackArgs = { } export const useFavoriteTrack = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { data: currentUserId } = useCurrentUserId() @@ -151,7 +150,7 @@ export const useFavoriteTrack = () => { // Dispatch the saveTrackSucceeded action dispatch(tracksSocialActions.saveTrackSucceeded(trackId)) }, - onError: (error, { trackId }, context) => { + onError: (error, _args, context) => { if (!context) return // Revert optimistic updates @@ -162,12 +161,7 @@ export const useFavoriteTrack = () => { }) dispatch(accountActions.decrementTrackSaveCount()) - reportToSentry({ - error, - additionalInfo: { trackId }, - name: 'Favorite Track', - feature: Feature.Social - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/tracks/useUnfavoriteTrack.ts b/packages/common/src/api/tan-query/tracks/useUnfavoriteTrack.ts index bb5ec596285..e741cee2594 100644 --- a/packages/common/src/api/tan-query/tracks/useUnfavoriteTrack.ts +++ b/packages/common/src/api/tan-query/tracks/useUnfavoriteTrack.ts @@ -5,7 +5,6 @@ import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' import { useAppContext } from '~/context/appContext' import { Name } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { Track } from '~/models/Track' import { accountActions } from '~/store/account' @@ -25,7 +24,7 @@ export type UnfavoriteTrackArgs = { } export const useUnfavoriteTrack = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { data: currentUserId } = useCurrentUserId() @@ -122,7 +121,7 @@ export const useUnfavoriteTrack = () => { onSuccess: async (_, { trackId }) => { dispatch(tracksSocialActions.unsaveTrackSucceeded(trackId)) }, - onError: (error, { trackId }, context) => { + onError: (error, _args, context) => { if (!context) return // Revert optimistic updates @@ -133,12 +132,7 @@ export const useUnfavoriteTrack = () => { }) dispatch(accountActions.incrementTrackSaveCount()) - reportToSentry({ - error, - additionalInfo: { trackId }, - name: 'Unfavorite Track', - feature: Feature.Social - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/tracks/useUpdateTrack.ts b/packages/common/src/api/tan-query/tracks/useUpdateTrack.ts index 2e6a77c1c4f..ee0f491b272 100644 --- a/packages/common/src/api/tan-query/tracks/useUpdateTrack.ts +++ b/packages/common/src/api/tan-query/tracks/useUpdateTrack.ts @@ -10,7 +10,6 @@ import { trackMetadataForUploadToSdk } from '~/adapters/track' import { useQueryContext } from '~/api/tan-query/utils' import { Track, UserTrackMetadata } from '~/models' import { Name } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { TrackAccessType, @@ -103,7 +102,7 @@ const applyEditTrackFormatting = ( } export const useUpdateTrack = () => { - const { audiusSdk, reportToSentry, analytics } = useQueryContext() + const { audiusSdk, analytics } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const store = useStore() @@ -148,12 +147,7 @@ export const useUpdateTrack = () => { ethAddress, recordAnalytics: analytics.track }).catch((error) => { - reportToSentry({ - error, - additionalInfo: { trackId, userId, ethAddress }, - feature: Feature.Edit, - name: 'Ensure USDC userbank on track edit' - }) + console.error(error) }) } @@ -334,7 +328,7 @@ export const useUpdateTrack = () => { ) } }, - onError: (error, { trackId, metadata }, context?: MutationContext) => { + onError: (error, { trackId }, context?: MutationContext) => { // If the mutation fails, roll back track data if (context?.previousTrack) { primeTrackData({ @@ -370,16 +364,7 @@ export const useUpdateTrack = () => { }) ) - reportToSentry({ - error, - additionalInfo: { - trackId, - userId, - metadata - }, - feature: Feature.Edit, - name: 'Edit Track' - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/upload/usePublishCollection.ts b/packages/common/src/api/tan-query/upload/usePublishCollection.ts index 12a7bd0d3e1..f4f51089dd2 100644 --- a/packages/common/src/api/tan-query/upload/usePublishCollection.ts +++ b/packages/common/src/api/tan-query/upload/usePublishCollection.ts @@ -34,7 +34,7 @@ import { type PublishCollectionContext = Pick< QueryContextType, - 'audiusSdk' | 'analytics' | 'dispatch' | 'reportToSentry' + 'audiusSdk' | 'analytics' | 'dispatch' > & { userId: number } @@ -139,7 +139,7 @@ const getPublishCollectionOptions = (context: PublishCollectionContext) => export const usePublishCollection = ( options?: Partial> ) => { - const { audiusSdk, analytics, reportToSentry } = useQueryContext() + const { audiusSdk, analytics } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { data: account = null } = useCurrentAccount() @@ -152,8 +152,7 @@ export const usePublishCollection = ( audiusSdk, userId: userId!, dispatch, - analytics, - reportToSentry + analytics }), onSuccess: async (playlist) => { diff --git a/packages/common/src/api/tan-query/upload/usePublishStems.ts b/packages/common/src/api/tan-query/upload/usePublishStems.ts index 7437cacad5e..29a09705d4f 100644 --- a/packages/common/src/api/tan-query/upload/usePublishStems.ts +++ b/packages/common/src/api/tan-query/upload/usePublishStems.ts @@ -15,7 +15,7 @@ const { updateProgress } = uploadActions type PublishStemsContext = Pick< QueryContextType, - 'audiusSdk' | 'analytics' | 'dispatch' | 'reportToSentry' + 'audiusSdk' | 'analytics' | 'dispatch' > & { userId: number } diff --git a/packages/common/src/api/tan-query/upload/usePublishTracks.ts b/packages/common/src/api/tan-query/upload/usePublishTracks.ts index c34440e3f8c..3c5295d1a7f 100644 --- a/packages/common/src/api/tan-query/upload/usePublishTracks.ts +++ b/packages/common/src/api/tan-query/upload/usePublishTracks.ts @@ -5,8 +5,7 @@ import { trackMetadataForUploadToSdk } from '~/adapters' import { isContentUSDCPurchaseGated, type USDCPurchaseConditions, - Name, - Feature + Name } from '~/models' import { createUserBankIfNeeded } from '~/services/audius-backend' import { ProgressStatus, uploadActions } from '~/store' @@ -26,7 +25,7 @@ const { updateProgress } = uploadActions type PublishTracksContext = Pick< QueryContextType, - 'audiusSdk' | 'analytics' | 'dispatch' | 'reportToSentry' + 'audiusSdk' | 'analytics' | 'dispatch' > & { userId: number ethAddress?: string | null @@ -51,7 +50,6 @@ export const publishTracks = async ( kind, audiusSdk, dispatch, - reportToSentry, analytics: { make, track } } = context @@ -74,12 +72,7 @@ export const publishTracks = async ( ethAddress, recordAnalytics: track }).catch((error) => { - reportToSentry({ - error, - additionalInfo: { userId, ethAddress }, - feature: Feature.Upload, - name: 'Ensure USDC userbank on track upload' - }) + console.error(error) }) } @@ -147,11 +140,7 @@ export const publishTracks = async ( progress: { status: ProgressStatus.ERROR } }) ) - reportToSentry({ - error: e as Error, - name: 'Upload: Track Publish', - feature: Feature.Upload - }) + console.error('Upload: Track Publish', e as Error) console.error('Error publishing track:', e) return { result: null, error: e as Error } } diff --git a/packages/common/src/api/tan-query/upload/useUpload.ts b/packages/common/src/api/tan-query/upload/useUpload.ts index a05e5ddedc1..54dcaf50307 100644 --- a/packages/common/src/api/tan-query/upload/useUpload.ts +++ b/packages/common/src/api/tan-query/upload/useUpload.ts @@ -4,12 +4,7 @@ import { HashId, type UploadTrackFilesTask } from '@audius/sdk' import { useDispatch } from 'react-redux' import { fileToSdk } from '~/adapters' -import { - Name, - type StemUploadWithFile, - isContentFollowGated, - Feature -} from '~/models' +import { Name, type StemUploadWithFile, isContentFollowGated } from '~/models' import { type TrackForUpload, uploadActions, @@ -165,8 +160,7 @@ export const useUpload = ( const dispatch = useDispatch() const { audiusSdk, - analytics: { make, track }, - reportToSentry + analytics: { make, track } } = useQueryContext() const { mutateAsync: publishTracksAsync } = usePublishTracks() @@ -524,19 +518,7 @@ export const useUpload = ( kind: uploadType === UploadType.ALBUM ? 'album' : 'playlist' }) ) - reportToSentry({ - error: err as Error, - name: 'Upload: Collection Publish', - additionalInfo: { - collectionType: uploadType, - trackCount: tracks.length, - tracks: tracks.map((t) => ({ - title: t.metadata.title, - hasStems: !!t.metadata.stems?.length - })) - }, - feature: Feature.Upload - }) + console.error('Upload: Collection Publish', err as Error) dispatch(uploadTracksFailed()) onError?.(err as Error) } @@ -552,7 +534,6 @@ export const useUpload = ( publishTracksAsync, uploadCollectionArtwork, publishCollectionAsync, - reportToSentry, onError, onSuccess ] diff --git a/packages/common/src/api/tan-query/upload/useUploadFiles.ts b/packages/common/src/api/tan-query/upload/useUploadFiles.ts index e623bb9cfb0..f6443155477 100644 --- a/packages/common/src/api/tan-query/upload/useUploadFiles.ts +++ b/packages/common/src/api/tan-query/upload/useUploadFiles.ts @@ -2,7 +2,6 @@ import { useCallback } from 'react' import type { UploadTrackFilesTask } from '@audius/sdk' -import { Feature } from '~/models' import { uploadActions, ProgressStatus } from '~/store' import { useQueryContext } from '../utils' @@ -13,7 +12,7 @@ type UploadTrackFilesTaskWithClientId = UploadTrackFilesTask & { } export const useUploadFiles = () => { - const { dispatch, reportToSentry } = useQueryContext() + const { dispatch } = useQueryContext() const uploadFiles = useCallback( async (tasks: UploadTrackFilesTaskWithClientId[]) => { return await Promise.all( @@ -30,11 +29,7 @@ export const useUploadFiles = () => { progress: { status: ProgressStatus.ERROR } }) ) - reportToSentry({ - error: e as Error, - name: 'Upload: Upload Track File', - feature: Feature.Upload - }) + console.error('Upload: Upload Track File', e as Error) return { clientId: u.clientId, audioUploadResponse: null, @@ -45,7 +40,7 @@ export const useUploadFiles = () => { }) ) }, - [dispatch, reportToSentry] + [dispatch] ) return uploadFiles } diff --git a/packages/common/src/api/tan-query/users/account/useResendRecoveryEmail.ts b/packages/common/src/api/tan-query/users/account/useResendRecoveryEmail.ts index 483a5dca322..0422095cdab 100644 --- a/packages/common/src/api/tan-query/users/account/useResendRecoveryEmail.ts +++ b/packages/common/src/api/tan-query/users/account/useResendRecoveryEmail.ts @@ -11,8 +11,7 @@ import { useQueryContext } from '../../utils' * packages/web/src/common/store/recovery-email/sagas.ts. */ export const useResendRecoveryEmail = () => { - const { authService, identityService, analytics, reportToSentry } = - useQueryContext() + const { authService, identityService, analytics } = useQueryContext() const { getHostUrl } = useAppContext() return useMutation({ @@ -33,10 +32,10 @@ export const useResendRecoveryEmail = () => { ) }, onError: (error) => { - reportToSentry({ - error: error instanceof Error ? error : new Error(String(error)), - name: 'Resend Recovery: Failed to send recovery email' - }) + console.error( + 'Resend Recovery: Failed to send recovery email', + error instanceof Error ? error : new Error(String(error)) + ) } }) } diff --git a/packages/common/src/api/tan-query/users/useFollowUser.ts b/packages/common/src/api/tan-query/users/useFollowUser.ts index 412373c322f..4411ce22c91 100644 --- a/packages/common/src/api/tan-query/users/useFollowUser.ts +++ b/packages/common/src/api/tan-query/users/useFollowUser.ts @@ -6,7 +6,6 @@ import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils' import { useAppContext } from '~/context/appContext' import { Name, FollowSource } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { UserMetadata } from '~/models/User' @@ -26,7 +25,7 @@ type MutationContext = { } export const useFollowUser = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() const { @@ -115,11 +114,7 @@ export const useFollowUser = () => { return { previousUser } }, - onError: ( - error, - { followeeUserId }, - context: MutationContext | undefined - ) => { + onError: (error, _args, context: MutationContext | undefined) => { const { previousUser } = context ?? {} if (previousUser) { @@ -130,14 +125,7 @@ export const useFollowUser = () => { }) } - reportToSentry({ - error, - additionalInfo: { - followeeUserId - }, - feature: Feature.Social, - name: 'Follow User' - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/users/useUnfollowUser.ts b/packages/common/src/api/tan-query/users/useUnfollowUser.ts index 474b3fbaecd..ddcb2650176 100644 --- a/packages/common/src/api/tan-query/users/useUnfollowUser.ts +++ b/packages/common/src/api/tan-query/users/useUnfollowUser.ts @@ -5,7 +5,6 @@ import { useDispatch } from 'react-redux' import { useQueryContext } from '~/api/tan-query/utils/QueryContext' import { useAppContext } from '~/context/appContext' import { Name, FollowSource } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { UserMetadata } from '~/models/User' import { removeFolloweeId } from '~/store/gated-content/slice' @@ -25,7 +24,7 @@ type MutationContext = { } export const useUnfollowUser = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const dispatch = useDispatch() const { @@ -104,11 +103,7 @@ export const useUnfollowUser = () => { return { previousUser } }, - onError: ( - error, - { followeeUserId }, - context: MutationContext | undefined - ) => { + onError: (error, _args, context: MutationContext | undefined) => { const { previousUser } = context ?? {} if (previousUser) { @@ -119,14 +114,7 @@ export const useUnfollowUser = () => { }) } - reportToSentry({ - error, - additionalInfo: { - followeeUserId - }, - feature: Feature.Social, - name: 'Unfollow User' - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/users/useUpdateProfile.ts b/packages/common/src/api/tan-query/users/useUpdateProfile.ts index 1c6c7a7dbcc..61e04fcaeb9 100644 --- a/packages/common/src/api/tan-query/users/useUpdateProfile.ts +++ b/packages/common/src/api/tan-query/users/useUpdateProfile.ts @@ -3,7 +3,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { userMetadataToSdk } from '~/adapters/user' import { primeUserData, useQueryContext } from '~/api/tan-query/utils' -import { Feature } from '~/models/ErrorReporting' import { UserMetadata, WriteableUserMetadata } from '~/models/User' import { dataURLtoFile } from '~/utils' import { squashNewLines } from '~/utils/formatUtil' @@ -16,7 +15,7 @@ export type MutationContext = { } export const useUpdateProfile = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() @@ -92,14 +91,7 @@ export const useUpdateProfile = () => { }) } - reportToSentry({ - error, - additionalInfo: { - metadata - }, - feature: Feature.Edit, - name: 'Edit Profile' - }) + console.error(error) }, onSettled: (_, __) => { // Always refetch after error or success to ensure cache is in sync with server diff --git a/packages/common/src/api/tan-query/utils/QueryContext.ts b/packages/common/src/api/tan-query/utils/QueryContext.ts index abafa33581b..4a5d81f9891 100644 --- a/packages/common/src/api/tan-query/utils/QueryContext.ts +++ b/packages/common/src/api/tan-query/utils/QueryContext.ts @@ -16,8 +16,7 @@ import { import { AllTrackingEvents, AnalyticsEvent, - IdentifyTraits, - ReportToSentryArgs + IdentifyTraits } from '../../../models' export type QueryContextType = { @@ -27,7 +26,6 @@ export type QueryContextType = { solanaWalletService: SolanaWalletService identityService: IdentityService dispatch: Dispatch - reportToSentry: (args: ReportToSentryArgs) => void env: Env fetch: typeof fetch remoteConfigInstance: RemoteConfigInstance @@ -96,8 +94,6 @@ export function* getQueryContext(): Generator { remoteConfigInstance: yield* getContext< QueryContextType['remoteConfigInstance'] >('remoteConfigInstance'), - reportToSentry: - yield* getContext('reportToSentry'), analytics: yield* getContext('analytics'), nftClient: null, imageUtils: yield* getContext('imageUtils') diff --git a/packages/common/src/api/tan-query/utils/defaultConfig.ts b/packages/common/src/api/tan-query/utils/defaultConfig.ts index 2c34fb97402..f610f48879d 100644 --- a/packages/common/src/api/tan-query/utils/defaultConfig.ts +++ b/packages/common/src/api/tan-query/utils/defaultConfig.ts @@ -1,11 +1,5 @@ import { Query, QueryKey } from '@tanstack/react-query' -import { - ErrorLevel, - Feature, - ReportToSentryArgs -} from '~/models/ErrorReporting' - export const MAX_RETRIES = 3 export const HTTP_STATUSES_TO_NOT_RETRY = [400, 401, 403, 404] @@ -24,26 +18,15 @@ export const defaultRetryConfig = (failureCount: number, error: any) => { return true } -type ReportToSentry = (args: ReportToSentryArgs) => Promise - export const queryErrorHandler = ( err: unknown, - query: Query, - reportToSentry: ReportToSentry + query: Query ) => { const error = err instanceof Error ? err : new Error(String(err)) - reportToSentry({ - error, - level: ErrorLevel.Error, - feature: Feature.TanQuery, - name: `Query Error: ${query.queryKey[0] as string}`, - additionalInfo: { - queryHookMetadata: { - queryKey: query.queryKey, - isActive: query.isActive, - isStale: query.isStale, - isDisabled: query.isDisabled - } - } + console.error(`Query Error: ${query.queryKey[0] as string}`, error, { + queryKey: query.queryKey, + isActive: query.isActive, + isStale: query.isStale, + isDisabled: query.isDisabled }) } diff --git a/packages/common/src/api/tan-query/wallets/useAssociatedWallets.ts b/packages/common/src/api/tan-query/wallets/useAssociatedWallets.ts index 3d7deac1368..26e42c63fa9 100644 --- a/packages/common/src/api/tan-query/wallets/useAssociatedWallets.ts +++ b/packages/common/src/api/tan-query/wallets/useAssociatedWallets.ts @@ -90,7 +90,7 @@ type AddConnectedWalletParams = { export const useAddAssociatedWallet = () => { const queryClient = useQueryClient() - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const { data: currentUserId = null } = useCurrentUserId() // for priming cache @@ -150,10 +150,7 @@ export const useAddAssociatedWallet = () => { getConnectedWalletsQueryKey({ userId: currentUserId }), context?.previousAssociatedWallets ) - reportToSentry({ - error, - name: 'Add Connected Wallet' - }) + console.error(error) } }) } @@ -164,7 +161,7 @@ export type RemoveConnectedWalletParams = { export const useRemoveAssociatedWallet = () => { const queryClient = useQueryClient() - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const { data: currentUserId } = useCurrentUserId() // for priming cache @@ -217,10 +214,7 @@ export const useRemoveAssociatedWallet = () => { type: 'error' }) ) - reportToSentry({ - error, - name: 'Remove Connected Wallet' - }) + console.error(error) } }) } diff --git a/packages/common/src/api/tan-query/wallets/useAudioBalance.ts b/packages/common/src/api/tan-query/wallets/useAudioBalance.ts index 66d895d5ea6..36201abbdcf 100644 --- a/packages/common/src/api/tan-query/wallets/useAudioBalance.ts +++ b/packages/common/src/api/tan-query/wallets/useAudioBalance.ts @@ -16,7 +16,6 @@ import { type QueryContextType } from '~/api/tan-query/utils/QueryContext' import { Chain, ID } from '~/models' -import { Feature } from '~/models/ErrorReporting' import { toErrorWithMessage } from '~/utils/error' import { QUERY_KEYS } from '../queryKeys' @@ -43,7 +42,7 @@ export const getWalletAudioBalanceQueryKey = ({ type FetchAudioBalanceContext = Pick< QueryContextType, - 'audiusSdk' | 'audiusBackend' | 'reportToSentry' + 'audiusSdk' | 'audiusBackend' > const getWalletAudioBalanceQueryFn = @@ -54,7 +53,7 @@ const getWalletAudioBalanceQueryFn = ReturnType >) => { const [_ignored, chain, address, { includeStaked }] = queryKey - const { audiusSdk, audiusBackend, reportToSentry } = context + const { audiusSdk, audiusBackend } = context try { const sdk = await audiusSdk() if (chain === Chain.Eth) { @@ -81,12 +80,7 @@ const getWalletAudioBalanceQueryFn = return AUDIO(wAUDIO(BigInt(wAudioSolBalance.toString()))).value } } catch (error) { - reportToSentry({ - error: toErrorWithMessage(error), - name: 'AudioBalanceFetchError', - feature: Feature.TanQuery, - additionalInfo: { address, chain } - }) + console.error('AudioBalanceFetchError', toErrorWithMessage(error)) throw error } } diff --git a/packages/common/src/api/tan-query/wallets/useExternalWalletBalance.ts b/packages/common/src/api/tan-query/wallets/useExternalWalletBalance.ts index 1eec95ec376..9c8798e17e0 100644 --- a/packages/common/src/api/tan-query/wallets/useExternalWalletBalance.ts +++ b/packages/common/src/api/tan-query/wallets/useExternalWalletBalance.ts @@ -9,7 +9,6 @@ import { useQueryContext, type QueryContextType } from '~/api/tan-query/utils/QueryContext' -import { Feature } from '~/models/ErrorReporting' import { TOKEN_LISTING_MAP } from '~/store' import { toErrorWithMessage } from '~/utils/error' @@ -47,11 +46,11 @@ export const getExternalWalletBalanceQueryKey = ({ type FetchExternalWalletBalanceContext = Pick< QueryContextType, - 'audiusSdk' | 'env' | 'reportToSentry' + 'audiusSdk' | 'env' > const getExternalWalletBalanceQueryFn = - (context: FetchExternalWalletBalanceContext) => + (_context: FetchExternalWalletBalanceContext) => async ({ queryKey }: QueryFunctionContext< @@ -61,7 +60,6 @@ const getExternalWalletBalanceQueryFn = if (!walletAddress || !mint) { throw new Error('Wallet address and mint are required') } - const { reportToSentry } = context try { // Call Jupiter API to get balances const response = await fetch( @@ -93,12 +91,10 @@ const getExternalWalletBalanceQueryFn = // Convert raw balance to FixedDecimal with proper decimals return new FixedDecimal(tokenBalance.uiAmount, tokenBalance.decimals) } catch (error) { - reportToSentry({ - error: toErrorWithMessage(error), - name: 'ExternalWalletBalanceFetchError', - feature: Feature.TanQuery, - additionalInfo: { walletAddress, mint } - }) + console.error( + 'ExternalWalletBalanceFetchError', + toErrorWithMessage(error) + ) throw error } } diff --git a/packages/common/src/api/tan-query/wallets/useSendCoins.ts b/packages/common/src/api/tan-query/wallets/useSendCoins.ts index 0e999a6e23d..07f1c1a0743 100644 --- a/packages/common/src/api/tan-query/wallets/useSendCoins.ts +++ b/packages/common/src/api/tan-query/wallets/useSendCoins.ts @@ -38,8 +38,7 @@ export type SendCoinsResult = { */ export const useSendCoins = ({ mint }: { mint: string }) => { const queryClient = useQueryClient() - const { audiusBackend, audiusSdk, reportToSentry, analytics, env } = - useQueryContext() + const { audiusBackend, audiusSdk, analytics, env } = useQueryContext() const { data: walletAddresses } = useWalletAddresses() const { data: currentUser } = useCurrentAccountUser() @@ -203,16 +202,10 @@ export const useSendCoins = ({ mint }: { mint: string }) => { } } - if (reportToSentry) { - reportToSentry({ - error: error instanceof Error ? error : new Error(error as string), - name: 'Send Coins', - additionalInfo: { - amount: amount.toString(), - mint - } - }) - } + console.error( + 'Send Coins', + error instanceof Error ? error : new Error(error as string) + ) } }) } diff --git a/packages/common/src/hooks/chats/useSetInboxPermissions.ts b/packages/common/src/hooks/chats/useSetInboxPermissions.ts index bf0c34d2ef7..f7ac1fa37ab 100644 --- a/packages/common/src/hooks/chats/useSetInboxPermissions.ts +++ b/packages/common/src/hooks/chats/useSetInboxPermissions.ts @@ -18,7 +18,7 @@ const { fetchPermissions } = chatActions const { getChatPermissionsStatus, getUserChatPermissions } = chatSelectors export const useSetInboxPermissions = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const dispatch = useDispatch() const { data: userId } = useCurrentUserId() const permissions = useSelector((state: CommonState) => @@ -50,10 +50,7 @@ export const useSetInboxPermissions = () => { }) ) } catch (e) { - reportToSentry({ - name: 'Chats', - error: e as Error - }) + console.error('Chats', e as Error) track( make({ eventName: Name.CHANGE_INBOX_SETTINGS_FAILURE, @@ -62,7 +59,7 @@ export const useSetInboxPermissions = () => { ) } }, - [audiusSdk, doFetchPermissions, track, make, reportToSentry] + [audiusSdk, doFetchPermissions, track, make] ) return { diff --git a/packages/common/src/hooks/useChangeEmailFormConfiguration.ts b/packages/common/src/hooks/useChangeEmailFormConfiguration.ts index 26533eb937a..4167a55b851 100644 --- a/packages/common/src/hooks/useChangeEmailFormConfiguration.ts +++ b/packages/common/src/hooks/useChangeEmailFormConfiguration.ts @@ -71,7 +71,6 @@ export const useChangeEmailFormConfiguration = (onComplete: () => void) => { () => toFormikValidationSchema(emailSchema(queryContext, queryClient)), [queryContext, queryClient] ) - const reportToSentry = queryContext.reportToSentry const validationSchema = page === ChangeEmailPage.ConfirmPassword @@ -136,11 +135,11 @@ export const useChangeEmailFormConfiguration = (onComplete: () => void) => { } else { helpers.setFieldError('otp', messages.somethingWrong) helpers.setFieldError('email', messages.somethingWrong) - reportToSentry({ error: e as Error, name: 'ChangeEmail' }) + console.error('ChangeEmail', e as Error) } } }, - [setPage, onComplete, authService, reportToSentry] + [setPage, onComplete, authService] ) const onSubmit = useCallback( diff --git a/packages/common/src/hooks/useShareAction.ts b/packages/common/src/hooks/useShareAction.ts index 2c37cd539e9..aba50855e79 100644 --- a/packages/common/src/hooks/useShareAction.ts +++ b/packages/common/src/hooks/useShareAction.ts @@ -5,9 +5,9 @@ import { Id } from '@audius/sdk' import { useCurrentUserId } from '~/api/tan-query/users/account/useCurrentUserId' import { useQueryContext } from '~/api/tan-query/utils/QueryContext' -/** Sends an EntityManager share action. Fire and forget. Will report to sentry if it fails. */ +/** Sends an EntityManager share action. Fire and forget. Logs to console if it fails. */ export const useShareAction = () => { - const { audiusSdk, reportToSentry } = useQueryContext() + const { audiusSdk } = useQueryContext() const { data: userId } = useCurrentUserId() return useCallback( @@ -34,17 +34,12 @@ export const useShareAction = () => { }) } } catch (error) { - reportToSentry({ - error: error as Error, - name: 'Failed to send EntityManager share action', - additionalInfo: { - userId, - entityId, - entityType - } - }) + console.error( + 'Failed to send EntityManager share action', + error as Error + ) } }, - [audiusSdk, userId, reportToSentry] + [audiusSdk, userId] ) } diff --git a/packages/common/src/models/ErrorReporting.ts b/packages/common/src/models/ErrorReporting.ts deleted file mode 100644 index cc619255850..00000000000 --- a/packages/common/src/models/ErrorReporting.ts +++ /dev/null @@ -1,84 +0,0 @@ -export enum ErrorLevel { - /** - * FATAL - * What to use for: anything that results in app crash / "Something went wrong" - * These are high prio for on-call to look into, and generally should trigger an alert of some kind. - * Applies to scenarios that are completely unrecoverable other than to refresh client - */ - 'Fatal' = 'Fatal', - - /** - * ERROR - * What to use for: Unexpected breakage but recoverable for the user. - * e.g. click button but fails & shows error toast. Generally applies things that can be "retried" by the user - */ - 'Error' = 'Error', - - /** - * WARNING - * What to use for: Something not ideal but within realm of expected behavior - * e.g. api call failure - */ - 'Warning' = 'Warning', - - // Misc levels that we generally don't use with sentry since we typically send these to generic console - 'Debug' = 'Debug', - 'Info' = 'Info', - 'Log' = 'Log' -} -export type AdditionalErrorReportInfo = Record - -/** - * Areas of our app that we want to group sentry logs together in - * Used to create query-able sentry tags - */ -export enum Feature { - SignUp = 'sign-up', - SignIn = 'sign-in', - Upload = 'upload', - Playback = 'playback', - Purchase = 'purchase', - Comments = 'comments', - Chats = 'chats', - Social = 'social', - Notifications = 'notifications', - Rewards = 'rewards', - Edit = 'edit', - Events = 'events', - Remixes = 'remixes', - TanQuery = 'tan-query', - SendTokens = 'send-tokens', - FanClubs = 'fan-clubs' -} - -export type ReportToSentryArgs = { - /** - * The raw JS `Error` to report to sentry. Note: strings are not allowed; - * if you don't have an error object to log just create one via new Error('message') - */ - error: Error - /** - * The severity level that we should report to sentry - * Defaults to ErrorLevel.Error - */ - level?: ErrorLevel - /** - * Any additional info to report (can be any object, but ) - * is generally the right way to report. - */ - additionalInfo?: AdditionalErrorReportInfo - /** - * An optional name to assign to the Error - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name - */ - name?: string - /** - * Adds queryable sentry tags - * https://docs.sentry.io/platforms/javascript/enriching-events/tags/ - */ - tags?: Record - /** - * Which core flow of the app the error should be bucketed in - */ - feature?: Feature -} diff --git a/packages/common/src/models/index.ts b/packages/common/src/models/index.ts index 72f892aa328..40d7610b4b3 100644 --- a/packages/common/src/models/index.ts +++ b/packages/common/src/models/index.ts @@ -9,7 +9,6 @@ export * from './Collection' export * from './Color' export * from './DogEar' export * from './DownloadQuality' -export * from './ErrorReporting' export * from './Favorite' export * from './FeedFilter' export * from './FeedTab' diff --git a/packages/common/src/services/audius-backend/AudiusBackend.ts b/packages/common/src/services/audius-backend/AudiusBackend.ts index 180bcabbeda..3e61f8db9b5 100644 --- a/packages/common/src/services/audius-backend/AudiusBackend.ts +++ b/packages/common/src/services/audius-backend/AudiusBackend.ts @@ -28,7 +28,6 @@ import dayjs from '~/utils/dayjs' import { ID, ComputedUserProperties, WriteableUserMetadata } from '../../models' import { AnalyticsEvent } from '../../models/Analytics' -import { ReportToSentryArgs } from '../../models/ErrorReporting' import * as schemas from '../../schemas' import { FeatureFlags, @@ -124,12 +123,7 @@ type AudiusBackendParams = { nativeMobile: Maybe recaptchaSiteKey: Maybe recordAnalytics: (event: AnalyticsEvent, callback?: () => void) => void - reportError: ({ - level, - additionalInfo, - error, - name - }: ReportToSentryArgs) => void | Promise + reportError: (args: { error: Error }) => void | Promise registryAddress: Maybe entityManagerAddress: Maybe remoteConfigInstance: RemoteConfigInstance diff --git a/packages/common/src/services/auth/authService.ts b/packages/common/src/services/auth/authService.ts index 60599c615b4..d061f70ed71 100644 --- a/packages/common/src/services/auth/authService.ts +++ b/packages/common/src/services/auth/authService.ts @@ -31,7 +31,6 @@ export type AuthService = { signIn: ( email: string, password: string, - visitorId?: string, otp?: string ) => Promise signOut: () => Promise @@ -65,14 +64,12 @@ export const createAuthService = ({ const signIn = async ( email: string, password: string, - visitorId?: string, otp?: string ) => { const wallet = await hedgehogInstance.login({ email, username: email, password, - visitorId, otp }) diff --git a/packages/common/src/services/env.ts b/packages/common/src/services/env.ts index d7d9f805ba1..fd130b09955 100644 --- a/packages/common/src/services/env.ts +++ b/packages/common/src/services/env.ts @@ -34,8 +34,6 @@ export type Env = { ETH_TOKEN_BRIDGE_ADDRESS: Nullable EXPLORE_CONTENT_URL: string FCM_PUSH_PUBLIC_KEY: Nullable - FINGERPRINT_ENDPOINT: Nullable - FINGERPRINT_PUBLIC_API_KEY: Nullable GA_HOSTNAME: string GA_MEASUREMENT_ID: string HCAPTCHA_BASE_URL: string @@ -61,7 +59,6 @@ export type Env = { REOWN_PROJECT_ID: string SAFARI_WEB_PUSH_ID: string SCHEME: string - SENTRY_DSN: string SOL_BRIDGE_ADDRESS: Nullable SOL_TOKEN_BRIDGE_ADDRESS: Nullable SOLANA_CLUSTER_ENDPOINT: string diff --git a/packages/common/src/services/fingerprint/FingerprintClient.ts b/packages/common/src/services/fingerprint/FingerprintClient.ts deleted file mode 100644 index debb38a4fed..00000000000 --- a/packages/common/src/services/fingerprint/FingerprintClient.ts +++ /dev/null @@ -1,61 +0,0 @@ -type FingerprintClientConfig = { - apiKey: string - endpoint: string - identityService: string - initFingerprint: ( - apiKey: string, - endpoint: string - ) => Promise - getFingerprint: ( - client: TFingerprintClient, - options: { linkedId: string; tag: any } - ) => Promise -} - -export class FingerprintClient { - private apiKey: string - private fingerprint: TFingerprintClient | null - private endpoint: string - private initFingerprint: ( - apiKey: string, - endpoint: string - ) => Promise - - private getFingerprint: ( - client: TFingerprintClient, - options: { linkedId: string; tag: any } - ) => Promise - - constructor(config: FingerprintClientConfig) { - const { apiKey, endpoint, initFingerprint, getFingerprint } = config - this.apiKey = apiKey - this.fingerprint = null - this.endpoint = endpoint - this.initFingerprint = initFingerprint - this.getFingerprint = getFingerprint - } - - async init() { - try { - const fp = await this.initFingerprint(this.apiKey, this.endpoint) - this.fingerprint = fp - } catch (e) { - console.error(`Error initializing fingerprint client: ${e}`) - } - } - - async identify(email: string, clientOrigin: 'desktop' | 'mobile' | 'web') { - if (!this.fingerprint) { - console.warn('Fingerprint client not yet initted') - return - } - try { - return await this.getFingerprint(this.fingerprint, { - linkedId: email, - tag: { origin: clientOrigin } - }) - } catch (e) { - console.error(`Error identifying fingerprint client: ${e}`) - } - } -} diff --git a/packages/common/src/services/fingerprint/index.ts b/packages/common/src/services/fingerprint/index.ts deleted file mode 100644 index 6b6f35379e5..00000000000 --- a/packages/common/src/services/fingerprint/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './FingerprintClient' diff --git a/packages/common/src/services/index.ts b/packages/common/src/services/index.ts index bd4e3390c15..ff4b4a86eea 100644 --- a/packages/common/src/services/index.ts +++ b/packages/common/src/services/index.ts @@ -2,7 +2,6 @@ export * from './auth' export * from './remote-config' export * from './RandomImage' export * from './audius-backend' -export * from './fingerprint' export * from './local-storage' export * from './wallet-client' export * from './env' diff --git a/packages/common/src/services/remote-config/defaults.ts b/packages/common/src/services/remote-config/defaults.ts index 31277de6989..f204018b946 100644 --- a/packages/common/src/services/remote-config/defaults.ts +++ b/packages/common/src/services/remote-config/defaults.ts @@ -90,8 +90,7 @@ export const remoteConfigDoubleDefaults: { [key in DoubleKeys]: number | null } = { [DoubleKeys.SHOW_ARTIST_RECOMMENDATIONS_FALLBACK_PERCENT]: 0.3333, - [DoubleKeys.SHOW_ARTIST_RECOMMENDATIONS_PERCENT]: 1.0, - [DoubleKeys.SENTRY_REPLAY_ERROR_SAMPLE_RATE]: 0.0 + [DoubleKeys.SHOW_ARTIST_RECOMMENDATIONS_PERCENT]: 1.0 } export const remoteConfigBooleanDefaults: { [key in BooleanKeys]: boolean | null diff --git a/packages/common/src/services/remote-config/types.ts b/packages/common/src/services/remote-config/types.ts index deaf39200f3..e3feca2ce87 100644 --- a/packages/common/src/services/remote-config/types.ts +++ b/packages/common/src/services/remote-config/types.ts @@ -244,10 +244,7 @@ export enum DoubleKeys { /** * How often we should show suggested follows after a user follows another user */ - SHOW_ARTIST_RECOMMENDATIONS_PERCENT = 'SHOW_ARTIST_RECOMMENDATIONS_PERCENT', - - /** How many Sentry error recordings we sample. Value ranges from 0.0-1.0 */ - SENTRY_REPLAY_ERROR_SAMPLE_RATE = 'SENTRY_REPLAY_ERROR_SAMPLE_RATE' + SHOW_ARTIST_RECOMMENDATIONS_PERCENT = 'SHOW_ARTIST_RECOMMENDATIONS_PERCENT' } export enum StringKeys { diff --git a/packages/common/src/store/account/sagas.ts b/packages/common/src/store/account/sagas.ts index e4f427ab383..18ee14e2e0a 100644 --- a/packages/common/src/store/account/sagas.ts +++ b/packages/common/src/store/account/sagas.ts @@ -19,7 +19,7 @@ import { getWalletAccountSaga } from '~/api' import { getAccountStatusQueryKey } from '~/api/tan-query/users/account/useAccountStatus' -import { AccountUserMetadata, ErrorLevel, Status, UserMetadata } from '~/models' +import { AccountUserMetadata, Status, UserMetadata } from '~/models' import { getContext } from '~/store/effects' import { chatActions } from '~/store/pages/chat' import { UPLOAD_TRACKS_SUCCEEDED } from '~/store/upload/actions' @@ -84,28 +84,6 @@ function* handleUploadTrack() { yield* put(setHasTracks(true)) } -/** - * Sets the sentry user so that alerts are tied to a user - */ -function* setSentryUser( - user: Pick, - traits: Record -) { - const sentry = yield* getContext('sentry') - if (traits.isVerified) { - sentry.setTag('isVerified', `${traits.isVerified}`) - } - if (traits.managerUserId) { - sentry.setTag('isManagerMode', 'true') - } - const scope = sentry.getCurrentScope() - scope.setUser({ - id: `${user.user_id}`, - username: user.handle, - ...traits - }) -} - function* initializeMetricsForUser({ accountUser, web3WalletAddress @@ -165,7 +143,6 @@ function* initializeMetricsForUser({ } yield* call([analytics, analytics.identify], traits) - yield* call(setSentryUser, accountUser, traits) } } @@ -177,7 +154,6 @@ export function* fetchAccountAsync({ const audiusBackendInstance = yield* getContext('audiusBackendInstance') const remoteConfigInstance = yield* getContext('remoteConfigInstance') const localStorage = yield* getContext('localStorage') - const reportToSentry = yield* getContext('reportToSentry') const sdk = yield* getSDK() const queryClient = yield* getContext('queryClient') @@ -202,10 +178,7 @@ export function* fetchAccountAsync({ wallet = accountWalletAddressOverride ?? web3WalletAddress } catch (e) { if (!(e instanceof HedgehogWalletNotFoundError)) { - yield* call(reportToSentry, { - name: 'FetchAccountAsync', - error: e as Error - }) + console.error('FetchAccountAsync', e) } } if (!wallet || !web3WalletAddress) { @@ -261,10 +234,7 @@ export function* fetchAccountAsync({ try { yield* call(recordIPIfNotRecent, user.handle) } catch (e) { - yield* call(reportToSentry, { - name: 'FetchAccountAsync', - error: e as Error - }) + console.error('FetchAccountAsync', e) } } @@ -315,7 +285,6 @@ export function* fetchAccountAsync({ function* fetchLocalAccountAsync() { const localStorage = yield* getContext('localStorage') - const reportToSentry = yield* getContext('reportToSentry') const sdk = yield* getSDK() const queryClient = yield* getContext('queryClient') @@ -345,10 +314,7 @@ function* fetchLocalAccountAsync() { wallet = accountWalletAddressOverride ?? web3WalletAddress } catch (e) { if (!(e instanceof HedgehogWalletNotFoundError)) { - yield* call(reportToSentry, { - name: 'FetchLocalAccountAsync', - error: e as Error - }) + console.error('FetchLocalAccountAsync', e) } } @@ -428,21 +394,15 @@ function* recordIPIfNotRecent(handle: string): SagaIterator { function* associateTwitterAccount(action: ReturnType) { const { uuid: twitterId, profile } = action.payload const identityService = yield* getContext('identityService') - const reportToSentry = yield* getContext('reportToSentry') const queryClient = yield* getContext('queryClient') const userId = yield* call(queryCurrentUserId) const accountUser = yield* call(queryAccountUser) const handle = accountUser?.handle if (!userId || !handle) { - reportToSentry({ - error: new Error('Missing userId or handle'), - name: 'Failed to associate Twitter Account', - additionalInfo: { - handle, - userId, - twitterId - } - }) + console.error( + 'Failed to associate Twitter Account', + new Error('Missing userId or handle') + ) return } @@ -464,36 +424,22 @@ function* associateTwitterAccount(action: ReturnType) { } } catch (err) { const error = err instanceof Error ? err : new Error(err as string) - reportToSentry({ - error, - name: 'Failed to associate Twitter Account', - additionalInfo: { - handle, - userId, - twitterId - } - }) + console.error(error) } } function* associateInstagramAccount(action: ReturnType) { const { uuid: instagramId, profile } = action.payload const identityService = yield* getContext('identityService') - const reportToSentry = yield* getContext('reportToSentry') const queryClient = yield* getContext('queryClient') const userId = yield* call(queryCurrentUserId) const accountUser = yield* call(queryAccountUser) const handle = accountUser?.handle if (!userId || !handle) { - reportToSentry({ - error: new Error('Missing userId or handle'), - name: 'Failed to associate Instagram Account', - additionalInfo: { - handle, - userId, - instagramId - } - }) + console.error( + 'Failed to associate Instagram Account', + new Error('Missing userId or handle') + ) return } @@ -515,36 +461,22 @@ function* associateInstagramAccount(action: ReturnType) { } } catch (err) { const error = err instanceof Error ? err : new Error(err as string) - reportToSentry({ - error, - name: 'Failed to associate Instagram Account', - additionalInfo: { - handle, - userId, - instagramId - } - }) + console.error(error) } } function* associateTikTokAccount(action: ReturnType) { const { uuid: tikTokId, profile } = action.payload const identityService = yield* getContext('identityService') - const reportToSentry = yield* getContext('reportToSentry') const queryClient = yield* getContext('queryClient') const userId = yield* call(queryCurrentUserId) const accountUser = yield* call(queryAccountUser) const handle = accountUser?.handle if (!userId || !handle) { - reportToSentry({ - error: new Error('Missing userId or handle'), - name: 'Failed to associate TikTok Account', - additionalInfo: { - handle, - userId, - tikTokId - } - }) + console.error( + 'Failed to associate TikTok Account', + new Error('Missing userId or handle') + ) return } @@ -566,15 +498,7 @@ function* associateTikTokAccount(action: ReturnType) { } } catch (err) { const error = err instanceof Error ? err : new Error(err as string) - reportToSentry({ - error, - name: 'Failed to associate TikTok Account', - additionalInfo: { - handle, - userId, - tikTokId - } - }) + console.error(error) } } @@ -596,12 +520,9 @@ function* watchFetchAccountFailed() { fetchAccountFailed.type, function* (action: ReturnType) { const userId = yield* call(queryCurrentUserId) - const reportToSentry = yield* getContext('reportToSentry') if (userId) { - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error: new Error(`Fetch account failed: ${action.payload.reason}`), - additionalInfo: { userId } + console.error(`Fetch account failed: ${action.payload.reason}`, { + userId }) } } diff --git a/packages/common/src/store/buy-usdc/sagas.ts b/packages/common/src/store/buy-usdc/sagas.ts index 5416392dd91..abe58ddeaeb 100644 --- a/packages/common/src/store/buy-usdc/sagas.ts +++ b/packages/common/src/store/buy-usdc/sagas.ts @@ -12,7 +12,6 @@ import { call, put, race, take, takeLeading } from 'typed-redux-saga' import { queryHasAccount, queryAccountUser, queryWalletAddresses } from '~/api' import { Name } from '~/models/Analytics' -import { ErrorLevel } from '~/models/ErrorReporting' import { PurchaseVendor } from '~/models/PurchaseContent' import { Status } from '~/models/Status' import { StringUSDC } from '~/models/Wallet' @@ -217,7 +216,6 @@ function* doBuyUSDC({ portalHostName } }: ReturnType) { - const reportToSentry = yield* getContext('reportToSentry') const { track, make } = yield* getContext('analytics') const solanaWalletService = yield* getContext('solanaWalletService') const config = yield* call(getBuyUSDCRemoteConfig) @@ -336,11 +334,7 @@ function* doBuyUSDC({ e instanceof BuyUSDCError ? e : new BuyUSDCError(BuyUSDCErrorCode.OnrampError, `${e}`) - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error, - additionalInfo: { userBank } - }) + console.error('BuyUSDC onramp failed', error, { userBank }) yield* put(buyUSDCFlowFailed({ error })) yield* call( track, @@ -359,7 +353,6 @@ function* recoverPurchaseIfNecessary() { const hasAccount = yield* call(queryHasAccount) if (!hasAccount) return - const reportToSentry = yield* getContext('reportToSentry') const { track, make } = yield* getContext('analytics') const audiusBackendInstance = yield* getContext('audiusBackendInstance') const solanaWalletService = yield* getContext('solanaWalletService') @@ -465,10 +458,7 @@ function* recoverPurchaseIfNecessary() { ) } catch (e) { yield* put(recoveryStatusChanged({ status: Status.ERROR })) - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error: e as Error - }) + console.error('BuyUSDC recovery failed', e) yield* call( track, make({ diff --git a/packages/common/src/store/cache/collections/actions.ts b/packages/common/src/store/cache/collections/actions.ts index cbc75f2a292..fb153d4e95e 100644 --- a/packages/common/src/store/cache/collections/actions.ts +++ b/packages/common/src/store/cache/collections/actions.ts @@ -24,6 +24,8 @@ export const ORDER_PLAYLIST_FAILED = 'ORDER_PLAYLIST_FAILED' export const PUBLISH_PLAYLIST = 'PUBLISH_PLAYLIST' export const PUBLISH_PLAYLIST_FAILED = 'PUBLISH_PLAYLIST_FAILED' +export const DUPLICATE_PLAYLIST = 'DUPLICATE_PLAYLIST' + /** * @param initTrackId optional track id to pull artwork from. */ @@ -102,8 +104,17 @@ export function editPlaylistFailed( return { type: EDIT_PLAYLIST_FAILED, error, params, metadata } } -export function addTrackToPlaylist(trackId: ID, playlistId: ID) { - return { type: ADD_TRACK_TO_PLAYLIST, trackId, playlistId } +export function addTrackToPlaylist( + trackId: ID, + playlistId: ID, + options?: { silent?: boolean } +) { + return { + type: ADD_TRACK_TO_PLAYLIST, + trackId, + playlistId, + silent: options?.silent ?? false + } } export function addTrackToPlaylistFailed( @@ -166,3 +177,26 @@ export function publishPlaylistFailed( ) { return { type: PUBLISH_PLAYLIST_FAILED, error, params, metadata } } + +export function duplicatePlaylist({ + sourcePlaylistId, + formFields, + trackIds, + source, + isAlbum +}: { + sourcePlaylistId: ID + formFields: Partial + trackIds: ID[] + source: string + isAlbum?: boolean +}) { + return { + type: DUPLICATE_PLAYLIST, + sourcePlaylistId, + formFields, + trackIds, + source, + isAlbum: !!isAlbum + } +} diff --git a/packages/common/src/store/cast/sagas.ts b/packages/common/src/store/cast/sagas.ts index 4b5c6a9481c..da12cbdcb7e 100644 --- a/packages/common/src/store/cast/sagas.ts +++ b/packages/common/src/store/cast/sagas.ts @@ -1,41 +1 @@ -import { call, put, takeEvery } from 'typed-redux-saga' - -import { getContext } from '~/store/effects' - -import { updateMethod } from './slice' -import { CastMethod, CAST_METHOD } from './types' - -/** - * Sets the initial cast method based on the value in storage - */ -function* setInitialCastMethod() { - const getLocalStorageItem = yield* getContext('getLocalStorageItem') - const storageCastMethod = yield* call(getLocalStorageItem, CAST_METHOD) - let method: CastMethod - if (storageCastMethod === 'chromecast') { - method = 'chromecast' - } else { - method = 'airplay' - } - yield* put(updateMethod({ method, persist: false })) -} - -/** - * Watches for changes to the cast method and updates local storage - */ -function* watchUpdateCastMethod() { - const setLocalStorageItem = yield* getContext('setLocalStorageItem') - yield* takeEvery( - updateMethod.type, - function* (action: ReturnType) { - const { method, persist } = action.payload - if (persist) { - setLocalStorageItem(CAST_METHOD, method) - } - } - ) -} - -export const sagas = () => { - return [setInitialCastMethod, watchUpdateCastMethod] -} +export const sagas = () => [] diff --git a/packages/common/src/store/cast/selectors.ts b/packages/common/src/store/cast/selectors.ts index 8d22f2be783..899569aff20 100644 --- a/packages/common/src/store/cast/selectors.ts +++ b/packages/common/src/store/cast/selectors.ts @@ -2,7 +2,10 @@ import { CommonState } from '~/store/commonStore' const getBaseState = (state: CommonState) => state.cast -export const getMethod = (state: CommonState) => getBaseState(state).method - export const getIsCasting = (state: CommonState) => getBaseState(state).isCasting + +export const getMethod = (state: CommonState) => getBaseState(state).method + +export const getDeviceName = (state: CommonState) => + getBaseState(state).deviceName diff --git a/packages/common/src/store/cast/slice.ts b/packages/common/src/store/cast/slice.ts index 0a76d095337..791ad6595a3 100644 --- a/packages/common/src/store/cast/slice.ts +++ b/packages/common/src/store/cast/slice.ts @@ -1,39 +1,46 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import { CastMethod } from './types' - -type CastState = { - method: CastMethod - isCasting: boolean -} +import { CastMethod, CastState } from './types' const initialState: CastState = { - method: 'airplay', - isCasting: false + isCasting: false, + method: null, + deviceName: null } const slice = createSlice({ name: 'cast', initialState, reducers: { - updateMethod: ( - state, - { - payload: { method } - }: PayloadAction<{ method: CastMethod; persist?: boolean }> - ) => { - state.method = method - }, setIsCasting: ( state, - { payload: { isCasting } }: PayloadAction<{ isCasting: boolean }> + { + payload: { isCasting, method, deviceName } + }: PayloadAction<{ + isCasting: boolean + method?: CastMethod | null + deviceName?: string | null + }> ) => { - state.isCasting = isCasting + if (isCasting) { + state.isCasting = true + if (method !== undefined) state.method = method + if (deviceName !== undefined) state.deviceName = deviceName + return + } + // Turn-off only takes effect if the caller is referring to the + // currently-active method (or didn't specify one). This stops the + // AirPlay route-change listener from clearing a chromecast session + // that was set by GoogleCast.tsx — and vice versa. + if (method && state.method && state.method !== method) return + state.isCasting = false + state.method = null + state.deviceName = null } } }) -export const { updateMethod, setIsCasting } = slice.actions +export const { setIsCasting } = slice.actions export default slice.reducer diff --git a/packages/common/src/store/cast/types.ts b/packages/common/src/store/cast/types.ts index 7bd283b4ce0..61ea9a8843b 100644 --- a/packages/common/src/store/cast/types.ts +++ b/packages/common/src/store/cast/types.ts @@ -1,3 +1,7 @@ -export const CAST_METHOD = 'cast' - export type CastMethod = 'airplay' | 'chromecast' + +export type CastState = { + isCasting: boolean + method: CastMethod | null + deviceName: string | null +} diff --git a/packages/common/src/store/pages/chat/sagas.ts b/packages/common/src/store/pages/chat/sagas.ts index 70f008387ee..d44a8f9f571 100644 --- a/packages/common/src/store/pages/chat/sagas.ts +++ b/packages/common/src/store/pages/chat/sagas.ts @@ -26,7 +26,6 @@ import { queryUsers } from '~/api' import { Name } from '~/models/Analytics' -import { Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { Status } from '~/models/Status' import { inboxUnavailableModalActions } from '~/store/ui/modals' @@ -126,12 +125,7 @@ function* doFetchUnreadMessagesCount() { ) } catch (e) { yield* put(fetchUnreadMessagesCountFailed()) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -195,12 +189,7 @@ export function* doFetchLatestChats() { ) } catch (e) { yield* put(fetchMoreChatsFailed()) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -223,12 +212,7 @@ function* doFetchMoreChats() { yield* put(fetchMoreChatsSucceeded(response)) } catch (e) { yield* put(fetchMoreChatsFailed()) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -288,15 +272,7 @@ function* doFetchLatestMessages( ) } catch (e) { yield* put(fetchMoreMessagesFailed({ chatId })) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -350,15 +326,7 @@ function* doFetchMoreMessages(action: ReturnType) { ) } catch (e) { yield* put(fetchMoreMessagesFailed({ chatId })) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -398,18 +366,7 @@ function* doSetMessageReaction(action: ReturnType) { ) } catch (e) { yield* put(setMessageReactionFailed(action.payload)) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId, - messageId, - reaction, - userId - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) yield* call( track, make({ @@ -480,16 +437,8 @@ function* doCreateChat(action: ReturnType) { }) ) } - const reportToSentry = yield* getContext('reportToSentry') if (!isForbiddenError) { - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - userIds - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } yield* call(track, make({ eventName: Name.CREATE_CHAT_FAILURE })) } @@ -557,17 +506,7 @@ function* doCreateChatBlast(action: ReturnType) { content: 'Something went wrong. Failed to create chat blast.' }) ) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - audience, - audienceContentId, - audienceContentType - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) yield* call( track, @@ -596,15 +535,7 @@ function* doMarkChatAsRead(action: ReturnType) { yield* put(markChatAsReadSucceeded({ chatId })) } catch (e) { yield* put(markChatAsReadFailed({ chatId })) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -626,12 +557,7 @@ function* doMarkAllChatsAsRead() { content: 'Failed to mark messages as read.' }) ) - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -717,16 +643,7 @@ function* doSendMessage(action: ReturnType) { } } } - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId, - messageId: messageIdToUse - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) yield* call(track, make({ eventName: Name.SEND_MESSAGE_FAILURE })) } } @@ -762,12 +679,7 @@ function* doFetchBlockees() { }) ) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -784,12 +696,7 @@ function* doFetchBlockers() { }) ) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -808,12 +715,7 @@ function* doBlockUser(action: ReturnType) { make({ eventName: Name.BLOCK_USER_SUCCESS, blockedUserId: userId }) ) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) yield* call( track, make({ eventName: Name.BLOCK_USER_FAILURE, blockedUserId: userId }) @@ -830,12 +732,7 @@ function* doUnblockUser(action: ReturnType) { }) yield* put(fetchBlockees()) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -862,12 +759,7 @@ function* doFetchPermissions(action: ReturnType) { }) ) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -891,17 +783,7 @@ function* doFetchLinkUnfurlMetadata( fetchLinkUnfurlSucceeded({ chatId, messageId, unfurlMetadata: data[0] }) ) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId, - messageId, - href - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) } } @@ -922,32 +804,15 @@ function* doDeleteChat(action: ReturnType) { yield* put(deleteChatSucceeded({ chatId })) yield* call(track, make({ eventName: Name.DELETE_CHAT_SUCCESS })) } catch (e) { - const reportToSentry = yield* getContext('reportToSentry') - reportToSentry({ - name: 'Chats', - error: e as Error, - additionalInfo: { - chatId - }, - feature: Feature.Chats - }) + console.error('Chats', e as Error) yield* call(track, make({ eventName: Name.DELETE_CHAT_FAILURE })) } } function* doLogError({ payload: { error } }: ReturnType) { const { track, make } = yield* getContext('analytics') - const reportToSentry = yield* getContext('reportToSentry') - const { code, url } = error - reportToSentry({ - name: 'Chats', - error, - additionalInfo: { - code, - url - }, - feature: Feature.Chats - }) + const { code } = error + console.error(error) yield* call(track, make({ eventName: Name.CHAT_WEBSOCKET_ERROR, code })) } diff --git a/packages/common/src/store/playback/slice.test.ts b/packages/common/src/store/playback/slice.test.ts index 74c387ae4e2..7fb90a4bb76 100644 --- a/packages/common/src/store/playback/slice.test.ts +++ b/packages/common/src/store/playback/slice.test.ts @@ -182,8 +182,9 @@ describe('playback slice', () => { actions.removeFromQueue({ index: 1 }) ) expect(afterRemove.queue).toHaveLength(3) - expect(afterRemove.queue.find((t) => t.trackId === removedTrack.trackId)) - .toBeUndefined() + expect( + afterRemove.queue.find((t) => t.trackId === removedTrack.trackId) + ).toBeUndefined() expect(afterRemove.shuffleOriginalQueue).toHaveLength(3) expect( afterRemove.shuffleOriginalQueue.find( diff --git a/packages/common/src/store/playback/slice.ts b/packages/common/src/store/playback/slice.ts index 8ddd547a38f..529d21fbfcd 100644 --- a/packages/common/src/store/playback/slice.ts +++ b/packages/common/src/store/playback/slice.ts @@ -1,6 +1,6 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import { Feature, ID } from '../../models' +import { ID } from '../../models' import { Maybe, Nullable } from '../../utils' import { @@ -156,7 +156,6 @@ type ErrorPayload = { error: string trackId: ID info: string - feature?: Feature } type SetRetriesPayload = { retries: number } diff --git a/packages/common/src/store/purchase-content/sagas.ts b/packages/common/src/store/purchase-content/sagas.ts index a3a01de1e9c..54cb685a6b1 100644 --- a/packages/common/src/store/purchase-content/sagas.ts +++ b/packages/common/src/store/purchase-content/sagas.ts @@ -29,7 +29,6 @@ import { import { isPurchaseableAlbum, PurchaseableContentMetadata } from '~/hooks' import { Collection } from '~/models' import { FavoriteSource, Name } from '~/models/Analytics' -import { ErrorLevel, Feature } from '~/models/ErrorReporting' import { ID } from '~/models/Identifiers' import { PurchaseAccess, @@ -632,7 +631,6 @@ function* doStartPurchaseContentFlow({ } }: ReturnType) { const usdcConfig = yield* call(getBuyUSDCRemoteConfig) - const reportToSentry = yield* getContext('reportToSentry') const { track, make } = yield* getContext('analytics') const audiusSdk = yield* getContext('audiusSdk') const sdk = yield* call(audiusSdk) @@ -886,12 +884,7 @@ function* doStartPurchaseContentFlow({ return } - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error, - additionalInfo: { contentId, contentType }, - feature: Feature.Purchase - }) + console.error('Purchase failed', error, { contentId, contentType }) yield* put(purchaseContentFlowFailed({ error })) yield* put(updateGatedContentStatus({ contentId, status: 'LOCKED' })) yield* call( diff --git a/packages/common/src/store/storeContext.ts b/packages/common/src/store/storeContext.ts index 36dff0e096c..ba70451c9fe 100644 --- a/packages/common/src/store/storeContext.ts +++ b/packages/common/src/store/storeContext.ts @@ -13,14 +13,12 @@ import { AnalyticsEvent, IdentifyTraits, LineupState, - ReportToSentryArgs, Track } from '../models' import { AudioPlayer } from '../services/audio-player' import { AudiusBackend } from '../services/audius-backend' import { Env } from '../services/env' import { Explore } from '../services/explore' -import { FingerprintClient } from '../services/fingerprint' import { LocalStorage } from '../services/local-storage' import { FeatureFlags, RemoteConfigInstance } from '../services/remote-config' import { TrackDownload } from '../services/track-download' @@ -54,7 +52,6 @@ export type CommonStoreContext = { getHostUrl: () => string remoteConfigInstance: RemoteConfigInstance audiusBackendInstance: AudiusBackend - fingerprintClient: FingerprintClient walletClient: WalletClient localStorage: LocalStorage isNativeMobile: boolean @@ -68,11 +65,6 @@ export type CommonStoreContext = { ) => (state: CommonState) => LineupState audioPlayer: AudioPlayer nftClient: null - sentry: { - setTag: (key: string, value: string) => void - getCurrentScope: () => { setUser: (user: any) => void } - } - reportToSentry: (args: ReportToSentryArgs) => void trackDownload: TrackDownload instagramAppId?: string instagramRedirectUrl?: string diff --git a/packages/common/src/store/ui/modals/add-tracks-by-url-modal/index.ts b/packages/common/src/store/ui/modals/add-tracks-by-url-modal/index.ts new file mode 100644 index 00000000000..b7ecf9ea476 --- /dev/null +++ b/packages/common/src/store/ui/modals/add-tracks-by-url-modal/index.ts @@ -0,0 +1,22 @@ +import { ID } from '../../../../models' +import { createModal } from '../createModal' + +export type AddTracksByUrlModalState = { + collectionId?: ID + isAlbum?: boolean +} + +const addTracksByUrlModal = createModal({ + reducerPath: 'AddTracksByUrlModal', + initialState: { + isOpen: false, + isAlbum: false + }, + sliceSelector: (state) => state.ui.modals +}) + +export const { + hook: useAddTracksByUrlModal, + reducer: addTracksByUrlModalReducer, + actions: addTracksByUrlModalActions +} = addTracksByUrlModal diff --git a/packages/common/src/store/ui/modals/create-playlist-modal/index.ts b/packages/common/src/store/ui/modals/create-playlist-modal/index.ts new file mode 100644 index 00000000000..e1b8f1d5306 --- /dev/null +++ b/packages/common/src/store/ui/modals/create-playlist-modal/index.ts @@ -0,0 +1,21 @@ +import { createModal } from '../createModal' + +export type CreatePlaylistModalState = { + isAlbum?: boolean + initTrackId?: number +} + +const createPlaylistModal = createModal({ + reducerPath: 'CreatePlaylistModal', + initialState: { + isOpen: false, + isAlbum: false + }, + sliceSelector: (state) => state.ui.modals +}) + +export const { + hook: useCreatePlaylistModal, + reducer: createPlaylistModalReducer, + actions: createPlaylistModalActions +} = createPlaylistModal diff --git a/packages/common/src/store/ui/modals/duplicate-playlist-modal/index.ts b/packages/common/src/store/ui/modals/duplicate-playlist-modal/index.ts new file mode 100644 index 00000000000..5a98a2ff94f --- /dev/null +++ b/packages/common/src/store/ui/modals/duplicate-playlist-modal/index.ts @@ -0,0 +1,20 @@ +import { createModal } from '../createModal' + +export type DuplicatePlaylistModalState = { + isAlbum?: boolean +} + +const duplicatePlaylistModal = createModal({ + reducerPath: 'DuplicatePlaylistModal', + initialState: { + isOpen: false, + isAlbum: false + }, + sliceSelector: (state) => state.ui.modals +}) + +export const { + hook: useDuplicatePlaylistModal, + reducer: duplicatePlaylistModalReducer, + actions: duplicatePlaylistModalActions +} = duplicatePlaylistModal diff --git a/packages/common/src/store/ui/modals/index.ts b/packages/common/src/store/ui/modals/index.ts index 0c79117f184..3f1b34bb7a4 100644 --- a/packages/common/src/store/ui/modals/index.ts +++ b/packages/common/src/store/ui/modals/index.ts @@ -41,3 +41,6 @@ export * from './receive-tokens-modal' export * from './send-tokens-modal' export * from './coin-success-modal' export * from './fan-club-details-modal' +export * from './create-playlist-modal' +export * from './duplicate-playlist-modal' +export * from './add-tracks-by-url-modal' diff --git a/packages/common/src/store/ui/modals/parentSlice.ts b/packages/common/src/store/ui/modals/parentSlice.ts index c9edbd4b658..f86425b4e57 100644 --- a/packages/common/src/store/ui/modals/parentSlice.ts +++ b/packages/common/src/store/ui/modals/parentSlice.ts @@ -26,6 +26,7 @@ export const initialState: BasicModalsState = { TrendingCategory: { isOpen: false }, TrendingTimeRange: { isOpen: false }, TrendingFilter: { isOpen: false }, + FeedFilter: { isOpen: false }, TrendingRewardsExplainer: { isOpen: false }, SocialProof: { isOpen: false }, EditTrack: { isOpen: false }, @@ -83,7 +84,10 @@ export const initialState: BasicModalsState = { CoinSuccessModal: { isOpen: false }, FanClubDetailsModal: { isOpen: false }, VerificationSuccess: { isOpen: false }, - VerificationError: { isOpen: false } + VerificationError: { isOpen: false }, + CreatePlaylistModal: { isOpen: false }, + DuplicatePlaylistModal: { isOpen: false }, + AddTracksByUrlModal: { isOpen: false } } const slice = createSlice({ diff --git a/packages/common/src/store/ui/modals/reducers.ts b/packages/common/src/store/ui/modals/reducers.ts index d8a50ee311f..e4b69013ba9 100644 --- a/packages/common/src/store/ui/modals/reducers.ts +++ b/packages/common/src/store/ui/modals/reducers.ts @@ -1,6 +1,7 @@ import { Action, combineReducers, Reducer } from '@reduxjs/toolkit' import { addCashModalReducer } from './add-cash-modal' +import { addTracksByUrlModalReducer } from './add-tracks-by-url-modal' import { albumTrackRemoveConfirmationModalReducer } from './album-track-remove-confirmation-modal' import { announcementModalReducer } from './announcement-modal' import { artistPickModalReducer } from './artist-pick-modal' @@ -12,8 +13,10 @@ import { coinflowWithdrawModalReducer } from './coinflow-withdraw-modal' import { connectedWalletsModalReducer } from './connected-wallets-modal' import { chatBlastModalReducer } from './create-chat-blast-modal' import { createChatModalReducer } from './create-chat-modal' +import { createPlaylistModalReducer } from './create-playlist-modal' import { deleteTrackConfirmationModalReducer } from './delete-track-confirmation-modal' import { downloadTrackArchiveModalReducer } from './download-track-archive-modal' +import { duplicatePlaylistModalReducer } from './duplicate-playlist-modal' import { earlyReleaseConfirmationModalReducer } from './early-release-confirmation-modal' import { editAccessConfirmationModalReducer } from './edit-access-confirmation-modal' import { externalWalletSignUpModalReducer } from './external-wallet-sign-up-modal' @@ -92,7 +95,10 @@ const combinedReducers = combineReducers({ ReceiveTokensModal: receiveTokensModalReducer, SendTokensModal: sendTokensModalReducer, CoinSuccessModal: coinSuccessModalReducer, - FanClubDetailsModal: fanClubDetailsModalReducer + FanClubDetailsModal: fanClubDetailsModalReducer, + CreatePlaylistModal: createPlaylistModalReducer, + DuplicatePlaylistModal: duplicatePlaylistModalReducer, + AddTracksByUrlModal: addTracksByUrlModalReducer }) /** diff --git a/packages/common/src/store/ui/modals/types.ts b/packages/common/src/store/ui/modals/types.ts index 7a5076fb250..bf6b6d977d3 100644 --- a/packages/common/src/store/ui/modals/types.ts +++ b/packages/common/src/store/ui/modals/types.ts @@ -61,6 +61,7 @@ export type Modals = | 'TrendingCategory' | 'TrendingTimeRange' | 'TrendingFilter' + | 'FeedFilter' | 'TrendingRewardsExplainer' | 'SocialProof' | 'EditTrack' @@ -119,6 +120,9 @@ export type Modals = | 'CoinSuccessModal' | 'VerificationSuccess' | 'VerificationError' + | 'CreatePlaylistModal' + | 'DuplicatePlaylistModal' + | 'AddTracksByUrlModal' export type BasicModalsState = { [modal in Modals]: BaseModalState diff --git a/packages/common/src/store/ui/stripe-modal/sagaHelpers.ts b/packages/common/src/store/ui/stripe-modal/sagaHelpers.ts index 1b1070187e1..fd911bc4aba 100644 --- a/packages/common/src/store/ui/stripe-modal/sagaHelpers.ts +++ b/packages/common/src/store/ui/stripe-modal/sagaHelpers.ts @@ -1,7 +1,6 @@ import { call } from 'typed-redux-saga' import { Name, StripeEventFields } from '~/models/Analytics' -import { ErrorLevel } from '~/models/ErrorReporting' import { getContext } from '~/store/effects' import { StripeSessionData } from './types' @@ -33,7 +32,6 @@ export function* reportStripeFlowAnalytics( session: StripeSessionData, previousSession?: StripeSessionData ) { - const reportToSentry = yield* getContext('reportToSentry') const { track, make } = yield* getContext('analytics') if (!previousSession || session.status !== previousSession.status) { @@ -59,12 +57,8 @@ export function* reportStripeFlowAnalytics( ) break case 'rejected': - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error: new Error('Stripe onramp session status: rejected'), - additionalInfo: { - session: cleanedSession - } + console.error('Stripe onramp session status: rejected', { + session: cleanedSession }) yield* call( track, @@ -93,12 +87,8 @@ export function* reportStripeFlowAnalytics( ) break case 'error': - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error: new Error('Stripe onramp session status: error'), - additionalInfo: { - session: cleanedSession - } + console.error('Stripe onramp session status: error', { + session: cleanedSession }) yield* call( track, diff --git a/packages/common/src/store/ui/stripe-modal/sagas.ts b/packages/common/src/store/ui/stripe-modal/sagas.ts index 4438e556a2e..6da689cbbcd 100644 --- a/packages/common/src/store/ui/stripe-modal/sagas.ts +++ b/packages/common/src/store/ui/stripe-modal/sagas.ts @@ -10,7 +10,6 @@ import { } from 'typed-redux-saga' import { Name } from '~/models/Analytics' -import { ErrorLevel } from '~/models/ErrorReporting' import { IdentityRequestError } from '~/services/auth/identity' import { getContext } from '~/store/effects' @@ -41,7 +40,6 @@ function* handleInitializeStripeModal({ payload: { amount, destinationCurrency, destinationWallet } }: ReturnType) { const identityService = yield* getContext('identityService') - const reportToSentry = yield* getContext('reportToSentry') const { track, make } = yield* getContext('analytics') const { onrampFailed } = yield* select(getStripeModalState) try { @@ -79,16 +77,12 @@ function* handleInitializeStripeModal({ }) } yield* put(setVisibility({ modal: 'StripeOnRamp', visible: 'closing' })) - yield* call(reportToSentry, { - level: ErrorLevel.Error, - error, - additionalInfo: { - code, - stripeErrorMessage, - type, - amount, - destinationCurrency - } + console.error('Stripe session creation error', error, { + code, + stripeErrorMessage, + type, + amount, + destinationCurrency }) yield* call( track, diff --git a/packages/common/src/store/ui/withdraw-usdc/sagas.ts b/packages/common/src/store/ui/withdraw-usdc/sagas.ts index 4c36e054760..3d00689468c 100644 --- a/packages/common/src/store/ui/withdraw-usdc/sagas.ts +++ b/packages/common/src/store/ui/withdraw-usdc/sagas.ts @@ -166,22 +166,19 @@ function* doWithdrawUSDCCoinflow({ }) yield* put(cleanupWithdrawUSDC()) yield* put(closeWithdrawUSDCModal()) - // Buy USDC recovery already logs to sentry and makes an analytics event - // so add some logs to help discern which flow the recovery was triggered - // from and help aid in debugging should this ever hit. + // Buy USDC recovery already logs and makes an analytics event, so add + // some logs to help discern which flow the recovery was triggered from + // and help aid in debugging should this ever hit. if (action.payload.status === Status.ERROR) { - // Breadcrumb hint: console.warn( 'Failed to transfer funds back from root wallet:', rootSolanaAccount.publicKey.toBase58() ) - // Console error for sentry issue console.error('Failed to recover funds from Coinflow Withdraw') } } } catch (e: unknown) { console.error('Withdraw USDC failed', e) - const reportToSentry = yield* getContext('reportToSentry') yield* put(withdrawUSDCFailed({ error: e as Error })) const responseErrorFields = yield* call(getResponseErrorAnalyticsFields, e) @@ -195,9 +192,7 @@ function* doWithdrawUSDCCoinflow({ }) ) - reportToSentry({ - error: e as Error - }) + console.error(e as Error) } } @@ -274,7 +269,6 @@ function* doWithdrawUSDCManualTransfer({ }) } catch (e: unknown) { console.error('Withdraw USDC failed', e) - const reportToSentry = yield* getContext('reportToSentry') yield* put(withdrawUSDCFailed({ error: e as Error })) const responseErrorFields = yield* call(getResponseErrorAnalyticsFields, e) @@ -288,9 +282,7 @@ function* doWithdrawUSDCManualTransfer({ }) ) - reportToSentry({ - error: e as Error - }) + console.error(e as Error) } } diff --git a/packages/common/src/utils/sagaHelpers.ts b/packages/common/src/utils/sagaHelpers.ts index eb84865befa..1b48b68d5c9 100644 --- a/packages/common/src/utils/sagaHelpers.ts +++ b/packages/common/src/utils/sagaHelpers.ts @@ -18,7 +18,6 @@ import { Action } from 'typesafe-actions' // this import needs to be very specific for SSR bundlesize import { getAccountStatusQueryKey } from '~/api/tan-query/users/account/useAccountStatus' -import { ErrorLevel, ReportToSentryArgs } from '~/models' import { waitForReachability } from '~/store/reachability/sagas' import { toast } from '~/store/ui/toast/slice' @@ -187,18 +186,7 @@ export function* sagaWithErrorHandler(saga: () => Generator) { break } catch (e) { yield* put(toast({ content: messages.somethingWrong })) - console.warn(`Saga ${saga.name} failed, restarting...`, e) - - // Force typing of reportToSentry. We're not able to pull it in - // from getContext in ~common as that would require the store. - const reportToSentry: (args: ReportToSentryArgs) => void = - yield* getContext('reportToSentry') as any - - yield* call(reportToSentry, { - name: 'Uncaught Saga Error', - level: ErrorLevel.Error, - error: e as Error - }) + console.error(`Uncaught Saga Error in ${saga.name}`, e) } } } diff --git a/packages/compose/package.json b/packages/compose/package.json index 5eb65ee159f..fc7d96a57eb 100644 --- a/packages/compose/package.json +++ b/packages/compose/package.json @@ -9,7 +9,6 @@ "@audius/commands": "*", "@audius/sdk": "*", "@audius/spl": "*", - "@pedalboard/solana-relay": "*", "@pedalboard/staking": "*", "@pedalboard/archiver": "*" }, diff --git a/packages/discovery-provider/nginx_conf/nginx_container.conf b/packages/discovery-provider/nginx_conf/nginx_container.conf index fac26137af4..e4e65d1c1b6 100644 --- a/packages/discovery-provider/nginx_conf/nginx_container.conf +++ b/packages/discovery-provider/nginx_conf/nginx_container.conf @@ -117,13 +117,6 @@ http { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - location ~ ^/solana(/.*)?$ { - resolver 127.0.0.11 valid=30s; - proxy_pass http://solana-relay:6002/solana$1$is_args$args; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - location ~ ^/attestation(/.*)?$ { resolver 127.0.0.11 valid=30s; proxy_pass http://anti-abuse:6003$request_uri; diff --git a/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/actionLog.ts b/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/actionLog.ts index c82979cfb80..5cea14bbf02 100644 --- a/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/actionLog.ts +++ b/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/actionLog.ts @@ -2,7 +2,7 @@ import 'dotenv/config' import postgres from 'postgres' import fetch from 'cross-fetch' -import { useEmailDeliverable, useFingerprintDeviceCount } from './identity' +import { useEmailDeliverable } from './identity' export const sql = postgres(process.env.audius_db_url || '') @@ -71,15 +71,6 @@ export async function getUser(handle: string) { return rows[0].user as UserDetails } -export async function queryUsers({ ids }: { ids: number[] }) { - const rows = await sql` - ${sql.unsafe(buildUserDetails)} - where - user_id in ${sql(ids)} - ` - return rows.map((r) => r.user) as UserDetails[] -} - export async function getRecentUsers(page: number) { const rows = await sql` ${sql.unsafe(buildUserDetails)} @@ -157,8 +148,7 @@ export async function getUserNormalizedScore(userId: number, wallet: string) { // Convert values to numbers const shadowbanScore = Number(shadowban_score) - const numberOfUserWithFingerprint = (await useFingerprintDeviceCount(userId))! - let overallScore = shadowbanScore - numberOfUserWithFingerprint + let overallScore = shadowbanScore const isEmailDeliverable = await useEmailDeliverable(wallet) if (!isEmailDeliverable) { @@ -184,7 +174,6 @@ export async function getUserNormalizedScore(userId: number, wallet: string) { challengeCount: challenge_count, followingCount: following_count, chatBlockCount: chat_block_count, - fingerprintCount: numberOfUserWithFingerprint, isAudiusImpersonator: is_audius_impersonator, hasProfilePicture: has_profile_picture, isEmailDeliverable, @@ -196,7 +185,7 @@ export async function getUserNormalizedScore(userId: number, wallet: string) { } export async function getAAOAttestation(handle: string) { - const url = `https://antiabuseoracle.audius.co/abuse/${handle}` + const url = `https://anti-abuse-oracle.audius.engineering/abuse/${handle}` try { const response = await fetch(url) if (!response.ok) { diff --git a/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/identity.ts b/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/identity.ts index 174108e8c66..a788b552950 100644 --- a/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/identity.ts +++ b/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/identity.ts @@ -4,50 +4,6 @@ import postgres from 'postgres' export const sql = postgres(process.env.IDENTITY_DB_URL || '') -type FingerprintCount = { - fingerprint: string - userCount: number - userIds: number[] -} - -export async function userFingerprints(userId: number) { - const rows: FingerprintCount[] = await sql` - select - "visitorId" as "fingerprint", - count(distinct "userId") as "userCount", - array_agg("userId") as "userIds" - from "Fingerprints" - where "visitorId" in ( - select "visitorId" from "Fingerprints" where "userId" = ${userId} - ) - group by 1 order by 2 desc limit 90; - ` - - for (const row of rows) { - row.userIds.sort() - } - - return rows -} - -export async function useFingerprintDeviceCount(userId: number) { - const rows = await sql` - SELECT - MAX("userCount") AS "maxUserCount" - FROM ( - SELECT - "visitorId", - COUNT(DISTINCT "userId") AS "userCount" - FROM "Fingerprints" - WHERE "visitorId" IN ( - SELECT "visitorId" FROM "Fingerprints" WHERE "userId" = ${userId} - ) - GROUP BY "visitorId" - ) t; - ` - return rows[0].maxUserCount ?? 0 -} - export async function useEmailDeliverable(wallet: string) { const rows = await sql` select "isEmailDeliverable" from "Users" where "walletAddress" = ${wallet} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/server.tsx b/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/server.tsx index 35646db4418..37685038dee 100644 --- a/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/server.tsx +++ b/packages/discovery-provider/plugins/pedalboard/apps/anti-abuse-oracle/src/server.tsx @@ -11,15 +11,14 @@ import { sql, type ActionRow, type TrackDetails, - type UserDetails, - queryUsers + type UserDetails } from './actionLog' import { logger } from 'hono/logger' import { config } from './config' import { HashId } from '@audius/sdk' import { SolanaUtils, Utils } from '@audius/sdk-legacy' import bn from 'bn.js' -import { useEmail, userFingerprints } from './identity' +import { useEmail } from './identity' import { cors } from 'hono/cors' import { getAudiusSdk } from './sdk' @@ -359,11 +358,6 @@ app.get('/attestation/ui/user', async (c) => { if (!signals) return c.text(`user id not found: ${idOrHandle}`, 404) - const fingerprints = await userFingerprints(user.id) - const fingerprintUsers = await queryUsers({ - ids: fingerprints.flatMap((f) => f.userIds) - }) - let lastDate = '' function dateHeader(timestamp: Date) { const d = timestamp?.toDateString() @@ -489,16 +483,12 @@ app.get('/attestation/ui/user', async (c) => { - - @@ -560,36 +550,6 @@ app.get('/attestation/ui/user', async (c) => {
Fingerprint Count Deliverable Email Override Overall Score
0 ? 'text-red-500' : ''}> - {userScore.fingerprintCount} - {userScore.isEmailDeliverable.toString()}
-

Fingerprints

- - - - - - - - - - {fingerprints.map((f) => ( - - - - - - ))} - -
FingerprintUser CountUsers
{f.fingerprint}{f.userCount} - {f.userIds - .slice(0, 20) - .map((id) => fingerprintUsers.find((u) => u.id == id)) - .filter(Boolean) - .map((u) => ( - - {u!.handle} - - ))} -
-

Actions

{rows.map((r) => ( diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/.eslintrc.js b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/.eslintrc.js deleted file mode 100644 index 6ccd65829a4..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['audius'] -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/README.md b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/README.md deleted file mode 100644 index 278b7bcf18d..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Solana Relay Plugin - -Plugin to facilitate sending Audius-related Solana transactions - -## Dev - -Create a file `dev.env` and add the following - -``` -audius_discprov_env -audius_discprov_url -audius_db_url -audius_redis_url -audius_solana_endpoint -audius_solana_listen_rpc_url -audius_solana_track_listen_count_address -audius_solana_waudio_mint -audius_solana_usdc_mint -audius_solana_bonk_mint -audius_solana_user_bank_program_address -audius_solana_payment_router_program_address -audius_solana_rewards_manager_program_address -audius_solana_rewards_manager_account -audius_solana_fee_payer_wallets -audius_delegate_private_key -audius_ipdata_api_key -audius_solana_eth_registry_program -audius_solana_listens_valid_signer -audius_solana_signer_private_key -audius_identity_relayer_public_key -audius_solana_listens_ip_hourly_rate_limit -audius_solana_listens_ip_daily_rate_limit -audius_solana_listens_ip_weekly_rate_limit -audius_solana_listens_track_hourly_rate_limit -audius_solana_listens_track_daily_rate_limit -audius_solana_listens_track_weekly_rate_limit -audius_anti_abuse_oracle -``` - -Then - -``` -npm run dev -``` - -If using with the web app, updat the `SOLANA_RELAY_ENDPOINT` value in `packages/web/src/services/env/env..ts` to point to the localhost port that the relay server is running on (i.e. localhost:6002) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/package.json b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/package.json deleted file mode 100644 index c386d1e50f6..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "@pedalboard/solana-relay", - "version": "0.0.23", - "private": true, - "scripts": { - "start": "npx tsx@4.16.0 ./src/index.ts", - "dev": "npx tsx@4.16.0 watch ./src/index.ts", - "test": "vitest", - "lint": "tsc --noEmit && eslint \"src/**/*.ts*\"" - }, - "jest": { - "preset": "jest-presets/jest/node" - }, - "dependencies": { - "@audius/spl": "*", - "@jup-ag/api": "6.0.48", - "@metaplex-foundation/umi": "1.2.0", - "@metaplex-foundation/umi-bundle-defaults": "1.2.0", - "@metaplex-foundation/umi-uploader-irys": "1.2.0", - "@meteora-ag/cp-amm-sdk": "1.1.7", - "@meteora-ag/dynamic-bonding-curve-sdk": "1.3.8", - "@meteora-ag/met-lock-sdk": "1.0.1", - "@noble/curves": "1.4.2", - "@pedalboard/basekit": "*", - "@pedalboard/logger": "*", - "@pedalboard/storage": "*", - "@solana/web3.js": "1.98.0", - "axios": "1.6.8", - "body-parser": "1.19.0", - "borsh": "0.3.1", - "bs58": "4.0.1", - "buffer": "6.0.3", - "cors": "2.8.5", - "cross-fetch": "3.1.8", - "dotenv": "16.4.5", - "envalid": "8.0.0", - "eth-sig-util": "3.0.1", - "express": "4.17.1", - "keccak256": "1.0.6", - "morgan": "1.10.0", - "multer": "2.0.2", - "pino": "8.16.1", - "redis": "4.6.11", - "request-ip": "3.3.0", - "secp256k1": "5.0.0", - "sharp": "0.33.4", - "uuid": "8.3.2", - "web3-eth-accounts": "4.1.2", - "web3-utils": "4.2.3" - }, - "devDependencies": { - "@audius/sdk": "*", - "@types/bn.js": "5.1.0", - "@types/body-parser": "1.19.0", - "@types/cors": "2.8.10", - "@types/express": "4.17.12", - "@types/morgan": "1.9.2", - "@types/multer": "1.4.7", - "@types/node": "15.12.2", - "@types/request-ip": "0.0.41", - "@types/supertest": "2.0.11", - "@types/uuid": "9.0.8", - "esbuild": "0.14.38", - "esbuild-register": "3.3.2", - "eslint": "8.56.0", - "eslint-config-custom-server": "*", - "tsconfig": "*", - "tsx": "4.19.2", - "typescript": "5.0.4", - "vitest": "0.34.6" - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/config.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/config.ts deleted file mode 100644 index 4cc40abf41a..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/config.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { Keypair, PublicKey } from '@solana/web3.js' -import dotenv from 'dotenv' -import { cleanEnv, str, num, json } from 'envalid' - -import { logger } from './logger' - -export const LISTENS_RATE_LIMIT_IP_PREFIX = 'listens-rate-limit-ip' -export const LISTENS_RATE_LIMIT_TRACK_PREFIX = 'listens-rate-limit-track' - -export const ClockProgram = new PublicKey( - 'SysvarC1ock11111111111111111111111111111111' -) -export const InstructionsProgram = new PublicKey( - 'Sysvar1nstructions1111111111111111111111111' -) - -// reads .env file based on environment -const readDotEnv = () => { - const environment = process.env.audius_discprov_env || 'dev' - const dotenvConfig = (filename: string) => - dotenv.config({ path: `${filename}.env` }) - logger.info(`running on ${environment} network`) - dotenvConfig(environment) -} - -type FeePayerWallet = { - privateKey: number[] -} - -type Config = { - environment: string - endpoint: string - discoveryDbConnectionString: string - redisUrl: string - serverHost: string - serverPort: number - solanaEndpoints: string[] - listenRpcUrl: string - rewardsManagerProgramId: string - rewardsManagerAccountAddress: string - claimableTokenProgramId: string - paymentRouterProgramId: string - trackListenCountProgramId: string - ethRegistryProgramId: string - usdcMintAddress: string - waudioMintAddress: string - bonkMintAddress: string - solanaFeePayerWallets: Keypair[] - delegatePrivateKey: Buffer - listensValidSigner: string - solanaSignerPrivateKey: string - identityRelayerPublicKey: string - listensIpHourlyRateLimit: number - listensIpDailyRateLimit: number - listensIpWeeklyRateLimit: number - listensTrackHourlyRateLimit: number - listensTrackDailyRateLimit: number - listensTrackWeeklyRateLimit: number - antiAbuseOracle: string - // The public key for the launchpad config partner (Squads multisig) - launchpadPartnerPublicKey: string - // The private key for a signer of the launchpad config partner (AKA the authority) - // Signs the tx and is used to collect all launches for external pages, e.g. jup launchpad - launchpadPartnerSignerPrivateKey: string - // Secret used to deterministically derive - // - ephemeral launchpad keys (HKDF seed) - // - reward pool authorities - launchpadDeterministicSecret: string -} - -let cachedConfig: Config | null = null - -const readConfig = (): Config => { - if (cachedConfig !== null) return cachedConfig - readDotEnv() - - // validate env - const env = cleanEnv(process.env, { - audius_discprov_env: str({ - default: 'dev' - }), - audius_discprov_url: str({ - default: 'http://audius-discovery-provider-1' - }), - audius_db_url: str({ - default: - 'postgresql+psycopg2://postgres:postgres@db:5432/discovery_provider_1' - }), - audius_redis_url: str({ - default: 'redis://audius-discovery-redis-1:6379/00' - }), - audius_solana_endpoint: str({ - default: 'http://solana-test-validator:8899' - }), - audius_solana_listen_rpc_url: str({ - default: 'http://solana-test-validator:8899' - }), - audius_solana_track_listen_count_address: str({ - default: 'testEjzEibm3nq77VQcqCCmSMx6m3KdJHuepBH1rnue' - }), - audius_solana_waudio_mint: str({ - default: '37RCjhgV1qGV2Q54EHFScdxZ22ydRMdKMtVgod47fDP3' - }), - audius_solana_usdc_mint: str({ - default: '26Q7gP8UfkDzi7GMFEQxTJaNJ8D2ybCUjex58M5MLu8y' - }), - audius_solana_bonk_mint: str({ - default: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263' - }), - audius_solana_user_bank_program_address: str({ - default: 'testHKV1B56fbvop4w6f2cTGEub9dRQ2Euta5VmqdX9' - }), - audius_solana_payment_router_program_address: str({ - default: 'apaySbqV1XAmuiGszeN4NyWrXkkMrnuJVoNhzmS1AMa' - }), - audius_solana_rewards_manager_program_address: str({ - default: 'testLsJKtyABc9UXJF8JWFKf1YH4LmqCWBC42c6akPb' - }), - audius_solana_rewards_manager_account: str({ - default: 'DJPzVothq58SmkpRb1ATn5ddN2Rpv1j2TcGvM3XsHf1c' - }), - audius_solana_fee_payer_wallets: json({ - default: [ - { - privateKey: [ - 170, 161, 84, 122, 118, 210, 128, 213, 96, 185, 143, 218, 54, 254, - 217, 204, 157, 175, 137, 71, 202, 108, 51, 242, 21, 50, 56, 77, 54, - 116, 103, 56, 251, 64, 77, 100, 199, 88, 103, 189, 42, 163, 67, 251, - 101, 204, 7, 59, 70, 109, 113, 50, 209, 154, 55, 164, 227, 108, 203, - 146, 121, 148, 85, 119 - ] - } - ] - }), - solana_relay_server_host: str({ default: '0.0.0.0' }), - solana_relay_server_port: num({ default: 6002 }), - audius_delegate_private_key: str({ default: '' }), - audius_solana_eth_registry_program: str({ - default: 'testBgRfFcage1hN7zmTsktdQCJZkHEhM1eguYPaeKg' - }), - audius_solana_listens_valid_signer: str({ - default: 'yM9adjwKaRbYxQzLPF6zvZMSAfKUNte5xvK4B3iGbkL' - }), - audius_solana_signer_private_key: str({ - default: - 'd242765e718801781440d77572b9dafcdc9baadf0269eff24cf61510ddbf1003' - }), - audius_identity_relayer_public_key: str({ - default: '0xaaaa90Fc2bfa70028D6b444BB9754066d9E2703b' - }), - audius_solana_listens_ip_hourly_rate_limit: num({ default: 120 }), - audius_solana_listens_ip_daily_rate_limit: num({ default: 50000 }), - audius_solana_listens_ip_weekly_rate_limit: num({ default: 50000000 }), - audius_solana_listens_track_hourly_rate_limit: num({ default: 120 }), - audius_solana_listens_track_daily_rate_limit: num({ default: 50000 }), - audius_solana_listens_track_weekly_rate_limit: num({ default: 50000000 }), - audius_anti_abuse_oracle: str({ - default: 'http://audius-anti-abuse-oracle-1:8000' - }), - audius_launchpad_partner_public_key: str({ - default: '' - }), - audius_launchpad_partner_signer_private_key: str({ - default: '' - }), - audius_launchpad_deterministic_secret: str({ - default: '' - }) - }) - const solanaFeePayerWalletsParsed = env.audius_solana_fee_payer_wallets - let solanaFeePayerWallets: Keypair[] = [] - if (Array.isArray(solanaFeePayerWalletsParsed)) { - solanaFeePayerWallets = solanaFeePayerWalletsParsed.map((wallet) => - Keypair.fromSecretKey(Uint8Array.from(wallet.privateKey)) - ) - } - const delegatePrivateKey: Buffer = env.audius_delegate_private_key - ? Buffer.from(env.audius_delegate_private_key, 'hex') - : Buffer.from([]) - logger.level = env.audius_discprov_env !== 'prod' ? 'debug' : 'info' - - cachedConfig = { - environment: env.audius_discprov_env, - endpoint: env.audius_discprov_url, - discoveryDbConnectionString: env.audius_db_url, - redisUrl: env.audius_redis_url, - serverHost: env.solana_relay_server_host, - serverPort: env.solana_relay_server_port, - solanaEndpoints: env.audius_solana_endpoint.split(','), - listenRpcUrl: env.audius_solana_listen_rpc_url, - rewardsManagerProgramId: env.audius_solana_rewards_manager_program_address, - rewardsManagerAccountAddress: env.audius_solana_rewards_manager_account, - claimableTokenProgramId: env.audius_solana_user_bank_program_address, - paymentRouterProgramId: env.audius_solana_payment_router_program_address, - trackListenCountProgramId: env.audius_solana_track_listen_count_address, - usdcMintAddress: env.audius_solana_usdc_mint, - waudioMintAddress: env.audius_solana_waudio_mint, - bonkMintAddress: env.audius_solana_bonk_mint, - solanaFeePayerWallets, - delegatePrivateKey, - listensValidSigner: env.audius_solana_listens_valid_signer, - ethRegistryProgramId: env.audius_solana_eth_registry_program, - solanaSignerPrivateKey: env.audius_solana_signer_private_key, - identityRelayerPublicKey: env.audius_identity_relayer_public_key, - listensIpHourlyRateLimit: env.audius_solana_listens_ip_hourly_rate_limit, - listensIpDailyRateLimit: env.audius_solana_listens_ip_daily_rate_limit, - listensIpWeeklyRateLimit: env.audius_solana_listens_ip_weekly_rate_limit, - listensTrackHourlyRateLimit: - env.audius_solana_listens_track_hourly_rate_limit, - listensTrackDailyRateLimit: - env.audius_solana_listens_track_daily_rate_limit, - listensTrackWeeklyRateLimit: - env.audius_solana_listens_track_weekly_rate_limit, - antiAbuseOracle: env.audius_anti_abuse_oracle, - launchpadPartnerPublicKey: env.audius_launchpad_partner_public_key, - launchpadPartnerSignerPrivateKey: - env.audius_launchpad_partner_signer_private_key, - launchpadDeterministicSecret: env.audius_launchpad_deterministic_secret - } - return readConfig() -} - -export const config = readConfig() diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/db.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/db.ts deleted file mode 100644 index e8cbb291970..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/db.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { initializeDiscoveryDb } from '@pedalboard/basekit' - -import { config } from './config' - -/** - * Single shared Knex connection pool for the solana-relay service. - * - * Previously each route module called initializeDiscoveryDb() independently, - * creating up to 9 separate pools (each with a default max of 10 connections) - * and exhausting the Postgres connection limit under load. - */ -export const db = initializeDiscoveryDb(config.discoveryDbConnectionString) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/errors.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/errors.ts deleted file mode 100644 index 45eb15df4b7..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/errors.ts +++ /dev/null @@ -1,23 +0,0 @@ -export class ResponseError extends Error { - status = 500 -} - -export class InternalServerError extends ResponseError { - name = 'Internal Server Error' - status = 500 -} - -export class BadRequestError extends ResponseError { - name = 'Bad Request' - status = 400 -} - -export class UnauthorizedError extends ResponseError { - name = 'Unauthorized' - status = 401 -} - -export class ForbiddenError extends ResponseError { - name = 'Forbidden' - status = 403 -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/index.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/index.ts deleted file mode 100644 index 960a6f77210..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/index.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { json } from 'body-parser' -import cors from 'cors' -import express from 'express' -import multer from 'multer' - -import { config } from './config' -import { logger } from './logger' -import { errorHandlerMiddleware } from './middleware/errorHandler' -import { - incomingRequestLogger, - outgoingRequestLogger -} from './middleware/logging' -import { - userSignerRecoveryMiddleware, - discoveryNodeSignerRecoveryMiddleware -} from './middleware/signerRecovery' -import { cache } from './routes/cache' -import { feePayer } from './routes/feePayer' -import { health } from './routes/health/health' -import { location } from './routes/instruction/location' -import { claimFees } from './routes/launchpad/claim_fees' -import { claimVestedCoins } from './routes/launchpad/claim_vested_coins' -import { - firstBuyQuote, - getLaunchpadConfigRoute -} from './routes/launchpad/first_buy_quote' -import { confirmLaunchCoin, launchCoin } from './routes/launchpad/launch_coin' -import { listen } from './routes/listen/listen' -import { swapCoin } from './routes/meteora/swap_coin' -import { swapCoinQuote } from './routes/meteora/swap_coin_quote' -import { relay } from './routes/relay/relay' - -process.on('unhandledRejection', (reason, promise) => { - logger.error('Unhandled promise rejection', { promise, reason }) -}) - -const main = async () => { - const { serverHost, serverPort } = config - const app = express() - app.use(json()) - app.use(cors()) - app.use(incomingRequestLogger) - app.get('/solana/health_check', health) - app.post('/solana/tracks/:trackId/listen', listen) - - const upload = multer({ - storage: multer.memoryStorage(), - limits: { fileSize: 15 * 1024 * 1024 } // 15MB limit - }) - // launchpad endpoints don't need user/discovery validation, so register them before middleware - app.post('/solana/launchpad/launch_coin', upload.single('image'), launchCoin) - app.get('/solana/launchpad/claim_fees', claimFees) - app.get('/solana/launchpad/claim_vested_coins', claimVestedCoins) - app.get('/solana/launchpad/first_buy_quote', firstBuyQuote) - app.get('/solana/meteora/swap_coin_quote', swapCoinQuote) - app.get('/solana/meteora/swap_coin', swapCoin) - app.get('/solana/launchpad/config', getLaunchpadConfigRoute) - - // Apply middleware for routes that need user/discovery validation - app.use(userSignerRecoveryMiddleware) - app.use(discoveryNodeSignerRecoveryMiddleware) - app.post('/solana/launchpad/confirm_launch_coin', confirmLaunchCoin) - app.post('/solana/relay', relay) - app.post('/solana/cache', cache) - app.get('/solana/feePayer', feePayer) - app.get('/solana/instruction/location', location) - app.use(outgoingRequestLogger) - app.use(errorHandlerMiddleware) - - const server = app.listen(serverPort, serverHost, () => { - logger.info({ serverHost, serverPort }, 'server initialized') - }) - - // Set server timeout to 3 minutes to accommodate long-running requests (like launch_coin) - server.timeout = 3 * 60 * 1000 -} - -main().catch((e) => logger.error({ error: e }, 'Fatal error in main!')) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/logger.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/logger.ts deleted file mode 100644 index 5cb637106ec..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/logger.ts +++ /dev/null @@ -1,16 +0,0 @@ -import pino, { stdTimeFunctions } from 'pino' - -const formatters = { - level(label: string) { - // Set level to string format - return { level: label.toUpperCase() } - } -} - -// set config for logger here -export const logger = pino({ - name: `solana-relay`, - base: undefined, - timestamp: stdTimeFunctions.isoTime, - formatters -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/assertRateLimiter.test.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/assertRateLimiter.test.ts deleted file mode 100644 index 6c71d2b6e86..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/assertRateLimiter.test.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { beforeEach, describe, expect, it } from 'vitest' - -import { config } from '../config' -import { getRedisConnection } from '../redis' - -import { RateLimiter } from './rateLimiter' - -beforeEach(async () => { - // run with npm run test with audius-compose up - config.redisUrl = 'redis://audius-discovery-provider-redis-1/00' - const redis = await getRedisConnection() - for await (const key of redis.scanIterator()) { - if (key.startsWith('listens-rate-limit')) { - await redis.del(key) - } - } -}) - -describe('Rate Limiter', function () { - describe('Rate Limiter Rate Limits', function () { - it('disallows when one limit is reached', async function () { - const userIP = '1.2.3.4' - - const hourLimitLimiter = new RateLimiter({ - prefix: 'listens-rate-limit-hour', - hourlyLimit: 1, - dailyLimit: 2, - weeklyLimit: 2 - }) - await hourLimitLimiter.checkLimit(userIP) - const checkHour = await hourLimitLimiter.checkLimit(userIP) - expect(checkHour.allowed).toBe(false) - expect(checkHour.hourLimitReached).toBe(true) - expect(checkHour.dayLimitReached).toBe(false) - expect(checkHour.weekLimitReached).toBe(false) - - const dayLimitLimiter = new RateLimiter({ - prefix: 'listens-rate-limit-day', - hourlyLimit: 2, - dailyLimit: 1, - weeklyLimit: 2 - }) - await dayLimitLimiter.checkLimit(userIP) - const checkDay = await dayLimitLimiter.checkLimit(userIP) - expect(checkDay.allowed).toBe(false) - expect(checkDay.hourLimitReached).toBe(false) - expect(checkDay.dayLimitReached).toBe(true) - expect(checkDay.weekLimitReached).toBe(false) - - const weekLimitLimiter = new RateLimiter({ - prefix: 'listens-rate-limit-week', - hourlyLimit: 2, - dailyLimit: 2, - weeklyLimit: 1 - }) - await weekLimitLimiter.checkLimit(userIP) - const checkWeek = await weekLimitLimiter.checkLimit(userIP) - expect(checkWeek.allowed).toBe(false) - expect(checkWeek.hourLimitReached).toBe(false) - expect(checkWeek.dayLimitReached).toBe(false) - expect(checkWeek.weekLimitReached).toBe(true) - - const allowedRateLimiter = new RateLimiter({ - prefix: 'listens-rate-limit-allowed', - hourlyLimit: 2, - dailyLimit: 2, - weeklyLimit: 2 - }) - const checkAllowed = await allowedRateLimiter.checkLimit(userIP) - expect(checkAllowed.allowed).toBe(true) - expect(checkAllowed.hourLimitReached).toBe(false) - expect(checkAllowed.dayLimitReached).toBe(false) - expect(checkAllowed.weekLimitReached).toBe(false) - }) - it('allows one user through while another is blocked', async function () { - const userIP1 = '1.2.3.4' - const userIP2 = '9.8.7.6' - - const hourLimitLimiter = new RateLimiter({ - prefix: 'listens-rate-limit-hour', - hourlyLimit: 3, - dailyLimit: 5, - weeklyLimit: 10 - }) - // reach hourly limit for user 1 - await hourLimitLimiter.checkLimit(userIP1) - await hourLimitLimiter.checkLimit(userIP1) - await hourLimitLimiter.checkLimit(userIP1) - const user1check = await hourLimitLimiter.checkLimit(userIP1) - expect(user1check.allowed).toBe(false) - - await hourLimitLimiter.checkLimit(userIP2) - const user2check = await hourLimitLimiter.checkLimit(userIP2) - expect(user2check.allowed).toBe(true) - }) - }) -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/errorHandler.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/errorHandler.ts deleted file mode 100644 index 9972c4aafff..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/errorHandler.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NextFunction, Request, Response } from 'express' - -import { ResponseError } from '../errors' -import { logger as rootLogger } from '../logger' - -export const errorHandlerMiddleware = ( - error: unknown, - _req: Request, - res: Response, - _next: NextFunction -) => { - const status = error instanceof ResponseError ? error.status : 500 - const meta = error instanceof Error ? { ...error } : {} - if (!res.headersSent) { - res - .status(status) - .set('X-Request-ID', res.locals.requestId) - .set('Access-Control-Expose-Headers', 'X-Request-ID') - .send({ error: (error as any).toString(), ...meta }) - } - // in milliseconds - const responseTime = new Date().getTime() - res.locals.requestStartTime - const statusCode = res.statusCode - const logger = (res.locals.logger ?? rootLogger).child({ - responseTime, - statusCode - }) - logger.error(error, 'request completed') -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/locals.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/locals.ts deleted file mode 100644 index 1b68f1bbdd6..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/locals.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable @typescript-eslint/no-namespace */ -import { Users } from '@pedalboard/storage' -import { Logger } from 'pino' - -declare global { - namespace Express { - interface Locals { - requestId: string - signerUser?: Users - isSignedByDiscovery?: boolean - logger: Logger - requestStartTime: number - [k: string]: never - } - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/logging.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/logging.ts deleted file mode 100644 index 036239c2e7b..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/logging.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { NextFunction, Request, Response } from 'express' -import { v4 as uuidv4 } from 'uuid' - -import { logger } from '../logger' - -export const incomingRequestLogger = ( - request: Request, - response: Response, - next: NextFunction -) => { - const startTime = new Date().getTime() - response.locals.requestStartTime = startTime - const requestId = uuidv4() - const { path, method } = request - response.locals.requestId = requestId - response.locals.logger = logger.child({ - requestId, - path, - method - }) - response.locals.logger.info( - { startTime: new Date(startTime), body: request.body }, - 'incoming request' - ) - next() -} - -export const outgoingLog = (_request: Request, response: Response) => { - // in milliseconds - const requestTime = new Date().getTime() - response.locals.requestStartTime - const statusCode = response.statusCode - response.locals.logger.info({ requestTime, statusCode }, 'request completed') -} - -export const outgoingRequestLogger = ( - request: Request, - response: Response, - next: NextFunction -) => { - outgoingLog(request, response) - next() -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/rateLimiter.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/rateLimiter.ts deleted file mode 100644 index 831e8161bf0..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/rateLimiter.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { getRedisConnection } from '../redis' - -export class RateLimiter { - private hourlyLimit: number - private dailyLimit: number - private weeklyLimit: number - private prefix: string - - constructor(params: { - prefix: string - hourlyLimit: number - dailyLimit: number - weeklyLimit: number - }) { - const { prefix, hourlyLimit, dailyLimit, weeklyLimit } = params - this.prefix = prefix - this.hourlyLimit = hourlyLimit - this.dailyLimit = dailyLimit - this.weeklyLimit = weeklyLimit - } - - private getRedisKey(entityKey: string, period: string): string { - return `${this.prefix}:${entityKey}:${period}` - } - - private async consume( - entityKey: string, - period: string, - limit: number, - expiry: number - ): Promise { - const key = this.getRedisKey(entityKey, period) - const redis = await getRedisConnection() - const currentCount = await redis.incr(key) - if (currentCount === 1) { - await redis.expire(key, expiry) - } - return currentCount > limit - } - - public async checkLimit(entityKey: string): Promise<{ - hourLimitReached: boolean - dayLimitReached: boolean - weekLimitReached: boolean - allowed: boolean - }> { - const promises = [ - this.consume(entityKey, 'hour', this.hourlyLimit, 3600), - this.consume(entityKey, 'day', this.dailyLimit, 86400), - this.consume(entityKey, 'week', this.weeklyLimit, 604800) - ] - - const [hourLimitReached, dayLimitReached, weekLimitReached] = - await Promise.all(promises) - - const allowed = !(hourLimitReached || dayLimitReached || weekLimitReached) - - return { allowed, hourLimitReached, dayLimitReached, weekLimitReached } - } - - // set limits after instantiation, primarily for tests - public setLimits(limits: { - hourlyLimit?: number - dailyLimit?: number - weeklyLimit?: number - }) { - const { hourlyLimit, dailyLimit, weeklyLimit } = limits - - if (hourlyLimit !== undefined) { - this.hourlyLimit = hourlyLimit - } - - if (dailyLimit !== undefined) { - this.dailyLimit = dailyLimit - } - - if (weeklyLimit !== undefined) { - this.weeklyLimit = weeklyLimit - } - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/signerRecovery.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/signerRecovery.ts deleted file mode 100644 index 4a43b4c6d87..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/middleware/signerRecovery.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Table, Users } from '@pedalboard/storage' -import { recoverPersonalSignature } from 'eth-sig-util' -import { NextFunction, Request, Response } from 'express' - -import { db as discoveryDb } from '../db' -import { getCachedDiscoveryNodes } from '../redis' - -export const userSignerRecoveryMiddleware = async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - const data = req.get('Encoded-Data-Message') - const sig = req.get('Encoded-Data-Signature') - - if (!sig || !data) { - return next() - } - const walletAddress = recoverPersonalSignature({ data, sig }) - const user = await discoveryDb(Table.Users) - .where('wallet', '=', walletAddress) - .first() - res.locals.signerUser = user - if (!user) { - res.locals.logger.warn( - { walletAddress }, - 'No user found matching signature' - ) - } - next() - } catch (e) { - next(e) - } -} - -export const discoveryNodeSignerRecoveryMiddleware = async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - const data = JSON.stringify(req.body) - const sig = req.get('Discovery-Signature') - if (!sig) { - res.locals.isSignedByDiscovery = false - return next() - } - const walletAddress = recoverPersonalSignature({ data, sig }) - const discoveryWallets = await getCachedDiscoveryNodes() - const isSignedByDiscovery = discoveryWallets - .map(({ delegateOwnerWallet }) => delegateOwnerWallet.toLowerCase()) - .includes(walletAddress) - res.locals.isSignedByDiscovery = isSignedByDiscovery - if (!isSignedByDiscovery) { - res.locals.logger.warn( - { walletAddress, discoveryWallets }, - 'Bad Discovery Signature' - ) - } - next() - } catch (e) { - next(e) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/redis.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/redis.ts deleted file mode 100644 index a2cb5bb9d4d..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/redis.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { createClient, RedisClientType } from 'redis' - -import { config } from './config' -import { logger } from './logger' - -let redisClient: RedisClientType -let isReady: boolean - -const TWO_DAYS_IN_SECONDS = 60 * 60 * 24 * 2 - -export const getRedisConnection = async () => { - if (!isReady) { - redisClient = createClient({ url: config.redisUrl }) - redisClient.on('ready', () => { - isReady = true - }) - await redisClient.connect() - } - return redisClient -} - -const parseArray = (json: string | null) => { - try { - const parsed = JSON.parse(json ?? '[]') - if (!Array.isArray(parsed)) { - return [] - } - return parsed - } catch { - return [] - } -} - -export const cacheTransaction = async ( - signature: string, - transaction: string -) => { - const redis = await getRedisConnection() - const key = `solana:transaction:${signature}` - await redis.set(key, transaction, { EX: 60 }) -} - -type DiscoveryNode = { - delegateOwnerWallet: string - endpoint: string -} - -export const getCachedDiscoveryNodes = async () => { - const redis = await getRedisConnection() - const key = 'all-discovery-nodes-with-wallets' - const json = await redis.get(key) - return parseArray(json).filter( - (p): p is DiscoveryNode => - 'delegateOwnerWallet' in p && - 'endpoint' in p && - typeof p.delegateOwnerWallet === 'string' && - typeof p.endpoint === 'string' - ) -} - -type ContentNode = { - delegateOwnerWallet: string - endpoint: string -} - -export const getCachedContentNodes = async () => { - const redis = await getRedisConnection() - const key = 'all-content-nodes' - const json = await redis.get(key) - return parseArray(json).filter( - (p): p is ContentNode => - 'delegateOwnerWallet' in p && - 'endpoint' in p && - typeof p.delegateOwnerWallet === 'string' && - typeof p.endpoint === 'string' - ) -} - -const TOKEN_ACCOUNT_CREATION_USER_LIMIT = 2 -const TOKEN_ACCOUNT_CREATION_VERIFIED_USER_LIMIT = 5 -const TOKEN_ACCOUNT_CREATION_SYSTEM_LIMIT = 10 - -export const rateLimitTokenAccountCreation = async ( - wallet: string, - isVerified: boolean, - memo?: string // an optional memo creates a custom rate limit bucket -) => { - const redis = await getRedisConnection() - - const currentDate = new Date().toISOString().split('T')[0] - // Rate limit individual users from doing this too many times - const userKey = `ata-creation-count:user:${wallet}:${currentDate}` - // Rate limit the whole userbase - const key = `ata-creation-count:${memo ?? 'global'}:${currentDate}` - - const limit = isVerified - ? TOKEN_ACCOUNT_CREATION_VERIFIED_USER_LIMIT - : TOKEN_ACCOUNT_CREATION_USER_LIMIT - - const currentUserCount = await redis.get(userKey) - const currentSystemCount = await redis.get(key) - - logger.info( - { - wallet, - isVerified, - currentUserCount: currentUserCount ? parseInt(currentUserCount) : 0, - currentSystemCount: currentSystemCount ? parseInt(currentSystemCount) : 0, - userLimit: limit, - systemLimit: TOKEN_ACCOUNT_CREATION_SYSTEM_LIMIT - }, - 'Token account creation rate limit check' - ) - - const [userCount] = await redis - .multi() - .incr(userKey) - .expire(userKey, TWO_DAYS_IN_SECONDS) - .exec() - if (typeof userCount !== 'number' || userCount > limit) { - logger.error( - { - wallet, - isVerified, - userCount, - limit - }, - 'User exceeded token account creation limit' - ) - throw new Error(`User ${wallet} has created too many token accounts`) - } - - const [systemCount] = await redis - .multi() - .incr(key) - .expire(key, TWO_DAYS_IN_SECONDS) - .exec() - - if ( - typeof systemCount !== 'number' || - systemCount > TOKEN_ACCOUNT_CREATION_SYSTEM_LIMIT - ) { - logger.error( - { - systemCount, - systemLimit: TOKEN_ACCOUNT_CREATION_SYSTEM_LIMIT - }, - 'System exceeded token account creation limit' - ) - throw new Error('System has created too many token accounts') - } - - logger.info( - { - wallet, - isVerified, - newUserCount: userCount, - newSystemCount: systemCount - }, - 'Token account creation rate limit passed' - ) -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/cache.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/cache.ts deleted file mode 100644 index c99e127e357..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/cache.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { TransactionResponse } from '@solana/web3.js' -import { NextFunction, Request, Response } from 'express' - -import { BadRequestError, UnauthorizedError } from '../errors' -import { cacheTransaction } from '../redis' - -type RequestBody = { - transaction: string -} - -export const cache = async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - if (!res.locals.isSignedByDiscovery) { - throw new UnauthorizedError() - } - const { transaction } = req.body - if (!transaction) { - throw new BadRequestError() - } - const transactionResponse = JSON.parse(transaction) as { - result: TransactionResponse - } - const signature = transactionResponse.result.transaction.signatures[0] - res.locals.logger.info({ signature }, 'Caching transaction...') - await cacheTransaction(signature, transaction) - res.status(200).send({ signature }) - next() - } catch (e) { - next(e) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/feePayer.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/feePayer.ts deleted file mode 100644 index 75519cf05d9..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/feePayer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { NextFunction, Request, Response } from 'express' - -import { config } from '../config' -import { InternalServerError } from '../errors' - -export const feePayer = async ( - _req: Request, - res: Response, - next: NextFunction -) => { - try { - if ( - !config.solanaFeePayerWallets || - config.solanaFeePayerWallets.length === 0 - ) { - throw new InternalServerError('Relayer fee payer not configured.') - } - const index = Math.floor( - Math.random() * config.solanaFeePayerWallets.length - ) - const feePayer = config.solanaFeePayerWallets[index].publicKey.toBase58() - res.status(200).send({ - feePayer - }) - next() - } catch (e) { - next(e) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/health/health.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/health/health.ts deleted file mode 100644 index 608a1c1f87d..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/health/health.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NextFunction, Request, Response } from 'express' - -export const health = async ( - _req: Request, - res: Response, - next: NextFunction -) => { - res.status(200).json({ - isHealthy: true - }) - next() -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/instruction/location.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/instruction/location.ts deleted file mode 100644 index 3875057b333..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/instruction/location.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { PublicKey, TransactionInstruction } from '@solana/web3.js' -import { NextFunction, Request, Response } from 'express' - -import { getRequestIpData } from '../../utils/ipData' - -const MEMO_V2_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr' -const GEO_MEMO_STRING = 'geo' - -/** - * Returns a memo instruction containing geo location data. - */ -export const location = async ( - req: Request< - unknown, - unknown, - unknown, - { - signer?: string - } - >, - res: Response, - next: NextFunction -) => { - try { - const signer = req.query.signer - const location = await getRequestIpData(res.locals.logger, req) - const instruction = new TransactionInstruction({ - keys: signer - ? [ - { - pubkey: new PublicKey(signer), - isSigner: true, - isWritable: true - } - ] - : [], - data: Buffer.from( - `${GEO_MEMO_STRING}:${JSON.stringify(location)}`, - 'utf-8' - ), - programId: new PublicKey(MEMO_V2_PROGRAM_ID) - }) - res.status(200).send({ instruction }) - next() - } catch (e) { - next(e) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/claim_fees.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/claim_fees.ts deleted file mode 100644 index 1128e2fb619..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/claim_fees.ts +++ /dev/null @@ -1,238 +0,0 @@ -import { CpAmm, getUnClaimReward } from '@meteora-ag/cp-amm-sdk' -import { DynamicBondingCurveClient } from '@meteora-ag/dynamic-bonding-curve-sdk' -import { - TOKEN_PROGRAM_ID, - createTransferInstruction, - getAssociatedTokenAddressSync -} from '@solana/spl-token' -import { Connection, PublicKey } from '@solana/web3.js' -import { Request, Response } from 'express' - -import { db } from '../../db' -import { logger } from '../../logger' -import { getConnection } from '../../utils/connections' - -import { AUDIO_MINT } from './constants' - -interface ClaimFeesRequestBody { - tokenMint: string - ownerWalletAddress: string - receiverWalletAddress?: string -} - -const getDBCPoolTxs = async ( - connection: Connection, - poolAddress: string, - ownerWalletAddress: string, - receiverWalletAddress: string, - ownerWalletAudioATA: PublicKey -) => { - const dbcClient = new DynamicBondingCurveClient(connection, 'confirmed') - - const poolState = await dbcClient.state.getPool(new PublicKey(poolAddress)) - if (!poolState) { - return - } - - const ownerWallet = new PublicKey(ownerWalletAddress) - const receiverWallet = new PublicKey(receiverWalletAddress) - const maxQuoteAmount = poolState.creatorQuoteFee - - const claimFeesTx = await dbcClient.creator.claimCreatorTradingFee({ - pool: new PublicKey(poolAddress), - payer: ownerWallet, - creator: ownerWallet, - maxBaseAmount: poolState.creatorBaseFee, // Match max amount to the claimable amount (effectively no limit) - maxQuoteAmount, // Match max amount to the claimable amount (effectively no limit) - receiver: ownerWallet - }) - - const sendFromOwnerWallet = createTransferInstruction( - ownerWalletAudioATA, - receiverWallet, - ownerWallet, - BigInt(maxQuoteAmount.toString()) - ) - claimFeesTx.instructions.push(sendFromOwnerWallet) - - claimFeesTx.recentBlockhash = ( - await connection.getLatestBlockhash() - ).blockhash - claimFeesTx.feePayer = ownerWallet - - return claimFeesTx.serialize({ requireAllSignatures: false }) -} - -const getDammV2PoolTxs = async ( - connection: Connection, - poolAddress: string, - ownerWallet: PublicKey, - receiverWallet: PublicKey, - ownerWalletAudioATA: PublicKey -) => { - const cpAmm = new CpAmm(connection) - - const poolState = await cpAmm.fetchPoolState(new PublicKey(poolAddress)) - if (!poolState) { - return [] - } - - // Get all positions for this pool owned by the creator - const ownerPositions = await cpAmm.getUserPositionByPool( - new PublicKey(poolAddress), - ownerWallet - ) - - if (ownerPositions.length === 0) { - return [] - } - - const claimFeeTxs = [] - - // Iterate through all positions owned by the creator - again this is very very likely to only be one, but technically could be multiple - for (const positionInfo of ownerPositions) { - const positionAddress = positionInfo.position - const positionNftAccount = positionInfo.positionNftAccount - - const claimFeeTx = await cpAmm.claimPositionFee2({ - owner: ownerWallet, - pool: new PublicKey(poolAddress), - position: positionAddress, - // Due to ATA issues we have to send the fees to the owner wallet then redirect them to the receiver wallet afterwards - receiver: ownerWallet, - positionNftAccount, - tokenAVault: poolState.tokenAVault, - tokenBVault: poolState.tokenBVault, - tokenAMint: poolState.tokenAMint, - tokenBMint: poolState.tokenBMint, - // Both AUDIO and Artist coins are tokens (not SOL) - so we know both use token program id - tokenAProgram: TOKEN_PROGRAM_ID, - tokenBProgram: TOKEN_PROGRAM_ID - }) - - // Set blockhash and fee payer - claimFeeTx.recentBlockhash = ( - await connection.getLatestBlockhash() - ).blockhash - claimFeeTx.feePayer = ownerWallet - const claimableAmount = getUnClaimReward( - poolState, - positionInfo.positionState - ) - const claimableAmountBigInt = BigInt(claimableAmount.feeTokenB.toString()) - const sendFromOwnerWallet = createTransferInstruction( - ownerWalletAudioATA, - receiverWallet, - ownerWallet, - claimableAmountBigInt - ) - claimFeeTx.instructions.push(sendFromOwnerWallet) - - claimFeeTxs.push(claimFeeTx.serialize({ requireAllSignatures: false })) - } - return claimFeeTxs -} - -export const claimFees = async ( - req: Request, - res: Response -) => { - try { - const { tokenMint, ownerWalletAddress, receiverWalletAddress } = req.query - - // Validate required parameters - if (!tokenMint || !ownerWalletAddress || !receiverWalletAddress) { - throw new Error( - 'Invalid request parameters. tokenMint, ownerWalletAddress, and receiverWalletAddress are required.' - ) - } - - const [pools]: Array<{ - dbc_pool: string | null - damm_v2_pool: string | null - }> = await db('artist_coins') - .where('mint', tokenMint) - .leftJoin( - 'sol_meteora_dbc_pools', - 'artist_coins.mint', - 'sol_meteora_dbc_pools.base_mint' - ) - .leftJoin( - 'sol_meteora_damm_v2_pools', - 'artist_coins.damm_v2_pool', - 'sol_meteora_damm_v2_pools.account' - ) - .select( - 'sol_meteora_dbc_pools.account as dbc_pool', - 'sol_meteora_damm_v2_pools.account as damm_v2_pool' - ) - .limit(1) - - const connection = getConnection() - - const ownerWallet = new PublicKey(ownerWalletAddress as string) - const receiverWallet = receiverWalletAddress - ? new PublicKey(receiverWalletAddress as string) - : ownerWallet - - const ownerWalletAudioATA = getAssociatedTokenAddressSync( - new PublicKey(AUDIO_MINT), - ownerWallet, - false - ) - - const claimFeeTxs = [] - - // Attempt to get DBC claim fee transactions - // A user can only have one claim fee transaction from the DBC but could also have fee TXs from the DAMM V2 - if (pools.dbc_pool !== null) { - logger.debug('Attempting to get DBC claim fee transaction...') - try { - const dbcClaimFeeTx = await getDBCPoolTxs( - connection, - pools.dbc_pool, - ownerWalletAddress as string, - receiverWalletAddress as string, - ownerWalletAudioATA - ) - if (dbcClaimFeeTx) { - claimFeeTxs.push(dbcClaimFeeTx) - } - } catch (e) { - logger.error('error in claim_fees - DBC') - logger.error(e) - } - } - - // Attempt to get DAMM V2 claim fee transactions - // A user can technically have multiple claim fee transactions from the DAMM V2 (but this is unlikely for our users) - if (pools.damm_v2_pool !== null) { - logger.debug('Attempting to get DAMM V2 claim fee transactions...') - try { - const dammV2ClaimFeeTxs = await getDammV2PoolTxs( - connection, - tokenMint as string, - ownerWallet, - receiverWallet, - ownerWalletAudioATA - ) - claimFeeTxs.push(...dammV2ClaimFeeTxs) - } catch (e) { - logger.error('error in claim_fees - DAMM V2') - logger.error(e) - } - } - - return res.status(200).send({ - claimFeeTxs - }) - } catch (e) { - logger.error(e) - logger.error( - 'Error in claim_fees - unable to create claim fee transactions' - ) - res.status(500).send({ - error: e instanceof Error ? e.message : 'Unknown error' - }) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/claim_vested_coins.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/claim_vested_coins.ts deleted file mode 100644 index 619ccf42b80..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/claim_vested_coins.ts +++ /dev/null @@ -1,400 +0,0 @@ -import { - createTransferCheckedInstruction, - getAssociatedTokenAddressSync -} from '@solana/spl-token' -import { PublicKey } from '@solana/web3.js' -import BN from 'bn.js' -import { Request, Response } from 'express' - -import { LockClient } from '@meteora-ag/met-lock-sdk' -import { db } from '../../db' -import { logger } from '../../logger' -import { getConnection } from '../../utils/connections' - -interface ClaimVestedCoinsRequestBody { - tokenMint: string - ownerWalletAddress: string - receiverWalletAddress?: string - rewardsPoolPercentage?: number -} - -interface EscrowState { - vestingStartTime: BN - cliffTime: BN - frequency: BN - amountPerPeriod: BN - numberOfPeriod: BN - cliffUnlockAmount: BN - totalClaimedAmount: BN - recipient: PublicKey -} - -/** - * Helper function to calculate available amount to claim from vesting escrow - */ -function calculateAvailableAmount( - escrowState: EscrowState, - currentTime: number -): BN { - const cliffTime = escrowState.cliffTime.toNumber() - const vestingStartTime = escrowState.vestingStartTime.toNumber() - const frequency = escrowState.frequency.toNumber() - const amountPerPeriod = escrowState.amountPerPeriod - const numberOfPeriods = escrowState.numberOfPeriod.toNumber() - const cliffUnlockAmount = escrowState.cliffUnlockAmount - const totalClaimedAmount = escrowState.totalClaimedAmount - - let availableAmount = new BN(0) - - // Check if cliff period has passed - if (currentTime >= cliffTime) { - availableAmount = availableAmount.add(cliffUnlockAmount) - - // Calculate periods completed since vesting start - const timeSinceVestingStart = currentTime - vestingStartTime - if (timeSinceVestingStart > 0 && frequency > 0) { - const periodsCompleted = Math.floor(timeSinceVestingStart / frequency) - const validPeriodsCompleted = Math.min(periodsCompleted, numberOfPeriods) - - const periodicAmount = amountPerPeriod.mul(new BN(validPeriodsCompleted)) - availableAmount = availableAmount.add(periodicAmount) - } - } - - // Subtract already claimed amount - availableAmount = availableAmount.sub(totalClaimedAmount) - - // Ensure we don't return negative amounts - return availableAmount.lt(new BN(0)) ? new BN(0) : availableAmount -} - -/** - * Helper function to calculate next unlock time - */ -function calculateNextUnlockTime( - escrowState: EscrowState, - currentTime: number -): number { - const cliffTime = escrowState.cliffTime.toNumber() - const vestingStartTime = escrowState.vestingStartTime.toNumber() - const frequency = escrowState.frequency.toNumber() - const numberOfPeriods = escrowState.numberOfPeriod.toNumber() - - // If still in cliff period, return cliff time - if (currentTime < cliffTime) { - return cliffTime - } - - // Calculate next period unlock time - const timeSinceVestingStart = currentTime - vestingStartTime - if (timeSinceVestingStart >= 0 && frequency > 0) { - const periodsCompleted = Math.floor(timeSinceVestingStart / frequency) - - if (periodsCompleted < numberOfPeriods) { - return vestingStartTime + (periodsCompleted + 1) * frequency - } - } - - // All periods completed - return 0 -} - -/** - * Claims vested/unlocked artist coins from the vesting schedule. - * After an artist coin graduates, the artist's reserved coins unlock daily over a 5-year period. - * - * This endpoint uses the Meteora Lock SDK to claim vested tokens from the escrow account. - */ -export const claimVestedCoins = async ( - req: Request, - res: Response -) => { - try { - const { - tokenMint, - ownerWalletAddress, - receiverWalletAddress, - rewardsPoolPercentage - } = req.query - - // Validate required parameters - if (!tokenMint || !ownerWalletAddress || !receiverWalletAddress) { - throw new Error( - 'Invalid request parameters. tokenMint, ownerWalletAddress, and receiverWalletAddress are required.' - ) - } - - // Validate rewardsPoolPercentage - const rewardsPoolPct = rewardsPoolPercentage - ? parseInt(rewardsPoolPercentage as string, 10) - : 0 - if (isNaN(rewardsPoolPct) || rewardsPoolPct < 0 || rewardsPoolPct > 100) { - throw new Error( - 'Invalid rewardsPoolPercentage. Must be a number between 0 and 100.' - ) - } - - const ownerWallet = new PublicKey(ownerWalletAddress) - const receiverWallet = new PublicKey(receiverWalletAddress) - const mintPublicKey = new PublicKey(tokenMint) - const connection = getConnection() - - logger.info({ - message: 'Claim vested coins request', - tokenMint, - ownerWalletAddress: ownerWallet.toBase58(), - receiverWalletAddress: receiverWallet.toBase58(), - rewardsPoolPercentage - }) - - // Get all vesting information from database - const vestingResult = await db.raw<{ - rows: Array<{ - escrow_account: string - recipient: string - vesting_start_time: string - cliff_time: string - frequency: string - cliff_unlock_amount: string - amount_per_period: string - number_of_period: string - total_claimed_amount: string - }> - }>( - ` - SELECT - account as escrow_account, - recipient, - vesting_start_time, - cliff_time, - frequency, - cliff_unlock_amount, - amount_per_period, - number_of_period, - total_claimed_amount - FROM sol_locker_vesting_escrows - WHERE token_mint = ? AND recipient = ? - `, - [mintPublicKey.toBase58(), ownerWallet.toBase58()] - ) - - if (!vestingResult.rows || vestingResult.rows.length === 0) { - throw new Error( - `No vesting escrow found for mint: ${mintPublicKey.toBase58()}` - ) - } - - const vestingData = vestingResult.rows[0] - - logger.info({ - message: 'Found vesting data from database', - escrowAccount: vestingData.escrow_account, - recipient: vestingData.recipient - }) - - const escrow = new PublicKey(vestingData.escrow_account) - const escrowRecipient = new PublicKey(vestingData.recipient) - - // Check if escrow account exists - const escrowAccount = await connection.getAccountInfo(escrow) - if (!escrowAccount) { - throw new Error('Escrow account does not exist') - } - - // Create escrow state object from database data - const escrowState: EscrowState = { - vestingStartTime: new BN(vestingData.vesting_start_time), - cliffTime: new BN(vestingData.cliff_time), - frequency: new BN(vestingData.frequency), - amountPerPeriod: new BN(vestingData.amount_per_period), - numberOfPeriod: new BN(vestingData.number_of_period), - cliffUnlockAmount: new BN(vestingData.cliff_unlock_amount), - totalClaimedAmount: new BN(vestingData.total_claimed_amount), - recipient: escrowRecipient - } - - // Calculate total amount and available amount - const totalAmount = escrowState.cliffUnlockAmount.add( - escrowState.amountPerPeriod.mul(escrowState.numberOfPeriod) - ) - const currentTime = Math.floor(Date.now() / 1000) - const availableAmount = calculateAvailableAmount(escrowState, currentTime) - - logger.info({ - message: 'Vesting calculation', - totalAmount: totalAmount.toString(), - claimedAmount: escrowState.totalClaimedAmount.toString(), - availableAmount: availableAmount.toString(), - currentTime - }) - - if (availableAmount.eq(new BN(0))) { - const nextUnlockTime = calculateNextUnlockTime(escrowState, currentTime) - const hoursUntilNextUnlock = - nextUnlockTime > currentTime ? (nextUnlockTime - currentTime) / 3600 : 0 - - return res.status(200).send({ - claimVestedCoinsTxs: [], - availableAmount: '0', - totalAmount: totalAmount.toString(), - claimedAmount: escrowState.totalClaimedAmount.toString(), - nextUnlockTime, - hoursUntilNextUnlock: hoursUntilNextUnlock.toFixed(2), - message: - hoursUntilNextUnlock > 0 - ? `No tokens are currently available to claim. Next unlock in ${hoursUntilNextUnlock.toFixed(2)} hours.` - : 'All vesting periods completed. All tokens should be available.' - }) - } - - // Create the claim transaction using Meteora Lock SDK claimV2 - // NOTE: recipient must be a signer, so we claim to ownerWallet (root wallet) - // Then immediately transfer to the user bank in the same transaction - const lockClient = new LockClient(connection, 'confirmed') - const claimTx = await lockClient.claimV2({ - escrow: escrow, - recipient: ownerWallet, - maxAmount: availableAmount, - payer: ownerWallet - }) - - // Calculate split amounts based on rewards pool percentage - const userAmount = availableAmount - .mul(new BN(100 - rewardsPoolPct)) - .div(new BN(100)) - const rewardsPoolAmount = availableAmount - .mul(new BN(rewardsPoolPct)) - .div(new BN(100)) - - logger.info({ - message: 'Rewards pool allocation', - totalAvailable: availableAmount.toString(), - userAmount: userAmount.toString(), - rewardsPoolAmount: rewardsPoolAmount.toString(), - rewardsPoolPercentage: rewardsPoolPct - }) - - // Add transfer instruction from owner wallet (external wallet) to user bank - const ownerTokenAccount = getAssociatedTokenAddressSync( - mintPublicKey, - ownerWallet, - false - ) - - // Transfer user portion to user bank - if (userAmount.gt(new BN(0))) { - const userTransferInstruction = createTransferCheckedInstruction( - ownerTokenAccount, // source - mintPublicKey, // mint - receiverWallet, // destination (user bank) - ownerWallet, // owner of source account - BigInt(userAmount.toString()), // amount as BigInt to handle large values - 9 // decimals for artist coins (matches SPL token standard) - ) - claimTx.add(userTransferInstruction) - } - - let rewardsPoolAddress: PublicKey | null = null - // Transfer rewards pool portion to rewards pool token account if provided - if (rewardsPoolAmount.gt(new BN(0))) { - const rewardsPoolAuthorityResult = await db.raw<{ - rows: Array<{ authority: string }> - }>( - ` - SELECT authority - FROM artist_coins ac - JOIN sol_reward_manager_inits r ON r.mint = ac.mint - WHERE ac.mint = ? - `, - [mintPublicKey.toBase58()] - ) - - if ( - !rewardsPoolAuthorityResult.rows || - rewardsPoolAuthorityResult.rows.length === 0 - ) { - throw new Error( - `Could not find rewards pool address for mint: ${mintPublicKey.toBase58()}` - ) - } - - const rewardsPoolAuthority = new PublicKey( - rewardsPoolAuthorityResult.rows[0].authority - ) - - rewardsPoolAddress = getAssociatedTokenAddressSync( - mintPublicKey, - rewardsPoolAuthority, - true - ) - // Check if rewards pool ATA exists - it should already exist - const rewardsPoolAccountInfo = - await connection.getAccountInfo(rewardsPoolAddress) - if (!rewardsPoolAccountInfo) { - throw new Error( - `Rewards pool token account does not exist: ${rewardsPoolAddress.toBase58()}` - ) - } - - const rewardsPoolTransferInstruction = createTransferCheckedInstruction( - ownerTokenAccount, // source - mintPublicKey, // mint - rewardsPoolAddress, // destination (rewards pool) - ownerWallet, // owner of source account - BigInt(rewardsPoolAmount.toString()), // amount as BigInt to handle large values - 9 // decimals for artist coins (matches SPL token standard) - ) - claimTx.add(rewardsPoolTransferInstruction) - } - - logger.info({ - message: 'Added transfer instructions', - userTransferAmount: userAmount.toString(), - rewardsPoolTransferAmount: rewardsPoolAmount.toString(), - rewardsPoolAddress: rewardsPoolAddress ?? 'not provided', - from: ownerTokenAccount.toBase58(), - to: receiverWallet.toBase58() - }) - - // Set transaction properties - claimTx.feePayer = ownerWallet - const { blockhash } = await connection.getLatestBlockhash() - claimTx.recentBlockhash = blockhash - - // Serialize the transaction without signatures - const serializedTx = claimTx.serialize({ - requireAllSignatures: false, - verifySignatures: false - }) - - logger.info({ - message: 'Claim transaction created', - availableAmount: availableAmount.toString(), - remainingLocked: totalAmount - .sub(escrowState.totalClaimedAmount) - .sub(availableAmount) - .toString() - }) - - return res.status(200).send({ - claimVestedCoinsTxs: [serializedTx], - availableAmount: availableAmount.toString(), - totalAmount: totalAmount.toString(), - claimedAmount: escrowState.totalClaimedAmount.toString(), - remainingLocked: totalAmount - .sub(escrowState.totalClaimedAmount) - .sub(availableAmount) - .toString(), - userClaimedAmount: userAmount.toString(), - rewardsPoolClaimedAmount: rewardsPoolAmount.toString() - }) - } catch (e) { - logger.error(e) - logger.error( - 'Error in claim_vested_coins - unable to create claim vested coins transactions' - ) - res.status(500).send({ - error: e instanceof Error ? e.message : 'Unknown error' - }) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/constants.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/constants.ts deleted file mode 100644 index 1d7881038da..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const AUDIO_MINT = '9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM' -export const USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' - -// This pool is a random one created during the launchpad QA process. -export const QUOTE_POOL_MINT_ADDRESS = - 'HJrYJnr4P9cR7NuN8pA48VKrbgDxQjvaPms1HLSHNxB2' diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/curve.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/curve.ts deleted file mode 100644 index 3591d46e5b1..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/curve.ts +++ /dev/null @@ -1,324 +0,0 @@ -import { - BaseFeeMode, - CollectFeeMode, - MigrationOption, - MigrationFeeOption, - TokenType, - CreateConfigParam, - ActivationType -} from '@meteora-ag/dynamic-bonding-curve-sdk' -import { Keypair, PublicKey } from '@solana/web3.js' -import BN from 'bn.js' - -import { AUDIO_MINT } from './constants' - -/** - * Makes a production curve for dbc deployment - * @param params Object containing: - * - payer: the keypair of the payer - * - configKey: the keypair for the config - * - partner: the public key of the partner - * - rewardPool: the public key of the reward pool - * @returns the curve design - */ -export const makeCurve = ({ - payer, - configKey, - partner, - rewardPoolAuthority -}: { - payer: Keypair - configKey: Keypair - partner: PublicKey - rewardPoolAuthority: PublicKey -}): CreateConfigParam => ({ - payer: payer.publicKey, - config: configKey.publicKey, - feeClaimer: partner, - leftoverReceiver: rewardPoolAuthority, - quoteMint: new PublicKey(AUDIO_MINT), - - // Fees - poolFees: { - baseFee: { - cliffFeeNumerator: new BN(10000000), - baseFeeMode: BaseFeeMode.FeeSchedulerLinear, - firstFactor: 0, - secondFactor: new BN(0), - thirdFactor: new BN(0) - }, - dynamicFee: null - }, - activationType: ActivationType.Slot, - collectFeeMode: CollectFeeMode.QuoteToken, - - // Graduation - migrationOption: MigrationOption.MET_DAMM_V2, - migrationQuoteThreshold: new BN('20000000000000'), - migrationFeeOption: MigrationFeeOption.FixedBps100, - // Migrated pool fee is unused because fee option is set above - migratedPoolFee: { - collectFeeMode: CollectFeeMode.QuoteToken, - dynamicFee: 0, - poolFeeBps: 0 - }, - migrationFee: { - feePercentage: 0, - creatorFeePercentage: 0 - }, - - // Token params - tokenType: TokenType.SPL, - tokenDecimal: 9, - - // LP design - partnerLpPercentage: 0, - creatorLpPercentage: 0, - partnerLockedLpPercentage: 50, - creatorLockedLpPercentage: 50, - creatorTradingFeePercentage: 50, - - // Curve design - // Calculation worksheet: https://colab.research.google.com/drive/1qs2ZdFnfEDj_-wHDmVkZAqut3NCttedn?usp=sharing - tokenSupply: { - preMigrationTokenSupply: new BN('1000000000000000000'), - postMigrationTokenSupply: new BN('1000000000000000000') - }, - sqrtStartPrice: new BN('58333726687135160'), - curve: [ - { - sqrtPrice: new BN('72917158358918944'), - liquidity: new BN('571036328486548000491779697672192') - }, - { - sqrtPrice: new BN('85035288539934656'), - liquidity: new BN('1043411423496793959704665127911424') - }, - { - sqrtPrice: new BN('95629956661080960'), - liquidity: new BN('1731136466787152700430895110160384') - }, - { - sqrtPrice: new BN('105162621329683952'), - liquidity: new BN('2784492297095045174195387963015168') - }, - { - sqrtPrice: new BN('113900242488156176'), - liquidity: new BN('4394180611359080849872699321745408') - }, - { - sqrtPrice: new BN('122013743294725040'), - liquidity: new BN('6840220463844928439430180142841856') - }, - { - sqrtPrice: new BN('129620375970452032'), - liquidity: new BN('10535563568731494085785207602937856') - }, - { - sqrtPrice: new BN('136804715491285680'), - liquidity: new BN('16087957909358401101673153467252736') - }, - { - sqrtPrice: new BN('143630144797608192'), - liquidity: new BN('24389233889323285551109107630473216') - }, - { - sqrtPrice: new BN('150145618679041632'), - liquidity: new BN('36744235180916757004478934784409600') - }, - { - sqrtPrice: new BN('156389881777698304'), - liquidity: new BN('55056701589192949206360425964240896') - }, - { - sqrtPrice: new BN('162394222299848896'), - liquidity: new BN('82096750510666790667034061338312704') - }, - { - sqrtPrice: new BN('168184338599951136'), - liquidity: new BN('121885042984825962137694385387601920') - }, - { - sqrtPrice: new BN('173781644785153568'), - liquidity: new BN('180243519129436619742864140044075008') - }, - { - sqrtPrice: new BN('179204208595009184'), - liquidity: new BN('265583529998958846013226879713017856') - }, - { - sqrtPrice: new BN('184467440737095520'), - liquidity: new BN('390031788038084761836886320138420224') - } - ], - // unused - padding: [], - - // Immutable token - tokenUpdateAuthority: 1, - - // Vesting design - lockedVesting: { - amountPerPeriod: new BN(500_000_000).mul(new BN(1e9)).div(new BN(5 * 365)), - cliffDurationFromMigrationTime: new BN(0), - frequency: new BN(24 * 60 * 60), // one day in seconds - numberOfPeriod: new BN(5 * 365), // daily - cliffUnlockAmount: new BN(0) - } -}) - -/** - * Makes a test curve for dbc deployment - * Same as production but with a 1000x reduction in mkt caps - * @param params Object containing: - * - payer: the keypair of the payer - * - configKey: the keypair for the config - * - partner: the public key of the partner - * - rewardPool: the public key of the reward pool - * @returns the curve design - */ -export const makeTestCurve = ({ - payer, - configKey, - partner, - rewardPoolAuthority -}: { - payer: Keypair - configKey: Keypair - partner: PublicKey - rewardPoolAuthority: PublicKey -}): CreateConfigParam => ({ - payer: payer.publicKey, - config: configKey.publicKey, - feeClaimer: partner, - leftoverReceiver: rewardPoolAuthority, - quoteMint: new PublicKey(AUDIO_MINT), - - // Fees - poolFees: { - baseFee: { - cliffFeeNumerator: new BN(10000000), - baseFeeMode: BaseFeeMode.FeeSchedulerLinear, - firstFactor: 0, - secondFactor: new BN(0), - thirdFactor: new BN(0) - }, - dynamicFee: null - }, - activationType: ActivationType.Slot, - collectFeeMode: CollectFeeMode.QuoteToken, - - // Graduation - migrationOption: MigrationOption.MET_DAMM_V2, - migrationQuoteThreshold: new BN('20000000000'), - migrationFeeOption: MigrationFeeOption.FixedBps100, - // Migrated pool fee is unused because fee option is set above - migratedPoolFee: { - collectFeeMode: CollectFeeMode.QuoteToken, - dynamicFee: 0, - poolFeeBps: 0 - }, - migrationFee: { - feePercentage: 0, - creatorFeePercentage: 0 - }, - - // Token params - tokenType: TokenType.SPL, - tokenDecimal: 9, - - // LP design - partnerLpPercentage: 0, - creatorLpPercentage: 0, - partnerLockedLpPercentage: 50, - creatorLockedLpPercentage: 50, - creatorTradingFeePercentage: 50, - - // Curve design - // Calculation worksheet: https://colab.research.google.com/drive/1hZy7CEekEF3LGi81IWHm_1DL9Pjd6t6U - tokenSupply: { - preMigrationTokenSupply: new BN('1000000000000000000'), - postMigrationTokenSupply: new BN('1000000000000000000') - }, - sqrtStartPrice: new BN('1844674407370955'), - curve: [ - { - sqrtPrice: new BN('2305843009213694'), - liquidity: new BN('18057754247175821789672614395904') - }, - { - sqrtPrice: new BN('2689051932758076'), - liquidity: new BN('32995566348883979631837730308096') - }, - { - sqrtPrice: new BN('3024084755922066'), - liquidity: new BN('54743341756238286998848562790400') - }, - { - sqrtPrice: new BN('3325534081156063'), - liquidity: new BN('88053377860145886259638941253632') - }, - { - sqrtPrice: new BN('3601841923080576'), - liquidity: new BN('138956191820458452184900508319744') - }, - { - sqrtPrice: new BN('3858413346544284'), - liquidity: new BN('216306763634433951331984852647936') - }, - { - sqrtPrice: new BN('4098956192339867'), - liquidity: new BN('333163773106834296934962227576832') - }, - { - sqrtPrice: new BN('4326144956037837'), - liquidity: new BN('508745898944932287641762693906432') - }, - { - sqrtPrice: new BN('4541983982202259'), - liquidity: new BN('771255294768285248729673728262144') - }, - { - sqrtPrice: new BN('4748021357208935'), - liquidity: new BN('1161954740525860247592932825104384') - }, - { - sqrtPrice: new BN('4945482294219893'), - liquidity: new BN('1741045774780616625654638131019776') - }, - { - sqrtPrice: new BN('5135356213192297'), - liquidity: new BN('2596127201122984475636553916350464') - }, - { - sqrtPrice: new BN('5318455767448199'), - liquidity: new BN('3854343485395775796004041718235136') - }, - { - sqrtPrice: new BN('5495458130514078'), - liquidity: new BN('5699800539331489934698720343883776') - }, - { - sqrtPrice: new BN('5666934654481518'), - liquidity: new BN('8398488638243657085360912050683904') - }, - { - sqrtPrice: new BN('5833372668713516'), - liquidity: new BN('12333888100683631206160631641145344') - } - ], - // unused - padding: [], - - // Immutable token - tokenUpdateAuthority: 1, - - // Vesting design - lockedVesting: { - amountPerPeriod: new BN(500_000_000).mul(new BN(1e9)).div(new BN(5 * 365)), - cliffDurationFromMigrationTime: new BN(0), - frequency: new BN(24 * 60 * 60), // one day in seconds - numberOfPeriod: new BN(5 * 365), // daily - cliffUnlockAmount: new BN(0) - } -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/derive_eth_address_for_mint.test.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/derive_eth_address_for_mint.test.ts deleted file mode 100644 index 032feeb257a..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/derive_eth_address_for_mint.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { PublicKey } from '@solana/web3.js' -import { describe, it, expect } from 'vitest' -import * as Accounts from 'web3-eth-accounts' -import { toChecksumAddress } from 'web3-utils' - -import { AUDIO_MINT } from './constants' -import { deriveEthAddressForMint } from './derive_eth_address_for_mint' - -describe('deriveEthAddressForMint', () => { - const DOMAIN = Buffer.from('audius/reward/claimauthority/v1') - const OTHER_DOMAIN = Buffer.from('audius/reward/claimauthority/v2') - - const goodSecret = '0x' + '11'.repeat(32) - const mintA = new PublicKey(AUDIO_MINT) - const mintB = PublicKey.unique() - - it('throws when secret is not 32-byte hex', () => { - expect(() => deriveEthAddressForMint(DOMAIN, '0x1234', mintA)).toThrow( - /32-byte hex/i - ) - expect(() => deriveEthAddressForMint(DOMAIN, 'not-hex', mintA)).toThrow( - /32-byte hex/i - ) - expect(() => - deriveEthAddressForMint(DOMAIN, '11'.repeat(32), mintA) - ).not.toThrow() - }) - - it('is deterministic for same domain + secret + mint', () => { - const r1 = deriveEthAddressForMint(DOMAIN, goodSecret, mintA) - const r2 = deriveEthAddressForMint(DOMAIN, goodSecret, mintA) - expect(r1.address).toBe(r2.address) - expect(r1.privateKey).toBe(r2.privateKey) - }) - - it('produces different results for different mints', () => { - const a = deriveEthAddressForMint(DOMAIN, goodSecret, mintA) - const b = deriveEthAddressForMint(DOMAIN, goodSecret, mintB) - expect(a.address).not.toBe(b.address) - expect(a.privateKey).not.toBe(b.privateKey) - }) - - it('produces different results for different domains', () => { - const r1 = deriveEthAddressForMint(DOMAIN, goodSecret, mintA) - const r2 = deriveEthAddressForMint(OTHER_DOMAIN, goodSecret, mintA) - expect(r1.address).not.toBe(r2.address) - expect(r1.privateKey).not.toBe(r2.privateKey) - }) - - it('returns an EIP-55 checksummed address', () => { - const { address } = deriveEthAddressForMint(DOMAIN, goodSecret, mintA) - expect(address.startsWith('0x')).toBe(true) - expect(address.length).toBe(42) - const checksummed = toChecksumAddress(address.toLowerCase()) - expect(address).toBe(checksummed) - }) - - it('returns a 32-byte private key hex string with 0x prefix', () => { - const { privateKey } = deriveEthAddressForMint(DOMAIN, goodSecret, mintA) - expect(privateKey.startsWith('0x')).toBe(true) - expect(privateKey.length).toBe(66) - expect(/^[0-9a-fA-F]+$/.test(privateKey.slice(2))).toBe(true) - }) - - it('privateKey regenerates the exact same address via web3-eth-accounts', () => { - const { address, privateKey } = deriveEthAddressForMint( - DOMAIN, - goodSecret, - mintA - ) - const addrFromPriv = Accounts.privateKeyToAccount(privateKey).address - expect(addrFromPriv).toBe(address) - }) -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/derive_eth_address_for_mint.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/derive_eth_address_for_mint.ts deleted file mode 100644 index 793e02d7d00..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/derive_eth_address_for_mint.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { PublicKey } from '@solana/web3.js' -import keccak256 from 'keccak256' -import * as secp256k1 from 'secp256k1' -import { toChecksumAddress } from 'web3-utils' - -/** - * Derive a stable secp256k1 private key from (secret, mint) - * and return both the ETH address (EIP-55) and private key (hex). - * Uses keccak256(DOMAIN || secret || mint || ctr) and retries - * with a tiny counter until valid. - */ -export const deriveEthAddressForMint = ( - domain: Buffer, - secretHex: string, - mint: PublicKey -): { address: string; privateKey: string } => { - const h = secretHex.startsWith('0x') ? secretHex.slice(2) : secretHex - if (h.length !== 64) throw new Error('secret must be 32-byte hex') - const secret = Buffer.from(h, 'hex') - - const mintBytes = Buffer.from(mint.toBytes()) - for (let ctr = 0; ctr < 16; ctr++) { - const data = Buffer.concat([domain, secret, mintBytes, Buffer.from([ctr])]) - const priv = Buffer.from(keccak256(data)) - if (!secp256k1.privateKeyVerify(priv)) continue - - // uncompressed public key (65 bytes, 0x04 + X(32) + Y(32)) - const pub = Buffer.from(secp256k1.publicKeyCreate(priv, false)) - const hash = keccak256(pub.slice(1)) // drop 0x04 - const addrLowerHex = '0x' + hash.slice(-20).toString('hex') - const address = toChecksumAddress(addrLowerHex) // EIP-55 - const privateKey = '0x' + priv.toString('hex') - return { address, privateKey } - } - throw new Error('Could not derive a valid secp256k1 key') -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/first_buy_quote.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/first_buy_quote.ts deleted file mode 100644 index 16b0e47cc56..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/first_buy_quote.ts +++ /dev/null @@ -1,323 +0,0 @@ -import { FirstBuyQuoteResponse } from '@audius/sdk' -import { - createJupiterApiClient, - QuoteResponse, - SwapApi as JupiterApi -} from '@jup-ag/api' -import { - DynamicBondingCurveClient, - getBaseTokenForSwap, - PoolConfig, - SwapMode, - VirtualPool -} from '@meteora-ag/dynamic-bonding-curve-sdk' -import { Keypair } from '@solana/web3.js' -import BN from 'bn.js' -import { Request, Response } from 'express' - -import { config } from '../../config' -import { logger } from '../../logger' -import { getConnection } from '../../utils/connections' - -import { AUDIO_MINT, USDC_MINT } from './constants' -import { makeCurve, makeTestCurve } from './curve' - -/** - * Gets a Jupiter swap quote to determine the USDC value of the given AUDIO amount - */ -const getAudioToUSDCQuote = async ( - jupiterApi: JupiterApi, - audioAmount: string -): Promise => { - return await jupiterApi.quoteGet({ - inputMint: AUDIO_MINT, - outputMint: USDC_MINT, - amount: new BN(audioAmount).toNumber(), - swapMode: 'ExactIn', - onlyDirectRoutes: false, - dynamicSlippage: true - }) -} - -/** - * Gets a quote for a buy off the bonding curve using the given pool config - */ -const getBondingCurveQuote = async ({ - dbcClient, - audioAmount, - tokenAmount, - virtualPoolState, - poolConfigState -}: { - dbcClient: DynamicBondingCurveClient - audioAmount?: BN - tokenAmount?: BN - virtualPoolState: VirtualPool - poolConfigState: PoolConfig -}) => { - if (audioAmount) { - const quote = await dbcClient.pool.swapQuote({ - virtualPool: virtualPoolState, - config: poolConfigState, - swapBaseForQuote: false, - amountIn: audioAmount, - hasReferral: false, - currentPoint: new BN(0) - }) - return quote.outputAmount.toString() - } else if (tokenAmount) { - // Swap quote 2 has additional params that allows us to specify ExactOut for the swap - const quote = await dbcClient.pool.swapQuote2({ - virtualPool: virtualPoolState, - config: poolConfigState, - swapBaseForQuote: false, - swapMode: SwapMode.ExactOut, - amountOut: tokenAmount, - hasReferral: false, - currentPoint: new BN(0) - }) - - return quote.maximumAmountIn?.toString() - } else { - throw new Error('audioAmount or tokenAmount is required') - } -} - -/** - * Gets a quote starting from exact AUDIO input amount - */ -const getQuoteFromAudioInput = async ( - jupiterApi: JupiterApi, - dbcClient: DynamicBondingCurveClient, - audioAmount: string, - virtualPoolState: VirtualPool, - poolConfigState: PoolConfig -) => { - // Get AUDIO to USDC quote - const audioToUsdcQuote = await getAudioToUSDCQuote(jupiterApi, audioAmount) - - // Use the AUDIO amount from the jupiter quote to get a quote for tokens out of the bonding curve - const audioToTokensQuote = await getBondingCurveQuote({ - dbcClient, - audioAmount: new BN(audioAmount), - virtualPoolState, - poolConfigState - }) - return { - usdcValue: audioToUsdcQuote.outAmount, - audioInputAmount: audioAmount, - tokenOutputAmount: audioToTokensQuote - } -} - -/** - * Gets a quote starting from exact token output amount - */ -const getQuoteFromTokenOutput = async ( - jupiterApi: JupiterApi, - dbcClient: DynamicBondingCurveClient, - tokenAmount: string, - virtualPoolState: VirtualPool, - poolConfigState: PoolConfig -) => { - // Get AUDIO to TOKEN quote - const audioAmount = await getBondingCurveQuote({ - dbcClient, - tokenAmount: new BN(tokenAmount), - virtualPoolState, - poolConfigState - }) - - const usdcValue = await getAudioToUSDCQuote(jupiterApi, audioAmount!) - - return { - usdcValue: usdcValue.outAmount, - audioInputAmount: audioAmount, - tokenOutputAmount: tokenAmount - } -} - -// Endpoint logic -export const firstBuyQuote = async ( - req: Request, - res: Response -): Promise => { - try { - const { audioInputAmount, tokenOutputAmount } = req.query - - if (!audioInputAmount && !tokenOutputAmount) { - res.status(400).json({ - error: 'audioInputAmount or tokenOutputAmount is required' - }) - return - } - - if (audioInputAmount && typeof audioInputAmount !== 'string') { - res.status(400).json({ - error: - 'audioInputAmount is required and must be a string representing the amount in 8 digit waudio decimals' - }) - return - } - - if (tokenOutputAmount && typeof tokenOutputAmount !== 'string') { - res.status(400).json({ - error: - 'tokenOutputAmount is required and must be a string representing the amount in standard 9 decimal format' - }) - return - } - - // Solana connections - const connection = getConnection() - const dbcClient = new DynamicBondingCurveClient(connection, 'confirmed') - const jupiterApi = createJupiterApiClient() - const { - virtualPoolState, - poolConfigState, - maxAudioInputAmount, - maxTokenOutputAmount - } = await getLaunchpadConfig() - - // Handle AUDIO -> token quote - if (audioInputAmount && audioInputAmount) { - const audioInputOrMax = new BN(audioInputAmount).gt( - new BN(maxAudioInputAmount) - ) - ? maxAudioInputAmount - : audioInputAmount - const quoteFromAudioData = await getQuoteFromAudioInput( - jupiterApi, - dbcClient, - audioInputOrMax, - virtualPoolState, - poolConfigState - ) - res.status(200).send({ - ...quoteFromAudioData, - maxAudioInputAmount, - maxTokenOutputAmount - } as FirstBuyQuoteResponse) - } - - // Handle token -> AUDIO quote - if (tokenOutputAmount && tokenOutputAmount) { - const quoteFromTokenData = await getQuoteFromTokenOutput( - jupiterApi, - dbcClient, - tokenOutputAmount, - virtualPoolState, - poolConfigState - ) - res.status(200).send({ - ...quoteFromTokenData, - maxAudioInputAmount, - maxTokenOutputAmount - } as FirstBuyQuoteResponse) - } - } catch (error) { - logger.error(error) - res.status(500).json({ - error: 'Failed to get first buy quote', - details: error instanceof Error ? error.message : 'Unknown error' - }) - } -} - -const getLaunchpadConfig = async (): Promise<{ - virtualPoolState: VirtualPool - poolConfigState: PoolConfig - maxAudioInputAmount: string - maxTokenOutputAmount: string - sqrtStartPrice: BN -}> => { - // Build a mock config and virtual pool entirely from our local curve design - const dummy = Keypair.generate() - const curve = - config.environment === 'prod' - ? makeCurve({ - payer: dummy, - configKey: dummy, - partner: dummy.publicKey, - rewardPoolAuthority: dummy.publicKey - }) - : makeTestCurve({ - payer: dummy, - configKey: dummy, - partner: dummy.publicKey, - rewardPoolAuthority: dummy.publicKey - }) - - const migrationSqrtPrice = curve.curve[curve.curve.length - 1].sqrtPrice - const swapBaseAmount = getBaseTokenForSwap( - curve.sqrtStartPrice, - migrationSqrtPrice, - curve.curve - ) - const poolConfigState = { - quoteMint: curve.quoteMint, - tokenDecimal: curve.tokenDecimal, - sqrtStartPrice: curve.sqrtStartPrice, - migrationQuoteThreshold: curve.migrationQuoteThreshold, - collectFeeMode: curve.collectFeeMode, - activationType: curve.activationType, - tokenType: curve.tokenType, - poolFees: { - ...curve.poolFees, - dynamicFee: curve.poolFees.dynamicFee ?? { initialized: false } - }, - migrationOption: curve.migrationOption, - migrationFeeOption: curve.migrationFeeOption, - migratedPoolFee: curve.migratedPoolFee, - migrationFee: curve.migrationFee, - partnerLpPercentage: curve.partnerLpPercentage, - creatorLpPercentage: curve.creatorLpPercentage, - partnerLockedLpPercentage: curve.partnerLockedLpPercentage, - creatorLockedLpPercentage: curve.creatorLockedLpPercentage, - creatorTradingFeePercentage: curve.creatorTradingFeePercentage, - curve: curve.curve, - lockedVesting: curve.lockedVesting, - padding: curve.padding, - swapBaseAmount, - migrationSqrtPrice - // TODO: type this better but for now this is enough to get the math correct - } as unknown as PoolConfig - - const virtualPoolState = { - sqrtPrice: curve.sqrtStartPrice, - quoteReserve: new BN(0), - baseReserve: new BN(0), - volatilityTracker: { volatilityAccumulator: new BN(0) }, - activationPoint: new BN(0) - } as VirtualPool - - const maxAudioInputAmount = poolConfigState.migrationQuoteThreshold - .muln(100) - .divn(99) - .toString() - const maxTokenOutputAmount = poolConfigState.swapBaseAmount.toString() - return { - virtualPoolState, - poolConfigState, - maxAudioInputAmount, - maxTokenOutputAmount, - sqrtStartPrice: poolConfigState.sqrtStartPrice - } -} - -export const getLaunchpadConfigRoute = async ( - _: Request, - res: Response -): Promise => { - try { - const { maxAudioInputAmount, maxTokenOutputAmount } = - await getLaunchpadConfig() - - res.status(200).send({ - maxAudioInputAmount, - maxTokenOutputAmount - }) - } catch (e) { - res.status(500).send() - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/getKeypair.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/getKeypair.ts deleted file mode 100644 index 197e6aebb38..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/getKeypair.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { SolKeypairs } from '@pedalboard/storage' -import { Keypair } from '@solana/web3.js' -import { Logger } from 'pino' - -import { db } from '../../db' - -export const getKeypair = async (logger: Logger): Promise => { - const [deleted] = await db('sol_keypairs') - .whereIn('public_key', function () { - this.select('public_key').from('sol_keypairs').limit(1) - }) - .delete() - .returning(['private_key']) - if (!deleted) { - logger.warn('No keypair found, generating random one instead') - return Keypair.generate() - } - - return Keypair.fromSecretKey(Uint8Array.from(deleted.private_key)) -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/launch_coin.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/launch_coin.ts deleted file mode 100644 index 8834f2903c1..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/launch_coin.ts +++ /dev/null @@ -1,539 +0,0 @@ -import { createHash } from 'crypto' - -import { RewardManagerProgram } from '@audius/spl' -import { - createGenericFile, - signerIdentity, - createSignerFromKeypair, - sol, - subtractAmounts, - isLessThanAmount -} from '@metaplex-foundation/umi' -import { createUmi } from '@metaplex-foundation/umi-bundle-defaults' -import { - irysUploader, - isIrysUploader -} from '@metaplex-foundation/umi-uploader-irys' -import { - deriveDbcPoolAddress, - DynamicBondingCurveClient -} from '@meteora-ag/dynamic-bonding-curve-sdk' -import { - Keypair, - PublicKey, - TransactionInstruction, - TransactionMessage, - VersionedTransaction -} from '@solana/web3.js' -import BN from 'bn.js' -import bs58 from 'bs58' -import { Request, Response } from 'express' -import sharp from 'sharp' - -import { config } from '../../config' -import { logger } from '../../logger' -import { getConnection, connections } from '../../utils/connections' -import { sendTransactionWithRetries } from '../../utils/transaction' -import { associateExternalWallet } from '../relay/associateExternalWallet' - -import { AUDIO_MINT } from './constants' -import { makeCurve, makeTestCurve } from './curve' -import { getKeypair } from './getKeypair' -import { createRewardPool } from './reward_pool' - -interface LaunchCoinRequestBody { - name: string - symbol: string - walletPublicKey: string - description: string - initialBuyAmountAudio?: string // NOTE: should be in big number format (no decimals) -} - -const AUDIUS_COIN_URL = (ticker: string) => `https://audius.co/coins/${ticker}` - -const MIN_IRYS_BALANCE = sol(0.1) // Min balance to keep in Irys per fee payer -const FUND_TO_IRYS_BALANCE = sol(0.15) // Amount to fund Irys balance to - -type FeePayerUmi = { - umi: ReturnType -} - -const feePayerUmis: FeePayerUmi[] = config.solanaFeePayerWallets.map( - (feePayer, i) => { - const endpoint = connections[i % connections.length].rpcEndpoint - const umi = createUmi(endpoint).use(irysUploader()) - const umiKeypair = umi.eddsa.createKeypairFromSecretKey(feePayer.secretKey) - const signer = createSignerFromKeypair(umi, umiKeypair) - umi.use(signerIdentity(signer)) - return { umi } - } -) - -const topUpIrysBalances = async () => { - await Promise.all( - feePayerUmis.map(async ({ umi }, idx) => { - try { - const uploader = umi.uploader - if (!isIrysUploader(uploader)) return - const balance = await uploader.getBalance() - if (isLessThanAmount(balance, MIN_IRYS_BALANCE)) { - logger.info({ - message: 'Irys balance is less than target balance', - balance, - targetBalance: FUND_TO_IRYS_BALANCE - }) - const required = subtractAmounts(FUND_TO_IRYS_BALANCE, balance) - logger.info({ - message: 'Required Irys balance', - required - }) - if (required.basisPoints > BigInt(0)) { - await uploader.fund(required, true) - logger.info({ - message: 'Topped up Irys balance', - feePayerIndex: idx - }) - } - } - } catch (e) { - logger.warn({ message: 'Failed to top up Irys balance', idx, e }) - } - }) - ) -} -topUpIrysBalances() -setInterval(topUpIrysBalances, 5 * 60 * 1000) - -/** - * Launches a new coin on the launchpad with bonding curve. - * The coin is created with a new mint and a new config. - * Process: - * 1. Creates metadata for the new coin - * 2. Create a config for the new coin - * 3. Return transactions to sign and send from the client - * 4. Spawning a process to create a reward pool for the new coin in the background - * @param req Request object containing the coin details - * @param res Response object containing the coin details - * @returns Response object containing two transactions - * - Pool creation transaction - * - First buy transaction - */ -export const launchCoin = async ( - req: Request & { - file?: Express.Multer.File - }, - res: Response -) => { - try { - const { solanaFeePayerWallets } = config - - const { - name, - symbol, - description, - walletPublicKey: walletPublicKeyStr, - initialBuyAmountAudio - } = req.body - - // file is the image attached via multer middleware (sent from client as a multipart/form-data request) - const file = req.file - if (!file) { - throw new Error('Image file is required.') - } - - if (!name || !symbol || !file || !description) { - throw new Error( - 'Invalid metadata arguments. Name, symbol, image, and description are all required.' - ) - } - - if (!walletPublicKeyStr) { - throw new Error( - 'Invalid wallet public key. Wallet public key is required.' - ) - } - - if ( - initialBuyAmountAudio !== undefined && - !new BN(initialBuyAmountAudio).gt(new BN(0)) - ) { - throw new Error( - `Invalid initialBuyAmountAudio. Initial buy amount must be a number > 0. Received: ${initialBuyAmountAudio}` - ) - } - - const connection = getConnection() - const dbcClient = new DynamicBondingCurveClient(connection, 'confirmed') - - // Account / Keypair Setup - // ------------------------------------------------------------ - // The wallet public key is the creator of the coin - const walletPublicKey = new PublicKey(walletPublicKeyStr) - - // The launchpad partner (or fee claiming) for the coin - const launchpadPartnerPublicKey = new PublicKey( - config.launchpadPartnerPublicKey - ) - - // Pick a random fee payer to pay for Tx's - // It also "owns" our new coin metadata and pay for the TX - const index = Math.floor(Math.random() * solanaFeePayerWallets.length) - - // The new mint keypair for the coin - const mintKeypair = await getKeypair(logger) - - // The audius authority is used to create the dbc config - const audiusAuthorityKeypair = Keypair.fromSecretKey( - bs58.decode(config.launchpadPartnerSignerPrivateKey) - ) - - // Deterministic token account for reward pool custody (pubkey used in config) - const rewardManagerState = deriveKeypair( - 'reward-manager', - mintKeypair.publicKey - ) - logger.info({ - message: 'Derived reward pool token account', - mint: mintKeypair.publicKey.toBase58(), - rewardManagerState: rewardManagerState.publicKey.toBase58() - }) - - // Transaction Execution - // ------------------------------------------------------------ - - // 1. Create Coin Metadata - logger.info({ - message: 'Creating coin metadata', - name, - symbol - }) - const umi = feePayerUmis[index].umi - - // Resize incoming image to 1000x1000 and convert to png for consistency - const img = sharp(file.buffer) - const { width, height } = await img.metadata() - const resizedBuffer = - width && height && (width > 1000 || height > 1000) - ? await img.resize(1000, 1000, { fit: 'inside' }).png().toBuffer() - : await img.png().toBuffer() - - const umiImageFile = createGenericFile(resizedBuffer, '', { - tags: [{ name: 'Content-Type', value: 'image/png' }] - }) - const imageUris = await umi.uploader.upload([umiImageFile]) - const imageUri = imageUris[0] - const metadata = { - name, - symbol, - description, - image: imageUri, - external_url: AUDIUS_COIN_URL(symbol), - attributes: [], - isMutable: false - } - const metadataUri = await umi.uploader.uploadJson(metadata) - logger.info({ - message: 'Coin metadata creator', - name, - symbol, - metadataUri - }) - - // 2. Create a config for the new coin - const configKeypair = Keypair.generate() - logger.info({ - message: 'Creating config for new coin', - name, - symbol, - configKeypair: configKeypair.publicKey.toBase58() - }) - const rewardPoolTokenAuthority = RewardManagerProgram.deriveAuthority({ - programId: new PublicKey(config.rewardsManagerProgramId), - rewardManagerState: rewardManagerState.publicKey - }) - const createConfigTx = await dbcClient.partner.createConfig( - config.environment === 'prod' - ? makeCurve({ - payer: audiusAuthorityKeypair, - configKey: configKeypair, - partner: launchpadPartnerPublicKey, - rewardPoolAuthority: rewardPoolTokenAuthority - }) - : makeTestCurve({ - payer: audiusAuthorityKeypair, - configKey: configKeypair, - partner: launchpadPartnerPublicKey, - rewardPoolAuthority: rewardPoolTokenAuthority - }) - ) - const createConfigRecentBlockhash = await connection.getLatestBlockhash() - const createConfigMessage = new TransactionMessage({ - recentBlockhash: createConfigRecentBlockhash.blockhash, - instructions: [...createConfigTx.instructions], - payerKey: audiusAuthorityKeypair.publicKey - }) - const createConfigTransaction = new VersionedTransaction( - createConfigMessage.compileToV0Message() - ) - createConfigTransaction.sign([ - configKeypair, // the keypair the config is deployed to - audiusAuthorityKeypair // the audius authority - ]) - const createConfigSignature = await sendTransactionWithRetries({ - transaction: createConfigTransaction, - commitment: 'confirmed', - confirmationStrategy: { - ...createConfigRecentBlockhash, - signature: bs58.encode(createConfigTransaction.signatures[0]) - }, - logger - }) - await connection.confirmTransaction({ - signature: createConfigSignature, - blockhash: createConfigRecentBlockhash.blockhash, - lastValidBlockHeight: createConfigRecentBlockhash.lastValidBlockHeight - }) - logger.info({ - message: 'Created config', - name, - symbol, - signature: createConfigSignature - }) - - // 3. Create pool and first buy - logger.info({ - message: 'Preparing create pool and swap buy transactions', - name, - symbol - }) - const { createPoolTx, swapBuyTx } = - await dbcClient.pool.createPoolWithFirstBuy({ - createPoolParam: { - config: configKeypair.publicKey, - name, - symbol, - uri: metadataUri, - poolCreator: walletPublicKey, - baseMint: mintKeypair.publicKey, - payer: walletPublicKey - }, - firstBuyParam: initialBuyAmountAudio - ? { - buyer: walletPublicKey, - receiver: walletPublicKey, - buyAmount: new BN(initialBuyAmountAudio), // Needs to already be formatted with correct decimals - minimumAmountOut: new BN(0), // No slippage protection for initial buy - referralTokenAccount: null // No referral for creator's initial buy - } - : undefined - }) - - /* - * Prepare the transactions to be signed by the client - * We partially sign so that the user can sign with their wallet and send the transactions - */ - // Add a no-op memo instruction to get the audius authority to sign - createPoolTx.add( - new TransactionInstruction({ - programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'), - keys: [ - { - pubkey: audiusAuthorityKeypair.publicKey, - isSigner: true, - isWritable: false - } - ], - data: Buffer.alloc(0) - }) - ) - createPoolTx.feePayer = walletPublicKey - createPoolTx.recentBlockhash = ( - await connection.getLatestBlockhash() - ).blockhash - createPoolTx.partialSign(mintKeypair, audiusAuthorityKeypair) - if (swapBuyTx) { - swapBuyTx.recentBlockhash = ( - await connection.getLatestBlockhash() - ).blockhash - swapBuyTx.feePayer = walletPublicKey - } - - res.status(200).send({ - mintPublicKey: mintKeypair.publicKey.toBase58(), - configPublicKey: configKeypair.publicKey.toBase58(), - imageUri, - createPoolTx: Buffer.from( - createPoolTx.serialize({ requireAllSignatures: false }) - ).toString('base64'), - firstBuyTx: swapBuyTx - ? Buffer.from( - swapBuyTx.serialize({ requireAllSignatures: false }) - ).toString('base64') - : undefined, - metadataUri - }) - } catch (e) { - logger.error('Error creating coin for launchpad') - logger.error(e) - res.status(500).send() - } -} - -// Deterministically derive a Keypair from the launchpad deterministic secret, label, and mint -const deriveKeypair = (label: string, mint: PublicKey): Keypair => { - const seedMaterial = Buffer.concat([ - Buffer.from(config.launchpadDeterministicSecret, 'utf8'), - Buffer.from('audius-launchpad', 'utf8'), - Buffer.from(label, 'utf8'), - mint.toBuffer() - ]) - const seed = createHash('sha256').update(seedMaterial).digest() - return Keypair.fromSeed(seed) -} - -interface ConfirmLaunchCoinRequestBody { - mintPublicKey: string - configPublicKey: string - createPoolTx: string // base64 VersionedTransaction, fully signed - firstBuyTx?: string // base64 VersionedTransaction, fully signed -} - -export const confirmLaunchCoin = async ( - req: Request, - res: Response -) => { - try { - const { mintPublicKey, configPublicKey, createPoolTx, firstBuyTx } = - req.body - if (!mintPublicKey || !configPublicKey || !createPoolTx) { - return res.status(400).send({ - error: 'mintPublicKey, configPublicKey, and createPoolTx are required' - }) - } - - const connection = getConnection() - - // Deserialize transactions - const createPoolTransaction = VersionedTransaction.deserialize( - Buffer.from(createPoolTx, 'base64') - ) - const swapTransaction = firstBuyTx - ? VersionedTransaction.deserialize(Buffer.from(firstBuyTx, 'base64')) - : null - - // 1. Send create pool transaction and wait for confirmation - const createSig = bs58.encode(createPoolTransaction.signatures[0]) - await sendTransactionWithRetries({ - transaction: createPoolTransaction, - commitment: 'confirmed', - sendOptions: { - skipPreflight: true - }, - confirmationStrategy: { - ...(await connection.getLatestBlockhash()), - signature: createSig - }, - logger - }) - - // 2. After confirmation, create reward pool using deterministic keys - const mint = new PublicKey(mintPublicKey) - - const manager = deriveKeypair('manager', mint) - const rewardManager = deriveKeypair('reward-manager', mint) - - logger.info({ - message: 'Derived reward pool accounts', - mint: mint.toBase58(), - manager: manager.publicKey.toBase58(), - rewardManager: rewardManager.publicKey.toBase58() - }) - - // Pick a random fee payer - const { solanaFeePayerWallets } = config - const index = Math.floor(Math.random() * solanaFeePayerWallets.length) - const feePayer = solanaFeePayerWallets[index] - const tokenAccount = Keypair.generate() - - const rewardPoolInstructions = await createRewardPool({ - connection, - feePayer, - manager, - rewardManager, - tokenAccount, - mint - }) - const rewardPoolRecentBlockhash = await connection.getLatestBlockhash() - const rewardPoolMessage = new TransactionMessage({ - recentBlockhash: rewardPoolRecentBlockhash.blockhash, - instructions: rewardPoolInstructions, - payerKey: feePayer.publicKey - }) - const rewardPoolTransaction = new VersionedTransaction( - rewardPoolMessage.compileToV0Message() - ) - rewardPoolTransaction.sign([feePayer, manager, rewardManager, tokenAccount]) - const base64tx = Buffer.from(rewardPoolTransaction.serialize()).toString( - 'base64' - ) - logger.info({ - message: 'Reward pool transaction', - base64tx - }) - const rewardSig = bs58.encode(rewardPoolTransaction.signatures[0]) - await sendTransactionWithRetries({ - transaction: rewardPoolTransaction, - commitment: 'confirmed', - sendOptions: { - skipPreflight: true - }, - confirmationStrategy: { - ...rewardPoolRecentBlockhash, - signature: rewardSig - }, - logger - }) - - // 3. Send the user's first buy transaction if provided - let swapSig: string | undefined - if (swapTransaction) { - swapSig = bs58.encode(swapTransaction.signatures[0]) - await sendTransactionWithRetries({ - transaction: swapTransaction, - commitment: 'confirmed', - sendOptions: { - skipPreflight: true - }, - confirmationStrategy: { - ...(await connection.getLatestBlockhash()), - signature: swapSig - }, - logger - }) - } - - if (res.locals.signerUser?.user_id) { - logger.info('Associating external wallet...') - await associateExternalWallet( - createPoolTransaction, - res.locals.signerUser?.user_id - ) - } - - const dbcPool = deriveDbcPoolAddress( - new PublicKey(AUDIO_MINT), - new PublicKey(mintPublicKey), - new PublicKey(configPublicKey) - ) - return res.status(200).send({ - dbcPool, - createSignature: createSig, - rewardPoolSignature: rewardSig, - firstBuySignature: swapSig - }) - } catch (e) { - logger.error('Error confirming launch coin') - logger.error(e) - res.status(500).send() - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/reward_pool.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/reward_pool.ts deleted file mode 100644 index 55bb457bee0..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/launchpad/reward_pool.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { RewardManagerProgram } from '@audius/spl' -import { TOKEN_PROGRAM_ID } from '@solana/spl-token' -import { - Connection, - Keypair, - PublicKey, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js' - -import { config } from '../../config' - -import { deriveEthAddressForMint } from './derive_eth_address_for_mint' - -const DOMAIN = Buffer.from('claimAuthority') - -const REWARD_MANAGER_SIZE = 66 // 1 (version) + 32 (token_account) + 32 (manager) + 1 (min_votes) -const TOKEN_ACCOUNT_SIZE = 165 - -const STAGE_SENDERS = [ - { - senderEthAddress: '0x140eD283b33be2145ed7d9d15f1fE7bF1E0B2Ac3', - operatorEthAddress: '0x140eD283b33be2145ed7d9d15f1fE7bF1E0B2Ac3' - }, - { - senderEthAddress: '0x4c88d2c0f4c4586b41621aD6e98882ae904B98f6', - operatorEthAddress: '0x4c88d2c0f4c4586b41621aD6e98882ae904B98f6' - }, - { - senderEthAddress: '0x6b52969934076318863243fb92E9C4b3A08267b5', - operatorEthAddress: '0x6b52969934076318863243fb92E9C4b3A08267b5' - } -] - -const PROD_SENDERS = [ - // creatornode.audius.co - { - senderEthAddress: '0xc8d0C29B6d540295e8fc8ac72456F2f4D41088c8', - operatorEthAddress: '0xe5b256d302ea2f4e04B8F3bfD8695aDe147aB68d' - }, - // audius-cn1.tikilabs.com - { - senderEthAddress: '0x159200F84c2cF000b3A014cD4D8244500CCc36ca', - operatorEthAddress: '0xe4882D9A38A2A1fc652996719AF0fb15CB968d0a' - }, - // dn2.monophonic.digital - { - senderEthAddress: '0x422541273087beC833c57D3c15B9e17F919bFB1F', - operatorEthAddress: '0x6470Daf3bd32f5014512bCdF0D02232f5640a5BD' - } -] - -/** - * Creates a reward pool and registers senders (including a deterministic - * fourth "claimauthority" sender derived from (HD_ROOT, mint)). - * - * A reward pool deployment has: - * - rewardManager account: to track state of reward instance - * - manager account: to manage the initial senders - * - authority account: the PDA that owns the token accounts where funds are stored - * - token account: (unused), we store on the ATA of the authority instead - */ -export const createRewardPool = async ({ - connection, - feePayer, - manager, - tokenAccount, - rewardManager, - mint -}: { - connection: Connection - feePayer: Keypair - manager: Keypair - tokenAccount: Keypair - rewardManager: Keypair - mint: PublicKey -}) => { - const instructions: TransactionInstruction[] = [] - - // 1. Create reward manager account (to track state) - instructions.push( - SystemProgram.createAccount({ - fromPubkey: feePayer.publicKey, - newAccountPubkey: rewardManager.publicKey, - lamports: - await connection.getMinimumBalanceForRentExemption(REWARD_MANAGER_SIZE), - space: REWARD_MANAGER_SIZE, - programId: new PublicKey(config.rewardsManagerProgramId) - }) - ) - - // 2. Create token account (note: initialize via your program or add SPL init) - // This is not the ATA for the authority and therefore is not used as the leftover receiver. - instructions.push( - SystemProgram.createAccount({ - fromPubkey: feePayer.publicKey, - newAccountPubkey: tokenAccount.publicKey, - lamports: - await connection.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE), - space: TOKEN_ACCOUNT_SIZE, - programId: TOKEN_PROGRAM_ID - }) - ) - - // 3. Initialize reward manager - instructions.push( - RewardManagerProgram.createInitInstruction({ - rewardManagerState: rewardManager.publicKey, - tokenAccount: tokenAccount.publicKey, - mint, - manager: manager.publicKey, - minVotes: 3, - rewardManagerProgramId: new PublicKey(config.rewardsManagerProgramId) - }) - ) - - const authority = RewardManagerProgram.deriveAuthority({ - programId: new PublicKey(config.rewardsManagerProgramId), - rewardManagerState: rewardManager.publicKey - }) - - // 4. Add senders (all static senders + deterministic claim authority) - const baseSenders = - config.environment === 'prod' ? PROD_SENDERS : STAGE_SENDERS - - const { address: claimAuthorityEthAddress } = deriveEthAddressForMint( - DOMAIN, - config.launchpadDeterministicSecret, - mint - ) - const senders = [ - ...baseSenders, - { - senderEthAddress: claimAuthorityEthAddress, - // Use a static address for the claim authority so multiple claim authorities can't be used - // to override other senders. - operatorEthAddress: '0x0000000000000000000000000000000000000000' - } - ] - - for (const sender of senders) { - const derivedSender = RewardManagerProgram.deriveSender({ - ethAddress: sender.senderEthAddress, - programId: new PublicKey(config.rewardsManagerProgramId), - authority - }) - instructions.push( - RewardManagerProgram.createSenderInstruction({ - senderEthAddress: sender.senderEthAddress, - operatorEthAddress: sender.operatorEthAddress, - rewardManagerState: rewardManager.publicKey, - manager: manager.publicKey, - authority, - payer: feePayer.publicKey, - sender: derivedSender, - rewardManagerProgramId: new PublicKey(config.rewardsManagerProgramId) - }) - ) - } - - // 5. Resign manager - instructions.push( - RewardManagerProgram.createChangeManagerAccountInstruction({ - rewardManagerState: rewardManager.publicKey, - currentManager: manager.publicKey, - newManager: PublicKey.default, - rewardManagerProgramId: new PublicKey(config.rewardsManagerProgramId) - }) - ) - - return instructions -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/assertListenRateLimiter.test.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/assertListenRateLimiter.test.ts deleted file mode 100644 index a08157168e7..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/assertListenRateLimiter.test.ts +++ /dev/null @@ -1,272 +0,0 @@ -import { beforeEach, describe, expect, it } from 'vitest' - -import { - LISTENS_RATE_LIMIT_IP_PREFIX, - LISTENS_RATE_LIMIT_TRACK_PREFIX, - config -} from '../../config' -import { getRedisConnection } from '../../redis' - -import { - listenRouteRateLimiter, - listensIpRateLimiter, - listensIpTrackRateLimiter -} from './listen' - -beforeEach(async () => { - // run with npm run test with audius-compose up - config.redisUrl = 'redis://audius-discovery-provider-redis-1/00' - const redis = await getRedisConnection() - for await (const key of redis.scanIterator()) { - if ( - key.startsWith(LISTENS_RATE_LIMIT_IP_PREFIX) || - key.startsWith(LISTENS_RATE_LIMIT_TRACK_PREFIX) - ) { - await redis.del(key) - } - } -}) - -describe('Listens Route Rate Limiter', function () { - it('limits independent tracks and users by ip hourly', async function () { - const track1 = 'track1' - const ipOne = '1.2.3.4' - - const track2 = 'track2' - const ipTwo = '2.3.4.5' - - listensIpRateLimiter.setLimits({ hourlyLimit: 10 }) - listensIpTrackRateLimiter.setLimits({ hourlyLimit: 40 }) - - // ten listens for user one with track one - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipOne, trackId: track1 }) - } - const trackOneAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneAllowed.allowed).toBe(true) - const trackOneNotAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneNotAllowed.allowed).toBe(false) - - // ten listens for another track with same user - await listenRouteRateLimiter({ ip: ipOne, trackId: track2 }) - // user one can no longer record listens to any tracks because they're blocked at ip level - const trackTwoNotAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoNotAllowed.allowed).toBe(false) - - // ten listens for second user and track one, first user is blocked on this one - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipTwo, trackId: track1 }) - } - const trackOneAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track1 - }) - expect(trackOneAllowedUserTwo.allowed).toBe(true) - - // assert both users now blocked on both tracks - const trackOneNotAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track1 - }) - expect(trackOneNotAllowedUserTwo.allowed).toBe(false) - const trackOneNotAllowedUserOne = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneNotAllowedUserOne.allowed).toBe(false) - - // assert both users now blocked on both tracks - const trackTwoNotAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track2 - }) - expect(trackTwoNotAllowedUserTwo.allowed).toBe(false) - const trackTwoNotAllowedUserOne = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoNotAllowedUserOne.allowed).toBe(false) - }) - - it('limits independent tracks and users by track and ip hourly', async function () { - const track1 = 'track1' - const ipOne = '1.2.3.4' - - const track2 = 'track2' - const ipTwo = '2.3.4.5' - - // set config so hourly track and ip is the lowest - listensIpRateLimiter.setLimits({ hourlyLimit: 100 }) - listensIpTrackRateLimiter.setLimits({ hourlyLimit: 10 }) - - // ten listens for user one with track one - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipOne, trackId: track1 }) - } - const trackOneAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneAllowed.allowed).toBe(true) - const trackOneNotAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneNotAllowed.allowed).toBe(false) - - // ten listens for another track with same user - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipOne, trackId: track2 }) - } - const trackTwoAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoAllowed.allowed).toBe(true) - const trackTwoNotAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoNotAllowed.allowed).toBe(false) - - // ten listens for second user and track one, first user is blocked on this one - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipTwo, trackId: track1 }) - } - - const trackOneAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track1 - }) - expect(trackOneAllowedUserTwo.allowed).toBe(true) - - // assert both users now blocked on both tracks - const trackOneNotAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track1 - }) - expect(trackOneNotAllowedUserTwo.allowed).toBe(false) - const trackOneNotAllowedUserOne = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneNotAllowedUserOne.allowed).toBe(false) - - // ten listens for second track from second user - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipTwo, trackId: track2 }) - } - const trackTwoAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track2 - }) - expect(trackTwoAllowedUserTwo.allowed).toBe(true) - - // assert both users now blocked on both tracks - const trackTwoNotAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track2 - }) - expect(trackTwoNotAllowedUserTwo.allowed).toBe(false) - const trackTwoNotAllowedUserOne = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoNotAllowedUserOne.allowed).toBe(false) - }) - - it('limits independent tracks and users by track and ip weekly', async function () { - const track1 = 'track1' - const ipOne = '1.2.3.4' - - const track2 = 'track2' - const ipTwo = '2.3.4.5' - - // set config so weekly track and ip is the lowest - listensIpRateLimiter.setLimits({ hourlyLimit: 100 }) - listensIpTrackRateLimiter.setLimits({ hourlyLimit: 100, weeklyLimit: 10 }) - - // ten listens for user one with track one - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipOne, trackId: track1 }) - } - const trackOneAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneAllowed.allowed).toBe(true) - const trackOneNotAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneNotAllowed.allowed).toBe(false) - - // ten listens for another track with same user - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipOne, trackId: track2 }) - } - const trackTwoAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoAllowed.allowed).toBe(true) - const trackTwoNotAllowed = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoNotAllowed.allowed).toBe(false) - - // ten listens for second user and track one, first user is blocked on this one - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipTwo, trackId: track1 }) - } - const trackOneAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track1 - }) - expect(trackOneAllowedUserTwo.allowed).toBe(true) - - // assert both users now blocked on both tracks - const trackOneNotAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track1 - }) - expect(trackOneNotAllowedUserTwo.allowed).toBe(false) - const trackOneNotAllowedUserOne = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track1 - }) - expect(trackOneNotAllowedUserOne.allowed).toBe(false) - - // ten listens for second track from second user - for (let i = 0; i < 9; i++) { - await listenRouteRateLimiter({ ip: ipTwo, trackId: track2 }) - } - const trackTwoAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track2 - }) - expect(trackTwoAllowedUserTwo.allowed).toBe(true) - - // assert both users now blocked on both tracks - const trackTwoNotAllowedUserTwo = await listenRouteRateLimiter({ - ip: ipTwo, - trackId: track2 - }) - expect(trackTwoNotAllowedUserTwo.allowed).toBe(false) - const trackTwoNotAllowedUserOne = await listenRouteRateLimiter({ - ip: ipOne, - trackId: track2 - }) - expect(trackTwoNotAllowedUserOne.allowed).toBe(false) - }) -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/listen.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/listen.ts deleted file mode 100644 index 7a3788f3323..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/listen.ts +++ /dev/null @@ -1,283 +0,0 @@ -import { - Connection, - Transaction, - TransactionMessage, - VersionedTransaction -} from '@solana/web3.js' -import bs58 from 'bs58' -import { NextFunction, Request, Response } from 'express' -import { Logger } from 'pino' -import { recover } from 'web3-eth-accounts' -import { keccak256 } from 'web3-utils' -import { z } from 'zod' - -import { - LISTENS_RATE_LIMIT_IP_PREFIX, - LISTENS_RATE_LIMIT_TRACK_PREFIX, - config -} from '../../config' -import { RateLimiter } from '../../middleware/rateLimiter' -import { getCachedContentNodes } from '../../redis' -import { normalizeEp, getConnection } from '../../utils/connections' -import { getIP, getIpData } from '../../utils/ipData' -import { sortKeys } from '../../utils/sortKeys' -import { sendTransactionWithRetries } from '../../utils/transaction' - -import { - createTrackListenInstructions, - getFeePayerKeyPair -} from './trackListenInstructions' - -export type LocationData = { - city: string - region: string - country: string -} | null - -export const recordListenBodySchema = z.object({ - userId: z.string(), - timestamp: z.string(), - signature: z.string() -}) - -export const recordListenParamsSchema = z.object({ - // validate that it can parse as an int - trackId: z - .string() - .transform((s) => parseInt(s)) - .refine((val) => !isNaN(val), { - message: 'trackId must be a numeric string' - }) - .transform((val) => val.toString()) -}) - -let conn: Connection | null = null - -export const getListensConnection = (): Connection => { - if (conn) { - return conn - } - conn = new Connection(normalizeEp(config.listenRpcUrl)) - return conn -} - -export interface RecordListenRequest extends Request { - body: z.infer - params: z.infer -} - -export type RecordListenParams = { - logger: Logger - trackId: string - userId: string - ip: string -} - -export type RecordListenResponse = { - solTxSignature: string | null -} - -export const listensIpRateLimiter = new RateLimiter({ - prefix: LISTENS_RATE_LIMIT_IP_PREFIX, - hourlyLimit: config.listensIpHourlyRateLimit, - dailyLimit: config.listensIpDailyRateLimit, - weeklyLimit: config.listensIpWeeklyRateLimit -}) -export const listensIpTrackRateLimiter = new RateLimiter({ - prefix: LISTENS_RATE_LIMIT_TRACK_PREFIX, - hourlyLimit: config.listensTrackHourlyRateLimit, - dailyLimit: config.listensTrackDailyRateLimit, - weeklyLimit: config.listensTrackWeeklyRateLimit -}) - -export const recordListen = async ( - params: RecordListenParams -): Promise => { - const { logger: parentLogger, userId, trackId, ip } = params - const logger = parentLogger.child({ - id: `${userId}-${trackId}-${new Date().getUTCSeconds()}` - }) - - logger.info({ ip }, 'record listen') - - const location = await getIpData(logger, ip) - - logger.info({ location }, 'location') - - const [secpInstruction, listenInstruction] = - await createTrackListenInstructions({ - logger, - userId, - trackId, - location - }) - - logger.info({ secpInstruction, listenInstruction }, 'instructions') - const latestBlockHash = await getListensConnection().getLatestBlockhash() - - const feePayer = getFeePayerKeyPair() - const tx = new Transaction({ - blockhash: latestBlockHash.blockhash, - lastValidBlockHeight: latestBlockHash.lastValidBlockHeight - }) - .add(secpInstruction) - .add(listenInstruction) - tx.feePayer = feePayer.publicKey - tx.sign(feePayer) - - logger.info({ tx }, 'tx') - - const message = new TransactionMessage({ - payerKey: feePayer.publicKey, - recentBlockhash: latestBlockHash.blockhash, - instructions: tx.instructions - }) - - const versionedMessage = message.compileToV0Message() - - const transaction = new VersionedTransaction(versionedMessage) - transaction.sign([feePayer]) - - const signature = bs58.encode(transaction.signatures[0]) - const confirmationStrategy = { ...latestBlockHash, signature } - - logger.info( - { latestBlockHash, versionedMessage, transaction, signature }, - 'pre send' - ) - - const solTxSignature = await getListensConnection().sendRawTransaction( - transaction.serialize(), - { - skipPreflight: true - } - ) - - logger.info({ solTxSignature }, 'transaction sig') - - return { solTxSignature } -} - -export const validateListenSignature = async ( - timestamp: string, - signature: string -): Promise => { - const data = JSON.stringify(sortKeys({ data: 'listen', timestamp })) - const hashedData = keccak256(data) - const recoveredWallet = recover(hashedData, signature) - const contentNodes = await getCachedContentNodes() - - // if from identity service - if (recoveredWallet === config.identityRelayerPublicKey) { - return true - } - - // if from registered content node - for (const { delegateOwnerWallet } of contentNodes) { - if (recoveredWallet === delegateOwnerWallet) return true - } - return false -} - -// rate limiter for after request validation -export const listenRouteRateLimiter = async (params: { - ip: string - trackId: string - logger?: Logger -}): Promise<{ allowed: boolean }> => { - const { ip, trackId, logger } = params - const ipTrackConcatKey = `${ip}:${trackId}` - - // consume and check rate limits - const ipLimit = await listensIpRateLimiter.checkLimit(ip) - const ipTrackLimit = - await listensIpTrackRateLimiter.checkLimit(ipTrackConcatKey) - - // merge limits and check if both allow passage - const allowed = ipLimit.allowed && ipTrackLimit.allowed - - if (!allowed) { - logger?.info({ ipLimit, ipTrackLimit, ip }, 'rate limit hit') - } - - return { allowed } -} - -export const listen = async ( - req: Request, - res: Response, - next: NextFunction -) => { - res.status(200).json({ - solTxSignature: null - }) - next() - - // Add back to enable solana plays - - // let logger - // try { - // logger = res.locals.logger - - // // if not prod, just return 200 - // if (config.environment !== 'prod') { - // logger.info('not prod, skipping listen') - // res.status(200).json({ - // solTxSignature: null - // }) - // next() - // return - // } - - // // validation - // const { userId, timestamp, signature } = recordListenBodySchema.parse( - // req.body - // ) - // const { trackId } = recordListenParamsSchema.parse(req.params) - // const host = req.hostname - // logger = res.locals.logger.child({ userId, trackId, host }) - // const ip = getIP(req) - - // // require request came from content - // if (!(await validateListenSignature(timestamp, signature))) { - // logger.info( - // { userId, trackId, ip, timestamp, signature }, - // 'unauthorized request' - // ) - // res.status(401).json({ message: 'Unauthorized Error' }) - // next() - // return - // } - - // // check rate limit on forwarded IP and track - // const allowed = await listenRouteRateLimiter({ ip, trackId, logger }) - // if (!allowed) { - // res.send(429).json({ message: 'Too Many Requests' }) - // next() - // return - // } - - // // record listen after validation - // const record = await recordListen({ userId, trackId, logger, ip }) - // return res.status(200).json(record) - // } catch (e: unknown) { - // if (e instanceof z.ZodError) { - // logger?.error({ error: String(e) }, 'validation error') - // return res - // .status(400) - // .json({ message: 'Validation Error', errors: e.errors }) - // } - // if (e instanceof Error) { - // logger?.error( - // { message: e.message, stack: e.stack, name: e.name }, - // 'listen error' - // ) - // } else if (typeof e === 'object' && e !== null) { - // logger?.error({ error: JSON.stringify(e) }, 'listen error') - // } else { - // logger?.error({ error: String(e) }, 'listen error') - // } - // res.status(500).json({ message: 'Internal Server Error' }) - // next(e) - // } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/trackListenInstructions.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/trackListenInstructions.ts deleted file mode 100644 index a2fddb3d5a0..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/listen/trackListenInstructions.ts +++ /dev/null @@ -1,251 +0,0 @@ -import { - Connection, - Keypair, - PublicKey, - Secp256k1Program, - TransactionInstruction -} from '@solana/web3.js' -import { serialize } from 'borsh' -import keccak256 from 'keccak256' -import { Logger } from 'pino' -import secp256k1 from 'secp256k1' - -import { ClockProgram, InstructionsProgram, config } from '../../config' -import { connections } from '../../utils/connections' -import { LocationData } from '../../utils/ipData' - -class TrackData { - userId: string - trackId: string - source: string - timestamp: number - constructor({ - userId, - trackId, - source, - timestamp - }: { - userId: string - trackId: string - source: string - timestamp: number - }) { - this.userId = userId - this.trackId = trackId - this.source = source - this.timestamp = timestamp - } -} - -const trackDataSchema = new Map([ - [ - TrackData, - { - kind: 'struct', - fields: [ - ['userId', 'string'], - ['trackId', 'string'], - ['source', 'string'], - ['timestamp', 'u64'] - ] - } - ] -]) - -class InstructionArgs { - trackData: TrackData - signature: number[] - recoveryId: number - constructor({ - trackData, - signature, - recoveryId - }: { - trackData: TrackData - signature: number[] - recoveryId: number - }) { - this.trackData = trackData - this.signature = signature - this.recoveryId = recoveryId - } -} - -class InstructionEnum { - instruction: InstructionArgs - choose: string - constructor({ - instruction, - choose - }: { - instruction: InstructionArgs - choose: string - }) { - this.instruction = instruction - this.choose = choose - } -} - -// @ts-expect-error instructionSchema doesn't have correct type when converted from js -const instructionSchema = new Map([ - [ - InstructionEnum, - { - kind: 'enum', - field: 'choose', - values: [['instruction', InstructionArgs]] - } - ], - [ - InstructionArgs, - { - kind: 'struct', - fields: [ - ['trackData', TrackData], - ['signature', [64]], - ['recoveryId', 'u8'] - ] - } - ], - [ - TrackData, - { - kind: 'struct', - fields: [ - ['userId', 'string'], - ['trackId', 'string'], - ['source', 'string'], - ['timestamp', 'u64'] - ] - } - ] -]) - -let cachedListenBlocktime: number | null = null -let lastRetrievedListenBlocktime: number | null = null - -async function getListenTimestamp(connection: Connection) { - const currentEpochInSec = Math.round(Date.now() / 1000) - if ( - cachedListenBlocktime && - lastRetrievedListenBlocktime && - Math.abs(lastRetrievedListenBlocktime - currentEpochInSec) < 30 - ) { - return cachedListenBlocktime - } - - const slot = await connection.getSlot('finalized') - const blockTime = await connection.getBlockTime(slot) - - // update cached values - cachedListenBlocktime = blockTime - lastRetrievedListenBlocktime = currentEpochInSec - - return blockTime -} - -export function getFeePayerKeyPair(): Keypair { - const feePayers = config.solanaFeePayerWallets - const randomFeePayerIndex = Math.floor(Math.random() * feePayers.length) - return feePayers[randomFeePayerIndex] -} - -export async function createTrackListenInstructions({ - logger, - userId, - trackId, - location -}: { - logger: Logger - userId: string - trackId: string - location: LocationData -}): Promise { - const trackListenProgram = new PublicKey(config.trackListenCountProgramId) - const ethRegistryProgram = new PublicKey(config.ethRegistryProgramId) - const validSignerPubK = new PublicKey(config.listensValidSigner) - const privKey = Buffer.from(config.solanaSignerPrivateKey, 'hex') - const pubKey = secp256k1.publicKeyCreate(privKey, false).slice(1) - - logger.info( - { trackListenProgram, ethRegistryProgram, validSignerPubK }, - 'ids and keys' - ) - - const connection = connections[0] - const source = 'relay' - - const accInfo = await connection.getAccountInfo(validSignerPubK) - const accPublicKeyInit = accInfo?.data.toJSON().data.slice(1, 33) - - logger.info({ accInfo }, 'account info') - - if (accPublicKeyInit === undefined) { - throw new Error('pub key not found for acc info') - } - - const signerGroup = new PublicKey(accPublicKeyInit) - - const sourceData = - location === null ? source : JSON.stringify({ source, location }) - - const trackData = new TrackData({ - userId, - trackId, - source: sourceData, - timestamp: - (await getListenTimestamp(connection)) || - Math.round(new Date().getTime() / 1000) - }) - - logger.info({ signerGroup, sourceData, trackData }, 'some data') - - const serializedTrackData = serialize(trackDataSchema, trackData) - const buffered = Buffer.from(serializedTrackData) - const msgHash = keccak256(buffered) - - const sigObj = secp256k1.ecdsaSign(Uint8Array.from(msgHash), privKey) - - const instructionArgs = new InstructionArgs({ - trackData, - signature: Array.from(sigObj.signature), - recoveryId: sigObj.recid - }) - - const instructionData = new InstructionEnum({ - instruction: instructionArgs, - choose: 'instruction' - }) - - const serializedInstructionArgs = serialize( - instructionSchema, - instructionData - ) - - logger.info({ serializedTrackData, serializedInstructionArgs }, 'serialized') - - const secpInstruction = Secp256k1Program.createInstructionWithPublicKey({ - publicKey: pubKey, - message: serializedTrackData, - signature: sigObj.signature, - recoveryId: sigObj.recid - }) - - const listenInstruction = new TransactionInstruction({ - keys: [ - { pubkey: validSignerPubK, isSigner: false, isWritable: false }, - { pubkey: signerGroup, isSigner: false, isWritable: false }, - { - pubkey: ethRegistryProgram, - isSigner: false, - isWritable: false - }, - { pubkey: InstructionsProgram, isSigner: false, isWritable: false }, - { pubkey: ClockProgram, isSigner: false, isWritable: false } - ], - programId: trackListenProgram, - data: Buffer.from(serializedInstructionArgs) - }) - - return [secpInstruction, listenInstruction] -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/constants.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/constants.ts deleted file mode 100644 index 9e0f3ce58f7..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Slippage tolerance for swaps (in basis points) -export const SWAP_SLIPPAGE_BPS = 5000 diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/swap_coin.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/swap_coin.ts deleted file mode 100644 index 92bb65b5d18..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/swap_coin.ts +++ /dev/null @@ -1,344 +0,0 @@ -import { CpAmm } from '@meteora-ag/cp-amm-sdk' -import { - DynamicBondingCurveClient, - SwapMode -} from '@meteora-ag/dynamic-bonding-curve-sdk' -import { - SolMeteoraDammV2Pools, - SolMeteoraDbcPools, - Table -} from '@pedalboard/storage' -import { getMint } from '@solana/spl-token' -import { Connection, PublicKey, Transaction } from '@solana/web3.js' -import BN from 'bn.js' -import { Request, Response } from 'express' - -import { db } from '../../db' -import { logger } from '../../logger' -import { getConnection } from '../../utils/connections' -import { AUDIO_MINT } from '../launchpad/constants' - -import { SWAP_SLIPPAGE_BPS } from './constants' - -const SPL_TOKEN_PROGRAM_ID = new PublicKey( - 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' -) - -const getDBCSwapTx = async ( - connection: Connection, - dbcPool: SolMeteoraDbcPools, - coinMintPubkey: PublicKey, - swapDirection: string, - inputAmountBN: BN, - userPubkey: PublicKey, - feePayerPubkey: PublicKey -) => { - const dbcClient = new DynamicBondingCurveClient(connection, 'confirmed') - - if (!dbcPool || !dbcPool.account) { - throw new Error( - `No DBC pool found in db for coin mint: ${coinMintPubkey.toString()}` - ) - } - - const virtualPoolState = await dbcClient.state.getPool( - new PublicKey(dbcPool.account) - ) - - if (!virtualPoolState) { - throw new Error( - `Unable to get DBC pool state from Meteora. Pool address: ${dbcPool.account}` - ) - } - - // Convert snake_case keys to camelCase for SDK compatibility - const poolConfig = await dbcClient.state.getPoolConfig(dbcPool.config) - if (!poolConfig) { - throw new Error( - `Unable to get DBC pool config from Meteora. Pool address: ${dbcPool.account}` - ) - } - const currentPoint = await connection.getSlot() - - // Get swap quote using swapQuote2 with PartialFill mode for proper slippage handling - const swapQuote = dbcClient.pool.swapQuote2({ - virtualPool: virtualPoolState, - config: poolConfig, - swapBaseForQuote: swapDirection === 'coinToAudio', // Base = coin, quote = audio - hasReferral: false, - currentPoint: new BN(currentPoint), - slippageBps: SWAP_SLIPPAGE_BPS, // 2% slippage tolerance for partial fills - swapMode: SwapMode.PartialFill, - amountIn: inputAmountBN - }) - // Create the swap transaction - const swapTx = await dbcClient.pool.swap2({ - owner: userPubkey, - pool: new PublicKey(dbcPool.account), - swapBaseForQuote: swapDirection === 'coinToAudio', - referralTokenAccount: null, - payer: feePayerPubkey, - swapMode: SwapMode.PartialFill, - amountIn: inputAmountBN, - minimumAmountOut: swapQuote.outputAmount - }) - - return { - swapTx, - outputAmount: swapQuote.outputAmount.toString(), - includedFeeInputAmount: swapQuote.includedFeeInputAmount?.toString() - } -} - -const getDammSwapTx = async ( - connection: Connection, - dammPoolRecord: SolMeteoraDammV2Pools, - coinMintPubkey: PublicKey, - swapDirection: string, - inputAmountBN: BN, - userPubkey: PublicKey -) => { - const cpAmm = new CpAmm(connection) - const poolState = await cpAmm.fetchPoolState( - new PublicKey(dammPoolRecord.account) - ) - if (!poolState) { - throw new Error( - `Unable to fetch damm pool state from Meteora. Pool address: ${dammPoolRecord.account}` - ) - } - - // Fetch token mint information to get decimals - const tokenAMintInfo = await getMint(connection, poolState.tokenAMint) - const tokenBMintInfo = await getMint(connection, poolState.tokenBMint) - - const currentEpoch = (await connection.getEpochInfo()).epoch - const audioMintPubkey = new PublicKey(AUDIO_MINT) - const inputTokenMint = - swapDirection === 'audioToCoin' ? audioMintPubkey : coinMintPubkey - const outputTokenMint = - swapDirection === 'audioToCoin' ? coinMintPubkey : audioMintPubkey - - const quote = await cpAmm.getQuote({ - inAmount: inputAmountBN, - inputTokenMint, - slippage: 2, - poolState, - currentTime: new Date().getTime(), - currentSlot: await connection.getSlot(), - inputTokenInfo: { - mint: tokenAMintInfo, - currentEpoch - }, - outputTokenInfo: { - mint: tokenBMintInfo, - currentEpoch - }, - tokenADecimal: tokenAMintInfo.decimals, - tokenBDecimal: tokenBMintInfo.decimals - }) - const swapTx = await cpAmm.swap({ - payer: userPubkey, - pool: new PublicKey(dammPoolRecord.account), - inputTokenMint, - outputTokenMint, - amountIn: inputAmountBN, - minimumAmountOut: quote.minSwapOutAmount, - tokenAVault: poolState.tokenAVault, - tokenBVault: poolState.tokenBVault, - tokenAMint: poolState.tokenAMint, - tokenBMint: poolState.tokenBMint, - tokenAProgram: SPL_TOKEN_PROGRAM_ID, - tokenBProgram: SPL_TOKEN_PROGRAM_ID, - referralTokenAccount: null // we dont do any referral fees - }) - return { swapTx, outputAmount: quote.swapOutAmount.toString() } -} - -/** - * Creates a swap transaction for swapping AUDIO to an artist coin using Meteora's DBC - * - * For now this just handles DBCs - it could be extended to include DAMMs as well - * - * Query params: - * - inputAmountUi: Amount of AUDIO in UI format (human-readable, e.g., "100" for 100 AUDIO) - * - outputMint: The mint address of the output token (artist coin) - * - userPublicKey: The public key of the user initiating the swap - * - swapDirection: The direction of the swap (either "audioToCoin" or "coinToAudio") - * - feePayer: Optional fee payer separate from the user public key - * - * Returns: - * - transaction: Base64-encoded serialized transaction ready to be signed by the user - * - outputAmount: The expected output amount in bigint format (raw token amount) - */ -export const swapCoin = async (req: Request, res: Response): Promise => { - try { - const { inputAmount, coinMint, swapDirection, userPublicKey, feePayer } = - req.query - - // Validate required parameters - if (!inputAmount || typeof inputAmount !== 'string') { - res.status(400).json({ - error: - 'inputAmount is required and must be a string representing the big int number amount of input token' - }) - return - } - - if ( - !swapDirection || - typeof swapDirection !== 'string' || - (swapDirection !== 'audioToCoin' && swapDirection !== 'coinToAudio') - ) { - res.status(400).json({ - error: - 'swapDirection is required and must be a string representing the direction of the swap' - }) - return - } - - if (!coinMint || typeof coinMint !== 'string') { - res.status(400).json({ - error: 'coinMint is required and must be a valid mint address' - }) - return - } - - if (!userPublicKey || typeof userPublicKey !== 'string') { - res.status(400).json({ - error: 'userPublicKey is required and must be a valid public key' - }) - return - } - - if (feePayer && typeof feePayer !== 'string') { - res.status(400).json({ - error: 'feePayer must be a valid public key' - }) - return - } - - // Validate public keys - let coinMintPubkey: PublicKey - let userPubkey: PublicKey - let feePayerPubkey: PublicKey | undefined - try { - coinMintPubkey = new PublicKey(coinMint) - userPubkey = new PublicKey(userPublicKey) - if (feePayer) { - feePayerPubkey = new PublicKey(feePayer) - } else { - feePayerPubkey = userPubkey - } - } catch (e) { - res.status(400).json({ - error: 'outputMint and userPublicKey must be valid Solana public keys' - }) - return - } - - // Convert UI amount to bigint - const inputAmountBN = new BN(inputAmount) - - if (inputAmountBN.lte(new BN(0))) { - res.status(400).json({ - error: 'inputAmount must be greater than 0' - }) - return - } - // Inputs are all validated now 👍 - - // Find the pool using the coin's mint from the database - const dbcPoolRecord = await db(Table.SolMeteoraDbcPools) - .where('base_mint', coinMintPubkey.toString()) - .first() - - const dammPoolRecord = await db( - Table.SolMeteoraDammV2Pools - ) - .where('token_a_mint', coinMintPubkey.toString()) - .first() - - if (!dbcPoolRecord && !dammPoolRecord) { - res.status(404).json({ - error: `No DBC or DAMM pool found for coin mint: ${coinMintPubkey.toString()}` - }) - return - } - - // If a DAMM entry was found, its always a DAMM pool - const isDamm = !!dammPoolRecord - // If a DBC entry was found, we also have to ensure it's not supposed to be migrated - const isDBC = !isDamm && dbcPoolRecord && !dbcPoolRecord.is_migrated - - // Initialize Solana connection and DBC client - const connection = getConnection() - - let swapTx: Transaction | undefined - let outputAmount: string | undefined - let includedFeeInputAmount: string | undefined - if (isDBC) { - const { - swapTx: dbcSwapTx, - outputAmount: dbcOutputAmount, - includedFeeInputAmount: dbcIncludedFeeInputAmount - } = await getDBCSwapTx( - connection, - dbcPoolRecord, - coinMintPubkey, - swapDirection, - inputAmountBN, - userPubkey, - feePayerPubkey - ) - swapTx = dbcSwapTx - outputAmount = dbcOutputAmount - includedFeeInputAmount = dbcIncludedFeeInputAmount - } else if (isDamm) { - const { swapTx: dammSwapTx, outputAmount: dammOutputAmount } = - await getDammSwapTx( - connection, - dammPoolRecord, - coinMintPubkey, - swapDirection, - inputAmountBN, - userPubkey - ) - swapTx = dammSwapTx - outputAmount = dammOutputAmount - } else { - res.status(500).json({ - error: `No DBC or DAMM pool found for coin mint: ${coinMintPubkey.toString()}` - }) - return - } - if (!swapTx) { - res.status(500).json({ - error: `Failed to create swap transaction for coin mint: ${coinMintPubkey.toString()}` - }) - return - } - - swapTx.feePayer = feePayerPubkey - swapTx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash - - // Serialize the transaction - const serializedTx = Buffer.from( - swapTx.serialize({ requireAllSignatures: false }) - ).toString('base64') - - // Return the transaction and expected output amount - logger.info(`Returning includedFeeInputAmount: ${includedFeeInputAmount}`) - res.status(200).json({ - transaction: serializedTx, - outputAmount, - ...(includedFeeInputAmount && { includedFeeInputAmount }) - }) - } catch (error) { - logger.error(error) - res.status(500).json({ - error: 'Failed to create coin swap transaction', - details: error instanceof Error ? error.message : 'Unknown error' - }) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/swap_coin_quote.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/swap_coin_quote.ts deleted file mode 100644 index d9964932986..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/meteora/swap_coin_quote.ts +++ /dev/null @@ -1,265 +0,0 @@ -import { CpAmm, SwapMode as DammSwapMode } from '@meteora-ag/cp-amm-sdk' -import { - DynamicBondingCurveClient, - SwapMode -} from '@meteora-ag/dynamic-bonding-curve-sdk' -import { - SolMeteoraDammV2Pools, - SolMeteoraDbcPools, - Table -} from '@pedalboard/storage' -import { getMint } from '@solana/spl-token' -import { Connection, PublicKey } from '@solana/web3.js' -import BN from 'bn.js' -import { NextFunction, Request, Response } from 'express' - -import { db } from '../../db' -import { logger } from '../../logger' -import { getConnection } from '../../utils/connections' -import { AUDIO_MINT } from '../launchpad/constants' - -import { SWAP_SLIPPAGE_BPS } from './constants' - -const getDBCPoolQuote = async ( - dbcPool: SolMeteoraDbcPools, - connection: Connection, - inputAmountBN: BN, - coinMintPubkey: PublicKey, - swapDirection: string -) => { - const dbcClient = new DynamicBondingCurveClient(connection, 'confirmed') - - if (!dbcPool || !dbcPool.account) { - throw new Error( - `No DBC pool found in db for coin mint: ${coinMintPubkey.toString()}` - ) - } - - const virtualPoolState = await dbcClient.state.getPool( - new PublicKey(dbcPool.account) - ) - - if (!virtualPoolState) { - throw new Error( - `Unable to get DBC pool state from Meteora. Pool address: ${dbcPool.account}` - ) - } - - // Convert snake_case keys to camelCase for SDK compatibility - const poolConfig = await dbcClient.state.getPoolConfig(dbcPool.config) - if (!poolConfig) { - throw new Error( - `Unable to get DBC pool config from Meteora. Pool address: ${dbcPool.account}` - ) - } - const currentPoint = await connection.getSlot() - - // Get swap quote using swapQuote2 with PartialFill mode for consistent behavior - const quote = dbcClient.pool.swapQuote2({ - virtualPool: virtualPoolState, - config: poolConfig, - swapBaseForQuote: swapDirection === 'coinToAudio', // Base = coin, quote = audio - hasReferral: false, - currentPoint: new BN(currentPoint), - slippageBps: SWAP_SLIPPAGE_BPS, // 2% slippage tolerance for partial fills - swapMode: SwapMode.PartialFill, - amountIn: inputAmountBN - }) - return quote.outputAmount.toString() -} - -const getDammPoolQuote = async ( - dammPoolRecord: SolMeteoraDammV2Pools, - connection: Connection, - inputAmountBN: BN, - coinMintPubkey: PublicKey, - swapDirection: string -) => { - const cpAmm = new CpAmm(connection) - const poolState = await cpAmm.fetchPoolState( - new PublicKey(dammPoolRecord.account) - ) - if (!poolState) { - throw new Error( - `Unable to fetch damm pool state from Meteora. Pool address: ${dammPoolRecord.account}` - ) - } - - // Fetch token mint information to get decimals - const tokenAMintInfo = await getMint(connection, poolState.tokenAMint) - const tokenBMintInfo = await getMint(connection, poolState.tokenBMint) - - const currentEpoch = (await connection.getEpochInfo()).epoch - const audioMintPubkey = new PublicKey(AUDIO_MINT) - const inputTokenMint = - swapDirection === 'audioToCoin' ? audioMintPubkey : coinMintPubkey - - const currentSlot = await connection.getSlot() - const currentPoint = poolState.activationType - ? new BN(new Date().getTime()) - : new BN(currentSlot) - - const quote = cpAmm.getQuote2({ - amountIn: inputAmountBN, - inputTokenMint, - slippage: 2, - poolState, - currentPoint, - inputTokenInfo: { - mint: tokenAMintInfo, - currentEpoch - }, - outputTokenInfo: { - mint: tokenBMintInfo, - currentEpoch - }, - tokenADecimal: tokenAMintInfo.decimals, - tokenBDecimal: tokenBMintInfo.decimals, - swapMode: DammSwapMode.PartialFill, - hasReferral: false - }) - - return quote.outputAmount.toString() -} -/** - * Gets a quote for swapping AUDIO to/from an artist coin using Meteora's DBC - * - * For now this just handles DBCs - it could be extended to include DAMMs as well - * - * Query params: - * - inputAmountUi: Amount in UI format (human-readable, e.g., "100") - * - coinMint: The mint address of the artist coin - * - swapDirection: The direction of the swap (either "audioToCoin" or "coinToAudio") - * - * Returns: - * - outputAmount: The quoted output amount in bigint format - */ -export const swapCoinQuote = async ( - req: Request, - res: Response, - next: NextFunction -): Promise => { - try { - const { inputAmount, coinMint, swapDirection } = req.query - - // Validate required parameters - if (!inputAmount || typeof inputAmount !== 'string') { - res.status(400).json({ - error: - 'inputAmount is required and must be a string representing the big int number amount' - }) - return - } - - if ( - !swapDirection || - typeof swapDirection !== 'string' || - (swapDirection !== 'audioToCoin' && swapDirection !== 'coinToAudio') - ) { - res.status(400).json({ - error: - 'swapDirection is required and must be a string representing the direction of the swap' - }) - return - } - - if (!coinMint || typeof coinMint !== 'string') { - res.status(400).json({ - error: 'coinMint is required and must be a valid mint address' - }) - return - } - - // Validate public keys - let coinMintPubkey: PublicKey - try { - coinMintPubkey = new PublicKey(coinMint) - } catch (e) { - res.status(400).json({ - error: 'coinMint must be a valid Solana public key' - }) - return - } - - // Find the pool using the coin's mint from the database - const dbcPoolRecord = await db(Table.SolMeteoraDbcPools) - .where('base_mint', coinMintPubkey.toString()) - .first() - - const dammPoolRecord = await db( - Table.SolMeteoraDammV2Pools - ) - .where('token_a_mint', coinMintPubkey.toString()) - .first() - - if (!dbcPoolRecord && !dammPoolRecord) { - res.status(404).json({ - error: `No DBC or DAMM pool found for coin mint: ${coinMintPubkey.toString()}` - }) - return - } - - // Convert UI amount to bigint - const inputAmountBN = new BN(inputAmount) - - if (inputAmountBN.lte(new BN(0))) { - res.status(400).json({ - error: 'inputAmountUi must be greater than 0' - }) - return - } - // Inputs are all validated now 👍 - - // Initialize Solana connection and DBC client - const connection = getConnection() - - // If a DAMM entry was found, its always a DAMM pool - const isDamm = !!dammPoolRecord - // If a DBC entry was found, we also have to ensure it's not supposed to be migrated - const isDBC = !isDamm && dbcPoolRecord && !dbcPoolRecord.is_migrated - let outputAmount: string | undefined - try { - if (isDBC) { - outputAmount = await getDBCPoolQuote( - dbcPoolRecord, - connection, - inputAmountBN, - coinMintPubkey, - swapDirection - ) - } - if (isDamm) { - outputAmount = await getDammPoolQuote( - dammPoolRecord, - connection, - inputAmountBN, - coinMintPubkey, - swapDirection - ) - } - } catch (error) { - res.status(500).json({ - error: error instanceof Error ? error.message : 'Unknown error' - }) - return - } - if (!isDBC && !isDamm) { - res.status(404).json({ - error: `Unable to determine if a DBC or DAMM pool exists for coin mint: ${coinMintPubkey.toString()}` - }) - return - } - - // Return the output amount in bigint format - res.status(200).json({ - outputAmount - }) - next() - } catch (error) { - logger.error(error) - res.status(500).json({ - error: 'Failed to get coin swap quote', - details: error instanceof Error ? error.message : 'Unknown error' - }) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/InvalidRelayInstructionError.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/InvalidRelayInstructionError.ts deleted file mode 100644 index ec066bee2e3..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/InvalidRelayInstructionError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class InvalidRelayInstructionError extends Error { - constructor(instructionIndex: number, message: string) { - super(`Instruction ${instructionIndex ?? '?'}: ${message}`) - this.name = 'InvalidRelayInstructionError' - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/antiAbuse.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/antiAbuse.ts deleted file mode 100644 index 934c3774b41..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/antiAbuse.ts +++ /dev/null @@ -1,28 +0,0 @@ -import fetch from 'cross-fetch' -import { Logger } from 'pino' - -import { config } from '../../config' -import { logger } from '../../logger' - -/** - * Checks if a user is abusive by querying the anti-abuse oracle - * @param wallet - The wallet address to check - * @param log - Optional logger instance, defaults to the module logger - * @returns Promise - true if user is abusive (response not 200), false otherwise - */ -export const isUserAbusive = async ( - wallet: string, - log: Logger = logger -): Promise => { - try { - const url = `${config.antiAbuseOracle}/attestation/check?wallet=${wallet}` - const response = await fetch(url) - return response.status !== 200 - } catch (error) { - log.error( - { error, wallet }, - 'Error checking anti-abuse status, defaulting to not abusive' - ) - return false - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/assertRelayAllowedInstructions.test.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/assertRelayAllowedInstructions.test.ts deleted file mode 100644 index 456b94dce68..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/assertRelayAllowedInstructions.test.ts +++ /dev/null @@ -1,1574 +0,0 @@ -import assert from 'assert' - -import { - ClaimableTokensProgram, - RewardManagerProgram, - RewardManagerInstruction -} from '@audius/spl' -import { - NATIVE_MINT, - TOKEN_PROGRAM_ID, - createApproveInstruction, - createAssociatedTokenAccountIdempotentInstruction, - createAssociatedTokenAccountInstruction, - createCloseAccountInstruction, - createInitializeAccountInstruction, - createSyncNativeInstruction, - createTransferCheckedInstruction -} from '@solana/spl-token' -import { - Keypair, - PublicKey, - Secp256k1Program, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js' -import { vi, beforeEach, afterEach, describe, it, expect } from 'vitest' - -import { config } from '../../config' - -import { InvalidRelayInstructionError } from './InvalidRelayInstructionError' -import { - assertRelayAllowedInstructions, - computeInstructionDiscriminant, - JUPITER_ROUTE_DISCRIMINANT, - JUPITER_SHARED_ACCOUNTS_ROUTE_DISCRIMINANT -} from './assertRelayAllowedInstructions' - -vi.mock('../../utils/connections', () => ({ - getConnection: () => ({ - getMinimumBalanceForRentExemption: async () => 2_039_280 - }) -})) - -const CLAIMABLE_TOKEN_PROGRAM_ID = new PublicKey(config.claimableTokenProgramId) - -const REWARD_MANAGER_PROGRAM_ID = new PublicKey(config.rewardsManagerProgramId) -const REWARD_MANAGER_ACCOUNT = new PublicKey( - config.rewardsManagerAccountAddress -) - -const MEMO_PROGRAM_ID = new PublicKey( - 'Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo' -) -const MEMO_V2_PROGRAM_ID = new PublicKey( - 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr' -) - -const usdcMintKey = new PublicKey(config.usdcMintAddress) -const audioMintKey = new PublicKey(config.waudioMintAddress) - -const usdcClaimableTokenAuthority = ClaimableTokensProgram.deriveAuthority({ - programId: CLAIMABLE_TOKEN_PROGRAM_ID, - mint: usdcMintKey -}) -const audioClaimableTokenAuthority = ClaimableTokensProgram.deriveAuthority({ - programId: CLAIMABLE_TOKEN_PROGRAM_ID, - mint: audioMintKey -}) - -const getRandomPublicKey = () => Keypair.generate().publicKey - -describe('Solana Relay', function () { - describe('Jupiter Instruction Discriminant Computation', function () { - it('should compute correct discriminant for route instruction', function () { - const discriminant = computeInstructionDiscriminant('route') - expect(discriminant.length).toBe(8) - expect(discriminant).toEqual(JUPITER_ROUTE_DISCRIMINANT) - }) - - it('should compute correct discriminant for shared_accounts_route instruction', function () { - const discriminant = computeInstructionDiscriminant( - 'shared_accounts_route' - ) - expect(discriminant.length).toBe(8) - expect(discriminant).toEqual(JUPITER_SHARED_ACCOUNTS_ROUTE_DISCRIMINANT) - }) - - it('should produce different discriminants for different instruction names', function () { - const routeDiscriminant = computeInstructionDiscriminant('route') - const sharedRouteDiscriminant = computeInstructionDiscriminant( - 'shared_accounts_route' - ) - const customDiscriminant = - computeInstructionDiscriminant('custom_instruction') - - expect(routeDiscriminant).not.toEqual(sharedRouteDiscriminant) - expect(routeDiscriminant).not.toEqual(customDiscriminant) - expect(sharedRouteDiscriminant).not.toEqual(customDiscriminant) - }) - - it('should be deterministic - same input produces same output', function () { - const discriminant1 = computeInstructionDiscriminant('test_instruction') - const discriminant2 = computeInstructionDiscriminant('test_instruction') - expect(discriminant1).toEqual(discriminant2) - }) - }) - - describe('Jupiter Instruction Error Handling', function () { - it('should handle malformed Jupiter instructions gracefully', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - - // Create instruction with valid discriminant but insufficient accounts - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: JUPITER_ROUTE_DISCRIMINANT, - keys: [] // No accounts provided - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError - ) - }) - - it('should handle Jupiter instructions with corrupted account data', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - - // Create sharedAccountsRoute instruction with insufficient keys - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: JUPITER_SHARED_ACCOUNTS_ROUTE_DISCRIMINANT, - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - } - // Missing required accounts - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Failed to parse Jupiter' - ) - }) - }) - beforeEach(() => { - // Mock initializeDiscoveryDb to avoid real DB connection - vi.mock('@pedalboard/basekit', () => ({ - initializeDiscoveryDb: vi.fn(() => ({ - select: vi.fn(() => ({ - from: vi.fn(() => []) // returns empty array for artist_coins - })) - })) - })) - // Mock getAllowedMints to always return audioMintKey and usdcMintKey - vi.mock('./getAllowedMints', () => ({ - getAllowedMints: vi.fn(async () => [ - config.usdcMintAddress, - config.waudioMintAddress - ]) - })) - }) - afterEach(() => { - vi.restoreAllMocks() - }) - - describe('Associated Token Account Program', function () { - it('should allow create token account with matching close for valid mints', async function () { - const payer = getRandomPublicKey() - const associatedToken = getRandomPublicKey() - const owner = getRandomPublicKey() - - // Basic case - const instructions = [ - createAssociatedTokenAccountInstruction( - payer, - associatedToken, - owner, - usdcMintKey - ), - createCloseAccountInstruction(associatedToken, payer, owner) - ] - await assertRelayAllowedInstructions(instructions) - }) - - it('should allow create/close matches regardless of order', async function () { - const payer = getRandomPublicKey() - const associatedToken = getRandomPublicKey() - const owner = getRandomPublicKey() - const associatedToken2 = getRandomPublicKey() - const payer2 = getRandomPublicKey() - const complexInstructions = [ - createCloseAccountInstruction(associatedToken2, payer2, owner), - createAssociatedTokenAccountInstruction( - payer2, - associatedToken2, - owner, - usdcMintKey - ), - createAssociatedTokenAccountInstruction( - payer, - associatedToken, - owner, - NATIVE_MINT - ), - createCloseAccountInstruction(associatedToken, payer, owner) - ] - await assertRelayAllowedInstructions(complexInstructions) - }) - - it('should not allow create token account without close', async function () { - const payer = getRandomPublicKey() - const associatedToken = getRandomPublicKey() - const owner = getRandomPublicKey() - - // Ensure every associated token account create instruction has a close account instruction - const missingCloseInstructions = [ - createAssociatedTokenAccountInstruction( - payer, - associatedToken, - owner, - usdcMintKey - ) - ] - await assert.rejects( - async () => assertRelayAllowedInstructions(missingCloseInstructions), - InvalidRelayInstructionError, - 'Missing close instructions' - ) - - // Ensure the payer is refunded - const unmatchedPayerInstructions = [ - createAssociatedTokenAccountInstruction( - payer, - associatedToken, - owner, - usdcMintKey - ), - createCloseAccountInstruction( - associatedToken, - getRandomPublicKey(), - owner - ) - ] - await assert.rejects( - async () => assertRelayAllowedInstructions(unmatchedPayerInstructions), - InvalidRelayInstructionError, - 'Mismatched account creation payer and close instruction destination' - ) - - // Ensure both instructions are for the same account - const unmatchedAccountInstructions = [ - createAssociatedTokenAccountInstruction( - payer, - associatedToken, - owner, - usdcMintKey - ), - createCloseAccountInstruction(getRandomPublicKey(), payer, owner) - ] - await assert.rejects( - async () => - assertRelayAllowedInstructions(unmatchedAccountInstructions), - InvalidRelayInstructionError, - 'Mismatched target token accounts' - ) - }) - - it('should not allow create token account with arbitrary mints', async function () { - const payer = getRandomPublicKey() - const associatedToken = getRandomPublicKey() - const owner = getRandomPublicKey() - const mint = getRandomPublicKey() - const instructions = [ - createAssociatedTokenAccountInstruction( - payer, - associatedToken, - owner, - mint - ), - createCloseAccountInstruction(associatedToken, payer, owner) - ] - await assert.rejects( - async () => assertRelayAllowedInstructions(instructions), - InvalidRelayInstructionError, - 'Mint not allowed' - ) - }) - - it('should allow exactly one fee-payer-funded create without matching close when fee payer receives rent exemption via System Transfer', async function () { - const wallet = '0xe42b199d864489387bf64262874fc6472bcbc151' - const feePayer = config.solanaFeePayerWallets[0].publicKey - const fromPubkey = getRandomPublicKey() - const recipientAta = getRandomPublicKey() - const recipientOwner = getRandomPublicKey() - const rentExemptionLamports = 2_039_280 - const instructions = [ - SystemProgram.transfer({ - fromPubkey, - toPubkey: feePayer, - lamports: rentExemptionLamports - }), - createAssociatedTokenAccountIdempotentInstruction( - feePayer, - recipientAta, - recipientOwner, - usdcMintKey - ) - ] - await assertRelayAllowedInstructions(instructions, { - user: { wallet, is_verified: false }, - feePayer: feePayer.toBase58() - }) - }) - - it('should not allow fee-payer-funded create when fee payer receives less than rent exemption via System Transfer', async function () { - const wallet = '0xe42b199d864489387bf64262874fc6472bcbc151' - const feePayer = config.solanaFeePayerWallets[0].publicKey - const fromPubkey = getRandomPublicKey() - const recipientAta = getRandomPublicKey() - const recipientOwner = getRandomPublicKey() - const belowRentExemptionLamports = 2_039_279 - const instructions = [ - SystemProgram.transfer({ - fromPubkey, - toPubkey: feePayer, - lamports: belowRentExemptionLamports - }), - createAssociatedTokenAccountIdempotentInstruction( - feePayer, - recipientAta, - recipientOwner, - usdcMintKey - ) - ] - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { wallet, is_verified: false }, - feePayer: feePayer.toBase58() - }), - InvalidRelayInstructionError, - 'Mismatched number of create and close instructions' - ) - }) - - it('should not allow fee-payer-funded create without matching close when there is no reimbursement', async function () { - const feePayer = config.solanaFeePayerWallets[0].publicKey - const recipientAta = getRandomPublicKey() - const recipientOwner = getRandomPublicKey() - const instructions = [ - createAssociatedTokenAccountIdempotentInstruction( - feePayer, - recipientAta, - recipientOwner, - usdcMintKey - ) - ] - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - feePayer: feePayer.toBase58() - }), - InvalidRelayInstructionError, - 'Mismatched number of create and close instructions' - ) - }) - }) - - describe('Token Program', function () { - it('should allow close instructions', async function () { - const payer = getRandomPublicKey() - const associatedToken = getRandomPublicKey() - const owner = getRandomPublicKey() - const instructions = [ - createCloseAccountInstruction(associatedToken, payer, owner) - ] - await assertRelayAllowedInstructions(instructions) - }) - - it('should allow USDC transfers to userbanks', async function () { - // Dummy eth address to make the encoder happy - const wallet = '0xe42b199d864489387bf64262874fc6472bcbc151' - const userbank = await ClaimableTokensProgram.deriveUserBank({ - claimableTokensPDA: usdcClaimableTokenAuthority, - ethAddress: wallet - }) - - const source = getRandomPublicKey() - const owner = getRandomPublicKey() - const instructions = [ - createTransferCheckedInstruction( - source, - usdcMintKey, - userbank, - owner, - 1, - 6 - ) - ] - await assertRelayAllowedInstructions(instructions, { - user: { - wallet, - is_verified: false - } - }) - }) - - it('should not allow transfers to non-userbanks', async function () { - // Some dummy eth addresses to make the encoder happy - const wallet = '0x1dc3070311552fce47e06db9f4f1328187f14c85' - - const source = getRandomPublicKey() - const owner = getRandomPublicKey() - const destination = getRandomPublicKey() - const instructions = [ - createTransferCheckedInstruction( - source, - usdcMintKey, - destination, - owner, - 1, - 6 - ) - ] - - await assert.rejects( - async () => assertRelayAllowedInstructions(instructions), - InvalidRelayInstructionError, - 'Not logged in' - ) - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet, - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Transfer not to userbank' - ) - }) - - it('should allow syncNative instructions', async function () { - await assertRelayAllowedInstructions([ - createSyncNativeInstruction(getRandomPublicKey()) - ]) - }) - - it('should not allow other instructions (non-exhaustive)', async function () { - const account = getRandomPublicKey() - const owner = getRandomPublicKey() - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - createInitializeAccountInstruction(account, usdcMintKey, owner) - ]), - InvalidRelayInstructionError, - 'initializeAccount' - ) - const delegate = getRandomPublicKey() - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - createApproveInstruction(account, delegate, owner, 0) - ]), - InvalidRelayInstructionError, - 'approve' - ) - }) - }) - - describe('Reward Manager Program', function () { - it('should allow public instructions with valid reward manager', async function () { - const disbursementId = 'some:id:thing' - // Some dummy eth addresses to make the encoder happy - const senderEthAddress = '0x1dc3070311552fce47e06db9f4f1328187f14c85' - const operatorEthAddress = '0x430ef095e4c5ac71a465b30d566bab0bb0985346' - const recipientEthAddress = '0x7311c8ec02f087cba0fdbb056d4cebc86519d871' - const attestations = getRandomPublicKey() - const authority = getRandomPublicKey() - const payer = getRandomPublicKey() - const sender = getRandomPublicKey() - const rewardManagerTokenSource = getRandomPublicKey() - const destinationUserBank = getRandomPublicKey() - const disbursementAccount = getRandomPublicKey() - const antiAbuseOracle = getRandomPublicKey() - const existingSenders = [ - getRandomPublicKey(), - getRandomPublicKey(), - getRandomPublicKey() - ] - await assertRelayAllowedInstructions([ - RewardManagerProgram.createSenderPublicInstruction({ - senderEthAddress, - operatorEthAddress, - rewardManagerState: REWARD_MANAGER_ACCOUNT, - authority, - payer, - sender, - existingSenders, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }), - RewardManagerProgram.createSubmitAttestationInstruction({ - disbursementId, - attestations, - rewardManagerState: REWARD_MANAGER_ACCOUNT, - authority, - payer, - sender, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }), - RewardManagerProgram.createEvaluateAttestationsInstruction({ - disbursementId, - recipientEthAddress, - amount: BigInt(100), - attestations, - rewardManagerState: REWARD_MANAGER_ACCOUNT, - authority, - rewardManagerTokenSource, - destinationUserBank, - disbursementAccount, - antiAbuseOracle, - payer, - tokenProgramId: TOKEN_PROGRAM_ID, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }) - ]) - }) - - it('should not allow public instructions with invalid reward manager', async function () { - const disbursementId = 'some:id:thing' - // Some dummy eth addresses to make the encoder happy - const senderEthAddress = '0x1dc3070311552fce47e06db9f4f1328187f14c85' - const operatorEthAddress = '0x430ef095e4c5ac71a465b30d566bab0bb0985346' - const recipientEthAddress = '0x7311c8ec02f087cba0fdbb056d4cebc86519d871' - const attestations = getRandomPublicKey() - const authority = getRandomPublicKey() - const payer = getRandomPublicKey() - const sender = getRandomPublicKey() - const rewardManagerState = getRandomPublicKey() - const rewardManagerTokenSource = getRandomPublicKey() - const destinationUserBank = getRandomPublicKey() - const disbursementAccount = getRandomPublicKey() - const antiAbuseOracle = getRandomPublicKey() - const existingSenders = [ - getRandomPublicKey(), - getRandomPublicKey(), - getRandomPublicKey() - ] - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - RewardManagerProgram.createSenderPublicInstruction({ - senderEthAddress, - operatorEthAddress, - rewardManagerState, - authority, - payer, - sender, - existingSenders, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }) - ]), - InvalidRelayInstructionError, - 'invalid reward manager for createSenderPublic' - ) - - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - RewardManagerProgram.createSubmitAttestationInstruction({ - disbursementId, - attestations, - rewardManagerState, - authority, - payer, - sender, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }) - ]), - InvalidRelayInstructionError, - 'invalid reward manager for submitAttestation' - ) - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - RewardManagerProgram.createEvaluateAttestationsInstruction({ - disbursementId, - recipientEthAddress, - amount: BigInt(100), - attestations, - rewardManagerState, - authority, - rewardManagerTokenSource, - destinationUserBank, - disbursementAccount, - antiAbuseOracle, - payer, - tokenProgramId: TOKEN_PROGRAM_ID, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }) - ]), - InvalidRelayInstructionError, - 'invalid reward manager for evaluateAttestations' - ) - }) - - it('should not allow non-public instructions', async function () { - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - new TransactionInstruction({ - programId: REWARD_MANAGER_PROGRAM_ID, - keys: [], - data: Buffer.from([RewardManagerInstruction.Init]) - }) - ]), - 'reward manager init' - ) - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - new TransactionInstruction({ - programId: REWARD_MANAGER_PROGRAM_ID, - keys: [], - data: Buffer.from([RewardManagerInstruction.ChangeManagerAccount]) - }) - ]), - 'reward manager change manager account' - ) - // Some dummy eth addresses to make the encoder happy - const senderEthAddress = '0x1dc3070311552fce47e06db9f4f1328187f14c85' - const operatorEthAddress = '0x430ef095e4c5ac71a465b30d566bab0bb0985346' - const authority = getRandomPublicKey() - const payer = getRandomPublicKey() - const sender = getRandomPublicKey() - const rewardManagerState = getRandomPublicKey() - const manager = getRandomPublicKey() - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - RewardManagerProgram.createSenderInstruction({ - senderEthAddress, - operatorEthAddress, - rewardManagerState, - manager, - authority, - payer, - sender, - rewardManagerProgramId: REWARD_MANAGER_PROGRAM_ID - }) - ]), - 'reward manager create sender' - ) - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - new TransactionInstruction({ - programId: REWARD_MANAGER_PROGRAM_ID, - keys: [], - data: Buffer.from([RewardManagerInstruction.DeleteSender]) - }) - ]), - 'non public delete sender' - ) - }) - }) - - describe('Claimable Tokens Program', function () { - it('should allow claimable token program instructions with valid authority', async function () { - // Dummy eth address to make the encoder happy - const wallet = '0xe42b199d864489387bf64262874fc6472bcbc151' - const payer = getRandomPublicKey() - const mint = getRandomPublicKey() - const userBank = getRandomPublicKey() - const destination = getRandomPublicKey() - const nonceAccount = getRandomPublicKey() - const instructions = [ - ClaimableTokensProgram.createAccountInstruction({ - ethAddress: wallet, - payer, - mint, - authority: usdcClaimableTokenAuthority, - userBank, - programId: CLAIMABLE_TOKEN_PROGRAM_ID - }), - ClaimableTokensProgram.createTransferInstruction({ - payer, - sourceEthAddress: wallet, - sourceUserBank: userBank, - destination, - nonceAccount, - authority: usdcClaimableTokenAuthority, - programId: CLAIMABLE_TOKEN_PROGRAM_ID - }), - ClaimableTokensProgram.createAccountInstruction({ - ethAddress: wallet, - payer, - mint, - authority: audioClaimableTokenAuthority, - userBank, - programId: CLAIMABLE_TOKEN_PROGRAM_ID - }), - ClaimableTokensProgram.createTransferInstruction({ - payer, - sourceEthAddress: wallet, - sourceUserBank: userBank, - destination, - nonceAccount, - authority: audioClaimableTokenAuthority, - programId: CLAIMABLE_TOKEN_PROGRAM_ID - }) - ] - await assertRelayAllowedInstructions(instructions) - }) - - it('should not allow claimable token program instructions with invalid authority', async function () { - // Dummy eth addresse to make the encoder happy - const wallet = '0x36034724e7bda41d5142efd85e1f6773460f5679' - const payer = getRandomPublicKey() - const mint = getRandomPublicKey() - const authority = getRandomPublicKey() - const userBank = getRandomPublicKey() - const destination = getRandomPublicKey() - const nonceAccount = getRandomPublicKey() - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - ClaimableTokensProgram.createAccountInstruction({ - ethAddress: wallet, - payer, - mint, - authority, - userBank - }) - ]), - 'Invalid authority for create user bank' - ) - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - ClaimableTokensProgram.createTransferInstruction({ - payer, - sourceEthAddress: wallet, - sourceUserBank: userBank, - destination, - nonceAccount, - authority - }) - ]), - InvalidRelayInstructionError, - 'Invalid authority for transfer user bank' - ) - }) - }) - - describe('Jupiter Swap Program', function () { - it('should allow Jupiter sharedAccountsRoute swaps between USDC and SOL when authenticated', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const programAuthority = getRandomPublicKey() - const userTransferAuthority = getRandomPublicKey() - const sourceTokenAccount = getRandomPublicKey() - const programSourceTokenAccount = getRandomPublicKey() - const programDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: Buffer.from([ - 193, 32, 155, 51, 65, 214, 156, 129, 2, 1, 0, 0, 0, 3, 100, 0, 1, - 92, 161, 0, 0, 0, 0, 0, 0, 236, 52, 31, 0, 0, 0, 0, 0, 3, 0, 0 - ]), - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: programAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: sourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: usdcMintKey, - isSigner: false, - isWritable: false - }, - { - pubkey: NATIVE_MINT, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }) - }) - - it('should not allow Jupiter sharedAccountsRoute when not authenticated', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const programAuthority = getRandomPublicKey() - const userTransferAuthority = getRandomPublicKey() - const sourceTokenAccount = getRandomPublicKey() - const programSourceTokenAccount = getRandomPublicKey() - const programDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: Buffer.from([ - 193, 32, 155, 51, 65, 214, 156, 129, 2, 1, 0, 0, 0, 3, 100, 0, 1, - 92, 161, 0, 0, 0, 0, 0, 0, 236, 52, 31, 0, 0, 0, 0, 0, 3, 0, 0 - ]), - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: programAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: sourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: usdcMintKey, - isSigner: false, - isWritable: false - }, - { - pubkey: NATIVE_MINT, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assert.rejects( - async () => assertRelayAllowedInstructions(instructions), - InvalidRelayInstructionError, - 'Unauthorized' - ) - }) - - it('should not allow Jupiter sharedAccountsRoute swaps between other mints', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const programAuthority = getRandomPublicKey() - const userTransferAuthority = getRandomPublicKey() - const sourceTokenAccount = getRandomPublicKey() - const programSourceTokenAccount = getRandomPublicKey() - const programDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const randomDestinationMint = getRandomPublicKey() - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: Buffer.from([ - 193, 32, 155, 51, 65, 214, 156, 129, 2, 1, 0, 0, 0, 3, 100, 0, 1, - 92, 161, 0, 0, 0, 0, 0, 0, 236, 52, 31, 0, 0, 0, 0, 0, 3, 0, 0 - ]), - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: programAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: sourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: usdcMintKey, - isSigner: false, - isWritable: false - }, - { - pubkey: randomDestinationMint, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Invalid mints for swap' - ) - }) - - it('should not allow Jupiter sharedAccountsRoute swaps using the fee payer', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const programAuthority = getRandomPublicKey() - const userTransferAuthority = config.solanaFeePayerWallets[0].publicKey - const sourceTokenAccount = getRandomPublicKey() - const programSourceTokenAccount = getRandomPublicKey() - const programDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: Buffer.from([ - 193, 32, 155, 51, 65, 214, 156, 129, 2, 1, 0, 0, 0, 3, 100, 0, 1, - 92, 161, 0, 0, 0, 0, 0, 0, 236, 52, 31, 0, 0, 0, 0, 0, 3, 0, 0 - ]), - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: programAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: sourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: programDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: usdcMintKey, - isSigner: false, - isWritable: false - }, - { - pubkey: NATIVE_MINT, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Invalid user transfer authority' - ) - }) - - it('should allow Jupiter route instruction swaps when authenticated', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const userTransferAuthority = getRandomPublicKey() - const userSourceTokenAccount = getRandomPublicKey() - const userDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const platformFeeAccount = getRandomPublicKey() - const eventAuthority = getRandomPublicKey() - const program = getRandomPublicKey() - - // Create route instruction with proper discriminant - const routeInstructionData = Buffer.concat([ - JUPITER_ROUTE_DISCRIMINANT, - Buffer.alloc(32) // Additional instruction data - ]) - - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: routeInstructionData, - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: userSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: userDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: NATIVE_MINT, // destination mint - isSigner: false, - isWritable: false - }, - { - pubkey: platformFeeAccount, - isSigner: false, - isWritable: false - }, - { - pubkey: eventAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: program, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }) - }) - - it('should not allow Jupiter route instruction swaps to invalid destination mints', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const userTransferAuthority = getRandomPublicKey() - const userSourceTokenAccount = getRandomPublicKey() - const userDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const platformFeeAccount = getRandomPublicKey() - const eventAuthority = getRandomPublicKey() - const program = getRandomPublicKey() - const invalidDestinationMint = getRandomPublicKey() - - // Create route instruction with proper discriminant - const routeInstructionData = Buffer.concat([ - JUPITER_ROUTE_DISCRIMINANT, - Buffer.alloc(32) // Additional instruction data - ]) - - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: routeInstructionData, - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: userSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: userDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: invalidDestinationMint, // invalid destination mint - isSigner: false, - isWritable: false - }, - { - pubkey: platformFeeAccount, - isSigner: false, - isWritable: false - }, - { - pubkey: eventAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: program, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Invalid destination mint' - ) - }) - - it('should not allow Jupiter route instruction when using fee payer as transfer authority', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const userTransferAuthority = config.solanaFeePayerWallets[0].publicKey - const userSourceTokenAccount = getRandomPublicKey() - const userDestinationTokenAccount = getRandomPublicKey() - const destinationTokenAccount = getRandomPublicKey() - const platformFeeAccount = getRandomPublicKey() - const eventAuthority = getRandomPublicKey() - const program = getRandomPublicKey() - - // Create route instruction with proper discriminant - const routeInstructionData = Buffer.concat([ - JUPITER_ROUTE_DISCRIMINANT, - Buffer.alloc(32) // Additional instruction data - ]) - - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: routeInstructionData, - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: userSourceTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: userDestinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: destinationTokenAccount, - isSigner: false, - isWritable: true - }, - { - pubkey: NATIVE_MINT, // destination mint - isSigner: false, - isWritable: false - }, - { - pubkey: platformFeeAccount, - isSigner: false, - isWritable: false - }, - { - pubkey: eventAuthority, - isSigner: false, - isWritable: false - }, - { - pubkey: program, - isSigner: false, - isWritable: false - } - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Invalid transfer authority' - ) - }) - - it('should not allow Jupiter instructions with unknown discriminants', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const userTransferAuthority = getRandomPublicKey() - const userSourceTokenAccount = getRandomPublicKey() - - // Create instruction with unknown discriminant - const unknownInstructionData = Buffer.concat([ - Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]), // Unknown discriminant - Buffer.alloc(32) // Additional instruction data - ]) - - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: unknownInstructionData, - keys: [ - { - pubkey: TOKEN_PROGRAM_ID, - isSigner: false, - isWritable: false - }, - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - }, - { - pubkey: userSourceTokenAccount, - isSigner: false, - isWritable: true - } - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Unknown Instruction Type' - ) - }) - - it('should handle Jupiter instructions with insufficient data length', async function () { - const JUPITER_AGGREGATOR_V6_PROGRAM_ID = new PublicKey( - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' - ) - const userTransferAuthority = getRandomPublicKey() - - // Create instruction with insufficient data (less than 8 bytes for discriminant) - const shortInstructionData = Buffer.from([1, 2, 3]) // Only 3 bytes - - const instructions = [ - new TransactionInstruction({ - programId: JUPITER_AGGREGATOR_V6_PROGRAM_ID, - data: shortInstructionData, - keys: [ - { - pubkey: userTransferAuthority, - isSigner: true, - isWritable: true - } - ] - }) - ] - - await assert.rejects( - async () => - assertRelayAllowedInstructions(instructions, { - user: { - wallet: 'something', - is_verified: false - } - }), - InvalidRelayInstructionError, - 'Unknown Instruction Type' - ) - }) - }) - - describe('System Program', function () { - it('should allow transfers when authenticated', async function () { - const feePayer = getRandomPublicKey() - const fromPubkey = getRandomPublicKey() - const toPubkey = getRandomPublicKey() - // Dummy eth address, no significance - const wallet = '0x36034724e7bda41d5142efd85e1f6773460f5679' - await assertRelayAllowedInstructions( - [ - SystemProgram.transfer({ - fromPubkey, - toPubkey, - lamports: 1 - }) - ], - { user: { wallet, is_verified: false }, feePayer: feePayer.toBase58() } - ) - }) - - it('should not allow transfers when not authenticated', async function () { - const fromPubkey = getRandomPublicKey() - const toPubkey = getRandomPublicKey() - await assert.rejects(async () => - assertRelayAllowedInstructions([ - SystemProgram.transfer({ - fromPubkey, - toPubkey, - lamports: 1 - }) - ]) - ) - }) - - it('should not allow transfers from the feePayer', async function () { - const wallet = '0x36034724e7bda41d5142efd85e1f6773460f5679' - const feePayer = getRandomPublicKey() - const toPubkey = getRandomPublicKey() - await assert.rejects(async () => - assertRelayAllowedInstructions( - [ - SystemProgram.transfer({ - fromPubkey: feePayer, - toPubkey, - lamports: 1 - }) - ], - - { - user: { wallet, is_verified: false }, - feePayer: feePayer.toBase58() - } - ) - ) - }) - - it('should not allow other system instructions', async function () { - const wallet = '0x36034724e7bda41d5142efd85e1f6773460f5679' - const feePayer = getRandomPublicKey() - const fromPubkey = getRandomPublicKey() - const newAccountPubkey = getRandomPublicKey() - const programId = getRandomPublicKey() - await assert.rejects(async () => - assertRelayAllowedInstructions( - [ - SystemProgram.createAccount({ - fromPubkey, - newAccountPubkey, - programId, - lamports: 1, - space: 0 - }) - ], - - { - user: { wallet, is_verified: false }, - feePayer: feePayer.toBase58() - } - ) - ) - }) - }) - - describe('Other Programs', function () { - it('allows memo instructions', async function () { - await assertRelayAllowedInstructions([ - new TransactionInstruction({ programId: MEMO_PROGRAM_ID, keys: [] }), - new TransactionInstruction({ programId: MEMO_V2_PROGRAM_ID, keys: [] }) - ]) - }) - - it('allows valid secp256k1 instructions', async function () { - await assertRelayAllowedInstructions([ - Secp256k1Program.createInstructionWithEthAddress({ - // Dummy eth address to make the encoder happy - ethAddress: '0x8fcfa10bd3808570987dbb5b1ef4ab74400fbfda', - message: Buffer.from( - '68d5397bb16195ea47091010f3abb8fc6b5cdfa65f00e1f505000000005f623a33383639383d3e3530373431303135335f00b6462e955da5841b6d9e1e2529b830f00f31bf', - 'hex' - ), - signature: Buffer.from( - 'f89b2e6f97f95f1306b468b10b1a18df9569b07d9d7b81b241d6fc99d9ec782e4e449f5c3c63836ed52c9344d3de5c3133fead711e421af545822f09bd78cb39', - 'hex' - ), - recoveryId: 0 - }) - ]) - }) - - it('rejects invalid secp256k1 instructions', async function () { - await assert.rejects(async () => - assertRelayAllowedInstructions([ - Secp256k1Program.createInstructionWithEthAddress({ - // Dummy eth address to make the encoder happy - ethAddress: '0x00b6462e955da5841b6d9e1e2529b830f00f31bf', - message: Buffer.from( - '81729dc83c157f41de7df4b72fc7e90d8d64d5aa5f00e1f505000000005f72656665727265643a353339343735333137', - 'hex' - ), - signature: Buffer.from( - '00d405b277dc948f97d7b7db8648cb16590d66084ba49642fedb08380ce5027a95d0a895287a3331332e7ad13daba87eed5c70820a19ca2eb6cc0ea1eb4695ba', - 'hex' - ), - recoveryId: 0 - }) - ]) - ) - }) - - it('does not allow other random programs', async function () { - await assert.rejects( - async () => - assertRelayAllowedInstructions([ - new TransactionInstruction({ - programId: getRandomPublicKey(), - keys: [] - }) - ]), - InvalidRelayInstructionError, - 'random program' - ) - }) - }) -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/assertRelayAllowedInstructions.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/assertRelayAllowedInstructions.ts deleted file mode 100644 index f890ea6d93b..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/assertRelayAllowedInstructions.ts +++ /dev/null @@ -1,722 +0,0 @@ -import crypto from 'crypto' - -import { - ClaimableTokensProgram, - RewardManagerProgram, - Secp256k1Program, - decodeAssociatedTokenAccountInstruction, - isCreateAssociatedTokenAccountIdempotentInstruction, - isCreateAssociatedTokenAccountInstruction -} from '@audius/spl' -import { Users } from '@pedalboard/storage' -import { - ASSOCIATED_TOKEN_PROGRAM_ID, - NATIVE_MINT, - TOKEN_PROGRAM_ID, - decodeInstruction, - getAssociatedTokenAddressSync, - isCloseAccountInstruction, - isSyncNativeInstruction, - isTransferCheckedInstruction, - isTransferInstruction -} from '@solana/spl-token' -import { - ComputeBudgetProgram, - PublicKey, - SystemInstruction, - SystemProgram, - TransactionInstruction -} from '@solana/web3.js' - -import { config } from '../../config' -import { rateLimitTokenAccountCreation } from '../../redis' -import { getConnection } from '../../utils/connections' - -import { InvalidRelayInstructionError } from './InvalidRelayInstructionError' -import { isUserAbusive } from './antiAbuse' -import { getAllowedMints } from './getAllowedMints' - -const MEMO_PROGRAM_ID = 'Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo' -const DBC_PROGRAM_ID = 'dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN' -const DAMM_V2_PROGRAM_ID = 'cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG' -const MEMO_V2_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr' -const PAYOUT_WALLET_MEMO = 'Payout Wallet' -const PREPARE_WITHDRAWAL_MEMO = 'Prepare Withdrawal' -const CLAIMABLE_TOKEN_PROGRAM_ID = config.claimableTokenProgramId -const REWARDS_MANAGER_PROGRAM_ID = config.rewardsManagerProgramId -const TRACK_LISTEN_COUNT_PROGRAM_ID = config.trackListenCountProgramId -const PAYMENT_ROUTER_PROGRAM_ID = config.paymentRouterProgramId -const JUPITER_AGGREGATOR_V6_PROGRAM_ID = - 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4' -const COINFLOW_PROGRAM_ID = 'FD1amxhTsDpwzoVX41dxp2ygAESURV2zdUACzxM1Dfw9' - -const usdcMintAddress = config.usdcMintAddress - -const REWARD_MANAGER = config.rewardsManagerAccountAddress - -const PAYMENT_ROUTER_WALLET = PublicKey.findProgramAddressSync( - [Buffer.from('payment_router')], - new PublicKey(PAYMENT_ROUTER_PROGRAM_ID) -)[0] - -const PAYMENT_ROUTER_USDC_TOKEN_ACCOUNT = getAssociatedTokenAddressSync( - new PublicKey(usdcMintAddress), - PAYMENT_ROUTER_WALLET, - true -) - -const findSpecificMemo = ( - instructions: TransactionInstruction[], - memo: string -) => { - for (const instruction of instructions) { - if ( - instruction.programId.toBase58() === MEMO_PROGRAM_ID && - instruction.data.toString() === memo - ) { - return instruction.data.toString() - } - } - return null -} - -/** Standard SPL token account data size (bytes) */ -const TOKEN_ACCOUNT_SIZE = 165 - -/** - * Returns true if the tx contains an instruction that sends >= rent exemption - * lamports to the fee payer (System Transfer or Token CloseAccount). - */ -const feePayerReceivesRentExemptionOrMore = ( - instructions: TransactionInstruction[], - feePayer: string, - rentExemptionTokenAccountLamports: number -): boolean => { - for (const instr of instructions) { - if (instr.programId.equals(SystemProgram.programId)) { - try { - const type = SystemInstruction.decodeInstructionType(instr) - if (type === 'Transfer') { - const decoded = SystemInstruction.decodeTransfer(instr) - if ( - decoded.toPubkey.toBase58() === feePayer && - decoded.lamports >= rentExemptionTokenAccountLamports - ) { - return true - } - } - } catch { - /* skip invalid */ - } - } else if (instr.programId.equals(TOKEN_PROGRAM_ID)) { - try { - const decoded = decodeInstruction(instr) - if ( - isCloseAccountInstruction(decoded) && - decoded.keys.destination.pubkey.toBase58() === feePayer - ) { - return true - } - } catch { - /* skip invalid */ - } - } - } - return false -} - -/** - * Counts fee-payer-funded ATA creates that have no matching close. - */ -const countUnmatchedFeePayerCreates = ( - instructions: TransactionInstruction[], - feePayer: string -): number => { - const feePayerCreatesWithoutClose: Set = new Set() - const allAtaCreates: Array<{ associatedToken: PublicKey; payer: PublicKey }> = - [] - - for (const instr of instructions) { - if (!instr.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) continue - try { - const decoded = decodeAssociatedTokenAccountInstruction(instr) - if ( - isCreateAssociatedTokenAccountInstruction(decoded) || - isCreateAssociatedTokenAccountIdempotentInstruction(decoded) - ) { - const payer = decoded.keys.payer.pubkey.toBase58() - if (payer === feePayer) { - allAtaCreates.push({ - associatedToken: decoded.keys.associatedToken.pubkey, - payer: decoded.keys.payer.pubkey - }) - } - } - } catch { - /* skip */ - } - } - - for (const create of allAtaCreates) { - const hasMatchingClose = instructions.some((instr) => { - if (!instr.programId.equals(TOKEN_PROGRAM_ID)) return false - try { - const decoded = decodeInstruction(instr) - return ( - isCloseAccountInstruction(decoded) && - create.associatedToken.equals(decoded.keys.account.pubkey) && - create.payer.equals(decoded.keys.destination.pubkey) - ) - } catch { - return false - } - }) - if (!hasMatchingClose) { - feePayerCreatesWithoutClose.add(create.associatedToken.toBase58()) - } - } - return feePayerCreatesWithoutClose.size -} - -/** - * Only allow the createTokenAccount instruction of the Associated Token - * Account program, provided it has matching close instructions. - * Close instructions are on the Token Programand are not validated here. - */ -const assertAllowedAssociatedTokenAccountProgramInstruction = async ( - instructionIndex: number, - instruction: TransactionInstruction, - instructions: TransactionInstruction[], - rentExemptionTokenAccountLamports: number, - user?: Pick | null, - feePayer?: string | null -) => { - const { wallet, is_verified: isVerified } = user ?? {} - const decodedInstruction = - decodeAssociatedTokenAccountInstruction(instruction) - if ( - isCreateAssociatedTokenAccountInstruction(decodedInstruction) || - isCreateAssociatedTokenAccountIdempotentInstruction(decodedInstruction) - ) { - const allowedMints = await getAllowedMints() - allowedMints.push( - NATIVE_MINT.toBase58() // Allow creating ATAs for SOL - ) - const mintAddress = decodedInstruction.keys.mint.pubkey.toBase58() - if (!allowedMints.includes(mintAddress)) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Mint not allowed for Associated Token Account program: ${mintAddress}` - ) - } - - // Allow creating associated tokens for the Payment Router - if ( - decodedInstruction.keys.owner.pubkey.toBase58() === - PAYMENT_ROUTER_WALLET.toBase58() - ) { - return - } - - // If the user pays for the create (not feePayer), there's no drain risk — allow without rate limit. - const createPayer = decodedInstruction.keys.payer.pubkey.toBase58() - if (feePayer && createPayer !== feePayer) { - return - } - - // Protect against feePayer drain by ensuring that there's always as - // many account close instructions as creates - const matchingCreateInstructions = instructions - .filter((instr) => instr.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID)) - .map(decodeAssociatedTokenAccountInstruction) - .filter( - (instr) => - (isCreateAssociatedTokenAccountInstruction(instr) || - isCreateAssociatedTokenAccountIdempotentInstruction(instr)) && - decodedInstruction.keys.associatedToken.pubkey.equals( - instr.keys.associatedToken.pubkey - ) && - decodedInstruction.keys.payer.pubkey.equals(instr.keys.payer.pubkey) - ) - const matchingCloseInstructions = instructions - .filter((instr) => instr.programId.equals(TOKEN_PROGRAM_ID)) - .map((instr) => decodeInstruction(instr)) - .filter( - (instr) => - isCloseAccountInstruction(instr) && - decodedInstruction.keys.associatedToken.pubkey.equals( - instr.keys.account.pubkey - ) && - decodedInstruction.keys.payer.pubkey.equals( - instr.keys.destination.pubkey - ) - ) - if ( - matchingCreateInstructions.length !== matchingCloseInstructions.length - ) { - // Reimbursement exception: allow exactly one fee-payer-funded create without - // matching close when fee payer receives >= rent exemption in the same tx. - if ( - feePayer && - feePayerReceivesRentExemptionOrMore( - instructions, - feePayer, - rentExemptionTokenAccountLamports - ) && - countUnmatchedFeePayerCreates(instructions, feePayer) === 1 - ) { - return - } - if (wallet) { - try { - let memo: string | undefined - if (findSpecificMemo(instructions, PAYOUT_WALLET_MEMO)) { - memo = PAYOUT_WALLET_MEMO - } else if (findSpecificMemo(instructions, PREPARE_WITHDRAWAL_MEMO)) { - memo = PREPARE_WITHDRAWAL_MEMO - } - const isAbusive = await isUserAbusive(wallet) - if (isAbusive) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'User is abusive' - ) - } - // In this situation, we could be losing SOL because the user is allowed to - // close their own ATA and reclaim the rent that we've fronted, so - // rate limit it cautiously. - await rateLimitTokenAccountCreation(wallet, !!isVerified, memo) - } catch (e) { - const error = e as Error - throw new InvalidRelayInstructionError( - instructionIndex, - error.message - ) - } - } else { - throw new InvalidRelayInstructionError( - instructionIndex, - `Mismatched number of create and close instructions for account: ${decodedInstruction.keys.associatedToken.pubkey.toBase58()}` - ) - } - } - } else { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Unsupported Associated Token Program instruction' - ) - } -} - -/** - * Allow normal transfers provided they are into userbanks, and allow - * close account instructions and sync native (to unwrap wSOL) instructions. - */ -const assertAllowedTokenProgramInstruction = async ( - instructionIndex: number, - instruction: TransactionInstruction, - wallet?: string | null -) => { - const decodedInstruction = decodeInstruction(instruction) - if ( - isTransferCheckedInstruction(decodedInstruction) || - isTransferInstruction(decodedInstruction) - ) { - if (!wallet) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Transfer Checked requires authentication` - ) - } - const destination = decodedInstruction.keys.destination.pubkey - const allowedMints = await getAllowedMints() - const validUserbanks = await Promise.all( - allowedMints.map(async (mint) => { - const authority = ClaimableTokensProgram.deriveAuthority({ - programId: new PublicKey(CLAIMABLE_TOKEN_PROGRAM_ID), - mint: new PublicKey(mint) - }) - const userbank = await ClaimableTokensProgram.deriveUserBank({ - ethAddress: wallet, - claimableTokensPDA: authority - }) - return userbank - }) - ) - validUserbanks.push(PAYMENT_ROUTER_USDC_TOKEN_ACCOUNT) - - // Check that destination is either a userbank or a payment router token account - if (!validUserbanks.some((userbank) => userbank.equals(destination))) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Invalid destination account: ${destination.toBase58()}` - ) - } - } else if ( - !isCloseAccountInstruction(decodedInstruction) && - !isSyncNativeInstruction(decodedInstruction) - ) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Unsupported Token Program instruction' - ) - } -} - -/** - * Checks that the Reward Manager account on the Reward Manager program - * matches the one in use on our deployed program. - */ -const assertAllowedRewardsManagerProgramInstruction = ( - instructionIndex: number, - instruction: TransactionInstruction -) => { - const decodedInstruction = RewardManagerProgram.decodeInstruction(instruction) - const rewardManager = - decodedInstruction.keys.rewardManagerState.pubkey.toBase58() - if (rewardManager !== REWARD_MANAGER) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Invalid Reward Manager Account: ${rewardManager}` - ) - } -} - -/** - * Checks that the claimable token program instruction uses one of the - * allowed mints by checking the authority. - */ -const assertAllowedClaimableTokenProgramInstruction = async ( - instructionIndex: number, - instruction: TransactionInstruction -) => { - const decodedInstruction = - ClaimableTokensProgram.decodeInstruction(instruction) - const authority = decodedInstruction.keys.authority.pubkey - const allowedMints = await getAllowedMints() - const authorities = allowedMints.map((mint) => - ClaimableTokensProgram.deriveAuthority({ - programId: new PublicKey(CLAIMABLE_TOKEN_PROGRAM_ID), - mint: new PublicKey(mint) - }) - ) - if (!authorities.some((auth) => auth.equals(authority))) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Invalid Claimable Token Authority: ${authority}` - ) - } -} - -/** - * Indexes of various accounts in a Jupiter V6 sharedAccountsRoute instruction. - * https://github.com/jup-ag/jupiter-cpi/blob/main/idl.json - */ -const JupiterSharedSwapAccountIndex = { - TOKEN_PROGRAM: 0, - PROGRAM_AUTHORITY: 1, - USER_TRANSFER_AUTHORITY: 2, - SOURCE_TOKEN_ACCOUNT: 3, - PROGRAM_SOURCE_TOKEN_ACCOUNT: 4, - PROGRAM_DESTINATION_TOKEN_ACCOUNT: 5, - DESTINATION_TOKEN_ACCOUNT: 6, - SOURCE_MINT: 7, - DESTINATION_MINT: 8, - PLATFORM_FEE_ACCOUNT: 9, - TOKEN_2022_PROGRAM: 10 -} - -/** - * Indexes of various accounts in a Jupiter V6 route instruction. - * https://github.com/jup-ag/jupiter-cpi/blob/main/idl.json - */ -const JupiterRouteAccountIndex = { - TOKEN_PROGRAM: 0, - USER_TRANSFER_AUTHORITY: 1, - USER_SOURCE_TOKEN_ACCOUNT: 2, - USER_DESTINATION_TOKEN_ACCOUNT: 3, - DESTINATION_TOKEN_ACCOUNT: 4, - DESTINATION_MINT: 5, - PLATFORM_FEE_ACCOUNT: 6, - EVENT_AUTHORITY: 7, - PROGRAM: 8 -} - -export const computeInstructionDiscriminant = ( - instructionName: string -): Buffer => { - const hash = crypto.createHash('sha256') - hash.update(`global:${instructionName}`) - return hash.digest().slice(0, 8) -} - -export const JUPITER_ROUTE_DISCRIMINANT = - computeInstructionDiscriminant('route') -export const JUPITER_SHARED_ACCOUNTS_ROUTE_DISCRIMINANT = - computeInstructionDiscriminant('shared_accounts_route') -export const JUPITER_EXACT_OUT_ROUTE_DISCRIMINANT = - computeInstructionDiscriminant('exact_out_route') -export const JUPITER_SHARED_ACCOUNTS_EXACT_OUT_ROUTE_DISCRIMINANT = - computeInstructionDiscriminant('shared_accounts_exact_out_route') - -const getJupiterInstructionType = ( - instruction: TransactionInstruction -): 'route' | 'sharedAccountRoute' | 'unknown' => { - if (instruction.data.length < 8) { - return 'unknown' - } - - const instructionDiscriminant = instruction.data.slice(0, 8) - - if ( - instructionDiscriminant.equals(JUPITER_ROUTE_DISCRIMINANT) || - instructionDiscriminant.equals(JUPITER_EXACT_OUT_ROUTE_DISCRIMINANT) - ) { - return 'route' - } - if ( - instructionDiscriminant.equals( - JUPITER_SHARED_ACCOUNTS_ROUTE_DISCRIMINANT - ) || - instructionDiscriminant.equals( - JUPITER_SHARED_ACCOUNTS_EXACT_OUT_ROUTE_DISCRIMINANT - ) - ) { - return 'sharedAccountRoute' - } - - return 'unknown' -} - -// Only allow swaps to SOL (for withdrawals) or USDC, AUDIO, or BONK (for userbank purchases) -const assertAllowedJupiterProgramInstruction = async ( - instructionIndex: number, - instruction: TransactionInstruction, - wallet?: string | null -) => { - if (!wallet) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Jupiter Swap requires authentication' - ) - } - - const instructionType = getJupiterInstructionType(instruction) - if (instructionType === 'unknown') { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Invalid Jupiter Program Instruction, Unknown Instruction Type' - ) - } - - let sourceMint: string | null = null - let destinationMint: string | null = null - let userWallet: string | null = null - - try { - if (instructionType === 'sharedAccountRoute') { - // Handle shared_accounts_route instruction - sourceMint = - instruction.keys[ - JupiterSharedSwapAccountIndex.SOURCE_MINT - ].pubkey.toBase58() - destinationMint = - instruction.keys[ - JupiterSharedSwapAccountIndex.DESTINATION_MINT - ].pubkey.toBase58() - userWallet = - instruction.keys[ - JupiterSharedSwapAccountIndex.USER_TRANSFER_AUTHORITY - ].pubkey.toBase58() - } else if (instructionType === 'route') { - // Handle route instruction - destinationMint = - instruction.keys[ - JupiterRouteAccountIndex.DESTINATION_MINT - ].pubkey.toBase58() - userWallet = - instruction.keys[ - JupiterRouteAccountIndex.USER_TRANSFER_AUTHORITY - ].pubkey.toBase58() - - // For route instructions, the source mint is not directly available in the accounts - // It would need to be derived from the user's source token account via RPC call - // For security and performance reasons, we skip source mint validation for route instructions - // but still validate the destination mint and user authority - } - } catch (error) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Failed to parse Jupiter ${instructionType} instruction: ${error instanceof Error ? error.message : 'Unknown error'}` - ) - } - - const allowedMints = await getAllowedMints() - allowedMints.push( - NATIVE_MINT.toBase58() // Allow swaps to/from SOL - ) - - if ( - instructionType === 'sharedAccountRoute' && - sourceMint && - !allowedMints.includes(sourceMint) - ) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Invalid source mint: ${sourceMint}` - ) - } - - if (destinationMint && !allowedMints.includes(destinationMint)) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Invalid destination mint: ${destinationMint}` - ) - } - - // Don't allow swaps on the feepayers - const feePayerAddresses = config.solanaFeePayerWallets.map((kp) => - kp.publicKey.toBase58() - ) - if (userWallet && feePayerAddresses?.includes(userWallet)) { - throw new InvalidRelayInstructionError( - instructionIndex, - `Invalid transfer authority: ${userWallet}` - ) - } -} - -const assertAllowedSystemProgramInstruction = ( - instructionIndex: number, - instruction: TransactionInstruction, - wallet?: string | null, - feePayer?: string -) => { - if (!wallet) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'System program requires authentication' - ) - } - if (!feePayer) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Invalid fee payer' - ) - } - const decodedInstructionType = - SystemInstruction.decodeInstructionType(instruction) - if (decodedInstructionType !== 'Transfer') { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Invalid System Program Instruction' - ) - } else { - const decodedInstruction = SystemInstruction.decodeTransfer(instruction) - if (decodedInstruction.fromPubkey.toBase58() === feePayer) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Invalid fromPubkey for transfer' - ) - } - } -} - -const assertValidSecp256k1ProgramInstruction = ( - instructionIndex: number, - instruction: TransactionInstruction -) => { - const decoded = Secp256k1Program.decode(instruction) - if (!Secp256k1Program.verifySignature(decoded)) { - throw new InvalidRelayInstructionError( - instructionIndex, - 'Invalid Secp256k1Program instruction' - ) - } -} - -/** - * Checks each of the instructions to make sure it's something we want to relay. - * The main goals of the checks are to ensure the feePayer isn't abused. - * Major checks include: - * - Checking the caller is interacting with our deployed versions of the programs - * - Checking the caller isn't creating token accounts that can be rent-drained - * - Checking the caller isn't interacting with non-Audius related programs - * @param instructions the instructions to check - * @param user the user, if signed in - * @param socialProofEnabled if social proof is enabled - * @throws {InvalidRelayInstructionError} if the instruction isn't supported - */ -export const assertRelayAllowedInstructions = async ( - instructions: TransactionInstruction[], - options?: { - user?: Pick - feePayer?: string - } -) => { - const connection = getConnection() - const rentExemptionTokenAccountLamports = - await connection.getMinimumBalanceForRentExemption(TOKEN_ACCOUNT_SIZE) - - for (let i = 0; i < instructions.length; i++) { - const instruction = instructions[i] - switch (instruction.programId.toBase58()) { - case ASSOCIATED_TOKEN_PROGRAM_ID.toBase58(): - await assertAllowedAssociatedTokenAccountProgramInstruction( - i, - instruction, - instructions, - rentExemptionTokenAccountLamports, - options?.user, - options?.feePayer - ) - break - case TOKEN_PROGRAM_ID.toBase58(): - await assertAllowedTokenProgramInstruction( - i, - instruction, - options?.user?.wallet - ) - break - case REWARDS_MANAGER_PROGRAM_ID: - assertAllowedRewardsManagerProgramInstruction(i, instruction) - break - case CLAIMABLE_TOKEN_PROGRAM_ID: - await assertAllowedClaimableTokenProgramInstruction(i, instruction) - break - case JUPITER_AGGREGATOR_V6_PROGRAM_ID: - await assertAllowedJupiterProgramInstruction( - i, - instruction, - options?.user?.wallet - ) - break - case SystemProgram.programId.toBase58(): - assertAllowedSystemProgramInstruction( - i, - instruction, - options?.user?.wallet, - options?.feePayer - ) - break - case Secp256k1Program.programId.toBase58(): - assertValidSecp256k1ProgramInstruction(i, instruction) - break - case PAYMENT_ROUTER_PROGRAM_ID: - case DBC_PROGRAM_ID: - case DAMM_V2_PROGRAM_ID: - case MEMO_PROGRAM_ID: - case MEMO_V2_PROGRAM_ID: - case TRACK_LISTEN_COUNT_PROGRAM_ID: - case ComputeBudgetProgram.programId.toBase58(): - case COINFLOW_PROGRAM_ID: - // All instructions of these programs are allowed - break - default: - throw new InvalidRelayInstructionError( - i, - `Unknown Program: ${instruction.programId.toBase58()}` - ) - } - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/associateExternalWallet.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/associateExternalWallet.ts deleted file mode 100644 index 57311aeb180..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/associateExternalWallet.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { AssociatedWallets, Table, WalletChain } from '@pedalboard/storage' -import { VersionedTransaction } from '@solana/web3.js' - -import { db } from '../../db' -import { logger } from '../../logger' - -export const associateExternalWallet = async ( - transaction: VersionedTransaction, - userId: number -) => { - try { - const wallet = transaction.message.staticAccountKeys[0] - // Check if wallet already exists for another user and remove it - const existingWallets = await db(Table.AssociatedWallets) - .where('wallet', '=', wallet) - .where('chain', '=', WalletChain.Sol) - .where('is_current', '=', true) - for (const existingWallet of existingWallets) { - if (existingWallet.user_id !== userId) { - // Remove wallet from other user - await db(Table.AssociatedWallets) - .where('id', '=', existingWallet.id) - .update({ is_current: false }) - } - } - - // Insert new wallet association - await db(Table.AssociatedWallets).insert({ - user_id: userId, - wallet: wallet.toBase58(), - chain: WalletChain.Sol, - is_current: true, - is_delete: false - }) - - return true - } catch (error) { - logger.error({ error }, 'Error associating external wallet') - return false - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/getAllowedMints.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/getAllowedMints.ts deleted file mode 100644 index bc478c89acb..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/getAllowedMints.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { ArtistCoins } from '@pedalboard/storage' - -import { config } from '../../config' -import { db } from '../../db' - -export const getAllowedMints = async (): Promise => { - const rows = await db('artist_coins').select('mint') - const artistCoinMints = rows.map((row) => row.mint) - return [config.usdcMintAddress, config.waudioMintAddress, ...artistCoinMints] -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/relay.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/relay.ts deleted file mode 100644 index 6d69bba3976..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/routes/relay/relay.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { RelayRequestBody } from '@audius/sdk' -import { - PublicKey, - TransactionMessage, - VersionedTransaction -} from '@solana/web3.js' -import bs58 from 'bs58' -import { Request, Response, NextFunction } from 'express' - -import { config } from '../../config' -import { BadRequestError, UnauthorizedError } from '../../errors' -import { connections } from '../../utils/connections' -import { - broadcastTransaction, - sendTransactionWithRetries -} from '../../utils/transaction' -import { verifySignatures } from '../../utils/verifySignatures' - -import { InvalidRelayInstructionError } from './InvalidRelayInstructionError' -import { assertRelayAllowedInstructions } from './assertRelayAllowedInstructions' -import { associateExternalWallet } from './associateExternalWallet' - -/** - * Gets the specified fee payer's key pair from the config. - * @param feePayerPublicKey the fee payer to find - * @returns the Keypair of the given fee payer or null if not found - */ -export const getFeePayerKeyPair = (feePayerPublicKey?: PublicKey) => { - if (!feePayerPublicKey) { - return null - } - return ( - config.solanaFeePayerWallets.find((kp) => - kp.publicKey.equals(feePayerPublicKey) - ) ?? null - ) -} - -/** - * Gets the lookup table account datas for the addresses given. - * @param lookupTableKeys the addresses of the lookup tables - * @returns the lookup table account data for each address - */ -const getLookupTableAccounts = async (lookupTableKeys: PublicKey[]) => { - return await Promise.all( - lookupTableKeys.map(async (accountKey) => { - const res = await connections[0].getAddressLookupTable(accountKey) - if (res.value === null) { - throw new Error(`Lookup table not found: ${accountKey.toBase58()}`) - } - return res.value - }) - ) -} - -/** - * The core Solana relay route, /solana/relay. - * - * This endpoint takes a transaction and some options in the POST body, - * and signs the transaction (if necessary) and sends it (with retry logic). - * If successful, it broadcasts the resulting transaction metadata to the - * other discovery nodes to help them save on RPC calls when indexing. - */ -export const relay = async ( - req: Request, - res: Response, - next: NextFunction -) => { - try { - const { - transaction: encodedTransaction, - confirmationOptions, - sendOptions - } = req.body - const commitment = confirmationOptions?.commitment ?? 'processed' - const connection = connections[0] - const strategy = - confirmationOptions?.strategy ?? (await connection.getLatestBlockhash()) - const decoded = Buffer.from(encodedTransaction, 'base64') - const transaction = VersionedTransaction.deserialize(decoded) - - const lookupTableAccounts = await getLookupTableAccounts( - transaction.message.addressTableLookups.map((k) => k.accountKey) - ) - const decompiled = TransactionMessage.decompile(transaction.message, { - addressLookupTableAccounts: lookupTableAccounts - }) - - const feePayerKey = decompiled.payerKey - const feePayerKeyPair = getFeePayerKeyPair(feePayerKey) - - if (feePayerKeyPair) { - res.locals.logger.info( - `Signing with fee payer '${feePayerKey.toBase58()}'` - ) - try { - // Only care about what the instructions are if signing/paying - await assertRelayAllowedInstructions(decompiled.instructions, { - user: res.locals.signerUser, - feePayer: feePayerKey.toBase58() - }) - } catch (e) { - if (e instanceof InvalidRelayInstructionError) { - throw new BadRequestError('Invalid relay instructions', { cause: e }) - } else { - throw e - } - } - transaction.sign([feePayerKeyPair]) - } else if (verifySignatures(transaction)) { - if (res.locals.signerUser?.user_id) { - res.locals.logger.info('Associating external wallet...') - await associateExternalWallet( - transaction, - res.locals.signerUser?.user_id - ) - } - res.locals.logger.info( - `Transaction already signed by '${feePayerKey.toBase58()}'` - ) - } else if (res.locals.signerUser) { - throw new BadRequestError( - `No fee payer for address '${feePayerKey?.toBase58()}' and signature missing or invalid` - ) - } else { - throw new UnauthorizedError() - } - const signature = bs58.encode(transaction.signatures[0]) - - const logger = res.locals.logger.child({ signature }) - logger.info( - { rpcEndpoints: connections.map((c) => c.rpcEndpoint) }, - 'Sending transaction...' - ) - const confirmationStrategy = { ...strategy, signature } - await sendTransactionWithRetries({ - transaction, - sendOptions, - commitment, - confirmationStrategy, - logger - }) - res.status(200).send({ signature }) - const responseTime = new Date().getTime() - res.locals.requestStartTime - logger.info({ responseTime, statusCode: res.statusCode }, 'response sent') - await broadcastTransaction({ logger, signature }) - next() - } catch (e) { - next(e) - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/connections.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/connections.ts deleted file mode 100644 index 099a561f42b..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/connections.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Connection } from '@solana/web3.js' - -import { config } from '../config' - -export const normalizeEp = (ep: string): string => { - if (ep.startsWith('http')) { - return ep - } else { - const mep: string = Array.from(ep) - .filter((c, i) => i % Math.floor(ep.length / 6) !== 0) - .join('') - return Buffer.from(mep, 'base64').toString('utf-8') - } -} - -export const connections = config.solanaEndpoints.map( - (endpoint) => new Connection(normalizeEp(endpoint)) -) - -export const getConnection = (): Connection => { - const randomIndex = Math.floor(Math.random() * connections.length) - return connections[randomIndex] -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/delay.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/delay.ts deleted file mode 100644 index 02fd0e17fe2..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/delay.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const delay = async (ms: number, options?: { signal: AbortSignal }) => { - const signal = options?.signal - return new Promise((resolve, reject) => { - if (signal?.aborted) { - reject(new Error('Aborted')) - } - const listener = () => { - clearTimeout(timer) - reject(new Error('Timed out')) - } - const timer = setTimeout(() => { - signal?.removeEventListener('abort', listener) - resolve() - }, ms) - signal?.addEventListener('abort', listener) - }) -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/ipData.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/ipData.ts deleted file mode 100644 index d8239f301e3..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/ipData.ts +++ /dev/null @@ -1,64 +0,0 @@ -import axios from 'axios' -import { Request } from 'express' -import { Logger } from 'pino' -import { getClientIp } from 'request-ip' - -import { logger } from '../logger' - -export type LocationData = { - city: string - region: string - country: string -} | null - -// gets ip data from a validator node -export const getIpData = async ( - logger: Logger, - ip: string -): Promise => { - const url = `https://creatornode.audius.co/storage.v1.StorageService/GetIPData?ip=${ip}` - try { - const { data: response } = await axios.get(url) - return response - } catch (e: unknown) { - logger.error({ error: e }, 'error requesting ip data') - return null - } -} - -export const getRequestIpData = async ( - logger: Logger, - req: Request -): Promise => { - try { - const ip = getIP(req) - return await getIpData(logger, ip) - } catch (e) { - logger.error({ e }, 'error requesting ip data') - return null - } -} - -// Utility to gather the IP from an incoming express request. -// Prioritizes 'X-Forwarded-For' if it exists. Otherwise returns the request objects ip. -// Throws if neither can be found. -export const getIP = (req: Request): string => { - const clientIP = getClientIp(req) - // https://github.com/pbojinov/request-ip?tab=readme-ov-file#how-it-works - if (clientIP === null) { - throw new Error('could not find client ip') - } - return clientIP -} - -// Utility to gather the IP from an incoming express request. -// Prioritizes 'X-Forwarded-For' if it exists. Otherwise returns the request objects ip. -// Catches errors and returns an empty string as a default. -export const getIPwithDefault = (req: Request): string => { - try { - return getIP(req) - } catch (e) { - logger.error({ e }, 'could not get IP') - return '' - } -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/sortKeys.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/sortKeys.ts deleted file mode 100644 index ea83196935e..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/sortKeys.ts +++ /dev/null @@ -1,12 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const sortKeys = (x: any): any => { - if (typeof x !== 'object' || !x) { - return x - } - if (Array.isArray(x)) { - return x.map(sortKeys) - } - return Object.keys(x) - .sort() - .reduce((o, k) => ({ ...o, [k]: sortKeys(x[k]) }), {}) -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/transaction.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/transaction.ts deleted file mode 100644 index 6bef5b8f9d3..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/transaction.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { - Commitment, - Connection, - SendOptions, - SendTransactionError, - TransactionConfirmationStrategy, - VersionedTransaction, - type RpcResponseAndContext, - type SignatureStatus -} from '@solana/web3.js' -import fetch from 'cross-fetch' -import { personalSign } from 'eth-sig-util' -import { Logger } from 'pino' - -import { config } from '../config' -import { logger as defaultLogger } from '../logger' -import { cacheTransaction, getCachedDiscoveryNodes } from '../redis' - -import { connections, getConnection } from './connections' -import { delay } from './delay' - -const RETRY_DELAY_MS = 2 * 1000 -const CONFIRM_POLL_DELAY_MS = 5 * 1000 - -/** - * Forwards the transaction response to other Solana Relays on other discovery - * nodes so that they can cache it to lighten the RPC load on indexing. - */ -const forwardTransaction = async (logger: Logger, transaction: string) => { - const endpoints = await getCachedDiscoveryNodes() - logger.info(`Forwarding to ${endpoints.length} endpoints...`) - const body = JSON.stringify({ transaction }) - await Promise.all( - endpoints - .filter((p) => p.endpoint !== config.endpoint) - .map(({ endpoint }) => - fetch(`${endpoint}/solana/cache`, { - method: 'POST', - body, - headers: { - 'content-type': 'application/json', - 'Discovery-Signature': personalSign(config.delegatePrivateKey, { - data: body - }) - } - }) - .then((res) => { - if (res.ok) { - logger.info( - { endpoint, status: res.status }, - `Forwarded successfully` - ) - } else { - logger.warn( - { endpoint }, - `Failed to forward transaction to endpoint: ${res.statusText}` - ) - } - }) - .catch((e) => { - logger.warn( - { endpoint }, - `Failed to forward transaction to endpoint: ${e}` - ) - }) - ) - ) -} - -/** - * Checks that a confirmation status is considered confirmed based on the - * commitment level. - * - * @see {@link https://github.com/solana-foundation/solana-web3.js/blob/c26c13bf841821d9bbf83bb476c567fe29d13821/src/connection.ts#L3958-L3982} - */ -const isConfirmed = (value: SignatureStatus, commitment: Commitment) => { - switch (commitment) { - case 'confirmed': - case 'single': - case 'singleGossip': { - if (value.confirmationStatus === 'processed') { - return false - } - break - } - case 'finalized': - case 'max': - case 'root': { - if ( - value.confirmationStatus === 'processed' || - value.confirmationStatus === 'confirmed' - ) { - return false - } - break - } - // exhaust enums to ensure full coverage - case 'processed': - case 'recent': - } - return true -} - -/** - * Sends the transaction repeatedly to all configured RPCs until - * it's been confirmed with the given commitment level or the blockhash expires. - */ -export const sendTransactionWithRetries = async ({ - transaction, - commitment, - confirmationStrategy, - sendOptions, - logger -}: { - transaction: VersionedTransaction - commitment: Commitment - confirmationStrategy: TransactionConfirmationStrategy - sendOptions?: SendOptions - logger: Logger -}) => { - const serializedTx = transaction.serialize() - - let retryCount = 0 - const createRetryPromise = async (signal: AbortSignal): Promise => { - while (!signal.aborted) { - Promise.any( - connections.map((connection) => - connection.sendRawTransaction(serializedTx, { - skipPreflight: true, - maxRetries: 0, - ...sendOptions - }) - ) - ).catch((error) => { - logger.warn({ error, retryCount }, `Failed retry...`) - }) - await delay(RETRY_DELAY_MS) - retryCount++ - } - } - - const connection = connections[0] - const pollTransactionConfirmation = async ( - signal: AbortSignal, - signature: string, - commitment: Commitment - ) => { - while (!signal.aborted) { - try { - const connection = getConnection() - const res = await connection.getSignatureStatus(signature) - if (res.value) { - const value = res.value - if (isConfirmed(value, commitment)) { - logger.info({ signature }, 'Confirmed transaction via polling.') - return res as RpcResponseAndContext - } - } - } catch (error) { - logger.warn({ error }, `Failed to poll transaction confirmation...`) - } - await delay(CONFIRM_POLL_DELAY_MS) - } - } - - const start = Date.now() - const abortController = new AbortController() - let success = false - try { - if (!sendOptions?.skipPreflight) { - const simulatedRes = await connection.simulateTransaction(transaction, { - replaceRecentBlockhash: true - }) - if (simulatedRes.value.err) { - throw new SendTransactionError({ - action: 'simulate', - signature: confirmationStrategy.signature, - transactionMessage: JSON.stringify(simulatedRes.value.err), - logs: simulatedRes.value.logs ?? undefined - }) - } - } - - const res = await Promise.race([ - createRetryPromise(abortController.signal), - connection.confirmTransaction( - { ...confirmationStrategy, abortSignal: abortController.signal }, - commitment - ), - // `confirmTransaction` only works with websockets. Also poll in case the - // transaction succeeds but we miss the websocket event. - pollTransactionConfirmation( - abortController.signal, - confirmationStrategy.signature, - commitment - ) - ]) - - if (!res) { - throw new Error('Failed to get transaction confirmation result') - } - if (res.value.err) { - // Try one more time to confirm... - try { - const confirmationRes = await connection.getSignatureStatus( - confirmationStrategy.signature - ) - if ( - confirmationRes.value?.confirmationStatus === commitment && - !confirmationRes.value?.err - ) { - success = true - logger.info( - { signature: confirmationStrategy.signature }, - 'Confirmed transaction at final check.' - ) - return confirmationStrategy.signature - } - } catch (error) { - logger.error({ error }, `Failed to get final signature status check.`) - } - throw new SendTransactionError({ - action: 'send', - signature: confirmationStrategy.signature, - transactionMessage: JSON.stringify(res.value.err) - }) - } - success = true - return confirmationStrategy.signature - } finally { - // Stop the other operations - abortController.abort() - const end = Date.now() - const elapsedMs = end - start - logger.info( - { elapsedMs, retryCount, success }, - 'sendTransactionWithRetries completed.' - ) - } -} - -/** - * Confirms a transaction if skipConfirmation is false or not passed. Stores the given transaction in - * redis and then broadcasts it to all other discovery nodes using forwardTransaction. - */ -export const broadcastTransaction = async ({ - signature, - skipConfirmation = false, - logger -}: { - signature: string - skipConfirmation?: boolean - logger?: Logger -}) => { - logger = logger !== undefined ? logger : defaultLogger - const connection = getConnection() - if (!skipConfirmation) { - // Confirm, fetch, cache and forward after success response. - // The transaction may be confirmed from specifying commitment before, - // but that may have been a different RPC. So confirm again. - logger.info(`Confirming transaction before fetching...`) - const strategy = await connection.getLatestBlockhash() - const confirmationStrategy = { ...strategy, signature } - await connection.confirmTransaction(confirmationStrategy, 'confirmed') - } - logger.info('Fetching transaction for caching...') - // Dangerously relying on the internals of connection to do the fetch. - // Calling connection.getTransaction will result in the library parsing the - // results and getting us back our object again, but we need the raw JSON - // for Solders to know what we're talking about when indexing. - const rpcResponse = await ( - connection as Connection & { - _rpcRequest: ( - methodName: string, - args: Array - ) => Promise - } - )._rpcRequest('getTransaction', [ - signature, - { - maxSupportedTransactionVersion: 0, - commitment: 'confirmed', - encoding: 'json' - } - ]) - const formattedResponse = JSON.stringify(rpcResponse) - logger.info('Caching transaction...') - await cacheTransaction(signature, formattedResponse) - logger.info('Forwarding transaction to other nodes to cache...') - await forwardTransaction(logger, formattedResponse) -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/verifySignatures.test.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/verifySignatures.test.ts deleted file mode 100644 index 598c78632ce..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/verifySignatures.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { - Keypair, - PublicKey, - SystemProgram, - TransactionMessage, - VersionedTransaction -} from '@solana/web3.js' -import { describe, it, expect } from 'vitest' - -import { verifySignatures } from './verifySignatures' - -describe('verifySignatures', () => { - it('fails when signature is missing', () => { - const toPubkey = PublicKey.unique() - const fromPubkey = PublicKey.unique() - const recentBlockhash = PublicKey.unique().toBase58() - const transfer = SystemProgram.transfer({ - toPubkey, - fromPubkey, - lamports: 1 - }) - const message = new TransactionMessage({ - recentBlockhash, - instructions: [transfer], - payerKey: fromPubkey - }) - const transaction = new VersionedTransaction(message.compileToV0Message()) - expect(verifySignatures(transaction)).toBe(false) - }) - - it('passes when signature is valid', () => { - const toPubkey = PublicKey.unique() - const payer = Keypair.generate() - const fromPubkey = payer.publicKey - const recentBlockhash = PublicKey.unique().toBase58() - const transfer = SystemProgram.transfer({ - toPubkey, - fromPubkey, - lamports: 1 - }) - const message = new TransactionMessage({ - recentBlockhash, - instructions: [transfer], - payerKey: fromPubkey - }) - const transaction = new VersionedTransaction(message.compileToV0Message()) - transaction.sign([payer]) - expect(verifySignatures(transaction)).toBe(true) - }) - - it('fails when the signature is invalid', () => { - const toPubkey = PublicKey.unique() - const payer = Keypair.generate() - const fromPubkey = payer.publicKey - const recentBlockhash = PublicKey.unique().toBase58() - const transfer = SystemProgram.transfer({ - toPubkey, - fromPubkey, - lamports: 1 - }) - const message = new TransactionMessage({ - recentBlockhash, - instructions: [transfer], - payerKey: fromPubkey - }) - const transaction = new VersionedTransaction(message.compileToV0Message()) - transaction.sign([payer]) - transaction.message.compiledInstructions[0].data[0] = -1 - expect(verifySignatures(transaction)).toBe(false) - }) -}) diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/verifySignatures.ts b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/verifySignatures.ts deleted file mode 100644 index 6d3c01a35be..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/src/utils/verifySignatures.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ed25519 } from '@noble/curves/ed25519' -import { VersionedTransaction } from '@solana/web3.js' - -/** - * Checks that the transaction is signed - * - * TODO PAY-3106: Verify the signature is correct as well as non-empty. - * @see {@link https://github.com/solana-labs/solana-web3.js/blob/9344bbfa5dd68f3e15918ff606284373ae18911f/packages/library-legacy/src/transaction/legacy.ts#L767 verifySignatures} for Transaction in @solana/web3.js - * @param transaction the versioned transaction to check - * @returns false if missing a signature, true if all signatures are present. - */ -export const verifySignatures = (transaction: VersionedTransaction) => { - for (let i = 0; i < transaction.message.header.numRequiredSignatures; i++) { - const signature = transaction.signatures[i] - const publicKey = transaction.message.staticAccountKeys[i].toBuffer() - if ( - signature === undefined || - signature === null || - signature.every((b) => b === 0) - ) { - return false - } - const serialized = transaction.message.serialize() - const valid = ed25519.verify(signature, serialized, publicKey) - if (!valid) { - return false - } - } - return true -} diff --git a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/tsconfig.json b/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/tsconfig.json deleted file mode 100644 index 477b5f20e9a..00000000000 --- a/packages/discovery-provider/plugins/pedalboard/apps/solana-relay/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "lib": ["es2022"], - "module": "es2022", - "outDir": "./dist", - "rootDir": "./src" - }, - "exclude": ["node_modules"], - "extends": "../../packages/tsconfig/base.json", - "include": ["src"] -} diff --git a/packages/embed/.env.dev b/packages/embed/.env.dev index 64ff4943a5c..9ba9b8bcdb8 100644 --- a/packages/embed/.env.dev +++ b/packages/embed/.env.dev @@ -4,6 +4,6 @@ VITE_API_KEY=2dc52ec9a4c31790cab6653de0c637f680faa993 VITE_APP_NAME=audius-embed VITE_AUDIUS_SCHEME=http VITE_ENVIRONMENT=development -VITE_HOSTNAME_REDIRECT=redirect.staging.audius.co -VITE_IDENTITY_ENDPOINT=https://identityservice.staging.audius.co +VITE_HOSTNAME_REDIRECT=audius.co +VITE_IDENTITY_ENDPOINT=http://audius-identity-service-1 VITE_SOLANA_RPC_ENDPOINT=https://carolina-8qh733-fast-mainnet.helius-rpc.com diff --git a/packages/embed/.env.stage b/packages/embed/.env.stage deleted file mode 100644 index e7918d69c8e..00000000000 --- a/packages/embed/.env.stage +++ /dev/null @@ -1,10 +0,0 @@ -VITE_AMPLITUDE_API_PROXY=gain.audius.co -VITE_AMPLITUDE_KEY=72a58ce4ad1f9bafcba0b92bedb6c33d -VITE_API_KEY=2dc52ec9a4c31790cab6653de0c637f680faa993 -VITE_APP_NAME=audius-embed -VITE_AUDIUS_SCHEME=https -VITE_ENVIRONMENT=staging -VITE_HOSTNAME=staging.audius.co -VITE_HOSTNAME_REDIRECT=staging.audius.co -VITE_IDENTITY_ENDPOINT=https://identityservice.staging.audius.co -VITE_SOLANA_RPC_ENDPOINT=https://carolina-8qh733-fast-mainnet.helius-rpc.com diff --git a/packages/embed/.eslintignore b/packages/embed/.eslintignore index 15b3fa1dff6..08e3c2a2f79 100644 --- a/packages/embed/.eslintignore +++ b/packages/embed/.eslintignore @@ -2,5 +2,4 @@ **/assets/* build/* dist/* -build-staging/* build-production/* \ No newline at end of file diff --git a/packages/embed/.gitignore b/packages/embed/.gitignore index 79941b8da78..8e72a161857 100644 --- a/packages/embed/.gitignore +++ b/packages/embed/.gitignore @@ -4,5 +4,4 @@ node_modules /*.DS_Store build dist -build-staging build-production \ No newline at end of file diff --git a/packages/embed/README.md b/packages/embed/README.md index 2398cec3f88..09d7a680f79 100644 --- a/packages/embed/README.md +++ b/packages/embed/README.md @@ -11,7 +11,3 @@ npm run start:prod ## Deploying Deployed via CI - -``` -npx wrangler publish --env staging -``` diff --git a/packages/embed/src/util/logError.js b/packages/embed/src/util/logError.js index 816bf7a02e8..ef43b8bcb2f 100644 --- a/packages/embed/src/util/logError.js +++ b/packages/embed/src/util/logError.js @@ -7,5 +7,4 @@ export const logError = (...args) => { ) { console.error(args) } - // TODO: Add Sentry logging } diff --git a/packages/harmony/src/assets/icons/Cast.svg b/packages/harmony/src/assets/icons/Cast.svg new file mode 100644 index 00000000000..77f171e3475 --- /dev/null +++ b/packages/harmony/src/assets/icons/Cast.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/harmony/src/components/scrollbar/Scrollbar.tsx b/packages/harmony/src/components/scrollbar/Scrollbar.tsx index ad682801266..5960bbc95cf 100644 --- a/packages/harmony/src/components/scrollbar/Scrollbar.tsx +++ b/packages/harmony/src/components/scrollbar/Scrollbar.tsx @@ -43,7 +43,7 @@ export const Scrollbar = forwardRef( // useMeasure ref is required for infinite scrolling to work const [ref] = useMeasure({ polyfill: ResizeObserver }) const containerRef = useRef(null) - const timerRef = useRef(null) + const timerRef = useRef | null>(null) const reactId = useId() const elementId = id || reactId diff --git a/packages/harmony/src/components/tooltip/Tooltip.tsx b/packages/harmony/src/components/tooltip/Tooltip.tsx index 7b0a2c4c166..d3b4049bd44 100644 --- a/packages/harmony/src/components/tooltip/Tooltip.tsx +++ b/packages/harmony/src/components/tooltip/Tooltip.tsx @@ -156,8 +156,8 @@ export const Tooltip = ({ const triggerRef = useRef(null) const tooltipRef = useRef(null) - const enterDelayTimerRef = useRef(null) - const leaveDelayTimerRef = useRef(null) + const enterDelayTimerRef = useRef | null>(null) + const leaveDelayTimerRef = useRef | null>(null) const mousedOverRef = useRef(false) // Handle mouse enter with delay diff --git a/packages/harmony/src/hooks/useHoverDelay.ts b/packages/harmony/src/hooks/useHoverDelay.ts index 0a7ce1d6892..de0dcdce1fb 100644 --- a/packages/harmony/src/hooks/useHoverDelay.ts +++ b/packages/harmony/src/hooks/useHoverDelay.ts @@ -15,7 +15,7 @@ export const useHoverDelay = ( ) => { const [isHovered, setIsHovered] = useState(false) const [isClicked, setIsClicked] = useState(false) - const timerRef = useRef(null) + const timerRef = useRef | null>(null) // Clean up the timer when component unmounts useEffect(() => { diff --git a/packages/harmony/src/icons/icons.tsx b/packages/harmony/src/icons/icons.tsx index 1104bc4daea..327626072c3 100644 --- a/packages/harmony/src/icons/icons.tsx +++ b/packages/harmony/src/icons/icons.tsx @@ -53,6 +53,7 @@ export { IconCart } from './individual/IconCart' export { IconMessages } from './individual/IconMessages' export { IconMessage } from './individual/IconMessage' export { IconStar } from './individual/IconStar' +export { IconCast } from './individual/IconCast' export { IconCastAirplay } from './individual/IconCastAirplay' export { IconMessageBlock } from './individual/IconMessageBlock' export { IconMessageSlash } from './individual/IconMessageSlash' diff --git a/packages/harmony/src/icons/individual/IconCast.ts b/packages/harmony/src/icons/individual/IconCast.ts new file mode 100644 index 00000000000..4116223f46a --- /dev/null +++ b/packages/harmony/src/icons/individual/IconCast.ts @@ -0,0 +1,5 @@ +import { IconComponent } from '~harmony/components' + +import IconSVG from '../../assets/icons/Cast.svg' + +export const IconCast = IconSVG as IconComponent diff --git a/packages/identity-service/default-config.json b/packages/identity-service/default-config.json index 8c674097101..c08a7aa3583 100644 --- a/packages/identity-service/default-config.json +++ b/packages/identity-service/default-config.json @@ -63,7 +63,6 @@ "recaptchaServiceKey": "", "hCaptchaSecret": "", "solanaFeePayerWallets": "[]", - "sentryDSN": "", "solanaEndpoint": "https://api.mainnet-beta.solana.com", "solanaEndpointListensProgram": "https://api.mainnet-beta.solana.com", "stripeSecretKey": "" diff --git a/packages/identity-service/package.json b/packages/identity-service/package.json index cc581485aef..3fcc625b546 100644 --- a/packages/identity-service/package.json +++ b/packages/identity-service/package.json @@ -4,7 +4,7 @@ "description": "", "main": "src/index.js", "engines": { - "node": "~14.0.0" + "node": ">=18.0.0" }, "keywords": [], "author": "", @@ -29,7 +29,6 @@ "@audius/sdk-legacy": "*", "@audius/spl": "*", "@certusone/wormhole-sdk": "0.1.1", - "@fingerprintjs/fingerprintjs-pro-server-api": "4.1.2", "@improbable-eng/grpc-web-node-http-transport": "0.15.0", "@opentelemetry/api": "1.3.0", "@opentelemetry/instrumentation": "0.31.0", @@ -42,7 +41,6 @@ "@optimizely/optimizely-sdk": "4.6.0", "@sendgrid/client": "7.7.0", "@sendgrid/mail": "7.7.0", - "@sentry/node": "6.2.5", "@solana/buffer-layout": "4.0.1", "@solana/buffer-layout-utils": "0.2.0", "@solana/spl-token": "0.3.8", diff --git a/packages/identity-service/sequelize/migrations/20260519000000-drop-fingerprints.js b/packages/identity-service/sequelize/migrations/20260519000000-drop-fingerprints.js new file mode 100644 index 00000000000..2e8b8f732b5 --- /dev/null +++ b/packages/identity-service/sequelize/migrations/20260519000000-drop-fingerprints.js @@ -0,0 +1,41 @@ +'use strict' + +module.exports = { + up: (queryInterface) => { + return queryInterface.dropTable('Fingerprints') + }, + + down: (queryInterface, Sequelize) => { + return queryInterface + .createTable('Fingerprints', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + userId: { + type: Sequelize.INTEGER, + allowNull: false + }, + visitorId: { + type: Sequelize.STRING, + allowNull: false + }, + origin: { + type: Sequelize.ENUM('web', 'mobile', 'desktop'), + allowNull: false + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }) + .then(() => queryInterface.addIndex('Fingerprints', ['userId'])) + .then(() => queryInterface.addIndex('Fingerprints', ['visitorId'])) + } +} diff --git a/packages/identity-service/src/app.js b/packages/identity-service/src/app.js index fe5c35bfd56..1f0ed4b5c01 100644 --- a/packages/identity-service/src/app.js +++ b/packages/identity-service/src/app.js @@ -4,9 +4,7 @@ const cookieParser = require('cookie-parser') const sgMail = require('@sendgrid/mail') const sgClient = require('@sendgrid/client') const { redisClient, Lock } = require('./redis') -const { createFpClient } = require('./fpClient') const optimizelySDK = require('@optimizely/optimizely-sdk') -const Sentry = require('@sentry/node') const cluster = require('cluster') const config = require('./config.js') const txRelay = require('./relay/txRelay') @@ -36,8 +34,6 @@ class App { this.port = port this.express = express() this.redisClient = redisClient - this.fpClient = createFpClient(config.get('fpServerApiKey')) - this.configureSentry() this.configureSendGrid() this.optimizelyPromise = null @@ -140,7 +136,6 @@ class App { server.headersTimeout = config.get('headersTimeout') this.express.set('redis', this.redisClient) - this.express.set('fpClient', this.fpClient) logger.info(`Listening on port ${this.port}...`) return { app: this.express, server } @@ -160,15 +155,6 @@ class App { ) } - configureSentry() { - const dsn = config.get('sentryDSN') - if (dsn) { - Sentry.init({ - dsn - }) - } - } - configureOptimizely() { const sdkKey = config.get('optimizelySdkKey') const optimizelyClientInstance = optimizelySDK.createInstance({ @@ -400,7 +386,6 @@ class App { function errorHandler(err, req, res, next) { req.logger.error('Internal server error') req.logger.error(err.stack) - Sentry.captureException(err) sendResponse(req, res, errorResponseServerError('Internal server error')) } this.express.use(errorHandler) diff --git a/packages/identity-service/src/config.js b/packages/identity-service/src/config.js index 542aad789f6..4ef9c60c7b5 100644 --- a/packages/identity-service/src/config.js +++ b/packages/identity-service/src/config.js @@ -695,12 +695,6 @@ const config = convict({ default: '', env: 'aaoAddress' }, - sentryDSN: { - doc: 'Sentry DSN key', - format: String, - env: 'sentryDSN', - default: '' - }, ethGasMultiplier: { doc: 'Constant value to multiply the configured FAST gas price by - in order to optimize tx success', format: Number, @@ -833,12 +827,6 @@ const config = convict({ env: 'solanaUSDCMintAddress', default: '' }, - fpServerApiKey: { - doc: 'API key for requesting visitorId information', - format: String, - env: 'fpServerApiKey', - default: '' - }, useDiscoveryListens: { doc: 'Forward listen requests to discovery', format: Boolean, diff --git a/packages/identity-service/src/fpClient.js b/packages/identity-service/src/fpClient.js deleted file mode 100644 index facd6dcab82..00000000000 --- a/packages/identity-service/src/fpClient.js +++ /dev/null @@ -1,22 +0,0 @@ -const { - FingerprintJsServerApiClient, - Region -} = require('@fingerprintjs/fingerprintjs-pro-server-api') - -const { logger } = require('./logging') - -const createFpClient = (apiKey) => { - if (!apiKey) { - logger.warn('API Key not set for fpClient') - return null - } else { - return new FingerprintJsServerApiClient({ - apiKey, - region: Region.Global - }) - } -} - -module.exports = { - createFpClient -} diff --git a/packages/identity-service/src/models/fingerprint.js b/packages/identity-service/src/models/fingerprint.js deleted file mode 100644 index 6a3a62e11ed..00000000000 --- a/packages/identity-service/src/models/fingerprint.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict' - -module.exports = (sequelize, DataTypes) => { - const Fingerprints = sequelize.define( - 'Fingerprints', - { - id: { - type: DataTypes.INTEGER, - allowNull: false, - autoIncrement: true, - primaryKey: true - }, - userId: { - type: DataTypes.INTEGER, - allowNull: false, - index: true - }, - visitorId: { - type: DataTypes.STRING, - allowNull: false, - index: true - }, - origin: { - type: DataTypes.ENUM({ - values: ['web', 'mobile', 'desktop'], - allowNull: false - }) - } - }, - {} - ) - - return Fingerprints -} diff --git a/packages/identity-service/src/routes/authentication.js b/packages/identity-service/src/routes/authentication.js index 62828cbc1c6..712a7fc6de9 100644 --- a/packages/identity-service/src/routes/authentication.js +++ b/packages/identity-service/src/routes/authentication.js @@ -17,7 +17,6 @@ const { getWalletAssociatedEmail, associateWalletAddressWithUser } = require('../utils/walletAssociation') -const { validateFingerprint } = require('../utils/fpHelpers') const authMiddleware = require('../authMiddleware') const EncodedDataMessageHeader = 'encoded-data-message' @@ -227,13 +226,7 @@ module.exports = function (app) { app.get( '/authentication', handleResponse(async (req, res, next) => { - const { - lookupKey, - email: emailParam, - username, - visitorId, - otp - } = req.query + const { lookupKey, email: emailParam, username, otp } = req.query let email = emailParam ?? username if (!lookupKey) { return errorResponseBadRequest('Missing lookupKey') @@ -258,7 +251,7 @@ module.exports = function (app) { req.logger.error('Missing sendgrid api key') } - const otpRequired = await requiresOtp({ email, visitorId }) + const otpRequired = await requiresOtp({ email }) if (!otpRequired) { return successResponse(existingUser) } else if (!otp) { @@ -292,9 +285,6 @@ module.exports = function (app) { return errorResponseBadRequest('Invalid credentials') } - // async - validateFingerprint({ req, email, visitorId }) - if (existingUser.walletAddress === null) { await associateWalletAddressWithUser({ req, diff --git a/packages/identity-service/src/routes/fp.js b/packages/identity-service/src/routes/fp.js deleted file mode 100644 index 6e3cdd4589a..00000000000 --- a/packages/identity-service/src/routes/fp.js +++ /dev/null @@ -1,53 +0,0 @@ -const { - handleResponse, - successResponse, - errorResponseBadRequest, - errorResponse -} = require('../apiHelpers') -const models = require('../models') -const { logger } = require('../logging') -const { getDeviceIDCountForUserId } = require('../utils/fpHelpers') - -module.exports = function (app) { - app.get( - '/fp', - handleResponse(async (req) => { - const { userId, origin } = req.query - if (!userId || !origin || !['web', 'mobile', 'desktop'].includes(origin)) - return errorResponseBadRequest() - - try { - const count = ( - await models.Fingerprints.findAll({ - where: { - userId, - origin - } - }) - ).length - return successResponse({ count }) - } catch (e) { - return errorResponse( - `Something went wrong fetching fingerprint for user ${userId}: ${JSON.stringify( - e - )}` - ) - } - }) - ) - - app.get( - '/fp/counts/:userId', - handleResponse(async (req) => { - const userId = req.params.userId - try { - const counts = await getDeviceIDCountForUserId(userId) - return successResponse({ counts }) - } catch (e) { - return errorResponse( - `Something went wrong fetching fp counts: ${JSON.stringify(e)}` - ) - } - }) - ) -} diff --git a/packages/identity-service/src/routes/idSignals.js b/packages/identity-service/src/routes/idSignals.js index e55d6ddb5ce..a0adca05bfe 100644 --- a/packages/identity-service/src/routes/idSignals.js +++ b/packages/identity-service/src/routes/idSignals.js @@ -10,7 +10,6 @@ const models = require('../models') const { QueryTypes } = require('sequelize') const userHandleMiddleware = require('../userHandleMiddleware') const authMiddleware = require('../authMiddleware') -const { getDeviceIDCountForUserId } = require('../utils/fpHelpers') const { getIP, recordIP } = require('../utils/antiAbuse') module.exports = function (app) { @@ -25,53 +24,46 @@ module.exports = function (app) { const handle = req.query.handle if (!handle) return errorResponseBadRequest('Please provide handle') - const [ - captchaScores, - cognitoFlowScores, - deviceUserCount, - userIPRecord, - handleSimilarity - ] = await Promise.all([ - models.sequelize.query( - `select "Users"."blockchainUserId" as "userId", "BotScores"."recaptchaScore" as "score", "BotScores"."recaptchaContext" as "context", "BotScores"."updatedAt" as "updatedAt" + const [captchaScores, cognitoFlowScores, userIPRecord, handleSimilarity] = + await Promise.all([ + models.sequelize.query( + `select "Users"."blockchainUserId" as "userId", "BotScores"."recaptchaScore" as "score", "BotScores"."recaptchaContext" as "context", "BotScores"."updatedAt" as "updatedAt" from "Users" inner join "BotScores" on "Users"."walletAddress" = "BotScores"."walletAddress" where "Users"."handle" = :handle`, - { - replacements: { handle }, - type: QueryTypes.SELECT - } - ), - models.sequelize.query( - `select "Users"."blockchainUserId" as "userId", "CognitoFlows"."score" as "score" + { + replacements: { handle }, + type: QueryTypes.SELECT + } + ), + models.sequelize.query( + `select "Users"."blockchainUserId" as "userId", "CognitoFlows"."score" as "score" from "Users" inner join "CognitoFlows" on "Users"."handle" = "CognitoFlows"."handle" where "Users"."handle" = :handle`, - { - replacements: { handle }, - type: QueryTypes.SELECT - } - ), - getDeviceIDCountForUserId(req.user.blockchainUserId), - models.UserIPs.findOne({ where: { handle } }), - models.sequelize.query( - `select count(*) from "Users" where "handle" SIMILAR TO :handle;`, - { - replacements: { - handle: `[0-9]*${handle.replace(/(^\d*|\d*$)/g, '')}[0-9]*` - }, - type: QueryTypes.SELECT - } - ) - ]) + { + replacements: { handle }, + type: QueryTypes.SELECT + } + ), + models.UserIPs.findOne({ where: { handle } }), + models.sequelize.query( + `select count(*) from "Users" where "handle" SIMILAR TO :handle;`, + { + replacements: { + handle: `[0-9]*${handle.replace(/(^\d*|\d*$)/g, '')}[0-9]*` + }, + type: QueryTypes.SELECT + } + ) + ]) const response = { captchaScores, cognitoFlowScores, socialSignals: {}, - deviceUserCount, userIP: userIPRecord && userIPRecord.userIP, emailAddress: req.user.email, handleSimilarity: handleSimilarity[0]?.count ?? 0 diff --git a/packages/identity-service/src/utils/antiAbuse.js b/packages/identity-service/src/utils/antiAbuse.js index 9fcbdcba64b..452390cdc06 100644 --- a/packages/identity-service/src/utils/antiAbuse.js +++ b/packages/identity-service/src/utils/antiAbuse.js @@ -4,7 +4,7 @@ const { logger } = require('../logging') const models = require('../models') const aaoEndpoint = - config.get('aaoEndpoint') || 'https://antiabuseoracle.audius.co' + config.get('aaoEndpoint') || 'https://anti-abuse-oracle.audius.engineering' const allowRules = new Set([-17, -18]) const blockRelayAbuseErrorCodes = new Set([0, 8, 10, 13, 15, 18]) diff --git a/packages/identity-service/src/utils/fpHelpers.js b/packages/identity-service/src/utils/fpHelpers.js deleted file mode 100644 index d755c67ea98..00000000000 --- a/packages/identity-service/src/utils/fpHelpers.js +++ /dev/null @@ -1,107 +0,0 @@ -const { QueryTypes } = require('sequelize') -const models = require('../models') -const FP_REDIS_PREFIX = 'fp' -const FP_CONFIDENCE_THRESHOLD = 0.7 -const TEN_MINUTES_IN_MS = 10 * 60 * 1000 - -const getDeviceIDCountForUserId = async (userId) => { - // Get the # of users sharing any visitorID - // associated with `userId` on any platform - const res = await models.sequelize.query( - `select "Fingerprints"."userId" - from "Fingerprints" - where "visitorId" in ( - select distinct "visitorId" - from "Fingerprints" - where "userId" = :userId - ) group by "Fingerprints"."userId"`, - { - replacements: { - userId - }, - type: QueryTypes.SELECT - } - ) - return res.length -} - -const validateFingerprint = async ({ req, email, visitorId }) => { - if (!visitorId) { - req.logger.info( - `Fingerprint not validated for ${email}: no visitorId provided` - ) - return - } - - const { blockchainUserId: userId } = await models.User.findOne({ - where: { email } - }) - if (!userId) { - req.logger.info( - `Fingerprint not validated for ${email}: no matching userId found` - ) - return - } - - let latestVisit - try { - const fpResponse = await req.app - .get('fpClient') - .getVisitorHistory(visitorId) - latestVisit = fpResponse.visits && fpResponse.visits[0] - } catch (e) { - req.logger.error(`Could not validate fingerprint for ${email}`, e) - return - } - - const now = Date.now() - if ( - !latestVisit || - now - new Date(latestVisit.timestamp) > TEN_MINUTES_IN_MS - ) { - req.logger.info( - `Fingerprint not validated for ${email}: no recent visit for id ${visitorId}` - ) - return - } - - // don't validate fingerprints that don't provide enough identifying signals - if ( - latestVisit.confidence && - latestVisit.confidence.score < FP_CONFIDENCE_THRESHOLD - ) { - req.logger.info( - `Fingerprint not validated for ${email}: confidence score ${latestVisit.confidence.score} below threshold` - ) - return - } - - const origin = latestVisit.tag?.origin - if (!origin) { - req.logger.info( - `Fingerprint not validated for ${email}: no origin tag found` - ) - return - } - - const [fp, created] = await models.Fingerprints.findOrCreate({ - where: { - userId, - visitorId, - origin - }, - defaults: { - createdAt: now, - updatedAt: now - } - }) - if (!created) { - fp.updatedAt = now - await fp.save() - } -} - -module.exports = { - getDeviceIDCountForUserId, - validateFingerprint -} diff --git a/packages/identity-service/src/utils/otp.js b/packages/identity-service/src/utils/otp.js index a062c757871..1377ed33104 100644 --- a/packages/identity-service/src/utils/otp.js +++ b/packages/identity-service/src/utils/otp.js @@ -1,6 +1,4 @@ const { getOtpEmail } = require('../notifications/emails/otp') -const { Op } = require('sequelize') -const models = require('../models') const OTP_CHARS = '0123456789' const OTP_REDIS_PREFIX = 'otp' @@ -13,31 +11,8 @@ const OTP_BYPASS_EMAILS = new Set([ 'fb@audius.co' ]) -const requiresOtp = async ({ email, visitorId }) => { - if (OTP_BYPASS_EMAILS.has(email)) { - return false - } else if (!visitorId) { - return true - } else { - const userRecord = await models.User.findOne({ - where: { email } - }) - if (!userRecord || userRecord.blockchainUserId === null) { - return true - } - const sixMonthsAgo = new Date() - sixMonthsAgo.setDate(-180) - const verifiedFp = await models.Fingerprints.findOne({ - where: { - userId: userRecord.blockchainUserId, - visitorId, - updatedAt: { - [Op.gt]: sixMonthsAgo - } - } - }) - return !verifiedFp - } +const requiresOtp = async ({ email }) => { + return !OTP_BYPASS_EMAILS.has(email) } const generateOtp = () => { diff --git a/packages/identity-service/test/authenticationTest.js b/packages/identity-service/test/authenticationTest.js index a002560d7c7..70b0ad650c0 100644 --- a/packages/identity-service/test/authenticationTest.js +++ b/packages/identity-service/test/authenticationTest.js @@ -607,83 +607,4 @@ describe('test authentication routes', function () { }) .expect(400) }) - - it('skips otp for recognized devices', async function () { - const redis = app.get('redis') - const visitorId = 'abc123' - await signUpUser() - const userRecord = await models.User.findOne({ - where: { email: 'dheeraj@audius.co' } - }) - await userRecord.update({ blockchainUserId: 1 }) - - await request(app) - .get('/authentication') - .query({ - lookupKey: - '9bdc91e1bb7ef60177131690b18349625778c14656dc17814945b52a3f07ac77', - username: 'dheeraj@audius.co', - visitorId - }) - .expect(403) - - let fpRecord = await models.Fingerprints.findOne({ where: { visitorId } }) - assert.strictEqual(fpRecord, null) - - const otp = await redis.get('otp:dheeraj@audius.co') - - await request(app) - .get('/authentication') - .query({ - lookupKey: - '9bdc91e1bb7ef60177131690b18349625778c14656dc17814945b52a3f07ac77', - username: 'dheeraj@audius.co', - visitorId, - otp - }) - .expect(200) - - // validateFingerprint is called asynchronously and not awaited. - // This should be plenty of time since the dependency is mocked in test/lib/app.js - await new Promise((resolve) => setTimeout(resolve, 100)) - - await request(app) - .get('/authentication') - .query({ - lookupKey: - '9bdc91e1bb7ef60177131690b18349625778c14656dc17814945b52a3f07ac77', - username: 'dheeraj@audius.co', - visitorId - }) - .expect(200) - - // a valid visitorId should not allow login with an invalid email - await request(app) - .get('/authentication') - .query({ - lookupKey: - '9bdc91e1bb7ef60177131690b18349625778c14656dc17814945b52a3f07ac77', - username: 'wrongemail@audius.co', - visitorId - }) - .expect(400) - - // a valid visitorId should not allow login with an invalid email, even with otp present - await request(app) - .get('/authentication') - .query({ - lookupKey: - '9bdc91e1bb7ef60177131690b18349625778c14656dc17814945b52a3f07ac77', - username: 'wrongemail@audius.co', - visitorId, - otp - }) - .expect(400) - - fpRecord = await models.Fingerprints.findOne({ where: { visitorId } }) - assert.ok(fpRecord) - assert.strictEqual(fpRecord.visitorId, visitorId) - - await fpRecord.destroy() - }) }) diff --git a/packages/identity-service/test/lib/app.js b/packages/identity-service/test/lib/app.js index 6dc16c06cb5..650c8b15b86 100644 --- a/packages/identity-service/test/lib/app.js +++ b/packages/identity-service/test/lib/app.js @@ -25,25 +25,7 @@ async function getApp() { } const audiusLibs = { captcha, solanaWeb3Manager } - const fpClient = { - getVisitorHistory: async (visitorId) => { - return { - visitorId, - visits: [ - { - confidence: { score: 0.8 }, // arbitrary non-perfect score - timestamp: Date.now(), - tag: { - origin: 'web' - } - } - ] - } - } - } - server.app.set('audiusLibs', audiusLibs) - server.app.set('fpClient', fpClient) // run all migrations before each test await clearDatabase() diff --git a/packages/libs/src/api/Account.ts b/packages/libs/src/api/Account.ts index ea5576c633b..fd1788bf65e 100644 --- a/packages/libs/src/api/Account.ts +++ b/packages/libs/src/api/Account.ts @@ -48,12 +48,7 @@ export class Account extends Base { /** * Logs a user into Audius */ - async login( - email: string, - password: string, - visitorId?: string, - otp?: string - ) { + async login(email: string, password: string, otp?: string) { const phases = { FIND_WALLET: 'FIND_WALLET', FIND_USER: 'FIND_USER' @@ -69,7 +64,6 @@ export class Account extends Base { email, username: email, password, - visitorId, otp }) this.web3Manager.setOwnerWallet(ownerWallet) diff --git a/packages/libs/src/services/identity/IdentityService.ts b/packages/libs/src/services/identity/IdentityService.ts index bd4fc86b318..a5bfd34e819 100644 --- a/packages/libs/src/services/identity/IdentityService.ts +++ b/packages/libs/src/services/identity/IdentityService.ts @@ -117,7 +117,6 @@ export class IdentityService { async getFn(params: { lookupKey: string username: string - visitorId?: string otp?: string }): Promise<{ iv: string; cipherText: string }> { return await this._makeRequest({ diff --git a/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle index 880e59c3cb4..1cd55af265e 100755 --- a/packages/mobile/android/app/build.gradle +++ b/packages/mobile/android/app/build.gradle @@ -11,14 +11,15 @@ apply plugin: "com.facebook.react" react { /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '../..' - // root = file("../../") + // Leave at the default (../.. = packages/mobile) so index.js resolves correctly. + // In monorepo setup, react-native and @react-native/* are hoisted to the root + // node_modules — point the specific deps explicitly without moving `root`. // The folder where the react-native NPM package is. Default is ../../node_modules/react-native - // reactNativeDir = file("../../node_modules/react-native") + reactNativeDir = file("../../../../node_modules/react-native") // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen - // In monorepo setup, codegen is hoisted to root node_modules codegenDir = file("../../../../node_modules/@react-native/codegen") // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js - // cliFile = file("../../node_modules/react-native/cli.js") + cliFile = file("../../../../node_modules/react-native/cli.js") /* Variants */ // The list of variants to that are debuggable. For those we're going to // skip the bundling of the JS bundle and the assets. By default is just 'debug'. @@ -45,7 +46,12 @@ react { // extraPackagerArgs = [] /* Hermes Commands */ // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // The RN Gradle plugin's hermesc lookup is anchored at `root` and only + // considers `root/node_modules/react-native/sdks/hermesc/...`. Since RN + // is hoisted to the monorepo node_modules, that lookup fails. Point the + // plugin at the hoisted prebuilt hermesc explicitly (%OS-BIN% is + // substituted by the plugin at runtime). + hermesCommand = "$rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc" // // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] @@ -128,7 +134,7 @@ android { // versionCode is automatically incremented in CI versionCode 1 // Make sure this is above the currently released Android version in the play store if your changes touch native code: - versionName "1.1.528" + versionName "1.1.532" resValue "string", "build_config_package", "co.audius.app" resConfigs "en" } diff --git a/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar b/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar index e708b1c023e..9bbc975c742 100644 Binary files a/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar and b/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties b/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties index e0fd02028bc..37f853b1c84 100644 --- a/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/packages/mobile/android/gradlew b/packages/mobile/android/gradlew index 23472ba0f1a..faf93008b77 100755 --- a/packages/mobile/android/gradlew +++ b/packages/mobile/android/gradlew @@ -71,14 +71,14 @@ app_path=$0 # Need this for daisy-chained symlinks. while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path [ -h "$app_path" ] do - ls=$(ls -ld "$app_path") + ls=$( ls -ld "$app_path" ) link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; esac done @@ -86,17 +86,16 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum -warn() { +warn () { echo "$*" } >&2 -die() { +die () { echo echo "$*" echo @@ -108,24 +107,25 @@ cygwin=false msys=false darwin=false nonstop=false -case "$(uname)" in #( -CYGWIN*) cygwin=true ;; #( -Darwin*) darwin=true ;; #( -MSYS* | MINGW*) msys=true ;; #( -NONSTOP*) nonstop=true ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD=$JAVA_HOME/jre/sh/java else JAVACMD=$JAVA_HOME/bin/java fi - if [ ! -x "$JAVACMD" ]; then + if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the @@ -133,7 +133,8 @@ location of your Java installation." fi else JAVACMD=java - if ! command -v java >/dev/null 2>&1; then + if ! command -v java >/dev/null 2>&1 + then die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -142,23 +143,21 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop"; then +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( - max*) + max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # shellcheck disable=SC2039,SC3045 - MAX_FD=$(ulimit -H -n) || + MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" - ;; esac - case $MAX_FD in #( - '' | soft) : ;; #( - *) + case $MAX_FD in #( + '' | soft) :;; #( + *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" - ;; esac fi @@ -171,25 +170,23 @@ fi # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys"; then - APP_HOME=$(cygpath --path --mixed "$APP_HOME") - CLASSPATH=$(cygpath --path --mixed "$CLASSPATH") +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - JAVACMD=$(cygpath --unix "$JAVACMD") + JAVACMD=$( cygpath --unix "$JAVACMD" ) # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg; do + for arg do if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) - t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] - ;; #( - *) false ;; + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; esac then - arg=$(cygpath --path --ignore --mixed "$arg") + arg=$( cygpath --path --ignore --mixed "$arg" ) fi # Roll the args list around exactly as many times as the number of # args, so each arg winds up back in the position where it started, but @@ -198,28 +195,30 @@ if "$cygwin" || "$msys"; then # NB: a `for` loop captures its iteration list before it begins, so # changing the positional parameters here affects neither the number of # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done fi + # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" # Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1; then +if ! command -v xargs >/dev/null 2>&1 +then die "xargs is not available" fi @@ -243,10 +242,10 @@ fi # eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | xargs -n1 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | tr '\n' ' ' -)" '"$@"' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/packages/mobile/android/sentry.properties b/packages/mobile/android/sentry.properties deleted file mode 100644 index e5b10f50347..00000000000 --- a/packages/mobile/android/sentry.properties +++ /dev/null @@ -1,4 +0,0 @@ -defaults.url=https://sentry.io/ -defaults.org=audius -defaults.project=audius-client -auth.token=ffe6cd7871b44b1ab42ed98e644fdc9240f1eac620b8406e8795232679e5fceb diff --git a/packages/mobile/examples/auth-sign-in/README.md b/packages/mobile/examples/auth-sign-in/README.md index a741eaa606b..af33102f40f 100644 --- a/packages/mobile/examples/auth-sign-in/README.md +++ b/packages/mobile/examples/auth-sign-in/README.md @@ -61,7 +61,7 @@ No extra setup; the app uses staging identity by default (see `packages/mobile/. |--------|----------| | Auth service (mobile) | `packages/mobile/src/services/sdk/auth.ts` – creates `authService` via `createAuthService`, wires `localStorage`, identity endpoint, key creation; exports `authService`, `getAudiusWalletClient`, `solanaWalletService`. | | Sign-on UI (screens, stack) | `packages/mobile/src/screens/sign-on-screen/` – `SignOnStack.tsx`, `SignOnScreen`, `CreatePasswordScreen`, `PickHandleScreen`, `FinishProfileScreen`, `ConfirmEmailScreen`, etc. | -| Auth service (shared API) | `packages/common/src/services/auth/authService.ts` – `createAuthService`, `signIn(email, password, visitorId?, otp?)`, `signOut`, `resetPassword`, `getWallet`, `confirmCredentials`, `changeCredentials`. | +| Auth service (shared API) | `packages/common/src/services/auth/authService.ts` – `createAuthService`, `signIn(email, password, otp?)`, `signOut`, `resetPassword`, `getWallet`, `confirmCredentials`, `changeCredentials`. | | Hedgehog / identity | `packages/common/src/services/auth/hedgehog.ts`, `identity.ts` – low-level Hedgehog instance and identity service integration. | | Sign-in validation | `packages/common/src/schemas/sign-on/signInSchema.ts` – Zod schema for sign-in form. | diff --git a/packages/mobile/ios/AudiusReactNative.xcodeproj/project.pbxproj b/packages/mobile/ios/AudiusReactNative.xcodeproj/project.pbxproj index 8af9e63935f..5cf6628c6c0 100644 --- a/packages/mobile/ios/AudiusReactNative.xcodeproj/project.pbxproj +++ b/packages/mobile/ios/AudiusReactNative.xcodeproj/project.pbxproj @@ -253,7 +253,6 @@ A1B2C3D4E5F6A7B8C9D0E1F2 /* Bundle React Native code and images */, 13B07F8E1A680F5B00A75B9A /* Resources */, 838AABE123CE404D004B2DA3 /* ShellScript */, - 18A5B1D0CA1543ABB2DC5C65 /* Upload Debug Symbols to Sentry */, CBD3B687421F14165031EAF0 /* [CP] Embed Pods Frameworks */, B73C21C532E1201FEFBAECDA /* [CP] Copy Pods Resources */, 23A43AB82E37E73000CDCDF2 /* Embed Foundation Extensions */, @@ -355,20 +354,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 18A5B1D0CA1543ABB2DC5C65 /* Upload Debug Symbols to Sentry */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Upload Debug Symbols to Sentry"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "${SRCROOT}/scripts/uploadSentryDebugSymbols.sh\n"; - }; 4F8185A02FC4BDA0C345B32B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -424,7 +409,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\nWITH_ENVIRONMENT=\"${SRCROOT}/../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"${SRCROOT}/../node_modules/react-native/scripts/react-native-xcode.sh\"\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; + shellScript = "export NODE_BINARY=node\nset -e\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; showEnvVarsInLog = 0; }; B73C21C532E1201FEFBAECDA /* [CP] Copy Pods Resources */ = { @@ -761,7 +746,7 @@ OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; OTHER_LDFLAGS = "$(inherited)"; - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; USE_HERMES = true; @@ -819,7 +804,7 @@ OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; OTHER_LDFLAGS = "$(inherited)"; - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; USE_HERMES = true; VALIDATE_PRODUCT = YES; @@ -877,7 +862,7 @@ OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; OTHER_LDFLAGS = "$(inherited)"; - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; USE_HERMES = true; VALIDATE_PRODUCT = YES; diff --git a/packages/mobile/ios/AudiusReactNative/AppDelegate.mm b/packages/mobile/ios/AudiusReactNative/AppDelegate.mm index 3a39b21d7b2..35e9d17ec82 100644 --- a/packages/mobile/ios/AudiusReactNative/AppDelegate.mm +++ b/packages/mobile/ios/AudiusReactNative/AppDelegate.mm @@ -72,10 +72,7 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge - (NSURL *)bundleURL { #if DEBUG - // React Native 0.77 - explicitly set Metro URL - NSURL *url = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false"]; - NSLog(@"[AppDelegate] DEBUG mode - Using Metro URL: %@", url); - return url; + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; #else return [CodePush bundleURL]; #endif diff --git a/packages/mobile/ios/AudiusReactNative/Info.plist b/packages/mobile/ios/AudiusReactNative/Info.plist index d2b113c2464..cf346526a9f 100644 --- a/packages/mobile/ios/AudiusReactNative/Info.plist +++ b/packages/mobile/ios/AudiusReactNative/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.192 + 1.1.196 CFBundleSignature ???? CFBundleURLTypes diff --git a/packages/mobile/ios/Gemfile b/packages/mobile/ios/Gemfile index 443d23a7131..8a74316d892 100644 --- a/packages/mobile/ios/Gemfile +++ b/packages/mobile/ios/Gemfile @@ -1,6 +1,13 @@ source "https://rubygems.org" -gem "fastlane", '~> 2.225.0' +# fastlane 2.225.0 (and 2.226.x/2.227.x) crashes during TestFlight upload on +# Xcode 26 runners: altool's error format changed from "*** Error:" to +# "ERROR:", which the older ERROR_REGEX in itunes_transporter.rb can't match. +# When @all_lines has fewer than 20 entries, the fallback slice +# `@all_lines[-20..-1]` returns nil under Ruby 3.x and the displayer crashes +# with `undefined method 'each' for nil`, masking the real upload error. +# Fixed by fastlane#29545 + #29740, first released in 2.228.0. +gem "fastlane", '2.234.0' plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') eval_gemfile(plugins_path) if File.exist?(plugins_path) @@ -10,3 +17,9 @@ gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' gem 'xcodeproj', '< 1.26.0' gem 'concurrent-ruby', '< 1.3.4' + +# Ruby 3.4.0 has removed some libraries from the standard library. +gem 'bigdecimal' +gem 'logger' +gem 'benchmark' +gem 'mutex_m' diff --git a/packages/mobile/ios/Gemfile.lock b/packages/mobile/ios/Gemfile.lock index 8cbd6dee6d1..a2d9dbeecd3 100644 --- a/packages/mobile/ios/Gemfile.lock +++ b/packages/mobile/ios/Gemfile.lock @@ -3,6 +3,7 @@ GEM specs: CFPropertyList (3.0.6) rexml + abbrev (0.1.2) activesupport (7.0.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) @@ -15,24 +16,29 @@ GEM json (>= 1.5.1) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.3.0) - aws-partitions (1.993.0) - aws-sdk-core (3.211.0) + aws-eventstream (1.4.0) + aws-partitions (1.1253.0) + aws-sdk-core (3.249.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) + base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.95.0) - aws-sdk-core (~> 3, >= 3.210.0) + logger + aws-sdk-kms (1.128.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.169.0) - aws-sdk-core (~> 3, >= 3.210.0) + aws-sdk-s3 (1.224.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.1) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - base64 (0.2.0) + base64 (0.3.0) + benchmark (0.2.0) + bigdecimal (3.1.1) claide (1.1.0) cocoapods (1.15.2) addressable (~> 2.8) @@ -76,8 +82,9 @@ GEM commander (4.6.0) highline (~> 2.0.0) concurrent-ruby (1.2.2) + csv (3.3.5) declarative (0.0.20) - digest-crc (0.6.5) + digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) @@ -86,7 +93,7 @@ GEM ethon (0.16.0) ffi (>= 1.15.0) excon (0.112.0) - faraday (1.10.4) + faraday (1.10.5) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -98,32 +105,36 @@ GEM faraday-rack (~> 1.0) faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) - faraday-cookie_jar (0.0.7) + faraday-cookie_jar (0.0.8) faraday (>= 0.8.0) - http-cookie (~> 1.0.0) + http-cookie (>= 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) + faraday-multipart (1.2.0) + multipart-post (~> 2.0) faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday-retry (1.0.4) faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.3.1) - fastlane (2.225.0) - CFPropertyList (>= 2.3, < 4.0.0) + fastimage (2.4.1) + fastlane (2.234.0) + CFPropertyList (>= 2.3, < 5.0.0) + abbrev (~> 0.1) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) - aws-sdk-s3 (~> 1.0) + aws-sdk-s3 (~> 1.197) babosa (>= 1.0.3, < 2.0.0) - bundler (>= 1.12.0, < 3.0.0) + base64 (~> 0.2) + benchmark (>= 0.1.0) + bundler (>= 1.17.3, < 5.0.0) colored (~> 1.2) commander (~> 4.6) + csv (~> 3.3) dotenv (>= 2.1.1, < 3.0.0) emoji_regex (>= 0.1, < 4.0) excon (>= 0.71.0, < 1.0.0) @@ -131,20 +142,24 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) - fastlane-sirp (>= 1.0.0) + fastlane-sirp (>= 1.1.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-env (>= 1.6.0, <= 2.1.1) google-cloud-storage (~> 1.31) highline (~> 2.0) http-cookie (~> 1.0.5) json (< 3.0.0) jwt (>= 2.1.0, < 3) + logger (>= 1.6, < 2.0) mini_magick (>= 4.9.4, < 5.0.0) multipart-post (>= 2.0.0, < 3.0.0) + mutex_m (~> 0.3) naturally (~> 2.2) + nkf (~> 0.2) optparse (>= 0.1.1, < 1.0.0) + ostruct (>= 0.1.0) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.5) @@ -155,97 +170,101 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-plugin-versioning (0.5.2) - fastlane-sirp (1.0.0) - sysrandom (~> 1.0) + fastlane-sirp (1.1.0) ffi (1.17.1) ffi (1.17.1-arm64-darwin) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.54.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.3) + google-apis-androidpublisher_v3 (0.100.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.16.2, < 2.a) - httpclient (>= 2.8.1, < 3.a) + googleauth (~> 1.9) + httpclient (>= 2.8.3, < 3.a) mini_mime (~> 1.0) + mutex_m representable (~> 3.0) retriable (>= 2.0, < 4.a) - rexml - google-apis-iamcredentials_v1 (0.17.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-playcustomapp_v1 (0.13.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-storage_v1 (0.31.0) - google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.1) + google-apis-iamcredentials_v1 (0.27.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-playcustomapp_v1 (0.17.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-storage_v1 (0.62.0) + google-apis-core (>= 0.15.0, < 2.a) + google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (1.6.0) - faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.4.0) - google-cloud-storage (1.47.0) + google-cloud-env (2.1.1) + faraday (>= 1.0, < 3.a) + google-cloud-errors (1.6.0) + google-cloud-storage (1.60.0) addressable (~> 2.8) digest-crc (~> 0.4) - google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.31.0) + google-apis-core (>= 0.18, < 2) + google-apis-iamcredentials_v1 (~> 0.18) + google-apis-storage_v1 (>= 0.42) google-cloud-core (~> 1.6) - googleauth (>= 0.16.2, < 2.a) + googleauth (~> 1.9) mini_mime (~> 1.0) - googleauth (1.8.1) - faraday (>= 0.17.3, < 3.a) + googleauth (1.11.2) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.1) jwt (>= 1.4, < 3.0) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.7) + http-cookie (1.0.8) domain_name (~> 0.5) httpclient (2.8.3) i18n (1.14.1) concurrent-ruby (~> 1.0) jmespath (1.6.2) json (2.7.1) - jwt (2.9.3) + jwt (2.10.3) base64 + logger (1.7.0) mini_magick (4.13.2) mini_mime (1.1.5) minitest (5.20.0) molinillo (0.8.0) - multi_json (1.15.0) + multi_json (1.19.1) multipart-post (2.4.1) + mutex_m (0.3.0) nanaimo (0.3.0) nap (1.1.0) - naturally (2.2.1) + naturally (2.3.0) netrc (0.11.0) - optparse (0.5.0) + nkf (0.2.0) + optparse (0.8.1) os (1.1.4) - plist (3.7.1) + ostruct (0.6.3) + plist (3.7.2) public_suffix (4.0.7) - rake (13.2.1) + rake (13.4.2) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) - retriable (3.1.2) + retriable (3.4.1) rexml (3.4.0) - rouge (2.0.7) + rouge (3.28.0) ruby-macho (2.5.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) security (0.1.5) - signet (0.19.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList naturally - sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -268,8 +287,8 @@ GEM colored2 (~> 3.1) nanaimo (~> 0.3.0) rexml (>= 3.3.6, < 4.0) - xcpretty (0.3.0) - rouge (~> 2.0.7) + xcpretty (0.4.1) + rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) @@ -279,10 +298,14 @@ PLATFORMS DEPENDENCIES activesupport (>= 6.1.7.5, != 7.1.0) + benchmark + bigdecimal cocoapods (>= 1.13, != 1.15.1, != 1.15.0) concurrent-ruby (< 1.3.4) - fastlane (~> 2.225.0) + fastlane (= 2.234.0) fastlane-plugin-versioning + logger + mutex_m xcodeproj (< 1.26.0) BUNDLED WITH diff --git a/packages/mobile/ios/Podfile b/packages/mobile/ios/Podfile index cff6c13dbf0..3d5fc4dfe6b 100644 --- a/packages/mobile/ios/Podfile +++ b/packages/mobile/ios/Podfile @@ -84,9 +84,7 @@ target 'AudiusReactNative' do if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" target.build_configurations.each do |config| config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' - if target.name != "Sentry" - config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' - end + config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' end end end diff --git a/packages/mobile/ios/Podfile.lock b/packages/mobile/ios/Podfile.lock index 59d294c1897..3ca13677175 100644 --- a/packages/mobile/ios/Podfile.lock +++ b/packages/mobile/ios/Podfile.lock @@ -12,18 +12,17 @@ PODS: - SSZipArchive (~> 2.5.5) - DoubleConversion (1.1.6) - fast_float (6.1.4) - - FBLazyVector (0.78.3) + - FBLazyVector (0.79.5) - ffmpeg-kit-ios-full-gpl (6.0) - ffmpeg-kit-react-native/full-gpl (6.0.2): - ffmpeg-kit-ios-full-gpl (= 6.0) - React-Core - - FingerprintPro (2.11.0) - fmt (11.0.2) - glog (0.3.5) - google-cast-sdk-dynamic-xcframework-no-bluetooth (4.7.1) - - hermes-engine (0.78.3): - - hermes-engine/Pre-built (= 0.78.3) - - hermes-engine/Pre-built (0.78.3) + - hermes-engine (0.79.5): + - hermes-engine/Pre-built (= 0.79.5) + - hermes-engine/Pre-built (0.79.5) - JWT (3.0.0-beta.14): - Base64 (~> 1.1.2) - lottie-ios (4.5.0) @@ -40,9 +39,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -70,44 +72,45 @@ PODS: - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.78.3) - - RCTRequired (0.78.3) - - RCTTypeSafety (0.78.3): - - FBLazyVector (= 0.78.3) - - RCTRequired (= 0.78.3) - - React-Core (= 0.78.3) - - React (0.78.3): - - React-Core (= 0.78.3) - - React-Core/DevSupport (= 0.78.3) - - React-Core/RCTWebSocket (= 0.78.3) - - React-RCTActionSheet (= 0.78.3) - - React-RCTAnimation (= 0.78.3) - - React-RCTBlob (= 0.78.3) - - React-RCTImage (= 0.78.3) - - React-RCTLinking (= 0.78.3) - - React-RCTNetwork (= 0.78.3) - - React-RCTSettings (= 0.78.3) - - React-RCTText (= 0.78.3) - - React-RCTVibration (= 0.78.3) - - React-callinvoker (0.78.3) - - React-Core (0.78.3): + - RCTDeprecation (0.79.5) + - RCTRequired (0.79.5) + - RCTTypeSafety (0.79.5): + - FBLazyVector (= 0.79.5) + - RCTRequired (= 0.79.5) + - React-Core (= 0.79.5) + - React (0.79.5): + - React-Core (= 0.79.5) + - React-Core/DevSupport (= 0.79.5) + - React-Core/RCTWebSocket (= 0.79.5) + - React-RCTActionSheet (= 0.79.5) + - React-RCTAnimation (= 0.79.5) + - React-RCTBlob (= 0.79.5) + - React-RCTImage (= 0.79.5) + - React-RCTLinking (= 0.79.5) + - React-RCTNetwork (= 0.79.5) + - React-RCTSettings (= 0.79.5) + - React-RCTText (= 0.79.5) + - React-RCTVibration (= 0.79.5) + - React-callinvoker (0.79.5) + - React-Core (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.78.3) + - React-Core/Default (= 0.79.5) - React-cxxreact - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.78.3): + - React-Core/CoreModulesHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -119,12 +122,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.78.3): + - React-Core/Default (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -135,30 +139,32 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.78.3): + - React-Core/DevSupport (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.78.3) - - React-Core/RCTWebSocket (= 0.78.3) + - React-Core/Default (= 0.79.5) + - React-Core/RCTWebSocket (= 0.79.5) - React-cxxreact - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.78.3): + - React-Core/RCTActionSheetHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -170,12 +176,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.78.3): + - React-Core/RCTAnimationHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -187,12 +194,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.78.3): + - React-Core/RCTBlobHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -204,12 +212,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.78.3): + - React-Core/RCTImageHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -221,12 +230,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.78.3): + - React-Core/RCTLinkingHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -238,12 +248,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.78.3): + - React-Core/RCTNetworkHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -255,12 +266,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.78.3): + - React-Core/RCTSettingsHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -272,12 +284,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.78.3): + - React-Core/RCTTextHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -289,12 +302,13 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.78.3): + - React-Core/RCTVibrationHeaders (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -306,44 +320,47 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.78.3): + - React-Core/RCTWebSocket (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.78.3) + - React-Core/Default (= 0.79.5) - React-cxxreact - React-featureflags - React-hermes - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.78.3): + - React-CoreModules (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - - RCTTypeSafety (= 0.78.3) - - React-Core/CoreModulesHeaders (= 0.78.3) - - React-jsi (= 0.78.3) + - RCTTypeSafety (= 0.79.5) + - React-Core/CoreModulesHeaders (= 0.79.5) + - React-jsi (= 0.79.5) - React-jsinspector + - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.78.3) + - React-RCTImage (= 0.79.5) - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (0.78.3): + - React-cxxreact (0.79.5): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -351,37 +368,40 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.3) - - React-debug (= 0.78.3) - - React-jsi (= 0.78.3) + - React-callinvoker (= 0.79.5) + - React-debug (= 0.79.5) + - React-jsi (= 0.79.5) - React-jsinspector - - React-logger (= 0.78.3) - - React-perflogger (= 0.78.3) - - React-runtimeexecutor (= 0.78.3) - - React-timing (= 0.78.3) - - React-debug (0.78.3) - - React-defaultsnativemodule (0.78.3): + - React-jsinspectortracing + - React-logger (= 0.79.5) + - React-perflogger (= 0.79.5) + - React-runtimeexecutor (= 0.79.5) + - React-timing (= 0.79.5) + - React-debug (0.79.5) + - React-defaultsnativemodule (0.79.5): - hermes-engine - RCT-Folly - React-domnativemodule - React-featureflagsnativemodule + - React-hermes - React-idlecallbacksnativemodule - React-jsi - React-jsiexecutor - React-microtasksnativemodule - React-RCTFBReactNativeSpec - - React-domnativemodule (0.78.3): + - React-domnativemodule (0.79.5): - hermes-engine - RCT-Folly - React-Fabric - React-FabricComponents - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.78.3): + - React-Fabric (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -393,24 +413,25 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.78.3) - - React-Fabric/attributedstring (= 0.78.3) - - React-Fabric/componentregistry (= 0.78.3) - - React-Fabric/componentregistrynative (= 0.78.3) - - React-Fabric/components (= 0.78.3) - - React-Fabric/consistency (= 0.78.3) - - React-Fabric/core (= 0.78.3) - - React-Fabric/dom (= 0.78.3) - - React-Fabric/imagemanager (= 0.78.3) - - React-Fabric/leakchecker (= 0.78.3) - - React-Fabric/mounting (= 0.78.3) - - React-Fabric/observers (= 0.78.3) - - React-Fabric/scheduler (= 0.78.3) - - React-Fabric/telemetry (= 0.78.3) - - React-Fabric/templateprocessor (= 0.78.3) - - React-Fabric/uimanager (= 0.78.3) + - React-Fabric/animations (= 0.79.5) + - React-Fabric/attributedstring (= 0.79.5) + - React-Fabric/componentregistry (= 0.79.5) + - React-Fabric/componentregistrynative (= 0.79.5) + - React-Fabric/components (= 0.79.5) + - React-Fabric/consistency (= 0.79.5) + - React-Fabric/core (= 0.79.5) + - React-Fabric/dom (= 0.79.5) + - React-Fabric/imagemanager (= 0.79.5) + - React-Fabric/leakchecker (= 0.79.5) + - React-Fabric/mounting (= 0.79.5) + - React-Fabric/observers (= 0.79.5) + - React-Fabric/scheduler (= 0.79.5) + - React-Fabric/telemetry (= 0.79.5) + - React-Fabric/templateprocessor (= 0.79.5) + - React-Fabric/uimanager (= 0.79.5) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -418,7 +439,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.78.3): + - React-Fabric/animations (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -432,6 +453,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -439,7 +461,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.78.3): + - React-Fabric/attributedstring (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -453,6 +475,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -460,7 +483,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.78.3): + - React-Fabric/componentregistry (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -474,6 +497,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -481,7 +505,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.78.3): + - React-Fabric/componentregistrynative (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -495,6 +519,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -502,7 +527,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.78.3): + - React-Fabric/components (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -514,11 +539,13 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.78.3) - - React-Fabric/components/root (= 0.78.3) - - React-Fabric/components/view (= 0.78.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.79.5) + - React-Fabric/components/root (= 0.79.5) + - React-Fabric/components/scrollview (= 0.79.5) + - React-Fabric/components/view (= 0.79.5) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -526,7 +553,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.78.3): + - React-Fabric/components/legacyviewmanagerinterop (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -540,6 +567,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -547,7 +575,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.78.3): + - React-Fabric/components/root (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -561,6 +589,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -568,7 +597,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.78.3): + - React-Fabric/components/scrollview (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -582,6 +611,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -589,8 +619,31 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.79.5): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-hermes + - React-jsi + - React-jsiexecutor + - React-logger + - React-renderercss + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core - Yoga - - React-Fabric/consistency (0.78.3): + - React-Fabric/consistency (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -604,6 +657,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -611,7 +665,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/core (0.78.3): + - React-Fabric/core (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -625,6 +679,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -632,7 +687,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.78.3): + - React-Fabric/dom (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -646,6 +701,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -653,7 +709,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.78.3): + - React-Fabric/imagemanager (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -667,6 +723,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -674,7 +731,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.78.3): + - React-Fabric/leakchecker (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -688,6 +745,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -695,7 +753,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.78.3): + - React-Fabric/mounting (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -709,6 +767,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -716,7 +775,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.78.3): + - React-Fabric/observers (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -728,9 +787,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.78.3) + - React-Fabric/observers/events (= 0.79.5) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -738,7 +798,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.78.3): + - React-Fabric/observers/events (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -752,6 +812,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -759,7 +820,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.78.3): + - React-Fabric/scheduler (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -774,6 +835,7 @@ PODS: - React-Fabric/observers/events - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -782,7 +844,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.78.3): + - React-Fabric/telemetry (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -796,6 +858,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -803,7 +866,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.78.3): + - React-Fabric/templateprocessor (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -817,6 +880,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -824,7 +888,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.78.3): + - React-Fabric/uimanager (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -836,9 +900,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.78.3) + - React-Fabric/uimanager/consistency (= 0.79.5) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -847,7 +912,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.78.3): + - React-Fabric/uimanager/consistency (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -861,6 +926,7 @@ PODS: - React-debug - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -869,7 +935,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.78.3): + - React-FabricComponents (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -882,10 +948,11 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.78.3) - - React-FabricComponents/textlayoutmanager (= 0.78.3) + - React-FabricComponents/components (= 0.79.5) + - React-FabricComponents/textlayoutmanager (= 0.79.5) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -894,7 +961,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.78.3): + - React-FabricComponents/components (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -907,17 +974,18 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.78.3) - - React-FabricComponents/components/iostextinput (= 0.78.3) - - React-FabricComponents/components/modal (= 0.78.3) - - React-FabricComponents/components/rncore (= 0.78.3) - - React-FabricComponents/components/safeareaview (= 0.78.3) - - React-FabricComponents/components/scrollview (= 0.78.3) - - React-FabricComponents/components/text (= 0.78.3) - - React-FabricComponents/components/textinput (= 0.78.3) - - React-FabricComponents/components/unimplementedview (= 0.78.3) + - React-FabricComponents/components/inputaccessory (= 0.79.5) + - React-FabricComponents/components/iostextinput (= 0.79.5) + - React-FabricComponents/components/modal (= 0.79.5) + - React-FabricComponents/components/rncore (= 0.79.5) + - React-FabricComponents/components/safeareaview (= 0.79.5) + - React-FabricComponents/components/scrollview (= 0.79.5) + - React-FabricComponents/components/text (= 0.79.5) + - React-FabricComponents/components/textinput (= 0.79.5) + - React-FabricComponents/components/unimplementedview (= 0.79.5) - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -926,7 +994,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.78.3): + - React-FabricComponents/components/inputaccessory (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -941,6 +1009,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -949,7 +1018,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.78.3): + - React-FabricComponents/components/iostextinput (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -964,6 +1033,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -972,7 +1042,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.78.3): + - React-FabricComponents/components/modal (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -987,6 +1057,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -995,7 +1066,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.78.3): + - React-FabricComponents/components/rncore (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1010,6 +1081,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1018,7 +1090,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.78.3): + - React-FabricComponents/components/safeareaview (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1033,6 +1105,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1041,7 +1114,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.78.3): + - React-FabricComponents/components/scrollview (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1056,6 +1129,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1064,7 +1138,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.78.3): + - React-FabricComponents/components/text (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1079,6 +1153,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1087,7 +1162,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.78.3): + - React-FabricComponents/components/textinput (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1102,6 +1177,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1110,7 +1186,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.78.3): + - React-FabricComponents/components/unimplementedview (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1125,6 +1201,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1133,7 +1210,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.78.3): + - React-FabricComponents/textlayoutmanager (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1148,6 +1225,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-logger @@ -1156,69 +1234,74 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.78.3): + - React-FabricImage (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - - RCTRequired (= 0.78.3) - - RCTTypeSafety (= 0.78.3) + - RCTRequired (= 0.79.5) + - RCTTypeSafety (= 0.79.5) - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.78.3) + - React-jsiexecutor (= 0.79.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.78.3): + - React-featureflags (0.79.5): - RCT-Folly (= 2024.11.18.00) - - React-featureflagsnativemodule (0.78.3): + - React-featureflagsnativemodule (0.79.5): - hermes-engine - RCT-Folly - React-featureflags + - React-hermes - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - React-graphics (0.78.3): + - React-graphics (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) + - React-hermes - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.78.3): + - React-hermes (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.78.3) + - React-cxxreact (= 0.79.5) - React-jsi - - React-jsiexecutor (= 0.78.3) + - React-jsiexecutor (= 0.79.5) - React-jsinspector - - React-perflogger (= 0.78.3) + - React-jsinspectortracing + - React-perflogger (= 0.79.5) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.78.3): + - React-idlecallbacksnativemodule (0.79.5): - glog - hermes-engine - RCT-Folly + - React-hermes - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimescheduler - ReactCommon/turbomodule/core - - React-ImageManager (0.78.3): + - React-ImageManager (0.79.5): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1227,7 +1310,7 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.78.3): + - React-jserrorhandler (0.79.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1236,7 +1319,7 @@ PODS: - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - React-jsi (0.78.3): + - React-jsi (0.79.5): - boost - DoubleConversion - fast_float (= 6.1.4) @@ -1244,18 +1327,19 @@ PODS: - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-jsiexecutor (0.78.3): + - React-jsiexecutor (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-cxxreact (= 0.78.3) - - React-jsi (= 0.78.3) + - React-cxxreact (= 0.79.5) + - React-jsi (= 0.79.5) - React-jsinspector - - React-perflogger (= 0.78.3) - - React-jsinspector (0.78.3): + - React-jsinspectortracing + - React-perflogger (= 0.79.5) + - React-jsinspector (0.79.5): - DoubleConversion - glog - hermes-engine @@ -1263,45 +1347,38 @@ PODS: - React-featureflags - React-jsi - React-jsinspectortracing - - React-perflogger (= 0.78.3) - - React-runtimeexecutor (= 0.78.3) - - React-jsinspectortracing (0.78.3): + - React-perflogger (= 0.79.5) + - React-runtimeexecutor (= 0.79.5) + - React-jsinspectortracing (0.79.5): - RCT-Folly - - React-jsitracing (0.78.3): + - React-oscompat + - React-jsitooling (0.79.5): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.79.5) + - React-jsi (= 0.79.5) + - React-jsinspector + - React-jsinspectortracing + - React-jsitracing (0.79.5): - React-jsi - - React-logger (0.78.3): + - React-logger (0.79.5): - glog - - React-Mapbuffer (0.78.3): + - React-Mapbuffer (0.79.5): - glog - React-debug - - React-microtasksnativemodule (0.78.3): + - React-microtasksnativemodule (0.79.5): - hermes-engine - RCT-Folly + - React-hermes - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - react-native-blob-util (0.19.4): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - react-native-blur (4.4.1): - DoubleConversion - glog @@ -1314,9 +1391,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1339,9 +1419,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1374,9 +1457,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1397,31 +1483,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager - - react-native-keyboard-controller/common (= 1.19.0) - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - react-native-keyboard-controller/common (1.19.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1444,9 +1511,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1458,71 +1528,7 @@ PODS: - react-native-restart (0.0.27): - React-Core - react-native-safe-area-context (5.6.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - react-native-safe-area-context/common (= 5.6.2) - - react-native-safe-area-context/fabric (= 5.6.2) - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - react-native-safe-area-context/common (5.6.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - react-native-safe-area-context/fabric (5.6.2): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - react-native-safe-area-context/common - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - react-native-slider (4.5.0): - DoubleConversion - glog @@ -1535,9 +1541,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1561,31 +1570,13 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - react-native-video/Video (= 6.18.0) - React-NativeModulesApple - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - react-native-video/Fabric (6.18.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1604,10 +1595,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager - - react-native-video/Fabric + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -1628,38 +1621,45 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-NativeModulesApple (0.78.3): + - React-NativeModulesApple (0.79.5): - glog - hermes-engine - React-callinvoker - React-Core - React-cxxreact + - React-featureflags + - React-hermes - React-jsi - React-jsinspector - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.78.3): + - React-oscompat (0.79.5) + - React-perflogger (0.79.5): - DoubleConversion - RCT-Folly (= 2024.11.18.00) - - React-performancetimeline (0.78.3): + - React-performancetimeline (0.79.5): - RCT-Folly (= 2024.11.18.00) - React-cxxreact - React-featureflags - React-jsinspectortracing + - React-perflogger - React-timing - - React-RCTActionSheet (0.78.3): - - React-Core/RCTActionSheetHeaders (= 0.78.3) - - React-RCTAnimation (0.78.3): + - React-RCTActionSheet (0.79.5): + - React-Core/RCTActionSheetHeaders (= 0.79.5) + - React-RCTAnimation (0.79.5): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1667,7 +1667,8 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTAppDelegate (0.78.3): + - React-RCTAppDelegate (0.79.5): + - hermes-engine - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety @@ -1679,19 +1680,20 @@ PODS: - React-featureflags - React-graphics - React-hermes + - React-jsitooling - React-NativeModulesApple - React-RCTFabric - React-RCTFBReactNativeSpec - React-RCTImage - React-RCTNetwork + - React-RCTRuntime - React-rendererdebug - React-RuntimeApple - React-RuntimeCore - - React-RuntimeHermes - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.78.3): + - React-RCTBlob (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) @@ -1705,7 +1707,7 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.78.3): + - React-RCTFabric (0.79.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) @@ -1716,29 +1718,33 @@ PODS: - React-FabricImage - React-featureflags - React-graphics + - React-hermes - React-ImageManager - React-jsi - React-jsinspector - React-jsinspectortracing - React-performancetimeline + - React-RCTAnimation - React-RCTImage - React-RCTText - React-rendererconsistency + - React-renderercss - React-rendererdebug - React-runtimescheduler - React-utils - Yoga - - React-RCTFBReactNativeSpec (0.78.3): + - React-RCTFBReactNativeSpec (0.79.5): - hermes-engine - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core + - React-hermes - React-jsi - React-jsiexecutor - React-NativeModulesApple - ReactCommon - - React-RCTImage (0.78.3): + - React-RCTImage (0.79.5): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1747,14 +1753,14 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.78.3): - - React-Core/RCTLinkingHeaders (= 0.78.3) - - React-jsi (= 0.78.3) + - React-RCTLinking (0.79.5): + - React-Core/RCTLinkingHeaders (= 0.79.5) + - React-jsi (= 0.79.5) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.78.3) - - React-RCTNetwork (0.78.3): + - ReactCommon/turbomodule/core (= 0.79.5) + - React-RCTNetwork (0.79.5): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1762,7 +1768,20 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTSettings (0.78.3): + - React-RCTRuntime (0.79.5): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-Core + - React-hermes + - React-jsi + - React-jsinspector + - React-jsinspectortracing + - React-jsitooling + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-RCTSettings (0.79.5): - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1770,25 +1789,28 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTText (0.78.3): - - React-Core/RCTTextHeaders (= 0.78.3) + - React-RCTText (0.79.5): + - React-Core/RCTTextHeaders (= 0.79.5) - Yoga - - React-RCTVibration (0.78.3): + - React-RCTVibration (0.79.5): - RCT-Folly (= 2024.11.18.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - React-rendererconsistency (0.78.3) - - React-rendererdebug (0.78.3): + - React-rendererconsistency (0.79.5) + - React-renderercss (0.79.5): + - React-debug + - React-utils + - React-rendererdebug (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - RCT-Folly (= 2024.11.18.00) - React-debug - - React-rncore (0.78.3) - - React-RuntimeApple (0.78.3): + - React-rncore (0.79.5) + - React-RuntimeApple (0.79.5): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-callinvoker @@ -1800,6 +1822,7 @@ PODS: - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-Mapbuffer - React-NativeModulesApple - React-RCTFabric @@ -1809,34 +1832,38 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.78.3): + - React-RuntimeCore (0.79.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-cxxreact - React-Fabric - React-featureflags + - React-hermes - React-jserrorhandler - React-jsi - React-jsiexecutor - React-jsinspector + - React-jsitooling - React-performancetimeline - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.78.3): - - React-jsi (= 0.78.3) - - React-RuntimeHermes (0.78.3): + - React-runtimeexecutor (0.79.5): + - React-jsi (= 0.79.5) + - React-RuntimeHermes (0.79.5): - hermes-engine - RCT-Folly/Fabric (= 2024.11.18.00) - React-featureflags - React-hermes - React-jsi - React-jsinspector + - React-jsinspectortracing + - React-jsitooling - React-jsitracing - React-RuntimeCore - React-utils - - React-runtimescheduler (0.78.3): + - React-runtimescheduler (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) @@ -1844,23 +1871,26 @@ PODS: - React-cxxreact - React-debug - React-featureflags + - React-hermes - React-jsi + - React-jsinspectortracing - React-performancetimeline - React-rendererconsistency - React-rendererdebug - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.78.3) - - React-utils (0.78.3): + - React-timing (0.79.5) + - React-utils (0.79.5): - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - React-debug - - React-jsi (= 0.78.3) - - ReactAppDependencyProvider (0.78.3): + - React-hermes + - React-jsi (= 0.79.5) + - ReactAppDependencyProvider (0.79.5): - ReactCodegen - - ReactCodegen (0.78.3): + - ReactCodegen (0.79.5): - DoubleConversion - glog - hermes-engine @@ -1873,6 +1903,7 @@ PODS: - React-FabricImage - React-featureflags - React-graphics + - React-hermes - React-jsi - React-jsiexecutor - React-NativeModulesApple @@ -1881,112 +1912,55 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.78.3): - - ReactCommon/turbomodule (= 0.78.3) - - ReactCommon/turbomodule (0.78.3): + - ReactCommon (0.79.5): + - ReactCommon/turbomodule (= 0.79.5) + - ReactCommon/turbomodule (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.3) - - React-cxxreact (= 0.78.3) - - React-jsi (= 0.78.3) - - React-logger (= 0.78.3) - - React-perflogger (= 0.78.3) - - ReactCommon/turbomodule/bridging (= 0.78.3) - - ReactCommon/turbomodule/core (= 0.78.3) - - ReactCommon/turbomodule/bridging (0.78.3): + - React-callinvoker (= 0.79.5) + - React-cxxreact (= 0.79.5) + - React-jsi (= 0.79.5) + - React-logger (= 0.79.5) + - React-perflogger (= 0.79.5) + - ReactCommon/turbomodule/bridging (= 0.79.5) + - ReactCommon/turbomodule/core (= 0.79.5) + - ReactCommon/turbomodule/bridging (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.3) - - React-cxxreact (= 0.78.3) - - React-jsi (= 0.78.3) - - React-logger (= 0.78.3) - - React-perflogger (= 0.78.3) - - ReactCommon/turbomodule/core (0.78.3): + - React-callinvoker (= 0.79.5) + - React-cxxreact (= 0.79.5) + - React-jsi (= 0.79.5) + - React-logger (= 0.79.5) + - React-perflogger (= 0.79.5) + - ReactCommon/turbomodule/core (0.79.5): - DoubleConversion - fast_float (= 6.1.4) - fmt (= 11.0.2) - glog - hermes-engine - RCT-Folly (= 2024.11.18.00) - - React-callinvoker (= 0.78.3) - - React-cxxreact (= 0.78.3) - - React-debug (= 0.78.3) - - React-featureflags (= 0.78.3) - - React-jsi (= 0.78.3) - - React-logger (= 0.78.3) - - React-perflogger (= 0.78.3) - - React-utils (= 0.78.3) + - React-callinvoker (= 0.79.5) + - React-cxxreact (= 0.79.5) + - React-debug (= 0.79.5) + - React-featureflags (= 0.79.5) + - React-jsi (= 0.79.5) + - React-logger (= 0.79.5) + - React-perflogger (= 0.79.5) + - React-utils (= 0.79.5) - RNBootSplash (6.3.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - RNCAsyncStorage (2.2.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - RNCClipboard (1.16.3): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - RNCMaskedView (0.3.2): - DoubleConversion - glog @@ -1999,9 +1973,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2009,28 +1986,6 @@ PODS: - ReactCommon/turbomodule/core - Yoga - RNDateTimePicker (8.3.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - RNFingerprintjsPro (1.0.4): - - FingerprintPro (~> 2.11.0) - React-Core - RNFlashList (1.8.3): - DoubleConversion @@ -2044,9 +1999,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2067,9 +2025,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2086,26 +2047,7 @@ PODS: - React-RCTImage - TOCropViewController (~> 2.7.4) - RNPermissions (5.4.4): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - RNReactNativeHapticFeedback (2.3.3): - DoubleConversion - glog @@ -2118,9 +2060,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2144,6 +2089,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2169,6 +2115,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2193,6 +2140,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2216,6 +2164,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2240,6 +2189,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2258,33 +2208,13 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric - React-RCTImage - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNScreens/common (= 4.18.0) - - Yoga - - RNScreens/common (4.18.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2303,9 +2233,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2313,48 +2246,7 @@ PODS: - ReactCommon/turbomodule/core - Yoga - RNSVG (15.15.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNSVG/common (= 15.15.0) - - Yoga - - RNSVG/common (15.15.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - RNZipArchive (7.0.1): - React-Core - RNZipArchive/Core (= 7.0.1) @@ -2388,9 +2280,12 @@ PODS: - React-Fabric - React-featureflags - React-graphics + - React-hermes - React-ImageManager + - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-renderercss - React-rendererdebug - React-utils - ReactCodegen @@ -2412,51 +2307,52 @@ PODS: DEPENDENCIES: - "amplitude-react-native (from `../../../node_modules/@amplitude/analytics-react-native`)" - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - boost (from `../../../node_modules/react-native/third-party-podspecs/boost.podspec`) - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - "CodePush (from `../../../node_modules/@bravemobile/react-native-code-push`)" - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - DoubleConversion (from `../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - fast_float (from `../../../node_modules/react-native/third-party-podspecs/fast_float.podspec`) + - FBLazyVector (from `../../../node_modules/react-native/Libraries/FBLazyVector`) - ffmpeg-kit-ios-full-gpl (from `./ffmpeg-kit-ios-full-gpl.podspec`) - ffmpeg-kit-react-native/full-gpl (from `../../../node_modules/ffmpeg-kit-react-native/ffmpeg-kit-react-native.podspec`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - fmt (from `../../../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../../../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - lottie-react-native (from `../node_modules/lottie-react-native`) - nSure - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - RCT-Folly (from `../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../../../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../../../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../../../node_modules/react-native/`) + - React-callinvoker (from `../../../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../../../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../../../node_modules/react-native/`) + - React-CoreModules (from `../../../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../../../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../../../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../../../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../../../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../../../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../../../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../../../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../../../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../../../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../../../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../../../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../../../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsinspectortracing (from `../../../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) + - React-jsitooling (from `../../../node_modules/react-native/ReactCommon/jsitooling`) + - React-jsitracing (from `../../../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../../../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../../../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-blob-util (from `../node_modules/react-native-blob-util`) - "react-native-blur (from `../../../node_modules/@react-native-community/blur`)" - react-native-config (from `../node_modules/react-native-config`) @@ -2479,40 +2375,42 @@ DEPENDENCIES: - react-native-video (from `../../../node_modules/react-native-video`) - react-native-view-shot (from `../node_modules/react-native-view-shot`) - react-native-webview (from `../../../node_modules/react-native-webview`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-rncore (from `../node_modules/react-native/ReactCommon`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - React-NativeModulesApple (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-oscompat (from `../../../node_modules/react-native/ReactCommon/oscompat`) + - React-perflogger (from `../../../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../../../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../../../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../../../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../../../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../../../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../../../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../../../node_modules/react-native/React`) + - React-RCTImage (from `../../../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../../../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../../../node_modules/react-native/Libraries/Network`) + - React-RCTRuntime (from `../../../node_modules/react-native/React/Runtime`) + - React-RCTSettings (from `../../../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../../../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../../../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../../../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-renderercss (from `../../../node_modules/react-native/ReactCommon/react/renderer/css`) + - React-rendererdebug (from `../../../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../../../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../../../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../../../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../../../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../../../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../../../node_modules/react-native/ReactCommon/react/utils`) - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`) - RNBootSplash (from `../../../node_modules/react-native-bootsplash`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNCClipboard (from `../../../node_modules/@react-native-clipboard/clipboard`)" - "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)" - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)" - - "RNFingerprintjsPro (from `../../../node_modules/@fingerprintjs/fingerprintjs-pro-react-native`)" - "RNFlashList (from `../../../node_modules/@shopify/flash-list`)" - RNFS (from `../../../node_modules/react-native-fs`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) @@ -2527,12 +2425,11 @@ DEPENDENCIES: - "snap-kit-react-native (from `../../../node_modules/@snapchat/snap-kit-react-native`)" - SRSRadialGradient (from `../../../node_modules/react-native-radial-gradient/ios`) - tiktok-opensdk-react-native (from `../../../node_modules/tiktok-opensdk-react-native`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + - Yoga (from `../../../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: trunk: - Base64 - - FingerprintPro - google-cast-sdk-dynamic-xcframework-no-bluetooth - JWT - lottie-ios @@ -2550,90 +2447,92 @@ EXTERNAL SOURCES: amplitude-react-native: :path: "../../../node_modules/@amplitude/analytics-react-native" boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + :podspec: "../../../node_modules/react-native/third-party-podspecs/boost.podspec" BVLinearGradient: :path: "../node_modules/react-native-linear-gradient" CodePush: :path: "../../../node_modules/@bravemobile/react-native-code-push" DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + :podspec: "../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" fast_float: - :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" + :podspec: "../../../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" + :path: "../../../node_modules/react-native/Libraries/FBLazyVector" ffmpeg-kit-ios-full-gpl: :podspec: "./ffmpeg-kit-ios-full-gpl.podspec" ffmpeg-kit-react-native: :podspec: "../../../node_modules/ffmpeg-kit-react-native/ffmpeg-kit-react-native.podspec" fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + :podspec: "../../../node_modules/react-native/third-party-podspecs/fmt.podspec" glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + :podspec: "../../../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-01-13-RNv0.78.0-a942ef374897d85da38e9c8904574f8376555388 + :podspec: "../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2025-06-04-RNv0.79.3-7f9a871eefeb2c3852365ee80f0b6733ec12ac3b lottie-react-native: :path: "../node_modules/lottie-react-native" RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + :podspec: "../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + :path: "../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" + :path: "../../../node_modules/react-native/Libraries/Required" RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" + :path: "../../../node_modules/react-native/Libraries/TypeSafety" React: - :path: "../node_modules/react-native/" + :path: "../../../node_modules/react-native/" React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" + :path: "../../../node_modules/react-native/ReactCommon/callinvoker" React-Core: - :path: "../node_modules/react-native/" + :path: "../../../node_modules/react-native/" React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" + :path: "../../../node_modules/react-native/React/CoreModules" React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" + :path: "../../../node_modules/react-native/ReactCommon/cxxreact" React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" + :path: "../../../node_modules/react-native/ReactCommon/react/debug" React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/defaults" React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/dom" React-Fabric: - :path: "../node_modules/react-native/ReactCommon" + :path: "../../../node_modules/react-native/ReactCommon" React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" + :path: "../../../node_modules/react-native/ReactCommon" React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" + :path: "../../../node_modules/react-native/ReactCommon" React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" + :path: "../../../node_modules/react-native/ReactCommon/react/featureflags" React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/graphics" React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" + :path: "../../../node_modules/react-native/ReactCommon/hermes" React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + :path: "../../../node_modules/react-native/ReactCommon/jserrorhandler" React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" + :path: "../../../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + :path: "../../../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + :path: "../../../node_modules/react-native/ReactCommon/jsinspector-modern" React-jsinspectortracing: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + :path: "../../../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + React-jsitooling: + :path: "../../../node_modules/react-native/ReactCommon/jsitooling" React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + :path: "../../../node_modules/react-native/ReactCommon/hermes/executor/" React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" + :path: "../../../node_modules/react-native/ReactCommon/logger" React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" + :path: "../../../node_modules/react-native/ReactCommon" React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" react-native-blob-util: :path: "../node_modules/react-native-blob-util" react-native-blur: @@ -2679,61 +2578,67 @@ EXTERNAL SOURCES: react-native-webview: :path: "../../../node_modules/react-native-webview" React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-oscompat: + :path: "../../../node_modules/react-native/ReactCommon/oscompat" React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" + :path: "../../../node_modules/react-native/ReactCommon/reactperflogger" React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + :path: "../../../node_modules/react-native/ReactCommon/react/performance/timeline" React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + :path: "../../../node_modules/react-native/Libraries/ActionSheetIOS" React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" + :path: "../../../node_modules/react-native/Libraries/NativeAnimation" React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" + :path: "../../../node_modules/react-native/Libraries/AppDelegate" React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" + :path: "../../../node_modules/react-native/Libraries/Blob" React-RCTFabric: - :path: "../node_modules/react-native/React" + :path: "../../../node_modules/react-native/React" React-RCTFBReactNativeSpec: - :path: "../node_modules/react-native/React" + :path: "../../../node_modules/react-native/React" React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" + :path: "../../../node_modules/react-native/Libraries/Image" React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" + :path: "../../../node_modules/react-native/Libraries/LinkingIOS" React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" + :path: "../../../node_modules/react-native/Libraries/Network" + React-RCTRuntime: + :path: "../../../node_modules/react-native/React/Runtime" React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" + :path: "../../../node_modules/react-native/Libraries/Settings" React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" + :path: "../../../node_modules/react-native/Libraries/Text" React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" + :path: "../../../node_modules/react-native/Libraries/Vibration" React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-renderercss: + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/css" React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/debug" React-rncore: - :path: "../node_modules/react-native/ReactCommon" + :path: "../../../node_modules/react-native/ReactCommon" React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + :path: "../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios" React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" + :path: "../../../node_modules/react-native/ReactCommon/react/runtime" React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + :path: "../../../node_modules/react-native/ReactCommon/runtimeexecutor" React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" + :path: "../../../node_modules/react-native/ReactCommon/react/runtime" React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + :path: "../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" React-timing: - :path: "../node_modules/react-native/ReactCommon/react/timing" + :path: "../../../node_modules/react-native/ReactCommon/react/timing" React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" + :path: "../../../node_modules/react-native/ReactCommon/react/utils" ReactAppDependencyProvider: :path: build/generated/ios ReactCodegen: :path: build/generated/ios ReactCommon: - :path: "../node_modules/react-native/ReactCommon" + :path: "../../../node_modules/react-native/ReactCommon" RNBootSplash: :path: "../../../node_modules/react-native-bootsplash" RNCAsyncStorage: @@ -2744,8 +2649,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-masked-view/masked-view" RNDateTimePicker: :path: "../node_modules/@react-native-community/datetimepicker" - RNFingerprintjsPro: - :path: "../../../node_modules/@fingerprintjs/fingerprintjs-pro-react-native" RNFlashList: :path: "../../../node_modules/@shopify/flash-list" RNFS: @@ -2775,7 +2678,7 @@ EXTERNAL SOURCES: tiktok-opensdk-react-native: :path: "../../../node_modules/tiktok-opensdk-react-native" Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" + :path: "../../../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: amplitude-react-native: 9d57e1bcc4175039e36283390aa3daeaea9441a5 @@ -2785,115 +2688,117 @@ SPEC CHECKSUMS: CodePush: f52aac93456bc76d8219ca3673cc7ce81470429d DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 - FBLazyVector: e053802577a711add20e45bbbf5dd1180b6ca62e + FBLazyVector: d2a9cd223302b6c9aa4aa34c1a775e9db609eb52 ffmpeg-kit-ios-full-gpl: 7d416729f7b3604b64cee2a752c42608a8d228e0 ffmpeg-kit-react-native: 3cea88c9c5cfad62e1465279ea7d800dfbba3b00 - FingerprintPro: 2fbd0cda75fbab32055f7cb38bc5fc9d17168979 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 + glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 google-cast-sdk-dynamic-xcframework-no-bluetooth: 1fa9e267df3fd6f8a1c6e3345142ca5286297968 - hermes-engine: b5c9cfbe6415f1b0b24759f2942c8f33e9af6347 + hermes-engine: f03b0e06d3882d71e67e45b073bb827da1a21aae JWT: ef71dfb03e1f842081e64dc42eef0e164f35d251 lottie-ios: a881093fab623c467d3bce374367755c272bdd59 - lottie-react-native: 6dfd57e4d16333cc79dc06955f7a37773581ce5b + lottie-react-native: 173db75996ba0ebc176424e04cfc0cc0175b307d nSure: 2fc3fc973c44aa0be9a3446f84cb514adc475205 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 - RCTDeprecation: cf39863b43871c2031050605fb884019b6193910 - RCTRequired: 8fdd66f4a97f352b66f38cfef13fc11b12d2c884 - RCTTypeSafety: c9c9e64389bc545fc137030615b387ef1654dcee - React: 14a80ea4f13387cfdaa4250b46fbfe19754c220c - React-callinvoker: fed1dad5d6cf992c7b4b5fdbf1bf67fe2e8fb6c5 - React-Core: f703e7a56fcedc3e959b8b7899995e57fd58539a - React-CoreModules: 6e87c904cc257058c271708eef1719b5b3039131 - React-cxxreact: 4153beeff710944832cd90ccb141e299ee16b7d3 - React-debug: aea2894f3f71697ec8724c11db9c46c1574b21e4 - React-defaultsnativemodule: de00ba37b23205eca31cee5a6a8756a48f0a38f9 - React-domnativemodule: b8dd2af2fcd232da5ea679e439a95a827a852a21 - React-Fabric: a63a42788096362a4840d827dab426c17a15a644 - React-FabricComponents: 8dd7bea45626350fe7bd052ea7c9fd657a1977cc - React-FabricImage: de4c10c3319b916ca4d0b6a6fd53c3ecb4da0f83 - React-featureflags: c6de2182d6065b3239245820347947e2c1309feb - React-featureflagsnativemodule: 47c7a5814a027eb262c2709852d1b1a597599cca - React-graphics: bf16f4f74e3bc342b58b71797674a4eafda467a9 - React-hermes: a942bebef5e9fcc31f51c6fb814e96c260a2a20d - React-idlecallbacksnativemodule: d53c466886963cc325172bc9100b21e8511bce97 - React-ImageManager: 4e2d837df0bf6b4cc42238122dc4577545befed5 - React-jserrorhandler: 41f26e9e5559bda0549f27410d685a8f21bdbb94 - React-jsi: b2de88284fc2cc69466a34d8b794160216d3bd2c - React-jsiexecutor: e947af1c9e42610affd9f4178cd4b649e8ac889b - React-jsinspector: 7efabcd0a393fed8e3bd4b9c8c461c1b4d5d2b90 - React-jsinspectortracing: 8cddf7d93b8aa43a14b5d92e8a83de083a1158e6 - React-jsitracing: 1d636f7da6f2d4f9c2d3d7e9d50f469eb2356ddb - React-logger: e6c3c1b55c18cc1b945b647ff9ada53e0e710b50 - React-Mapbuffer: 396d97d3534fa0df8c1a690eb6269d8a7d9f5b0e - React-microtasksnativemodule: 9f9819152d22361967a6dfaaca7828af37b0ae70 - react-native-blob-util: d65692a2acce17b7a836805114828142a3634033 - react-native-blur: b37343d4df1af48a17444156b674b26d5aec2425 + RCTDeprecation: 5f638f65935e273753b1f31a365db6a8d6dc53b5 + RCTRequired: 8b46a520ea9071e2bc47d474aa9ca31b4a935bd8 + RCTTypeSafety: cc4740278c2a52cbf740592b0a0a40df1587c9ab + React: 6393ae1807614f017a84805bf2417e3497f518a6 + React-callinvoker: c34f666f551f05a325b87e7e3e6df0e082fa3d99 + React-Core: fc07a4b69a963880b25142c51178f4cb75628c7d + React-CoreModules: 94d39315cfa791f6c477712fea47c34f8ecb26c6 + React-cxxreact: 628c28cdb3fdef93ee3bfc2bec8e2d776e81ae49 + React-debug: a951cdb698321d78ebd955fc8788ebbe51af3519 + React-defaultsnativemodule: 08779733c4541be5da1f1d3ec8492300dbc3c00a + React-domnativemodule: fdd4821b9a0c44e87ed9263231225aa65fe982e0 + React-Fabric: 8d905d8c41d666bf283a5b09db56bdaccfa07c8d + React-FabricComponents: 43aab5c94c7b5bbcabc3a9821b8536a0711a0f01 + React-FabricImage: 10708fa449d3f1b4a8d6eedb97f0c6476b098bb4 + React-featureflags: 32d776f9bef34bdab6218ad99db535e75e5c1f4e + React-featureflagsnativemodule: 413da7bc0d21aa86315dbea0fb2b2c27cb8b4bab + React-graphics: 83c676b633acc5044b5c5dfdb7f95aa3aaf7b7a5 + React-hermes: af1b3d79491295abc9d1b11f84e77d5dc00095b6 + React-idlecallbacksnativemodule: b039a595f29d9a87bbad12e731de45879a054b33 + React-ImageManager: 81dc38602ff1e7a8fd5fe3bf54772cf1a30d49c1 + React-jserrorhandler: b230f573b63a6a2a5540054d46cfb6087d26c86c + React-jsi: e9c3019e00db5d144e0a660616a52a605e12c39a + React-jsiexecutor: 3ed70a394b76f33e6c4ec4b382a457df7309d96c + React-jsinspector: 977527f0224edb5ae0970e946411f36dd1d70f43 + React-jsinspectortracing: 64ec4bde979134830c8f937758416f8d50daa8fb + React-jsitooling: 9dd45534fd158b508f785b547bf1350933bf465a + React-jsitracing: a645b2b3c4f6aa79051d5485c67b188ef49045a0 + React-logger: e6e6164f1753e46d1b7e2c8f0949cd7937eaf31b + React-Mapbuffer: 5b4959cbd91e7e8fae42ab0f4b7c25b86fd139a1 + React-microtasksnativemodule: 1695ab137281dd03de967b7bbeb4e392601f6432 + react-native-blob-util: 30a6c9fd067aadf9177e61a998f2c7efb670598d + react-native-blur: e8e6e21e187bb83eb4ac70db4771b58273ce2f16 react-native-config: 86038147314e2e6d10ea9972022aa171e6b1d4d8 - react-native-document-picker: 9fe3cd3187a2995d78d1f34d3a52eac1b68df245 + react-native-document-picker: b257e96011bb7fe15790c836339ba22394a1d468 react-native-fast-crypto: b30594570dab23aca7e74e206b2c03e28a006216 react-native-get-random-values: 384787fd76976f5aec9465aff6fa9e9129af1e74 react-native-google-cast: 18b9b2fc518caabfa65d309409e160b3fc6d1733 - react-native-image-picker: 42e3b160d82fb168288345db3b9a2a99aad02afe + react-native-image-picker: 0dedb728321ef49f996619332e10603770434e5a react-native-in-app-review: db8bb167a5f238e7ceca5c242d6b36ce8c4404a4 - react-native-keyboard-controller: 3aaba4f7015628ca833ce7ad889754571cef6455 + react-native-keyboard-controller: c8c8a6ce30420ca67fae84dd1a9f9a861a988e2a react-native-netinfo: f0a9899081c185db1de5bb2fdc1c88c202a059ac react-native-notifications: 4601a5a8db4ced6ae7cfc43b44d35fe437ac50c4 - react-native-pager-view: 65a2144f06f4c8d859ec309ab96e9ee2bf2062fd + react-native-pager-view: e4cf30bc28e3ccf864f6cfb90590d8cea13b7393 react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846 react-native-restart: 7595693413fe3ca15893702f2c8306c62a708162 - react-native-safe-area-context: 337fce5941460e2605fb3c39dbb0f6e0765c8010 - react-native-slider: 020b1f9c0b552155230507c5813700ce5ed7086c + react-native-safe-area-context: e48706fb09fde89f82e12bfb49b140cfdcb761f7 + react-native-slider: f7d96d39d20d367a20d7af5bdae138aed3b2e75f react-native-track-player: 97d76dbbd35f27cc709e5f04540615e54264b3f9 react-native-version-number: b415bbec6a13f2df62bf978e85bc0d699462f37f - react-native-video: 9075d21d48b5bc90cbfd30ead1c51bfba039520c + react-native-video: 5efc3c2185906e2c49c81e7e2c763193f5c5e419 react-native-view-shot: 6b7ed61d77d88580fed10954d45fad0eb2d47688 - react-native-webview: 4c1156463f8031c30ea99262317ac3d0a5940211 - React-NativeModulesApple: 7c9c0c4e76731529b2e15f5d5edb266b980556ea - React-perflogger: 069d41f741187be92ed46c6ac67add03b99f3166 - React-performancetimeline: 6deb6607876acc3d5647bd994e139639702fb28e - React-RCTActionSheet: a078d5008632fed31b0024c420ee02e612b317d5 - React-RCTAnimation: 82e31d191af4175e0c2df5bdac2c8569a5f3ab54 - React-RCTAppDelegate: a5c1ff79f5987462b4f62b27387459ba84012439 - React-RCTBlob: c462b8b7de6ce44ddc56dd96eebe1da0a6e54c77 - React-RCTFabric: 4e4cd6953090c7399f5edd0e3ecedc0b03c06ffc - React-RCTFBReactNativeSpec: 8392ef66ad156cfa848546859bbff3b5e8a09458 - React-RCTImage: 10fad63f1bb8adbd519c4c2ef6bec3c0d95fdd32 - React-RCTLinking: 3843288a44dc33ec083c843f3ff31dd7d96ece41 - React-RCTNetwork: f237299bda8bbd56c4d01d2825110e40b75c438a - React-RCTSettings: c24ce1ee96c9b001ff5059ddd53412a20b7d5e71 - React-RCTText: d97cfb9c89b06de9530577dd43f178c47ea07853 - React-RCTVibration: 2fcefee071a4f0d416e4368416bb073ea6893451 - React-rendererconsistency: 259dede0b0b9b46bcc2fcdc94465a5fa01a66ef9 - React-rendererdebug: 3f7600015d8ce3a4c97149f3660fe30dba17c0fd - React-rncore: 93b049aef62762732c06413616b0f033d47b9a95 - React-RuntimeApple: 85a29d8805ace62a2db360cc46e3100435b0dd2b - React-RuntimeCore: a81ea64fb5578c0367736c91fb85d6844950b7c2 - React-runtimeexecutor: 2de0d537fc6d5b4a7074587b4459ea331c7e5715 - React-RuntimeHermes: 7a8c26dc9e99bd45bea83a2f945a54024500a039 - React-runtimescheduler: 5baeb838d7105e6825c94c23964f15e7d2c4447c - React-timing: b3fee4c56239f60f62efb29bb8eeecf636a27665 - React-utils: 21356bf3cdd7a337587165fea57563a077993864 - ReactAppDependencyProvider: ad88c80e06f29900f2e6f9ccf1d4cb0bfc3e1bbc - ReactCodegen: 8e673528b686d334cfa785515d9c9b14bcb272d8 - ReactCommon: 7ea8ee50e489e9cc75922f19a06ea45c1b59b4bd - RNBootSplash: 85b58e4edba342515528e3507c20b3f862d220e7 - RNCAsyncStorage: efa02b644121f4e1f7f33e712f4f82c30aa4ff4a - RNCClipboard: 41b301766fd5ec1d91b4cd7130607a2e99518bb2 - RNCMaskedView: 18c76ebdf9752bb75652829f99f6c3d1318cc864 - RNDateTimePicker: 5567e082958470867c4a27dd90cdaf2ea54bde0c - RNFingerprintjsPro: eeda8165fe366f1039cd8823277295a525cb81b5 - RNFlashList: 73d7cbeadb96a39bfaf80c75f77540eedfabae2c + react-native-webview: 0be13e6771328023c1b2203d4141f4e74b59a7c6 + React-NativeModulesApple: 3ecc647742d33ad617bd2805902e3f91f2b3008f + React-oscompat: 0592889a9fcf0eacb205532028e4a364e22907dd + React-perflogger: 634408a9a0f5753faa577dfa81bc009edca01062 + React-performancetimeline: faa22f963845ae2298c28ef6b84bd8b58d3d8a90 + React-RCTActionSheet: ce67bdc050cc1d9ef673c7a93e9799288a183f24 + React-RCTAnimation: 12193c2092a78012c7f77457806dcc822cc40d2c + React-RCTAppDelegate: b0a8aa38e4791915673a7a3ae80b2840a81ec255 + React-RCTBlob: 923cf9b0098b9a641cb1e454c30a444d9d3cda70 + React-RCTFabric: d22c1e01bb64c513457740dc0eba9ce3068b328b + React-RCTFBReactNativeSpec: b7671d70d65f61326805725b24c7855aab0befb2 + React-RCTImage: 580a5d0a6fdf9b69629d0582e5fb5a173e152099 + React-RCTLinking: 4ed7c5667709099bfd6b2b6246b1dfd79c89f7cb + React-RCTNetwork: 06a22dd0088392694df4fd098634811aa0b3e166 + React-RCTRuntime: 8825d5ab9381ddc8fdd25279010f8e9a13b358ed + React-RCTSettings: 9dbf433f302c8ebe43b280453e74624098fbc706 + React-RCTText: 92fcd78d6c44dbe64d147bb63f53698bcba7c971 + React-RCTVibration: 513659394c92491e6c749e981424f6e1e0abdb3c + React-rendererconsistency: aedf87f8509bc0936ae5475d4ea1e26cb5e8def6 + React-renderercss: 71727bedda678e0918506749f94f745e1050a080 + React-rendererdebug: 81a6b97bd089b49a8e7f4f5c7fd1de588c0e8a11 + React-rncore: 3eb6f7bdfd181bc26f9f3edc87f70eb1a68a2f3c + React-RuntimeApple: 368e8e7b0018f9e9ca4294a6a8167e6aebc6eb87 + React-RuntimeCore: 0f9a8bb41e043f3adaea111e5128801af0dfbc34 + React-runtimeexecutor: ebfd71307b3166c73ac0c441c1ea42e0f17f821d + React-RuntimeHermes: 7f55a7285794023ccb3cfe3e89c66c632ed566b1 + React-runtimescheduler: 316243b204bb6a5fd80cea7a97df9b1614ee1b0e + React-timing: acc3fa92c72dcc1de6300d752ebb84a1d55dc809 + React-utils: 4efa98c1c602f5eacac3cece396c0b7c7d70c1d3 + ReactAppDependencyProvider: c42e7abdd2228ae583bdabc3dcd8e5cda6bef944 + ReactCodegen: 0f01d79b2dffef49205a332d7ce5dc24d7c0d5d8 + ReactCommon: 41137f7e87cf7fd1c041a7124dfa3d0d48aa43f3 + RNBootSplash: c2ae3f80f6c90979ee57977672f57e74981f85a5 + RNCAsyncStorage: 23e56519cc41d3bade3c8d4479f7760cb1c11996 + RNCClipboard: dfeb43751adff21e588657b5b6c888c72f3aa68e + RNCMaskedView: dc63cbc7b2f614b8b4526e11ed677b36e92cd9fb + RNDateTimePicker: a793ed8822283f576dd0a205a0916c5098c2611f + RNFlashList: c68de6a14cce0a262b0a4fabdea690d9f3361063 RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 - RNGestureHandler: 66e593addd8952725107cfaa4f5e3378e946b541 + RNGestureHandler: 1070e4e691b23028309d796cc30652d9875138c7 RNImageCropPicker: 64b6bec9ec185ee59b71a93d7058816bd0e1916e - RNPermissions: f9a0f92115d3e67ebc7fc202ce21c8133ce562f0 - RNReactNativeHapticFeedback: 5fdbbaedabc1698dc3bb2a72105fadf63136a451 - RNReanimated: 8a31823e0237f8acc67449779473bb5b4b7cf856 - RNScreens: 3bd1e11f556f1ac51ea88223cadc9f6a95cd33fa - RNShare: 714e53dc317f27540d137783b544d79a0dbef410 - RNSVG: 17ecf94f01f36124607b239fa7c025b052d1d382 + RNPermissions: 0a18cdcfdd1773b969f817ce20d47c2b74724af8 + RNReactNativeHapticFeedback: b837dd570ef9c316ed9f93274a2cdb152a8d78ab + RNReanimated: b61d01db005bc4114b04e7a88c3f32cbd3865dac + RNScreens: 2a54172f8bba4aa2683461ee6d588edf6e467bd5 + RNShare: 8d7f2fee08e6f8e2155a2f9495d9f9ebb9efe021 + RNSVG: ee7aec9cc5f0b3bde6c84cbf6d893c0afe769fc5 RNZipArchive: 7bb4c70d6aa2dd235212c0a4a3de0a4e237e2569 snap-kit-react-native: 751006199818fccb38c8a01196495167bc25e9fb SnapSDK: 1e68aad748e080f49e3802559b3b76026666ef62 @@ -2901,12 +2806,12 @@ SPEC CHECKSUMS: SRSRadialGradient: 8363f6c3ce63636f5ffee74a7016f5c84a6df0a1 SSZipArchive: c69881e8ac5521f0e622291387add5f60f30f3c4 SwiftAudioEx: 6f511018b7a0fdfd14ed1bb4081f953588245cc0 - tiktok-opensdk-react-native: 720a5896a8a04e9f03443e31e87b059a36546de0 + tiktok-opensdk-react-native: f6b1a34bb4c1889c0dae5838effe484c673ea0c0 TikTokOpenSDKCore: e6f34e48bd6e85e4d94f9c04782c13d5defafb55 TikTokOpenShareSDK: a7da017bc66c28d0aefea9342c0cfcc7e52ea2b7 TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 - Yoga: eca8dd841b7cd47d82d66be58af8e3aeb819012f + Yoga: adb397651e1c00672c12e9495babca70777e411e -PODFILE CHECKSUM: b77c7dc423273b965d32a03d73fe6277c67877b7 +PODFILE CHECKSUM: ff32c6e71db703085465729079ba9f2c256d255a -COCOAPODS: 1.16.2 +COCOAPODS: 1.15.2 diff --git a/packages/mobile/ios/scripts/uploadSentryDebugSymbols.sh b/packages/mobile/ios/scripts/uploadSentryDebugSymbols.sh deleted file mode 100755 index 09c9246eff8..00000000000 --- a/packages/mobile/ios/scripts/uploadSentryDebugSymbols.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Sentry has been removed from mobile -echo "Sentry debug symbol upload disabled" \ No newline at end of file diff --git a/packages/mobile/ios/sentry.properties b/packages/mobile/ios/sentry.properties deleted file mode 100644 index e5b10f50347..00000000000 --- a/packages/mobile/ios/sentry.properties +++ /dev/null @@ -1,4 +0,0 @@ -defaults.url=https://sentry.io/ -defaults.org=audius -defaults.project=audius-client -auth.token=ffe6cd7871b44b1ab42ed98e644fdc9240f1eac620b8406e8795232679e5fceb diff --git a/packages/mobile/metro.config.js b/packages/mobile/metro.config.js index 2decfb45440..025e82786d1 100644 --- a/packages/mobile/metro.config.js +++ b/packages/mobile/metro.config.js @@ -144,7 +144,7 @@ const config = { ), react: resolveModule('react'), - 'react-native': path.resolve(__dirname, './node_modules', 'react-native'), + 'react-native': resolveModule('react-native'), // Aliases for '@audius/web' to allow for absolute paths ...getClientAliases(), diff --git a/packages/mobile/package.json b/packages/mobile/package.json index fc9f5c20e93..0b8c212f49c 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.179", + "version": "1.5.183", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug", @@ -53,7 +53,6 @@ "@ebay/nice-modal-react": "^1.2.13", "@emotion/native": "^11.11.0", "@emotion/react": "11.14.0", - "@fingerprintjs/fingerprintjs-pro-react-native": "3.9.0", "@gorhom/bottom-sheet": "5.2.8", "@gorhom/portal": "1.0.14", "@hcaptcha/react-native-hcaptcha": "1.6.0", @@ -109,7 +108,7 @@ "promise": "8.3.0", "query-string": "7.0.1", "react": "19.0.0", - "react-native": "0.78.3", + "react-native": "0.79.5", "react-native-autolink": "4.2.0", "react-native-bars": "2.4.2", "react-native-blob-util": "0.19.4", @@ -185,14 +184,14 @@ "@babel/plugin-transform-react-jsx": "7.21.0", "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", - "@react-native-community/cli": "^15.0.1", - "@react-native-community/cli-platform-android": "^15.0.1", - "@react-native-community/cli-platform-ios": "^15.0.1", - "@react-native/babel-preset": "0.78.3", - "@react-native/eslint-config": "0.76.9", - "@react-native/metro-babel-transformer": "0.78.3", - "@react-native/metro-config": "0.78.3", - "@react-native/typescript-config": "0.76.9", + "@react-native-community/cli": "18.0.0", + "@react-native-community/cli-platform-android": "18.0.0", + "@react-native-community/cli-platform-ios": "18.0.0", + "@react-native/babel-preset": "0.79.5", + "@react-native/eslint-config": "0.79.5", + "@react-native/metro-babel-transformer": "0.79.5", + "@react-native/metro-config": "0.79.5", + "@react-native/typescript-config": "0.79.5", "@redux-devtools/cli": "4.0.0", "@testing-library/jest-native": "5.4.3", "@testing-library/react-native": "12.4.3", diff --git a/packages/mobile/src/app/App.tsx b/packages/mobile/src/app/App.tsx index 1dfadc9ee5c..6d9652a204e 100644 --- a/packages/mobile/src/app/App.tsx +++ b/packages/mobile/src/app/App.tsx @@ -42,9 +42,6 @@ import { Drawers } from './Drawers' import ErrorBoundary from './ErrorBoundary' import { ThemeProvider } from './ThemeProvider' import './registerNiceModals' -import { initSentry, navigationIntegration } from './sentry' - -initSentry() // Wire the platform-agnostic bridge so common (sagas/services) can drive // nice-modal-react without depending on the package directly. @@ -130,9 +127,7 @@ const App = () => { - + {/* NiceModal-managed modals (e.g. @@ -147,10 +142,17 @@ const App = () => { + {/* DrawerPortal must live INSIDE + BottomSheetModalProvider — its inner + PortalProvider isolates the registry, + so a + from within a bottom sheet (e.g. the + comment kebab) would otherwise + silently fail to find the host. */} + - diff --git a/packages/mobile/src/app/AudiusQueryProvider.tsx b/packages/mobile/src/app/AudiusQueryProvider.tsx index 1e96fc7ad77..f5147338ed4 100644 --- a/packages/mobile/src/app/AudiusQueryProvider.tsx +++ b/packages/mobile/src/app/AudiusQueryProvider.tsx @@ -14,7 +14,6 @@ import { authService, solanaWalletService } from 'app/services/sdk/auth' import { identityService } from 'app/services/sdk/identity' import { store } from 'app/store' import { generatePlaylistArtwork } from 'app/utils/generatePlaylistArtwork' -import { reportToSentry } from 'app/utils/reportToSentry' type AudiusQueryProviderProps = { children: ReactNode @@ -27,7 +26,6 @@ export const queryContext = { identityService, solanaWalletService, dispatch: store.dispatch, - reportToSentry, env, fetch, remoteConfigInstance, diff --git a/packages/mobile/src/app/Drawers.tsx b/packages/mobile/src/app/Drawers.tsx index 4e407ca93ff..f3e6179155f 100644 --- a/packages/mobile/src/app/Drawers.tsx +++ b/packages/mobile/src/app/Drawers.tsx @@ -14,6 +14,7 @@ import { ClaimAllRewardsDrawer } from 'app/components/challenge-rewards-drawer/C import { ChatActionsDrawer } from 'app/components/chat-actions-drawer' import { CoinflowOnrampDrawer } from 'app/components/coinflow-onramp-drawer/CoinflowOnrampDrawer' import { CoinflowWithdrawDrawer } from 'app/components/coinflow-withdraw-drawer/CoinflowWithdrawDrawer' +import { ConnectDrawer } from 'app/components/connect-drawer' import { CreateChatActionsDrawer } from 'app/components/create-chat-actions-drawer' import { DeactivateAccountConfirmationDrawer } from 'app/components/deactivate-account-confirmation-drawer' import { DeleteChatDrawer } from 'app/components/delete-chat-drawer' @@ -52,6 +53,7 @@ import { ReplaceTrackProgressDrawer } from 'app/screens/edit-track-screen/compon import { EarlyReleaseConfirmationDrawer } from 'app/screens/edit-track-screen/components/EarlyReleaseConfirmationDrawer' import { PublishConfirmationDrawer } from 'app/screens/edit-track-screen/components/PublishConfirmationDrawer' import { ConnectNewWalletDrawer } from 'app/screens/external-wallets/components/ConnectNewWalletDrawer' +import { FeedFilterDrawer } from 'app/screens/feed-screen' import { WelcomeDrawer } from 'app/screens/sign-on-screen/components/WelcomeDrawer' import { PickWinnersDrawer } from 'app/screens/track-screen/PickWinnersDrawer' import { @@ -115,6 +117,7 @@ const commonDrawersMap: { [Modal in Modals]?: ComponentType } = { DeactivateAccountConfirmation: DeactivateAccountConfirmationDrawer, TrendingGenreSelection: TrendingFilterDrawer, TrendingFilter: TrendingCombinedFilterDrawer, + FeedFilter: FeedFilterDrawer, Overflow: OverflowMenuDrawer, SignOutConfirmation: SignOutConfirmationDrawer, AddToCollection: AddToCollectionDrawer, @@ -171,6 +174,7 @@ const nativeDrawersMap: { [DrawerName in Drawer]?: ComponentType } = { ConnectNewWallet: ConnectNewWalletDrawer, PickWinners: PickWinnersDrawer, Queue: QueueDrawer, + Connect: ConnectDrawer, CoinInsightsOverflowMenu, WalletRowOverflowMenu } diff --git a/packages/mobile/src/app/ErrorBoundary.tsx b/packages/mobile/src/app/ErrorBoundary.tsx index 8637abdca16..68064a9a06b 100644 --- a/packages/mobile/src/app/ErrorBoundary.tsx +++ b/packages/mobile/src/app/ErrorBoundary.tsx @@ -1,13 +1,11 @@ import type { ReactNode } from 'react' import { PureComponent, useEffect } from 'react' -import { ErrorLevel } from '@audius/common/models' import type { Nullable } from '@audius/common/utils' import { useToast } from 'app/hooks/useToast' import { make, track } from 'app/services/analytics' import { EventNames } from 'app/types/analytics' -import { reportToSentry } from 'app/utils/reportToSentry' type ErrorToastProps = { error: Nullable @@ -39,11 +37,7 @@ class ErrorBoundary extends PureComponent { componentDidCatch(error: Error | null, errorInfo: any) { // On catch set the error state so it triggers a toast this.setState({ error: error?.message }) - reportToSentry({ - level: ErrorLevel.Fatal, - error: error ?? new Error('Unknown error caught by'), - additionalInfo: errorInfo - }) + console.error(error ?? new Error('Unknown error caught by'), errorInfo) track( make({ eventName: EventNames.APP_ERROR, diff --git a/packages/mobile/src/app/sentry.ts b/packages/mobile/src/app/sentry.ts deleted file mode 100644 index c9665de5cf0..00000000000 --- a/packages/mobile/src/app/sentry.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Sentry removed from mobile - using only console logging and other error tracking - -export const navigationIntegration = null - -export const initSentry = () => { - // No-op: Sentry disabled for mobile - // console.log('Sentry disabled for mobile app') -} diff --git a/packages/mobile/src/components/audio/Airplay.tsx b/packages/mobile/src/components/audio/Airplay.tsx index b7db6c873ad..fea0407bbbf 100644 --- a/packages/mobile/src/components/audio/Airplay.tsx +++ b/packages/mobile/src/components/audio/Airplay.tsx @@ -47,16 +47,22 @@ const Airplay = () => { 'deviceConnected', (device) => { console.info(`Connected to device ${JSON.stringify(device)}`) - if ( - device && - device.devices && - device.devices[0] && - device.devices[0].portType && - device.devices[0].portType === AIRPLAY_PORT_TYPE - ) { - dispatch(setIsCasting({ isCasting: true })) + const route = device?.devices?.[0] + if (route?.portType === AIRPLAY_PORT_TYPE) { + dispatch( + setIsCasting({ + isCasting: true, + method: 'airplay', + deviceName: route.portName ?? route.name ?? null + }) + ) } else { - dispatch(setIsCasting({ isCasting: false })) + // Tag the disconnect with method:'airplay' so the reducer only + // clears state if AirPlay was the active method. This prevents the + // listener (which fires on any audio route change, including the + // one Chromecast triggers when it takes over) from clobbering + // chromecast state. + dispatch(setIsCasting({ isCasting: false, method: 'airplay' })) } } ) diff --git a/packages/mobile/src/components/audio/AudioPlayer.tsx b/packages/mobile/src/components/audio/AudioPlayer.tsx index 1572b5f8287..83f4bbf644b 100644 --- a/packages/mobile/src/components/audio/AudioPlayer.tsx +++ b/packages/mobile/src/components/audio/AudioPlayer.tsx @@ -2,7 +2,7 @@ import { useRef, useEffect, useCallback, useState, useMemo } from 'react' import { useCurrentUserId, useTracks, useUsers } from '@audius/common/api' import { useCurrentTrack } from '@audius/common/hooks' -import { ErrorLevel, Feature, Name, SquareSizes } from '@audius/common/models' +import { Name, SquareSizes } from '@audius/common/models' import type { ID, Track } from '@audius/common/models' import { playbackActions, @@ -57,7 +57,6 @@ import { addOfflineEntries, OfflineDownloadStatus } from 'app/store/offline-downloads/slice' -import { reportToSentry } from 'app/utils/reportToSentry' import { useChromecast } from './GoogleCast' import { useSavePodcastProgress } from './useSavePodcastProgress' @@ -296,17 +295,7 @@ const useQueueSync = (isAudioSetup: boolean) => { : track.duration } } catch (e) { - reportToSentry({ - level: ErrorLevel.Error, - name: 'AudioPlayer: makeTrackData failed', - additionalInfo: { - track, - playerBehavior, - trackOwner: queueTrackOwnersMap[track?.owner_id ?? ''] - }, - feature: Feature.Playback, - error: e - }) + console.error('AudioPlayer: makeTrackData failed', e) return unlistedTrackFallbackTrackData } }, diff --git a/packages/mobile/src/components/audio/GoogleCast.tsx b/packages/mobile/src/components/audio/GoogleCast.tsx index abb1a4d85bb..251662b2dd1 100644 --- a/packages/mobile/src/components/audio/GoogleCast.tsx +++ b/packages/mobile/src/components/audio/GoogleCast.tsx @@ -11,6 +11,7 @@ import { import { CastState, MediaPlayerState, + useCastSession, useCastState, useMediaStatus, useRemoteMediaClient @@ -40,6 +41,7 @@ export const useChromecast = () => { const client = useRemoteMediaClient() const castState = useCastState() const mediaStatus = useMediaStatus() + const castSession = useCastSession() const previousCastState = usePrevious(castState) const [internalCounter, setInternalCounter] = useState(0) @@ -82,15 +84,30 @@ export const useChromecast = () => { // Update our cast UI when the cast device connects useEffect(() => { - switch (castState) { - case CastState.CONNECTED: - dispatch(setIsCasting({ isCasting: true })) - break - default: - dispatch(setIsCasting({ isCasting: false })) - break + if (castState !== CastState.CONNECTED) { + // Tag the disconnect with method:'chromecast' so the reducer only + // clears state if chromecast was the active method — symmetric with + // Airplay.tsx so the two listeners don't clobber each other. + dispatch(setIsCasting({ isCasting: false, method: 'chromecast' })) + return } - }, [castState, dispatch]) + let cancelled = false + const resolve = async () => { + const device = await castSession?.getCastDevice() + if (cancelled) return + dispatch( + setIsCasting({ + isCasting: true, + method: 'chromecast', + deviceName: device?.friendlyName ?? null + }) + ) + } + resolve() + return () => { + cancelled = true + } + }, [castState, castSession, dispatch]) // Ensure that the progress gets reset to 0 // when a new track is played diff --git a/packages/mobile/src/components/comments/CommentDrawer.tsx b/packages/mobile/src/components/comments/CommentDrawer.tsx index abab068e4dc..783233aa946 100644 --- a/packages/mobile/src/components/comments/CommentDrawer.tsx +++ b/packages/mobile/src/components/comments/CommentDrawer.tsx @@ -172,21 +172,21 @@ const CommentDrawerContent = (props: { ) } - // Empty state - if (!commentIds || !commentIds.length) { - return ( - - - - ) - } - + // Always render BottomSheetFlatList (with ListEmptyComponent for the empty + // state) so the bottom sheet can handle keyboard avoidance and touch + // propagation correctly. Swapping in a plain when there are zero + // comments breaks the footer composer's send button on a 0-comment track. return ( id.toString()} ListHeaderComponent={} + ListEmptyComponent={ + + + + } ListFooterComponent={ <> {isLoadingMorePages ? ( diff --git a/packages/mobile/src/components/comments/CommentOverflowMenu.tsx b/packages/mobile/src/components/comments/CommentOverflowMenu.tsx index 305298754eb..672da9a72e2 100644 --- a/packages/mobile/src/components/comments/CommentOverflowMenu.tsx +++ b/packages/mobile/src/components/comments/CommentOverflowMenu.tsx @@ -2,7 +2,6 @@ import React, { useCallback, useState } from 'react' import { useUser } from '@audius/common/api' import { - CommentSectionProvider, useCurrentCommentSection, useDeleteComment, useUpdateCommentNotificationSetting, @@ -238,8 +237,8 @@ export const CommentOverflowMenu = (props: CommentOverflowMenuProps) => { }, [deleteComment, id, parentCommentId, toast]) const handlePress = useCallback(() => { - setIsOpen(!isOpen) - setIsVisible(!isVisible) + setIsOpen(true) + setIsVisible(true) trackEvent( make({ @@ -247,7 +246,7 @@ export const CommentOverflowMenu = (props: CommentOverflowMenuProps) => { commentId: id }) ) - }, [isOpen, isVisible, id]) + }, [id]) return ( <> @@ -262,14 +261,12 @@ export const CommentOverflowMenu = (props: CommentOverflowMenuProps) => { {isVisible ? ( - - setIsOpen(false)} - onClosed={() => setIsVisible(false)} - /> - + setIsOpen(false)} + onClosed={() => setIsVisible(false)} + /> ) : null} {isFlagAndHideConfirmationVisible ? ( diff --git a/packages/mobile/src/components/connect-drawer/ConnectDrawer.tsx b/packages/mobile/src/components/connect-drawer/ConnectDrawer.tsx new file mode 100644 index 00000000000..67d42df8c1f --- /dev/null +++ b/packages/mobile/src/components/connect-drawer/ConnectDrawer.tsx @@ -0,0 +1,186 @@ +import { useCallback, useEffect } from 'react' + +import { castSelectors } from '@audius/common/store' +import { Linking, Platform, Pressable, View } from 'react-native' +import GoogleCast, { useDevices } from 'react-native-google-cast' +import TrackPlayer from 'react-native-track-player' +import { useSelector } from 'react-redux' + +import { + Divider, + Flex, + IconCast, + IconCheck, + IconSpeaker, + Text, + useTheme +} from '@audius/harmony-native' +import { useAirplay } from 'app/components/audio/Airplay' +import { NativeDrawer } from 'app/components/drawer' +import { useDrawer } from 'app/hooks/useDrawer' + +const { getIsCasting, getMethod, getDeviceName } = castSelectors + +const DRAWER_NAME = 'Connect' +const IS_IOS = Platform.OS === 'ios' + +const messages = { + title: 'Connect', + thisDevice: 'This Device', + airplayBluetooth: 'AirPlay & Bluetooth', + bluetooth: 'Bluetooth', + noDevices: 'Searching for cast devices…' +} + +type RowProps = { + label: string + icon: typeof IconSpeaker + active?: boolean + onPress: () => void +} + +const Row = ({ label, icon: Icon, active, onPress }: RowProps) => { + const { color, spacing } = useTheme() + return ( + ({ + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: spacing.l, + paddingVertical: spacing.m, + gap: spacing.m, + backgroundColor: pressed ? color.background.surface2 : 'transparent' + })} + > + + + + {label} + + + {active ? : null} + + ) +} + +export const ConnectDrawer = () => { + const { onClose } = useDrawer(DRAWER_NAME) + const isCasting = useSelector(getIsCasting) + const method = useSelector(getMethod) + const activeDeviceName = useSelector(getDeviceName) + const devices = useDevices() + const { openAirplayDialog } = useAirplay() + + // The Cast framework only auto-discovers when a native CastButton / + // MediaRouterButton is in the hierarchy. Since this drawer renders its + // own device list instead, kick off discovery explicitly on iOS when + // the drawer opens. (Android's MediaRouter is started via CastContext + // init in MainActivity.kt and doesn't expose a startDiscovery method.) + useEffect(() => { + if (!IS_IOS) return + const discovery = GoogleCast.getDiscoveryManager() + discovery.startDiscovery().catch(() => {}) + return () => { + discovery.stopDiscovery().catch(() => {}) + } + }, []) + + const handleSelectThisDevice = useCallback(() => { + if (method === 'chromecast') { + GoogleCast.getSessionManager().endCurrentSession() + } else if (method === 'airplay') { + // iOS doesn't allow programmatic AirPlay disconnect — open the + // system picker so the user can route back to the iPhone. + openAirplayDialog() + } + onClose() + }, [method, openAirplayDialog, onClose]) + + const handleSelectAirplayOrBluetooth = useCallback(() => { + if (IS_IOS) { + openAirplayDialog() + } else { + // Open Android system Bluetooth picker. Fall back to general settings + // if the intent action isn't handled. + Linking.sendIntent('android.settings.BLUETOOTH_SETTINGS').catch(() => { + Linking.openSettings().catch(() => {}) + }) + } + onClose() + }, [openAirplayDialog, onClose]) + + const handleSelectCastDevice = useCallback( + (deviceId: string) => { + // Pre-mute the local player so any active AirPlay route plays silence + // immediately rather than continuing to bleed audio while the + // chromecast session is being established. GoogleCast.tsx also sets + // volume=0 on CONNECTING, but that fires async after startSession; the + // pre-mute closes the gap so AirPlay doesn't briefly play in parallel. + TrackPlayer.setVolume(0).catch(() => {}) + // If the user was AirPlaying, open the AirPlay picker so they can + // route back to iPhone — iOS doesn't allow programmatic disconnect. + if (method === 'airplay') { + openAirplayDialog() + } + GoogleCast.getSessionManager() + .startSession(deviceId) + .catch(() => {}) + onClose() + }, + [method, openAirplayDialog, onClose] + ) + + return ( + + + + + + + {devices.map((device) => { + const isActive = Boolean( + method === 'chromecast' && activeDeviceName === device.friendlyName + ) + return ( + handleSelectCastDevice(device.deviceId)} + /> + ) + })} + + {devices.length === 0 ? ( + + + {messages.noDevices} + + + ) : null} + + + ) +} diff --git a/packages/mobile/src/components/connect-drawer/index.ts b/packages/mobile/src/components/connect-drawer/index.ts new file mode 100644 index 00000000000..df553bbe384 --- /dev/null +++ b/packages/mobile/src/components/connect-drawer/index.ts @@ -0,0 +1 @@ +export { ConnectDrawer } from './ConnectDrawer' diff --git a/packages/mobile/src/components/contest-card/ContestCard.tsx b/packages/mobile/src/components/contest-card/ContestCard.tsx index 0cb40254c4d..3474a0128eb 100644 --- a/packages/mobile/src/components/contest-card/ContestCard.tsx +++ b/packages/mobile/src/components/contest-card/ContestCard.tsx @@ -298,11 +298,7 @@ export const ContestCard = (props: ContestCardProps) => { onPress={handlePress} border='default' shadow='mid' - // Floor the card at ~250px so the artist name + badges row in the - // header doesn't clip on the narrowest carousels (the mobile - // explore "Contests" rail was sized to whatever CardList default - // — the QA pass flagged the cards as too skinny). - style={{ overflow: 'hidden', borderRadius: 14, minWidth: 250 }} + style={{ overflow: 'hidden', borderRadius: 14 }} {...other} > {/* Cover banner */} diff --git a/packages/mobile/src/components/core/CardList.tsx b/packages/mobile/src/components/core/CardList.tsx index 53b18255ca6..4464e3c0e38 100644 --- a/packages/mobile/src/components/core/CardList.tsx +++ b/packages/mobile/src/components/core/CardList.tsx @@ -25,6 +25,11 @@ export type CardListProps = Omit, 'data'> & { // Use carousel spacing to override the parent's margins // e.g. make carousel start and end at edge of the screen carouselSpacing?: number + + // Override the per-item slot width in horizontal mode. Defaults to + // `spacing(43)` (172px), which is right for small thumbnail-style cards + // (tracks, playlists) but too narrow for the redesigned contest card. + horizontalCardWidth?: number | `${number}%` } export type LoadingCard = { _loading: true } @@ -60,12 +65,13 @@ const useStyles = makeStyles(({ spacing }) => ({ flexGrow: 0 }, cardHorizontal: { - width: spacing(43), paddingRight: spacing(3), paddingBottom: spacing(3) } })) +const DEFAULT_HORIZONTAL_CARD_WIDTH = 172 + export function CardList(props: CardListProps) { const { renderItem, @@ -78,6 +84,7 @@ export function CardList(props: CardListProps) { totalCount, horizontal: isHorizontal = false, carouselSpacing = 0, + horizontalCardWidth = DEFAULT_HORIZONTAL_CARD_WIDTH, ...other } = props @@ -109,7 +116,13 @@ export function CardList(props: CardListProps) { ) return ( - + {itemElement} ) @@ -119,7 +132,8 @@ export function CardList(props: CardListProps) { renderItem, styles.card, styles.cardHorizontal, - isHorizontal + isHorizontal, + horizontalCardWidth ] ) diff --git a/packages/mobile/src/components/core/ProfilePicture.tsx b/packages/mobile/src/components/core/ProfilePicture.tsx index 38a60cfd727..6c5fb1ce721 100644 --- a/packages/mobile/src/components/core/ProfilePicture.tsx +++ b/packages/mobile/src/components/core/ProfilePicture.tsx @@ -11,6 +11,11 @@ const messages = { profilePictureFor: 'Profile picture for' } +// Per-URL render timeout (ms) so a hung connection from a slow Open Audio +// Validator Node advances to the next mirror instead of blocking on the OS +// TCP timeout (60–90s). Matches the web MirrorImage pattern. +const PROFILE_PICTURE_TIMEOUT_MS = 3000 + type BaseAvatarProps = Omit // User should prefer userId, and provide user if it's not in the cache @@ -23,23 +28,46 @@ type ProfilePictureUserProps = export type ProfilePictureProps = BaseAvatarProps & ProfilePictureUserProps export const ProfilePicture = (props: ProfilePictureProps) => { - const userId = 'user' in props ? props.user.user_id : props.userId + // Pull onError off so we can chain it with the mirror-retry handler from + // `useProfilePicture` instead of being clobbered by the props spread. + const { onError: callerOnError, ...restProps } = props as BaseAvatarProps & + ProfilePictureUserProps + const userId = 'user' in restProps ? restProps.user.user_id : restProps.userId - const { data: userQuery } = useUser(userId, { enabled: !('user' in props) }) - const user = 'user' in props ? props.user : userQuery + const { data: userQuery } = useUser(userId, { + enabled: !('user' in restProps) + }) + const user = 'user' in restProps ? restProps.user : userQuery const accessibilityLabel = `${messages.profilePictureFor} ${user?.name}` - const { source } = useProfilePicture({ + const { + source, + priorityLowResSource, + onError: onImageError + } = useProfilePicture({ userId, size: SquareSizes.SIZE_150_BY_150 }) + // Forward render-time failures to `useImageSize` so it can mark the URL + // failed and swap in the next mirror. Without this wiring the mirror + // retry only ever fires on prefetch failures, not on stalled renders. + const handleError = (error: { nativeEvent: { error: string } }) => { + if (source && typeof source === 'object' && 'uri' in source) { + onImageError?.(source.uri as string) + } + callerOnError?.(error) + } + return ( ) } diff --git a/packages/mobile/src/components/download-track-archive-drawer/DownloadTrackArchiveDrawer.tsx b/packages/mobile/src/components/download-track-archive-drawer/DownloadTrackArchiveDrawer.tsx index 55993a7852d..70c8eba9332 100644 --- a/packages/mobile/src/components/download-track-archive-drawer/DownloadTrackArchiveDrawer.tsx +++ b/packages/mobile/src/components/download-track-archive-drawer/DownloadTrackArchiveDrawer.tsx @@ -8,7 +8,7 @@ import { } from '@audius/common/api' import { useAppContext } from '@audius/common/context' import type { ID } from '@audius/common/models' -import { Feature, Name } from '@audius/common/models' +import { Name } from '@audius/common/models' import type { DownloadFile } from '@audius/common/services' import { useDownloadTrackArchiveModal } from '@audius/common/store' @@ -23,7 +23,6 @@ import { } from '@audius/harmony-native' import Drawer from 'app/components/drawer' import { env } from 'app/services/env' -import { reportToSentry } from 'app/utils/reportToSentry' import { DrawerHeader } from '../core/DrawerHeader' import LoadingSpinner from '../loading-spinner' @@ -58,14 +57,7 @@ const useDownloadFile = () => { setSuccess(true) } catch (e) { setError(e as Error) - reportToSentry({ - additionalInfo: { - file - }, - name: 'Failed to download track archive', - error: e as Error, - feature: Feature.Remixes - }) + console.error('Failed to download track archive', e as Error) } finally { setFetching(false) setAbortController(null) diff --git a/packages/mobile/src/components/image/UserImage.tsx b/packages/mobile/src/components/image/UserImage.tsx index 1d34c358f18..f340c80ebe9 100644 --- a/packages/mobile/src/components/image/UserImage.tsx +++ b/packages/mobile/src/components/image/UserImage.tsx @@ -9,6 +9,11 @@ import profilePicEmpty from 'app/assets/images/imageProfilePicEmpty2X.png' import { primitiveToImageSource } from './primitiveToImageSource' +// Per-URL render timeout (ms) so a stalled Open Audio Validator Node +// advances to the next mirror without waiting on the OS TCP timeout +// (60–90s). Matches the web MirrorImage pattern. +const USER_IMAGE_TIMEOUT_MS = 3000 + type UseUserImageOptions = { userId: ID | null | undefined size: SquareSizes @@ -87,6 +92,7 @@ export const UserImage = (props: UserImageProps) => { source={source} priorityLowResSource={priorityLowResSource} onError={handleError} + timeoutMs={USER_IMAGE_TIMEOUT_MS} /> ) } diff --git a/packages/mobile/src/components/navigation-container/NavigationContainer.tsx b/packages/mobile/src/components/navigation-container/NavigationContainer.tsx index 6eda5173a8d..ba927cad4e4 100644 --- a/packages/mobile/src/components/navigation-container/NavigationContainer.tsx +++ b/packages/mobile/src/components/navigation-container/NavigationContainer.tsx @@ -19,7 +19,6 @@ import { navigationThemes } from './navigationThemes' type NavigationContainerProps = { children: ReactNode - navigationIntegration: any // Sentry removed - kept for compatibility } export const navigationRef = createNavigationContainerRef() @@ -29,7 +28,7 @@ export const navigationRef = createNavigationContainerRef() * and configures linking */ const NavigationContainer = (props: NavigationContainerProps) => { - const { children, navigationIntegration } = props + const { children } = props const theme = useThemeVariant() const { data: accountHandle } = useCurrentAccountUser({ select: (user) => user?.handle @@ -187,10 +186,6 @@ const NavigationContainer = (props: NavigationContainerProps) => { const onReady = () => { routeNameRef.current = getPrimaryRoute(navigationRef.getRootState()) - // Sentry removed - navigationIntegration is null - if (navigationIntegration?.registerNavigationContainer) { - navigationIntegration.registerNavigationContainer(navigationRef) - } } return ( diff --git a/packages/mobile/src/components/now-playing-drawer/ActionsBar.tsx b/packages/mobile/src/components/now-playing-drawer/ActionsBar.tsx index b6e848bece1..02bea364db1 100644 --- a/packages/mobile/src/components/now-playing-drawer/ActionsBar.tsx +++ b/packages/mobile/src/components/now-playing-drawer/ActionsBar.tsx @@ -1,4 +1,4 @@ -import { useCallback, useLayoutEffect } from 'react' +import { useCallback } from 'react' import { useCurrentUserId, useToggleFavoriteTrack } from '@audius/common/api' import { @@ -13,7 +13,6 @@ import { import type { Track } from '@audius/common/models' import { castSelectors, - castActions, reachabilitySelectors, tracksSocialActions, mobileOverflowMenuUIActions, @@ -26,25 +25,22 @@ import { import { Genre, removeNullable } from '@audius/common/utils' import type { Nullable } from '@audius/common/utils' import { USDC } from '@audius/fixed-decimal' -import { View, Platform } from 'react-native' -import { CastButton, useDevices } from 'react-native-google-cast' +import { View } from 'react-native' +import { useDevices } from 'react-native-google-cast' import { useDispatch, useSelector } from 'react-redux' import { IconButton, - IconCastAirplay, - IconCastChromecast, + IconCast, IconIndent, IconKebabHorizontal, Button, IconMessage } from '@audius/harmony-native' -import { useAirplay } from 'app/components/audio/Airplay' import { useDrawer } from 'app/hooks/useDrawer' import { useNavigation } from 'app/hooks/useNavigation' import { useToast } from 'app/hooks/useToast' import { makeStyles } from 'app/styles' -import { useThemeColors } from 'app/utils/theme' import { useCommentDrawer } from '../comments/CommentDrawerContext' @@ -53,8 +49,7 @@ import { RepostButton } from './RepostButton' const { open: openOverflowMenu } = mobileOverflowMenuUIActions const { repostTrack, undoRepostTrack } = tracksSocialActions -const { updateMethod } = castActions -const { getMethod: getCastMethod, getIsCasting } = castSelectors +const { getIsCasting } = castSelectors const { getTrackPosition } = playbackPositionSelectors const { getIsReachable } = reachabilitySelectors @@ -109,16 +104,16 @@ type ActionsBarProps = { export const ActionsBar = ({ track }: ActionsBarProps) => { const styles = useStyles() const { toast } = useToast() - const castMethod = useSelector(getCastMethod) const isCasting = useSelector(getIsCasting) const { data: accountUserId } = useCurrentUserId() - const { neutral, neutralLight6, primary } = useThemeColors() const dispatch = useDispatch() const isReachable = useSelector(getIsReachable) const navigation = useNavigation() const { open } = useCommentDrawer() const { onOpen: openQueue } = useDrawer('Queue') + const { onOpen: openConnect } = useDrawer('Connect') + const castDevices = useDevices() const { showBadge: showQueueNewFeatureBadge, dismiss: dismissQueueNewFeatureBadge @@ -154,12 +149,6 @@ export const ActionsBar = ({ track }: ActionsBarProps) => { !hasStreamAccess const shouldShowActions = hasStreamAccess && !isUnlisted - useLayoutEffect(() => { - if (Platform.OS === 'android' && castMethod === 'airplay') { - dispatch(updateMethod({ method: 'chromecast' })) - } - }, [castMethod, dispatch]) - const handleFavorite = useToggleFavoriteTrack({ trackId: track?.track_id, source: FavoriteSource.NOW_PLAYING @@ -226,9 +215,6 @@ export const ActionsBar = ({ track }: ActionsBarProps) => { } }, [track, isOwner, isUnlisted, playbackPositionInfo?.status, dispatch]) - const { openAirplayDialog } = useAirplay() - const castDevices = useDevices() - const renderPurchaseButton = () => { if ( track?.stream_conditions && @@ -248,30 +234,21 @@ export const ActionsBar = ({ track }: ActionsBarProps) => { } const renderCastButton = () => { - if (castMethod === 'airplay') { - return ( - - ) - } - return isReachable && castDevices.length > 0 ? ( - - ) : ( - - - ) } diff --git a/packages/mobile/src/components/now-playing-drawer/PlayBar.tsx b/packages/mobile/src/components/now-playing-drawer/PlayBar.tsx index 2822f12070e..204cb3eb536 100644 --- a/packages/mobile/src/components/now-playing-drawer/PlayBar.tsx +++ b/packages/mobile/src/components/now-playing-drawer/PlayBar.tsx @@ -1,5 +1,10 @@ +import { useCallback } from 'react' + import { useCurrentUserId, useToggleFavoriteTrack } from '@audius/common/api' -import { useGatedContentAccess } from '@audius/common/hooks' +import { + useGatedContentAccess, + useQueueNewFeatureBadge +} from '@audius/common/hooks' import { FavoriteSource, SquareSizes } from '@audius/common/models' import type { Track, User } from '@audius/common/models' import { playbackSelectors } from '@audius/common/store' @@ -7,9 +12,10 @@ import type { Nullable } from '@audius/common/utils' import { TouchableOpacity, Animated, View } from 'react-native' import { useSelector } from 'react-redux' -import { IconLock } from '@audius/harmony-native' +import { IconButton, IconIndent, IconLock } from '@audius/harmony-native' import { FavoriteButton } from 'app/components/favorite-button' import Text from 'app/components/text' +import { useDrawer } from 'app/hooks/useDrawer' import { makeStyles } from 'app/styles' import { useColor } from 'app/utils/theme' import { zIndex } from 'app/utils/zIndex' @@ -23,7 +29,8 @@ import { NOW_PLAYING_HEIGHT, PLAY_BAR_HEIGHT } from './constants' const { getPreviewing } = playbackSelectors const messages = { - preview: 'PREVIEW' + preview: 'PREVIEW', + queueLabel: 'Queue' } const useStyles = makeStyles(({ palette, spacing }) => ({ @@ -59,6 +66,11 @@ const useStyles = makeStyles(({ palette, spacing }) => ({ justifyContent: 'flex-start', gap: spacing(3) }, + queueContainer: { + flexShrink: 0, + alignItems: 'center', + justifyContent: 'center' + }, playContainer: { flexShrink: 1, alignItems: 'center', @@ -151,6 +163,18 @@ export const PlayBar = (props: PlayBarProps) => { source: FavoriteSource.PLAYBAR }) + const { onOpen: openQueue } = useDrawer('Queue') + const { + showBadge: showQueueNewFeatureBadge, + dismiss: dismissQueueNewFeatureBadge + } = useQueueNewFeatureBadge() + const handleOpenQueue = useCallback(() => { + if (showQueueNewFeatureBadge) { + dismissQueueNewFeatureBadge() + } + openQueue() + }, [showQueueNewFeatureBadge, dismissQueueNewFeatureBadge, openQueue]) + const renderFavoriteButton = () => { return ( { ) : null} + + + diff --git a/packages/mobile/src/components/send-tokens-drawer/SendTokensDrawer.tsx b/packages/mobile/src/components/send-tokens-drawer/SendTokensDrawer.tsx index 8c27ab95f7c..c6a26ce3a36 100644 --- a/packages/mobile/src/components/send-tokens-drawer/SendTokensDrawer.tsx +++ b/packages/mobile/src/components/send-tokens-drawer/SendTokensDrawer.tsx @@ -3,12 +3,10 @@ import { useState, useEffect } from 'react' import { useSendCoins } from '@audius/common/api' import { walletMessages } from '@audius/common/messages' import type { SolanaWalletAddress, User } from '@audius/common/models' -import { ErrorLevel, Feature } from '@audius/common/models' import { useSendTokensModal } from '@audius/common/store' import { Divider, Flex } from '@audius/harmony-native' import Drawer from 'app/components/drawer/Drawer' -import { reportToSentry } from 'app/utils/reportToSentry' import { DrawerHeader } from '../drawer/DrawerHeader' @@ -130,17 +128,7 @@ export const SendTokensDrawer = () => { } setError(errorMessage) - reportToSentry({ - level: ErrorLevel.Error, - error: error as Error, - additionalInfo: { - amount: state.amount.toString(), - destinationAddress: state.destinationAddress, - mint: state.selectedMint, - errorString - }, - feature: Feature.SendTokens - }) + console.error(error as Error) setState((prev) => ({ ...prev, step: 'failure' })) } } diff --git a/packages/mobile/src/components/share-drawer/useShareToStory.tsx b/packages/mobile/src/components/share-drawer/useShareToStory.tsx index c9179999e81..b068d652578 100644 --- a/packages/mobile/src/components/share-drawer/useShareToStory.tsx +++ b/packages/mobile/src/components/share-drawer/useShareToStory.tsx @@ -4,7 +4,7 @@ import EventEmitter from 'events' import path from 'path' import { useCurrentUserId } from '@audius/common/api' -import { ErrorLevel, SquareSizes } from '@audius/common/models' +import { SquareSizes } from '@audius/common/models' import type { Color } from '@audius/common/models' import { modalsActions } from '@audius/common/store' import type { ShareContent } from '@audius/common/store' @@ -51,7 +51,6 @@ import { pickTwoMostDominantAndVibrant } from 'app/utils/dominantColors' import { isImageUriSource } from 'app/utils/image' -import { reportToSentry } from 'app/utils/reportToSentry' import { getTrackRoute } from 'app/utils/routes' import { DrawerHeader } from '../core/DrawerHeader' @@ -209,11 +208,7 @@ export const useShareToStory = ({ const handleError = useCallback( (platform: ShareToStoryPlatform, error: Error, name?: string) => { - reportToSentry({ - level: ErrorLevel.Error, - error, - name - }) + console.error(error) toast({ content: messages.shareToStoryError, type: 'error' }) track( make({ diff --git a/packages/mobile/src/components/track-list/AnimatedEqBars.tsx b/packages/mobile/src/components/track-list/AnimatedEqBars.tsx new file mode 100644 index 00000000000..dcf40e35418 --- /dev/null +++ b/packages/mobile/src/components/track-list/AnimatedEqBars.tsx @@ -0,0 +1,78 @@ +import { useEffect, useRef } from 'react' + +import { Animated, Easing, StyleSheet, View } from 'react-native' + +const BAR_COUNT = 4 +const BAR_MIN_HEIGHT = 4 +const BAR_MAX_HEIGHT = 18 +const BAR_COLOR = '#CC5DE8' + +const BAR_DURATIONS_MS = [520, 410, 640, 470] +const BAR_DELAYS_MS = [0, 180, 90, 260] + +type AnimatedEqBarsProps = { + isPlaying: boolean +} + +export const AnimatedEqBars = ({ isPlaying }: AnimatedEqBarsProps) => { + const heights = useRef( + Array.from({ length: BAR_COUNT }, () => new Animated.Value(BAR_MIN_HEIGHT)) + ).current + + useEffect(() => { + if (!isPlaying) { + heights.forEach((h) => h.stopAnimation()) + return + } + + const loops = heights.map((value, i) => + Animated.loop( + Animated.sequence([ + Animated.delay(BAR_DELAYS_MS[i]), + Animated.timing(value, { + toValue: BAR_MAX_HEIGHT, + duration: BAR_DURATIONS_MS[i], + easing: Easing.inOut(Easing.quad), + useNativeDriver: false + }), + Animated.timing(value, { + toValue: BAR_MIN_HEIGHT, + duration: BAR_DURATIONS_MS[i], + easing: Easing.inOut(Easing.quad), + useNativeDriver: false + }) + ]) + ) + ) + + loops.forEach((loop) => loop.start()) + + return () => { + loops.forEach((loop) => loop.stop()) + } + }, [isPlaying, heights]) + + return ( + + {heights.map((height, i) => ( + + ))} + + ) +} + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'flex-end', + justifyContent: 'center', + gap: 3, + height: BAR_MAX_HEIGHT, + paddingBottom: 2 + }, + bar: { + width: 4, + borderRadius: 2, + backgroundColor: BAR_COLOR + } +}) diff --git a/packages/mobile/src/components/track-list/TrackArtwork.tsx b/packages/mobile/src/components/track-list/TrackArtwork.tsx index a6db29d0f50..0328b7208ce 100644 --- a/packages/mobile/src/components/track-list/TrackArtwork.tsx +++ b/packages/mobile/src/components/track-list/TrackArtwork.tsx @@ -2,16 +2,14 @@ import type { Track } from '@audius/common/models' import { SquareSizes } from '@audius/common/models' import { View } from 'react-native' -import { - IconVisibilityHidden, - IconPause, - IconPlay -} from '@audius/harmony-native' +import { IconVisibilityHidden, IconPlay } from '@audius/harmony-native' import { makeStyles } from 'app/styles' import { useThemeColors } from 'app/utils/theme' import { TrackImage } from '../image/TrackImage' +import { AnimatedEqBars } from './AnimatedEqBars' + type TrackArtworkProps = { track: Track isActive?: boolean @@ -33,6 +31,14 @@ const useStyles = makeStyles(({ spacing }) => ({ alignItems: 'center', borderRadius: 4, backgroundColor: 'rgba(0,0,0,0.4)' + }, + nowPlayingOverlay: { + height: '100%', + width: '100%', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: 4, + backgroundColor: 'rgba(0,0,0,0.45)' } })) @@ -41,8 +47,6 @@ export const TrackArtwork = (props: TrackArtworkProps) => { const styles = useStyles() const { staticWhite } = useThemeColors() - const ActiveIcon = isPlaying ? IconPause : IconPlay - return ( { ) : null} - {isActive ? ( + {isActive && isPlaying ? ( + + + + ) : isActive ? ( - + ) : null} diff --git a/packages/mobile/src/components/track-list/TrackListItem.tsx b/packages/mobile/src/components/track-list/TrackListItem.tsx index 13297e2b28a..f07f5e32f28 100644 --- a/packages/mobile/src/components/track-list/TrackListItem.tsx +++ b/packages/mobile/src/components/track-list/TrackListItem.tsx @@ -66,7 +66,7 @@ const useStyles = makeStyles(({ palette, spacing, typography }) => ({ backgroundColor: palette.white }, trackContainerActive: { - backgroundColor: palette.neutralLight9 + backgroundColor: 'rgba(130,86,220,0.07)' }, trackContainerDisabled: { backgroundColor: palette.neutralLight9 @@ -102,6 +102,9 @@ const useStyles = makeStyles(({ palette, spacing, typography }) => ({ paddingTop: 2, color: palette.neutral }, + trackTitleTextActive: { + color: '#8256DC' + }, downloadIndicator: { marginLeft: spacing(1) }, @@ -405,11 +408,21 @@ const TrackListItemComponent = (props: TrackListItemComponentProps) => { {title} - + {messages.deleted} diff --git a/packages/mobile/src/harmony-native/components/Artwork.tsx b/packages/mobile/src/harmony-native/components/Artwork.tsx index ddefca476a6..9a46373ebef 100644 --- a/packages/mobile/src/harmony-native/components/Artwork.tsx +++ b/packages/mobile/src/harmony-native/components/Artwork.tsx @@ -27,7 +27,7 @@ export type ArtworkProps = { * Enables true progressive image loading. */ priorityLowResSource?: ImageProps['source'] -} & Partial> & +} & Partial> & BoxProps /** @@ -44,6 +44,7 @@ export const Artwork = (props: ArtworkProps) => { priorityLowResSource, onError, onLoad, + timeoutMs, borderRadius = 's', borderWidth, shadow, @@ -158,6 +159,7 @@ export const Artwork = (props: ArtworkProps) => { onLoad?.(event) }} onError={onError} + timeoutMs={timeoutMs} source={imageSource} /> ) : null} diff --git a/packages/mobile/src/harmony-native/components/Image/Image.tsx b/packages/mobile/src/harmony-native/components/Image/Image.tsx index a5b984d4961..eaf8fedf29f 100644 --- a/packages/mobile/src/harmony-native/components/Image/Image.tsx +++ b/packages/mobile/src/harmony-native/components/Image/Image.tsx @@ -30,6 +30,16 @@ export type ImageProps = ComponentProps & { * When true, the high-res image appears immediately without a fade animation. */ immediate?: boolean + /** + * Optional render-time timeout (ms) for remote URI sources. If neither + * `onLoad` nor `onError` fires within this window, a synthetic `onError` + * is dispatched so callers (e.g. mirror-retry logic) can advance to the + * next URL without waiting on a hung TCP connection. + * + * Defaults to 0 (disabled). Only applies to remote `{ uri }` sources — + * local `require()`'d sources are unaffected. + */ + timeoutMs?: number } // Export ImageProps without source for render prop usage @@ -65,9 +75,24 @@ export const Image = (props: ImageProps) => { onLoad, style, immediate = false, + timeoutMs = 0, ...other } = props + // Track whether the current source has resolved (loaded or errored) so the + // timeout fallback doesn't fire after the fact, and so we can clear pending + // timers on resolution. + const hasResolvedRef = useRef(false) + const timeoutTimerRef = useRef | null>(null) + + // Keep the latest `onError` in a ref so the timeout closure always invokes + // the freshest callback without needing to be in the effect deps (which + // would reset the timer on every render). + const onErrorRef = useRef(onError) + useEffect(() => { + onErrorRef.current = onError + }) + // Wrap onError to prevent Error objects from being passed as props // This fixes "Error.stack getter called with an invalid receiver" in Hermes const handleError = onError @@ -77,6 +102,11 @@ export const Image = (props: ImageProps) => { | { nativeEvent: ImageErrorEventData } | Error ) => { + hasResolvedRef.current = true + if (timeoutTimerRef.current) { + clearTimeout(timeoutTimerRef.current) + timeoutTimerRef.current = null + } if (error instanceof Error) { onError({ nativeEvent: { error: error.message || 'Image load error' } @@ -105,6 +135,40 @@ export const Image = (props: ImageProps) => { } }, [source, priorityLowResSource, startVisible, opacity]) + // Render-time timeout: if the remote image hasn't fired onLoad or onError + // within `timeoutMs`, synthesize an onError so mirror-retry logic upstream + // can advance to the next URL. The native image cache and TCP stack will + // otherwise wait 60–90s on a hung connection without firing onError. + useEffect(() => { + hasResolvedRef.current = false + if (timeoutTimerRef.current) { + clearTimeout(timeoutTimerRef.current) + timeoutTimerRef.current = null + } + + if (!timeoutMs || timeoutMs <= 0) return + if (!source || typeof source === 'number') return + const uri = Array.isArray(source) ? source[0]?.uri : source.uri + if (!uri) return + + timeoutTimerRef.current = setTimeout(() => { + if (hasResolvedRef.current) return + hasResolvedRef.current = true + onErrorRef.current?.({ + nativeEvent: { + error: `Image load timeout after ${timeoutMs}ms: ${uri}` + } + }) + }, timeoutMs) + + return () => { + if (timeoutTimerRef.current) { + clearTimeout(timeoutTimerRef.current) + timeoutTimerRef.current = null + } + } + }, [source, timeoutMs]) + const animatedStyle = useAnimatedStyle(() => ({ opacity: opacity.value })) @@ -114,6 +178,11 @@ export const Image = (props: ImageProps) => { } const handleLoad = (e: NativeSyntheticEvent) => { + hasResolvedRef.current = true + if (timeoutTimerRef.current) { + clearTimeout(timeoutTimerRef.current) + timeoutTimerRef.current = null + } opacity.value = withTiming(1, { duration: immediate ? 100 : 300 }) // Hide the low-res placeholder shortly after the high-res starts fading in. if (priorityLowResSource) { diff --git a/packages/mobile/src/harmony-native/icons.tsx b/packages/mobile/src/harmony-native/icons.tsx index 3d692bf9632..f1af36655ba 100644 --- a/packages/mobile/src/harmony-native/icons.tsx +++ b/packages/mobile/src/harmony-native/icons.tsx @@ -66,6 +66,7 @@ export { default as IconMessage } from '@audius/harmony/src/assets/icons/Message export { default as IconMessages } from '@audius/harmony/src/assets/icons/Messages.svg' export { default as IconMerch } from '@audius/harmony/src/assets/icons/Merch.svg' export { default as IconStar } from '@audius/harmony/src/assets/icons/Star.svg' +export { default as IconCast } from '@audius/harmony/src/assets/icons/Cast.svg' export { default as IconCastAirplay } from '@audius/harmony/src/assets/icons/CastAirplay.svg' export { default as IconMessageBlock } from '@audius/harmony/src/assets/icons/MessageBlock.svg' export { default as IconMessageSlash } from '@audius/harmony/src/assets/icons/MessageSlash.svg' diff --git a/packages/mobile/src/hooks/useNotificationNavigation.ts b/packages/mobile/src/hooks/useNotificationNavigation.ts index 2d41b15191b..fea7996c2bb 100644 --- a/packages/mobile/src/hooks/useNotificationNavigation.ts +++ b/packages/mobile/src/hooks/useNotificationNavigation.ts @@ -39,7 +39,15 @@ import type { CommentReactionNotification, AnnouncementPushNotification, FanClubTextPostNotification, - FanRemixContestSubmissionNotification + FanRemixContestStartedNotification, + FanRemixContestEndingSoonNotification, + FanRemixContestEndedNotification, + FanRemixContestWinnersSelectedNotification, + RemixContestUpdateNotification, + FanRemixContestSubmissionNotification, + ArtistRemixContestEndedNotification, + ArtistRemixContestEndingSoonNotification, + ArtistRemixContestSubmissionsNotification } from '@audius/common/store' import { NotificationType, @@ -221,6 +229,26 @@ export const useNotificationNavigation = () => { [navigation, linkTo] ) + // All contest-related notifications carry the contest's host track in + // `entityId` and should land on that contest's screen. The Contest + // screen accepts `{ trackId }` and resolves its own event/comments. + const contestHandler = useCallback( + ( + notification: + | FanRemixContestStartedNotification + | FanRemixContestEndingSoonNotification + | FanRemixContestEndedNotification + | FanRemixContestWinnersSelectedNotification + | RemixContestUpdateNotification + | ArtistRemixContestEndedNotification + | ArtistRemixContestEndingSoonNotification + | ArtistRemixContestSubmissionsNotification + ) => { + navigation.navigate('Contest', { trackId: notification.entityId }) + }, + [navigation] + ) + const notificationTypeHandlerMap = useMemo( () => ({ [NotificationType.AddTrackToPlaylist]: ( @@ -333,20 +361,25 @@ export const useNotificationNavigation = () => { [NotificationType.CommentMention]: entityHandler, [NotificationType.CommentThread]: entityHandler, [NotificationType.CommentReaction]: entityHandler, - [NotificationType.FanRemixContestStarted]: entityHandler, - [NotificationType.FanRemixContestEnded]: entityHandler, - [NotificationType.FanRemixContestEndingSoon]: entityHandler, - [NotificationType.FanRemixContestWinnersSelected]: entityHandler, - [NotificationType.RemixContestUpdate]: entityHandler, + [NotificationType.FanRemixContestStarted]: contestHandler, + [NotificationType.FanRemixContestEnded]: contestHandler, + [NotificationType.FanRemixContestEndingSoon]: contestHandler, + [NotificationType.FanRemixContestWinnersSelected]: contestHandler, + [NotificationType.RemixContestUpdate]: contestHandler, [NotificationType.FanRemixContestSubmission]: ( notification: FanRemixContestSubmissionNotification ) => { + // The submission notification fires when a fan's remix is submitted + // to a contest — landing on the submitted track (not the contest) + // matches the web destination and lets the recipient play it. navigation.navigate('Track', { trackId: notification.submissionTrackId, canBeUnlisted: false }) }, - [NotificationType.ArtistRemixContestEnded]: entityHandler, + [NotificationType.ArtistRemixContestEnded]: contestHandler, + [NotificationType.ArtistRemixContestEndingSoon]: contestHandler, + [NotificationType.ArtistRemixContestSubmissions]: contestHandler, [NotificationType.FanClubTextPost]: ( notification: FanClubTextPostNotification & { ticker?: string } ) => { @@ -363,6 +396,7 @@ export const useNotificationNavigation = () => { announcementHandler, socialActionHandler, entityHandler, + contestHandler, milestoneHandler, userIdHandler, messagesHandler, diff --git a/packages/mobile/src/screens/coin-details-screen/EditCoinDetailsScreen.tsx b/packages/mobile/src/screens/coin-details-screen/EditCoinDetailsScreen.tsx index 6875298f9db..77ef64dd304 100644 --- a/packages/mobile/src/screens/coin-details-screen/EditCoinDetailsScreen.tsx +++ b/packages/mobile/src/screens/coin-details-screen/EditCoinDetailsScreen.tsx @@ -20,7 +20,6 @@ import { useFormikContext, Formik } from 'formik' import { Image as RNImage, View, StyleSheet } from 'react-native' import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view' import LinearGradient from 'react-native-linear-gradient' -import { reportToSentry } from 'store/errors/reportToSentry' import { IconInstagram, @@ -332,20 +331,7 @@ export const EditCoinDetailsScreen = () => { }) navigation.goBack() } catch (e) { - await reportToSentry({ - name: 'EditCoinDetails', - error: - e instanceof Error - ? e - : new Error( - e instanceof Object && 'message' in e - ? (e.message as string) - : 'Unknown Error' - ), - additionalInfo: { - raw: e - } - }) + await console.error('EditCoinDetails', e instanceof Error) throw e // Re-throw to let Formik handle the error } } diff --git a/packages/mobile/src/screens/contest-screen/ContestFollowersScreen.tsx b/packages/mobile/src/screens/contest-screen/ContestFollowersScreen.tsx index 0ad4f390030..ede3100c46c 100644 --- a/packages/mobile/src/screens/contest-screen/ContestFollowersScreen.tsx +++ b/packages/mobile/src/screens/contest-screen/ContestFollowersScreen.tsx @@ -18,15 +18,17 @@ const messages = { * We reuse the shared `UserList` + `UserListScreen` scaffolding that * powers Followers/Following/Mutuals, wired up to `useEventFollowers` * instead of the per-user follow hooks. The event-followers hook - * isn't paginated today, so we request a healthy upper bound (200) - * and render what comes back — pagination can be wired in later - * without touching this screen if the hook grows it. + * isn't paginated today, so we request the same upper bound the web + * modal uses (100) — values above that come back empty from the + * indexer's response, which is what was producing a blank list. + * Pagination can be wired in later without touching this screen if + * the hook grows it. */ export const ContestFollowersScreen = () => { const { params } = useRoute<'ContestFollowers'>() const { eventId } = params - const { userIds, isPending } = useEventFollowers({ eventId, limit: 200 }) + const { userIds, isPending } = useEventFollowers({ eventId, limit: 100 }) return ( diff --git a/packages/mobile/src/screens/explore-screen/components/FeaturedRemixContests.tsx b/packages/mobile/src/screens/explore-screen/components/FeaturedRemixContests.tsx index c4ebae34fbf..8ac23bca588 100644 --- a/packages/mobile/src/screens/explore-screen/components/FeaturedRemixContests.tsx +++ b/packages/mobile/src/screens/explore-screen/components/FeaturedRemixContests.tsx @@ -2,20 +2,27 @@ import React from 'react' import { useAllRemixContests } from '@audius/common/api' import { exploreMessages as messages } from '@audius/common/messages' +import { useWindowDimensions } from 'react-native' import { useTheme } from '@audius/harmony-native' -import { ContestCard } from 'app/components/contest-card' +import { ContestCard, ContestCardSkeleton } from 'app/components/contest-card' import { CardList } from 'app/components/core' -import { TrackCardSkeleton } from 'app/components/track/TrackCardSkeleton' import { useDeferredElement } from '../../../hooks/useDeferredElement' import { ExploreSection } from './ExploreSection' +// Carousel slot width for contest cards. The dedicated /contests screen +// renders cards at roughly full screen width minus its horizontal margins; +// the Explore carousel matches that visual width while leaving a small +// peek of the next card to invite horizontal swipe. +const CONTEST_CARD_PEEK = 48 + export const FeaturedRemixContests = () => { const { spacing } = useTheme() + const { width: windowWidth } = useWindowDimensions() + const contestCardWidth = windowWidth - CONTEST_CARD_PEEK const { InViewWrapper, inView } = useDeferredElement() - const { data: allContestTrackIds, isPending: isAllContestsPending } = useAllRemixContests(undefined, { enabled: inView }) @@ -27,8 +34,11 @@ export const FeaturedRemixContests = () => { renderItem={({ item }) => } horizontal carouselSpacing={spacing.l} + horizontalCardWidth={contestCardWidth} isLoading={isAllContestsPending} - LoadingCardComponent={TrackCardSkeleton} + LoadingCardComponent={() => ( + + )} /> diff --git a/packages/mobile/src/screens/explore-screen/components/SearchExploreHeader.tsx b/packages/mobile/src/screens/explore-screen/components/SearchExploreHeader.tsx index b2e601bef47..04ce6efb857 100644 --- a/packages/mobile/src/screens/explore-screen/components/SearchExploreHeader.tsx +++ b/packages/mobile/src/screens/explore-screen/components/SearchExploreHeader.tsx @@ -7,7 +7,7 @@ import React, { } from 'react' import { exploreMessages as messages } from '@audius/common/messages' -import { useNavigation } from '@react-navigation/native' +import { useIsFocused, useNavigation } from '@react-navigation/native' import type { ScrollView } from 'react-native' import { Keyboard } from 'react-native' import { useSafeAreaInsets } from 'react-native-safe-area-context' @@ -40,6 +40,7 @@ export const SearchExploreHeader = (props: SearchExploreHeaderProps) => { const { params } = useExploreRoute<'SearchExplore'>() const { drawerHelpers } = useContext(AppDrawerContext) const navigation = useNavigation() + const isFocused = useIsFocused() const { isOpen: isNowPlayingDrawerOpen } = useDrawer('NowPlaying') const textInputRef = useRef(null) @@ -59,13 +60,18 @@ export const SearchExploreHeader = (props: SearchExploreHeaderProps) => { // Without this, the keyboard re-appears whenever the app returns from // background while explore is the active tab. Consume the param by setting // it back to false so a subsequent search-icon tap can re-trigger focus. + // + // Gate on isFocused so a stale autoFocus param can't summon the keyboard + // while the explore tab isn't the active tab — this is what caused the + // brief keyboard flash on cold launch when the explore screen mounted + // off-screen with autoFocus: true already on its route. useEffect(() => { - if (params?.autoFocus === true) { + if (params?.autoFocus === true && isFocused) { textInputRef.current?.focus() // @ts-expect-error: setParams is not typed on the generic NavigationProp, but is available on StackNavigationProp navigation.setParams?.({ autoFocus: false }) } - }, [params?.autoFocus, navigation]) + }, [params?.autoFocus, navigation, isFocused]) const handleOpenLeftNavDrawer = useCallback(() => { if (isNowPlayingDrawerOpen) return diff --git a/packages/mobile/src/screens/feed-screen/FeedFilterButton.tsx b/packages/mobile/src/screens/feed-screen/FeedFilterButton.tsx new file mode 100644 index 00000000000..f92bdc4b442 --- /dev/null +++ b/packages/mobile/src/screens/feed-screen/FeedFilterButton.tsx @@ -0,0 +1,37 @@ +import { FeedFilter } from '@audius/common/models' +import { feedPageSelectors, modalsActions } from '@audius/common/store' +import { useDispatch, useSelector } from 'react-redux' + +import { Flex, IconLeading, SelectablePill } from '@audius/harmony-native' + +import { FEED_FILTER_MODAL } from './FeedFilterDrawer' + +export const FeedFilterButton = () => { + const dispatch = useDispatch() + const feedFilter = useSelector(feedPageSelectors.getFeedFilter) + + const hasActiveFilters = (feedFilter ?? FeedFilter.ALL) !== FeedFilter.ALL + + const handleOpenFilter = () => { + dispatch( + modalsActions.setVisibility({ + modal: FEED_FILTER_MODAL, + visible: true + }) + ) + } + + return ( + + + + ) +} diff --git a/packages/mobile/src/screens/feed-screen/FeedFilterDrawer.tsx b/packages/mobile/src/screens/feed-screen/FeedFilterDrawer.tsx new file mode 100644 index 00000000000..6b7d7aad311 --- /dev/null +++ b/packages/mobile/src/screens/feed-screen/FeedFilterDrawer.tsx @@ -0,0 +1,132 @@ +import { useCallback } from 'react' + +import { FeedFilter } from '@audius/common/models' +import { feedPageActions, feedPageSelectors } from '@audius/common/store' +import { Pressable, View } from 'react-native' +import { useDispatch, useSelector } from 'react-redux' + +import { Flex, Text } from '@audius/harmony-native' +import { RadioButton, Text as CoreText } from 'app/components/core' +import { AppDrawer, useDrawerState } from 'app/components/drawer' +import { makeStyles } from 'app/styles' + +export const FEED_FILTER_MODAL = 'FeedFilter' as const + +const filterLabels: Record = { + [FeedFilter.ALL]: 'All Posts', + [FeedFilter.ORIGINAL]: 'Original Posts', + [FeedFilter.REPOST]: 'Reposts' +} + +const filterOptions: FeedFilter[] = [ + FeedFilter.ALL, + FeedFilter.ORIGINAL, + FeedFilter.REPOST +] + +const messages = { + title: 'Filter Feed', + sectionTitle: 'Post Type', + selected: 'Selected' +} + +const useStyles = makeStyles(({ palette, spacing }) => ({ + grabBar: { + width: 36, + height: 4, + borderRadius: 2, + backgroundColor: palette.neutralLight6 + }, + grabBarContainer: { + paddingTop: spacing(2), + paddingBottom: spacing(1), + alignItems: 'center' + }, + content: { + paddingHorizontal: spacing(4), + paddingTop: spacing(4), + paddingBottom: spacing(6) + }, + sectionTitle: { + marginBottom: spacing(2) + }, + optionRow: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + paddingVertical: spacing(4), + borderBottomWidth: 1, + borderBottomColor: palette.neutralLight8 + } +})) + +export const FeedFilterDrawer = () => { + const styles = useStyles() + const dispatch = useDispatch() + const currentFilter = + useSelector(feedPageSelectors.getFeedFilter) ?? FeedFilter.ALL + + useDrawerState(FEED_FILTER_MODAL) + + const handleSelectFilter = useCallback( + (filter: FeedFilter) => { + dispatch(feedPageActions.setFeedFilter(filter)) + }, + [dispatch] + ) + + const drawerHeader = useCallback( + (_props: { onClose: () => void }) => ( + + + + + + + {messages.title} + + + + ), + [styles] + ) + + return ( + + + + + {messages.sectionTitle} + + + {filterOptions.map((filter) => ( + handleSelectFilter(filter)} + style={styles.optionRow} + > + + + + {filterLabels[filter]} + + + {currentFilter === filter ? ( + + {messages.selected} + + ) : null} + + ))} + + + ) +} diff --git a/packages/mobile/src/screens/feed-screen/FeedFilters.tsx b/packages/mobile/src/screens/feed-screen/FeedFilters.tsx deleted file mode 100644 index 8e8ace3f1e4..00000000000 --- a/packages/mobile/src/screens/feed-screen/FeedFilters.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { FeedFilter } from '@audius/common/models' -import { ScrollView, View } from 'react-native' - -import { Flex, SelectablePill, useTheme } from '@audius/harmony-native' - -const filterLabels: Record = { - [FeedFilter.ALL]: 'All Posts', - [FeedFilter.ORIGINAL]: 'Original Posts', - [FeedFilter.REPOST]: 'Reposts' -} - -const filters: FeedFilter[] = [ - FeedFilter.ALL, - FeedFilter.ORIGINAL, - FeedFilter.REPOST -] - -type FeedFiltersProps = { - currentFilter: FeedFilter - onSelectFilter: (filter: FeedFilter) => void -} - -export const FeedFilters = ({ - currentFilter, - onSelectFilter -}: FeedFiltersProps) => { - const { spacing, color } = useTheme() - return ( - - - - {filters.map((filter) => ( - { - if (!isSelected) return - onSelectFilter(value as FeedFilter) - }} - disableUnselectAnimation - /> - ))} - - - - ) -} diff --git a/packages/mobile/src/screens/feed-screen/FeedScreen.tsx b/packages/mobile/src/screens/feed-screen/FeedScreen.tsx index dd178d3b74d..26a22c0e014 100644 --- a/packages/mobile/src/screens/feed-screen/FeedScreen.tsx +++ b/packages/mobile/src/screens/feed-screen/FeedScreen.tsx @@ -10,7 +10,7 @@ import { FOR_YOU_INITIAL_PAGE_SIZE, FOR_YOU_LOAD_MORE_PAGE_SIZE } from '@audius/common/api' -import { Name, FeedTab, type FeedFilter } from '@audius/common/models' +import { Name, FeedTab } from '@audius/common/models' import { feedPageActions, feedPageSelectors } from '@audius/common/store' import { useDispatch, useSelector } from 'react-redux' @@ -21,11 +21,11 @@ import { SuggestedFollows } from 'app/components/suggested-follows' import { MobileRootHeader } from 'app/screens/app-screen/MobileRootHeader' import { make, track } from 'app/services/analytics' -import { FeedFilters } from './FeedFilters' +import { FeedFilterButton } from './FeedFilterButton' import { FeedTabs } from './FeedTabs' const { getFeedTab, getFeedFilter } = feedPageSelectors -const { setFeedTab, setFeedFilter } = feedPageActions +const { setFeedTab } = feedPageActions const messages = { header: 'Your Feed', @@ -80,12 +80,17 @@ export const FeedScreen = () => { [dispatch] ) - const handleSelectFilter = useCallback( - (filter: FeedFilter) => { - dispatch(setFeedFilter(filter)) - track(make({ eventName: Name.FEED_CHANGE_VIEW, view: filter })) - }, - [dispatch] + // Memoized so the header isn't a new function reference on every render — + // otherwise Screen's setOptions runs each parent re-render and React + // Navigation rebuilds the header, remounting AccountPictureHeader and + // re-firing the profile-picture image-fetch path. + const renderHeader = useCallback( + () => ( + + {isForYou ? null : } + + ), + [isForYou] ) const lineupProps = isForYou @@ -115,20 +120,9 @@ export const FeedScreen = () => { } return ( - ( - - )} - > + - {isForYou ? null : ( - - )} { if (track) { - navigation.push('Track', { + navigation.push('Contest', { trackId: track.track_id }) } diff --git a/packages/mobile/src/screens/profile-screen/ProfileNavOverlay.tsx b/packages/mobile/src/screens/profile-screen/ProfileNavOverlay.tsx index d86411c68e4..b5b9a0cca31 100644 --- a/packages/mobile/src/screens/profile-screen/ProfileNavOverlay.tsx +++ b/packages/mobile/src/screens/profile-screen/ProfileNavOverlay.tsx @@ -4,7 +4,7 @@ import { useCurrentUserId, useProfileUser } from '@audius/common/api' import { ShareSource } from '@audius/common/models' import { modalsActions, shareModalUIActions } from '@audius/common/store' import { BlurView } from '@react-native-community/blur' -import { StyleSheet, View } from 'react-native' +import { Platform, StyleSheet, View } from 'react-native' import Animated, { interpolate, useAnimatedStyle @@ -22,7 +22,7 @@ import { import { UserLink } from 'app/components/user-link' import { useNavigation } from 'app/hooks/useNavigation' import { makeStyles } from 'app/styles' -import { isDarkTheme, useThemeVariant } from 'app/utils/theme' +import { isDarkTheme, useThemeColors, useThemeVariant } from 'app/utils/theme' import { useProfileScrollY } from './ProfileScrollContext' @@ -83,6 +83,7 @@ export const ProfileNavOverlay = () => { const navigation = useNavigation() const scrollY = useProfileScrollY() const isDarkMode = isDarkTheme(useThemeVariant()) + const { backgroundSurface } = useThemeColors() const { data: accountId } = useCurrentUserId() const { user_id } = @@ -167,11 +168,21 @@ export const ProfileNavOverlay = () => { pointerEvents='box-none' style={[styles.root, { height: overlayHeight }]} > - + {Platform.OS === 'android' ? ( + + ) : ( + + )} { - const dispatch = useDispatch() - const hasAccount = useHasAccount() - const castMethod = useSelector(getCastMethod) - - const setCastMethod = useCallback( - (method: CastMethod) => { - // Changes should be persisted to async storage so that the - // settings row value persists between sessions. - dispatch(updateMethod({ method, persist: true })) - }, - [dispatch] - ) - - if (!hasAccount) return null - - const castOptions = [ - { key: 'airplay', text: messages.airplay }, - { key: 'chromecast', text: messages.chromecast } - ] - - return ( - - - - {messages.castDescription} - - - - - - ) -} diff --git a/packages/mobile/src/screens/settings-screen/SettingsScreen.tsx b/packages/mobile/src/screens/settings-screen/SettingsScreen.tsx index 66bc73ea604..9879908545e 100644 --- a/packages/mobile/src/screens/settings-screen/SettingsScreen.tsx +++ b/packages/mobile/src/screens/settings-screen/SettingsScreen.tsx @@ -1,6 +1,6 @@ import { useCallback } from 'react' -import { Image, Platform } from 'react-native' +import { Image } from 'react-native' import { IconCloudDownload, @@ -22,14 +22,11 @@ import type { ProfileTabScreenParamList } from '../app-screen/ProfileTabScreen' import { AccountSettingsRow } from './AccountSettingsRow' import { AppearanceSettingsRow } from './AppearanceSettingsRow' -import { CastSettingsRow } from './CastSettingsRow' import { SettingsRowLabel } from './SettingRowLabel' import { SettingsDivider } from './SettingsDivider' import { SettingsRow } from './SettingsRow' import { SettingsRowDescription } from './SettingsRowDescription' -const IS_IOS = Platform.OS === 'ios' - const messages = { title: 'Settings', inbox: 'Inbox Settings', @@ -125,7 +122,6 @@ export const SettingsScreen = () => { {messages.commentDescription} - {IS_IOS ? : null} { const { otp } = values const sanitizedOtp = otp.replace(/\s/g, '') dispatch(setValueField('otp', sanitizedOtp)) - const visitorId = await fingerprintClient.identify(email, 'mobile') - dispatch(signIn(email, password, visitorId, sanitizedOtp)) + dispatch(signIn(email, password, sanitizedOtp)) }, [dispatch, email, password] ) diff --git a/packages/mobile/src/screens/sign-on-screen/screens/SignInScreen.tsx b/packages/mobile/src/screens/sign-on-screen/screens/SignInScreen.tsx index 1b575d5406b..6a0f9bf9f4f 100644 --- a/packages/mobile/src/screens/sign-on-screen/screens/SignInScreen.tsx +++ b/packages/mobile/src/screens/sign-on-screen/screens/SignInScreen.tsx @@ -23,7 +23,6 @@ import { Button, Flex, IconArrowRight, TextLink } from '@audius/harmony-native' import { PasswordField } from 'app/components/fields' import { useDrawer } from 'app/hooks/useDrawer' import { useNavigation } from 'app/hooks/useNavigation' -import { fingerprintClient } from 'app/services/fingerprint' import { EmailField } from '../components/EmailField' import { GuestEmailHint } from '../components/GuestEmailHint' @@ -70,10 +69,9 @@ export const SignInScreen = () => { const handleSubmit = useCallback( async (values: SignInValues) => { const { email, password } = values - const visitorId = await fingerprintClient.identify(email, 'mobile') dispatch(setValueField('email', email)) dispatch(setValueField('password', password)) - dispatch(signIn(email, password, visitorId)) + dispatch(signIn(email, password)) }, [dispatch] ) diff --git a/packages/mobile/src/services/audius-backend-instance.ts b/packages/mobile/src/services/audius-backend-instance.ts index be6ff20a82c..498071b38f9 100644 --- a/packages/mobile/src/services/audius-backend-instance.ts +++ b/packages/mobile/src/services/audius-backend-instance.ts @@ -3,7 +3,6 @@ import AsyncStorage from '@react-native-async-storage/async-storage' import { track } from 'app/services/analytics' import { env } from 'app/services/env' -import { reportToSentry } from 'app/utils/reportToSentry' import { getFeatureEnabled } from './remote-config' import { remoteConfigInstance } from './remote-config/remote-config-instance' @@ -29,7 +28,7 @@ export const audiusBackendInstance = audiusBackend({ nativeMobile: true, recaptchaSiteKey: env.RECAPTCHA_SITE_KEY, recordAnalytics: track, - reportError: reportToSentry, + reportError: ({ error }) => console.error(error), registryAddress: env.REGISTRY_ADDRESS, entityManagerAddress: env.ENTITY_MANAGER_ADDRESS, remoteConfigInstance, diff --git a/packages/mobile/src/services/env/env.dev.ts b/packages/mobile/src/services/env/env.dev.ts index e86529e87a5..ebd1a8021b4 100644 --- a/packages/mobile/src/services/env/env.dev.ts +++ b/packages/mobile/src/services/env/env.dev.ts @@ -35,8 +35,6 @@ export const env: Env = { EXPLORE_CONTENT_URL: 'https://download.audius.co/static-resources/explore-content.json', FCM_PUSH_PUBLIC_KEY: null, - FINGERPRINT_ENDPOINT: null, - FINGERPRINT_PUBLIC_API_KEY: null, GA_HOSTNAME: 'audius.co', GA_MEASUREMENT_ID: 'G-XXXXX', HCAPTCHA_BASE_URL: 'https://audius.co', @@ -64,7 +62,6 @@ export const env: Env = { REWARDS_MANAGER_TOKEN_PDA: 'FRk4j95RG2kSk3BHXBPVgKszFc2rLQ8K6RS83k3dmzvQ', SAFARI_WEB_PUSH_ID: 'web.co.audius', SCHEME: 'audius', - SENTRY_DSN: 'https://4b15a7a2f2e2459997408b39a0c4942c@s.audius.co/1851611', SOL_BRIDGE_ADDRESS: null, SOL_TOKEN_BRIDGE_ADDRESS: null, SOLANA_CLUSTER_ENDPOINT: 'http://audius-solana-test-validator-1', diff --git a/packages/mobile/src/services/env/env.prod.ts b/packages/mobile/src/services/env/env.prod.ts index 9254e0399ff..635251d6c8f 100644 --- a/packages/mobile/src/services/env/env.prod.ts +++ b/packages/mobile/src/services/env/env.prod.ts @@ -2,7 +2,7 @@ import type { Env } from '@audius/common/services' import Config from 'react-native-config' export const env: Env = { - AAO_ENDPOINT: 'https://discoveryprovider.audius.co', + AAO_ENDPOINT: 'https://anti-abuse-oracle.audius.engineering', AMPLITUDE_API_KEY: '86760558b8bb1b3aae61656efd4ddacb', AMPLITUDE_PROXY: 'https://gain2.audius.co/2/httpapi', API_KEY: '8acf5eb7436ea403ee536a7334faa5e9ada4b50f', @@ -36,8 +36,6 @@ export const env: Env = { EXPLORE_CONTENT_URL: 'https://download.audius.co/static-resources/explore-content.json', FCM_PUSH_PUBLIC_KEY: null, - FINGERPRINT_ENDPOINT: 'https://fp.audius.co', - FINGERPRINT_PUBLIC_API_KEY: 'MNtDQ4NCsNSP7YOkOiQT', GA_HOSTNAME: 'audius.co', GA_MEASUREMENT_ID: 'UA-120325397-2', HCAPTCHA_BASE_URL: 'https://audius.co', @@ -64,13 +62,12 @@ export const env: Env = { REWARDS_MANAGER_TOKEN_PDA: '3V9opXNpHmPPymKeq7CYD8wWMH8wzFXmqEkNdzfsZhYq', SAFARI_WEB_PUSH_ID: 'web.co.audius', SCHEME: 'audius', - SENTRY_DSN: 'https://e26d2b01488f4b538ea235de6466c40a@s.audius.co/1457231', SOL_BRIDGE_ADDRESS: 'worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth', SOL_TOKEN_BRIDGE_ADDRESS: 'wormDTUJ6AWPNvk59vGQbDvGJmqbDTdgWgAqcLBCgUb', SOLANA_CLUSTER_ENDPOINT: 'https://carolina-8qh733-fast-mainnet.helius-rpc.com', SOLANA_FEE_PAYER_ADDRESS: 'pqx3fvvh6b2eZBfLhTtQ5KxzU3CginmgGTmDCjk8TPP', - SOLANA_RELAY_ENDPOINT: 'https://discoveryprovider.audius.co', + SOLANA_RELAY_ENDPOINT: 'https://solana-relay.audius.engineering', SOLANA_TOKEN_PROGRAM_ADDRESS: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', SOLANA_WEB3_CLUSTER: 'mainnet-beta', SUGGESTED_FOLLOW_HANDLES: diff --git a/packages/mobile/src/services/fingerprint.ts b/packages/mobile/src/services/fingerprint.ts deleted file mode 100644 index 6827fd8467b..00000000000 --- a/packages/mobile/src/services/fingerprint.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { FingerprintClient } from '@audius/common/services' -import { FingerprintJsProAgent } from '@fingerprintjs/fingerprintjs-pro-react-native' - -import { env } from 'app/services/env' - -const apiKey = env.FINGERPRINT_PUBLIC_API_KEY || '' -const endpoint = env.FINGERPRINT_ENDPOINT || '' -const identityService = env.IDENTITY_SERVICE || '' - -export const fingerprintClient = new FingerprintClient({ - apiKey, - endpoint, - identityService, - initFingerprint: async (apiKey, endpoint) => { - return new FingerprintJsProAgent({ apiKey, endpointUrl: endpoint }) - }, - getFingerprint: (client, { tag, linkedId }) => { - return client.getVisitorId(tag, linkedId) - } -}) diff --git a/packages/mobile/src/services/query-client.ts b/packages/mobile/src/services/query-client.ts index 30ac2235215..73dd9eb7c56 100644 --- a/packages/mobile/src/services/query-client.ts +++ b/packages/mobile/src/services/query-client.ts @@ -2,14 +2,13 @@ import { defaultRetryConfig, queryErrorHandler } from '@audius/common/api' import { QueryCache, QueryClient } from '@tanstack/react-query' import { env } from 'app/services/env' -import { reportToSentry } from 'app/utils/reportToSentry' export const queryClient = new QueryClient({ // In order to have a default error catcher, we need to use a custom query cache // ref: https://tkdodo.eu/blog/react-query-error-handling queryCache: new QueryCache({ onError(error, query) { - queryErrorHandler(error, query, reportToSentry) + queryErrorHandler(error, query) } }), defaultOptions: { diff --git a/packages/mobile/src/services/remote-config/remote-config-instance.ts b/packages/mobile/src/services/remote-config/remote-config-instance.ts index 18f6d59239c..7b6fb80bed6 100644 --- a/packages/mobile/src/services/remote-config/remote-config-instance.ts +++ b/packages/mobile/src/services/remote-config/remote-config-instance.ts @@ -1,4 +1,3 @@ -import { ErrorLevel } from '@audius/common/models' import type { Environment } from '@audius/common/services' import { remoteConfig } from '@audius/common/services' import CodePush from '@bravemobile/react-native-code-push' @@ -9,7 +8,6 @@ import Config from 'react-native-config' import VersionNumber from 'react-native-version-number' import { env } from 'app/services/env' -import { reportToSentry } from 'app/utils/reportToSentry' import packageInfo from '../../../package.json' @@ -60,11 +58,7 @@ export const remoteConfigInstance = remoteConfig({ }, errorHandler: { handleError: (error) => { - reportToSentry({ - level: ErrorLevel.Error, - error, - name: 'Optimizely failed to load' - }) + console.error(error) } } }) diff --git a/packages/mobile/src/store/drawers/slice.ts b/packages/mobile/src/store/drawers/slice.ts index bed5bb28a12..d721b8a9752 100644 --- a/packages/mobile/src/store/drawers/slice.ts +++ b/packages/mobile/src/store/drawers/slice.ts @@ -37,6 +37,7 @@ export type Drawer = | 'WalletRowOverflowMenu' | 'LockedTextPost' | 'Queue' + | 'Connect' export type DrawerData = { EnablePushNotifications: undefined @@ -81,6 +82,7 @@ export type DrawerData = { PickWinners: undefined LockedTextPost: { mint: string } Queue: undefined + Connect: undefined CoinInsightsOverflowMenu: { mint: string } WalletRowOverflowMenu: { address: string @@ -123,6 +125,7 @@ const initialState: DrawersState = { PickWinners: false, LockedTextPost: false, Queue: false, + Connect: false, CoinInsightsOverflowMenu: false, WalletRowOverflowMenu: false, data: {} diff --git a/packages/mobile/src/store/store.ts b/packages/mobile/src/store/store.ts index d027438b75d..afba1910079 100644 --- a/packages/mobile/src/store/store.ts +++ b/packages/mobile/src/store/store.ts @@ -1,4 +1,3 @@ -import { ErrorLevel } from '@audius/common/models' import type { CommonState, RemoteConfigState } from '@audius/common/store' import { chatMiddleware, @@ -24,7 +23,6 @@ import thunk from 'redux-thunk' import { queryClient } from 'app/services/query-client' import { audiusSdk } from 'app/services/sdk/audius-sdk' -import { reportToSentry } from 'app/utils/reportToSentry' import type { DrawersState } from './drawers/slice' import drawers from './drawers/slice' @@ -83,12 +81,6 @@ const onSagaError = ( }) ) - reportToSentry({ - level: ErrorLevel.Fatal, - error, - additionalInfo: errorInfo - }) - // Automatically restart the app if the session is longer // than 30 seconds. Don't want to restart for shorter sessions // because it could result in a restart loop diff --git a/packages/mobile/src/store/storeContext.ts b/packages/mobile/src/store/storeContext.ts index 1eefd604d57..47a51048ea8 100644 --- a/packages/mobile/src/store/storeContext.ts +++ b/packages/mobile/src/store/storeContext.ts @@ -6,7 +6,6 @@ import { audioPlayer } from 'app/services/audio-player' import { audiusBackendInstance } from 'app/services/audius-backend-instance' import { env } from 'app/services/env' import { explore } from 'app/services/explore' -import { fingerprintClient } from 'app/services/fingerprint' import { localStorage } from 'app/services/local-storage' import { queryClient } from 'app/services/query-client' import { @@ -23,7 +22,6 @@ import { signAndSendTransaction } from 'app/store/utils/phantomWalletConnect' import { generatePlaylistArtwork } from 'app/utils/generatePlaylistArtwork' -import { reportToSentry } from 'app/utils/reportToSentry' import share from 'app/utils/share' export const storeContext: CommonStoreContext = { @@ -37,7 +35,6 @@ export const storeContext: CommonStoreContext = { analytics, remoteConfigInstance, audiusBackendInstance, - fingerprintClient, walletClient, localStorage, isNativeMobile: true, @@ -45,11 +42,6 @@ export const storeContext: CommonStoreContext = { env, explore, nftClient: null, - sentry: { - setTag: () => {}, // Sentry removed - no-op - getCurrentScope: () => ({ setUser: () => {} }) // Sentry removed - no-op - }, - reportToSentry, // Shim in main, but defined in native-reloaded branch audioPlayer, trackDownload, diff --git a/packages/mobile/src/utils/reportToSentry.ts b/packages/mobile/src/utils/reportToSentry.ts deleted file mode 100644 index 103619344b8..00000000000 --- a/packages/mobile/src/utils/reportToSentry.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { ErrorLevel } from '@audius/common/models' -import type { ReportToSentryArgs } from '@audius/common/models' -import { getErrorMessage, isResponseError } from '@audius/common/utils' - -type ConsoleLoggingMethod = keyof Pick< - Console, - 'log' | 'warn' | 'error' | 'info' | 'debug' -> - -const jsLoggerMapping: { [level in ErrorLevel]: ConsoleLoggingMethod } = { - Warning: 'warn', - Fatal: 'error', - Debug: 'debug', - Error: 'error', - Info: 'info', - Log: 'log' -} - -/** - * Helper fn that logs errors to console - * Note: Sentry has been removed from mobile - */ -export const reportToSentry = async ({ - level = ErrorLevel.Error, - additionalInfo, - error, - tags, - name, - feature -}: ReportToSentryArgs) => { - try { - let enrichedAdditionalInfo = additionalInfo - - if (isResponseError(error)) { - const responseBody = - (await error.response.json().catch()) ?? - (await error.response.text().catch()) - enrichedAdditionalInfo = { - ...additionalInfo, - response: error.response, - requestId: error.response.headers.get('X-Request-ID'), - responseBody - } - } - - if (name) { - error.name = `${name}: ${error.name}` - } - - // Call JS console method using the specified level - const consoleMethod = - jsLoggerMapping[level || ErrorLevel.Log] || jsLoggerMapping.Log - // eslint-disable-next-line no-console - console[consoleMethod](error, 'More info in console.debug') - if (enrichedAdditionalInfo || tags || feature) { - console.debug('Additional error info:', { - additionalInfo: enrichedAdditionalInfo, - tags, - feature, - level - }) - } - } catch (err) { - console.error(`Got error trying to log error: ${getErrorMessage(err)}`) - } -} diff --git a/packages/protocol-dashboard/src/components/NodeOverview/NodeOverview.tsx b/packages/protocol-dashboard/src/components/NodeOverview/NodeOverview.tsx index aab46e44fe5..eddd5292461 100644 --- a/packages/protocol-dashboard/src/components/NodeOverview/NodeOverview.tsx +++ b/packages/protocol-dashboard/src/components/NodeOverview/NodeOverview.tsx @@ -52,7 +52,14 @@ const messages = { checkDiskWarning: 'Check disk/mount', seedingDataText: 'Awaiting completion', uptimeWarning: 'Failed to determine when the server last restarted', - pending: 'Loading...' + pending: 'Loading...', + nodeType: 'Node Type', + peers: 'Peers', + currentHeight: 'Current Height', + storageType: 'Storage Type', + lastRestart: 'Last Restart', + gitSha: 'Git SHA', + viewConsole: 'View Console' } type ServiceDetailProps = { @@ -118,6 +125,7 @@ const NodeOverview = ({ }: NodeOverviewProps) => { const { isOpen, onClick, onClose } = useModalControls() const { health, status, error } = useNodeHealth(endpoint, serviceType) + const isValidator = serviceType === ServiceType.Validator let healthDetails = null if (status === 'pending') { @@ -139,6 +147,48 @@ const NodeOverview = ({ } /> ) + } else if (isValidator) { + healthDetails = ( + <> + {health?.nodeType && ( + + )} + {typeof health?.peerCount === 'number' && ( + + )} + {typeof health?.currentHeight === 'number' && ( + + )} + {health?.storageType && ( + + )} + {health?.startedAt && ( + {timeSince(health.startedAt)}} + text={`ago (${health.startedAt.toLocaleString()})`} + /> + } + /> + )} + {health?.gitSha && ( + {health.gitSha.slice(0, 7)} + } + /> + )} + + ) } else { healthDetails = ( <> @@ -320,6 +370,23 @@ const NodeOverview = ({ direction='column' alignItems='flex-end' > + {isValidator && endpoint && !isDeregistered && ( + +