diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 000000000..a7ccae937 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,33 @@ +{ + "permissions": { + "allow": [ + "Bash(bun x playwright test:*)", + "Bash(ls:*)", + "Bash(intention add:*)", + "Bash(npx playwright test:*)", + "Bash(curl:*)", + "Bash(grep:*)", + "Bash(bun run:*)", + "Bash(rg:*)", + "Bash(pgrep:*)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=minimal npx playwright test)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=true npx playwright test)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=error npx playwright test)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=minimal npx playwright test:*)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=true npx playwright test:*)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=error npx playwright test:*)", + "Bash(rm:*)", + "Bash(intention add:*)", + "Bash(npx playwright test:*)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=true npx playwright test:*)", + "Bash(PWDEBUG=1 npx playwright test src/modules/org.libersoft.messages/tests/e2e/accounts-import.test.ts --grep \"Handle duplicate accounts during Add accounts - show conflict dialog\" --headed)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=errors npx playwright test src/core/e2e/accounts-import-export.test.ts --reporter=line)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=errors npx playwright test)", + "Bash(PLAYWRIGHT_CONSOLE_LOG=errors npx playwright test src/core/e2e/accounts-import-export.test.ts -g \"Export accounts to JSON format\")", + "Bash(PLAYWRIGHT_CONSOLE_LOG=errors npx playwright test src/core/e2e/accounts-import-export.test.ts -g \"Export\")", + "Bash(PLAYWRIGHT_CONSOLE_LOG=errors npx playwright test src/modules/org.libersoft.messages/tests/e2e/everything.test.ts -g \"Message Forwarding\")", + "Bash(PLAYWRIGHT_CONSOLE_LOG=errors npx playwright test src/modules/org.libersoft.messages/tests/e2e/everything.test.ts -g \"Complete End-to-End Application Test\")" + ], + "deny": [] + } +} diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 74d25f8f2..c7680a032 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -6,9 +6,16 @@ on: # pull_request: # branches: [ master ] + +permissions: + contents: read + jobs: e2e-tests: + uses: koo5/yellow-dev/.github/workflows/shared-e2e.yml@master with: client_repo: ${{ github.repository }} - client_ref: ${{ github.ref }} \ No newline at end of file + client_ref: ${{ github.ref }} + run_client_tests: true + run_admin_tests: false diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index d08f1ed6b..4ae429728 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,18 +5,19 @@ name: Node.js CI on: push: - branches: [ "*" ] -# pull_request: -# branches: [ "*" ] + branches: [ "**" ] + +permissions: + contents: read + jobs: build: - runs-on: ubuntu-latest strategy: matrix: - node-version: [20.x] + node-version: [22.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: @@ -24,7 +25,22 @@ jobs: - name: Use Node.js ${{ matrix.node-version }} uses: oven-sh/setup-bun@v2 - run: bun i - - run: npx playwright install --with-deps - run: npm run build --if-present - run: npm run test:unit + storybook-tests: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [22.x] + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: oven-sh/setup-bun@v2 + - run: bun i + - run: npx playwright install --with-deps + - run: npm run build --if-present + - run: npm run test:storybook + diff --git a/.github/workflows/svelte-check.yml b/.github/workflows/svelte-check.yml new file mode 100644 index 000000000..e79b57cab --- /dev/null +++ b/.github/workflows/svelte-check.yml @@ -0,0 +1,33 @@ +name: Svelte Check + +on: + push: + branches: [ "**" ] + +permissions: + contents: read + +jobs: + svelte-check: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun install + + - name: Init + run: bun run init + + - name: Buiild + run: bun run build + + - name: Run svelte-check + run: bun run svelte-check --fail-on-warnings diff --git a/.gitignore b/.gitignore index 29785fb3d..c6e61d067 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ node_modules/ build/ build-tauri/ +dist/ +static/tmp/ *.crt *.key .secret_git @@ -18,10 +20,6 @@ vite.config.js.timestamp-* *storybook.log test-results -# Paraglide -src/lib/paraglide -project.inlang/cache - # Custom .local/* **/.claude/settings.local.json @@ -29,4 +27,7 @@ project.inlang/cache # Sentry Config File .env.sentry-build-plugin -.claude +.dev_intention +client +crypto-utils-storage/ +project.inlang/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..8a70679b8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/modules/org.libersoft.wallet/scripts/crypto-utils"] + path = src/modules/org.libersoft.wallet/scripts/crypto-utils + url = https://github.com/libersoft-org/crypto-utils.git diff --git a/.nvmrc b/.nvmrc index 3c032078a..2bd5a0a98 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18 +22 diff --git a/.prettierignore b/.prettierignore index 2ff8622f1..ccd0bf056 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,2 @@ -package.json \ No newline at end of file +package.json +.claude \ No newline at end of file diff --git a/.storybook/main.ts b/.storybook/main.ts index ed43e1953..b1df108eb 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,23 +1,22 @@ import type { StorybookConfig } from '@storybook/sveltekit'; +import path from 'path'; const config: StorybookConfig = { - "stories": [ - "../src/**/*.mdx", - "../src/**/*.stories.@(js|ts|svelte)" - ], - "addons": [ - "@storybook/addon-essentials", - "@storybook/addon-svelte-csf", - "@chromatic-com/storybook", - "@storybook/experimental-addon-test", - "@storybook/addon-viewport" - ], - "framework": { - "name": "@storybook/sveltekit", - "options": {} - }, - staticDirs: [ - "../static" - ] + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|ts|svelte)'], + addons: ['@storybook/addon-essentials', '@storybook/addon-svelte-csf', '@chromatic-com/storybook', '@storybook/experimental-addon-test', '@storybook/addon-viewport'], + framework: { + name: '@storybook/sveltekit', + options: {}, + }, + staticDirs: ['../static'], + viteFinal: async config => { + if (config.resolve) { + config.resolve.alias = { + ...config.resolve.alias, + '@/bridge/core-bridge': process.env.TAURI_SERVICE === 'true' ? path.resolve(__dirname, '../src/modules/org.libersoft.messages/core-bridge-mobile.ts') : path.resolve(__dirname, '../src/modules/org.libersoft.messages/core-bridge-builtin.ts'), + }; + } + return config; + }, }; export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 7dfc8e309..b765b7c5b 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,5 +1,5 @@ import type { Preview } from '@storybook/svelte'; -import '../src/css/app.css'; +import '../src/app.css'; const preview: Preview = { parameters: { diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 9a7d6d4c2..000000000 --- a/CLAUDE.md +++ /dev/null @@ -1,27 +0,0 @@ -# Development Guidelines for Yellow Project - -## Build, Lint & Test Commands - -- Build: `bun run build` or `vite build` (client) -- TypeCheck: `bun run typecheck` or `tsc --noEmit` -- Test (all): `bun test` or `vitest` -- Test (single): `vitest src/path/to/file.test.js` -- Format: `prettier --config prettier-libersoft.json --plugin prettier-plugin-svelte --write "src/**/*.{js,ts,css,html,svelte}"` - -## Code Style - -- Formatting: Prettier with custom config (1-space tabs, single quotes) -- Naming: camelCase for variables/functions, PascalCase for classes/interfaces -- Components: kebab-case.svelte files, camelCase props -- Files: kebab-case for components, camelCase for utilities -- Types: Prefer explicit typing, strict mode, but noImplicitAny disabled -- Errors: Custom error classes with descriptive names and inheritance -- Imports: Use explicit file extensions (.js, .ts, .svelte) - -## Architecture - -- Small, focused components with clear responsibilities -- Svelte for UI components with TypeScript support -- Modules system for extensible functionality - -This file is meant for Claude and other AI assistants to understand project conventions. diff --git a/NFT_CONFIGURATION_SYSTEM.md b/NFT_CONFIGURATION_SYSTEM.md new file mode 100644 index 000000000..ac9e508c2 --- /dev/null +++ b/NFT_CONFIGURATION_SYSTEM.md @@ -0,0 +1,68 @@ +README: NFT Configuration System + +## Implementované funkce: + +### 1. **SettingsNetworksNFTs.svelte** - Správa NFT kontraktů + +- Zobrazení seznamu nakonfigurovaných NFT kontraktů +- Drag & drop reordering +- Přidání/editace/mazání NFT kontraktů +- Načítání informací o kontraktech + +### 2. **SettingsNetworksNFTsAddEdit.svelte** - Formulář pro NFT + +- Přidání nového NFT kontraktu +- Editace existujícího NFT kontraktu +- Povinná pole: Contract address +- Volitelná pole: Token ID, Name, Description, Image URL, External URL + +### 3. **DialogNFTDel.svelte** - Dialog pro mazání NFT + +- Potvrzení mazání NFT kontraktu +- Zobrazení informací o mazaném NFT + +### 4. **Integrace do nastavení** + +- Přidáno tlačítko NFT ikony v Settings > Networks +- Nové menu sekce pro každou síť: networks-nfts-{networkGuid} +- Automatické načítání do settings struktury + +### 5. **Rozšíření balance.ts** + +- Funkce `getNFTsForAddress()` nyní používá nakonfigurované NFT kontrakty +- Fallback na výchozí kontrakty pokud žádné nejsou nakonfigurované +- Import `nftStore` pro čtení nakonfigurovaných NFT + +### 6. **Rozšíření network.ts** + +- Přidána funkce `reorderNFTs()` pro drag & drop +- Existující funkce: `addNFT()`, `editNFT()`, `deleteNFT()` +- Store `nfts` pro reactive čtení NFT kontraktů + +## Jak použít: + +1. **Přidat NFT kontrakt:** + + - Settings > Networks > klikni na NFT ikonu u sítě + - "Add NFT Contract" + - Zadej contract address (povinné) + - Volitelně: Token ID (pro specifický NFT), Name, Description, Image URL, External URL + +2. **Spravovat NFT kontrakty:** + + - Drag & drop pro změnu pořadí + - Edit ikona pro úpravu + - Delete ikona pro smazání (s potvrzením) + +3. **Zobrazení NFT:** + - NFT kontrakty se automaticky načítají v Balance komponentě + - Používá se seznam z nastavení místo hardcoded kontraktů + +## Příklad použití: + +Pro váš Baby Eggs NFT na Polygon: + +- Contract address: `0x366B4C4F5f602eF5E18e3F3a15052db8841de01E` +- Token ID: `96931881880619166233561556717900660211897371081598974059752591339469234241537` (nebo prázdné pro celý kontrakt) +- Name: "Baby Eggs" +- External URL: link na Rarible marketplace diff --git a/NFT_README.md b/NFT_README.md new file mode 100644 index 000000000..43f74ddca --- /dev/null +++ b/NFT_README.md @@ -0,0 +1,93 @@ +# NFT Support in Yellow Wallet + +Peněženka Yellow nyní podporuje zobrazení a správu NFT (Non-Fungible Tokens). + +## Struktura NFT + +Každé NFT má následující strukturu: + +```typescript +interface INFTData { + contract_address: string; // Adresa smart contractu NFT + token_id: string; // Jedinečné ID tokenu v rámci contractu + name?: string; // Název NFT + description?: string; // Popis NFT + image?: string; // URL k obrázku NFT + animation_url?: string; // URL k animaci/videu (pokud NFT obsahuje animaci) + external_url?: string; // Externí URL s více informacemi + attributes?: Array<{ + // Vlastnosti/atributy NFT + trait_type: string; + value: string | number; + }>; +} +``` + +## Přidání NFT do peněženky + +### Ruční přidání přes kód: + +```typescript +import { addNFT } from 'libersoft-crypto/network.ts'; + +// Příklad přidání NFT +const nftData = { + contract_address: '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D', + token_id: '1234', + name: 'Bored Ape #1234', + description: 'A unique Bored Ape Yacht Club NFT', + image: 'https://ipfs.io/ipfs/QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/1234', + external_url: 'https://boredapeyachtclub.com/#/gallery/1234', + attributes: [ + { trait_type: 'Background', value: 'Blue' }, + { trait_type: 'Fur', value: 'Brown' }, + ], +}; + +addNFT(networkGuid, nftData); +``` + +### Použití ukázkových dat: + +V souboru `static/modules/org.libersoft.wallet/json/sample-nfts.json` najdeš 5 příkladů NFT: + +1. **CryptoPunk #1234** - Classic punk s Pilot Helmet +2. **Bored Ape #5678** - BAYC s Golden Brown fur a Spinner Hat +3. **Azuki #9876** - Anime-style s Pink Disheveled hair +4. **Pudgy Penguin #2468** - Cute penguin s Bucket Hat +5. **Art Blocks Curated #135792** - Generative art Chromie Squiggle + +## Zobrazení v Balance + +NFT se zobrazují v sekci "NFTs:" na stránce Balance s následujícími funkcemi: + +- **Ikona**: Zobrazuje obrázek NFT nebo placeholder +- **Název**: Název NFT nebo "NFT #[token_id]" jako fallback +- **Popis**: Popis NFT (pokud existuje) +- **Contract info**: V debug módu se zobrazí adresa contractu a token ID +- **Vlastnictví**: Zobrazuje "Owned" místo balance +- **Akce**: Tlačítko "View Details" pro externí link + +## API funkce + +- `addNFT(networkGuid, nftData)` - Přidá NFT do sítě +- `editNFT(networkGuid, nftGuid, nftData)` - Upraví existující NFT +- `deleteNFT(networkGuid, nftGuid)` - Smaže NFT ze sítě + +## Známé kolekce a jejich contract adresy + +### Ethereum Mainnet: + +- **CryptoPunks**: `0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB` +- **Bored Ape Yacht Club**: `0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D` +- **Azuki**: `0xED5AF388653567Af2F388E6224dC7C4b3241C544` +- **Pudgy Penguins**: `0xBd3531dA5CF5857e7CfAA92426877b022e612cf8` +- **Art Blocks Curated**: `0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270` + +## Budoucí vylepšení + +- Automatické načítání NFT z blockchain +- Podpora pro ERC-721 a ERC-1155 standardy +- Batch loading NFT metadat +- NFT marketplace integrace +- Podporu pro více síti (Polygon, BSC, etc.) diff --git a/README.md b/README.md index 5249fad6a..c0f8fa0e4 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ ## Table of contents - [**About**](#about) +- [**Screenshot**](#screenshot) - [**Installation**](#installation) - [**Debug mode**](#debug-mode) - [**License**](#license) @@ -14,8 +15,14 @@ ## About +Official website: **https://yellow.libersoft.org** + This is the client software implementation of [**Yellow**](https://github.com/libersoft-org/yellow-documentation/) application. +## Screenshot + +![Yellow](./screenshot.webp) + ## Installation - For installation instructions follow [**this document**](./INSTALL.md). diff --git a/_docs/naming.md b/_docs/naming.md deleted file mode 100644 index 5921f723b..000000000 --- a/_docs/naming.md +++ /dev/null @@ -1,58 +0,0 @@ -# Naming Conventions - -## Schema - -``` -src/ -├── components/ -│ ├── MySuperComponent/ -│ │ └── MySuperComponent.svelte -│ ├── MySuperList/ -│ │ ├── MySuperList.svelte -│ │ └── MySuperListItem.svelte -├── styles/ -│ └── global.css -├── utils/ -│ └── stringUtils.ts -└── main.js -``` - -## Components -### General Rules -- Use **PascalCase** for all Svelte components (e.g., `MySuperComponent.svelte`). -- Each component should be in its **own namespaced folder** (e.g., `MySuperComponent/MySuperComponent.svelte`). -- If multiple components share the same namespace, place them in the **same folder** - (e.g., `List/List.svelte`, `List/ListItem.svelte`). - -// pořešit Page přízvisky ad., potom názvy pro stories, potom názvy pro View a Container - -### Additional Recommendations -- Use **meaningful names** that clearly describe the component’s purpose. -- Avoid abbreviations unless they are widely recognized. -- Keep filenames and folder names consistent to prevent confusion. - -## General rules -- Use **camelCase** for all regular files (e.g., `mySuperFile.js`) which contains functions, variables, or other code that is not a component or class. -- Use **PascalCase** for all classes (e.g., `MySuperClass.js`). - -## Utils or Classes -### General Rules -- Use **PascalCase** for all utility functions and classes (e.g., `MySuperUtil.js`). - - -### Things that are special names -- Utils or Helpers - *.utils.ts (eg. `StringUtils.ts`) -- Stories - stories/*ComponentName*.stories.ts (eg. `MySuperComponent/stories/MySuperComponent.stories.ts`) -- E2E tests (playwright) - e2e/*.test.ts (eg. `string.test.ts`) -- Unit tests (vitest) - unit/*.test.ts (eg. `src/utils/`) -- Integration tests (vitest) - integration/*.test.ts (eg. `string.test.ts`) - -## Folder names -- maintain shallow structure, if one folder contains more than ~7 files, consider creating more specified namespace -(e.g. `components/MsgVideo`,`components/MsgAudio`, `components/MsgImage` instead of `components/Msg/(Video|Audio|Image)`). - - ------- -poznámky: -- obsahy modalů by měly být tvořeny samostatnýma komponentama. To, že jsou zobrazovány v modalu by nemělo mít žádný vliv na to, jak je komponenta stavěná. -- obecně větší důraz na decoupling logiky a delegace nahoru diff --git a/_docs/testing.md b/_docs/testing.md deleted file mode 100644 index 6ddc55b48..000000000 --- a/_docs/testing.md +++ /dev/null @@ -1,6 +0,0 @@ -# Úvod do testování - -## Co chceme od testování -- zajistit konzistenci a kvalitu -- lepší vývojový zážitek, lépe se testuje v izolovaném prostředí -- zjistit chyby co nejdříve diff --git a/bisect-test.sh b/bisect-test.sh new file mode 100755 index 000000000..1be4f8854 --- /dev/null +++ b/bisect-test.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Git bisect script to find when 'bun run test:unit' started failing +# Usage: git bisect start +# git bisect run ./bisect-test.sh + +# Install dependencies first (in case they changed between commits) +echo "Installing dependencies..." +bun install --frozen-lockfile || bun install +bun run init + +# Run the unit tests +echo "Running unit tests..." +bun run test:unit + +# Capture the exit code +exit_code=$? + +# Exit with the test result +# 0 = tests passed (good commit) +# 1-127 = tests failed (bad commit) +# 125 = skip this commit (can't test) +if [ $exit_code -eq 0 ]; then + echo "Tests passed - marking as good" + exit 0 +elif [ $exit_code -ge 128 ]; then + # Exit codes >= 128 typically indicate killed by signal + # Mark as untestable + echo "Tests killed by signal - skipping this commit" + exit 125 +else + echo "Tests failed - marking as bad" + exit 1 +fi diff --git a/build.sh b/build.sh index 92006cf62..5afcaf592 100755 --- a/build.sh +++ b/build.sh @@ -1,7 +1,6 @@ #!/bin/sh -CLIENT_PATH_BASE="$1" - +VITE_CLIENT_PATH_BASE="$1" [ -d "./build/" ] && rm -r build bun i --frozen-lockfile -CLIENT_PATH_BASE=$CLIENT_PATH_BASE bun --bun run build +VITE_CLIENT_PATH_BASE=$VITE_CLIENT_PATH_BASE bun --bun run build diff --git a/bun.lock b/bun.lock index 023c7700a..c55691387 100644 --- a/bun.lock +++ b/bun.lock @@ -1,14 +1,16 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "yellow-client", "dependencies": { "@floating-ui/dom": "^1.6.13", - "@inlang/paraglide-js": "^2.0.0", + "@ledgerhq/hw-app-eth": "^7.6.2", + "@ledgerhq/hw-transport-webhid": "^6.29.7", + "@ledgerhq/hw-transport-webusb": "^6.29.7", "@neodrag/svelte": "^2.3.2", - "@sentry/sveltekit": "^9", - "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", + "@sentry/sveltekit": "^10.48.0", "@tauri-apps/api": "^2.3.0", "@tauri-apps/plugin-autostart": "^2.3.0", "@tauri-apps/plugin-dialog": "^2.2.1", @@ -19,21 +21,25 @@ "@tauri-apps/plugin-process": "^2.2.1", "@tauri-apps/plugin-store": "^2.2.0", "@testing-library/svelte": "^5.2.6", + "@trezor/connect-web": "^9.6.2", "@types/recordrtc": "^5.6.14", "@webav/mp4box.js": "^0.5.6", "async-mutex": "^0.5.0", + "buffer": "^6.0.3", "debug": "^4.4.0", "dexie": "^4.0.11", "dompurify": "^3.2.4", - "dotenv": "^16.4.7", + "dotenv": "^17.4.1", "emoji-regex": "^10.4.0", - "ethers": "^6.13.5", + "ethers": "^6.15.0", "events": "^3.3.0", "fuzzy-search": "^3.2.1", "hex-to-css-filter": "^6.0.0", "jsqr": "^1.4.0", "leaflet": "^1.9.4", + "libersoft-crypto": "https://github.com/libersoft-org/crypto-utils#7fbc148", "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "lottie-web": "^5.12.2", "mediainfo.js": "^0.3.4", "pako": "^2.1.0", @@ -42,49 +48,51 @@ "recordrtc": "^5.6.2", "retry": "^0.13.1", "svelte-intersection-observer": "^1.0.0", - "uuid": "^11.0.5", + "uuid": "^13.0.0", "video.js": "^8.21.0", "videojs-record": "^4.8.0", "wavesurfer.js": "^7.9.0", "webrtc-adapter": "^9.0.3", - "yellow-client-common": "https://github.com/koo5/yellow-client-common", + "yellow-client-common": "https://github.com/libersoft-org/yellow-client-common", }, "devDependencies": { - "@chromatic-com/storybook": "^3", - "@playwright/test": "^1.52.0", + "@chromatic-com/storybook": "^5.1.1", + "@playwright/test": "^1.54.1", "@storybook/addon-essentials": "^8.6.7", "@storybook/addon-svelte-csf": "^5.0.0-next.0", "@storybook/blocks": "^8.6.7", "@storybook/experimental-addon-test": "^8.6.7", - "@storybook/svelte": "^8.6.7", - "@storybook/sveltekit": "^8.6.7", + "@storybook/svelte": "^10.3.5", + "@storybook/sveltekit": "^10.3.5", "@storybook/test": "^8.6.7", - "@storybook/test-runner": "^0.22.0", - "@sveltejs/adapter-auto": "^3.3.1", - "@sveltejs/adapter-static": "^3.0.8", - "@sveltejs/kit": "^2.19.2", - "@sveltejs/vite-plugin-svelte": "4.0.0", - "@types/bun": "latest", - "@types/debug": "^4.1.12", - "@types/lodash": "^4.17.16", + "@storybook/test-runner": "^0.24.3", + "@sveltejs/adapter-auto": "^7.0.1", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.57.1", + "@sveltejs/vite-plugin-svelte": "7.0.0", + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.2", + "@types/bun": "1.3.12", + "@types/debug": "^4.1.13", + "@types/lodash": "^4.17.24", "@types/retry": "^0.12.5", "@types/video.js": "^7.3.58", - "@vitest/browser": "3.1.4", - "@vitest/coverage-v8": "3.1.4", - "git-format-staged": "^3.1.1", + "@vitest/browser": "4.1.4", + "@vitest/coverage-v8": "4.1.4", + "git-format-staged": "^4.0.1", "husky": "^9.1.7", - "jsdom": "^26.0.0", - "lint-staged": "^15.5.1", - "playwright": "^1.51.1", - "prettier": "^3.5.3", - "prettier-plugin-svelte": "^3.4.0", - "storybook": "^8.6.7", - "svelte": "^5.19.9", - "svelte-check": "^4.1.6", - "typescript": "^5.7.3", - "vite": "^5.4.14", - "vite-plugin-checker": "^0.8.0", - "vitest": "3.1.4", + "jsdom": "^29.0.2", + "lint-staged": "^16.4.0", + "playwright": "^1.54.1", + "prettier": "^3.8.2", + "prettier-plugin-svelte": "^3.5.1", + "storybook": "^10.3.5", + "svelte": "^5.55.3", + "svelte-check": "^4.4.6", + "typescript": "^6.0.2", + "vite": "^8.0.8", + "vite-plugin-checker": "^0.12.0", + "vite-plugin-devtools-json": "^1.0.0", + "vitest": "4.1.4", }, }, }, @@ -95,9 +103,13 @@ "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], - "@asamuzakjp/css-color": ["@asamuzakjp/css-color@2.8.3", "", { "dependencies": { "@csstools/css-calc": "^2.1.1", "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw=="], + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@5.1.10", "", { "dependencies": { "@csstools/css-calc": "^3.1.1", "@csstools/css-color-parser": "^4.0.2", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-02OhhkKtgNRuicQ/nF3TRnGsxL9wp0r3Y7VlKWyOHHGmGyvXv03y+PnymU8FKFJMTjIr1Bk8U2g1HWSLrpAHww=="], - "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + "@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@7.0.9", "", { "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", "is-potential-custom-element-name": "^1.0.1" } }, "sha512-r3ElRr7y8ucyN2KdICwGsmj19RoN13CLCa/pvGydghWK6ZzeKQ+TcDjVdtEZz2ElpndM5jXw//B9CEee0mWnVg=="], + + "@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="], + + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], "@babel/compat-data": ["@babel/compat-data@7.26.8", "", {}, "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ=="], @@ -107,21 +119,23 @@ "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.26.5", "", { "dependencies": { "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA=="], + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw=="], "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="], "@babel/helpers": ["@babel/helpers@7.26.10", "", { "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.10" } }, "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g=="], - "@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="], + "@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], @@ -137,7 +151,7 @@ "@babel/plugin-syntax-json-strings": ["@babel/plugin-syntax-json-strings@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="], - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA=="], + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], "@babel/plugin-syntax-logical-assignment-operators": ["@babel/plugin-syntax-logical-assignment-operators@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="], @@ -155,35 +169,45 @@ "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ=="], + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], - "@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], + "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="], "@babel/template": ["@babel/template@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA=="], "@babel/traverse": ["@babel/traverse@7.26.10", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.10", "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", "@babel/types": "^7.26.10", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A=="], - "@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], - "@bundled-es-modules/cookie": ["@bundled-es-modules/cookie@2.0.1", "", { "dependencies": { "cookie": "^0.7.2" } }, "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw=="], + "@blazediff/core": ["@blazediff/core@1.9.1", "", {}, "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA=="], + + "@bramus/specificity": ["@bramus/specificity@2.4.2", "", { "dependencies": { "css-tree": "^3.0.0" }, "bin": { "specificity": "bin/cli.js" } }, "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw=="], + + "@chromatic-com/storybook": ["@chromatic-com/storybook@5.1.2", "", { "dependencies": { "@neoconfetti/react": "^1.0.0", "chromatic": "^13.3.4", "filesize": "^10.0.12", "jsonfile": "^6.1.0", "strip-ansi": "^7.1.0" }, "peerDependencies": { "storybook": "^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0" } }, "sha512-H/hgvwC3E+OtseP2OT2QYUJH2VfnzT6wM3pWOkaNV6g7QI+VUdWJbeJ3o2jFqvEPQNqzhQKWDOlvM4lu+7is6g=="], + + "@csstools/color-helpers": ["@csstools/color-helpers@6.0.2", "", {}, "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q=="], + + "@csstools/css-calc": ["@csstools/css-calc@3.1.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@4.0.2", "", { "dependencies": { "@csstools/color-helpers": "^6.0.2", "@csstools/css-calc": "^3.1.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw=="], - "@bundled-es-modules/statuses": ["@bundled-es-modules/statuses@1.0.1", "", { "dependencies": { "statuses": "^2.0.1" } }, "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg=="], + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@4.0.0", "", { "peerDependencies": { "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w=="], - "@bundled-es-modules/tough-cookie": ["@bundled-es-modules/tough-cookie@0.1.6", "", { "dependencies": { "@types/tough-cookie": "^4.0.5", "tough-cookie": "^4.1.4" } }, "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw=="], + "@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.1.2", "", { "peerDependencies": { "css-tree": "^3.2.1" }, "optionalPeers": ["css-tree"] }, "sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA=="], - "@chromatic-com/storybook": ["@chromatic-com/storybook@3.2.6", "", { "dependencies": { "chromatic": "^11.15.0", "filesize": "^10.0.12", "jsonfile": "^6.1.0", "react-confetti": "^6.1.0", "strip-ansi": "^7.1.0" }, "peerDependencies": { "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "sha512-FDmn5Ry2DzQdik+eq2sp/kJMMT36Ewe7ONXUXM2Izd97c7r6R/QyGli8eyh/F0iyqVvbLveNYFyF0dBOJNwLqw=="], + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="], - "@csstools/color-helpers": ["@csstools/color-helpers@5.0.1", "", {}, "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA=="], + "@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], - "@csstools/css-calc": ["@csstools/css-calc@2.1.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" } }, "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag=="], + "@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], - "@csstools/css-color-parser": ["@csstools/css-color-parser@3.0.7", "", { "dependencies": { "@csstools/color-helpers": "^5.0.1", "@csstools/css-calc": "^2.1.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" } }, "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.4", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.3" } }, "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A=="], + "@emurgo/cardano-serialization-lib-browser": ["@emurgo/cardano-serialization-lib-browser@13.2.1", "", {}, "sha512-7RfX1gI16Vj2DgCp/ZoXqyLAakWo6+X95ku/rYGbVzuS/1etrlSiJmdbmdm+eYmszMlGQjrtOJQeVLXoj4L/Ag=="], - "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.3", "", {}, "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw=="], + "@emurgo/cardano-serialization-lib-nodejs": ["@emurgo/cardano-serialization-lib-nodejs@13.2.0", "", {}, "sha512-Bz1zLGEqBQ0BVkqt1OgMxdBOE3BdUWUd7Ly9Ecr/aUwkA8AV1w1XzBMe4xblmJHnB1XXNlPH4SraXCvO+q0Mig=="], "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], @@ -233,35 +257,69 @@ "@eslint/eslintrc": ["@eslint/eslintrc@1.4.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA=="], - "@fastify/otel": ["@fastify/otel@https://codeload.github.com/getsentry/fastify-otel/tar.gz/ae3088d65e286bdc94ac5d722573537d6a6671bb", { "dependencies": { "@opentelemetry/core": "^1.30.1", "@opentelemetry/instrumentation": "^0.57.2", "@opentelemetry/semantic-conventions": "^1.28.0", "minimatch": "^9" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }], + "@ethereumjs/common": ["@ethereumjs/common@10.1.1", "", { "dependencies": { "@ethereumjs/util": "^10.1.1", "eventemitter3": "^5.0.1" } }, "sha512-NefPzPlrJ9w+NWVe06P+sHZQU98E1AEU9vhiHJEVT2wEcNBC1YX6hON9+smrfbn86C4U1pb2zbvjhkF+n/LKBw=="], - "@floating-ui/core": ["@floating-ui/core@1.6.9", "", { "dependencies": { "@floating-ui/utils": "^0.2.9" } }, "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw=="], + "@ethereumjs/rlp": ["@ethereumjs/rlp@10.1.1", "", { "bin": { "rlp": "bin/rlp.cjs" } }, "sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg=="], - "@floating-ui/dom": ["@floating-ui/dom@1.6.13", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.9" } }, "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w=="], + "@ethereumjs/tx": ["@ethereumjs/tx@10.1.1", "", { "dependencies": { "@ethereumjs/common": "^10.1.1", "@ethereumjs/rlp": "^10.1.1", "@ethereumjs/util": "^10.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1" } }, "sha512-Kz8GWIKQjEQB60ko9hsYDX3rZMHZZOTcmm6OFl855Lu3padVnf5ZactUKM6nmWPsumHED5bWDjO32novZd1zyw=="], - "@floating-ui/utils": ["@floating-ui/utils@0.2.9", "", {}, "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="], + "@ethereumjs/util": ["@ethereumjs/util@10.1.1", "", { "dependencies": { "@ethereumjs/rlp": "^10.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1" } }, "sha512-r2EhaeEmLZXVs1dT2HJFQysAkr63ZWATu/9tgYSp1IlvjvwyC++DLg5kCDwMM49HBq3sOAhrPnXkoqf9DV2gbw=="], - "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="], + "@ethersproject/abi": ["@ethersproject/abi@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q=="], - "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="], + "@ethersproject/abstract-provider": ["@ethersproject/abstract-provider@5.8.0", "", { "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" } }, "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg=="], - "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.9.5", "", { "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw=="], + "@ethersproject/abstract-signer": ["@ethersproject/abstract-signer@5.8.0", "", { "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" } }, "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA=="], - "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@1.2.1", "", {}, "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="], + "@ethersproject/address": ["@ethersproject/address@5.8.0", "", { "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" } }, "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA=="], + + "@ethersproject/base64": ["@ethersproject/base64@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0" } }, "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ=="], + + "@ethersproject/bignumber": ["@ethersproject/bignumber@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "bn.js": "^5.2.1" } }, "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA=="], + + "@ethersproject/bytes": ["@ethersproject/bytes@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A=="], + + "@ethersproject/constants": ["@ethersproject/constants@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0" } }, "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg=="], - "@inlang/paraglide-js": ["@inlang/paraglide-js@2.0.13", "", { "dependencies": { "@inlang/recommend-sherlock": "0.2.1", "@inlang/sdk": "2.4.8", "commander": "11.1.0", "consola": "3.4.0", "json5": "2.2.3", "unplugin": "^2.1.2", "urlpattern-polyfill": "^10.0.0" }, "bin": { "paraglide-js": "bin/run.js" } }, "sha512-8tccsLzGa9uw0rufFqbHSM6GDF8+X1BgfBOyjG7PweBF2zGhN5fMu/nVNbsZiVKpXyR7lcfMxajIBwKhZ/zGKw=="], + "@ethersproject/hash": ["@ethersproject/hash@5.8.0", "", { "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" } }, "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA=="], - "@inlang/recommend-sherlock": ["@inlang/recommend-sherlock@0.2.1", "", { "dependencies": { "comment-json": "^4.2.3" } }, "sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg=="], + "@ethersproject/keccak256": ["@ethersproject/keccak256@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" } }, "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng=="], - "@inlang/sdk": ["@inlang/sdk@2.4.8", "", { "dependencies": { "@lix-js/sdk": "0.4.7", "@sinclair/typebox": "^0.31.17", "kysely": "^0.27.4", "sqlite-wasm-kysely": "0.3.0", "uuid": "^10.0.0" } }, "sha512-tyXNe/5+1Vn/eDt3mVklVjZh5qxFwqdF9+hdB6wRUCexVRw6w/w854TIRFrHuaAwFq/0N/ij/yXzll9oScAB+Q=="], + "@ethersproject/logger": ["@ethersproject/logger@5.8.0", "", {}, "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA=="], - "@inquirer/confirm": ["@inquirer/confirm@5.1.8", "", { "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg=="], + "@ethersproject/networks": ["@ethersproject/networks@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg=="], - "@inquirer/core": ["@inquirer/core@10.1.9", "", { "dependencies": { "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw=="], + "@ethersproject/properties": ["@ethersproject/properties@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw=="], - "@inquirer/figures": ["@inquirer/figures@1.0.11", "", {}, "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw=="], + "@ethersproject/rlp": ["@ethersproject/rlp@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q=="], + + "@ethersproject/signing-key": ["@ethersproject/signing-key@5.8.0", "", { "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" } }, "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w=="], + + "@ethersproject/strings": ["@ethersproject/strings@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg=="], + + "@ethersproject/transactions": ["@ethersproject/transactions@5.8.0", "", { "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" } }, "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg=="], + + "@ethersproject/web": ["@ethersproject/web@5.8.0", "", { "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" } }, "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw=="], + + "@exodus/bytes": ["@exodus/bytes@1.15.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ=="], + + "@fastify/otel": ["@fastify/otel@0.18.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.212.0", "@opentelemetry/semantic-conventions": "^1.28.0", "minimatch": "^10.2.4" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-3TASCATfw+ctICSb4ymrv7iCm0qJ0N9CarB+CZ7zIJ7KqNbwI5JjyDL1/sxoC0ccTO1Zyd1iQ+oqncPg5FJXaA=="], + + "@fivebinaries/coin-selection": ["@fivebinaries/coin-selection@3.0.0", "", { "dependencies": { "@emurgo/cardano-serialization-lib-browser": "^13.2.0", "@emurgo/cardano-serialization-lib-nodejs": "13.2.0" } }, "sha512-h25Pn1ZA7oqQBQDodGAgIsQt66T2wDge9onBKNqE66WNWL0KJiKJbpij8YOLo5AAlEIg5IS7EB1QjBgDOIg6DQ=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + + "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="], + + "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="], + + "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.9.5", "", { "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw=="], - "@inquirer/type": ["@inquirer/type@3.0.5", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg=="], + "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@1.2.1", "", {}, "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="], "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], @@ -269,225 +327,279 @@ "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], - "@jest/console": ["@jest/console@29.7.0", "", { "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" } }, "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg=="], + "@jest/console": ["@jest/console@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.3.0", "jest-util": "30.3.0", "slash": "^3.0.0" } }, "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww=="], + + "@jest/core": ["@jest/core@30.3.0", "", { "dependencies": { "@jest/console": "30.3.0", "@jest/pattern": "30.0.1", "@jest/reporters": "30.3.0", "@jest/test-result": "30.3.0", "@jest/transform": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-changed-files": "30.3.0", "jest-config": "30.3.0", "jest-haste-map": "30.3.0", "jest-message-util": "30.3.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.3.0", "jest-resolve-dependencies": "30.3.0", "jest-runner": "30.3.0", "jest-runtime": "30.3.0", "jest-snapshot": "30.3.0", "jest-util": "30.3.0", "jest-validate": "30.3.0", "jest-watcher": "30.3.0", "pretty-format": "30.3.0", "slash": "^3.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw=="], + + "@jest/create-cache-key-function": ["@jest/create-cache-key-function@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0" } }, "sha512-hTupmOWylzeyqbMNeSNi7ZDprpjrcroAOOG+qCEW66st3+Z5RnYHVYkUt+zjIcLmrTUi2lPY79hJz8mB3L2oXQ=="], + + "@jest/diff-sequences": ["@jest/diff-sequences@30.3.0", "", {}, "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA=="], - "@jest/core": ["@jest/core@29.7.0", "", { "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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg=="], + "@jest/environment": ["@jest/environment@30.3.0", "", { "dependencies": { "@jest/fake-timers": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "jest-mock": "30.3.0" } }, "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw=="], - "@jest/create-cache-key-function": ["@jest/create-cache-key-function@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3" } }, "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA=="], + "@jest/expect": ["@jest/expect@30.3.0", "", { "dependencies": { "expect": "30.3.0", "jest-snapshot": "30.3.0" } }, "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg=="], - "@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + "@jest/expect-utils": ["@jest/expect-utils@30.3.0", "", { "dependencies": { "@jest/get-type": "30.1.0" } }, "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA=="], - "@jest/expect": ["@jest/expect@29.7.0", "", { "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" } }, "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ=="], + "@jest/fake-timers": ["@jest/fake-timers@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0", "@sinonjs/fake-timers": "^15.0.0", "@types/node": "*", "jest-message-util": "30.3.0", "jest-mock": "30.3.0", "jest-util": "30.3.0" } }, "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ=="], - "@jest/expect-utils": ["@jest/expect-utils@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3" } }, "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA=="], + "@jest/get-type": ["@jest/get-type@30.1.0", "", {}, "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA=="], - "@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "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" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + "@jest/globals": ["@jest/globals@30.3.0", "", { "dependencies": { "@jest/environment": "30.3.0", "@jest/expect": "30.3.0", "@jest/types": "30.3.0", "jest-mock": "30.3.0" } }, "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA=="], - "@jest/globals": ["@jest/globals@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", "jest-mock": "^29.7.0" } }, "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ=="], + "@jest/pattern": ["@jest/pattern@30.0.1", "", { "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" } }, "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA=="], - "@jest/reporters": ["@jest/reporters@29.7.0", "", { "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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg=="], + "@jest/reporters": ["@jest/reporters@30.3.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "30.3.0", "@jest/test-result": "30.3.0", "@jest/transform": "30.3.0", "@jest/types": "30.3.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", "glob": "^10.5.0", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", "jest-message-util": "30.3.0", "jest-util": "30.3.0", "jest-worker": "30.3.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw=="], - "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], + "@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], - "@jest/source-map": ["@jest/source-map@29.6.3", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" } }, "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw=="], + "@jest/snapshot-utils": ["@jest/snapshot-utils@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g=="], - "@jest/test-result": ["@jest/test-result@29.7.0", "", { "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA=="], + "@jest/source-map": ["@jest/source-map@30.0.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "callsites": "^3.1.0", "graceful-fs": "^4.2.11" } }, "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg=="], - "@jest/test-sequencer": ["@jest/test-sequencer@29.7.0", "", { "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "slash": "^3.0.0" } }, "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw=="], + "@jest/test-result": ["@jest/test-result@30.3.0", "", { "dependencies": { "@jest/console": "30.3.0", "@jest/types": "30.3.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ=="], - "@jest/transform": ["@jest/transform@29.7.0", "", { "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" } }, "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw=="], + "@jest/test-sequencer": ["@jest/test-sequencer@30.3.0", "", { "dependencies": { "@jest/test-result": "30.3.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.3.0", "slash": "^3.0.0" } }, "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA=="], - "@jest/types": ["@jest/types@29.6.3", "", { "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" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + "@jest/transform": ["@jest/transform@30.3.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.3.0", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.3.0", "jest-regex-util": "30.0.1", "jest-util": "30.3.0", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A=="], + + "@jest/types": ["@jest/types@30.3.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - "@lix-js/sdk": ["@lix-js/sdk@0.4.7", "", { "dependencies": { "@lix-js/server-protocol-schema": "0.1.1", "dedent": "1.5.1", "human-id": "^4.1.1", "js-sha256": "^0.11.0", "kysely": "^0.27.4", "sqlite-wasm-kysely": "0.3.0", "uuid": "^10.0.0" } }, "sha512-pRbW+joG12L0ULfMiWYosIW0plmW4AsUdiPCp+Z8rAsElJ+wJ6in58zhD3UwUcd4BNcpldEGjg6PdA7e0RgsDQ=="], + "@ledgerhq/client-ids": ["@ledgerhq/client-ids@0.8.1", "", { "dependencies": { "@ledgerhq/live-env": "^2.31.0", "@reduxjs/toolkit": "2.11.2", "uuid": "^9.0.0" } }, "sha512-NkcFNyp6oAvzFL3uplSDfc8Cfgfm5sxqhCQvcNYINjz85dCEzMxyj3/XukNbB2zHTomz5j4PyDTzBPiZM20VCw=="], - "@lix-js/server-protocol-schema": ["@lix-js/server-protocol-schema@0.1.1", "", {}, "sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ=="], + "@ledgerhq/devices": ["@ledgerhq/devices@8.13.0", "", { "dependencies": { "@ledgerhq/errors": "^6.32.0", "@ledgerhq/logs": "^6.16.0", "rxjs": "7.8.2", "semver": "7.7.3" } }, "sha512-hgGn1kpe/rT0EJ0Qs7rG+1TXA4g6HN2t3dB4DndRTqVqC9aSSbME+ajA0QWLZisxOD3zkwvO4Q0mJ2zARAKyag=="], - "@mdx-js/react": ["@mdx-js/react@3.1.0", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ=="], + "@ledgerhq/domain-service": ["@ledgerhq/domain-service@1.7.3", "", { "dependencies": { "@ledgerhq/errors": "^6.32.0", "@ledgerhq/logs": "^6.16.0", "@ledgerhq/types-live": "^6.103.0", "axios": "1.13.2", "eip55": "^2.1.1", "react": "19.0.0", "react-dom": "19.0.0" } }, "sha512-H4xDzpMFSklAecFEk06o43sQz6GhBCDeeDy+W4nX2jxic/oCQGPnTQtS2+Ds+Tdy/FXRTV8RASBq6eN69yTf2w=="], - "@mswjs/interceptors": ["@mswjs/interceptors@0.37.6", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w=="], + "@ledgerhq/errors": ["@ledgerhq/errors@6.32.0", "", {}, "sha512-BjjvhLM6UXYUbhllqAduo9PSneLt9FXZ3TBEUFQ3MMSZOCHt0gAgDySLwul99R8fdYWkXBza4DYQjUNckpN2lg=="], - "@neodrag/svelte": ["@neodrag/svelte@2.3.2", "", { "peerDependencies": { "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" } }, "sha512-1aPgnv2LqikkPEoTVgCPCqtXUXOD7OjCHLAIssTv0hkmyHLG9i697Cu+Tzco4/Q4KgOQXCDnLsa4Fvya5wXP9g=="], + "@ledgerhq/evm-tools": ["@ledgerhq/evm-tools@1.12.2", "", { "dependencies": { "@ethersproject/constants": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ledgerhq/live-env": "^2.31.0", "axios": "1.13.2", "crypto-js": "4.2.0" } }, "sha512-Er3oPhjIzIadFjo6FCDO0aMpTo4mZDIgBlExIdcwDV50gs0tMDhQup8XxoWV09FgA0M7Ho5iIxXSTUoGFnFP3g=="], - "@noble/curves": ["@noble/curves@1.2.0", "", { "dependencies": { "@noble/hashes": "1.3.2" } }, "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw=="], + "@ledgerhq/hw-app-eth": ["@ledgerhq/hw-app-eth@7.6.2", "", { "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/rlp": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ledgerhq/domain-service": "^1.7.3", "@ledgerhq/errors": "^6.32.0", "@ledgerhq/evm-tools": "^1.12.2", "@ledgerhq/hw-transport": "6.34.1", "@ledgerhq/hw-transport-mocker": "^6.33.1", "@ledgerhq/logs": "^6.16.0", "@ledgerhq/types-live": "^6.103.0", "axios": "1.13.2", "bignumber.js": "^9.1.2", "semver": "7.7.3" } }, "sha512-AMu8/OyoGoJLC2INa+dQmSmbY/Q1Gq3q20f28h5e/yxBVCiGZGcqBH6oL8taCrQ4liglNPwyM81kbNH2X+VycQ=="], - "@noble/hashes": ["@noble/hashes@1.3.2", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="], + "@ledgerhq/hw-transport": ["@ledgerhq/hw-transport@6.34.1", "", { "dependencies": { "@ledgerhq/devices": "8.13.0", "@ledgerhq/errors": "^6.32.0", "@ledgerhq/logs": "^6.16.0", "events": "^3.3.0" } }, "sha512-Bg9Qk2vtm0m0cZn9prZV2Hbvh3b42KBh4uomO00derh+eiwsdg5AXBBptAJiREkew1RVtETRdWxrKchUJfeWvA=="], + + "@ledgerhq/hw-transport-mocker": ["@ledgerhq/hw-transport-mocker@6.33.1", "", { "dependencies": { "@ledgerhq/hw-transport": "6.34.1", "@ledgerhq/logs": "^6.16.0", "rxjs": "7.8.2" } }, "sha512-lrz1JlOV+Q9QE228kUSiXeRc2TbpwDpY2kqPsDF+CuhlLxa+AqcK4O941cJJuFOuIx8hCEeZKiz1U2bcozKN7g=="], + + "@ledgerhq/hw-transport-webhid": ["@ledgerhq/hw-transport-webhid@6.34.0", "", { "dependencies": { "@ledgerhq/devices": "8.13.0", "@ledgerhq/errors": "^6.32.0", "@ledgerhq/hw-transport": "6.34.1", "@ledgerhq/logs": "^6.16.0" } }, "sha512-SG+UnZXyUzrJBSkZnRYGaaZV+C8yiu+pF69Mzw4AKOX6TG8RZ1tOvly8hhnRQ2/gXSiTgbc07N4T8ne2eFei3A=="], + + "@ledgerhq/hw-transport-webusb": ["@ledgerhq/hw-transport-webusb@6.33.0", "", { "dependencies": { "@ledgerhq/devices": "8.13.0", "@ledgerhq/errors": "^6.32.0", "@ledgerhq/hw-transport": "6.34.1", "@ledgerhq/logs": "^6.16.0" } }, "sha512-/CSDMzBykihqumItyRxmrmqvBHIBRO9eQlHk2Xvrok6X09EF8ENglcITmEiyqvtDQEofD9A0+tdUhWgV9z82fg=="], + + "@ledgerhq/live-env": ["@ledgerhq/live-env@2.31.0", "", { "dependencies": { "rxjs": "7.8.2", "utility-types": "^3.10.0" } }, "sha512-Hl5ldGa7lT7bKkNHruFepKhEWvb0hvjvQ1cXBbR7yp9I7EPceDXQt/uySOyaY41caWX0x27TUQIz3PVEv67HJA=="], + + "@ledgerhq/logs": ["@ledgerhq/logs@6.16.0", "", {}, "sha512-v/PLfb1dq1En35kkpbfRWp8jLYgbPUXxGhmd4pmvPSIe0nRGkNTomsZASmWQAv6pRonVGqHIBVlte7j1MBbOww=="], + + "@ledgerhq/types-live": ["@ledgerhq/types-live@6.103.0", "", { "dependencies": { "@ledgerhq/client-ids": "0.8.1", "bignumber.js": "^9.1.2", "rxjs": "7.8.2" } }, "sha512-e/cc0zZs7f/6/g2dTd0RX7TZf7NeM7A7dMbmTOPdojkhXvdiSksZZJeSABBSpwJpiKYcgi/ABRDr3dQMiwNq0A=="], + + "@mdx-js/react": ["@mdx-js/react@3.1.0", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + "@mobily/ts-belt": ["@mobily/ts-belt@3.13.1", "", {}, "sha512-K5KqIhPI/EoCTbA6CGbrenM9s41OouyK8A03fGJJcla/zKucsgLbz8HNbeseoLarRPgyWJsUyCYqFhI7t3Ra9Q=="], - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.3", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ=="], - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@neoconfetti/react": ["@neoconfetti/react@1.0.0", "", {}, "sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A=="], - "@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="], + "@neodrag/svelte": ["@neodrag/svelte@2.3.3", "", { "peerDependencies": { "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" } }, "sha512-avXzhrilsBsnMFljhVAQ7h+6hbSIrvRCJ61GCiGbGISkC1QOhjDCNvPZo2+7KVwiYrnUBx4NRH0kTIqrcxv9Lg=="], - "@open-draft/logger": ["@open-draft/logger@0.3.0", "", { "dependencies": { "is-node-process": "^1.2.0", "outvariant": "^1.4.0" } }, "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ=="], + "@noble/curves": ["@noble/curves@1.2.0", "", { "dependencies": { "@noble/hashes": "1.3.2" } }, "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw=="], - "@open-draft/until": ["@open-draft/until@2.1.0", "", {}, "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="], + "@noble/hashes": ["@noble/hashes@1.3.2", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="], "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.214.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA=="], - "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="], + "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.6.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ=="], - "@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], + "@opentelemetry/core": ["@opentelemetry/core@2.6.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g=="], - "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.214.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.214.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w=="], - "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.46.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ=="], + "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.61.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-mCKoyTGfRNisge4br0NpOFSy2Z1NnEW8hbCJdUDdJFHrPqVzc4IIBPA/vX0U+LUcQqrQvJX+HMIU0dbDRe0i0Q=="], - "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.43.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw=="], + "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.57.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-FMEBChnI4FLN5TE9DHwfH7QpNir1JzXno1uz/TAucVdLCyrG0jTrKIcNHt/i30A0M2AunNBCkcd8Ei26dIPKdg=="], - "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.16.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ=="], + "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.31.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-f654tZFQXS5YeLDNb9KySrwtg7SnqZN119FauD7acBoTzuLduaiGTNz88ixcVSOOMGZ+EjJu/RFtx5klObC95g=="], - "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.47.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw=="], + "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.33.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-sCZWXGalQ01wr3tAhSR9ucqFJ0phidpAle6/17HVjD6gN8FLmZMK/8sKxdXYHy3PbnlV1P4zeiSVFNKpbFMNLA=="], - "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.19.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A=="], + "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.57.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-orhmlaK+ZIW9hKU+nHTbXrCSXZcH83AescTqmpamHRobRmYSQwRbD0a1odc0yAzuzOtxYiHiXAnpnIpaSSY7Ow=="], - "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.43.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww=="], + "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.62.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3YNuLVPUxafXkH1jBAbGsKNsP3XVzcFDhCDCE3OqBwCwShlqQbLMRMFh1T/d5jaVZiGVmSsfof+ICKD2iOV8xg=="], - "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.47.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ=="], + "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.60.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-aNljZKYrEa7obLAxd1bCEDxF7kzCLGXTuTJZ8lMR9rIVEjmuKBXN1gfqpm/OB//Zc2zP4iIve1jBp7sr3mQV6w=="], - "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.45.2", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ=="], + "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.214.0", "", { "dependencies": { "@opentelemetry/core": "2.6.1", "@opentelemetry/instrumentation": "0.214.0", "@opentelemetry/semantic-conventions": "^1.29.0", "forwarded-parse": "2.1.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-FlkDhZDRjDJDcO2LcSCtjRpkal1NJ8y0fBqBhTvfAR3JSYY2jAIj1kSS5IjmEBt4c3aWv+u/lqLuoCDrrKCSKg=="], - "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.57.2", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/instrumentation": "0.57.2", "@opentelemetry/semantic-conventions": "1.28.0", "forwarded-parse": "2.1.2", "semver": "^7.5.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg=="], + "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.62.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ZYt//zcPve8qklaZX+5Z4MkU7UpEkFRrxsf2cnaKYBitqDnsCN69CPAuuMOX6NYdW2rG9sFy7V/QWtBlP5XiNQ=="], - "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.47.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA=="], + "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.23.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-4K+nVo+zI+aDz0Z85SObwbdixIbzS9moIuKJaYsdlzcHYnKOPtB7ya8r8Ezivy/GVIBHiKJVq4tv+BEkgOMLaQ=="], - "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.7.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ=="], + "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.58.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Hc/o8fSsaWxZ8r1Yw4rNDLwTpUopTf4X32y4W6UhlHmW8Wizz8wfhgOKIelSeqFVTKBBPIDUOsQWuIMxBmu8Bw=="], - "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.44.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ=="], + "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.62.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.36.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-uVip0VuGUQXZ+vFxkKxAUNq8qNl+VFlyHDh/U6IQ8COOEDfbEchdaHnpFrMYF3psZRUuoSIgb7xOeXj00RdwDA=="], - "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.47.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A=="], + "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.58.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-6grM3TdMyHzlGY1cUA+mwoPueB1F3dYKgKtZIH6jOFXqfHAByyLTc+6PFjGM9tKh52CFBJaDwodNlL/Td39z7Q=="], - "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.44.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg=="], + "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.67.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-1WJp5N1lYfHq2IhECOTewFs5Tf2NfUOwQRqs/rZdXKTezArMlucxgzAaqcgp3A3YREXopXTpXHsxZTGHjNhMdQ=="], - "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.52.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g=="], + "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.60.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-8BahAZpKsOoc+lrZGb7Ofn4g3z8qtp5IxDfvAVpKXsEheQN7ONMH5djT5ihy6yf8yyeQJGS0gXFfpEAEeEHqQg=="], - "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.46.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg=="], + "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.60.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/mysql": "2.15.27" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-08pO8GFPEIz2zquKDGteBZDNmwketdgH8hTe9rVYgW9kCJXq1Psj3wPQGx+VaX4ZJKCfPeoLMYup9+cxHvZyVQ=="], - "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.45.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/mysql": "2.15.26" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg=="], + "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.60.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@opentelemetry/sql-common": "^0.41.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-m/5d3bxQALllCzezYDk/6vajh0tj5OijMMvOZGr+qN1NMXm1dzMNwyJ0gNZW7Fo3YFRyj/jJMxIw+W7d525dlw=="], - "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.45.2", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ=="], + "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.66.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.34.0", "@opentelemetry/sql-common": "^0.41.2", "@types/pg": "8.15.6", "@types/pg-pool": "2.0.7" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-KxfLGXBb7k2ueaPJfq2GXBDXBly8P+SpR/4Mj410hhNgmQF3sCqwXvUBQxZQkDAmsdBAoenM+yV1LhtsMRamcA=="], - "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.51.1", "", { "dependencies": { "@opentelemetry/core": "^1.26.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.6" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q=="], + "@opentelemetry/instrumentation-redis": ["@opentelemetry/instrumentation-redis@0.62.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-y3pPpot7WzR/8JtHcYlTYsyY8g+pbFhAqbwAuG5bLPnR6v6pt1rQc0DpH0OlGP/9CZbWBP+Zhwp9yFoygf/ZXQ=="], - "@opentelemetry/instrumentation-redis-4": ["@opentelemetry/instrumentation-redis-4@0.46.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ=="], + "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.33.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Q6WQwAD01MMTub31GlejoiFACYNw26J426wyjvU7by7fDIr2nZXNW4vhTGs7i7F0TnXBO3xN688g1tdUgYwJ5w=="], - "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.18.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg=="], + "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.24.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.24.0" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-oKzZ3uvqP17sV0EsoQcJgjEfIp0kiZRbYu/eD8p13Cbahumf8lb/xpYeNr/hfAJ4owzEtIDcGIjprfLcYbIKBQ=="], - "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.10.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ=="], + "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.38.2", "", {}, "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA=="], - "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.36.2", "", {}, "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g=="], + "@opentelemetry/resources": ["@opentelemetry/resources@2.6.1", "", { "dependencies": { "@opentelemetry/core": "2.6.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA=="], - "@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], + "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.6.1", "", { "dependencies": { "@opentelemetry/core": "2.6.1", "@opentelemetry/resources": "2.6.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw=="], - "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg=="], + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="], - "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.33.0", "", {}, "sha512-TIpZvE8fiEILFfTlfPnltpBaD3d9/+uQHVCyC3vfdh6WfCXKhNFzoP5RyDDIndfvZC5GrA4pyEDNyjPloJud+w=="], + "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.2", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ=="], - "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.40.1", "", { "dependencies": { "@opentelemetry/core": "^1.1.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg=="], + "@oxc-project/types": ["@oxc-project/types@0.124.0", "", {}, "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - "@playwright/test": ["@playwright/test@1.52.0", "", { "dependencies": { "playwright": "1.52.0" }, "bin": { "playwright": "cli.js" } }, "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g=="], + "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], + + "@playwright/test": ["@playwright/test@1.59.1", "", { "dependencies": { "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" } }, "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg=="], "@polka/url": ["@polka/url@1.0.0-next.28", "", {}, "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw=="], - "@prisma/instrumentation": ["@prisma/instrumentation@6.7.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-3NuxWlbzYNevgPZbV0ktA2z6r0bfh0g22ONTxcK09a6+6MdIPjHsYx1Hnyu4yOq+j7LmupO5J69hhuOnuvj8oQ=="], + "@prisma/instrumentation": ["@prisma/instrumentation@7.6.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.207.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-ZPW2gRiwpPzEfgeZgaekhqXrbW+Y2RJKHVqUmlhZhKzRNCcvR6DykzylDrynpArKKRQtLxoZy36fK7U0p3pdgQ=="], + + "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], + + "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], + + "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], + + "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], + + "@protobufjs/fetch": ["@protobufjs/fetch@1.1.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="], + + "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], + + "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], + + "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], + + "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], + + "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], + + "@reduxjs/toolkit": ["@reduxjs/toolkit@2.11.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^11.0.0", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.15", "", { "os": "android", "cpu": "arm64" }, "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.34.6", "", { "os": "android", "cpu": "arm" }, "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.34.6", "", { "os": "android", "cpu": "arm64" }, "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.15", "", { "os": "freebsd", "cpu": "x64" }, "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.34.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15", "", { "os": "linux", "cpu": "arm" }, "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.34.6", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.34.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.34.6", "", { "os": "linux", "cpu": "arm" }, "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "ppc64" }, "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.34.6", "", { "os": "linux", "cpu": "arm" }, "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "s390x" }, "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.34.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "x64" }, "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.34.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.15", "", { "os": "linux", "cpu": "x64" }, "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.34.6", "", { "os": "linux", "cpu": "none" }, "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.15", "", { "os": "none", "cpu": "arm64" }, "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg=="], - "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.34.6", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ=="], + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.15", "", { "dependencies": { "@emnapi/core": "1.9.2", "@emnapi/runtime": "1.9.2", "@napi-rs/wasm-runtime": "^1.1.3" }, "cpu": "none" }, "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.34.6", "", { "os": "linux", "cpu": "none" }, "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.34.6", "", { "os": "linux", "cpu": "s390x" }, "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.15", "", { "os": "win32", "cpu": "x64" }, "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.34.6", "", { "os": "linux", "cpu": "x64" }, "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.15", "", {}, "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.34.6", "", { "os": "linux", "cpu": "x64" }, "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A=="], + "@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.34.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA=="], + "@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.34.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA=="], + "@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.34.6", "", { "os": "win32", "cpu": "x64" }, "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w=="], + "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.48.0", "", { "dependencies": { "@sentry/core": "10.48.0" } }, "sha512-SCiTLBXzugFKxev6NoKYBIhQoDk0gUh0AVVVepCBqfCJiWBG01Zvv0R5tCVohr4cWRllkQ8mlBdNQd/I7s9tdA=="], - "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@9.19.0", "", { "dependencies": { "@sentry/core": "9.19.0" } }, "sha512-DlEHX4eIHe5yIuh/cFu9OiaFuk1CTnFK95zj61I7Q2fxmN43dIwC3xAAGJ/Hy+GDQi7kU+BiS2sudSHSTq81BA=="], + "@sentry-internal/feedback": ["@sentry-internal/feedback@10.48.0", "", { "dependencies": { "@sentry/core": "10.48.0" } }, "sha512-tGkEyOM1HDS9qebDphUMEnyk3qq/50AnuTBiFmMJyjNzowylVGmRRk0sr3xkmbVHCDXQCiYnDmSVlJ2x4SDMrQ=="], - "@sentry-internal/feedback": ["@sentry-internal/feedback@9.19.0", "", { "dependencies": { "@sentry/core": "9.19.0" } }, "sha512-yixRrv4NfpjhFW56AuUTjVwZlignB9FWAXXyrmRP3SsFeJCFrAsSD8HOxV9RXNr9ePYl7MEU0Agi43YWhJsiAw=="], + "@sentry-internal/replay": ["@sentry-internal/replay@10.48.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.48.0", "@sentry/core": "10.48.0" } }, "sha512-sevRTePfuk4PNuz9KAKpmTZEomAU0aLXyIhOwA0OnUDdxPhkY8kq5lwDbuxTHv6DQUjUX3YgFbY45VH1JEqHKA=="], - "@sentry-internal/replay": ["@sentry-internal/replay@9.19.0", "", { "dependencies": { "@sentry-internal/browser-utils": "9.19.0", "@sentry/core": "9.19.0" } }, "sha512-i/X9brRchbAF25yjxLTI7E8eoESRPBgIyQOWoWRXXt2n51iBRTjLXSaEfGvjdN+qrMq/yd6nC1/UqJVxXHeIhA=="], + "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@10.48.0", "", { "dependencies": { "@sentry-internal/replay": "10.48.0", "@sentry/core": "10.48.0" } }, "sha512-9nWuN2z4O+iwbTfuYV5ZmngBgJU/ZxfOo47A5RJP3Nu/kl59aJ1lUhILYOKyeNOIC/JyeERmpIcTxnlPXQzZ3Q=="], - "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@9.19.0", "", { "dependencies": { "@sentry-internal/replay": "9.19.0", "@sentry/core": "9.19.0" } }, "sha512-YC8yrOjuKSfQgGniJnzkdbFsWEPTlNpzeeYPTxS4ouH1FwfGrSkPmcddjor2YHaLfiuHHqQ/Vvq70n+zruJH7A=="], + "@sentry/babel-plugin-component-annotate": ["@sentry/babel-plugin-component-annotate@5.2.0", "", {}, "sha512-8LbOI5Kzb5F0+7LVQPi2+zGz1iPiRRFhM+7uZ/ZQ33L9BmDOYNIy3xWxCfMw2JCuMXXaxF47XCjGmR22/B0WPg=="], - "@sentry/babel-plugin-component-annotate": ["@sentry/babel-plugin-component-annotate@3.2.4", "", {}, "sha512-yBzRn3GEUSv1RPtE4xB4LnuH74ZxtdoRJ5cmQ9i6mzlmGDxlrnKuvem5++AolZTE9oJqAD3Tx2rd1PqmpWnLoA=="], + "@sentry/browser": ["@sentry/browser@10.48.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.48.0", "@sentry-internal/feedback": "10.48.0", "@sentry-internal/replay": "10.48.0", "@sentry-internal/replay-canvas": "10.48.0", "@sentry/core": "10.48.0" } }, "sha512-4jt2zX2ExgFcNe2x+W+/k81fmDUsOrquGtt028CiGuDuma6kEsWBI4JbooT1jhj2T+eeUxe3YGbM23Zhh7Ghhw=="], - "@sentry/browser": ["@sentry/browser@9.19.0", "", { "dependencies": { "@sentry-internal/browser-utils": "9.19.0", "@sentry-internal/feedback": "9.19.0", "@sentry-internal/replay": "9.19.0", "@sentry-internal/replay-canvas": "9.19.0", "@sentry/core": "9.19.0" } }, "sha512-efKfPQ0yQkdIkC7qJ5TIHxnecLNENGUYl1YD/TC8yyzW2JRf/3OYo5yg1hY2rhsP5RwQShXlT7uA03ABVIkA4A=="], + "@sentry/bundler-plugin-core": ["@sentry/bundler-plugin-core@5.2.0", "", { "dependencies": { "@babel/core": "^7.18.5", "@sentry/babel-plugin-component-annotate": "5.2.0", "@sentry/cli": "^2.58.5", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^13.0.6", "magic-string": "~0.30.8" } }, "sha512-+C0x4gEIJRgoMwyRFGx+TFiJ1Po2BZlT1v61+PnouiaprKL5qtZG8n5PXx/5LPLDsVjSIcXjnDrTz9aSm8SJ3w=="], - "@sentry/bundler-plugin-core": ["@sentry/bundler-plugin-core@3.2.4", "", { "dependencies": { "@babel/core": "^7.18.5", "@sentry/babel-plugin-component-annotate": "3.2.4", "@sentry/cli": "2.42.2", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^9.3.2", "magic-string": "0.30.8", "unplugin": "1.0.1" } }, "sha512-YMj9XW5W2JA89EeweE7CPKLDz245LBsI1JhCmqpt/bjSvmsSIAAPsLYnvIJBS3LQFm0OhtG8NB54PTi96dAcMA=="], + "@sentry/cli": ["@sentry/cli@2.58.5", "", { "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.7", "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "2.58.5", "@sentry/cli-linux-arm": "2.58.5", "@sentry/cli-linux-arm64": "2.58.5", "@sentry/cli-linux-i686": "2.58.5", "@sentry/cli-linux-x64": "2.58.5", "@sentry/cli-win32-arm64": "2.58.5", "@sentry/cli-win32-i686": "2.58.5", "@sentry/cli-win32-x64": "2.58.5" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-tavJ7yGUZV+z3Ct2/ZB6mg339i08sAk6HDkgqmSRuQEu2iLS5sl9HIvuXfM6xjv8fwlgFOSy++WNABNAcGHUbg=="], - "@sentry/cli": ["@sentry/cli@2.42.2", "", { "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.7", "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "2.42.2", "@sentry/cli-linux-arm": "2.42.2", "@sentry/cli-linux-arm64": "2.42.2", "@sentry/cli-linux-i686": "2.42.2", "@sentry/cli-linux-x64": "2.42.2", "@sentry/cli-win32-i686": "2.42.2", "@sentry/cli-win32-x64": "2.42.2" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-spb7S/RUumCGyiSTg8DlrCX4bivCNmU/A1hcfkwuciTFGu8l5CDc2I6jJWWZw8/0enDGxuj5XujgXvU5tr4bxg=="], + "@sentry/cli-darwin": ["@sentry/cli-darwin@2.58.5", "", { "os": "darwin" }, "sha512-lYrNzenZFJftfwSya7gwrHGxtE+Kob/e1sr9lmHMFOd4utDlmq0XFDllmdZAMf21fxcPRI1GL28ejZ3bId01fQ=="], - "@sentry/cli-darwin": ["@sentry/cli-darwin@2.42.2", "", { "os": "darwin" }, "sha512-GtJSuxER7Vrp1IpxdUyRZzcckzMnb4N5KTW7sbTwUiwqARRo+wxS+gczYrS8tdgtmXs5XYhzhs+t4d52ITHMIg=="], + "@sentry/cli-linux-arm": ["@sentry/cli-linux-arm@2.58.5", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "arm" }, "sha512-KtHweSIomYL4WVDrBrYSYJricKAAzxUgX86kc6OnlikbyOhoK6Fy8Vs6vwd52P6dvWPjgrMpUYjW2M5pYXQDUw=="], - "@sentry/cli-linux-arm": ["@sentry/cli-linux-arm@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "arm" }, "sha512-7udCw+YL9lwq+9eL3WLspvnuG+k5Icg92YE7zsteTzWLwgPVzaxeZD2f8hwhsu+wmL+jNqbpCRmktPteh3i2mg=="], + "@sentry/cli-linux-arm64": ["@sentry/cli-linux-arm64@2.58.5", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "arm64" }, "sha512-/4gywFeBqRB6tR/iGMRAJ3HRqY6Z7Yp4l8ZCbl0TDLAfHNxu7schEw4tSnm2/Hh9eNMiOVy4z58uzAWlZXAYBQ=="], - "@sentry/cli-linux-arm64": ["@sentry/cli-linux-arm64@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "arm64" }, "sha512-BOxzI7sgEU5Dhq3o4SblFXdE9zScpz6EXc5Zwr1UDZvzgXZGosUtKVc7d1LmkrHP8Q2o18HcDWtF3WvJRb5Zpw=="], + "@sentry/cli-linux-i686": ["@sentry/cli-linux-i686@2.58.5", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "ia32" }, "sha512-G7261dkmyxqlMdyvyP06b+RTIVzp1gZNgglj5UksxSouSUqRd/46W/2pQeOMPhloDYo9yLtCN2YFb3Mw4aUsWw=="], - "@sentry/cli-linux-i686": ["@sentry/cli-linux-i686@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "ia32" }, "sha512-Sw/dQp5ZPvKnq3/y7wIJyxTUJYPGoTX/YeMbDs8BzDlu9to2LWV3K3r7hE7W1Lpbaw4tSquUHiQjP5QHCOS7aQ=="], + "@sentry/cli-linux-x64": ["@sentry/cli-linux-x64@2.58.5", "", { "os": [ "linux", "android", "freebsd", ], "cpu": "x64" }, "sha512-rP04494RSmt86xChkQ+ecBNRYSPbyXc4u0IA7R7N1pSLCyO74e5w5Al+LnAq35cMfVbZgz5Sm0iGLjyiUu4I1g=="], - "@sentry/cli-linux-x64": ["@sentry/cli-linux-x64@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "x64" }, "sha512-mU4zUspAal6TIwlNLBV5oq6yYqiENnCWSxtSQVzWs0Jyq97wtqGNG9U+QrnwjJZ+ta/hvye9fvL2X25D/RxHQw=="], + "@sentry/cli-win32-arm64": ["@sentry/cli-win32-arm64@2.58.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-AOJ2nCXlQL1KBaCzv38m3i2VmSHNurUpm7xVKd6yAHX+ZoVBI8VT0EgvwmtJR2TY2N2hNCC7UrgRmdUsQ152bA=="], - "@sentry/cli-win32-i686": ["@sentry/cli-win32-i686@2.42.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-iHvFHPGqgJMNqXJoQpqttfsv2GI3cGodeTq4aoVLU/BT3+hXzbV0x1VpvvEhncJkDgDicJpFLM8sEPHb3b8abw=="], + "@sentry/cli-win32-i686": ["@sentry/cli-win32-i686@2.58.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-EsuboLSOnlrN7MMPJ1eFvfMDm+BnzOaSWl8eYhNo8W/BIrmNgpRUdBwnWn9Q2UOjJj5ZopukmsiMYtU/D7ml9g=="], - "@sentry/cli-win32-x64": ["@sentry/cli-win32-x64@2.42.2", "", { "os": "win32", "cpu": "x64" }, "sha512-vPPGHjYoaGmfrU7xhfFxG7qlTBacroz5NdT+0FmDn6692D8IvpNXl1K+eV3Kag44ipJBBeR8g1HRJyx/F/9ACw=="], + "@sentry/cli-win32-x64": ["@sentry/cli-win32-x64@2.58.5", "", { "os": "win32", "cpu": "x64" }, "sha512-IZf+XIMiQwj+5NzqbOQfywlOitmCV424Vtf9c+ep61AaVScUFD1TSrQbOcJJv5xGxhlxNOMNgMeZhdexdzrKZg=="], - "@sentry/cloudflare": ["@sentry/cloudflare@9.19.0", "", { "dependencies": { "@sentry/core": "9.19.0" }, "peerDependencies": { "@cloudflare/workers-types": "^4.x" }, "optionalPeers": ["@cloudflare/workers-types"] }, "sha512-WQ20xZ7PTiXiycSY0PG9MWyCsytxIqZ7v7IQ27U62O0I6iqeCZsW8ueQJ4EQNm6U9OYQughYurI26oOB15j5GQ=="], + "@sentry/cloudflare": ["@sentry/cloudflare@10.48.0", "", { "dependencies": { "@opentelemetry/api": "^1.9.1", "@sentry/core": "10.48.0" }, "peerDependencies": { "@cloudflare/workers-types": "^4.x" }, "optionalPeers": ["@cloudflare/workers-types"] }, "sha512-i02Ps4/cJjFpbcHLMhNEFXTeVqLB9XpB3+/OFQ9aMFV3yDcxlvHwe0oo7WZf41iroArvpysotLG8Y8NBOU9omA=="], - "@sentry/core": ["@sentry/core@9.19.0", "", {}, "sha512-I41rKpMJHHZb0z0Nja+Lxto6IkEEmX3uWjnECypF8Z1HIjeJB0+PXl8p/7TeaKYqw2J2GYcRTg7jQZDmvKle1w=="], + "@sentry/core": ["@sentry/core@10.48.0", "", {}, "sha512-h8F+fXVwYC9ro5ZaO8V+v3vqc0awlXHGblEAuVxSGgh4IV/oFX+QVzXeDTTrFOFS6v/Vn5vAyu240eJrJAS6/g=="], - "@sentry/node": ["@sentry/node@9.19.0", "", { "dependencies": { "@fastify/otel": "https://codeload.github.com/getsentry/fastify-otel/tar.gz/ae3088d65e286bdc94ac5d722573537d6a6671bb", "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1", "@opentelemetry/core": "^1.30.1", "@opentelemetry/instrumentation": "^0.57.2", "@opentelemetry/instrumentation-amqplib": "^0.46.1", "@opentelemetry/instrumentation-connect": "0.43.1", "@opentelemetry/instrumentation-dataloader": "0.16.1", "@opentelemetry/instrumentation-express": "0.47.1", "@opentelemetry/instrumentation-fs": "0.19.1", "@opentelemetry/instrumentation-generic-pool": "0.43.1", "@opentelemetry/instrumentation-graphql": "0.47.1", "@opentelemetry/instrumentation-hapi": "0.45.2", "@opentelemetry/instrumentation-http": "0.57.2", "@opentelemetry/instrumentation-ioredis": "0.47.1", "@opentelemetry/instrumentation-kafkajs": "0.7.1", "@opentelemetry/instrumentation-knex": "0.44.1", "@opentelemetry/instrumentation-koa": "0.47.1", "@opentelemetry/instrumentation-lru-memoizer": "0.44.1", "@opentelemetry/instrumentation-mongodb": "0.52.0", "@opentelemetry/instrumentation-mongoose": "0.46.1", "@opentelemetry/instrumentation-mysql": "0.45.1", "@opentelemetry/instrumentation-mysql2": "0.45.2", "@opentelemetry/instrumentation-pg": "0.51.1", "@opentelemetry/instrumentation-redis-4": "0.46.1", "@opentelemetry/instrumentation-tedious": "0.18.1", "@opentelemetry/instrumentation-undici": "0.10.1", "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.30.0", "@prisma/instrumentation": "6.7.0", "@sentry/core": "9.19.0", "@sentry/opentelemetry": "9.19.0", "import-in-the-middle": "^1.13.1" } }, "sha512-WKVcUBy5Zc+LGvfV/CfGPBDfnmEOSxLCMYzXIhx0gUxf2+8WpMMc/8yW/25zbXMo3eC4oST4GBDSpTfNdMBz1w=="], + "@sentry/node": ["@sentry/node@10.48.0", "", { "dependencies": { "@fastify/otel": "0.18.0", "@opentelemetry/api": "^1.9.1", "@opentelemetry/context-async-hooks": "^2.6.1", "@opentelemetry/core": "^2.6.1", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/instrumentation-amqplib": "0.61.0", "@opentelemetry/instrumentation-connect": "0.57.0", "@opentelemetry/instrumentation-dataloader": "0.31.0", "@opentelemetry/instrumentation-fs": "0.33.0", "@opentelemetry/instrumentation-generic-pool": "0.57.0", "@opentelemetry/instrumentation-graphql": "0.62.0", "@opentelemetry/instrumentation-hapi": "0.60.0", "@opentelemetry/instrumentation-http": "0.214.0", "@opentelemetry/instrumentation-ioredis": "0.62.0", "@opentelemetry/instrumentation-kafkajs": "0.23.0", "@opentelemetry/instrumentation-knex": "0.58.0", "@opentelemetry/instrumentation-koa": "0.62.0", "@opentelemetry/instrumentation-lru-memoizer": "0.58.0", "@opentelemetry/instrumentation-mongodb": "0.67.0", "@opentelemetry/instrumentation-mongoose": "0.60.0", "@opentelemetry/instrumentation-mysql": "0.60.0", "@opentelemetry/instrumentation-mysql2": "0.60.0", "@opentelemetry/instrumentation-pg": "0.66.0", "@opentelemetry/instrumentation-redis": "0.62.0", "@opentelemetry/instrumentation-tedious": "0.33.0", "@opentelemetry/instrumentation-undici": "0.24.0", "@opentelemetry/resources": "^2.6.1", "@opentelemetry/sdk-trace-base": "^2.6.1", "@opentelemetry/semantic-conventions": "^1.40.0", "@prisma/instrumentation": "7.6.0", "@sentry/core": "10.48.0", "@sentry/node-core": "10.48.0", "@sentry/opentelemetry": "10.48.0", "import-in-the-middle": "^3.0.0" } }, "sha512-MzyLJyYmr0Qg60K6NJ2EdwJUX1OuAYXs9tyYxnqVO3nJ8MyYwIcuN4FCYEnXkG6Jiy/4q7OuZgXWnfdQJVcaqw=="], - "@sentry/opentelemetry": ["@sentry/opentelemetry@9.19.0", "", { "dependencies": { "@sentry/core": "9.19.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", "@opentelemetry/core": "^1.30.1 || ^2.0.0", "@opentelemetry/instrumentation": "^0.57.1 || ^0.200.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", "@opentelemetry/semantic-conventions": "^1.30.0" } }, "sha512-Js6153kW5mNjjukk6TVb04D/8DDhA9MO++WRzXWzNP+FiPi5zwtvm+Je2TvTeAjSH74f6o2JpfECdrfPYHWopA=="], + "@sentry/node-core": ["@sentry/node-core@10.48.0", "", { "dependencies": { "@sentry/core": "10.48.0", "@sentry/opentelemetry": "10.48.0", "import-in-the-middle": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/exporter-trace-otlp-http": ">=0.57.0 <1", "@opentelemetry/instrumentation": ">=0.57.1 <1", "@opentelemetry/resources": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/context-async-hooks", "@opentelemetry/core", "@opentelemetry/exporter-trace-otlp-http", "@opentelemetry/instrumentation", "@opentelemetry/resources", "@opentelemetry/sdk-trace-base", "@opentelemetry/semantic-conventions"] }, "sha512-D1TnPhN6vhrRqJ+bN+rdXDM+INibI6lNBm0eGx45zz7DBx9ouq2e9gm/DPx+y/hAkYYq0qTd6x84cGxtVZbKLw=="], - "@sentry/svelte": ["@sentry/svelte@9.19.0", "", { "dependencies": { "@sentry/browser": "9.19.0", "@sentry/core": "9.19.0", "magic-string": "^0.30.0" }, "peerDependencies": { "svelte": "3.x || 4.x || 5.x" } }, "sha512-T/SNDG/kImrJqUUtWBzWp5faNHiyScGdHM+rX8IGyb+UfBE7Hj7BWNGYh320ZpurS71tnUYylbFVyo4OAzaa9Q=="], + "@sentry/opentelemetry": ["@sentry/opentelemetry@10.48.0", "", { "dependencies": { "@sentry/core": "10.48.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" } }, "sha512-Tn6Y0PZjRJ7OW8loK1ntK7wnJnIINnCfSpnwuqow0FMblaDmu5jDVOYq0U1SJBoBcMD5j9aSqrwyj6zqKwjc0A=="], - "@sentry/sveltekit": ["@sentry/sveltekit@9.19.0", "", { "dependencies": { "@babel/parser": "7.26.9", "@sentry/cloudflare": "9.19.0", "@sentry/core": "9.19.0", "@sentry/node": "9.19.0", "@sentry/opentelemetry": "9.19.0", "@sentry/svelte": "9.19.0", "@sentry/vite-plugin": "3.2.4", "magic-string": "0.30.7", "recast": "0.23.11", "sorcery": "1.0.0" }, "peerDependencies": { "@sveltejs/kit": "2.x", "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-SU1Ohl5GlNS+dFjOCg/iYhXQJItqubL1YzDeDUKPMk/TYAMK7ymvFJ4qNXFmrBohl7gOwd/jqixhhBai4XV7Bw=="], + "@sentry/rollup-plugin": ["@sentry/rollup-plugin@5.2.0", "", { "dependencies": { "@sentry/bundler-plugin-core": "5.2.0", "magic-string": "~0.30.8" }, "peerDependencies": { "rollup": ">=3.2.0" }, "optionalPeers": ["rollup"] }, "sha512-a8LfpvcYMFtFSroro5MpCcOoS528LeLfUHzxWURnpofOnY+Aso9Si4y4dFlna+RKqxCXjmFbn6CLnfI+YrHysQ=="], - "@sentry/vite-plugin": ["@sentry/vite-plugin@3.2.4", "", { "dependencies": { "@sentry/bundler-plugin-core": "3.2.4", "unplugin": "1.0.1" } }, "sha512-ZRn5TLlq5xtwKOqaWP+XqS1PYVfbBCgsbMk7wW2Ly6EgF9wYePvtLqKgYnE3hwPg2LpBnRPR2ti1ohlUkR+wXA=="], + "@sentry/svelte": ["@sentry/svelte@10.48.0", "", { "dependencies": { "@sentry/browser": "10.48.0", "@sentry/core": "10.48.0", "magic-string": "~0.30.0" }, "peerDependencies": { "svelte": "3.x || 4.x || 5.x" } }, "sha512-1xKW+ZmWhn1km+bziz/cxJPCsz4sCvxFPPvztnxw2aNg2owGq9HwLFd0jWUA9aBfqes71Q39DHSgEskz9f4HuA=="], + + "@sentry/sveltekit": ["@sentry/sveltekit@10.48.0", "", { "dependencies": { "@sentry/cloudflare": "10.48.0", "@sentry/core": "10.48.0", "@sentry/node": "10.48.0", "@sentry/svelte": "10.48.0", "@sentry/vite-plugin": "^5.2.0", "@sveltejs/acorn-typescript": "^1.0.9", "acorn": "^8.14.0", "magic-string": "~0.30.0", "sorcery": "1.0.0" }, "peerDependencies": { "@sveltejs/kit": "2.x", "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-37vHIcWiZKX5ybBE+hdKueYjzdW93N39qHYafP8T1t/8owodqFIYc4uMjph6KUViPd9sKSMSCQFHMhfRhO7ecQ=="], + + "@sentry/vite-plugin": ["@sentry/vite-plugin@5.2.0", "", { "dependencies": { "@sentry/bundler-plugin-core": "5.2.0", "@sentry/rollup-plugin": "5.2.0" } }, "sha512-4Jo3ixBspso5HY81PDvZdRXkH9wYGVmcw/0a2IX9ejbyKBdHqkYg4IhAtNqGUAyGuHwwRS9Y1S+sCMvrXv6htw=="], "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], @@ -495,83 +607,165 @@ "@sideway/pinpoint": ["@sideway/pinpoint@2.0.0", "", {}, "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="], - "@sinclair/typebox": ["@sinclair/typebox@0.31.28", "", {}, "sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ=="], + "@sinclair/typebox": ["@sinclair/typebox@0.34.49", "", {}, "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A=="], "@sinonjs/commons": ["@sinonjs/commons@3.0.1", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ=="], - "@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "@sinonjs/fake-timers": ["@sinonjs/fake-timers@15.3.1", "", { "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "sha512-oDDGPn/4jD3viZLphixgu1jwT0bqIqP25FNXC5OkWrUqHZOF4wATtSyVzluOt4DqcMqSoKMClyhUllKSxpQCng=="], + + "@solana-program/compute-budget": ["@solana-program/compute-budget@0.8.0", "", { "peerDependencies": { "@solana/kit": "^2.1.0" } }, "sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ=="], + + "@solana-program/stake": ["@solana-program/stake@0.2.1", "", { "peerDependencies": { "@solana/kit": "^2.1.0" } }, "sha512-ssNPsJv9XHaA+L7ihzmWGYcm/+XYURQ8UA3wQMKf6ccEHyHOUgoglkkDU/BoA0+wul6HxZUN0tHFymC0qFw6sg=="], + + "@solana-program/system": ["@solana-program/system@0.7.0", "", { "peerDependencies": { "@solana/kit": "^2.1.0" } }, "sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw=="], + + "@solana-program/token": ["@solana-program/token@0.5.1", "", { "peerDependencies": { "@solana/kit": "^2.1.0" } }, "sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag=="], + + "@solana-program/token-2022": ["@solana-program/token-2022@0.4.2", "", { "peerDependencies": { "@solana/kit": "^2.1.0", "@solana/sysvars": "^2.1.0" } }, "sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw=="], + + "@solana/accounts": ["@solana/accounts@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/rpc-spec": "2.3.0", "@solana/rpc-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw=="], + + "@solana/addresses": ["@solana/addresses@2.3.0", "", { "dependencies": { "@solana/assertions": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/nominal-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA=="], + + "@solana/assertions": ["@solana/assertions@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ=="], + + "@solana/codecs": ["@solana/codecs@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/options": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g=="], + + "@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "@solana/codecs-data-structures": ["@solana/codecs-data-structures@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw=="], + + "@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + + "@solana/codecs-strings": ["@solana/codecs-strings@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": ">=5.3.3" } }, "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug=="], + + "@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@2.3.0", "", { "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw=="], + + "@solana/functional": ["@solana/functional@2.3.0", "", { "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q=="], + + "@solana/instructions": ["@solana/instructions@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ=="], + + "@solana/keys": ["@solana/keys@2.3.0", "", { "dependencies": { "@solana/assertions": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/nominal-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ=="], + + "@solana/kit": ["@solana/kit@2.3.0", "", { "dependencies": { "@solana/accounts": "2.3.0", "@solana/addresses": "2.3.0", "@solana/codecs": "2.3.0", "@solana/errors": "2.3.0", "@solana/functional": "2.3.0", "@solana/instructions": "2.3.0", "@solana/keys": "2.3.0", "@solana/programs": "2.3.0", "@solana/rpc": "2.3.0", "@solana/rpc-parsed-types": "2.3.0", "@solana/rpc-spec-types": "2.3.0", "@solana/rpc-subscriptions": "2.3.0", "@solana/rpc-types": "2.3.0", "@solana/signers": "2.3.0", "@solana/sysvars": "2.3.0", "@solana/transaction-confirmation": "2.3.0", "@solana/transaction-messages": "2.3.0", "@solana/transactions": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ=="], + + "@solana/nominal-types": ["@solana/nominal-types@2.3.0", "", { "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA=="], + + "@solana/options": ["@solana/options@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw=="], + + "@solana/programs": ["@solana/programs@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w=="], + + "@solana/promises": ["@solana/promises@2.3.0", "", { "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ=="], + + "@solana/rpc": ["@solana/rpc@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/fast-stable-stringify": "2.3.0", "@solana/functional": "2.3.0", "@solana/rpc-api": "2.3.0", "@solana/rpc-spec": "2.3.0", "@solana/rpc-spec-types": "2.3.0", "@solana/rpc-transformers": "2.3.0", "@solana/rpc-transport-http": "2.3.0", "@solana/rpc-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ=="], + + "@solana/rpc-api": ["@solana/rpc-api@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/keys": "2.3.0", "@solana/rpc-parsed-types": "2.3.0", "@solana/rpc-spec": "2.3.0", "@solana/rpc-transformers": "2.3.0", "@solana/rpc-types": "2.3.0", "@solana/transaction-messages": "2.3.0", "@solana/transactions": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg=="], + + "@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@2.3.0", "", { "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg=="], + + "@solana/rpc-spec": ["@solana/rpc-spec@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/rpc-spec-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw=="], + + "@solana/rpc-spec-types": ["@solana/rpc-spec-types@2.3.0", "", { "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ=="], + + "@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/fast-stable-stringify": "2.3.0", "@solana/functional": "2.3.0", "@solana/promises": "2.3.0", "@solana/rpc-spec-types": "2.3.0", "@solana/rpc-subscriptions-api": "2.3.0", "@solana/rpc-subscriptions-channel-websocket": "2.3.0", "@solana/rpc-subscriptions-spec": "2.3.0", "@solana/rpc-transformers": "2.3.0", "@solana/rpc-types": "2.3.0", "@solana/subscribable": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg=="], + + "@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/keys": "2.3.0", "@solana/rpc-subscriptions-spec": "2.3.0", "@solana/rpc-transformers": "2.3.0", "@solana/rpc-types": "2.3.0", "@solana/transaction-messages": "2.3.0", "@solana/transactions": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ=="], - "@sqlite.org/sqlite-wasm": ["@sqlite.org/sqlite-wasm@3.48.0-build4", "", { "bin": { "sqlite-wasm": "bin/index.js" } }, "sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ=="], + "@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/functional": "2.3.0", "@solana/rpc-subscriptions-spec": "2.3.0", "@solana/subscribable": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3", "ws": "^8.18.0" } }, "sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw=="], - "@storybook/addon-actions": ["@storybook/addon-actions@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", "polished": "^4.2.2", "uuid": "^9.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-XgZCwIcZGThEyD7e2q7rN/jzg7ZHUxn/ln403eex04jWAGBBbtC2IVuowwCWV8HwDihnhpCZEP6HlgjakOYZbQ=="], + "@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/promises": "2.3.0", "@solana/rpc-spec-types": "2.3.0", "@solana/subscribable": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg=="], - "@storybook/addon-backgrounds": ["@storybook/addon-backgrounds@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-aDFzi83gDhYn0+FGjRYbY5TfBtoG/UgVr9Abi7s5ceabZRhPrYikMyFX0o8V3Z8COl6wUmWmF1luYE4MfXgN2g=="], + "@solana/rpc-transformers": ["@solana/rpc-transformers@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/functional": "2.3.0", "@solana/nominal-types": "2.3.0", "@solana/rpc-spec-types": "2.3.0", "@solana/rpc-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA=="], - "@storybook/addon-controls": ["@storybook/addon-controls@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "dequal": "^2.0.2", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-6ReB1Sc1qlqvAM7NUmtw2K1cKCgGBs8zYRgL44Q2ti+r55a2ownhm6WUm/kZs2ixSkV9ehm1osiqbGBfAn0Isw=="], + "@solana/rpc-transport-http": ["@solana/rpc-transport-http@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0", "@solana/rpc-spec": "2.3.0", "@solana/rpc-spec-types": "2.3.0", "undici-types": "^7.11.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg=="], - "@storybook/addon-docs": ["@storybook/addon-docs@8.6.7", "", { "dependencies": { "@mdx-js/react": "^3.0.0", "@storybook/blocks": "8.6.7", "@storybook/csf-plugin": "8.6.7", "@storybook/react-dom-shim": "8.6.7", "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", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-kgNPEVuLGNJE8EdVQi5Tg2DYgR66/gut07jvhqnJfNqUkj6UpBHad0JR1uwrd7xS3kJs29Fs7UyU87RJnSlwcg=="], + "@solana/rpc-types": ["@solana/rpc-types@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/nominal-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw=="], - "@storybook/addon-essentials": ["@storybook/addon-essentials@8.6.7", "", { "dependencies": { "@storybook/addon-actions": "8.6.7", "@storybook/addon-backgrounds": "8.6.7", "@storybook/addon-controls": "8.6.7", "@storybook/addon-docs": "8.6.7", "@storybook/addon-highlight": "8.6.7", "@storybook/addon-measure": "8.6.7", "@storybook/addon-outline": "8.6.7", "@storybook/addon-toolbars": "8.6.7", "@storybook/addon-viewport": "8.6.7", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-PFT62xuknk4wD1hTZEnYbGP1mJFPlhk7zVVlMjoldMUhmbHsFRhdWCpo93Vu9E3BWVxFxL3Jj+UwSwH4uVmekQ=="], + "@solana/signers": ["@solana/signers@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0", "@solana/instructions": "2.3.0", "@solana/keys": "2.3.0", "@solana/nominal-types": "2.3.0", "@solana/transaction-messages": "2.3.0", "@solana/transactions": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ=="], - "@storybook/addon-highlight": ["@storybook/addon-highlight@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-4KE1RF4XfqII7XrJPgf/1W0t0EWRKmik5Rrpb6WofXfgZ2QYzLFnyESjf67/g2TMgDnle2drfa/pt5tGV4+I2Q=="], + "@solana/subscribable": ["@solana/subscribable@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og=="], - "@storybook/addon-measure": ["@storybook/addon-measure@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "tiny-invariant": "^1.3.1" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-4dkkCltjKRcJH+ZMv5nbNT0LBQfcXIydVfN9mAvhDsiPFD5eZcHbN4XVfUslECWgrkaa/a6FE1W9PNEUBjCJaA=="], + "@solana/sysvars": ["@solana/sysvars@2.3.0", "", { "dependencies": { "@solana/accounts": "2.3.0", "@solana/codecs": "2.3.0", "@solana/errors": "2.3.0", "@solana/rpc-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA=="], - "@storybook/addon-outline": ["@storybook/addon-outline@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-atCpCi2CqAWQwL1nu1l5VpIA4fRMnbD4RZMsEiib1suUfNyJv0RdsSgZhp/f+e9sUS0TtMdwhzWT36eEA7VxhQ=="], + "@solana/transaction-confirmation": ["@solana/transaction-confirmation@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/keys": "2.3.0", "@solana/promises": "2.3.0", "@solana/rpc": "2.3.0", "@solana/rpc-subscriptions": "2.3.0", "@solana/rpc-types": "2.3.0", "@solana/transaction-messages": "2.3.0", "@solana/transactions": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw=="], - "@storybook/addon-svelte-csf": ["@storybook/addon-svelte-csf@5.0.0-next.28", "", { "dependencies": { "@storybook/csf": "^0.1.11", "dedent": "^1.5.3", "es-toolkit": "^1.26.1", "esrap": "^1.2.2", "magic-string": "^0.30.12", "svelte-ast-print": "^0.4.0", "zimmerframe": "^1.1.2" }, "peerDependencies": { "@storybook/svelte": "^0.0.0-0 || ^8.2.0 || ^9.0.0-0", "@sveltejs/vite-plugin-svelte": "^4.0.0 || ^5.0.0", "storybook": "^0.0.0-0 || ^8.2.0 || ^9.0.0-0", "svelte": "^5.0.0", "vite": "^5.0.0 || ^6.0.0" } }, "sha512-Ojj6m8xEd3rlVP7PkNYv/0st4M0NZdSYWwnCowhsw3ItBasmyB8jmP5Ht2WmwH+EIUYq0mMfsRI7Rb6Yl63QbQ=="], + "@solana/transaction-messages": ["@solana/transaction-messages@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0", "@solana/functional": "2.3.0", "@solana/instructions": "2.3.0", "@solana/nominal-types": "2.3.0", "@solana/rpc-types": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww=="], - "@storybook/addon-toolbars": ["@storybook/addon-toolbars@8.6.7", "", { "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-gR+mRs+Cc5GINZdKgE7afJLFCSMHkz40+zzdrPu6yY2P4B3UOvuQpt+zC/Er5YQ31EEjIvM6/XMQTM0i2db8AA=="], + "@solana/transactions": ["@solana/transactions@2.3.0", "", { "dependencies": { "@solana/addresses": "2.3.0", "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0", "@solana/functional": "2.3.0", "@solana/instructions": "2.3.0", "@solana/keys": "2.3.0", "@solana/nominal-types": "2.3.0", "@solana/rpc-types": "2.3.0", "@solana/transaction-messages": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug=="], - "@storybook/addon-viewport": ["@storybook/addon-viewport@8.6.7", "", { "dependencies": { "memoizerific": "^1.11.3" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-kTrt6ByCbBIbqoRqQO9watDl5nSIKCC+R0/EmpEl6ZtzBV3l8trZHdvCHhIqOyv7nfaa7pIeTTG1GD6Gdrxk3w=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@storybook/blocks": ["@storybook/blocks@8.6.7", "", { "dependencies": { "@storybook/icons": "^1.2.12", "ts-dedent": "^2.0.0" }, "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", "storybook": "^8.6.7" }, "optionalPeers": ["react", "react-dom"] }, "sha512-IFhIKO7R1UPpnoG/5tZH0FgC79oYgXNf+7aGUwq29M/CQWy6p/Pvp0y4P962btY1UZRol+SsU//33nH8o6yNRw=="], + "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@storybook/builder-vite": ["@storybook/builder-vite@8.6.7", "", { "dependencies": { "@storybook/csf-plugin": "8.6.7", "browser-assert": "^1.2.1", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.7", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, "sha512-hgYnVu2cy8clrmDwidu4XjvFMTEi9WiblLH5cPI3LWQjVajIQmDpcWVp6kbD063sIOphh9zYP7cVKGO7ktMB/g=="], + "@stellar/js-xdr": ["@stellar/js-xdr@3.1.2", "", {}, "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ=="], - "@storybook/components": ["@storybook/components@8.6.7", "", { "peerDependencies": { "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "sha512-8pnjH1w7PZ/Iiuve1/BJY7EO/kmu0qdE34X1ZM8DyHzuy33EL/PfUuhxNkrL4ayMXrEDp/EJMHx2bqO1RdRV6A=="], + "@stellar/stellar-base": ["@stellar/stellar-base@14.1.0", "", { "dependencies": { "@noble/curves": "^1.9.6", "@stellar/js-xdr": "^3.1.2", "base32.js": "^0.1.0", "bignumber.js": "^9.3.1", "buffer": "^6.0.3", "sha.js": "^2.4.12" } }, "sha512-A8kFli6QGy22SRF45IjgPAJfUNGjnI+R7g4DF5NZYVsD1kGf7B4ITyc4OPclLV9tqNI4/lXxafGEw0JEUbHixw=="], - "@storybook/core": ["@storybook/core@8.6.7", "", { "dependencies": { "@storybook/theming": "8.6.7", "better-opn": "^3.0.2", "browser-assert": "^1.2.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", "esbuild-register": "^3.5.0", "jsdoc-type-pratt-parser": "^4.0.0", "process": "^0.11.10", "recast": "^0.23.5", "semver": "^7.6.2", "util": "^0.12.5", "ws": "^8.2.3" }, "peerDependencies": { "prettier": "^2 || ^3" }, "optionalPeers": ["prettier"] }, "sha512-FcvLFA+Qn3+D6LgQkk0MOXA5FBz8DGc0UZmZuVbIwIUV4MV4ywCMwtKdG0cyhtzQg0YNyfiIYWJr7lZ4jLLhYg=="], + "@stellar/stellar-sdk": ["@stellar/stellar-sdk@14.2.0", "", { "dependencies": { "@stellar/stellar-base": "^14.0.1", "axios": "^1.12.2", "bignumber.js": "^9.3.1", "eventsource": "^2.0.2", "feaxios": "^0.0.23", "randombytes": "^2.1.0", "toml": "^3.0.0", "urijs": "^1.19.1" } }, "sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ=="], + + "@storybook/addon-actions": ["@storybook/addon-actions@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", "polished": "^4.2.2", "uuid": "^9.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ=="], + + "@storybook/addon-backgrounds": ["@storybook/addon-backgrounds@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg=="], + + "@storybook/addon-controls": ["@storybook/addon-controls@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "dequal": "^2.0.2", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw=="], + + "@storybook/addon-docs": ["@storybook/addon-docs@8.6.14", "", { "dependencies": { "@mdx-js/react": "^3.0.0", "@storybook/blocks": "8.6.14", "@storybook/csf-plugin": "8.6.14", "@storybook/react-dom-shim": "8.6.14", "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", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ=="], + + "@storybook/addon-essentials": ["@storybook/addon-essentials@8.6.14", "", { "dependencies": { "@storybook/addon-actions": "8.6.14", "@storybook/addon-backgrounds": "8.6.14", "@storybook/addon-controls": "8.6.14", "@storybook/addon-docs": "8.6.14", "@storybook/addon-highlight": "8.6.14", "@storybook/addon-measure": "8.6.14", "@storybook/addon-outline": "8.6.14", "@storybook/addon-toolbars": "8.6.14", "@storybook/addon-viewport": "8.6.14", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA=="], + + "@storybook/addon-highlight": ["@storybook/addon-highlight@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ=="], + + "@storybook/addon-measure": ["@storybook/addon-measure@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "tiny-invariant": "^1.3.1" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw=="], + + "@storybook/addon-outline": ["@storybook/addon-outline@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w=="], + + "@storybook/addon-svelte-csf": ["@storybook/addon-svelte-csf@5.1.2", "", { "dependencies": { "@storybook/csf": "^0.1.13", "dedent": "^1.5.3", "es-toolkit": "^1.26.1", "esrap": "^1.2.2", "magic-string": "^0.30.12", "svelte-ast-print": "^0.4.0", "zimmerframe": "^1.1.2" }, "peerDependencies": { "@storybook/svelte": "^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0", "@sveltejs/vite-plugin-svelte": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "storybook": "^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0", "svelte": "^5.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-NpImknEb48J7yr/ArTYpvhDSvGUrgm5Nuybu9PCicjSKTACsXX7cln2R19572ORtns399RTE+t20BBOKxSPm2g=="], + + "@storybook/addon-toolbars": ["@storybook/addon-toolbars@8.6.14", "", { "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ=="], + + "@storybook/addon-viewport": ["@storybook/addon-viewport@8.6.14", "", { "dependencies": { "memoizerific": "^1.11.3" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA=="], + + "@storybook/blocks": ["@storybook/blocks@8.6.14", "", { "dependencies": { "@storybook/icons": "^1.2.12", "ts-dedent": "^2.0.0" }, "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", "storybook": "^8.6.14" }, "optionalPeers": ["react", "react-dom"] }, "sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ=="], + + "@storybook/builder-vite": ["@storybook/builder-vite@10.3.5", "", { "dependencies": { "@storybook/csf-plugin": "10.3.5", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.3.5", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-i4KwCOKbhtlbQIbhm53+Kk7bMnxa0cwTn1pxmtA/x5wm1Qu7FrrBQV0V0DNjkUqzcSKo1CjspASJV/HlY0zYlw=="], "@storybook/csf": ["@storybook/csf@0.1.13", "", { "dependencies": { "type-fest": "^2.19.0" } }, "sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q=="], - "@storybook/csf-plugin": ["@storybook/csf-plugin@8.6.7", "", { "dependencies": { "unplugin": "^1.3.1" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-HK7yQD4kFu04JOKnUwoFeR58r5WY6ucF0D8zfW4Gx+r8hBJ5K4t3z6k2dlIlRQF1X5+2vNkQOwD8liHjckuZ8Q=="], + "@storybook/csf-plugin": ["@storybook/csf-plugin@8.6.14", "", { "dependencies": { "unplugin": "^1.3.1" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ=="], - "@storybook/experimental-addon-test": ["@storybook/experimental-addon-test@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.12", "@storybook/instrumenter": "8.6.7", "@storybook/test": "8.6.7", "polished": "^4.2.2", "prompts": "^2.4.0", "ts-dedent": "^2.2.0" }, "peerDependencies": { "@vitest/browser": "^2.1.1 || ^3.0.0", "@vitest/runner": "^2.1.1 || ^3.0.0", "storybook": "^8.6.7", "vitest": "^2.1.1 || ^3.0.0" }, "optionalPeers": ["@vitest/browser", "@vitest/runner", "vitest"] }, "sha512-laA3Tx6shWDROS+TUTd70i7oDXog7dyKcM9tAEAvqf9acSkcGrGOm/MKAFZtefUx+wZeYaAVjpCER/v0MaN1qQ=="], + "@storybook/experimental-addon-test": ["@storybook/experimental-addon-test@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.12", "@storybook/instrumenter": "8.6.14", "@storybook/test": "8.6.14", "polished": "^4.2.2", "prompts": "^2.4.0", "ts-dedent": "^2.2.0" }, "peerDependencies": { "@vitest/browser": "^2.1.1 || ^3.0.0", "@vitest/runner": "^2.1.1 || ^3.0.0", "storybook": "^8.6.14", "vitest": "^2.1.1 || ^3.0.0" }, "optionalPeers": ["@vitest/browser", "@vitest/runner", "vitest"] }, "sha512-Ey1WFTRXSx6Tcv2vpxW16fhk03xQKUmsdg0yWKz9llkNVTGqmL5CNMWZ7j1ZnBGneeRJOvxNsz83SwBRrr588A=="], "@storybook/global": ["@storybook/global@5.0.0", "", {}, "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ=="], "@storybook/icons": ["@storybook/icons@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, "sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA=="], - "@storybook/instrumenter": ["@storybook/instrumenter@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "@vitest/utils": "^2.1.1" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-FeQiV0g5crCWs0P1wKY4xZzb4PxAYNcrm2+9LLGVqwnC7qzrSCPf0p10MlveVfwsen1m6Wbqfe+wl21c31Hfmg=="], - - "@storybook/manager-api": ["@storybook/manager-api@8.6.7", "", { "peerDependencies": { "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "sha512-BA8RxaLP07WGF660LWo7qB3Jomr/+MPuCZmuKPqXxPhfIovqYjr0hnugxJBjEah0ic31aNX4NucNfDRuV7F5sA=="], + "@storybook/instrumenter": ["@storybook/instrumenter@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "@vitest/utils": "^2.1.1" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ=="], - "@storybook/preview-api": ["@storybook/preview-api@8.6.7", "", { "peerDependencies": { "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "sha512-Rz83Nx43v3Dn9/SjhIsorkcx1gPmlclueuzf6YywJTqE1E/L4dgoe2mOA9MfF0jr0bh3TwEA2J3ii0Jstg1Orw=="], + "@storybook/react-dom-shim": ["@storybook/react-dom-shim@8.6.14", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "storybook": "^8.6.14" } }, "sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw=="], - "@storybook/react-dom-shim": ["@storybook/react-dom-shim@8.6.7", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "storybook": "^8.6.7" } }, "sha512-+JH7gbRI6NRbt9o0l1rY4wFdeVt8wGRddm0b55OBlwBGlFo2nvGVOH73J4AGphXVhfY7z33I3TXIjXQ561UdEQ=="], + "@storybook/svelte": ["@storybook/svelte@10.3.5", "", { "dependencies": { "ts-dedent": "^2.0.0", "type-fest": "~2.19" }, "peerDependencies": { "storybook": "^10.3.5", "svelte": "^5.0.0" } }, "sha512-QLNSnergsTlh6c92EkuHInaS99Lp9luOJIW9MuADwyKa6UriFEMoolhcdvKIOeRk9UIH051zykA/xlscNibbZA=="], - "@storybook/svelte": ["@storybook/svelte@8.6.7", "", { "dependencies": { "@storybook/components": "8.6.7", "@storybook/csf": "0.1.12", "@storybook/global": "^5.0.0", "@storybook/manager-api": "8.6.7", "@storybook/preview-api": "8.6.7", "@storybook/theming": "8.6.7", "sveltedoc-parser": "^4.2.1", "ts-dedent": "^2.0.0", "type-fest": "~2.19" }, "peerDependencies": { "storybook": "^8.6.7", "svelte": "^4.0.0 || ^5.0.0" } }, "sha512-H1XbQmXgyVwNKR2KqRgF9XlK+BsM6thCY/ToJ5IQ83kAym2/z9lZ8cDPYlUL6OoiI0zGTm1rHPwYlrIbTSCIWg=="], + "@storybook/svelte-vite": ["@storybook/svelte-vite@10.3.5", "", { "dependencies": { "@storybook/builder-vite": "10.3.5", "@storybook/svelte": "10.3.5", "magic-string": "^0.30.0", "svelte2tsx": "^0.7.44", "typescript": "^4.9.4 || ^5.0.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "storybook": "^10.3.5", "svelte": "^5.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-RzSnk5oWjOdp1LIX8JtxMBmUWfuEPUzzjN8dHowyvR5XvjV48pazWcExTe9TGbD0MSOhOr7bAUXMN9SWDI629w=="], - "@storybook/svelte-vite": ["@storybook/svelte-vite@8.6.7", "", { "dependencies": { "@storybook/builder-vite": "8.6.7", "@storybook/svelte": "8.6.7", "magic-string": "^0.30.0", "svelte-preprocess": "^5.1.1", "svelte2tsx": "^0.7.35", "sveltedoc-parser": "^4.2.1", "ts-dedent": "^2.2.0", "typescript": "^4.9.4 || ^5.0.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "storybook": "^8.6.7", "svelte": "^4.0.0 || ^5.0.0", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, "sha512-zlJPeodmV4etTcD66HOzfiHK/eJ8yDOAISWBVAXnFeMObJQD5sSIe1O1mcRvgGjxH23c5KwK8nhz5rl37LoaoA=="], + "@storybook/sveltekit": ["@storybook/sveltekit@10.3.5", "", { "dependencies": { "@storybook/builder-vite": "10.3.5", "@storybook/svelte": "10.3.5", "@storybook/svelte-vite": "10.3.5" }, "peerDependencies": { "storybook": "^10.3.5", "svelte": "^5.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-/1s/BxWaDvKH8oEWmrE/U3V2vaab4vSVVA8Stzy7N+gb56+zsg1sCy0OTInK3iP0CiRzMLb9Twf2qdpDOcEvQw=="], - "@storybook/sveltekit": ["@storybook/sveltekit@8.6.7", "", { "dependencies": { "@storybook/addon-actions": "8.6.7", "@storybook/builder-vite": "8.6.7", "@storybook/svelte": "8.6.7", "@storybook/svelte-vite": "8.6.7" }, "peerDependencies": { "storybook": "^8.6.7", "svelte": "^4.0.0 || ^5.0.0", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, "sha512-fjc32UejEaQ7qbWiSPYwYNa6NG/DMSZCVc1DjXSorYjKpm83gZyh7wXYpzkWGcWsquD6+6h/vnZUA4o5VLr0/A=="], + "@storybook/test": ["@storybook/test@8.6.15", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/instrumenter": "8.6.15", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", "@vitest/expect": "2.0.5", "@vitest/spy": "2.0.5" }, "peerDependencies": { "storybook": "^8.6.15" } }, "sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw=="], - "@storybook/test": ["@storybook/test@8.6.7", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/instrumenter": "8.6.7", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", "@vitest/expect": "2.0.5", "@vitest/spy": "2.0.5" }, "peerDependencies": { "storybook": "^8.6.7" } }, "sha512-uF1JbBtdT7tuiXfEtHsUShBHIhm2vc0C39nKVJaTWyK9CybajXaj2Ny3IRa3oY9NKnklwGgN+kZ/Z9YiIOc4MQ=="], + "@storybook/test-runner": ["@storybook/test-runner@0.24.3", "", { "dependencies": { "@babel/core": "^7.22.5", "@babel/generator": "^7.22.5", "@babel/template": "^7.22.5", "@babel/types": "^7.22.5", "@jest/types": "^30.0.1", "@swc/core": "^1.5.22", "@swc/jest": "^0.2.38", "expect-playwright": "^0.8.0", "jest": "^30.0.4", "jest-circus": "^30.0.4", "jest-environment-node": "^30.0.4", "jest-junit": "^16.0.0", "jest-process-manager": "^0.4.0", "jest-runner": "^30.0.4", "jest-serializer-html": "^7.1.0", "jest-watch-typeahead": "^3.0.1", "nyc": "^15.1.0", "playwright": "^1.14.0", "playwright-core": ">=1.2.0", "rimraf": "^3.0.2", "uuid": "^8.3.2" }, "peerDependencies": { "storybook": "^0.0.0-0 || ^10.0.0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0" }, "bin": { "test-storybook": "dist/test-storybook.js" } }, "sha512-CVHPfMXSkJEvASQo+Xr2VHaLtujoaWhznx8FyvEwIrNR4jtmmSf3G8i0IjEsiOYWG2uw3RRuyRiQSJ93A5BRIA=="], - "@storybook/test-runner": ["@storybook/test-runner@0.22.0", "", { "dependencies": { "@babel/core": "^7.22.5", "@babel/generator": "^7.22.5", "@babel/template": "^7.22.5", "@babel/types": "^7.22.5", "@jest/types": "^29.6.3", "@storybook/csf": "^0.1.11", "@swc/core": "^1.5.22", "@swc/jest": "^0.2.23", "expect-playwright": "^0.8.0", "jest": "^29.6.4", "jest-circus": "^29.6.4", "jest-environment-node": "^29.6.4", "jest-junit": "^16.0.0", "jest-playwright-preset": "^4.0.0", "jest-runner": "^29.6.4", "jest-serializer-html": "^7.1.0", "jest-watch-typeahead": "^2.0.0", "nyc": "^15.1.0", "playwright": "^1.14.0" }, "peerDependencies": { "storybook": "^0.0.0-0 || ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 || ^9.0.0-0" }, "bin": { "test-storybook": "dist/test-storybook.js" } }, "sha512-fKY6MTE/bcvMaulKXy+z0fPmRXJx1REkYMOMcGn8zn6uffyBigGgaVf/sZ+AZfibwvjzg/StWhJ9HvAM8pc14g=="], + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="], - "@storybook/theming": ["@storybook/theming@8.6.7", "", { "peerDependencies": { "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "sha512-F/i4XS5bew9dvtNiHvDJF0mko1IUbPM9PUjTYPaw6cK8ytS0kdec703MsJ/GUA7seeEWBeGdZjV3ua0pys650A=="], + "@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@7.0.1", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-dvuPm1E7M9NI/+canIQ6KKQDU2AkEefEZ2Dp7cY6uKoPq9Z/PhOXABe526UdW2mN986gjVkuSLkOYIBnS/M2LQ=="], - "@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@3.3.1", "", { "dependencies": { "import-meta-resolve": "^4.1.0" }, "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ=="], + "@sveltejs/adapter-static": ["@sveltejs/adapter-static@3.0.10", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew=="], - "@sveltejs/adapter-static": ["@sveltejs/adapter-static@3.0.8", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg=="], + "@sveltejs/kit": ["@sveltejs/kit@2.57.1", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", "devalue": "^5.6.4", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "set-cookie-parser": "^3.0.0", "sirv": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": "^5.3.3 || ^6.0.0", "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0" }, "optionalPeers": ["@opentelemetry/api", "typescript"], "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-VRdSbB96cI1EnRh09CqmnQqP/YJvET5buj8S6k7CxaJqBJD4bw4fRKDjcarAj/eX9k2eHifQfDH8NtOh+ZxxPw=="], - "@sveltejs/kit": ["@sveltejs/kit@2.19.2", "", { "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0", "devalue": "^5.1.0", "esm-env": "^1.2.2", "import-meta-resolve": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^3.0.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "vite": "^5.0.3 || ^6.0.0" }, "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-OkW7MMGkjXtdfqdHWlyPozh/Ct1X3pthXAKTSqHm+mwmvmTBASmPE6FhwlvUgsqlCceRYL+5QUGiIJfOy0xIjQ=="], + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@7.0.0", "", { "dependencies": { "deepmerge": "^4.3.1", "magic-string": "^0.30.21", "obug": "^2.1.0", "vitefu": "^1.1.2" }, "peerDependencies": { "svelte": "^5.46.4", "vite": "^8.0.0-beta.7 || ^8.0.0" } }, "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g=="], - "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@4.0.0", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", "debug": "^4.3.7", "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.12", "vitefu": "^1.0.3" }, "peerDependencies": { "svelte": "^5.0.0-next.96 || ^5.0.0", "vite": "^5.0.0" } }, "sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag=="], - - "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@4.0.1", "", { "dependencies": { "debug": "^4.3.7" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0", "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw=="], + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@5.0.2", "", { "dependencies": { "obug": "^2.1.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig=="], "@swc/core": ["@swc/core@1.11.11", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.19" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.11.11", "@swc/core-darwin-x64": "1.11.11", "@swc/core-linux-arm-gnueabihf": "1.11.11", "@swc/core-linux-arm64-gnu": "1.11.11", "@swc/core-linux-arm64-musl": "1.11.11", "@swc/core-linux-x64-gnu": "1.11.11", "@swc/core-linux-x64-musl": "1.11.11", "@swc/core-win32-arm64-msvc": "1.11.11", "@swc/core-win32-ia32-msvc": "1.11.11", "@swc/core-win32-x64-msvc": "1.11.11" }, "peerDependencies": { "@swc/helpers": "*" }, "optionalPeers": ["@swc/helpers"] }, "sha512-pCVY2Wn6dV/labNvssk9b3Owi4WOYsapcbWm90XkIj4xH/56Z6gzja9fsU+4MdPuEfC2Smw835nZHcdCFGyX6A=="], @@ -597,36 +791,80 @@ "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], - "@swc/jest": ["@swc/jest@0.2.37", "", { "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@swc/counter": "^0.1.3", "jsonc-parser": "^3.2.0" }, "peerDependencies": { "@swc/core": "*" } }, "sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ=="], + "@swc/jest": ["@swc/jest@0.2.39", "", { "dependencies": { "@jest/create-cache-key-function": "^30.0.0", "@swc/counter": "^0.1.3", "jsonc-parser": "^3.2.0" }, "peerDependencies": { "@swc/core": "*" } }, "sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA=="], "@swc/types": ["@swc/types@0.1.19", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-WkAZaAfj44kh/UFdAQcrMP1I0nwRqpt27u+08LMBYMqmQfwwMofYoMh/48NGkMMRfC4ynpfwRbJuu8ErfNloeA=="], - "@tauri-apps/api": ["@tauri-apps/api@2.3.0", "", {}, "sha512-33Z+0lX2wgZbx1SPFfqvzI6su63hCBkbzv+5NexeYjIx7WA9htdOKoRR7Dh3dJyltqS5/J8vQFyybiRoaL0hlA=="], + "@tauri-apps/api": ["@tauri-apps/api@2.10.1", "", {}, "sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw=="], - "@tauri-apps/plugin-autostart": ["@tauri-apps/plugin-autostart@2.3.0", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-yxQTpc4NolT1r317yjKVhrG+YwCWPBOj7p+70m/q0w1JHc53pGcHmTboAbA3kGY6PQ+9y9oE7cdmHq7PH9z/SQ=="], + "@tauri-apps/plugin-autostart": ["@tauri-apps/plugin-autostart@2.5.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-zS/xx7yzveCcotkA+8TqkI2lysmG2wvQXv2HGAVExITmnFfHAdj1arGsbbfs3o6EktRHf6l34pJxc3YGG2mg7w=="], - "@tauri-apps/plugin-dialog": ["@tauri-apps/plugin-dialog@2.2.1", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-wZmCouo4PgTosh/UoejPw9DPs6RllS5Pp3fuOV2JobCu36mR5AXU2MzU9NZiVaFi/5Zfc8RN0IhcZHnksJ1o8A=="], + "@tauri-apps/plugin-dialog": ["@tauri-apps/plugin-dialog@2.7.0", "", { "dependencies": { "@tauri-apps/api": "^2.10.1" } }, "sha512-4nS/hfGMGCXiAS3LtVjH9AgsSAPJeG/7R+q8agTFqytjnMa4Zq95Bq8WzVDkckpanX+yyRHXnRtrKXkANKDHvw=="], - "@tauri-apps/plugin-fs": ["@tauri-apps/plugin-fs@2.2.1", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-KdGzvvA4Eg0Dhw55MwczFbjxLxsTx0FvwwC/0StXlr6IxwPUxh5ziZQoaugkBFs8t+wfebdQrjBEzd8NmmDXNw=="], + "@tauri-apps/plugin-fs": ["@tauri-apps/plugin-fs@2.5.0", "", { "dependencies": { "@tauri-apps/api": "^2.10.1" } }, "sha512-c83kbz61AK+rKjhS+je9+stIO27nXj7p9cqeg36TwkIUtxpCFTttlHHtqon6h6FN54cXjyAjlMPOJcW3mwE5XQ=="], - "@tauri-apps/plugin-notification": ["@tauri-apps/plugin-notification@2.2.2", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-d71rJdtkFUTcG4dqydnv6d7ZwlNZVcdjrVOPwc9GsF6y9DgVN1WCZ9T/vbfD2qrJslf7ai+rnNJc62TLLC2IdA=="], + "@tauri-apps/plugin-notification": ["@tauri-apps/plugin-notification@2.3.3", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-Zw+ZH18RJb41G4NrfHgIuofJiymusqN+q8fGUIIV7vyCH+5sSn5coqRv/MWB9qETsUs97vmU045q7OyseCV3Qg=="], - "@tauri-apps/plugin-os": ["@tauri-apps/plugin-os@2.2.1", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-cNYpNri2CCc6BaNeB6G/mOtLvg8dFyFQyCUdf2y0K8PIAKGEWdEcu8DECkydU2B+oj4OJihDPD2de5K6cbVl9A=="], + "@tauri-apps/plugin-os": ["@tauri-apps/plugin-os@2.3.2", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A=="], - "@tauri-apps/plugin-positioner": ["@tauri-apps/plugin-positioner@2.2.0", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-3JIWqV4U1US4nmM4PGmAHODq0ltkJ91MyANR033elKSSpX3AqKnVQnLz76xThBFHjChJrZwsXASpc2Inpu+cTg=="], + "@tauri-apps/plugin-positioner": ["@tauri-apps/plugin-positioner@2.3.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-9JiNO3tpHhz91VUG/sncGha4CL1qQHlftnfkwWJIquAR7rhLA9GUdW1oIdZLbNswNzkkd9qVywFmh658eFEL2Q=="], - "@tauri-apps/plugin-process": ["@tauri-apps/plugin-process@2.2.1", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-cF/k8J+YjjuowhNG1AboHNTlrGiOwgX5j6NzsX6WFf9FMzyZUchkCgZMxCdSE5NIgFX0vvOgLQhODFJgbMenLg=="], + "@tauri-apps/plugin-process": ["@tauri-apps/plugin-process@2.3.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA=="], - "@tauri-apps/plugin-store": ["@tauri-apps/plugin-store@2.2.0", "", { "dependencies": { "@tauri-apps/api": "^2.0.0" } }, "sha512-hJTRtuJis4w5fW1dkcgftsYxKXK0+DbAqurZ3CURHG5WkAyyZgbxpeYctw12bbzF9ZbZREXZklPq8mocCC3Sgg=="], + "@tauri-apps/plugin-store": ["@tauri-apps/plugin-store@2.4.2", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-0ClHS50Oq9HEvLPhNzTNFxbWVOqoAp3dRvtewQBeqfIQ0z5m3JRnOISIn2ZVPCrQC0MyGyhTS9DWhHjpigQE7A=="], "@testing-library/dom": ["@testing-library/dom@10.4.0", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "pretty-format": "^27.0.2" } }, "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ=="], "@testing-library/jest-dom": ["@testing-library/jest-dom@6.5.0", "", { "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", "lodash": "^4.17.21", "redent": "^3.0.0" } }, "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA=="], - "@testing-library/svelte": ["@testing-library/svelte@5.2.7", "", { "dependencies": { "@testing-library/dom": "^10.0.0" }, "peerDependencies": { "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0", "vite": "*", "vitest": "*" }, "optionalPeers": ["vite", "vitest"] }, "sha512-aGhUaFmEXEVost4QOsbHUUbHLwi7ZZRRxAHFDO2Cmr0BZD3/3+XvaYEPq70Rdw0NRNjdqZHdARBEcrCOkPuAqw=="], + "@testing-library/svelte": ["@testing-library/svelte@5.3.1", "", { "dependencies": { "@testing-library/dom": "9.x.x || 10.x.x", "@testing-library/svelte-core": "1.0.0" }, "peerDependencies": { "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0", "vite": "*", "vitest": "*" }, "optionalPeers": ["vite", "vitest"] }, "sha512-8Ez7ZOqW5geRf9PF5rkuopODe5RGy3I9XR+kc7zHh26gBiktLaxTfKmhlGaSHYUOTQE7wFsLMN9xCJVCszw47w=="], + + "@testing-library/svelte-core": ["@testing-library/svelte-core@1.0.0", "", { "peerDependencies": { "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0" } }, "sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ=="], "@testing-library/user-event": ["@testing-library/user-event@14.5.2", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ=="], + "@trezor/analytics": ["@trezor/analytics@1.5.0", "", { "dependencies": { "@trezor/env-utils": "1.5.0", "@trezor/utils": "9.5.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-evILW5XJEmfPlf0TY1duOLtGJ47pdGeSKVE3P75ODEUsRNxtPVqlkOUBPmYpCxPnzS8XDmkatT8lf9/DF0G6nA=="], + + "@trezor/blockchain-link": ["@trezor/blockchain-link@2.6.1", "", { "dependencies": { "@solana-program/compute-budget": "^0.8.0", "@solana-program/stake": "^0.2.1", "@solana-program/token": "^0.5.1", "@solana-program/token-2022": "^0.4.2", "@solana/kit": "^2.3.0", "@solana/rpc-types": "^2.3.0", "@stellar/stellar-sdk": "14.2.0", "@trezor/blockchain-link-types": "1.5.0", "@trezor/blockchain-link-utils": "1.5.1", "@trezor/env-utils": "1.5.0", "@trezor/utils": "9.5.0", "@trezor/utxo-lib": "2.5.0", "@trezor/websocket-client": "1.3.0", "@types/web": "^0.0.197", "crypto-browserify": "3.12.0", "socks-proxy-agent": "8.0.5", "stream-browserify": "^3.0.0", "xrpl": "4.4.3" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-SPwxkihOMI0o79BOy0RkfgVL2meuJhIe1yWHCeR8uoqf5KGblUyeXxvNCy6w8ckJ9LRpM1+bZhsUODuNs3083Q=="], + + "@trezor/blockchain-link-types": ["@trezor/blockchain-link-types@1.5.1", "", { "dependencies": { "@trezor/utils": "9.5.0", "@trezor/utxo-lib": "2.5.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-Idavz6LwLBW8sXc69fh5AJEnl666EDl2Nt3io7updvBgOR0/P12I900DgjNhCKtiWuv66A33/5RE7zLcj3lfnw=="], + + "@trezor/blockchain-link-utils": ["@trezor/blockchain-link-utils@1.5.2", "", { "dependencies": { "@mobily/ts-belt": "^3.13.1", "@stellar/stellar-sdk": "14.2.0", "@trezor/env-utils": "1.5.0", "@trezor/protobuf": "1.5.2", "@trezor/utils": "9.5.0", "xrpl": "4.4.3" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-OSS5OEE98FMnYfjoEALPjBt7ebjC/FKnq3HOolHdEWXBpVlXZNN2+Vo1R9J6WbZUU087sHuUTJJy/GJYWY13Tg=="], + + "@trezor/connect": ["@trezor/connect@9.7.2", "", { "dependencies": { "@ethereumjs/common": "^10.1.0", "@ethereumjs/tx": "^10.1.0", "@fivebinaries/coin-selection": "3.0.0", "@mobily/ts-belt": "^3.13.1", "@noble/hashes": "^1.6.1", "@scure/bip39": "^1.5.1", "@solana-program/compute-budget": "^0.8.0", "@solana-program/system": "^0.7.0", "@solana-program/token": "^0.5.1", "@solana-program/token-2022": "^0.4.2", "@solana/kit": "^2.3.0", "@trezor/blockchain-link": "2.6.1", "@trezor/blockchain-link-types": "1.5.1", "@trezor/blockchain-link-utils": "1.5.2", "@trezor/connect-analytics": "1.4.0", "@trezor/connect-common": "0.5.1", "@trezor/crypto-utils": "1.2.0", "@trezor/device-authenticity": "1.1.2", "@trezor/device-utils": "1.2.0", "@trezor/env-utils": "^1.5.0", "@trezor/protobuf": "1.5.2", "@trezor/protocol": "1.3.0", "@trezor/schema-utils": "1.4.0", "@trezor/transport": "1.6.2", "@trezor/type-utils": "1.2.0", "@trezor/utils": "9.5.0", "@trezor/utxo-lib": "2.5.0", "blakejs": "^1.2.1", "bs58": "^6.0.0", "bs58check": "^4.0.0", "cbor": "^10.0.10", "cross-fetch": "^4.0.0", "jws": "^4.0.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-Sn6F4mNH+yi2vAHy29kwhs50bRLn92drg3znm3pkY+8yEBxI4MmuP8sKYjdgUEJnQflWh80KlcvEDeVa4olVRA=="], + + "@trezor/connect-analytics": ["@trezor/connect-analytics@1.4.0", "", { "dependencies": { "@trezor/analytics": "1.5.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-hy2J2oeIhRC/e1bOWXo5dsVMVnDwO2UKnxhR6FD8PINR3jgM6PWAXc6k33WJsBcyiTzwMP7/xPysLcgNJH5o4w=="], + + "@trezor/connect-common": ["@trezor/connect-common@0.5.1", "", { "dependencies": { "@trezor/env-utils": "1.5.0", "@trezor/type-utils": "1.2.0", "@trezor/utils": "9.5.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-wdpVCwdylBh4SBO5Ys40tB/d59UlfjmxgBHDkkLgaR+JcqkthCfiw5VlUrV9wu65lquejAZhA5KQL4mUUUhCow=="], + + "@trezor/connect-web": ["@trezor/connect-web@9.7.2", "", { "dependencies": { "@trezor/connect": "9.7.2", "@trezor/connect-common": "0.5.1", "@trezor/utils": "9.5.0", "@trezor/websocket-client": "1.3.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-r4wMnQ51KO1EaMpO8HLB95E+4s+aaZE9Vjx1dHYaD+Xj40LR7OJmR6DyDKuF0Ioji3Jxx1MwZCaFfvA+0JW+Sg=="], + + "@trezor/crypto-utils": ["@trezor/crypto-utils@1.2.0", "", { "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-9i1NrfW1IE6JO910ut7xrx4u5LxE++GETbpJhWLj4P5xpuGDDSDLEn/MXaYisls2DpE897aOrGPaa1qyt8V6tw=="], + + "@trezor/device-authenticity": ["@trezor/device-authenticity@1.1.2", "", { "dependencies": { "@noble/curves": "^2.0.1", "@trezor/crypto-utils": "1.2.0", "@trezor/protobuf": "1.5.2", "@trezor/schema-utils": "1.4.0", "@trezor/utils": "9.5.0" } }, "sha512-313uSXYR4XKDv3CjtCpgHA+yEe9xxqN7EFl/D68FEn70SPsuWI0+2zUvjPPh6TIOh/EcLv7hCO/QTHUAGd7ZWQ=="], + + "@trezor/device-utils": ["@trezor/device-utils@1.2.0", "", {}, "sha512-Aqp7pIooFTx21zRUtTI6i1AS4d9Lrx7cclvksh2nJQF9WJvbzuCXshEGkLoOsHwhQrCl3IXfbGuMdA12yDenPA=="], + + "@trezor/env-utils": ["@trezor/env-utils@1.5.0", "", { "dependencies": { "ua-parser-js": "^2.0.4" }, "peerDependencies": { "expo-constants": "*", "expo-localization": "*", "react-native": "*", "tslib": "^2.6.2" }, "optionalPeers": ["expo-constants", "expo-localization", "react-native"] }, "sha512-u1TN7dMQ5Qhpbae08Z4JJmI9fQrbbJ4yj8eIAsuzMQn6vb+Sg9vbntl+IDsZ1G9WeI73uHTLu1wWMmAgiujH8w=="], + + "@trezor/protobuf": ["@trezor/protobuf@1.5.2", "", { "dependencies": { "@trezor/schema-utils": "1.4.0", "long": "5.2.5", "protobufjs": "7.4.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-zViaL1jKue8DUTVEDg0C/lMipqNMd/Z3kr29/+MeZOoupjaXIQ2Lqp3WAMe8hvNTKKX8aNQH9JrbapJ6w9FMXw=="], + + "@trezor/protocol": ["@trezor/protocol@1.3.0", "", { "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-rmrxbDrdgxTouBPbZcSeqU7ba/e5WVT1dxvxxEntHqRdTiDl7d3VK+BErCrlyol8EH5YCqEF3/rXt0crSOfoFw=="], + + "@trezor/schema-utils": ["@trezor/schema-utils@1.4.0", "", { "dependencies": { "@sinclair/typebox": "^0.33.7", "ts-mixer": "^6.0.3" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-K7upSeh7VDrORaIC4KAxYVW93XNlohmUnH5if/5GKYmTdQSRp1nBkO6Jm+Z4hzIthdnz/1aLgnbeN3bDxWLRxA=="], + + "@trezor/transport": ["@trezor/transport@1.6.2", "", { "dependencies": { "@trezor/protobuf": "1.5.2", "@trezor/protocol": "1.3.0", "@trezor/type-utils": "1.2.0", "@trezor/utils": "9.5.0", "cross-fetch": "^4.0.0", "usb": "^2.15.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-w0HlD1fU+qTGO3tefBGHF/YS/ts/TWFja9FGIJ4+7+Z9NphvIG06HGvy2HzcD9AhJy9pvDeIsyoM2TTZTiyjkQ=="], + + "@trezor/type-utils": ["@trezor/type-utils@1.2.0", "", {}, "sha512-+E2QntxkyQuYfQQyl8RvT01tq2i5Dp/LFUOXuizF+KVOqsZBjBY43j5hewcCO3+MokD7deDiPyekbUEN5/iVlw=="], + + "@trezor/utils": ["@trezor/utils@9.5.0", "", { "dependencies": { "bignumber.js": "^9.3.1" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-kdyMyDbxzvOZmwBNvTjAK+C/kzyOz8T4oUbFvq+KaXn5mBFf1uf8rq5X2HkxgdYRPArtHS3PxLKsfkNCdhCYtQ=="], + + "@trezor/utxo-lib": ["@trezor/utxo-lib@2.5.0", "", { "dependencies": { "@trezor/utils": "9.5.0", "bech32": "^2.0.0", "bip66": "^2.0.0", "bitcoin-ops": "^1.4.1", "blake-hash": "^2.0.0", "blakejs": "^1.2.1", "bn.js": "^5.2.2", "bs58": "^6.0.0", "bs58check": "^4.0.0", "cashaddrjs": "0.4.4", "create-hmac": "^1.1.7", "int64-buffer": "^1.1.0", "pushdata-bitcoin": "^1.0.1", "tiny-secp256k1": "^1.1.7", "typeforce": "^1.18.0", "varuint-bitcoin": "2.0.0", "wif": "^5.0.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-Fa2cZh0037oX6AHNLfpFIj65UR/OoX0ZJTocFuQASe77/1PjZHysf6BvvGfmzuFToKfrAQ+DM/1Sx+P/vnyNmA=="], + + "@trezor/websocket-client": ["@trezor/websocket-client@1.3.0", "", { "dependencies": { "@trezor/utils": "9.5.0", "ws": "^8.18.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-9KQSaVc3NtmM6rFFj1e+9bM0C5mVKVidbnxlfzuBJu7G2YMRdIdLPcAXhvmRZjs40uzDuBeApK+p547kODz2ug=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="], "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], @@ -637,17 +875,19 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.6", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg=="], - "@types/bun": ["@types/bun@1.2.5", "", { "dependencies": { "bun-types": "1.2.5" } }, "sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg=="], + "@types/bun": ["@types/bun@1.3.12", "", { "dependencies": { "bun-types": "1.3.12" } }, "sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A=="], + + "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], - "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], - "@types/graceful-fs": ["@types/graceful-fs@4.1.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ=="], + "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], @@ -655,88 +895,128 @@ "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], - "@types/lodash": ["@types/lodash@4.17.16", "", {}, "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g=="], + "@types/lodash": ["@types/lodash@4.17.24", "", {}, "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ=="], "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/mysql": ["@types/mysql@2.15.26", "", { "dependencies": { "@types/node": "*" } }, "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ=="], + "@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="], "@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="], - "@types/pg": ["@types/pg@8.6.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w=="], + "@types/node-fetch": ["@types/node-fetch@2.6.12", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA=="], - "@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="], + "@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], - "@types/pug": ["@types/pug@2.0.10", "", {}, "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA=="], + "@types/pg-pool": ["@types/pg-pool@2.0.7", "", { "dependencies": { "@types/pg": "*" } }, "sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng=="], "@types/react": ["@types/react@19.0.11", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-vrdxRZfo9ALXth6yPfV16PYTLZwsUWhVjjC+DkfE5t1suNSbBrWC9YqSuuxJZ8Ps6z1o2ycRpIqzZJIgklq4Tw=="], - "@types/recordrtc": ["@types/recordrtc@5.6.14", "", {}, "sha512-Reiy1sl11xP0r6w8DW3iQjc1BgXFyNC7aDuutysIjpFoqyftbQps9xPA2FoBkfVXpJM61betgYPNt+v65zvMhA=="], + "@types/recordrtc": ["@types/recordrtc@5.6.15", "", {}, "sha512-Hml5qLCDfnACr5pYsbt+PbHQSCY4ynN/s84hx9szZz6B6zaTnX1jCUFLtdYWdxDLUKC6YuCaudm+fSpfnJ06tA=="], "@types/retry": ["@types/retry@0.12.5", "", {}, "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw=="], - "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="], - "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], - "@types/statuses": ["@types/statuses@2.0.5", "", {}, "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A=="], - "@types/tedious": ["@types/tedious@4.0.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw=="], - "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], - "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], "@types/uuid": ["@types/uuid@9.0.8", "", {}, "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA=="], "@types/video.js": ["@types/video.js@7.3.58", "", {}, "sha512-1CQjuSrgbv1/dhmcfQ83eVyYbvGyqhTvb2Opxr0QCV+iJ4J6/J+XWQ3Om59WiwCd1MN3rDUHasx5XRrpUtewYQ=="], + "@types/w3c-web-usb": ["@types/w3c-web-usb@1.0.10", "", {}, "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ=="], + "@types/wait-on": ["@types/wait-on@5.3.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw=="], - "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], + "@types/web": ["@types/web@0.0.197", "", {}, "sha512-V4sOroWDADFx9dLodWpKm298NOJ1VJ6zoDVgaP+WBb/utWxqQ6gnMzd9lvVDAr/F3ibiKaxH9i45eS0gQPSTaQ=="], "@types/yargs": ["@types/yargs@17.0.33", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA=="], "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], - "@videojs/http-streaming": ["@videojs/http-streaming@3.17.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/vhs-utils": "^4.1.1", "aes-decrypter": "^4.0.2", "global": "^4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "7.1.0", "video.js": "^7 || ^8" } }, "sha512-Ch1P3tvvIEezeZXyK11UfWgp4cWKX4vIhZ30baN/lRinqdbakZ5hiAI3pGjRy3d+q/Epyc8Csz5xMdKNNGYpcw=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], + + "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], + + "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="], + + "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="], + + "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="], + + "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="], + + "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="], + + "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="], + + "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="], + + "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="], + + "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="], + + "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="], + + "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="], + + "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="], + + "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="], + + "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="], + + "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="], + + "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="], + + "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + + "@videojs/http-streaming": ["@videojs/http-streaming@3.17.4", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/vhs-utils": "^4.1.1", "aes-decrypter": "^4.0.2", "global": "^4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "7.1.0", "video.js": "^7 || ^8" } }, "sha512-XAvdG2dolBuV2Fx8bu1kjmQ2D4TonGzZH68Pgv/O9xMSFWdZtITSMFismeQLEAtMmGwze8qNJp3RgV+jStrJqg=="], "@videojs/vhs-utils": ["@videojs/vhs-utils@4.1.1", "", { "dependencies": { "@babel/runtime": "^7.12.5", "global": "^4.4.0" } }, "sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA=="], "@videojs/xhr": ["@videojs/xhr@2.7.0", "", { "dependencies": { "@babel/runtime": "^7.5.5", "global": "~4.4.0", "is-function": "^1.0.1" } }, "sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ=="], - "@vitest/browser": ["@vitest/browser@3.1.4", "", { "dependencies": { "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.6.1", "@vitest/mocker": "3.1.4", "@vitest/utils": "3.1.4", "magic-string": "^0.30.17", "sirv": "^3.0.1", "tinyrainbow": "^2.0.0", "ws": "^8.18.1" }, "peerDependencies": { "playwright": "*", "vitest": "3.1.4", "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" }, "optionalPeers": ["playwright", "webdriverio"] }, "sha512-2L4vR/tuUZBxKU72Qe+unIp1P8lZ0T5nlqPegkXxyZFR5gWqItV8VPPR261GOzl49Zw2AhzMABzMMHJagQ0a2g=="], + "@vitest/browser": ["@vitest/browser@4.1.4", "", { "dependencies": { "@blazediff/core": "1.9.1", "@vitest/mocker": "4.1.4", "@vitest/utils": "4.1.4", "magic-string": "^0.30.21", "pngjs": "^7.0.0", "sirv": "^3.0.2", "tinyrainbow": "^3.1.0", "ws": "^8.19.0" }, "peerDependencies": { "vitest": "4.1.4" } }, "sha512-TrNaY/yVOwxtrxNsDUC/wQ56xSwplpytTeRAqF/197xV/ZddxxulBsxR6TrhVMyniJmp9in8d5u0AcDaNRY30w=="], - "@vitest/coverage-v8": ["@vitest/coverage-v8@3.1.4", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", "debug": "^4.4.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", "std-env": "^3.9.0", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "@vitest/browser": "3.1.4", "vitest": "3.1.4" }, "optionalPeers": ["@vitest/browser"] }, "sha512-G4p6OtioySL+hPV7Y6JHlhpsODbJzt1ndwHAFkyk6vVjpK03PFsKnauZIzcd0PrK4zAbc5lc+jeZ+eNGiMA+iw=="], + "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.4", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.4", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.4", "vitest": "4.1.4" }, "optionalPeers": ["@vitest/browser"] }, "sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w=="], "@vitest/expect": ["@vitest/expect@2.0.5", "", { "dependencies": { "@vitest/spy": "2.0.5", "@vitest/utils": "2.0.5", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" } }, "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA=="], - "@vitest/mocker": ["@vitest/mocker@3.1.4", "", { "dependencies": { "@vitest/spy": "3.1.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA=="], + "@vitest/mocker": ["@vitest/mocker@4.1.4", "", { "dependencies": { "@vitest/spy": "4.1.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg=="], - "@vitest/pretty-format": ["@vitest/pretty-format@3.1.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg=="], + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.4", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A=="], - "@vitest/runner": ["@vitest/runner@3.0.5", "", { "dependencies": { "@vitest/utils": "3.0.5", "pathe": "^2.0.2" } }, "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A=="], + "@vitest/runner": ["@vitest/runner@4.1.4", "", { "dependencies": { "@vitest/utils": "4.1.4", "pathe": "^2.0.3" } }, "sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ=="], - "@vitest/snapshot": ["@vitest/snapshot@3.1.4", "", { "dependencies": { "@vitest/pretty-format": "3.1.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg=="], + "@vitest/snapshot": ["@vitest/snapshot@4.1.4", "", { "dependencies": { "@vitest/pretty-format": "4.1.4", "@vitest/utils": "4.1.4", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw=="], "@vitest/spy": ["@vitest/spy@2.0.5", "", { "dependencies": { "tinyspy": "^3.0.0" } }, "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA=="], - "@vitest/utils": ["@vitest/utils@3.1.4", "", { "dependencies": { "@vitest/pretty-format": "3.1.4", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" } }, "sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg=="], + "@vitest/utils": ["@vitest/utils@4.1.4", "", { "dependencies": { "@vitest/pretty-format": "4.1.4", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw=="], - "@webav/mp4box.js": ["@webav/mp4box.js@0.5.6", "", {}, "sha512-DpZQlr624oyLwnmJjNIWggk4d2dfKsAwQdNMVf0akjx0BtXL45Fmd49tm0ekn9d9dB3zBIxxsgco5IcJQGpt4Q=="], + "@webav/mp4box.js": ["@webav/mp4box.js@0.5.7", "", {}, "sha512-KgScEtDpiLnWvj1Rj8Ri9fDWxTjfdNr7cmY/PT88EmttHh6cLxMAeyD/W8Vydes4z7qV/c5VDAaP4cTlaO0E9g=="], + + "@webcontainer/env": ["@webcontainer/env@1.1.1", "", {}, "sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng=="], "@xmldom/xmldom": ["@xmldom/xmldom@0.8.10", "", {}, "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw=="], - "acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], + "@xrplf/isomorphic": ["@xrplf/isomorphic@1.0.1", "", { "dependencies": { "@noble/hashes": "^1.0.0", "eventemitter3": "5.0.1", "ws": "^8.13.0" } }, "sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg=="], + + "@xrplf/secret-numbers": ["@xrplf/secret-numbers@2.0.0", "", { "dependencies": { "@xrplf/isomorphic": "^1.0.1", "ripple-keypairs": "^2.0.0" } }, "sha512-z3AOibRTE9E8MbjgzxqMpG1RNaBhQ1jnfhNCa1cGf2reZUJzPMYs4TggQTc7j8+0WyV3cr7y/U8Oz99SXIkN5Q=="], + + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "acorn-typescript": ["acorn-typescript@1.4.13", "", { "peerDependencies": { "acorn": ">=8.9.0" } }, "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q=="], - "aes-decrypter": ["aes-decrypter@4.0.2", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/vhs-utils": "^4.1.1", "global": "^4.4.0", "pkcs7": "^1.0.4" } }, "sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw=="], "aes-js": ["aes-js@4.0.0-beta.5", "", {}, "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="], @@ -749,9 +1029,9 @@ "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], - "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + "ansi-escapes": ["ansi-escapes@7.0.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw=="], - "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -763,57 +1043,97 @@ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + "aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="], - "array-timsort": ["array-timsort@1.0.3", "", {}, "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ=="], + "asn1.js": ["asn1.js@4.10.1", "", { "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw=="], "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], + "ast-v8-to-istanbul": ["ast-v8-to-istanbul@1.0.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg=="], + "async-mutex": ["async-mutex@0.5.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA=="], "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "axios": ["axios@1.8.3", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A=="], + "axios": ["axios@1.13.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], - "babel-jest": ["babel-jest@29.7.0", "", { "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg=="], + "babel-jest": ["babel-jest@30.3.0", "", { "dependencies": { "@jest/transform": "30.3.0", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", "babel-preset-jest": "30.3.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ=="], - "babel-plugin-istanbul": ["babel-plugin-istanbul@6.1.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="], + "babel-plugin-istanbul": ["babel-plugin-istanbul@7.0.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA=="], - "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@29.6.3", "", { "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg=="], + "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.3.0", "", { "dependencies": { "@types/babel__core": "^7.20.5" } }, "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg=="], - "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.1.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw=="], + "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="], - "babel-preset-jest": ["babel-preset-jest@29.6.3", "", { "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA=="], + "babel-preset-jest": ["babel-preset-jest@30.3.0", "", { "dependencies": { "babel-plugin-jest-hoist": "30.3.0", "babel-preset-current-node-syntax": "^1.2.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ=="], "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "better-opn": ["better-opn@3.0.2", "", { "dependencies": { "open": "^8.0.4" } }, "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ=="], + "base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + + "base32.js": ["base32.js@0.1.0", "", {}, "sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bech32": ["bech32@2.0.0", "", {}, "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="], + + "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + + "big-integer": ["big-integer@1.6.36", "", {}, "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg=="], + + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + + "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + + "bip66": ["bip66@2.0.0", "", {}, "sha512-kBG+hSpgvZBrkIm9dt5T1Hd/7xGCPEX2npoxAWZfsK1FvjgaxySEh2WizjyIstWXriKo9K9uJ4u0OnsyLDUPXQ=="], + + "bitcoin-ops": ["bitcoin-ops@1.4.1", "", {}, "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow=="], + + "blake-hash": ["blake-hash@2.0.0", "", { "dependencies": { "node-addon-api": "^3.0.0", "node-gyp-build": "^4.2.2", "readable-stream": "^3.6.0" } }, "sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w=="], + + "blakejs": ["blakejs@1.2.1", "", {}, "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="], - "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + "bn.js": ["bn.js@5.2.2", "", {}, "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw=="], - "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], - "browser-assert": ["browser-assert@1.2.1", "", {}, "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ=="], + "browserify-aes": ["browserify-aes@1.2.0", "", { "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.3", "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA=="], + + "browserify-cipher": ["browserify-cipher@1.0.1", "", { "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w=="], + + "browserify-des": ["browserify-des@1.0.2", "", { "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A=="], + + "browserify-rsa": ["browserify-rsa@4.1.1", "", { "dependencies": { "bn.js": "^5.2.1", "randombytes": "^2.1.0", "safe-buffer": "^5.2.1" } }, "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ=="], + + "browserify-sign": ["browserify-sign@4.2.5", "", { "dependencies": { "bn.js": "^5.2.2", "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "elliptic": "^6.6.1", "inherits": "^2.0.4", "parse-asn1": "^5.1.9", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" } }, "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw=="], "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], + "bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + + "bs58check": ["bs58check@4.0.0", "", { "dependencies": { "@noble/hashes": "^1.2.0", "bs58": "^6.0.0" } }, "sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g=="], + "bser": ["bser@2.1.1", "", { "dependencies": { "node-int64": "^0.4.0" } }, "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="], - "buffer-crc32": ["buffer-crc32@1.0.0", "", {}, "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w=="], + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "bun-types": ["bun-types@1.2.5", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg=="], + "buffer-xor": ["buffer-xor@1.0.3", "", {}, "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ=="], + + "bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="], - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], "caching-transform": ["caching-transform@4.0.0", "", { "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" } }, "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA=="], @@ -825,35 +1145,39 @@ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], "caniuse-lite": ["caniuse-lite@1.0.30001706", "", {}, "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug=="], - "chai": ["chai@5.2.0", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw=="], + "cashaddrjs": ["cashaddrjs@0.4.4", "", { "dependencies": { "big-integer": "1.6.36" } }, "sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA=="], - "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], + "cbor": ["cbor@10.0.12", "", { "dependencies": { "nofilter": "^3.0.2" } }, "sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA=="], - "char-regex": ["char-regex@2.0.2", "", {}, "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg=="], + "chai": ["chai@5.1.2", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "chromatic": ["chromatic@11.27.0", "", { "peerDependencies": { "@chromatic-com/cypress": "^0.*.* || ^1.0.0", "@chromatic-com/playwright": "^0.*.* || ^1.0.0" }, "optionalPeers": ["@chromatic-com/cypress", "@chromatic-com/playwright"], "bin": { "chroma": "dist/bin.js", "chromatic": "dist/bin.js", "chromatic-cli": "dist/bin.js" } }, "sha512-jQ2ufjS+ePpg+NtcPI9B2eOi+pAzlRd2nhd1LgNMsVCC9Bzf5t8mJtyd8v2AUuJS0LdX0QVBgkOnlNv9xviHzA=="], + "chromatic": ["chromatic@13.3.5", "", { "peerDependencies": { "@chromatic-com/cypress": "^0.*.* || ^1.0.0", "@chromatic-com/playwright": "^0.*.* || ^1.0.0" }, "optionalPeers": ["@chromatic-com/cypress", "@chromatic-com/playwright"], "bin": { "chroma": "dist/bin.js", "chromatic": "dist/bin.js", "chromatic-cli": "dist/bin.js" } }, "sha512-MzPhxpl838qJUo0A55osCF2ifwPbjcIPeElr1d4SHcjnHoIcg7l1syJDrAYK/a+PcCBrOGi06jPNpQAln5hWgw=="], - "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], - "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], + "cipher-base": ["cipher-base@1.0.6", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw=="], + + "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - "cli-truncate": ["cli-truncate@4.0.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" } }, "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA=="], - - "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], + "cli-truncate": ["cli-truncate@5.2.0", "", { "dependencies": { "slice-ansi": "^8.0.0", "string-width": "^8.2.0" } }, "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], @@ -869,41 +1193,47 @@ "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], - "commander": ["commander@13.1.0", "", {}, "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw=="], - - "comment-json": ["comment-json@4.2.5", "", { "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", "esprima": "^4.0.1", "has-own-prop": "^2.0.0", "repeat-string": "^1.6.1" } }, "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw=="], + "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "consola": ["consola@3.4.0", "", {}, "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], "cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="], "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - "create-jest": ["create-jest@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-config": "^29.7.0", "jest-util": "^29.7.0", "prompts": "^2.0.1" }, "bin": { "create-jest": "bin/create-jest.js" } }, "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q=="], + "create-ecdh": ["create-ecdh@4.0.4", "", { "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A=="], + + "create-hash": ["create-hash@1.2.0", "", { "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="], + + "create-hmac": ["create-hmac@1.1.7", "", { "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="], + + "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - "css.escape": ["css.escape@1.5.1", "", {}, "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="], + "crypto-browserify": ["crypto-browserify@3.12.0", "", { "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", "create-hash": "^1.1.0", "create-hmac": "^1.1.0", "diffie-hellman": "^5.0.0", "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" } }, "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg=="], + + "crypto-js": ["crypto-js@4.2.0", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="], + + "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], - "cssstyle": ["cssstyle@4.2.1", "", { "dependencies": { "@asamuzakjp/css-color": "^2.8.2", "rrweb-cssom": "^0.8.0" } }, "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw=="], + "css.escape": ["css.escape@1.5.1", "", {}, "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="], "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], "cwd": ["cwd@0.10.0", "", { "dependencies": { "find-pkg": "^0.1.2", "fs-exists-sync": "^0.1.0" } }, "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA=="], - "data-urls": ["data-urls@5.0.0", "", { "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" } }, "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg=="], + "data-urls": ["data-urls@7.0.0", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0" } }, "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA=="], - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], - "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], + "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], "dedent": ["dedent@1.5.3", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ=="], @@ -915,61 +1245,75 @@ "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], + + "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + "default-require-extensions": ["default-require-extensions@3.0.1", "", { "dependencies": { "strip-bom": "^4.0.0" } }, "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw=="], "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], - "detect-indent": ["detect-indent@6.1.0", "", {}, "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA=="], + "des.js": ["des.js@1.1.0", "", { "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg=="], - "detect-newline": ["detect-newline@3.1.0", "", {}, "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="], + "detect-europe-js": ["detect-europe-js@0.1.2", "", {}, "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow=="], - "devalue": ["devalue@5.1.1", "", {}, "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "dexie": ["dexie@4.0.11", "", {}, "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A=="], + "detect-newline": ["detect-newline@3.1.0", "", {}, "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="], + + "devalue": ["devalue@5.7.1", "", {}, "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA=="], - "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], + "dexie": ["dexie@4.4.2", "", {}, "sha512-zMtV8q79EFE5U8FKZvt0Y/77PCU/Hr/RDxv1EDeo228L+m/HTbeN2AjoQm674rhQCX8n3ljK87lajt7UQuZfvw=="], "diffable-html": ["diffable-html@4.1.0", "", { "dependencies": { "htmlparser2": "^3.9.2" } }, "sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g=="], + "diffie-hellman": ["diffie-hellman@5.0.3", "", { "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg=="], + "dijkstrajs": ["dijkstrajs@1.0.3", "", {}, "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="], "doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], "dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], - "dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + "dom-serializer": ["dom-serializer@0.2.2", "", { "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" } }, "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="], "dom-walk": ["dom-walk@0.1.2", "", {}, "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="], - "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + "domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], - "domhandler": ["domhandler@3.3.0", "", { "dependencies": { "domelementtype": "^2.0.1" } }, "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA=="], + "domhandler": ["domhandler@2.4.2", "", { "dependencies": { "domelementtype": "1" } }, "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA=="], - "dompurify": ["dompurify@3.2.4", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg=="], + "dompurify": ["dompurify@3.4.0", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg=="], - "domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + "domutils": ["domutils@1.7.0", "", { "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="], - "dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], + "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + + "eip55": ["eip55@2.1.1", "", { "dependencies": { "keccak": "^3.0.3" } }, "sha512-WcagVAmNu2Ww2cDUfzuWVntYwFxbvZ5MvIyLZpMjTTkjD6sCvkGOiS86jTppzu9/gWsc8isLHAeMBWK02OnZmA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.120", "", {}, "sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ=="], + "elliptic": ["elliptic@6.6.1", "", { "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" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], + "emittery": ["emittery@0.13.1", "", {}, "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ=="], - "emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], @@ -979,20 +1323,18 @@ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + "es-toolkit": ["es-toolkit@1.33.0", "", {}, "sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg=="], "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], - "es6-promise": ["es6-promise@3.3.1", "", {}, "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="], - "esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], @@ -1023,43 +1365,49 @@ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "ethers": ["ethers@6.13.5", "", { "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", "@noble/hashes": "1.3.2", "@types/node": "22.7.5", "aes-js": "4.0.0-beta.5", "tslib": "2.7.0", "ws": "8.17.1" } }, "sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ=="], + "ethers": ["ethers@6.16.0", "", { "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", "@noble/hashes": "1.3.2", "@types/node": "22.7.5", "aes-js": "4.0.0-beta.5", "tslib": "2.7.0", "ws": "8.17.1" } }, "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A=="], "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], + "eventsource": ["eventsource@2.0.2", "", {}, "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="], + + "evp_bytestokey": ["evp_bytestokey@1.0.3", "", { "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA=="], + + "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "exit": ["exit@0.1.2", "", {}, "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ=="], + "exit-x": ["exit-x@0.2.2", "", {}, "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ=="], + "expand-tilde": ["expand-tilde@1.2.2", "", { "dependencies": { "os-homedir": "^1.0.1" } }, "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q=="], - "expect": ["expect@29.7.0", "", { "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw=="], + "expect": ["expect@30.3.0", "", { "dependencies": { "@jest/expect-utils": "30.3.0", "@jest/get-type": "30.1.0", "jest-matcher-utils": "30.3.0", "jest-message-util": "30.3.0", "jest-mock": "30.3.0", "jest-util": "30.3.0" } }, "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q=="], "expect-playwright": ["expect-playwright@0.8.0", "", {}, "sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg=="], - "expect-type": ["expect-type@1.2.1", "", {}, "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw=="], + "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fastq": ["fastq@1.19.0", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA=="], + "fastestsmallesttextencoderdecoder": ["fastestsmallesttextencoderdecoder@1.0.22", "", {}, "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw=="], "fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + "feaxios": ["feaxios@0.0.23", "", { "dependencies": { "is-retry-allowed": "^3.0.0" } }, "sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g=="], + "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], - "filesize": ["filesize@10.1.6", "", {}, "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w=="], + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], - "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "filesize": ["filesize@10.1.6", "", {}, "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w=="], "find-cache-dir": ["find-cache-dir@3.3.2", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], @@ -1081,7 +1429,7 @@ "foreground-child": ["foreground-child@2.0.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" } }, "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA=="], - "form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="], + "form-data": ["form-data@4.0.5", "", { "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" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], @@ -1089,8 +1437,6 @@ "fs-exists-sync": ["fs-exists-sync@0.1.0", "", {}, "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg=="], - "fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], - "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], "fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], @@ -1113,9 +1459,9 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "git-format-staged": ["git-format-staged@3.1.1", "", { "bin": { "git-format-staged": "git-format-staged" } }, "sha512-P749fkktaiAchFZKR7bgdvruzhvbcIDr1uRBrS9/Wdimb7wH1Twchz9gOixj8tUaHVMuXY/ckDojfOwV6AxgPA=="], + "git-format-staged": ["git-format-staged@4.0.1", "", { "bin": { "git-format-staged": "git-format-staged" } }, "sha512-8C9Bw4VtZxa+VNMGh8Og8qG+rH527q+8un1SKpVgo3ZZXTCGI/U9a6oyJAFlfkeYFrOh7rTWWfH1NbL+63Sttw=="], "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], @@ -1137,58 +1483,52 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "graphql": ["graphql@16.10.0", "", {}, "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-own-prop": ["has-own-prop@2.0.0", "", {}, "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + "hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + + "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], + "hasha": ["hasha@5.2.2", "", { "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" } }, "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ=="], "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - "headers-polyfill": ["headers-polyfill@4.0.3", "", {}, "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ=="], - "hex-to-css-filter": ["hex-to-css-filter@6.0.0", "", { "dependencies": { "tslib": "^2.3.0" } }, "sha512-nQMSn+lEF2C1ddyMVBIyIPWRnaH0ZwFi2dcTtAop6cUyY0AbkA6uI/evpkvEHMD9G9DlHf8xraMJIIJ74S+MKA=="], + "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], + "homedir-polyfill": ["homedir-polyfill@1.0.3", "", { "dependencies": { "parse-passwd": "^1.0.0" } }, "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA=="], - "html-encoding-sniffer": ["html-encoding-sniffer@4.0.0", "", { "dependencies": { "whatwg-encoding": "^3.1.1" } }, "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ=="], + "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], "htmlparser2": ["htmlparser2@3.10.1", "", { "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" } }, "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ=="], - "htmlparser2-svelte": ["htmlparser2-svelte@4.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^3.0.0", "domutils": "^2.0.0", "entities": "^2.0.0" } }, "sha512-+4f4RBFz7Rj2Hp0ZbFbXC+Kzbd6S9PgjiuFtdT76VMNgKogrEZy0pG2UrPycPbrZzVEIM5lAT3lAdkSTCHLPjg=="], - - "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - - "human-id": ["human-id@4.1.1", "", { "bin": { "human-id": "dist/cli.js" } }, "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg=="], - - "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], + "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], - "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "ignore": ["ignore@4.0.6", "", {}, "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="], + "immer": ["immer@11.1.4", "", {}, "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "import-in-the-middle": ["import-in-the-middle@1.13.2", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-Yjp9X7s2eHSXvZYQ0aye6UvwYPrVB5C2k47fuXjFKnYinAByaDZjh4t9MT2wEga9775n6WaIqyHnQhBxYtX2mg=="], + "import-in-the-middle": ["import-in-the-middle@3.0.1", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA=="], "import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], - "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], @@ -1199,17 +1539,15 @@ "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], + "int64-buffer": ["int64-buffer@1.1.0", "", {}, "sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw=="], - "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - - "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], @@ -1219,21 +1557,19 @@ "is-generator-fn": ["is-generator-fn@2.1.0", "", {}, "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="], - "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-node-process": ["is-node-process@1.2.0", "", {}, "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw=="], - - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + "is-retry-allowed": ["is-retry-allowed@3.0.0", "", {}, "sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A=="], + + "is-standalone-pwa": ["is-standalone-pwa@0.1.1", "", {}, "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g=="], - "is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], @@ -1241,7 +1577,9 @@ "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], - "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], @@ -1255,85 +1593,81 @@ "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], - "istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="], + "istanbul-lib-source-maps": ["istanbul-lib-source-maps@4.0.1", "", { "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw=="], - "istanbul-reports": ["istanbul-reports@3.1.7", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g=="], + "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], - "jest": ["jest@29.7.0", "", { "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", "import-local": "^3.0.2", "jest-cli": "^29.7.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "bin/jest.js" } }, "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw=="], - - "jest-changed-files": ["jest-changed-files@29.7.0", "", { "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", "p-limit": "^3.1.0" } }, "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w=="], + "jest": ["jest@30.3.0", "", { "dependencies": { "@jest/core": "30.3.0", "@jest/types": "30.3.0", "import-local": "^3.2.0", "jest-cli": "30.3.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": "./bin/jest.js" }, "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg=="], - "jest-circus": ["jest-circus@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", "jest-each": "^29.7.0", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-runtime": "^29.7.0", "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", "p-limit": "^3.1.0", "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw=="], + "jest-changed-files": ["jest-changed-files@30.3.0", "", { "dependencies": { "execa": "^5.1.1", "jest-util": "30.3.0", "p-limit": "^3.1.0" } }, "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA=="], - "jest-cli": ["jest-cli@29.7.0", "", { "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "chalk": "^4.0.0", "create-jest": "^29.7.0", "exit": "^0.1.2", "import-local": "^3.0.2", "jest-config": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "bin/jest.js" } }, "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg=="], + "jest-circus": ["jest-circus@30.3.0", "", { "dependencies": { "@jest/environment": "30.3.0", "@jest/expect": "30.3.0", "@jest/test-result": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.3.0", "jest-matcher-utils": "30.3.0", "jest-message-util": "30.3.0", "jest-runtime": "30.3.0", "jest-snapshot": "30.3.0", "jest-util": "30.3.0", "p-limit": "^3.1.0", "pretty-format": "30.3.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA=="], - "jest-config": ["jest-config@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", "@jest/types": "^29.6.3", "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-circus": "^29.7.0", "jest-environment-node": "^29.7.0", "jest-get-type": "^29.6.3", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-runner": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "ts-node"] }, "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ=="], + "jest-cli": ["jest-cli@30.3.0", "", { "dependencies": { "@jest/core": "30.3.0", "@jest/test-result": "30.3.0", "@jest/types": "30.3.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", "jest-config": "30.3.0", "jest-util": "30.3.0", "jest-validate": "30.3.0", "yargs": "^17.7.2" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "./bin/jest.js" } }, "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw=="], - "jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], + "jest-config": ["jest-config@30.3.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", "@jest/test-sequencer": "30.3.0", "@jest/types": "30.3.0", "babel-jest": "30.3.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.5.0", "graceful-fs": "^4.2.11", "jest-circus": "30.3.0", "jest-docblock": "30.2.0", "jest-environment-node": "30.3.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.3.0", "jest-runner": "30.3.0", "jest-util": "30.3.0", "jest-validate": "30.3.0", "parse-json": "^5.2.0", "pretty-format": "30.3.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "esbuild-register", "ts-node"] }, "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w=="], - "jest-docblock": ["jest-docblock@29.7.0", "", { "dependencies": { "detect-newline": "^3.0.0" } }, "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g=="], + "jest-diff": ["jest-diff@30.3.0", "", { "dependencies": { "@jest/diff-sequences": "30.3.0", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.3.0" } }, "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ=="], - "jest-each": ["jest-each@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "jest-util": "^29.7.0", "pretty-format": "^29.7.0" } }, "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ=="], + "jest-docblock": ["jest-docblock@30.2.0", "", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA=="], - "jest-environment-node": ["jest-environment-node@29.7.0", "", { "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" } }, "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw=="], + "jest-each": ["jest-each@30.3.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.3.0", "chalk": "^4.1.2", "jest-util": "30.3.0", "pretty-format": "30.3.0" } }, "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA=="], - "jest-get-type": ["jest-get-type@29.6.3", "", {}, "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw=="], + "jest-environment-node": ["jest-environment-node@30.3.0", "", { "dependencies": { "@jest/environment": "30.3.0", "@jest/fake-timers": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "jest-mock": "30.3.0", "jest-util": "30.3.0", "jest-validate": "30.3.0" } }, "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ=="], - "jest-haste-map": ["jest-haste-map@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", "jest-util": "^29.7.0", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA=="], + "jest-haste-map": ["jest-haste-map@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.3.0", "jest-worker": "30.3.0", "picomatch": "^4.0.3", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA=="], "jest-junit": ["jest-junit@16.0.0", "", { "dependencies": { "mkdirp": "^1.0.4", "strip-ansi": "^6.0.1", "uuid": "^8.3.2", "xml": "^1.0.1" } }, "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ=="], - "jest-leak-detector": ["jest-leak-detector@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw=="], + "jest-leak-detector": ["jest-leak-detector@30.3.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "pretty-format": "30.3.0" } }, "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ=="], - "jest-matcher-utils": ["jest-matcher-utils@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g=="], + "jest-matcher-utils": ["jest-matcher-utils@30.3.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "jest-diff": "30.3.0", "pretty-format": "30.3.0" } }, "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA=="], - "jest-message-util": ["jest-message-util@29.7.0", "", { "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w=="], + "jest-message-util": ["jest-message-util@30.3.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.3.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "picomatch": "^4.0.3", "pretty-format": "30.3.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw=="], - "jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], - - "jest-playwright-preset": ["jest-playwright-preset@4.0.0", "", { "dependencies": { "expect-playwright": "^0.8.0", "jest-process-manager": "^0.4.0", "nyc": "^15.1.0", "playwright-core": ">=1.2.0", "rimraf": "^3.0.2", "uuid": "^8.3.2" }, "peerDependencies": { "jest": "^29.3.1", "jest-circus": "^29.3.1", "jest-environment-node": "^29.3.1", "jest-runner": "^29.3.1" } }, "sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw=="], + "jest-mock": ["jest-mock@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", "jest-util": "30.3.0" } }, "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog=="], "jest-pnp-resolver": ["jest-pnp-resolver@1.2.3", "", { "peerDependencies": { "jest-resolve": "*" }, "optionalPeers": ["jest-resolve"] }, "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w=="], "jest-process-manager": ["jest-process-manager@0.4.0", "", { "dependencies": { "@types/wait-on": "^5.2.0", "chalk": "^4.1.0", "cwd": "^0.10.0", "exit": "^0.1.2", "find-process": "^1.4.4", "prompts": "^2.4.1", "signal-exit": "^3.0.3", "spawnd": "^5.0.0", "tree-kill": "^1.2.2", "wait-on": "^7.0.0" } }, "sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw=="], - "jest-regex-util": ["jest-regex-util@29.6.3", "", {}, "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg=="], + "jest-regex-util": ["jest-regex-util@30.0.1", "", {}, "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA=="], - "jest-resolve": ["jest-resolve@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA=="], + "jest-resolve": ["jest-resolve@30.3.0", "", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.3.0", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.3.0", "jest-validate": "30.3.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g=="], - "jest-resolve-dependencies": ["jest-resolve-dependencies@29.7.0", "", { "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" } }, "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA=="], + "jest-resolve-dependencies": ["jest-resolve-dependencies@30.3.0", "", { "dependencies": { "jest-regex-util": "30.0.1", "jest-snapshot": "30.3.0" } }, "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw=="], - "jest-runner": ["jest-runner@29.7.0", "", { "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" } }, "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ=="], + "jest-runner": ["jest-runner@30.3.0", "", { "dependencies": { "@jest/console": "30.3.0", "@jest/environment": "30.3.0", "@jest/test-result": "30.3.0", "@jest/transform": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.2.0", "jest-environment-node": "30.3.0", "jest-haste-map": "30.3.0", "jest-leak-detector": "30.3.0", "jest-message-util": "30.3.0", "jest-resolve": "30.3.0", "jest-runtime": "30.3.0", "jest-util": "30.3.0", "jest-watcher": "30.3.0", "jest-worker": "30.3.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw=="], - "jest-runtime": ["jest-runtime@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", "@jest/globals": "^29.7.0", "@jest/source-map": "^29.6.3", "@jest/test-result": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ=="], + "jest-runtime": ["jest-runtime@30.3.0", "", { "dependencies": { "@jest/environment": "30.3.0", "@jest/fake-timers": "30.3.0", "@jest/globals": "30.3.0", "@jest/source-map": "30.0.1", "@jest/test-result": "30.3.0", "@jest/transform": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.5.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.3.0", "jest-message-util": "30.3.0", "jest-mock": "30.3.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.3.0", "jest-snapshot": "30.3.0", "jest-util": "30.3.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng=="], "jest-serializer-html": ["jest-serializer-html@7.1.0", "", { "dependencies": { "diffable-html": "^4.1.0" } }, "sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA=="], - "jest-snapshot": ["jest-snapshot@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", "@jest/expect-utils": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^29.7.0", "graceful-fs": "^4.2.9", "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", "natural-compare": "^1.4.0", "pretty-format": "^29.7.0", "semver": "^7.5.3" } }, "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw=="], + "jest-snapshot": ["jest-snapshot@30.3.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.3.0", "@jest/get-type": "30.1.0", "@jest/snapshot-utils": "30.3.0", "@jest/transform": "30.3.0", "@jest/types": "30.3.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", "expect": "30.3.0", "graceful-fs": "^4.2.11", "jest-diff": "30.3.0", "jest-matcher-utils": "30.3.0", "jest-message-util": "30.3.0", "jest-util": "30.3.0", "pretty-format": "30.3.0", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ=="], - "jest-util": ["jest-util@29.7.0", "", { "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" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], + "jest-util": ["jest-util@30.3.0", "", { "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.3" } }, "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg=="], - "jest-validate": ["jest-validate@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "leven": "^3.1.0", "pretty-format": "^29.7.0" } }, "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw=="], + "jest-validate": ["jest-validate@30.3.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.3.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.3.0" } }, "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q=="], - "jest-watch-typeahead": ["jest-watch-typeahead@2.2.2", "", { "dependencies": { "ansi-escapes": "^6.0.0", "chalk": "^5.2.0", "jest-regex-util": "^29.0.0", "jest-watcher": "^29.0.0", "slash": "^5.0.0", "string-length": "^5.0.1", "strip-ansi": "^7.0.1" }, "peerDependencies": { "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" } }, "sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ=="], + "jest-watch-typeahead": ["jest-watch-typeahead@3.0.1", "", { "dependencies": { "ansi-escapes": "^7.0.0", "chalk": "^5.2.0", "jest-regex-util": "^30.0.0", "jest-watcher": "^30.0.0", "slash": "^5.0.0", "string-length": "^6.0.0", "strip-ansi": "^7.0.1" }, "peerDependencies": { "jest": "^30.0.0" } }, "sha512-SFmHcvdueTswZlVhPCWfLXMazvwZlA2UZTrcE7MC3NwEVeWvEcOx6HUe+igMbnmA6qowuBSW4in8iC6J2EYsgQ=="], - "jest-watcher": ["jest-watcher@29.7.0", "", { "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", "jest-util": "^29.7.0", "string-length": "^4.0.1" } }, "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g=="], + "jest-watcher": ["jest-watcher@30.3.0", "", { "dependencies": { "@jest/test-result": "30.3.0", "@jest/types": "30.3.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", "jest-util": "30.3.0", "string-length": "^4.0.2" } }, "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w=="], - "jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], + "jest-worker": ["jest-worker@30.3.0", "", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.3.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ=="], "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], - "js-sha256": ["js-sha256@0.11.1", "", {}, "sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg=="], + "js-sha3": ["js-sha3@0.8.0", "", {}, "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="], - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "js-tokens": ["js-tokens@10.0.0", "", {}, "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q=="], "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - "jsdoc-type-pratt-parser": ["jsdoc-type-pratt-parser@4.1.0", "", {}, "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg=="], + "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], - "jsdom": ["jsdom@26.0.0", "", { "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.1", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.16", "parse5": "^7.2.1", "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.1.0", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw=="], + "jsdom": ["jsdom@29.0.2", "", { "dependencies": { "@asamuzakjp/css-color": "^5.1.5", "@asamuzakjp/dom-selector": "^7.0.6", "@bramus/specificity": "^2.4.2", "@csstools/css-syntax-patches-for-csstree": "^1.1.1", "@exodus/bytes": "^1.15.0", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.2.7", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.1", "undici": "^7.24.5", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.1", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w=="], "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], @@ -1353,31 +1687,61 @@ "jsqr": ["jsqr@1.4.0", "", {}, "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A=="], + "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], + + "jws": ["jws@4.0.0", "", { "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="], + + "keccak": ["keccak@3.0.4", "", { "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" } }, "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q=="], + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], - "kysely": ["kysely@0.27.6", "", {}, "sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ=="], - "leaflet": ["leaflet@1.9.4", "", {}, "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="], "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + "libersoft-crypto": ["libersoft-crypto@github:libersoft-org/crypto-utils#7fbc148", { "dependencies": { "@ledgerhq/hw-app-eth": "^7.6.2", "@ledgerhq/hw-transport-webhid": "^6.34.0", "@ledgerhq/hw-transport-webusb": "^6.33.0", "@trezor/connect": "^9.7.2", "@trezor/connect-web": "^9.7.2", "ethers": "^6.16.0", "prettier": "^3.8.2", "prettier-plugin-svelte": "^3.5.1" }, "peerDependencies": { "svelte": "5.55.3" } }, "libersoft-org-crypto-utils-7fbc148", "sha512-h1fRpOZ0/x/81Eg9neQluU+39t6cm2hji41F3OjSrireBhKPfW3nUWZTxBaMKVMtcNlz7MJc1DrqJ5cndYouQA=="], + + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "lint-staged": ["lint-staged@15.5.2", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^13.1.0", "debug": "^4.4.0", "execa": "^8.0.1", "lilconfig": "^3.1.3", "listr2": "^8.2.5", "micromatch": "^4.0.8", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.7.0" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w=="], + "lint-staged": ["lint-staged@16.4.0", "", { "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", "picomatch": "^4.0.3", "string-argv": "^0.3.2", "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw=="], - "listr2": ["listr2@8.3.3", "", { "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ=="], + "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], + + "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], "lodash.flattendeep": ["lodash.flattendeep@4.4.0", "", {}, "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ=="], @@ -1387,13 +1751,13 @@ "loglevel": ["loglevel@1.9.2", "", {}, "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg=="], - "lottie-web": ["lottie-web@5.12.2", "", {}, "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg=="], + "long": ["long@5.2.5", "", {}, "sha512-e0r9YBBgNCq1D1o5Dp8FMH0N5hsFtXDBiVa0qoJPHpakvZkmDKPRoGffZJII/XsHvj9An9blm+cRJ01yQqU+Dw=="], - "loupe": ["loupe@3.1.3", "", {}, "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug=="], + "lottie-web": ["lottie-web@5.13.0", "", {}, "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ=="], - "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], + "loupe": ["loupe@3.1.3", "", {}, "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug=="], - "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "lru-cache": ["lru-cache@11.3.3", "", {}, "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ=="], "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], @@ -1401,7 +1765,7 @@ "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], - "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], + "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], "make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], @@ -1411,21 +1775,23 @@ "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - "mediainfo.js": ["mediainfo.js@0.3.4", "", { "dependencies": { "yargs": "^17.7.2" }, "bin": { "mediainfo.js": "dist/esm/cli.js" } }, "sha512-uTUlVqw9PcsuVt4DcXvqfQGKQBx3BCyQcDnJ68kSQyOxz0InIsCuykPShrYp+c5uDr6Mvhy5AfaboHn77xR7Ug=="], + "md5.js": ["md5.js@1.3.5", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="], + + "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], + + "mediainfo.js": ["mediainfo.js@0.3.7", "", { "dependencies": { "yargs": "^18.0.0" }, "bin": { "mediainfo.js": "dist/esm/cli.js" } }, "sha512-mgsmb2GrCTAguVcTohW7KrF+QXNaihrbljj75pLWDQcTTQyqfGoZG4Dy++AZ+FDVCT14LHvVGC9SXxcF5VePag=="], "memoizerific": ["memoizerific@1.11.3", "", { "dependencies": { "map-or-similar": "^1.5.0" } }, "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog=="], "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "miller-rabin": ["miller-rabin@4.0.1", "", { "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, "bin": { "miller-rabin": "bin/miller-rabin" } }, "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA=="], "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], @@ -1433,7 +1799,11 @@ "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], - "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], + + "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -1451,46 +1821,48 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "msw": ["msw@2.7.3", "", { "dependencies": { "@bundled-es-modules/cookie": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.37.0", "@open-draft/deferred-promise": "^2.2.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "strict-event-emitter": "^0.5.1", "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw=="], + "mux.js": ["mux.js@7.1.0", "", { "dependencies": { "@babel/runtime": "^7.11.2", "global": "^4.4.0" }, "bin": { "muxjs-transmux": "bin/transmux.js" } }, "sha512-NTxawK/BBELJrYsZThEulyUMDVlLizKdxyAsMuzoCD1eFj97BVaA8D/CvKsKu6FOLYkFojN5CbM9h++ZTZtknA=="], - "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], + "nan": ["nan@2.23.0", "", {}, "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ=="], - "mux.js": ["mux.js@7.1.0", "", { "dependencies": { "@babel/runtime": "^7.11.2", "global": "^4.4.0" }, "bin": { "muxjs-transmux": "bin/transmux.js" } }, "sha512-NTxawK/BBELJrYsZThEulyUMDVlLizKdxyAsMuzoCD1eFj97BVaA8D/CvKsKu6FOLYkFojN5CbM9h++ZTZtknA=="], + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="], + "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], + "node-addon-api": ["node-addon-api@2.0.2", "", {}, "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="], "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], "node-preload": ["node-preload@0.2.1", "", { "dependencies": { "process-on-spawn": "^1.0.0" } }, "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ=="], "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + "nofilter": ["nofilter@3.1.0", "", {}, "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g=="], - "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - "nwsapi": ["nwsapi@2.2.16", "", {}, "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ=="], + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], "nyc": ["nyc@15.1.0", "", { "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "caching-transform": "^4.0.0", "convert-source-map": "^1.7.0", "decamelize": "^1.2.0", "find-cache-dir": "^3.2.0", "find-up": "^4.1.0", "foreground-child": "^2.0.0", "get-package-type": "^0.1.0", "glob": "^7.1.6", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-hook": "^3.0.0", "istanbul-lib-instrument": "^4.0.0", "istanbul-lib-processinfo": "^2.0.2", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", "make-dir": "^3.0.0", "node-preload": "^0.2.1", "p-map": "^3.0.0", "process-on-spawn": "^1.0.0", "resolve-from": "^5.0.0", "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "spawn-wrap": "^2.0.0", "test-exclude": "^6.0.0", "yargs": "^15.0.2" }, "bin": { "nyc": "bin/nyc.js" } }, "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A=="], + "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - "onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], "os-homedir": ["os-homedir@1.0.2", "", {}, "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ=="], - "outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="], - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], @@ -1507,30 +1879,28 @@ "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + "parse-asn1": ["parse-asn1@5.1.9", "", { "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", "pbkdf2": "^3.1.5", "safe-buffer": "^5.2.1" } }, "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg=="], + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], "parse-passwd": ["parse-passwd@1.0.0", "", {}, "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q=="], - "parse5": ["parse5@7.2.1", "", { "dependencies": { "entities": "^4.5.0" } }, "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ=="], - - "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], + "parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="], "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + "path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], - "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "pathval": ["pathval@2.0.0", "", {}, "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA=="], + "pbkdf2": ["pbkdf2@3.1.5", "", { "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", "sha.js": "^2.4.12", "to-buffer": "^1.2.1" } }, "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ=="], + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], "pg-protocol": ["pg-protocol@1.10.0", "", {}, "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q=="], @@ -1539,27 +1909,25 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "pidtree": ["pidtree@0.6.0", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="], + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], - "pirates": ["pirates@4.0.6", "", {}, "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], "pkcs7": ["pkcs7@1.0.4", "", { "dependencies": { "@babel/runtime": "^7.5.5" }, "bin": { "pkcs7": "bin/cli.js" } }, "sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ=="], "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], - "playwright": ["playwright@1.52.0", "", { "dependencies": { "playwright-core": "1.52.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw=="], + "playwright": ["playwright@1.59.1", "", { "dependencies": { "playwright-core": "1.59.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw=="], - "playwright-core": ["playwright-core@1.52.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg=="], + "playwright-core": ["playwright-core@1.59.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg=="], - "pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="], + "pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="], "polished": ["polished@4.3.1", "", { "dependencies": { "@babel/runtime": "^7.17.8" } }, "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.2", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA=="], + "postcss": ["postcss@8.5.9", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw=="], "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], @@ -1571,9 +1939,9 @@ "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], + "prettier": ["prettier@3.8.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q=="], - "prettier-plugin-svelte": ["prettier-plugin-svelte@3.4.0", "", { "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ=="], + "prettier-plugin-svelte": ["prettier-plugin-svelte@3.5.1", "", { "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg=="], "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], @@ -1581,30 +1949,34 @@ "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + "process-on-spawn": ["process-on-spawn@1.1.0", "", { "dependencies": { "fromentries": "^1.2.0" } }, "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q=="], "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "protobufjs": ["protobufjs@7.4.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw=="], + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], + "public-encrypt": ["public-encrypt@4.0.3", "", { "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + "pure-rand": ["pure-rand@7.0.1", "", {}, "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ=="], + + "pushdata-bitcoin": ["pushdata-bitcoin@1.0.1", "", { "dependencies": { "bitcoin-ops": "^1.3.0" } }, "sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ=="], "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], - "querystringify": ["querystringify@2.2.0", "", {}, "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="], + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "randomfill": ["randomfill@1.0.4", "", { "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw=="], "react": ["react@19.0.0", "", {}, "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ=="], - "react-confetti": ["react-confetti@6.4.0", "", { "dependencies": { "tween-functions": "^1.2.0" }, "peerDependencies": { "react": "^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0" } }, "sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg=="], - "react-dom": ["react-dom@19.0.0", "", { "dependencies": { "scheduler": "^0.25.0" }, "peerDependencies": { "react": "^19.0.0" } }, "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ=="], "react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], @@ -1619,23 +1991,25 @@ "redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], + "redux": ["redux@5.0.1", "", {}, "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="], + + "redux-thunk": ["redux-thunk@3.1.0", "", { "peerDependencies": { "redux": "^5.0.0" } }, "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw=="], + "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], "regexpp": ["regexpp@3.2.0", "", {}, "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="], "release-zalgo": ["release-zalgo@1.0.0", "", { "dependencies": { "es6-error": "^4.0.1" } }, "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA=="], - "repeat-string": ["repeat-string@1.6.1", "", {}, "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - "require-in-the-middle": ["require-in-the-middle@7.5.2", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ=="], + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], + "require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="], - "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], + "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], - "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], "resolve-cwd": ["resolve-cwd@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="], @@ -1643,67 +2017,71 @@ "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - "resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], - "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="], - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "rollup": ["rollup@4.34.6", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.34.6", "@rollup/rollup-android-arm64": "4.34.6", "@rollup/rollup-darwin-arm64": "4.34.6", "@rollup/rollup-darwin-x64": "4.34.6", "@rollup/rollup-freebsd-arm64": "4.34.6", "@rollup/rollup-freebsd-x64": "4.34.6", "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", "@rollup/rollup-linux-arm-musleabihf": "4.34.6", "@rollup/rollup-linux-arm64-gnu": "4.34.6", "@rollup/rollup-linux-arm64-musl": "4.34.6", "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", "@rollup/rollup-linux-riscv64-gnu": "4.34.6", "@rollup/rollup-linux-s390x-gnu": "4.34.6", "@rollup/rollup-linux-x64-gnu": "4.34.6", "@rollup/rollup-linux-x64-musl": "4.34.6", "@rollup/rollup-win32-arm64-msvc": "4.34.6", "@rollup/rollup-win32-ia32-msvc": "4.34.6", "@rollup/rollup-win32-x64-msvc": "4.34.6", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ=="], + "ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], - "rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], + "ripple-address-codec": ["ripple-address-codec@5.0.0", "", { "dependencies": { "@scure/base": "^1.1.3", "@xrplf/isomorphic": "^1.0.0" } }, "sha512-de7osLRH/pt5HX2xw2TRJtbdLLWHu0RXirpQaEeCnWKY5DYHykh3ETSkofvm0aX0LJiV7kwkegJxQkmbO94gWw=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + "ripple-binary-codec": ["ripple-binary-codec@2.7.0", "", { "dependencies": { "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", "ripple-address-codec": "^5.0.0" } }, "sha512-gEBqan5muVp+q7jgZ6aUniSyN+e4FKRzn9uFAeFSIW7IgvkezP1cUolNtpahQ+jvaSK/33hxZA7wNmn1mc330g=="], - "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + "ripple-keypairs": ["ripple-keypairs@2.0.0", "", { "dependencies": { "@noble/curves": "^1.0.0", "@xrplf/isomorphic": "^1.0.0", "ripple-address-codec": "^5.0.0" } }, "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag=="], - "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + "rolldown": ["rolldown@1.0.0-rc.15", "", { "dependencies": { "@oxc-project/types": "=0.124.0", "@rolldown/pluginutils": "1.0.0-rc.15" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.15", "@rolldown/binding-darwin-arm64": "1.0.0-rc.15", "@rolldown/binding-darwin-x64": "1.0.0-rc.15", "@rolldown/binding-freebsd-x64": "1.0.0-rc.15", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.15", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.15", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.15", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], - "sander": ["sander@0.5.1", "", { "dependencies": { "es6-promise": "^3.1.2", "graceful-fs": "^4.1.3", "mkdirp": "^0.5.1", "rimraf": "^2.5.2" } }, "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA=="], + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], "scheduler": ["scheduler@0.25.0", "", {}, "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA=="], + "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], + "sdp": ["sdp@3.2.0", "", {}, "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw=="], - "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], - "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], + "set-cookie-parser": ["set-cookie-parser@3.1.0", "", {}, "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw=="], "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shimmer": ["shimmer@1.2.1", "", {}, "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="], - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "sirv": ["sirv@3.0.0", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg=="], + "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], - "slice-ansi": ["slice-ansi@5.0.0", "", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="], + "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], + + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + + "socks": ["socks@2.8.6", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA=="], + + "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], "sorcery": ["sorcery@1.0.0", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.14", "minimist": "^1.2.0", "tiny-glob": "^0.2.9" }, "bin": { "sorcery": "bin/sorcery" } }, "sha512-5ay9oJE+7sNmhzl3YNG18jEEEf4AOQCM/FAqR5wMmzqd1FtRorFbJXn3w3SKOhbiQaVgHM+Q1lszZspjri7bpA=="], @@ -1719,37 +2097,33 @@ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "sqlite-wasm-kysely": ["sqlite-wasm-kysely@0.3.0", "", { "dependencies": { "@sqlite.org/sqlite-wasm": "^3.48.0-build2" }, "peerDependencies": { "kysely": "*" } }, "sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg=="], - "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - - "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], + "std-env": ["std-env@4.0.0", "", {}, "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ=="], - "storybook": ["storybook@8.6.7", "", { "dependencies": { "@storybook/core": "8.6.7" }, "peerDependencies": { "prettier": "^2 || ^3" }, "optionalPeers": ["prettier"], "bin": { "sb": "./bin/index.cjs", "storybook": "./bin/index.cjs", "getstorybook": "./bin/index.cjs" } }, "sha512-9gktoFMQDSCINNGQH869d/sar9rVtAhr0HchcvDA6bssAqgQJvTphY4qC9lH54SxfTJm/7Sy+BKEngMK+dziJg=="], + "storybook": ["storybook@10.3.5", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", "@webcontainer/env": "^1.1.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", "open": "^10.2.0", "recast": "^0.23.5", "semver": "^7.7.3", "use-sync-external-store": "^1.5.0", "ws": "^8.18.0" }, "peerDependencies": { "prettier": "^2 || ^3" }, "optionalPeers": ["prettier"], "bin": "./dist/bin/dispatcher.js" }, "sha512-uBSZu/GZa9aEIW3QMGvdQPMZWhGxSe4dyRWU8B3/Vd47Gy/XLC7tsBxRr13txmmPOEDHZR94uLuq0H50fvuqBw=="], - "strict-event-emitter": ["strict-event-emitter@0.5.1", "", {}, "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ=="], + "stream-browserify": ["stream-browserify@3.0.0", "", { "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" } }, "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA=="], "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], - "string-length": ["string-length@5.0.1", "", { "dependencies": { "char-regex": "^2.0.0", "strip-ansi": "^7.0.1" } }, "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow=="], + "string-length": ["string-length@6.0.0", "", { "dependencies": { "strip-ansi": "^7.1.0" } }, "sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], - "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], "strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], @@ -1757,25 +2131,21 @@ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - - "svelte": ["svelte@5.20.0", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "acorn-typescript": "^1.4.13", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^1.4.3", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-04HJfFLaTwTyEKdPm3vYGdaD/8ZAHcd9SEBufq0FZNIrdzJWdM1usVdm4KIlzzDfM5+aMzio6BBhpXPoPGuMjg=="], + "svelte": ["svelte@5.55.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-q8DFohk6vUswSng95IZb9nzWJnbINZsK7OiM1snAa3qCjJBL0ZQpvMyAaVXjUukdM75J/m8UE8xwqat8Ors/zQ=="], "svelte-ast-print": ["svelte-ast-print@0.4.2", "", { "dependencies": { "esrap": "1.2.2", "zimmerframe": "1.1.2" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-hRHHufbJoArFmDYQKCpCvc0xUuIEfwYksvyLYEQyH+1xb5LD5sM/IthfooCdXZQtOIqXz6xm7NmaqdfwG4kh6w=="], - "svelte-check": ["svelte-check@4.1.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-P7w/6tdSfk3zEVvfsgrp3h3DFC75jCdZjTQvgGJtjPORs1n7/v2VMPIoty3PWv7jnfEm3x0G/p9wH4pecTb0Wg=="], + "svelte-check": ["svelte-check@4.4.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg=="], - "svelte-intersection-observer": ["svelte-intersection-observer@1.0.0", "", {}, "sha512-AoxSog8fSt9sSN8ajMYM1I48ndq+rmPlaZSkJFCRbZ7I3KO8IPX6pl5mewWxdYL1JDI06hHu/7epn3h5tlJV9w=="], + "svelte-intersection-observer": ["svelte-intersection-observer@1.1.1", "", {}, "sha512-T5Jkj5pkwhZcDIOQZh0tayAOnzJWRsE8Op667kAHlxLXV7TTsqLfkx1mkLLtPGMckpXQLLsrChHHnIb9HqvNzQ=="], - "svelte-preprocess": ["svelte-preprocess@5.1.4", "", { "dependencies": { "@types/pug": "^2.0.6", "detect-indent": "^6.1.0", "magic-string": "^0.30.5", "sorcery": "^0.11.0", "strip-indent": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.10.2", "coffeescript": "^2.5.1", "less": "^3.11.3 || ^4.0.0", "postcss": "^7 || ^8", "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "pug": "^3.0.0", "sass": "^1.26.8", "stylus": "^0.55.0", "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" }, "optionalPeers": ["@babel/core", "coffeescript", "less", "postcss", "postcss-load-config", "pug", "sass", "stylus", "sugarss", "typescript"] }, "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA=="], - - "svelte2tsx": ["svelte2tsx@0.7.35", "", { "dependencies": { "dedent-js": "^1.0.1", "pascal-case": "^3.1.1" }, "peerDependencies": { "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", "typescript": "^4.9.4 || ^5.0.0" } }, "sha512-z2lnOnrfb5nrlRfFQI8Qdz03xQqMHUfPj0j8l/fQuydrH89cCeN+v9jgDwK9GyMtdTRUkE7Neu9Gh+vfXJAfuQ=="], - - "sveltedoc-parser": ["sveltedoc-parser@4.2.1", "", { "dependencies": { "eslint": "8.4.1", "espree": "9.2.0", "htmlparser2-svelte": "4.1.0" } }, "sha512-sWJRa4qOfRdSORSVw9GhfDEwsbsYsegnDzBevUCF6k/Eis/QqCu9lJ6I0+d/E2wOWCjOhlcJ3+jl/Iur+5mmCw=="], + "svelte2tsx": ["svelte2tsx@0.7.53", "", { "dependencies": { "dedent-js": "^1.0.1", "scule": "^1.3.0" }, "peerDependencies": { "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", "typescript": "^4.9.4 || ^5.0.0" } }, "sha512-ljVSwmnYRDHRm8+7ICP6QoAN7U7vgOFfPBLN6T745YWNYqRRSzHxlrzUVqMjYls2Un8MzJissfziy/38e6Deeg=="], "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], - "test-exclude": ["test-exclude@7.0.1", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^9.0.4" } }, "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg=="], + "synckit": ["synckit@0.11.12", "", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ=="], + + "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], @@ -1783,39 +2153,41 @@ "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + "tiny-secp256k1": ["tiny-secp256k1@1.1.7", "", { "dependencies": { "bindings": "^1.3.0", "bn.js": "^4.11.8", "create-hmac": "^1.1.7", "elliptic": "^6.4.0", "nan": "^2.13.2" } }, "sha512-eb+F6NabSnjbLwNoC+2o5ItbmP1kg7HliWue71JgLegQt6A5mTN8YbvTLCazdlg6e5SV6A+r8OGvZYskdlmhqQ=="], - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], + "tinyexec": ["tinyexec@1.1.1", "", {}, "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg=="], - "tinypool": ["tinypool@1.0.2", "", {}, "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], - "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], "tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], - "tldts": ["tldts@6.1.77", "", { "dependencies": { "tldts-core": "^6.1.77" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-lBpoWgy+kYmuXWQ83+R7LlJCnsd9YW8DGpZSHhrMl4b8Ly/1vzOie3OdtmUJDkKxcgRGOehDu5btKkty+JEe+g=="], + "tldts": ["tldts@7.0.28", "", { "dependencies": { "tldts-core": "^7.0.28" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw=="], - "tldts-core": ["tldts-core@6.1.77", "", {}, "sha512-bCaqm24FPk8OgBkM0u/SrEWJgHnhBWYqeBo6yUmcZJDCHt/IfyWBb+14CXdGi4RInMv4v7eUAin15W0DoA+Ytg=="], + "tldts-core": ["tldts-core@7.0.28", "", {}, "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ=="], "tmpl": ["tmpl@1.0.5", "", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="], - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "to-buffer": ["to-buffer@1.2.1", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ=="], + + "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="], "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], - "tough-cookie": ["tough-cookie@5.1.1", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA=="], + "tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="], - "tr46": ["tr46@5.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g=="], + "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], - "tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], + "ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="], - "tween-functions": ["tween-functions@1.2.0", "", {}, "sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA=="], + "tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], @@ -1823,35 +2195,55 @@ "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + "typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="], - "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + "typeforce": ["typeforce@1.18.0", "", {}, "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g=="], + + "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], + + "ua-is-frozen": ["ua-is-frozen@0.1.2", "", {}, "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw=="], + + "ua-parser-js": ["ua-parser-js@2.0.4", "", { "dependencies": { "@types/node-fetch": "^2.6.12", "detect-europe-js": "^0.1.2", "is-standalone-pwa": "^0.1.1", "node-fetch": "^2.7.0", "ua-is-frozen": "^0.1.2" }, "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-XiBOnM/UpUq21ZZ91q2AVDOnGROE6UQd37WrO9WBgw4u2eGvUCNOheMmZ3EfEUj7DLHr8tre+Um/436Of/Vwzg=="], + + "uint8array-tools": ["uint8array-tools@0.0.8", "", {}, "sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g=="], + + "undici": ["undici@7.24.7", "", {}, "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ=="], "undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - "unplugin": ["unplugin@2.3.4", "", { "dependencies": { "acorn": "^8.14.1", "picomatch": "^4.0.2", "webpack-virtual-modules": "^0.6.2" } }, "sha512-m4PjxTurwpWfpMomp8AptjD5yj8qEZN5uQjjGM3TAs9MWWD2tXSSNNj6jGR2FoVGod4293ytyV6SwBbertfyJg=="], + "unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="], + + "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "url-parse": ["url-parse@1.5.10", "", { "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ=="], + "urijs": ["urijs@1.19.11", "", {}, "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="], - "urlpattern-polyfill": ["urlpattern-polyfill@10.1.0", "", {}, "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw=="], + "usb": ["usb@2.16.0", "", { "dependencies": { "@types/w3c-web-usb": "^1.0.6", "node-addon-api": "^8.0.0", "node-gyp-build": "^4.5.0" } }, "sha512-jD88fvzDViMDH5KmmNJgzMBDj/95bDTt6+kBNaNxP4G98xUTnDMiLUY2CYmToba6JAFhM9VkcaQuxCNRLGR7zg=="], - "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "uuid": ["uuid@11.0.5", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA=="], + "utility-types": ["utility-types@3.11.0", "", {}, "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw=="], + + "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="], "v8-compile-cache": ["v8-compile-cache@2.4.0", "", {}, "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw=="], "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], - "video.js": ["video.js@8.21.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/http-streaming": "^3.16.2", "@videojs/vhs-utils": "^4.1.1", "@videojs/xhr": "2.7.0", "aes-decrypter": "^4.0.2", "global": "4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "^7.0.1", "videojs-contrib-quality-levels": "4.1.0", "videojs-font": "4.2.0", "videojs-vtt.js": "0.15.5" } }, "sha512-zcwerRb257QAuWfi8NH9yEX7vrGKFthjfcONmOQ4lxFRpDAbAi+u5LAjCjMWqhJda6zEmxkgdDpOMW3Y21QpXA=="], + "varuint-bitcoin": ["varuint-bitcoin@2.0.0", "", { "dependencies": { "uint8array-tools": "^0.0.8" } }, "sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog=="], + + "video.js": ["video.js@8.23.7", "", { "dependencies": { "@babel/runtime": "^7.28.4", "@videojs/http-streaming": "^3.17.3", "@videojs/vhs-utils": "^4.1.1", "@videojs/xhr": "2.7.0", "aes-decrypter": "^4.0.2", "global": "4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "^7.0.1", "videojs-contrib-quality-levels": "4.1.0", "videojs-font": "4.2.0", "videojs-vtt.js": "0.15.5" } }, "sha512-cG4HOygYt+Z8j6Sf5DuK6OgEOoM+g9oGP6vpqoZRaD13aHE4PMITbyjJUXZcIQbgB0wJEadBRaVm5lJIzo2jAA=="], "videojs-contrib-quality-levels": ["videojs-contrib-quality-levels@4.1.0", "", { "dependencies": { "global": "^4.4.0" }, "peerDependencies": { "video.js": "^8" } }, "sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA=="], @@ -1863,27 +2255,15 @@ "videojs-wavesurfer": ["videojs-wavesurfer@3.10.0", "", { "dependencies": { "video.js": ">=7.0.5", "wavesurfer.js": ">=6.3.0 <7.0.0" } }, "sha512-NFLnPtlq3poxvPIAAHsIaT53SifF3Npu5q1F932/WLkTA/uuPKAohSUw2WjzDgJ/2/xtGnuCGE6CGQYYhoeatg=="], - "vite": ["vite@5.4.14", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA=="], + "vite": ["vite@8.0.8", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.15", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw=="], - "vite-node": ["vite-node@3.1.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.0", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA=="], + "vite-plugin-checker": ["vite-plugin-checker@0.12.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "chokidar": "^4.0.3", "npm-run-path": "^6.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "tiny-invariant": "^1.3.3", "tinyglobby": "^0.2.15", "vscode-uri": "^3.1.0" }, "peerDependencies": { "@biomejs/biome": ">=1.7", "eslint": ">=9.39.1", "meow": "^13.2.0", "optionator": "^0.9.4", "oxlint": ">=1", "stylelint": ">=16", "typescript": "*", "vite": ">=5.4.21", "vls": "*", "vti": "*", "vue-tsc": "~2.2.10 || ^3.0.0" }, "optionalPeers": ["@biomejs/biome", "eslint", "meow", "optionator", "oxlint", "stylelint", "typescript", "vls", "vti", "vue-tsc"] }, "sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg=="], - "vite-plugin-checker": ["vite-plugin-checker@0.8.0", "", { "dependencies": { "@babel/code-frame": "^7.12.13", "ansi-escapes": "^4.3.0", "chalk": "^4.1.1", "chokidar": "^3.5.1", "commander": "^8.0.0", "fast-glob": "^3.2.7", "fs-extra": "^11.1.0", "npm-run-path": "^4.0.1", "strip-ansi": "^6.0.0", "tiny-invariant": "^1.1.0", "vscode-languageclient": "^7.0.0", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-uri": "^3.0.2" }, "peerDependencies": { "@biomejs/biome": ">=1.7", "eslint": ">=7", "meow": "^9.0.0", "optionator": "^0.9.1", "stylelint": ">=13", "typescript": "*", "vite": ">=2.0.0", "vls": "*", "vti": "*", "vue-tsc": "~2.1.6" }, "optionalPeers": ["@biomejs/biome", "eslint", "meow", "optionator", "stylelint", "typescript", "vls", "vti", "vue-tsc"] }, "sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g=="], + "vite-plugin-devtools-json": ["vite-plugin-devtools-json@1.0.0", "", { "dependencies": { "uuid": "^11.1.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw=="], - "vitefu": ["vitefu@1.0.5", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["vite"] }, "sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA=="], + "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], - "vitest": ["vitest@3.1.4", "", { "dependencies": { "@vitest/expect": "3.1.4", "@vitest/mocker": "3.1.4", "@vitest/pretty-format": "^3.1.4", "@vitest/runner": "3.1.4", "@vitest/snapshot": "3.1.4", "@vitest/spy": "3.1.4", "@vitest/utils": "3.1.4", "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.13", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", "vite-node": "3.1.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.1.4", "@vitest/ui": "3.1.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ=="], - - "vscode-jsonrpc": ["vscode-jsonrpc@6.0.0", "", {}, "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg=="], - - "vscode-languageclient": ["vscode-languageclient@7.0.0", "", { "dependencies": { "minimatch": "^3.0.4", "semver": "^7.3.4", "vscode-languageserver-protocol": "3.16.0" } }, "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg=="], - - "vscode-languageserver": ["vscode-languageserver@7.0.0", "", { "dependencies": { "vscode-languageserver-protocol": "3.16.0" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw=="], - - "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.16.0", "", { "dependencies": { "vscode-jsonrpc": "6.0.0", "vscode-languageserver-types": "3.16.0" } }, "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A=="], - - "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], - - "vscode-languageserver-types": ["vscode-languageserver-types@3.16.0", "", {}, "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="], + "vitest": ["vitest@4.1.4", "", { "dependencies": { "@vitest/expect": "4.1.4", "@vitest/mocker": "4.1.4", "@vitest/pretty-format": "4.1.4", "@vitest/runner": "4.1.4", "@vitest/snapshot": "4.1.4", "@vitest/spy": "4.1.4", "@vitest/utils": "4.1.4", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.4", "@vitest/browser-preview": "4.1.4", "@vitest/browser-webdriverio": "4.1.4", "@vitest/coverage-istanbul": "4.1.4", "@vitest/coverage-v8": "4.1.4", "@vitest/ui": "4.1.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg=="], "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], @@ -1895,21 +2275,17 @@ "walker": ["walker@1.0.8", "", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="], - "wavesurfer.js": ["wavesurfer.js@7.9.1", "", {}, "sha512-+pG8X9c9BrfAW8KR54OPzZcAj/57sOL08He/tc6/7Mt6NCX3IfDFwexQxXVTILggGZUOUk7tFKfny32yGrysKA=="], - - "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], + "wavesurfer.js": ["wavesurfer.js@7.12.6", "", {}, "sha512-zSxPgOFprtyJ31ppHQF0+E9jAmjAhi1rR36yIW6h1GOYdpRxDe6mbkYtlChqLK0Iz8ROBweiEFw2zus7tDFibA=="], - "webpack-sources": ["webpack-sources@3.2.3", "", {}, "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="], + "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], - "webrtc-adapter": ["webrtc-adapter@9.0.3", "", { "dependencies": { "sdp": "^3.2.0" } }, "sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ=="], - - "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], + "webrtc-adapter": ["webrtc-adapter@9.0.4", "", { "dependencies": { "sdp": "^3.2.0" } }, "sha512-5ZZY1+lGq8LEKuDlg9M2RPJHlH3R7OVwyHqMcUsLKCgd9Wvf+QrFTCItkXXYPmrJn8H6gRLXbSgxLLdexiqHxw=="], - "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + "whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], - "whatwg-url": ["whatwg-url@14.1.1", "", { "dependencies": { "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" } }, "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ=="], + "whatwg-url": ["whatwg-url@16.0.1", "", { "dependencies": { "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", "webidl-conversions": "^8.0.1" } }, "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -1919,6 +2295,8 @@ "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + "wif": ["wif@5.0.0", "", { "dependencies": { "bs58check": "^4.0.0" } }, "sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA=="], + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], "wrap-ansi": ["wrap-ansi@9.0.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q=="], @@ -1927,9 +2305,11 @@ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "write-file-atomic": ["write-file-atomic@4.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" } }, "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg=="], + "write-file-atomic": ["write-file-atomic@5.0.1", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], + + "ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], - "ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], + "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], "xml": ["xml@1.0.1", "", {}, "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw=="], @@ -1937,191 +2317,301 @@ "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + "xrpl": ["xrpl@4.4.3", "", { "dependencies": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", "@xrplf/isomorphic": "^1.0.1", "@xrplf/secret-numbers": "^2.0.0", "bignumber.js": "^9.0.0", "eventemitter3": "^5.0.1", "fast-json-stable-stringify": "^2.1.0", "ripple-address-codec": "^5.0.0", "ripple-binary-codec": "^2.5.0", "ripple-keypairs": "^2.0.0" } }, "sha512-vi2OjuNkiaP8nv1j+nqHp8GZwwEjO6Y8+j/OuVMg6M4LwXEwyHdIj33dlg7cyY1Lw5+jb9HqFOQvABhaywVbTQ=="], + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "yaml": ["yaml@2.8.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ=="], + "yaml": ["yaml@2.8.3", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], - "yellow-client-common": ["yellow-client-common@github:koo5/yellow-client-common#661a576", { "dependencies": { "@inlang/paraglide-js": "^2.0.0" }, "peerDependencies": { "svelte": "^5.0.0" } }, "koo5-yellow-client-common-661a576"], + "yellow-client-common": ["yellow-client-common@github:libersoft-org/yellow-client-common#ae99e3b", { "peerDependencies": { "svelte": "^5.0.0" } }, "libersoft-org-yellow-client-common-ae99e3b", "sha512-5t4mVZ8eKAvZC42s7Qhn6vQSZg5j7mLU+LQkIKQAFIzzmzeeZaP1Oixg+R9zmaB0iH+gk7gwNPpkXlOA85HNnA=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "yoctocolors-cjs": ["yoctocolors-cjs@2.1.2", "", {}, "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA=="], - "zimmerframe": ["zimmerframe@1.1.2", "", {}, "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w=="], - "@asamuzakjp/css-color/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "@babel/core/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@babel/core/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], - "@babel/generator/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@babel/core/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], - "@babel/template/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@babel/core/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "@babel/traverse/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + "@babel/generator/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-module-imports/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/helpers/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@babel/parser/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@babel/plugin-syntax-async-generators/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], - "@bundled-es-modules/cookie/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + "@babel/plugin-syntax-bigint/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], - "@bundled-es-modules/tough-cookie/tough-cookie": ["tough-cookie@4.1.4", "", { "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.2.0", "url-parse": "^1.5.3" } }, "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag=="], + "@babel/plugin-syntax-class-properties/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-class-static-block/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-import-attributes/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-import-meta/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-json-strings/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-logical-assignment-operators/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-nullish-coalescing-operator/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-numeric-separator/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-object-rest-spread/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-optional-catch-binding/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-optional-chaining/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-private-property-in-object/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/plugin-syntax-top-level-await/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/template/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + + "@babel/template/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + + "@babel/traverse/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@babel/traverse/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + + "@eslint/eslintrc/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "@eslint/eslintrc/espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], "@eslint/eslintrc/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@eslint/eslintrc/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "@ethereumjs/tx/@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="], + + "@ethereumjs/tx/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], - "@humanwhocodes/config-array/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "@ethereumjs/util/@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="], - "@inlang/paraglide-js/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + "@ethereumjs/util/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], - "@inlang/sdk/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + "@fastify/otel/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.212.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.212.0", "import-in-the-middle": "^2.0.6", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg=="], - "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "@fastify/otel/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "@humanwhocodes/config-array/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], - - "@jest/console/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@istanbuljs/load-nyc-config/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], - "@jest/core/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], - "@jest/core/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "@jest/core/ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], - "@jest/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@jest/core/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], "@jest/reporters/@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], - "@jest/reporters/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@jest/reporters/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@jest/reporters/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "@jest/reporters/istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="], - "@jest/reporters/istanbul-lib-source-maps": ["istanbul-lib-source-maps@4.0.1", "", { "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw=="], + "@jest/reporters/istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="], "@jest/reporters/string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], - "@jest/reporters/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@jest/source-map/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@jest/transform/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@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", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], - "@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], + "@jest/transform/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@jest/transform/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - "@jest/types/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@lix-js/sdk/dedent": ["dedent@1.5.1", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg=="], + "@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - "@lix-js/sdk/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + "@ledgerhq/client-ids/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@opentelemetry/api-logs/@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], - "@opentelemetry/instrumentation/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "@prisma/instrumentation/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.207.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.207.0", "import-in-the-middle": "^2.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA=="], - "@opentelemetry/instrumentation-http/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@scure/bip32/@noble/curves": ["@noble/curves@1.9.4", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw=="], - "@opentelemetry/instrumentation-http/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "@scure/bip32/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@scure/bip39/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@sentry/bundler-plugin-core/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@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", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + + "@sentry/bundler-plugin-core/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], "@sentry/bundler-plugin-core/find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - "@sentry/bundler-plugin-core/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], + "@sentry/bundler-plugin-core/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - "@sentry/bundler-plugin-core/magic-string": ["magic-string@0.30.8", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ=="], + "@sentry/bundler-plugin-core/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@sentry/bundler-plugin-core/unplugin": ["unplugin@1.0.1", "", { "dependencies": { "acorn": "^8.8.1", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" } }, "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA=="], + "@sentry/cloudflare/@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], - "@sentry/cli/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "@sentry/node/@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], - "@sentry/sveltekit/magic-string": ["magic-string@0.30.7", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA=="], + "@sentry/rollup-plugin/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@sentry/vite-plugin/unplugin": ["unplugin@1.0.1", "", { "dependencies": { "acorn": "^8.8.1", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" } }, "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA=="], + "@sentry/svelte/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@storybook/addon-actions/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "@sentry/sveltekit/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "@solana/errors/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], + + "@solana/errors/commander": ["commander@14.0.0", "", {}, "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA=="], + + "@solana/rpc-transport-http/undici-types": ["undici-types@7.11.0", "", {}, "sha512-kt1ZriHTi7MU+Z/r9DOdAI3ONdaR3M3csEaRc6ewa4f4dTvX4cQCbJ4NkEn0ohE4hHtq85+PhPSTY+pO/1PwgA=="], - "@storybook/core/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "@stellar/stellar-base/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - "@storybook/core/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "@storybook/addon-actions/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + + "@storybook/builder-vite/@storybook/csf-plugin": ["@storybook/csf-plugin@10.3.5", "", { "dependencies": { "unplugin": "^2.3.5" }, "peerDependencies": { "esbuild": "*", "rollup": "*", "storybook": "^10.3.5", "vite": "*", "webpack": "*" }, "optionalPeers": ["esbuild", "rollup", "vite", "webpack"] }, "sha512-qlEzNKxOjq86pvrbuMwiGD/bylnsXk1dg7ve0j77YFjEEchqtl7qTlrXvFdNaLA89GhW6D/EV6eOCu/eobPDgw=="], - "@storybook/csf-plugin/unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="], + "@storybook/experimental-addon-test/@storybook/test": ["@storybook/test@8.6.14", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/instrumenter": "8.6.14", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", "@vitest/expect": "2.0.5", "@vitest/spy": "2.0.5" }, "peerDependencies": { "storybook": "^8.6.14" } }, "sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw=="], "@storybook/instrumenter/@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], - "@storybook/svelte/@storybook/csf": ["@storybook/csf@0.1.12", "", { "dependencies": { "type-fest": "^2.19.0" } }, "sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw=="], + "@storybook/svelte-vite/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "@storybook/svelte-vite/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@storybook/test/@storybook/instrumenter": ["@storybook/instrumenter@8.6.15", "", { "dependencies": { "@storybook/global": "^5.0.0", "@vitest/utils": "^2.1.1" }, "peerDependencies": { "storybook": "^8.6.15" } }, "sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg=="], + + "@storybook/test-runner/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "@storybook/test-runner/playwright": ["playwright@1.51.1", "", { "dependencies": { "playwright-core": "1.51.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw=="], + "@sveltejs/vite-plugin-svelte/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@sveltejs/vite-plugin-svelte/@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@3.0.1", "", { "dependencies": { "debug": "^4.3.7" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", "svelte": "^5.0.0-next.96 || ^5.0.0", "vite": "^5.0.0" } }, "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ=="], + "@testing-library/dom/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + + "@testing-library/dom/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], "@testing-library/dom/aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], - "@testing-library/dom/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@testing-library/jest-dom/aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], "@testing-library/jest-dom/chalk": ["chalk@3.0.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg=="], "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], - "@types/babel__core/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@testing-library/jest-dom/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "@types/babel__template/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@trezor/blockchain-link/@trezor/blockchain-link-types": ["@trezor/blockchain-link-types@1.5.0", "", { "dependencies": { "@trezor/utils": "9.5.0", "@trezor/utxo-lib": "2.5.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-wD6FKKxNr89MTWYL+NikRkBcWXhiWNFR0AuDHW6GHmlCEHhKu/hAvQtcER8X5jt/Wd0hSKNZqtHBXJ1ZkpJ6rg=="], - "@vitest/browser/@testing-library/user-event": ["@testing-library/user-event@14.6.1", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw=="], + "@trezor/blockchain-link/@trezor/blockchain-link-utils": ["@trezor/blockchain-link-utils@1.5.1", "", { "dependencies": { "@mobily/ts-belt": "^3.13.1", "@stellar/stellar-sdk": "14.2.0", "@trezor/env-utils": "1.5.0", "@trezor/protobuf": "1.5.1", "@trezor/utils": "9.5.0", "xrpl": "4.4.3" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-2tDGLEj5jzydjsJQONGTWVmCDDy6FTZ4ytr1/2gE6anyYEJU8MbaR+liTt3UvcP5jwZTNutwYLvZixRfrb8JpA=="], - "@vitest/browser/sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], + "@trezor/connect/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@vitest/expect/@vitest/utils": ["@vitest/utils@2.0.5", "", { "dependencies": { "@vitest/pretty-format": "2.0.5", "estree-walker": "^3.0.3", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" } }, "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ=="], + "@trezor/device-authenticity/@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="], + + "@trezor/schema-utils/@sinclair/typebox": ["@sinclair/typebox@0.33.22", "", {}, "sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ=="], + + "@types/babel__core/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@types/babel__generator/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], - "@vitest/expect/chai": ["chai@5.1.2", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw=="], + "@types/babel__template/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@types/babel__traverse/@babel/types": ["@babel/types@7.26.10", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ=="], + + "@types/node-fetch/form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="], + + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + + "@videojs/vhs-utils/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], + + "@videojs/xhr/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], + + "@vitest/browser/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "@vitest/browser/sirv": ["sirv@3.0.2", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="], + + "@vitest/expect/@vitest/utils": ["@vitest/utils@2.0.5", "", { "dependencies": { "@vitest/pretty-format": "2.0.5", "estree-walker": "^3.0.3", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" } }, "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ=="], "@vitest/expect/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], - "@vitest/mocker/@vitest/spy": ["@vitest/spy@3.1.4", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg=="], + "@vitest/mocker/@vitest/spy": ["@vitest/spy@4.1.4", "", {}, "sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ=="], + + "@vitest/mocker/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@vitest/runner/@vitest/utils": ["@vitest/utils@3.0.5", "", { "dependencies": { "@vitest/pretty-format": "3.0.5", "loupe": "^3.1.2", "tinyrainbow": "^2.0.0" } }, "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg=="], + "@vitest/snapshot/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "@xrplf/isomorphic/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "babel-jest/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@xrplf/isomorphic/ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], - "babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="], + "aes-decrypter/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], - "babel-plugin-istanbul/test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "asn1.js/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], + + "ast-v8-to-istanbul/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="], + + "blake-hash/node-addon-api": ["node-addon-api@3.2.1", "", {}, "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="], + + "browserify-sign/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "bs58check/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], "caching-transform/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], - "cli-truncate/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "cli-truncate/string-width": ["string-width@8.2.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw=="], + + "cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "create-ecdh/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "cross-spawn/path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "create-jest/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "diffie-hellman/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], - "dom-serializer/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "dom-serializer/domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], "dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], - "domutils/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "elliptic/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], "enquirer/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "eslint/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "eslint/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "eslint/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], @@ -2129,20 +2619,16 @@ "eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], - "ethers/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="], - - "execa/npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="], + "espree/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], - "execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "esrap/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "ethers/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="], - "find-process/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], "find-process/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], - "glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "global-modules/is-windows": ["is-windows@0.2.0", "", {}, "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q=="], "global-prefix/is-windows": ["is-windows@0.2.0", "", {}, "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q=="], @@ -2151,45 +2637,41 @@ "globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], - "hasha/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - "hasha/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], - "htmlparser2/domelementtype": ["domelementtype@1.3.1", "", {}, "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="], + "htmlparser2/entities": ["entities@1.1.2", "", {}, "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="], - "htmlparser2/domhandler": ["domhandler@2.4.2", "", { "dependencies": { "domelementtype": "1" } }, "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA=="], + "https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], - "htmlparser2/domutils": ["domutils@1.7.0", "", { "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="], + "https-proxy-agent/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "htmlparser2/entities": ["entities@1.1.2", "", {}, "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="], + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "htmlparser2-svelte/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "ip-address/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], - "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "istanbul-lib-processinfo/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], "istanbul-lib-report/make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], - "jest-changed-files/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - - "jest-circus/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "istanbul-lib-source-maps/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "jest-circus/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-circus/dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], - "jest-cli/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-circus/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-config/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-cli/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - "jest-config/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-config/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@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", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], - "jest-diff/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-config/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - "jest-diff/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-config/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-each/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-diff/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-each/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-each/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], "jest-haste-map/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -2197,103 +2679,113 @@ "jest-junit/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "jest-leak-detector/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], - - "jest-matcher-utils/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "jest-matcher-utils/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-leak-detector/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-matcher-utils/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-message-util/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-message-util/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-playwright-preset/playwright-core": ["playwright-core@1.51.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw=="], + "jest-runtime/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - "jest-playwright-preset/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "jest-snapshot/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@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", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], - "jest-process-manager/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-snapshot/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@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" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], - "jest-resolve/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-snapshot/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-runner/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-validate/pretty-format": ["pretty-format@30.3.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ=="], - "jest-runtime/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-watch-typeahead/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - "jest-snapshot/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "jest-snapshot/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], - - "jest-snapshot/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], - - "jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-watch-typeahead/slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], - "jest-validate/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + "jest-watch-typeahead/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "jest-validate/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-watcher/ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], - "jest-validate/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "jest-watcher/string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], - "jest-watch-typeahead/ansi-escapes": ["ansi-escapes@6.2.1", "", {}, "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig=="], + "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "jest-watch-typeahead/slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], + "log-update/slice-ansi": ["slice-ansi@7.1.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg=="], - "jest-watcher/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "log-update/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "jest-watcher/string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], + "m3u8-parser/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], - "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "magic-string/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - "jsdom/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "magicast/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], - "log-update/ansi-escapes": ["ansi-escapes@7.0.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw=="], + "make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "log-update/slice-ansi": ["slice-ansi@7.1.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg=="], + "miller-rabin/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], - "magicast/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "mpd-parser/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], - "msw/type-fest": ["type-fest@4.37.0", "", {}, "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg=="], + "mux.js/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "nyc/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "nyc/istanbul-lib-source-maps": ["istanbul-lib-source-maps@4.0.1", "", { "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw=="], - - "nyc/test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + "nyc/istanbul-reports": ["istanbul-reports@3.1.7", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g=="], "nyc/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "parse-json/@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "pbkdf2/ripemd160": ["ripemd160@2.0.3", "", { "dependencies": { "hash-base": "^3.1.2", "inherits": "^2.0.4" } }, "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA=="], + + "pkcs7/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], + + "polished/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], + "pretty-format/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "public-encrypt/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], + + "qrcode/pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="], + "qrcode/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "rollup/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "sander/mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + "slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "sander/rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], + "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], - "slice-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + "socks-proxy-agent/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="], + "sorcery/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], - "string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "storybook/@storybook/icons": ["@storybook/icons@2.0.1", "", { "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" } }, "sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg=="], + + "storybook/@testing-library/jest-dom": ["@testing-library/jest-dom@6.9.1", "", { "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", "picocolors": "^1.1.1", "redent": "^3.0.0" } }, "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA=="], + + "storybook/@testing-library/user-event": ["@testing-library/user-event@14.6.1", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw=="], - "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "storybook/@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], + + "storybook/@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], + + "string-length/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + + "string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -2301,138 +2793,256 @@ "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "svelte/esrap": ["esrap@2.2.5", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, "peerDependencies": { "@typescript-eslint/types": "^8.2.0" }, "optionalPeers": ["@typescript-eslint/types"] }, "sha512-/yLB1538mag+dn0wsePTe8C0rDIjUOaJpMs2McodSzmM2msWcZsBSdRtg6HOBt0A/r82BN+Md3pgwSc/uWt2Ig=="], + + "svelte/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "svelte-ast-print/esrap": ["esrap@1.2.2", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1" } }, "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw=="], - "svelte-preprocess/sorcery": ["sorcery@0.11.1", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.14", "buffer-crc32": "^1.0.0", "minimist": "^1.2.0", "sander": "^0.5.0" }, "bin": { "sorcery": "bin/sorcery" } }, "sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ=="], + "tiny-secp256k1/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], - "test-exclude/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + "tinyglobby/fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + "to-buffer/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "unplugin/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + "unplugin/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], - "unplugin/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + "usb/node-addon-api": ["node-addon-api@8.5.0", "", {}, "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A=="], - "videojs-wavesurfer/wavesurfer.js": ["wavesurfer.js@6.6.4", "", {}, "sha512-nBbc0pD/3FdClxKUKL1UW2V9AJPL+JOjC8T6/YF9/FCAn4uo+H6Y8VBkXo9UJXIHoBewoc7iXj3tPeL0UCJhjA=="], + "videojs-record/video.js": ["video.js@8.21.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/http-streaming": "^3.16.2", "@videojs/vhs-utils": "^4.1.1", "@videojs/xhr": "2.7.0", "aes-decrypter": "^4.0.2", "global": "4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "^7.0.1", "videojs-contrib-quality-levels": "4.1.0", "videojs-font": "4.2.0", "videojs-vtt.js": "0.15.5" } }, "sha512-zcwerRb257QAuWfi8NH9yEX7vrGKFthjfcONmOQ4lxFRpDAbAi+u5LAjCjMWqhJda6zEmxkgdDpOMW3Y21QpXA=="], - "vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "videojs-record/webrtc-adapter": ["webrtc-adapter@9.0.3", "", { "dependencies": { "sdp": "^3.2.0" } }, "sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ=="], - "vite-plugin-checker/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "videojs-wavesurfer/video.js": ["video.js@8.21.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/http-streaming": "^3.16.2", "@videojs/vhs-utils": "^4.1.1", "@videojs/xhr": "2.7.0", "aes-decrypter": "^4.0.2", "global": "4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "^7.0.1", "videojs-contrib-quality-levels": "4.1.0", "videojs-font": "4.2.0", "videojs-vtt.js": "0.15.5" } }, "sha512-zcwerRb257QAuWfi8NH9yEX7vrGKFthjfcONmOQ4lxFRpDAbAi+u5LAjCjMWqhJda6zEmxkgdDpOMW3Y21QpXA=="], - "vite-plugin-checker/chokidar": ["chokidar@3.6.0", "", { "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" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "videojs-wavesurfer/wavesurfer.js": ["wavesurfer.js@6.6.4", "", {}, "sha512-nBbc0pD/3FdClxKUKL1UW2V9AJPL+JOjC8T6/YF9/FCAn4uo+H6Y8VBkXo9UJXIHoBewoc7iXj3tPeL0UCJhjA=="], - "vite-plugin-checker/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + "vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "vite-plugin-checker/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "vite-plugin-devtools-json/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "vitest/@vitest/expect": ["@vitest/expect@3.1.4", "", { "dependencies": { "@vitest/spy": "3.1.4", "@vitest/utils": "3.1.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA=="], + "vitest/@vitest/expect": ["@vitest/expect@4.1.4", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.4", "@vitest/utils": "4.1.4", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww=="], - "vitest/@vitest/runner": ["@vitest/runner@3.1.4", "", { "dependencies": { "@vitest/utils": "3.1.4", "pathe": "^2.0.3" } }, "sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ=="], + "vitest/@vitest/spy": ["@vitest/spy@4.1.4", "", {}, "sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ=="], - "vitest/@vitest/spy": ["@vitest/spy@3.1.4", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg=="], + "vitest/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "vscode-languageclient/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "wait-on/axios": ["axios@1.8.3", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A=="], - "vscode-languageclient/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "wait-on/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "wait-port/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], "wait-port/commander": ["commander@3.0.2", "", {}, "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="], + "wait-port/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@bundled-es-modules/tough-cookie/tough-cookie/universalify": ["universalify@0.2.0", "", {}, "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg=="], + "write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/core/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "@babel/core/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/core/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/generator/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/generator/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/helper-module-imports/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/helper-module-imports/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/helpers/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/helpers/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/template/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/template/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "@babel/template/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/template/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/traverse/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "@babel/traverse/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], - "@humanwhocodes/config-array/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "@babel/traverse/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "@inquirer/core/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@eslint/eslintrc/espree/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], + + "@fastify/otel/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.212.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg=="], + + "@fastify/otel/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@2.0.6", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw=="], + + "@fastify/otel/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "@jest/core/ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "@jest/core/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "@jest/core/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], - "@jest/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@jest/reporters/glob/foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "@jest/reporters/istanbul-lib-instrument/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@jest/reporters/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "@jest/reporters/istanbul-lib-instrument/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], - "@jest/reporters/string-length/char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], + "@jest/reporters/string-length/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@jest/reporters/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@jest/transform/@babel/core/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@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" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], - "@sentry/bundler-plugin-core/find-up/locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "@jest/transform/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "@jest/transform/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "@jest/transform/@babel/core/@babel/helpers": ["@babel/helpers@7.29.2", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.29.0" } }, "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw=="], + + "@jest/transform/@babel/core/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "@jest/transform/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "@jest/transform/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "@jest/transform/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@sentry/bundler-plugin-core/glob/minimatch": ["minimatch@8.0.4", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA=="], + "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="], - "@sentry/bundler-plugin-core/glob/minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], + "@prisma/instrumentation/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@2.0.6", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@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" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helpers": ["@babel/helpers@7.29.2", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.29.0" } }, "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "@sentry/bundler-plugin-core/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@sentry/bundler-plugin-core/find-up/locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "@sentry/bundler-plugin-core/unplugin/chokidar": ["chokidar@3.6.0", "", { "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" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@sentry/bundler-plugin-core/glob/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "@sentry/bundler-plugin-core/unplugin/webpack-virtual-modules": ["webpack-virtual-modules@0.5.0", "", {}, "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="], + "@sentry/bundler-plugin-core/glob/minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], - "@sentry/cli/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + "@sentry/bundler-plugin-core/glob/path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], - "@sentry/vite-plugin/unplugin/chokidar": ["chokidar@3.6.0", "", { "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" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "@stellar/stellar-base/@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@sentry/vite-plugin/unplugin/webpack-virtual-modules": ["webpack-virtual-modules@0.5.0", "", {}, "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="], + "@storybook/builder-vite/@storybook/csf-plugin/unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], "@storybook/instrumenter/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], "@storybook/instrumenter/@vitest/utils/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], - "@storybook/test-runner/playwright/playwright-core": ["playwright-core@1.51.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw=="], + "@storybook/test/@storybook/instrumenter/@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], - "@vitest/expect/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@2.0.5", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ=="], + "@testing-library/dom/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "@vitest/runner/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@3.0.5", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA=="], + "@testing-library/dom/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "babel-plugin-istanbul/istanbul-lib-instrument/@babel/parser": ["@babel/parser@7.26.10", "", { "dependencies": { "@babel/types": "^7.26.10" }, "bin": "./bin/babel-parser.js" }, "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA=="], + "@trezor/blockchain-link/@trezor/blockchain-link-utils/@trezor/protobuf": ["@trezor/protobuf@1.5.1", "", { "dependencies": { "@trezor/schema-utils": "1.4.0", "long": "5.2.5", "protobufjs": "7.4.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-nAkaCCAqLpErBd+IuKeG5MpbyLR/2RMgCw18TWc80m1Ws/XgQirhHY9Jbk6gLImTXb9GTrxP0+MDSahzd94rSA=="], - "babel-plugin-istanbul/test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "@trezor/device-authenticity/@noble/curves/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], - "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@types/babel__core/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], - "enquirer/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@types/babel__core/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "eslint/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "@types/babel__generator/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], - "eslint/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@types/babel__generator/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + "@types/babel__template/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], - "glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "@types/babel__template/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "htmlparser2/domutils/dom-serializer": ["dom-serializer@0.2.2", "", { "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" } }, "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="], + "@types/babel__traverse/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], - "istanbul-lib-report/make-dir/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "@types/babel__traverse/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@vitest/expect/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@2.0.5", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ=="], + + "babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + + "browserify-sign/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "browserify-sign/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "cli-truncate/string-width/get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], - "jest-changed-files/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + "cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "jest-changed-files/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], + "enquirer/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "jest-changed-files/execa/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "eslint/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "jest-changed-files/execa/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + "execa/npm-run-path/path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "jest-changed-files/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + "istanbul-lib-report/make-dir/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], "jest-circus/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "jest-circus/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "jest-cli/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "jest-cli/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "jest-cli/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "jest-config/@babel/core/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@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" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "jest-config/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "jest-config/@babel/core/@babel/helpers": ["@babel/helpers@7.29.2", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.29.0" } }, "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw=="], + + "jest-config/@babel/core/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "jest-config/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "jest-config/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "jest-config/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "jest-config/glob/foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "jest-config/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "jest-config/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "jest-config/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -2459,6 +3069,30 @@ "jest-message-util/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "jest-runtime/glob/foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "jest-runtime/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "jest-snapshot/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "jest-snapshot/@babel/core/@babel/helpers": ["@babel/helpers@7.29.2", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.29.0" } }, "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw=="], + + "jest-snapshot/@babel/core/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "jest-snapshot/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "jest-snapshot/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "jest-snapshot/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "jest-snapshot/@babel/generator/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "jest-snapshot/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "jest-snapshot/@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "jest-snapshot/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "jest-snapshot/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -2467,7 +3101,9 @@ "jest-validate/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], - "jest-watcher/string-length/char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], + "jest-watch-typeahead/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "jest-watcher/ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], "jest-watcher/string-length/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2475,39 +3111,69 @@ "log-update/slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.0.0", "", { "dependencies": { "get-east-asian-width": "^1.0.0" } }, "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA=="], + "log-update/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - "nyc/test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "nyc/yargs/cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + "nyc/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "nyc/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], "nyc/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "parse-json/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "parse-json/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "pbkdf2/ripemd160/hash-base": ["hash-base@3.1.2", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.1" } }, "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg=="], + "qrcode/yargs/cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + "qrcode/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "qrcode/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], "qrcode/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "slice-ansi/is-fullwidth-code-point/get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], + + "storybook/@testing-library/jest-dom/aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "storybook/@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], + + "storybook/@vitest/expect/@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + + "storybook/@vitest/expect/chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], + + "storybook/@vitest/expect/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "storybook/@vitest/spy/tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], + + "string-length/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "svelte-ast-print/esrap/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "svelte/esrap/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - "test-exclude/glob/foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + "videojs-record/video.js/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], - "vite-plugin-checker/chokidar/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "videojs-record/video.js/@videojs/http-streaming": ["@videojs/http-streaming@3.17.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/vhs-utils": "^4.1.1", "aes-decrypter": "^4.0.2", "global": "^4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "7.1.0", "video.js": "^7 || ^8" } }, "sha512-Ch1P3tvvIEezeZXyK11UfWgp4cWKX4vIhZ30baN/lRinqdbakZ5hiAI3pGjRy3d+q/Epyc8Csz5xMdKNNGYpcw=="], - "vite-plugin-checker/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "videojs-wavesurfer/video.js/@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], - "vite-plugin-checker/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "videojs-wavesurfer/video.js/@videojs/http-streaming": ["@videojs/http-streaming@3.17.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@videojs/vhs-utils": "^4.1.1", "aes-decrypter": "^4.0.2", "global": "^4.4.0", "m3u8-parser": "^7.2.0", "mpd-parser": "^1.3.1", "mux.js": "7.1.0", "video.js": "^7 || ^8" } }, "sha512-Ch1P3tvvIEezeZXyK11UfWgp4cWKX4vIhZ30baN/lRinqdbakZ5hiAI3pGjRy3d+q/Epyc8Csz5xMdKNNGYpcw=="], - "vite-plugin-checker/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - "vscode-languageclient/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "wait-on/axios/form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="], "wait-port/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], @@ -2515,54 +3181,140 @@ "wait-port/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@inquirer/core/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "@fastify/otel/@opentelemetry/instrumentation/@opentelemetry/api-logs/@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], + + "@fastify/otel/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "@jest/reporters/glob/foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "@jest/reporters/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "@jest/reporters/string-length/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "@jest/transform/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@jest/transform/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs/@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@sentry/bundler-plugin-core/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], "@sentry/bundler-plugin-core/find-up/locate-path/p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - "@sentry/bundler-plugin-core/unplugin/chokidar/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - "@sentry/bundler-plugin-core/unplugin/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "@storybook/test/@storybook/instrumenter/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], - "@sentry/bundler-plugin-core/unplugin/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "@storybook/test/@storybook/instrumenter/@vitest/utils/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], - "@sentry/vite-plugin/unplugin/chokidar/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "jest-cli/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@sentry/vite-plugin/unplugin/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "jest-cli/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "@sentry/vite-plugin/unplugin/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "jest-cli/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "babel-plugin-istanbul/test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "jest-cli/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "htmlparser2/domutils/dom-serializer/domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + "jest-config/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "htmlparser2/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "jest-config/@babel/core/@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "jest-changed-files/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "jest-config/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], - "jest-watcher/string-length/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "jest-config/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "jest-config/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "jest-config/glob/foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "jest-config/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "jest-runtime/glob/foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "jest-runtime/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "nyc/test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "jest-snapshot/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "jest-watcher/string-length/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "nyc/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "nyc/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "nyc/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "nyc/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "nyc/yargs/yargs-parser/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "pbkdf2/ripemd160/hash-base/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "qrcode/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "qrcode/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], - "test-exclude/glob/foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "qrcode/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "qrcode/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "qrcode/yargs/yargs-parser/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "storybook/@vitest/expect/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + + "storybook/@vitest/expect/@vitest/utils/loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], "wait-port/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], "wait-port/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "@sentry/bundler-plugin-core/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "jest-cli/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "jest-cli/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "nyc/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "nyc/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "pbkdf2/ripemd160/hash-base/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "pbkdf2/ripemd160/hash-base/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "qrcode/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "qrcode/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "wait-port/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], } } diff --git a/commit.sh b/commit.sh index 51bb61ac9..3efb77a36 100755 --- a/commit.sh +++ b/commit.sh @@ -8,17 +8,20 @@ USER="libersoft-org" PASS=`cat ./.secret_git` if [ "$#" -eq 0 ]; then - echo "" - echo "------------------------" - echo "Git commit & push script" - echo "------------------------" - echo "" - echo "This script commits the changes and pushes them to GitHub." - echo "" - echo "Usage: $0 \"[SOME COMMENT]\"" - echo "Example: $0 \"Add README.md\"" - echo "" - exit 1 + echo "Generating commit message using GitHub Copilot..." + COMMIT_MSG=$(gh copilot explain "Analyze the changes in the following context and write a brief commit message with max. 50 characters. All in one line. Do not write anything else. No chitchat at the beginning or end. Here is the list of changes: `git diff`" 2>/dev/null | grep -A2 "Explanation" | tail -1 | sed 's/^[ \t]*//' | sed 's/[ \t]*$//') + if [ -z "$COMMIT_MSG" ]; then + echo "\033[31mERROR:\033[0m Failed to generate commit message. Please provide one manually:" + echo "Usage: $0 \"[COMMIT MESSAGE]\"" + exit 1 + fi + # Clean the commit message - remove quotes and sanitize + COMMIT_MSG=$(echo "$COMMIT_MSG" | sed 's/"//g' | sed "s/'//g") + echo "\033[33mGENERATED COMMIT MESSAGE:\033[0m $COMMIT_MSG" + COMMIT_MESSAGE="$COMMIT_MSG" +else + # Sanitize user-provided message + COMMIT_MESSAGE=$(echo "$1" | sed 's/"//g' | sed "s/'//g") fi if [ ! -d "./.git/" ]; then @@ -28,15 +31,13 @@ if [ ! -d "./.git/" ]; then else git remote set-url origin https://$USER:$PASS@github.com/$USER/$REPO fi -bun i -g prettier prettier-plugin-svelte -#prettier --config prettier-libersoft.json --plugin 'prettier-plugin-svelte' --write "src/**/*.{js,ts,css,html,svelte}" -prettier --plugin 'prettier-plugin-svelte' --write "src/**/*.{js,ts,css,html,svelte}" +#bun i -g prettier prettier-plugin-svelte +#prettier --plugin 'prettier-plugin-svelte' --write "src/**/*.{js,ts,css,html,svelte}" git config user.name "$NAME" git config user.email "$EMAIL" git status git add . git status -git commit -m "$1" -#git branch -M $BRANCH -git push # -u origin $BRANCH -git status +git commit -m "$COMMIT_MESSAGE" +git push +git status \ No newline at end of file diff --git a/docker-dev-init.sh b/docker-dev-init.sh index 93a81bfd8..f856d1ef2 100755 --- a/docker-dev-init.sh +++ b/docker-dev-init.sh @@ -1,7 +1,11 @@ #!/bin/sh set -e echo "init" + +export PATH=$PATH:~/.bun/bin/ + ~/.bun/bin/bun i --frozen-lockfile +~/.bun/bin/bun run init echo "HOLLOW: $HOLLOW" diff --git a/git-stats.sh b/git-stats.sh new file mode 100755 index 000000000..7522c0fa2 --- /dev/null +++ b/git-stats.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# Git daily stats — lines added / removed / net per day + total summary + +echo "" +echo "=== Git Daily Stats ===" +echo "" + +printf "%-12s %8s %8s %8s\n" "Date" "Added" "Removed" "Net" +printf "%-12s %8s %8s %8s\n" "----------" "------" "------" "------" + +total_added=0 +total_removed=0 + +git log --reverse --format="%ad" --date=short | sort -u | while read -r day; do + added=$(git log --after="$day 00:00:00" --before="$day 23:59:59" --date=short --numstat --pretty="" | awk '{ if ($1 != "-") s += $1 } END { print s+0 }') + removed=$(git log --after="$day 00:00:00" --before="$day 23:59:59" --date=short --numstat --pretty="" | awk '{ if ($2 != "-") s += $2 } END { print s+0 }') + net=$((added - removed)) + printf "%-12s %8d %8d %8d\n" "$day" "$added" "$removed" "$net" + total_added=$((total_added + added)) + total_removed=$((total_removed + removed)) +done + +echo "" +echo "=== Total Summary ===" +echo "" + +total_added=$(git log --numstat --pretty="" | awk '{ if ($1 != "-") s += $1 } END { print s+0 }') +total_removed=$(git log --numstat --pretty="" | awk '{ if ($2 != "-") s += $2 } END { print s+0 }') +total_net=$((total_added - total_removed)) +total_commits=$(git rev-list --count HEAD) +active_days=$(git log --format="%ad" --date=short | sort -u | wc -l | tr -d ' ') + +printf "Added: %8d lines\n" "$total_added" +printf "Removed: %8d lines\n" "$total_removed" +printf "Net: %8d lines\n" "$total_net" +printf "Commits: %8d\n" "$total_commits" +printf "Active days: %4d\n" "$active_days" +echo "" diff --git a/messages/cs.json b/messages/cs.json deleted file mode 100644 index 05bfc9733..000000000 --- a/messages/cs.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://inlang.com/schema/inlang-message-format", - "hello_world": "Hello, {name} from cs!" -} diff --git a/messages/en.json b/messages/en.json deleted file mode 100644 index 2cb53a306..000000000 --- a/messages/en.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "https://inlang.com/schema/inlang-message-format", - "common": { - "back": "Back", - "edit": "Edit", - "delete": "Delete", - "open": "Open" - }, - "core": { - "accounts_add_edit": { - "protocol": "Protocol", - "title": "Title", - "server": "Server", - "address": "Address", - "password": "Password", - "enabled": "Enabled", - "password_placeholder": "Your password", - "not_yet_implemented": "Not yet implemented" - }, - "accounts_content": { - "add_new_account": "Add new account", - "edit_account": "Edit account", - "delete_account": "Delete the account", - "export_accounts": "Export all accounts", - "import_accounts": "Import accounts", - "status": "Status", - "title": "Title", - "server": "Server", - "address": "Address", - "enabled": "Enabled", - "action": "Action" - } - }, - "messages": { - "new_conversation": { - "address": "Address" - } - } -} diff --git a/package.json b/package.json index a2112d214..2886902b7 100644 --- a/package.json +++ b/package.json @@ -1,107 +1,117 @@ { - "name": "yellow-client", - "private": true, - "type": "module", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "test": "npx vitest run; npx playwright test", - "test:unit": "npx vitest run", - "test:e2e": "npx playwright test", - "svelte-check": "svelte-check", - "typecheck": "svelte-check", - "storybook": "storybook dev -p 6006", - "storybook:build": "storybook build", - "storybook:test": "test-storybook", - "prettier": "prettier --plugin 'prettier-plugin-svelte' --write \"src/**/*.{js,ts,css,html,svelte,md,json}\"", - "prepare": "husky" - }, - "lint-staged": { - "*.{js,ts,svelte,html,json,css,md}": "prettier --plugin 'prettier-plugin-svelte' --write" - }, - "dependencies": { - "@floating-ui/dom": "^1.6.13", - "@inlang/paraglide-js": "^2.0.0", - "@neodrag/svelte": "^2.3.2", - "@sentry/sveltekit": "^9", - "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", - "@tauri-apps/api": "^2.3.0", - "@tauri-apps/plugin-autostart": "^2.3.0", - "@tauri-apps/plugin-dialog": "^2.2.1", - "@tauri-apps/plugin-fs": "^2.2.1", - "@tauri-apps/plugin-notification": "^2.2.2", - "@tauri-apps/plugin-os": "^2.2.1", - "@tauri-apps/plugin-positioner": "^2.2.0", - "@tauri-apps/plugin-process": "^2.2.1", - "@tauri-apps/plugin-store": "^2.2.0", - "@testing-library/svelte": "^5.2.6", - "@types/recordrtc": "^5.6.14", - "@webav/mp4box.js": "^0.5.6", - "async-mutex": "^0.5.0", - "debug": "^4.4.0", - "dexie": "^4.0.11", - "dompurify": "^3.2.4", - "dotenv": "^16.4.7", - "emoji-regex": "^10.4.0", - "ethers": "^6.13.5", - "events": "^3.3.0", - "fuzzy-search": "^3.2.1", - "hex-to-css-filter": "^6.0.0", - "jsqr": "^1.4.0", - "leaflet": "^1.9.4", - "lodash": "^4.17.21", - "lottie-web": "^5.12.2", - "mediainfo.js": "^0.3.4", - "pako": "^2.1.0", - "prismjs": "^1.30.0", - "qrcode": "^1.5.4", - "recordrtc": "^5.6.2", - "retry": "^0.13.1", - "svelte-intersection-observer": "^1.0.0", - "uuid": "^11.0.5", - "video.js": "^8.21.0", - "videojs-record": "^4.8.0", - "wavesurfer.js": "^7.9.0", - "webrtc-adapter": "^9.0.3", - "yellow-client-common": "https://github.com/koo5/yellow-client-common" - }, - "devDependencies": { - "@chromatic-com/storybook": "^3", - "@playwright/test": "^1.52.0", - "@storybook/addon-essentials": "^8.6.7", - "@storybook/addon-svelte-csf": "^5.0.0-next.0", - "@storybook/blocks": "^8.6.7", - "@storybook/experimental-addon-test": "^8.6.7", - "@storybook/svelte": "^8.6.7", - "@storybook/sveltekit": "^8.6.7", - "@storybook/test": "^8.6.7", - "@storybook/test-runner": "^0.22.0", - "@sveltejs/adapter-auto": "^3.3.1", - "@sveltejs/adapter-static": "^3.0.8", - "@sveltejs/kit": "^2.19.2", - "@sveltejs/vite-plugin-svelte": "4.0.0", - "@types/bun": "latest", - "@types/debug": "^4.1.12", - "@types/lodash": "^4.17.16", - "@types/retry": "^0.12.5", - "@types/video.js": "^7.3.58", - "@vitest/browser": "3.1.4", - "@vitest/coverage-v8": "3.1.4", - "git-format-staged": "^3.1.1", - "husky": "^9.1.7", - "jsdom": "^26.0.0", - "lint-staged": "^15.5.1", - "playwright": "^1.51.1", - "prettier": "^3.5.3", - "prettier-plugin-svelte": "^3.4.0", - "storybook": "^8.6.7", - "svelte": "^5.19.9", - "svelte-check": "^4.1.6", - "typescript": "^5.7.3", - "vite": "^5.4.14", - "vite-plugin-checker": "^0.8.0", - "vitest": "3.1.4" - }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "name": "yellow-client", + "private": true, + "type": "module", + "scripts": { + "dev": "vite dev", + "init": "bun x --bun svelte-kit sync", + "build": "bun x --bun vite build", + "preview": "vite preview", + "test": "npx vitest run; npx playwright test", + "test:unit": "npx vitest run --project unit", + "test:storybook": "npx vitest run --project storybook", + "test:e2e": "npx playwright test", + "svelte-check": "svelte-check", + "typecheck": "svelte-check", + "storybook": "storybook dev -p 6006", + "storybook:build": "storybook build", + "storybook:test": "test-storybook", + "prettier": "prettier --plugin 'prettier-plugin-svelte' --write \"src/**/*.{js,ts,css,html,svelte,md,json}\"", + "prepare": "husky", + "build:messages-service": "npx vite build --config vite.service.config.js && mkdir -p static/tmp && cp dist/services/messages-service.js static/tmp/", + "watch:messages-service": "node scripts/build-service.js --watch" + }, + "lint-staged": { + "*.{js,ts,svelte,html,json,css,md}": "prettier --plugin 'prettier-plugin-svelte' --write" + }, + "dependencies": { + "@floating-ui/dom": "^1.7.6", + "@ledgerhq/hw-app-eth": "^7.6.2", + "@ledgerhq/hw-transport-webhid": "^6.34.0", + "@ledgerhq/hw-transport-webusb": "^6.33.0", + "@neodrag/svelte": "^2.3.3", + "@sentry/sveltekit": "^10.48.0", + "@tauri-apps/api": "^2.10.1", + "@tauri-apps/plugin-autostart": "^2.5.1", + "@tauri-apps/plugin-dialog": "^2.7.0", + "@tauri-apps/plugin-fs": "^2.5.0", + "@tauri-apps/plugin-notification": "^2.3.3", + "@tauri-apps/plugin-os": "^2.3.2", + "@tauri-apps/plugin-positioner": "^2.3.1", + "@tauri-apps/plugin-process": "^2.3.1", + "@tauri-apps/plugin-store": "^2.4.2", + "@testing-library/svelte": "^5.3.1", + "@trezor/connect-web": "^9.7.2", + "@types/recordrtc": "^5.6.15", + "@webav/mp4box.js": "^0.5.7", + "async-mutex": "^0.5.0", + "buffer": "^6.0.3", + "debug": "^4.4.3", + "dexie": "^4.4.2", + "dompurify": "^3.4.0", + "dotenv": "^17.4.2", + "emoji-regex": "^10.6.0", + "ethers": "^6.16.0", + "events": "^3.3.0", + "fuzzy-search": "^3.2.1", + "hex-to-css-filter": "^6.0.0", + "jsqr": "^1.4.0", + "leaflet": "^1.9.4", + "libersoft-crypto": "https://github.com/libersoft-org/crypto-utils#7fbc148", + "lodash": "^4.18.1", + "lodash-es": "^4.18.1", + "lottie-web": "^5.13.0", + "mediainfo.js": "^0.3.7", + "pako": "^2.1.0", + "prismjs": "^1.30.0", + "qrcode": "^1.5.4", + "recordrtc": "^5.6.2", + "retry": "^0.13.1", + "svelte-intersection-observer": "^1.1.1", + "uuid": "^13.0.0", + "video.js": "^8.23.7", + "videojs-record": "^4.8.0", + "wavesurfer.js": "^7.12.6", + "webrtc-adapter": "^9.0.4", + "yellow-client-common": "https://github.com/libersoft-org/yellow-client-common" + }, + "devDependencies": { + "@chromatic-com/storybook": "^5.1.2", + "@playwright/test": "^1.59.1", + "@storybook/addon-essentials": "^8.6.14", + "@storybook/addon-svelte-csf": "^5.1.2", + "@storybook/blocks": "^8.6.14", + "@storybook/experimental-addon-test": "^8.6.14", + "@storybook/svelte": "^10.3.5", + "@storybook/sveltekit": "^10.3.5", + "@storybook/test": "^8.6.15", + "@storybook/test-runner": "^0.24.3", + "@sveltejs/adapter-auto": "^7.0.1", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.57.1", + "@sveltejs/vite-plugin-svelte": "7.0.0", + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.2", + "@types/bun": "1.3.12", + "@types/debug": "^4.1.13", + "@types/lodash": "^4.17.24", + "@types/retry": "^0.12.5", + "@types/video.js": "^7.3.58", + "@vitest/browser": "4.1.4", + "@vitest/coverage-v8": "4.1.4", + "git-format-staged": "^4.0.1", + "husky": "^9.1.7", + "jsdom": "^29.0.2", + "lint-staged": "^16.4.0", + "playwright": "^1.59.1", + "prettier": "^3.8.2", + "prettier-plugin-svelte": "^3.5.1", + "storybook": "^10.3.5", + "svelte": "^5.55.4", + "svelte-check": "^4.4.6", + "typescript": "^6.0.2", + "vite": "^8.0.8", + "vite-plugin-checker": "^0.12.0", + "vite-plugin-devtools-json": "^1.0.0", + "vitest": "4.1.4" + } } diff --git a/playwright.config.ts b/playwright.config.ts index a1b7fcca5..405ae259d 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -2,12 +2,18 @@ import { defineConfig, devices } from '@playwright/test'; import 'dotenv/config'; export default defineConfig({ + globalTimeout: 1_000_000, + timeout: 620_000, + expect: { + //timeout: 20_000, + }, testDir: './src/', testMatch: ['**/e2e/**/*.test.ts'], + //testIgnore: ['**/wallet-send-dialog-from-sw-to-trezor.test.ts', '**/wallet-send-dialog-from-trezor-to-sw.test.ts', '**/wallet-send-dialog-from-ledger-to-sw.test.ts'], use: { ignoreHTTPSErrors: true, - viewport: { width: 1280, height: 1880 }, + viewport: { width: 1280, height: 128 }, }, reporter: [['github'], ['list'], ['json', { outputFile: 'test-results/playwright-report.json' }]], projects: [ @@ -15,14 +21,40 @@ export default defineConfig({ name: 'chromium', use: { ...devices['Desktop Chrome'], - viewport: { width: 1280, height: 1880 }, + viewport: { width: 1000, height: 800 }, + launchOptions: { + args: ['--disable-web-security', '--use-fake-ui-for-media-stream', '--use-fake-device-for-media-stream'], + }, + }, + }, + { + name: 'firefox', + use: { + ...devices['Desktop Firefox'], + viewport: { width: 1000, height: 800 }, + launchOptions: { + firefoxUserPrefs: { + 'media.navigator.streams.fake': true, + 'media.navigator.permission.disabled': true, + }, + }, }, }, - /*{ + { name: 'Mobile Safari', use: { ...devices['iPhone 13'], + launchOptions: {}, }, - },*/ + }, + { + name: 'Mobile Chrome', + use: { + ...devices['Pixel 5'], + launchOptions: { + args: ['--disable-web-security', '--use-fake-ui-for-media-stream', '--use-fake-device-for-media-stream'], + }, + }, + }, ], }); diff --git a/prettier.fish b/prettier.fish deleted file mode 100755 index 148a028f6..000000000 --- a/prettier.fish +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env fish - -nvm use - -#prettier --config prettier-libersoft.json --plugin 'prettier-plugin-svelte' --write "src/**/*.{js,ts,css,html,svelte}" -prettier --plugin prettier-plugin-svelte --write "src/**/*.{js,ts,css,html,svelte}" diff --git a/prettier.sh b/prettier.sh index b6cb99265..4b06d1185 100755 --- a/prettier.sh +++ b/prettier.sh @@ -1,4 +1,3 @@ #!/usr/bin/env sh -#prettier --config prettier-libersoft.json --plugin 'prettier-plugin-svelte' --write "src/**/*.{js,ts,css,html,svelte}" prettier --plugin 'prettier-plugin-svelte' --write "src/**/*.{js,ts,css,html,svelte}" diff --git a/project.inlang/project_id b/project.inlang/project_id deleted file mode 100644 index b582fad9e..000000000 --- a/project.inlang/project_id +++ /dev/null @@ -1 +0,0 @@ -YXVqOflKllDJqey1xA \ No newline at end of file diff --git a/project.inlang/settings.json b/project.inlang/settings.json deleted file mode 100644 index 1dc579cd6..000000000 --- a/project.inlang/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "$schema": "https://inlang.com/schema/project-settings", - "modules": ["https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js", "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js"], - "plugin.inlang.messageFormat": { - "pathPattern": "./messages/{locale}.json" - }, - "baseLocale": "en", - "locales": ["en", "cs"] -} diff --git a/screenshot.webp b/screenshot.webp new file mode 100644 index 000000000..4aa1d8248 Binary files /dev/null and b/screenshot.webp differ diff --git a/scripts/build-service.js b/scripts/build-service.js new file mode 100644 index 000000000..7b4db984d --- /dev/null +++ b/scripts/build-service.js @@ -0,0 +1,47 @@ +#!/usr/bin/env node + +import { execSync } from 'child_process'; +import { existsSync, mkdirSync, copyFileSync } from 'fs'; +import path from 'path'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); +const projectRoot = path.join(__dirname, '..'); + +console.log('🔨 Building Messages Service...'); + +try { + // Ensure output directory exists + const distDir = path.join(projectRoot, 'dist'); + const servicesDir = path.join(distDir, 'services'); + + if (!existsSync(distDir)) { + mkdirSync(distDir, { recursive: true }); + } + + if (!existsSync(servicesDir)) { + mkdirSync(servicesDir, { recursive: true }); + } + + // Run the build + console.log('📦 Building service bundle...'); + execSync('npx vite build --config vite.service.config.js', { + cwd: projectRoot, + stdio: 'inherit', + }); + + // Check if the build was successful + const outputFile = path.join(servicesDir, 'messages-service.js'); + if (existsSync(outputFile)) { + console.log('✅ Messages service built successfully!'); + console.log(`📁 Output: ${outputFile}`); + + // Show file size + const { size } = await import('fs').then(fs => fs.promises.stat(outputFile)); + console.log(`📏 Size: ${(size / 1024).toFixed(2)} KB`); + } else { + throw new Error('Build completed but output file not found'); + } +} catch (error) { + console.error('❌ Build failed:', error.message); + process.exit(1); +} diff --git a/src/app.css b/src/app.css new file mode 100644 index 000000000..03f6d68dc --- /dev/null +++ b/src/app.css @@ -0,0 +1,41 @@ +:root { + --menu-height: 58px; + --shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.75); + --animation-highlight-duration: 0.5s; +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--primary-harder-background) var(--primary-soft-background); +} + +body { + font-family: 'Ubuntu'; + margin: 0px; +} + +.bold { + font-weight: bold; +} + +@keyframes pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.2); + } + 100% { + transform: scale(1); + } +} + +.animation-highlight { + animation: pulse var(--animation-highlight-duration) ease-in-out !important; +} + +.debug { + outline: 1px dotted gray; + border-radius: 4px; + background-color: rgba(100, 100, 100, 0.2); +} diff --git a/src/app.html b/src/app.html index 8890cce2d..21f627390 100644 --- a/src/app.html +++ b/src/app.html @@ -1,9 +1,9 @@ - + - + %sveltekit.head% diff --git a/src/core/Photo/Photo.svelte b/src/core/Photo/Photo.svelte deleted file mode 100644 index 1338b8b03..000000000 --- a/src/core/Photo/Photo.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - -
- -
diff --git a/src/core/accounts_config.ts b/src/core/accounts_config.ts deleted file mode 100644 index 8cdf3f40a..000000000 --- a/src/core/accounts_config.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { get } from 'svelte/store'; -import { localStorageSharedStore } from '../lib/svelte-shared-store.ts'; -import { log, TAURI_MOBILE } from '@/core/tauri.ts'; -import { selectAccount } from './accounts.ts'; -import { getGuid } from './utils/utils.ts'; -import { invoke } from '@tauri-apps/api/core'; -import type { AccountConfig, AccountCredentials, AccountSettings } from './types.ts'; -import type { Writable } from 'svelte/store'; - -export const accounts_config: Writable = localStorageSharedStore('accounts_config', import.meta.env.VITE_YELLOW_CLIENT_DEFAULT_ACCOUNTS ? JSON.parse(import.meta.env.VITE_YELLOW_CLIENT_DEFAULT_ACCOUNTS) : []); - -export function accounts_config_init(): () => void { - if (!TAURI_MOBILE) { - return () => {}; // No-op unsubscriber for non-mobile - } - - // Sync accounts config to native storage on mobile - return accounts_config.subscribe(async (configs: AccountConfig[]) => { - try { - const jsonData = JSON.stringify(configs); - log.debug('Syncing accounts config to native storage:', configs.length, 'accounts'); - - await invoke('plugin:yellow|save_accounts_config', { - configJson: jsonData, - }); - - log.debug('Accounts config synced successfully'); - } catch (error) { - log.error('Failed to sync accounts config to native storage:', error); - } - }); -} - -export function addAccount(config: Partial, settings: AccountSettings): string { - console.log('addAccount(config, settings)', config, settings); - const id = getGuid(); - accounts_config.update(v => [ - ...v, - { - id, - enabled: config.enabled ?? true, - credentials: config.credentials as AccountCredentials, - settings, - } as AccountConfig, - ]); - selectAccount(id); - return id; -} - -export function saveAccount(id: string, config: Partial, settings: AccountSettings): void { - console.log('saveAccount', id, config, settings); - accounts_config.update(v => { - for (const acc of v) { - if (acc.id === id) { - // Update config properties - Object.entries(config).forEach(([key, value]) => { - (acc as any)[key] = value; - }); - - // Update settings - if (!acc.settings) acc.settings = {}; - Object.entries(settings).forEach(([key, value]) => { - acc.settings[key] = value; - }); - } - console.log('saveAccount acc config:', JSON.stringify(acc)); - } - return v; - }); -} - -export function delAccount(id: string): void { - accounts_config.update(v => v.filter(a => a.id !== id)); -} - -export function findAccountConfig(id: string): AccountConfig | undefined { - return get(accounts_config).find(a => a.id === id); -} - -export function accountConfigExistsByCredentials(server: string, address: string): boolean { - const currentConfig = get(accounts_config); - const identifier = `${server}\\\\${address}`; - return currentConfig.some(account => { - const accountServer = account.credentials?.server; - const accountAddress = account.credentials?.address; - return `${accountServer}\\\\${accountAddress}` === identifier; - }); -} - -export function toggleAccountEnabled(id: string): void { - log.debug('TOGGLE ACCOUNT ENABLED accounts_config', accounts_config); - log.debug('TOGGLE ACCOUNT ENABLED id', id); - accounts_config.update(v => - v.map(a => { - if (a.id === id) a.enabled = !a.enabled; - return a; - }) - ); -} diff --git a/src/core/actions/dynamicEllipsis.ts b/src/core/actions/dynamicEllipsis.ts new file mode 100644 index 000000000..bcd48e0d1 --- /dev/null +++ b/src/core/actions/dynamicEllipsis.ts @@ -0,0 +1,94 @@ +import type { Action } from 'svelte/action'; + +interface DynamicEllipsisOptions { + /** Minimum height to ensure, in pixels */ + minHeight?: number; + /** Debounce delay for resize events, in milliseconds */ + debounceMs?: number; +} + +/** + * Action that dynamically measures content height and applies it to the ::before pseudo-element + * of ellipsis table cells, replacing hardcoded heights with flexible sizing + */ +export const dynamicEllipsis: Action = (element, options: DynamicEllipsisOptions = {}) => { + const { minHeight = 0, debounceMs = 25 } = options; + + let resizeObserver: ResizeObserver | null = null; + let debounceTimer: ReturnType | null = null; + + function measureAndUpdateHeight(): void { + if (debounceTimer) { + clearTimeout(debounceTimer); + } + + debounceTimer = setTimeout(() => { + // Find the first child element that contains the actual content + const contentElement = element.querySelector(':scope > *:first-child') as HTMLElement; + + if (contentElement) { + // Temporarily remove absolute positioning to measure natural height + const originalPosition = contentElement.style.position; + const originalTransform = contentElement.style.transform; + const originalTop = contentElement.style.top; + const originalLeft = contentElement.style.left; + const originalRight = contentElement.style.right; + + // Reset positioning to measure natural height + contentElement.style.position = 'static'; + contentElement.style.transform = 'none'; + contentElement.style.top = 'auto'; + contentElement.style.left = 'auto'; + contentElement.style.right = 'auto'; + + // Measure the natural height of the content + const contentHeight = contentElement.offsetHeight; + const measuredHeight = Math.max(contentHeight, minHeight); + + // Restore original positioning + contentElement.style.position = originalPosition; + contentElement.style.transform = originalTransform; + contentElement.style.top = originalTop; + contentElement.style.left = originalLeft; + contentElement.style.right = originalRight; + + // Apply the measured height to the ::before pseudo-element via CSS custom property + element.style.setProperty('--dynamic-min-height', `${measuredHeight}px`); + } + }, debounceMs); + } + + // Initial measurement + measureAndUpdateHeight(); + + // Set up ResizeObserver to watch for content changes + if (typeof ResizeObserver !== 'undefined') { + resizeObserver = new ResizeObserver(() => { + measureAndUpdateHeight(); + }); + + // Observe the element and its children + resizeObserver.observe(element); + const contentElement = element.querySelector(':scope > *:first-child'); + if (contentElement) { + resizeObserver.observe(contentElement); + } + } + + return { + update(newOptions) { + // Update options if needed + Object.assign(options, newOptions); + measureAndUpdateHeight(); + }, + + destroy() { + if (resizeObserver) { + resizeObserver.disconnect(); + } + if (debounceTimer) { + clearTimeout(debounceTimer); + } + }, + }; +}; diff --git a/src/core/actions/resizeObserver.ts b/src/core/actions/resizeObserver.ts index c296bf749..8706f042e 100644 --- a/src/core/actions/resizeObserver.ts +++ b/src/core/actions/resizeObserver.ts @@ -1,26 +1,21 @@ // keep track of which resize callback is associated with each element type ResizeCallback = (entry: ResizeObserverEntry) => void; const resizeCallbacks = new WeakMap(); - // defined outside of action, so we only create a single instance let resizeObserver: ResizeObserver; -export default function resize(target: Element, callback: ResizeCallback) { +export default function resize(target: Element, callback: ResizeCallback): { destroy(): void } { // create on first use, inside the action, so we're SSR friendly resizeObserver = resizeObserver || new ResizeObserver(entries => { for (const entry of entries) { const callback = resizeCallbacks.get(entry.target); - if (callback) { - callback(entry); - } + if (callback) callback(entry); } }); - resizeCallbacks.set(target, callback); resizeObserver.observe(target); - return { destroy() { resizeObserver.unobserve(target); diff --git a/src/core/actions/tableDrag.ts b/src/core/actions/tableDrag.ts new file mode 100644 index 000000000..b8d20032b --- /dev/null +++ b/src/core/actions/tableDrag.ts @@ -0,0 +1,172 @@ +import { TableDragManager, type DragConfig } from '@/core/scripts/drag.ts'; +import type { ActionReturn } from 'svelte/action'; + +export interface TableDragOptions { + /** Number of columns in the table for colspan (auto-detected if not provided) */ + columnCount?: number; + /** Callback when reordering is needed */ + onReorder: (sourceIndex: number, targetIndex: number) => void; + /** Items array for reactive updates */ + items: any[]; +} + +// Track if styles are already injected +let stylesInjected = false; + +// Registry for drag handles +const dragHandleRegistry = new Set(); + +export function registerDragHandle(element: HTMLElement): void { + dragHandleRegistry.add(element); +} + +export function unregisterDragHandle(element: HTMLElement): void { + dragHandleRegistry.delete(element); +} + +function injectDragStyles(): void { + if (stylesInjected) return; + const styleId = 'table-drag-styles'; + if (document.getElementById(styleId)) return; + const style = document.createElement('style'); + style.id = styleId; + style.textContent = ` + /* Gap elements for drag and drop */ + tr.drop-gap { + background: transparent !important; + border: none !important; + width: 100% !important; + } + + tr.drop-gap td { + border: none !important; + padding: 0 !important; + width: 100% !important; + } + + .drop-indicator { + background: rgba(var(--primary-rgb, 74, 144, 226), 0.1) !important; + border: 2px dashed var(--primary) !important; + border-radius: 4px !important; + margin: 2px 4px !important; + width: 100% !important; + box-sizing: border-box !important; + /* Height will be set dynamically via inline styles */ + min-height: 20px !important; /* Minimum height for very small elements */ + } + + /* Ensure dragged table rows maintain their structure */ + + + .dragged-row-clone td, + .dragged-row-clone th { + background-color: inherit !important; /* Inherit from parent */ + } + + /* Disabled drag handles when only one row */ + .drag-handle.disabled { + opacity: 0.5 !important; + cursor: not-allowed !important; + pointer-events: none !important; + } + + `; + + document.head.appendChild(style); + stylesInjected = true; +} + +/** + * Svelte action for table drag & drop functionality + * Usage:
+ */ +export function tableDrag(node: HTMLElement, options: TableDragOptions): ActionReturn { + let dragManager: TableDragManager | undefined; + let currentItemsLength = 0; + + function init(): void { + cleanup(); // Always cleanup first + if (!options.items?.length) { + console.log('tableDrag: No items to work with'); + return; + } + // Inject required styles + injectDragStyles(); + // Find tbody within the node + const tbody = node.querySelector('tbody'); + if (!tbody) { + console.warn('tableDrag: No tbody found in element'); + return; + } + // Auto-detect column count if not provided + let columnCount = options.columnCount; + if (!columnCount) { + const firstRow = tbody.querySelector('tr'); + if (firstRow) { + columnCount = firstRow.querySelectorAll('td, th').length; + //console.log('tableDrag: Auto-detected column count:', columnCount); + } else { + console.warn('tableDrag: Could not auto-detect column count, defaulting to 1'); + columnCount = 1; + } + } + // Create new drag manager + const config: DragConfig = { + getDragHandles: () => Array.from(dragHandleRegistry), + columnCount: columnCount, + onReorder: options.onReorder, + }; + dragManager = new TableDragManager(config); + dragManager.init(tbody); + currentItemsLength = options.items?.length ?? 0; + // Update drag handle states based on item count + updateDragHandleStates(); + //console.log('tableDrag: Initialized for', options.items.length, 'items'); + } + + function updateDragHandleStates(): void { + const itemCount = options.items?.length ?? 0; + const isDisabled = itemCount <= 1; + // Update all registered drag handles + dragHandleRegistry.forEach(handle => { + if (isDisabled) { + handle.classList.add('disabled'); + handle.setAttribute('title', 'Cannot reorder: only one item'); + } else { + handle.classList.remove('disabled'); + handle.removeAttribute('title'); + } + }); + console.log('tableDrag: Drag handles', isDisabled ? 'disabled' : 'enabled', 'for', itemCount, 'items'); + } + + function cleanup(): void { + if (dragManager) { + dragManager.destroy(); + dragManager = undefined; + } + } + + // Initialize on mount + init(); + + return { + update(newOptions: TableDragOptions) { + console.log('tableDrag: Update called', { + oldLength: currentItemsLength, + newLength: newOptions.items?.length, + }); + + // Always reinitialize to ensure clean state + options = newOptions; + init(); + + // Update drag handle states after initialization + updateDragHandleStates(); + }, + destroy() { + //console.log('tableDrag: Destroying'); + cleanup(); + }, + }; +} diff --git a/src/core/components/Accordion/Accordion.svelte b/src/core/components/Accordion/Accordion.svelte deleted file mode 100644 index 389918920..000000000 --- a/src/core/components/Accordion/Accordion.svelte +++ /dev/null @@ -1,231 +0,0 @@ - - - - -
- {#each items as item, index} -
- handleClick(index)}> -
-
{item.name}
- {@render header?.(item)} - -
-
-
- {@render content?.(item)} -
-
- {/each} -
diff --git a/src/core/components/Account/AccountBar.svelte b/src/core/components/Account/AccountBar.svelte index e6f7d2c09..c2617edb3 100644 --- a/src/core/components/Account/AccountBar.svelte +++ b/src/core/components/Account/AccountBar.svelte @@ -1,25 +1,23 @@ - - +
{#if img} {/if} {#if title} -
{title}
+
{title}
{/if}
diff --git a/src/core/components/Account/AccountStatus.svelte b/src/core/components/Account/AccountStatus.svelte index e76b9b037..3019ffbff 100644 --- a/src/core/components/Account/AccountStatus.svelte +++ b/src/core/components/Account/AccountStatus.svelte @@ -1,5 +1,8 @@ - {#if $account.enabled} diff --git a/src/core/components/Account/AccountStatusIcon.svelte b/src/core/components/Account/AccountStatusIcon.svelte index 37e091ba4..36e46bd93 100644 --- a/src/core/components/Account/AccountStatusIcon.svelte +++ b/src/core/components/Account/AccountStatusIcon.svelte @@ -1,7 +1,22 @@ - diff --git a/src/core/components/Account/AccountsImportButtons.svelte b/src/core/components/Account/AccountsImportButtons.svelte deleted file mode 100644 index c22d666e4..000000000 --- a/src/core/components/Account/AccountsImportButtons.svelte +++ /dev/null @@ -1,186 +0,0 @@ - - - - -
-
- - - diff --git a/src/core/components/Alert/Alert.svelte b/src/core/components/Alert/Alert.svelte index 2230c617b..a3ac8e0ee 100644 --- a/src/core/components/Alert/Alert.svelte +++ b/src/core/components/Alert/Alert.svelte @@ -1,45 +1,35 @@ - - -{#if message} -
- {message} -
-{/if} +
+ {#if children} + {@render children?.()} + {/if} + {#if message} +
{colors.label}:
+
{message}
+ {/if} +
diff --git a/src/core/components/Breadcrumb/Breadcrumb.svelte b/src/core/components/Breadcrumb/Breadcrumb.svelte new file mode 100644 index 000000000..1b70ac441 --- /dev/null +++ b/src/core/components/Breadcrumb/Breadcrumb.svelte @@ -0,0 +1,85 @@ + + + + + + +{#if items} + +{/if} diff --git a/src/core/components/Button/Button.svelte b/src/core/components/Button/Button.svelte index 37dee005f..2eaaaab70 100644 --- a/src/core/components/Button/Button.svelte +++ b/src/core/components/Button/Button.svelte @@ -1,21 +1,21 @@ @@ -46,33 +49,50 @@ border: 1px solid; border-radius: 10px; -webkit-tap-highlight-color: transparent; + box-sizing: border-box; + transition: background-color 0.4s linear; + } + + .button:hover:not(.disabled), + :global(.clickable:focus-visible) .button:not(.disabled), + :global(.clickable.focused) .button:not(.disabled) { + background-color: var(--button-hover-color) !important; } .button.disabled { background-color: var(--disabled-background) !important; border-color: var(--disabled-foreground) !important; color: var(--disabled-foreground) !important; - cursor: default; } .button.hidden-on-desktop { display: none; } + + .button .text { + white-space: nowrap; + } - -
+{#snippet icon()} + +{/snippet} + +
{#if children} {@render children?.()} {/if} {#if loading} - + {:else} - {#if img} - + {#if img && !right} + {@render icon()} {/if} {#if text} -
{text}
+
{text}
+ {/if} + {#if img && right} + {@render icon()} {/if} {/if}
diff --git a/src/core/components/Button/ButtonBar.svelte b/src/core/components/Button/ButtonBar.svelte index 3d711f565..a7f165693 100644 --- a/src/core/components/Button/ButtonBar.svelte +++ b/src/core/components/Button/ButtonBar.svelte @@ -1,10 +1,33 @@ -
+
{@render children?.()}
diff --git a/src/core/components/Button/ButtonWithMenu.svelte b/src/core/components/Button/ButtonWithMenu.svelte deleted file mode 100644 index 10c042280..000000000 --- a/src/core/components/Button/ButtonWithMenu.svelte +++ /dev/null @@ -1,120 +0,0 @@ - - - - -
- -
- {@render sideButtonSlot?.()} -
-
-
- {@render mainButtonSlot?.()} -
-
- -{#if show} - -
- {@render tooltipSlot?.()} -
-
-{/if} diff --git a/src/core/components/Clickable/Clickable.svelte b/src/core/components/Clickable/Clickable.svelte index 0465b28da..bdecad941 100644 --- a/src/core/components/Clickable/Clickable.svelte +++ b/src/core/components/Clickable/Clickable.svelte @@ -1,30 +1,90 @@ - +
diff --git a/src/core/components/Code/Code.svelte b/src/core/components/Code/Code.svelte index 11fe2da17..05766d686 100644 --- a/src/core/components/Code/Code.svelte +++ b/src/core/components/Code/Code.svelte @@ -1,405 +1,35 @@ -
{ - // Save current cursor position before updating - lastCursorPos = getCursorPosition(); - - // Update code with the new content - const newText = elDiv?.innerText || ''; - if (newText !== code) { - // Use setTimeout to avoid cursor jumping by postponing the update until after this event handler completes - setTimeout(() => { - code = newText; - }, 0); - } - }} - onkeydown={handleKeyDown} - onpaste={pastePlainText} - onfocus={() => { - // Ensure we have content for cursor to appear when focused - if (elDiv && (!elDiv.innerHTML || elDiv.innerHTML.trim() === '')) { - elDiv.innerHTML = ' '; - // Place cursor at beginning - const selection = window.getSelection(); - if (selection) { - const range = document.createRange(); - const codeElement = elDiv?.querySelector('code'); - if (codeElement && codeElement.firstChild) { - range.setStart(codeElement.firstChild, 0); - range.collapse(true); - selection.removeAllRanges(); - selection.addRange(range); - } - } - } - }} -> - {code || ' '} -
+ diff --git a/src/core/components/Content/Content.svelte b/src/core/components/Content/Content.svelte new file mode 100644 index 000000000..b52ab606f --- /dev/null +++ b/src/core/components/Content/Content.svelte @@ -0,0 +1,20 @@ + + + + +
+ {@render children?.()} +
diff --git a/src/core/components/Content/ContentBar.svelte b/src/core/components/Content/ContentBar.svelte new file mode 100644 index 000000000..b1230a691 --- /dev/null +++ b/src/core/components/Content/ContentBar.svelte @@ -0,0 +1,74 @@ + + + + +
+ {@render children?.()} + {#if left} +
+ {@render left?.()} +
+ {/if} + {#if center} +
+ {@render center?.()} +
+ {/if} + {#if right} +
+ {@render right?.()} +
+ {/if} +
diff --git a/src/core/components/TopBar/TopBarTitle.svelte b/src/core/components/Content/ContentBarTitle.svelte similarity index 66% rename from src/core/components/TopBar/TopBarTitle.svelte rename to src/core/components/Content/ContentBarTitle.svelte index 69e4fce53..a54934358 100644 --- a/src/core/components/TopBar/TopBarTitle.svelte +++ b/src/core/components/Content/ContentBarTitle.svelte @@ -7,11 +7,10 @@ -
{text}
+
{text}
diff --git a/src/core/components/Content/ContentPage.svelte b/src/core/components/Content/ContentPage.svelte new file mode 100644 index 000000000..d92ef2638 --- /dev/null +++ b/src/core/components/Content/ContentPage.svelte @@ -0,0 +1,57 @@ + + + + +
+ {@render children?.()} +
diff --git a/src/core/components/ContextMenu/ContextMenu.svelte b/src/core/components/ContextMenu/ContextMenu.svelte index b06c1f21a..c92bf8738 100644 --- a/src/core/components/ContextMenu/ContextMenu.svelte +++ b/src/core/components/ContextMenu/ContextMenu.svelte @@ -1,77 +1,81 @@ - - { - //console.log('context-menu svelte:window click:', e); - //console.log(e.target); - let ancestor = e.target.closest('.context-menu'); - //console.log('ancestor:', ancestor); - if (ancestor) return; - if (!open) return; - //console.log('context-menu svelte:window click close:', e); - close(); - }} -/> + - + - -
{ - /*if (open) e.preventDefault(); // TODO: parametrize this (off for pop-up, on for context menu-proper) - if ($hasPopup) return; - if (e.key === 'ArrowDown') { - if (focusIndex < options.length - 1) focusIndex++; - } else if (e.key === 'ArrowUp') { - if (focusIndex === -1) focusIndex = options.length - 1; - else if (focusIndex > 0) focusIndex--; - }*/ - if (open && e.key === 'Escape') { - console.log('context-menu escape'); - close(); - e.stopPropagation(); - e.preventDefault(); - } - }} -> - +
+ {#if children} + {@render children()} + {/if}
diff --git a/src/core/components/ContextMenu/ContextMenuItem.svelte b/src/core/components/ContextMenu/ContextMenuItem.svelte index 2487a2678..688119b0a 100644 --- a/src/core/components/ContextMenu/ContextMenuItem.svelte +++ b/src/core/components/ContextMenu/ContextMenuItem.svelte @@ -1,17 +1,25 @@ - - -
- {#if data.icon} - + + {#snippet top()} +
+ {#if data?.icon} + + {/if} + {#if data?.body} +
+ {#if typeof data.body === 'string'} + {@html sanitizedBody} + {:else} + {@render data.body()} + {/if} +
+ {/if} +
+ {/snippet} + {#snippet bottom()} + {#if data?.buttons && data.buttons.length > 0} + + {#each data.buttons as button, index} +
- - {#each data.buttons as button} -
diff --git a/src/core/components/Input/Input.svelte b/src/core/components/Input/Input.svelte index 2913be74d..8ff3301b6 100644 --- a/src/core/components/Input/Input.svelte +++ b/src/core/components/Input/Input.svelte @@ -1,41 +1,73 @@ - handleKeydown(e)} /> +{#if icon} +
+ handleKeydown(e)} oninput={handleInput} onfocus={handleFocus} onblur={handleBlur} onclick={handleClick} /> + +
+{:else} + handleKeydown(e)} onfocus={handleFocus} onblur={handleBlur} onclick={handleClick} /> +{/if} diff --git a/src/core/components/Input/InputButton.svelte b/src/core/components/Input/InputButton.svelte deleted file mode 100644 index 70a5e8c7e..000000000 --- a/src/core/components/Input/InputButton.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - - - -
- handleKeydown(e)} /> - -
diff --git a/src/core/components/Label/Label.svelte b/src/core/components/Label/Label.svelte index e542d91f0..39c6c8a4e 100644 --- a/src/core/components/Label/Label.svelte +++ b/src/core/components/Label/Label.svelte @@ -4,8 +4,9 @@ children?: Snippet; text?: string; id?: string; + row?: boolean; } - let { children, text = $bindable('') }: Props = $props(); + let { children, text = $bindable(''), id: _id, row = false }: Props = $props(); -
+
+ +
+
+{:else} +
+ {#if alertText} + + {:else} +
{instructions}
+
+ + +
+ {/if} +
+{/if} diff --git a/src/core/components/Range/Range.svelte b/src/core/components/Range/Range.svelte new file mode 100644 index 000000000..33d2f6833 --- /dev/null +++ b/src/core/components/Range/Range.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/src/core/components/Section/Section.svelte b/src/core/components/Section/Section.svelte index e4fda84e6..aadf26df9 100644 --- a/src/core/components/Section/Section.svelte +++ b/src/core/components/Section/Section.svelte @@ -16,22 +16,12 @@ position: relative; padding-top: clamp(32px, 4vw, 72px); padding-bottom: clamp(32px, 4vw, 72px); - - &.lg { - padding-top: clamp(48px, 8vw, 120px); - padding-bottom: clamp(48px, 8vw, 120px); - } } - /* &.appended - padding-top 0 - - &.prepended - padding-bottom 0 - - &.bare - padding-top 0 - padding-bottom 0 */ + section.lg { + padding-top: clamp(48px, 8vw, 120px); + padding-bottom: clamp(48px, 8vw, 120px); + }
diff --git a/src/core/components/Select/Select.svelte b/src/core/components/Select/Select.svelte index 55a0ad277..ed10d53d7 100644 --- a/src/core/components/Select/Select.svelte +++ b/src/core/components/Select/Select.svelte @@ -1,58 +1,82 @@ {#snippet select()} - +
+ + +
{/snippet}
diff --git a/src/core/components/Settings/BaseSettingsSubtree.svelte b/src/core/components/Settings/BaseSettingsSubtree.svelte new file mode 100644 index 000000000..22b345a4a --- /dev/null +++ b/src/core/components/Settings/BaseSettingsSubtree.svelte @@ -0,0 +1,159 @@ + + + + +
+ {#if activeName !== settingsObject.name} + + {/if} +
+ {#if currentNode.menu} + {#each currentNode.menu as item (item.name ?? item.title)} + await setSettingsSection(item.name!) : item.onClick} testId={item.name ? `settings-${item.name}` : undefined} /> + {/each} + {/if} + {#if currentNode.body} + {@const nodeState = getNodeState(currentNode, id)} + {@const mergedProps = { ...(currentNode as any).props, ...nodeState.props }} + + {/if} +
+
+{#if $debug} +
+ BaseSettings Debug: currentNode: +
{JSON.stringify(currentNode, null, 2)}
+
+{/if} diff --git a/src/core/components/Settings/BaseSettingsWindow.svelte b/src/core/components/Settings/BaseSettingsWindow.svelte new file mode 100644 index 000000000..c38f19242 --- /dev/null +++ b/src/core/components/Settings/BaseSettingsWindow.svelte @@ -0,0 +1,43 @@ + + + + + diff --git a/src/core/components/Settings/SettingsAppearance.svelte b/src/core/components/Settings/SettingsAppearance.svelte deleted file mode 100644 index d96451d95..000000000 --- a/src/core/components/Settings/SettingsAppearance.svelte +++ /dev/null @@ -1,148 +0,0 @@ - - - - -{#if !subTab} - -{:else if subTab === 'theme'} -

Theme editing here

- -{/if} - - - - - {#if TAURI} - - {/if} - - - - - - {#if TAURI} - - {/if} - - - - - -
Zoom:Theme:
- {Math.round(($zoom || 0) * 100)}% -
- -
-
Theme: - {#if expanded} - - {:else} - - {#if $selected_theme_index > 0} - - {/if} - - {#if $selected_theme_index > 0} - - {/if} - {/if} -
- - - {#if expanded} - - - - {#each theme_properties as theme_property_name, theme_property_value} - - {/each} - - {/if} - - -
- - - - {$themes_stored[$selected_theme_index].properties[theme_property_name[0]]} -
- diff --git a/src/core/components/Settings/SettingsGeneral.svelte b/src/core/components/Settings/SettingsGeneral.svelte deleted file mode 100644 index 9f52d8755..000000000 --- a/src/core/components/Settings/SettingsGeneral.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - {#each settings as setting} - - {/each} - - - - - {#each settings as setting} - - {/each} - - -
{setting.label}
- - -
diff --git a/src/core/components/Settings/SettingsItem.svelte b/src/core/components/Settings/SettingsMenuItem.svelte similarity index 53% rename from src/core/components/Settings/SettingsItem.svelte rename to src/core/components/Settings/SettingsMenuItem.svelte index 8beee1aca..81eaa0029 100644 --- a/src/core/components/Settings/SettingsItem.svelte +++ b/src/core/components/Settings/SettingsMenuItem.svelte @@ -1,15 +1,20 @@ - -
+
{#if img} {/if} diff --git a/src/core/components/Settings/SettingsNotifications.svelte b/src/core/components/Settings/SettingsNotifications.svelte deleted file mode 100644 index 1202bb83d..000000000 --- a/src/core/components/Settings/SettingsNotifications.svelte +++ /dev/null @@ -1,122 +0,0 @@ - - - - -
- - - - {#if CUSTOM_NOTIFICATIONS} - {#if $customNotificationsOn} - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Animation:Animation duration:Maximum number of lines in title:Maximum number of lines in description:Background color:Background color on mouse over:Border color:Title color:Description color:
- - -
- ms -
-
- - - - -
- - {$bgColor} -
-
-
- - {$bgColorHover} -
-
-
- - {$borderColor} -
-
-
- - {$titleColor} -
-
-
- - {$descColor} -
-
- {/if} - {/if} -
diff --git a/src/core/components/Settings/SettingsNotificationsAlert.svelte b/src/core/components/Settings/SettingsNotificationsAlert.svelte deleted file mode 100644 index a6de8988c..000000000 --- a/src/core/components/Settings/SettingsNotificationsAlert.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -{#if $notificationsSettingsAlert === 'blocked'} - -{:else if $notificationsSettingsAlert === 'not-supported'} - -{/if} diff --git a/src/core/components/Sidebar/SidebarButton.svelte b/src/core/components/Sidebar/SidebarButton.svelte index 94982e201..8daaa3f1e 100644 --- a/src/core/components/Sidebar/SidebarButton.svelte +++ b/src/core/components/Sidebar/SidebarButton.svelte @@ -1,19 +1,21 @@ -
- {#if show} -
- {/if} -
+{#if show} +
+{/if} diff --git a/src/core/components/Switch/Switch.svelte b/src/core/components/Switch/Switch.svelte index 4e694ae37..82ea37664 100644 --- a/src/core/components/Switch/Switch.svelte +++ b/src/core/components/Switch/Switch.svelte @@ -1,27 +1,27 @@ -
- - {@render children?.()} -
-
+ + {@render children?.()} +
diff --git a/src/core/components/Table/TableActionItems.svelte b/src/core/components/Table/TableActionItems.svelte index 3f2f75e0a..4519e9168 100644 --- a/src/core/components/Table/TableActionItems.svelte +++ b/src/core/components/Table/TableActionItems.svelte @@ -3,9 +3,10 @@ interface Props { children?: Snippet; + align?: 'left' | 'center' | 'right'; } - const { children }: Props = $props(); + const { children, align = 'left' }: Props = $props(); -
+
{@render children?.()}
diff --git a/src/core/components/Table/TableTbody.svelte b/src/core/components/Table/TableTbody.svelte index 0e795c8f7..3d85fa61e 100644 --- a/src/core/components/Table/TableTbody.svelte +++ b/src/core/components/Table/TableTbody.svelte @@ -6,26 +6,6 @@ const { children }: Props = $props(); - - {@render children?.()} diff --git a/src/core/components/Table/TableTbodyTd.svelte b/src/core/components/Table/TableTbodyTd.svelte index 08bd0e069..f84dd6cbb 100644 --- a/src/core/components/Table/TableTbodyTd.svelte +++ b/src/core/components/Table/TableTbodyTd.svelte @@ -1,85 +1,152 @@ - + {@render children?.()} diff --git a/src/core/components/Table/TableTbodyTr.svelte b/src/core/components/Table/TableTbodyTr.svelte index 3ee91c8d6..6ea584814 100644 --- a/src/core/components/Table/TableTbodyTr.svelte +++ b/src/core/components/Table/TableTbodyTr.svelte @@ -1,14 +1,31 @@ - + {@render children?.()} diff --git a/src/core/components/Table/TableThead.svelte b/src/core/components/Table/TableThead.svelte index 0bc027c90..7a055429b 100644 --- a/src/core/components/Table/TableThead.svelte +++ b/src/core/components/Table/TableThead.svelte @@ -2,20 +2,22 @@ import type { Snippet } from 'svelte'; interface Props { children?: Snippet; + hiddenOnMobile?: boolean; + hiddenOnDesktop?: boolean; } - const { children }: Props = $props(); + const { children, hiddenOnMobile = false, hiddenOnDesktop = false }: Props = $props(); - + {@render children?.()} diff --git a/src/core/components/Table/TableTheadTh.svelte b/src/core/components/Table/TableTheadTh.svelte index 9866a6517..7286e67ed 100644 --- a/src/core/components/Table/TableTheadTh.svelte +++ b/src/core/components/Table/TableTheadTh.svelte @@ -2,27 +2,26 @@ import type { Snippet } from 'svelte'; interface Props { children?: Snippet; + align?: 'left' | 'center' | 'right'; + padding?: string; + colspan?: number | string; + expand?: boolean; } - const { children }: Props = $props(); + const { children, align = 'left', colspan, padding = '10px', expand = false }: Props = $props(); + let cs = $derived(colspan ? Number(colspan) : undefined); - + {@render children?.()} diff --git a/src/core/components/Table/TableTheadTr.svelte b/src/core/components/Table/TableTheadTr.svelte index 4f57ee4d6..cd85bb591 100644 --- a/src/core/components/Table/TableTheadTr.svelte +++ b/src/core/components/Table/TableTheadTr.svelte @@ -2,16 +2,19 @@ import type { Snippet } from 'svelte'; interface Props { children?: Snippet; + backgroundColor?: string; + color?: string; } - const { children }: Props = $props(); + const { children, backgroundColor = '--primary-background', color = '--primary-foreground' }: Props = $props(); - + {@render children?.()} diff --git a/src/core/components/Tabs/Tabs.svelte b/src/core/components/Tabs/Tabs.svelte index 460024596..9e0170b97 100644 --- a/src/core/components/Tabs/Tabs.svelte +++ b/src/core/components/Tabs/Tabs.svelte @@ -1,13 +1,26 @@ + + -
- +
+
+ {#if children} + {@render children?.()} + {/if} +
diff --git a/src/core/components/Tabs/TabsItem.svelte b/src/core/components/Tabs/TabsItem.svelte index 6c5c6830c..87834ffeb 100644 --- a/src/core/components/Tabs/TabsItem.svelte +++ b/src/core/components/Tabs/TabsItem.svelte @@ -1,11 +1,15 @@ - - +
{#if img} diff --git a/src/core/components/Tooltip/Tooltip.svelte b/src/core/components/Tooltip/Tooltip.svelte index 40ecb333a..859ff7a74 100644 --- a/src/core/components/Tooltip/Tooltip.svelte +++ b/src/core/components/Tooltip/Tooltip.svelte @@ -1,18 +1,15 @@ @@ -44,10 +39,9 @@ width: max-content; top: 0; left: 0; - - background-color: #000000d6; + background-color: var(--default-foreground); border-radius: 6px; - color: white; + color: var(--default-background); padding: 6px; font-size: 12px; line-height: 16px; diff --git a/src/core/components/TopBar/TopBar.svelte b/src/core/components/TopBar/TopBar.svelte index bf1f15079..347565363 100644 --- a/src/core/components/TopBar/TopBar.svelte +++ b/src/core/components/TopBar/TopBar.svelte @@ -6,30 +6,39 @@ top: 0; align-items: center; gap: 24px; - min-height: calc(var(--menu-height) - 20px); + box-sizing: border-box; + min-height: var(--menu-height); background-color: var(--secondary-background); color: var(--secondary-foreground); box-shadow: var(--shadow); padding: 10px; + } + + .top-bar .left, + .top-bar .center, + .top-bar .right { + display: flex; + flex-direction: row; + align-items: center; + gap: 10px; + flex: 1; + width: 100%; + } - .left, - .center, - .right { - display: flex; - flex-direction: row; - align-items: center; - gap: 10px; - flex: 1; - width: 100%; - } + .top-bar .left :global(h1), + .top-bar .center :global(h1), + .top-bar .right :global(h1) { + white-space: nowrap; + margin: 0 !important; + font-size: 24px; + } - .center { - justify-content: center; - } + .top-bar .center { + justify-content: center; + } - .right { - justify-content: end; - } + .top-bar .right { + justify-content: end; } diff --git a/src/core/components/VersionInfo/VersionInfo.svelte b/src/core/components/VersionInfo/VersionInfo.svelte index ff24170df..7b9d2c841 100644 --- a/src/core/components/VersionInfo/VersionInfo.svelte +++ b/src/core/components/VersionInfo/VersionInfo.svelte @@ -1,11 +1,10 @@ + + + +{#if show} + + {#if $isMobile} +
+ {/if} +
+ {#if showContent} +
+ {#if title} +
+ {#if optionalIcon} +
+
e.stopPropagation()}> + +
+
+ {/if} +
{title}
+
+
+ {#if max} +
e.stopPropagation()}> + (maximized ? restore() : maximize())} /> +
+ {/if} +
e.stopPropagation()}> + +
+
+ {/if} +
+
+ {#if $debug} + params: {JSON.stringify({ params })} + {/if} + {#if typeof WindowBody === 'function'} + + {/if} + {#if children} + {@render children?.()} + {/if} + {#if top} +
+ {@render top?.()} +
+ {/if} + {#if center} +
+ {@render center?.()} +
+ {/if} + {#if bottom} +
+ {@render bottom?.()} +
+ {/if} +
+ {/if} +
+
+{/if} diff --git a/src/core/components/Wizard/Wizard.svelte b/src/core/components/Wizard/Wizard.svelte index c47cf1a5e..841643291 100644 --- a/src/core/components/Wizard/Wizard.svelte +++ b/src/core/components/Wizard/Wizard.svelte @@ -1,8 +1,6 @@ + +{#snippet snippet_top()} +
+ + + + + + {#if !isInWelcomeWizard} + + {/if} + {#if error} + + {/if} + +{/snippet} +{#snippet snippet_bottom()} +
+ + {#if params.id === null} +
+{/snippet} diff --git a/src/core/modals/Accounts/AccountsAddEdit.svelte b/src/core/modals/Accounts/AccountsAddEdit.svelte deleted file mode 100644 index c366bd993..000000000 --- a/src/core/modals/Accounts/AccountsAddEdit.svelte +++ /dev/null @@ -1,236 +0,0 @@ - - - - -
- - - - - - {#if !isInWelcomeWizard} - - {/if} - {#if error} -
- Error: - {error} -
- {/if} - {#if params.id === null} -
diff --git a/src/core/modals/Accounts/AccountsDelete.svelte b/src/core/modals/Accounts/AccountsDelete.svelte deleted file mode 100644 index e9a1980bb..000000000 --- a/src/core/modals/Accounts/AccountsDelete.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - - - -
- Would you like to delete the account {#if $account?.settings?.title}"{$account?.settings?.title}" ({/if}{$account?.credentials?.address} at {$account?.credentials?.server}{#if $account?.settings?.title}){/if}? -
- - {/if} -
- {:else} -
Generating QR code...
- {/if} -
diff --git a/src/core/modals/Accounts/AccountsImport.svelte b/src/core/modals/Accounts/AccountsImport.svelte deleted file mode 100644 index 74d61052b..000000000 --- a/src/core/modals/Accounts/AccountsImport.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - (activeTab = 'json')} /> - (activeTab = 'qr')} /> - - -{#if activeTab === 'json'} - -{:else if activeTab === 'qr'} - -{/if} diff --git a/src/core/modals/Accounts/AccountsImportJson.svelte b/src/core/modals/Accounts/AccountsImportJson.svelte deleted file mode 100644 index 1f875aea8..000000000 --- a/src/core/modals/Accounts/AccountsImportJson.svelte +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/src/core/modals/Accounts/AccountsImportQR.svelte b/src/core/modals/Accounts/AccountsImportQR.svelte deleted file mode 100644 index a29a610b6..000000000 --- a/src/core/modals/Accounts/AccountsImportQR.svelte +++ /dev/null @@ -1,228 +0,0 @@ - - - - -{#if scannedText} - - -{:else} - -
- {#if error} -
{error}
-
-{/if} diff --git a/src/core/modals/Settings/Settings.svelte b/src/core/modals/Settings/Settings.svelte deleted file mode 100644 index b6ff42051..000000000 --- a/src/core/modals/Settings/Settings.svelte +++ /dev/null @@ -1,182 +0,0 @@ - - - - -{#snippet breadcrumbs(menuItems)} - {#if activeTab !== ''} - - {/if} - {#each menuItems as item} - {#if activeTab === ''} - setItem(item.title.toLowerCase())} /> - {/if} - {/each} -{/snippet} - -
- {@render breadcrumbs(menuItems)} -
- {#if activeTab === 'general'} - - {:else if activeTab === 'appearance'} - - {:else if activeTab === 'notifications'} - - {/if} -
-
diff --git a/src/core/pages/AccountsPage/AccountsContent.svelte b/src/core/pages/AccountsPage/AccountsContent.svelte index f6e546514..bb2f66fb1 100644 --- a/src/core/pages/AccountsPage/AccountsContent.svelte +++ b/src/core/pages/AccountsPage/AccountsContent.svelte @@ -1,5 +1,8 @@ - - -{#snippet accountTable(account)} - - - - - - - - - - - - - - - - - -
ServerAddressEnabledAction
{account.credentials.server}{account.credentials.address}{account.enabled ? 'Yes' : 'No'} - - clickEdit(account.id)} /> - clickDel(account.id)} /> - -
-{/snippet} - -{#snippet status(account)} -
- -
-{/snippet} - -
- - - - - - - - - -
- - -
-
- - - - - + + + {#snippet left()} + + + {/snippet} + {#snippet right()} + + {/snippet} + + + +
+ {:else} + + {/if} + + + diff --git a/src/core/windows/Settings/Settings.svelte b/src/core/windows/Settings/Settings.svelte new file mode 100644 index 000000000..bce94e4df --- /dev/null +++ b/src/core/windows/Settings/Settings.svelte @@ -0,0 +1,76 @@ + + + diff --git a/src/core/windows/Settings/SettingsAppearance.svelte b/src/core/windows/Settings/SettingsAppearance.svelte new file mode 100644 index 000000000..f674524ca --- /dev/null +++ b/src/core/windows/Settings/SettingsAppearance.svelte @@ -0,0 +1,94 @@ + + + + + + + {#if TAURI} + + + + + {/if} + + + + + + + + + +
Zoom: + {Math.round(($zoom || 0) * 100)}% +
+ +
+
Follow browser theme preference: + + Theme: +
+ + + {#if $selected_theme_index > 1} + await setSettingsSection('edit-theme')} testId="theme-edit-button" /> + + {/if} + create_new_theme()} testId="theme-add-button" /> + +
+
diff --git a/src/core/windows/Settings/SettingsAppearanceTheme.svelte b/src/core/windows/Settings/SettingsAppearanceTheme.svelte new file mode 100644 index 000000000..12c70e154 --- /dev/null +++ b/src/core/windows/Settings/SettingsAppearanceTheme.svelte @@ -0,0 +1,133 @@ + + + + + + + + + {#each theme_properties as theme_property_name} + + + + + {/each} + +
Name + + {theme_property_name} + {#if theme_property_name === '--background-image'} + + {:else} + + {$theme.properties[theme_property_name]} + {/if} +
diff --git a/src/core/windows/Settings/SettingsGeneral.svelte b/src/core/windows/Settings/SettingsGeneral.svelte new file mode 100644 index 000000000..5deedada4 --- /dev/null +++ b/src/core/windows/Settings/SettingsGeneral.svelte @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + +
Run on system startup: + runOnSystemStartup.set(v)} /> + Show tray icon: + showTrayIcon.set(v)} /> + Close to minimize: + closeToMinimize.set(v)} /> +
diff --git a/src/core/windows/Settings/SettingsModules.svelte b/src/core/windows/Settings/SettingsModules.svelte new file mode 100644 index 000000000..ac5654839 --- /dev/null +++ b/src/core/windows/Settings/SettingsModules.svelte @@ -0,0 +1,172 @@ + + + + +
+
+
{Object.values($modules_config.modules).filter(m => m.enabled).length} of {Object.values($modules_config.modules).length} modules enabled
+
+ {#each sortedModules as module (module.id)} +
+
+
+ +
+
{module.name}
+
{module.id}
+
+
+ toggleEnabled(module.id) }} /> +
+ {#if module.enabled} +
+
+
Type:
+ +
+
+
Service URL:
+
+ {#if editingModule === module.id} + + +
+ {/if} +
+ {/each} +
diff --git a/src/core/windows/Settings/SettingsNotifications.svelte b/src/core/windows/Settings/SettingsNotifications.svelte new file mode 100644 index 000000000..3fe1497d3 --- /dev/null +++ b/src/core/windows/Settings/SettingsNotifications.svelte @@ -0,0 +1,124 @@ + + + + +
+ + + {#if CUSTOM_NOTIFICATIONS} + {#if $customNotificationsOn} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Animation: + + Animation duration: + ms + Maximum number of lines in title: + + Maximum number of lines in description: + + Background color: +
+ + {$bgColor} +
+
Background color on mouse over: +
+ + {$bgColorHover} +
+
Border color: +
+ + {$borderColor} +
+
Title color: +
+ + {$titleColor} +
+
Description color: +
+ + {$descColor} +
+
+ {/if} + {/if} +
diff --git a/src/core/windows/Settings/SettingsNotificationsAlert.svelte b/src/core/windows/Settings/SettingsNotificationsAlert.svelte new file mode 100644 index 000000000..2503bb323 --- /dev/null +++ b/src/core/windows/Settings/SettingsNotificationsAlert.svelte @@ -0,0 +1,10 @@ + + +{#if $notificationsSettingsAlert === 'blocked'} + +{:else if $notificationsSettingsAlert === 'not-supported'} + +{/if} diff --git a/src/core/components/Settings/SettingsNotificationsBasic.svelte b/src/core/windows/Settings/SettingsNotificationsBasic.svelte similarity index 74% rename from src/core/components/Settings/SettingsNotificationsBasic.svelte rename to src/core/windows/Settings/SettingsNotificationsBasic.svelte index 5c2845a51..09ec32985 100644 --- a/src/core/components/Settings/SettingsNotificationsBasic.svelte +++ b/src/core/windows/Settings/SettingsNotificationsBasic.svelte @@ -1,35 +1,27 @@ - - - - - - - - - - +
Notifications:Notification sound:Custom notifications:Monitor:Corner:
- + - + - {#if $customNotificationsOn} - + - {#if $customNotificationsOn} - + - + - {/if} + {/if} - + {/if}
+ Notifications: + + + Notification sound: + + {#if $customNotificationsOn} + + Custom notifications: + + {#if $customNotificationsOn} + + Monitor: {#if $debug}$selectedMonitorName:{$selectedMonitorName}{/if} + + + Corner:
diff --git a/src/core/wizard/WelcomeStep1.svelte b/src/core/wizard/WelcomeStep1.svelte index 52199520f..3f22f4de4 100644 --- a/src/core/wizard/WelcomeStep1.svelte +++ b/src/core/wizard/WelcomeStep1.svelte @@ -1,5 +1,5 @@ - @@ -20,11 +20,11 @@ display: flex; justify-content: center; margin: 20px 0; + } - :global(img) { - animation: bounce 1.5s ease; - animation-fill-mode: forwards; - } + .logo :global(img) { + animation: bounce 1.5s ease; + animation-fill-mode: forwards; } @keyframes bounce { diff --git a/src/core/wizard/WelcomeStep2.svelte b/src/core/wizard/WelcomeStep2.svelte index 0bb69dd18..8ed8bbfae 100644 --- a/src/core/wizard/WelcomeStep2.svelte +++ b/src/core/wizard/WelcomeStep2.svelte @@ -1,15 +1,35 @@ - - + + + +{#if snippet_top && snippet_bottom} +
+
{@render snippet_top()}
+
{@render snippet_bottom()}
+
+{/if} diff --git a/src/core/wizard/WelcomeStep3.svelte b/src/core/wizard/WelcomeStep3.svelte index 1d5c99ff2..780008965 100644 --- a/src/core/wizard/WelcomeStep3.svelte +++ b/src/core/wizard/WelcomeStep3.svelte @@ -1,6 +1,6 @@ - diff --git a/src/core/wizard/WelcomeStep4.svelte b/src/core/wizard/WelcomeStep4.svelte index 72f324120..a7e04e112 100644 --- a/src/core/wizard/WelcomeStep4.svelte +++ b/src/core/wizard/WelcomeStep4.svelte @@ -1,5 +1,5 @@ - You are all set up. Enjoy {product}! diff --git a/src/css/app.css b/src/css/app.css deleted file mode 100644 index d630d6040..000000000 --- a/src/css/app.css +++ /dev/null @@ -1,85 +0,0 @@ -@import './normalize.css'; - -:root { - --menu-height: 58px; - --shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.5); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--primary-harder-background) var(--primary-soft-background); -} - -@media (prefers-reduced-motion: no-preference) { - html { - interpolate-size: allow-keywords; - } -} - -body { - font-family: 'Ubuntu', sans-serif; - margin: 0px; -} - -.bold { - font-weight: bold; -} - -/** - * Utils - */ - -.button-reset { - text-align: inherit; - border: none; - margin: 0; - padding: 0; - width: auto; - overflow: visible; - background: transparent; - - /* inherit font & color from ancestor */ - color: inherit; - font: inherit; - - /* Normalize `line-height`. Cannot be changed from `normal` in Firefox 4+. */ - line-height: normal; - - /* Corrects font smoothing for webkit */ - -webkit-font-smoothing: inherit; - -moz-osx-font-smoothing: inherit; - - /* Corrects inability to style clickable `input` types in iOS */ - -webkit-appearance: none; -} - -.floating { - position: absolute; - width: max-content; - top: 0; - left: 0; -} - -/** - * Animations - */ - -:root { - --animation-highlight-duration: 0.5; -} - -@keyframes pulse { - 0% { - transform: scale(1); - } - 50% { - transform: scale(1.2); - } - 100% { - transform: scale(1); - } -} - -.animation-highlight { - animation: pulse var(--animation-highlight-duration) ease-in-out !important; -} diff --git a/src/css/normalize.css b/src/css/normalize.css deleted file mode 100644 index 910da1f23..000000000 --- a/src/css/normalize.css +++ /dev/null @@ -1,352 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - box-sizing: border-box; -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { - /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { - /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type='search'] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} diff --git a/src/hooks.client.ts b/src/hooks.client.ts index a1fe8c23e..95c6db774 100644 --- a/src/hooks.client.ts +++ b/src/hooks.client.ts @@ -1,10 +1,10 @@ // import { handleErrorWithSentry, replayIntegration } from '@sentry/sveltekit'; import * as Sentry from '@sentry/sveltekit'; -import { sentryClientConfig } from '@/core/sentry-config'; +import { sentryClientConfig } from '@/core/scripts/sentry-config.ts'; // Only initialize Sentry if enabled -const sentryEnabled = /^(true|1|yes|on)$/i.test((import.meta.env.VITE_SENTRY_ENABLED || '').trim()); +const sentryEnabled = /^(true|1|yes|on)$/i.test((import.meta.env['VITE_SENTRY_ENABLED'] || '').trim()); if (sentryEnabled) { Sentry.init({ @@ -14,10 +14,16 @@ if (sentryEnabled) { }); } -// If you have a custom error handler, pass it to `handleErrorWithSentry` -export const handleError = sentryEnabled - ? handleErrorWithSentry() - : ({ error }) => { - console.error('Unhandled error:', error); - }; // + +// If you have a custom error handler, pass it to `handleErrorWithSentry` +export async function handleError(eee: any): Promise<{ message: string }> { + console.error('handleError:', eee.error); + if (sentryEnabled) { + return await handleErrorWithSentry(eee); + } else return { message: eee.message || 'An error occurred' }; +} + +export function init(): void { + //console.log('Client-side initialization complete'); +} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index c0e97daf3..fd31e6a36 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,34 +1,21 @@ -import type { Handle } from '@sveltejs/kit'; -import { paraglideMiddleware } from '$lib/paraglide/server'; - import { sequence } from '@sveltejs/kit/hooks'; import * as Sentry from '@sentry/sveltekit'; import { handleErrorWithSentry, sentryHandle } from '@sentry/sveltekit'; -import { sentryServerConfig } from '@/core/sentry-config'; +import { sentryServerConfig } from '@/core/scripts/sentry-config.ts'; // Only initialize Sentry if enabled -const sentryEnabled = /^(true|1|yes|on)$/i.test((process.env.VITE_SENTRY_ENABLED || '').trim()); +const sentryEnabled = /^(true|1|yes|on)$/i.test((process.env['VITE_SENTRY_ENABLED'] || '').trim()); if (sentryEnabled) { Sentry.init({ ...sentryServerConfig, // uncomment the line below to enable Spotlight (https://spotlightjs.com) - // spotlight: import.meta.env.DEV, + // spotlight: import.meta.env['DEV'], }); } -const handleParaglide: Handle = ({ event, resolve }) => { - return paraglideMiddleware(event.request, ({ request, locale }) => { - event.request = request; - - return resolve(event, { - transformPageChunk: ({ html }) => html.replace('%paraglide.lang%', locale), - }); - }); -}; - // If you have custom handlers, make sure to place them after `sentryHandle()` in the `sequence` function. -export const handle = sentryEnabled ? sequence(sentryHandle(), handleParaglide) : sequence(handleParaglide); +export const handle = sentryEnabled ? sequence(sentryHandle()) : sequence(); // If you have a custom error handler, pass it to `handleErrorWithSentry` export const handleError = sentryEnabled diff --git a/src/hooks.ts b/src/hooks.ts deleted file mode 100644 index 0988131ea..000000000 --- a/src/hooks.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { deLocalizeUrl } from '$lib/paraglide/runtime'; - -export const reroute = (request: { url: URL }) => deLocalizeUrl(request.url).pathname; diff --git a/src/lib/index.js b/src/lib/index.js deleted file mode 100644 index 856f2b6c3..000000000 --- a/src/lib/index.js +++ /dev/null @@ -1 +0,0 @@ -// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/modal-index-manager.ts b/src/lib/modal-index-manager.ts deleted file mode 100644 index 91dd2be47..000000000 --- a/src/lib/modal-index-manager.ts +++ /dev/null @@ -1,33 +0,0 @@ -// modal-manager.ts -type ModalEntry = { - id: number; - setZIndex: (z: number) => void; -}; - -const baseZIndex = 5; -let counter = baseZIndex; -let modals: ModalEntry[] = []; - -export function registerModal(setZIndex: (z: number) => void): number { - const id = counter++; - modals.push({ id, setZIndex }); - updateZIndices(id); - return id; -} - -export function unregisterModal(id: number) { - modals = modals.filter(m => m.id !== id); - updateZIndices(); // reassign after one closes -} - -export function bringToFront(id: number) { - updateZIndices(id); -} - -function updateZIndices(focusId?: number) { - let base = baseZIndex; - modals.sort((a, b) => (a.id === focusId ? 1 : b.id === focusId ? -1 : 0)); - for (const modal of modals) { - modal.setZIndex(base++); - } -} diff --git a/src/lib/utils/shortenAddress.ts b/src/lib/shortenAddress.ts similarity index 67% rename from src/lib/utils/shortenAddress.ts rename to src/lib/shortenAddress.ts index 94b3846d2..7ef43d937 100644 --- a/src/lib/utils/shortenAddress.ts +++ b/src/lib/shortenAddress.ts @@ -1,4 +1,4 @@ -export function shortenAddress(addr: string) { +export function shortenAddress(addr: string): string { if (!addr) return ''; if (addr.length <= 8) return addr; return addr.slice(0, 5) + '...' + addr.slice(-3); diff --git a/src/lib/svelte-shared-store.ts b/src/lib/svelte-shared-store.ts index 8c1303420..a0fa41207 100644 --- a/src/lib/svelte-shared-store.ts +++ b/src/lib/svelte-shared-store.ts @@ -1,20 +1,47 @@ import { writable, get, type Writable } from 'svelte/store'; +// Storage abstraction - use localStorage in browser, in-memory fallback for SSR +let storage: Storage; +if (typeof window !== 'undefined' && window.localStorage) { + storage = window.localStorage; +} else { + // SSR fallback - in-memory storage (no persistence needed during SSR) + const map = new Map(); + storage = { + get length(): number { + return map.size; + }, + clear(): void { + map.clear(); + }, + getItem(key: string): string | null { + return map.get(key) ?? null; + }, + key(index: number): string | null { + return [...map.keys()][index] ?? null; + }, + removeItem(key: string): void { + map.delete(key); + }, + setItem(key: string, value: string): void { + map.set(key, value); + }, + }; +} + export function localStorageSharedStore(name: string, default_: T): Writable { function setStorage(value: T): void { const str = JSON.stringify(value); //console.log('SAVE', name, str); - window.localStorage.setItem(name, str); + storage.setItem(name, str); } function getStorage(): T { - const item = window.localStorage.getItem(name); + const item = storage.getItem(name); let result: T = default_; try { //console.log('LOAD', name, item); - if (item !== null) { - result = JSON.parse(item) as T; - } + if (item !== null) result = JSON.parse(item) as T; } catch (e) { console.error('trying to parse: "' + item + '"'); console.error(e); @@ -37,12 +64,16 @@ export function localStorageSharedStore(name: string, default_: T): Writable< } } - // Add the event listener - window.addEventListener('storage', handleStorageEvent); + // Add the event listener (only in browser) + if (typeof window !== 'undefined') { + window.addEventListener('storage', handleStorageEvent); + } // Return the unsubscribe function that removes the event listener return () => { - window.removeEventListener('storage', handleStorageEvent); + if (typeof window !== 'undefined') { + window.removeEventListener('storage', handleStorageEvent); + } }; }); @@ -72,11 +103,11 @@ export function localStorageReadOnceSharedStore(name: string, default_: T): W function setStorage(value: T): void { const str = JSON.stringify(value); //console.log('SAVE', name, str); - window.localStorage.setItem(name, str); + storage.setItem(name, str); } function getStorage(): T { - const item = window.localStorage.getItem(name); + const item = storage.getItem(name); let result: T = default_; try { if (item !== 'undefined' && item) result = JSON.parse(item) as T; diff --git a/src/lib/window-index-manager.ts b/src/lib/window-index-manager.ts new file mode 100644 index 000000000..869366fa4 --- /dev/null +++ b/src/lib/window-index-manager.ts @@ -0,0 +1,33 @@ +// window-manager.ts +type WindowEntry = { + id: number; + setZIndex: (z: number) => void; +}; + +const baseZIndex = 101; +let counter = baseZIndex; +let windows: WindowEntry[] = []; + +export function registerWindow(setZIndex: (z: number) => void): number { + const id = counter++; + windows.push({ id, setZIndex }); + updateZIndices(id); + return id; +} + +export function unregisterWindow(id: number): void { + windows = windows.filter(m => m.id !== id); + updateZIndices(); // reassign after one closes +} + +export function bringToFront(id: number): void { + updateZIndices(id); +} + +function updateZIndices(focusId?: number): void { + let base = baseZIndex; + windows.sort((a, b) => (a.id === focusId ? 1 : b.id === focusId ? -1 : 0)); + for (const window of windows) { + window.setZIndex(base++); + } +} diff --git a/src/modules/org.libersoft.contacts/contacts.js b/src/modules/org.libersoft.contacts/contacts.js deleted file mode 100644 index c9dd32953..000000000 --- a/src/modules/org.libersoft.contacts/contacts.js +++ /dev/null @@ -1,4 +0,0 @@ -export function initData(acc) { - let result = {}; - return result; -} diff --git a/src/modules/org.libersoft.contacts/module.js b/src/modules/org.libersoft.contacts/module.js deleted file mode 100644 index 2ef37676d..000000000 --- a/src/modules/org.libersoft.contacts/module.js +++ /dev/null @@ -1,18 +0,0 @@ -import { registerModule } from '@/core/core.ts'; -import { initData } from './contacts.js'; -import ContactsSidebar from './pages/ContactsPage/ContactsSidebar.svelte'; -import ContactsContent from './pages/ContactsPage/ContactsContent.svelte'; - -export const module = { - name: 'Contacts', - identifier: 'org.libersoft.contacts', -}; - -registerModule(module.identifier, { - order: 2, - callbacks: { initData }, - panels: { - sidebar: ContactsSidebar, - content: ContactsContent, - }, -}); diff --git a/src/modules/org.libersoft.contacts/pages/ContactsPage/ContactsContent.svelte b/src/modules/org.libersoft.contacts/pages/ContactsPage/ContactsContent.svelte deleted file mode 100644 index 90a089d60..000000000 --- a/src/modules/org.libersoft.contacts/pages/ContactsPage/ContactsContent.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - -
Contact list - content page - not yet implemented
- diff --git a/src/modules/org.libersoft.contacts/pages/ContactsPage/ContactsSidebar.svelte b/src/modules/org.libersoft.contacts/pages/ContactsPage/ContactsSidebar.svelte deleted file mode 100644 index b71697128..000000000 --- a/src/modules/org.libersoft.contacts/pages/ContactsPage/ContactsSidebar.svelte +++ /dev/null @@ -1 +0,0 @@ -
Contact list - side bar - not yet implemented
diff --git a/src/modules/org.libersoft.contacts/pages/Main/Content.svelte b/src/modules/org.libersoft.contacts/pages/Main/Content.svelte new file mode 100644 index 000000000..267ad5336 --- /dev/null +++ b/src/modules/org.libersoft.contacts/pages/Main/Content.svelte @@ -0,0 +1,45 @@ + + + + + {#snippet left()} + + + {/snippet} + {#snippet right()} + + {/snippet} + + +
Contact list - content
+
+
diff --git a/src/modules/org.libersoft.contacts/pages/Main/Sidebar.svelte b/src/modules/org.libersoft.contacts/pages/Main/Sidebar.svelte new file mode 100644 index 000000000..1ef657b20 --- /dev/null +++ b/src/modules/org.libersoft.contacts/pages/Main/Sidebar.svelte @@ -0,0 +1,12 @@ + + + +
Contact list - sidebar
diff --git a/src/modules/org.libersoft.contacts/scripts/contacts.ts b/src/modules/org.libersoft.contacts/scripts/contacts.ts new file mode 100644 index 000000000..5a020d82a --- /dev/null +++ b/src/modules/org.libersoft.contacts/scripts/contacts.ts @@ -0,0 +1,4 @@ +export function initData(_acc): Record { + let result = {}; + return result; +} diff --git a/src/modules/org.libersoft.contacts/scripts/module.ts b/src/modules/org.libersoft.contacts/scripts/module.ts new file mode 100644 index 000000000..a4ec32e5e --- /dev/null +++ b/src/modules/org.libersoft.contacts/scripts/module.ts @@ -0,0 +1,22 @@ +import { registerModule } from '@/core/scripts/core.ts'; +import { initData } from './contacts.ts'; +import Sidebar from '../pages/Main/Sidebar.svelte'; +import Content from '../pages/Main/Content.svelte'; +export const module: IModule = { + name: 'Contacts', + identifier: 'org.libersoft.contacts', +}; +interface IModule { + name: string; + identifier: string; +} + +registerModule({ + id: module.identifier, + order: 2, + callbacks: { initData }, + panels: { + sidebar: Sidebar, + content: Content, + }, +}); diff --git a/src/modules/org.libersoft.dating/components/Content.svelte b/src/modules/org.libersoft.dating/components/Content.svelte deleted file mode 100644 index 64f68fe34..000000000 --- a/src/modules/org.libersoft.dating/components/Content.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - -
- -
diff --git a/src/modules/org.libersoft.dating/components/Map.svelte b/src/modules/org.libersoft.dating/components/Map.svelte index 7894e53a3..2a56f1775 100644 --- a/src/modules/org.libersoft.dating/components/Map.svelte +++ b/src/modules/org.libersoft.dating/components/Map.svelte @@ -1,18 +1,145 @@ - @@ -21,8 +148,20 @@ height: 100%; width: 100%; } + + .loading { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + width: 100%; + } -{#if latitude && longitude} +{#if myCoordinates.latitude && myCoordinates.longitude}
+{:else} +
+ +
{/if} diff --git a/src/modules/org.libersoft.dating/components/PhotoCard.svelte b/src/modules/org.libersoft.dating/components/PhotoCard.svelte index 407c3923c..978f23cd8 100644 --- a/src/modules/org.libersoft.dating/components/PhotoCard.svelte +++ b/src/modules/org.libersoft.dating/components/PhotoCard.svelte @@ -1,44 +1,87 @@ - @@ -47,45 +90,46 @@ position: relative; display: flex; flex-direction: column; - width: 300px; - height: 400px; + width: 100%; + height: 100%; border-radius: 10px; - background-color: #eee; overflow: hidden; - /*align-items: center; - justify-content: space-between;*/ touch-action: pan-y; transition: transform 0.3s ease-out; + cursor: grab; + user-select: none; } .photo-card.moving { transition: none; + cursor: grabbing; } .photo-card img { width: 100%; - height: auto; + height: 100%; object-fit: cover; + flex: 1; } .photo-card .overlay { + z-index: 2; position: absolute; bottom: 0; left: 0; width: 100%; - background: rgba(0, 0, 0, 0.5); - color: white; - z-index: 2; + background: var(--default-foreground); + color: var(--default-background); padding: 10px; - text-align: center; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; } - .card-buttons { - display: flex; - width: 100%; - justify-content: space-around; - margin-bottom: 10px; - z-index: 3000; + .overlay-content { + flex: 1; + text-align: center; } .overlay .title { @@ -93,16 +137,46 @@ font-weight: bold; padding-bottom: 10px; } + + .swipe-indicator { + position: absolute; + top: 50%; + transform: translateY(-50%); + font-size: 48px; + font-weight: bold; + opacity: 0; + transition: opacity 0.2s ease-out; + z-index: 4; + pointer-events: none; + } + + .swipe-indicator.like { + right: 20px; + color: #4caf50; + } + + .swipe-indicator.nope { + left: 20px; + color: #f44336; + } + + .swipe-indicator.visible { + opacity: 1; + } -
startSwipe(e)} on:touchmove={e => moveSwipe(e)} on:touchend={e => endSwipe(e)}> +
startSwipe(e)} ontouchmove={e => moveSwipe(e)} ontouchend={e => endSwipe(e)} onmousedown={e => startSwipe(e)} onmousemove={e => moveSwipe(e)} onmouseup={e => endSwipe(e)} onmouseleave={e => handleMouseLeave(e)}> {photo.name}
-
{photo.name}
-
{photo.description}
-
-
- - + +
+
{photo.name}
+
{photo.description}
+
+
+ + + +
👎 NOPE
diff --git a/src/modules/org.libersoft.dating/components/PhotoCardButton.svelte b/src/modules/org.libersoft.dating/components/PhotoCardButton.svelte index 5c220bbbb..a69153cac 100644 --- a/src/modules/org.libersoft.dating/components/PhotoCardButton.svelte +++ b/src/modules/org.libersoft.dating/components/PhotoCardButton.svelte @@ -1,21 +1,42 @@ - - -
{content}
-
+ diff --git a/src/modules/org.libersoft.dating/components/PhotoCards.svelte b/src/modules/org.libersoft.dating/components/PhotoCards.svelte new file mode 100644 index 000000000..d5157eb4c --- /dev/null +++ b/src/modules/org.libersoft.dating/components/PhotoCards.svelte @@ -0,0 +1,102 @@ + + + + +
+
+ {#if isLoading} +
+ +
+ {:else if photos.length > 0} + {#each photos as photo, index (photo.name + index)} +
+ +
+ {/each} + {:else} +
+

No more cards to display

+
+ {/if} +
+
diff --git a/src/modules/org.libersoft.dating/components/SidebarCategory.svelte b/src/modules/org.libersoft.dating/components/SidebarCategory.svelte index 2443f2483..73e684862 100644 --- a/src/modules/org.libersoft.dating/components/SidebarCategory.svelte +++ b/src/modules/org.libersoft.dating/components/SidebarCategory.svelte @@ -1,12 +1,15 @@ - {#if label || img} @@ -23,7 +32,7 @@ {/if} {#if label} -
{label}
+
{label}
{/if}
diff --git a/src/modules/org.libersoft.dating/dating.js b/src/modules/org.libersoft.dating/dating.js deleted file mode 100644 index 0756efc50..000000000 --- a/src/modules/org.libersoft.dating/dating.js +++ /dev/null @@ -1,19 +0,0 @@ -import { writable } from 'svelte/store'; -import { hideSidebarMobile } from '@/core/core.ts'; -import { selected_module_id } from '@/core/stores.ts'; -export let page = writable('people'); - -export function setPage(name) { - page.set(name); - hideSidebarMobile.set(true); -} - -export function closePage() { - page.set(null); - hideSidebarMobile.set(false); -} - -export function closeModule() { - hideSidebarMobile.set(false); - selected_module_id.set(null); -} diff --git a/src/modules/org.libersoft.dating/module.js b/src/modules/org.libersoft.dating/module.js deleted file mode 100644 index 06024cf3d..000000000 --- a/src/modules/org.libersoft.dating/module.js +++ /dev/null @@ -1,17 +0,0 @@ -import { registerModule } from '@/core/core.ts'; -import Sidebar from './pages/DatingSidebar.svelte'; -import Content from './pages/DatingContent.svelte'; - -export const module = { - name: 'Dating', - identifier: 'org.libersoft.dating', -}; - -registerModule(module.identifier, { - order: 4, - callbacks: {}, - panels: { - sidebar: Sidebar, - content: Content, - }, -}); diff --git a/src/modules/org.libersoft.dating/pages/DatingContent.svelte b/src/modules/org.libersoft.dating/pages/DatingContent.svelte deleted file mode 100644 index f9f1ec0ac..000000000 --- a/src/modules/org.libersoft.dating/pages/DatingContent.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - -
- {#if $page} - - {:else} - - {/if} -
diff --git a/src/modules/org.libersoft.dating/pages/Main/Content.svelte b/src/modules/org.libersoft.dating/pages/Main/Content.svelte new file mode 100644 index 000000000..d9cd61ae4 --- /dev/null +++ b/src/modules/org.libersoft.dating/pages/Main/Content.svelte @@ -0,0 +1,41 @@ + + + + {#if $page && $page in pages} + + {:else} + + {/if} + diff --git a/src/modules/org.libersoft.dating/pages/DatingSidebar.svelte b/src/modules/org.libersoft.dating/pages/Main/Sidebar.svelte similarity index 65% rename from src/modules/org.libersoft.dating/pages/DatingSidebar.svelte rename to src/modules/org.libersoft.dating/pages/Main/Sidebar.svelte index ce1416f02..efae77928 100644 --- a/src/modules/org.libersoft.dating/pages/DatingSidebar.svelte +++ b/src/modules/org.libersoft.dating/pages/Main/Sidebar.svelte @@ -1,6 +1,6 @@ - - - + + {#snippet left()} - - - - - - - - - + + {/snippet} + {#snippet right()} + + {/snippet} + + + + diff --git a/src/modules/org.libersoft.dating/pages/Match.svelte b/src/modules/org.libersoft.dating/pages/Match.svelte index 30fa690a8..17473058e 100644 --- a/src/modules/org.libersoft.dating/pages/Match.svelte +++ b/src/modules/org.libersoft.dating/pages/Match.svelte @@ -1,27 +1,21 @@ - - + + {#snippet left()} - - - - - - - - - + + {/snippet} + {#snippet right()} + + {/snippet} + + + + diff --git a/src/modules/org.libersoft.dating/pages/People.svelte b/src/modules/org.libersoft.dating/pages/People.svelte index fe3314e27..5ac0900de 100644 --- a/src/modules/org.libersoft.dating/pages/People.svelte +++ b/src/modules/org.libersoft.dating/pages/People.svelte @@ -1,28 +1,163 @@ - - + + + + {#snippet left()} - - - - - - - - {window.innerHeight}
- {window.visualViewport?.height}
- START 1
- START 2
- START 3
- People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
People nearby
- END 1
- END 2
- END 3
-
+ + {/snippet} + {#snippet right()} + + {/snippet} + + +
+ {#each users as user (user.id)} +
+ {user.name} +
+ +
+
+ {/each} +
+
diff --git a/src/modules/org.libersoft.dating/pages/Settings.svelte b/src/modules/org.libersoft.dating/pages/Settings.svelte index b2ebf1ad3..997da8dec 100644 --- a/src/modules/org.libersoft.dating/pages/Settings.svelte +++ b/src/modules/org.libersoft.dating/pages/Settings.svelte @@ -1,18 +1,18 @@ - - + + {#snippet left()} - - - - - - -Settings + + {/snippet} + {#snippet right()} + + {/snippet} + +Settings diff --git a/src/modules/org.libersoft.dating/pages/Welcome.svelte b/src/modules/org.libersoft.dating/pages/Welcome.svelte index a52e3082e..a42d3920a 100644 --- a/src/modules/org.libersoft.dating/pages/Welcome.svelte +++ b/src/modules/org.libersoft.dating/pages/Welcome.svelte @@ -1,17 +1,18 @@ - - + + {#snippet left()} - - - - - - -
Welcome
+ + {/snippet} + {#snippet right()} + + {/snippet} + +Welcome diff --git a/src/modules/org.libersoft.dating/scripts/dating.ts b/src/modules/org.libersoft.dating/scripts/dating.ts new file mode 100644 index 000000000..59034e379 --- /dev/null +++ b/src/modules/org.libersoft.dating/scripts/dating.ts @@ -0,0 +1,20 @@ +import { writable } from 'svelte/store'; +import { setModule } from '@/core/scripts/core.ts'; +import { hideSidebarMobile } from '@/core/scripts/stores.ts'; +type PageName = 'map' | 'match' | 'people' | 'settings' | null; +export let page = writable(null); + +export function setPage(name: NonNullable): void { + page.set(name); + hideSidebarMobile.set(true); +} + +export function closePage(): void { + page.set(null); + hideSidebarMobile.set(false); +} + +export function closeModule(): void { + hideSidebarMobile.set(false); + setModule(null); +} diff --git a/src/modules/org.libersoft.dating/scripts/module.ts b/src/modules/org.libersoft.dating/scripts/module.ts new file mode 100644 index 000000000..53d8e7cf4 --- /dev/null +++ b/src/modules/org.libersoft.dating/scripts/module.ts @@ -0,0 +1,21 @@ +import { registerModule } from '@/core/scripts/core.ts'; +import Sidebar from '../pages/Main/Sidebar.svelte'; +import Content from '../pages/Main/Content.svelte'; +export const module: IModule = { + name: 'Dating', + identifier: 'org.libersoft.dating', +}; +interface IModule { + name: string; + identifier: string; +} + +registerModule({ + id: module.identifier, + order: 4, + callbacks: {}, + panels: { + sidebar: Sidebar, + content: Content, + }, +}); diff --git a/src/modules/org.libersoft.dating/scripts/photocards.ts b/src/modules/org.libersoft.dating/scripts/photocards.ts new file mode 100644 index 000000000..e14f93f2e --- /dev/null +++ b/src/modules/org.libersoft.dating/scripts/photocards.ts @@ -0,0 +1,5 @@ +export interface IPhotoCard { + img: string; + name: string; + description: string; +} diff --git a/src/modules/org.libersoft.iframes/module.js b/src/modules/org.libersoft.iframes/module.js deleted file mode 100644 index 98f7ade55..000000000 --- a/src/modules/org.libersoft.iframes/module.js +++ /dev/null @@ -1,16 +0,0 @@ -import { registerModule } from '@/core/core.ts'; -import Sidebar from './pages/sidebar.svelte'; -import Content from './pages/content.svelte'; -export const module = { - name: 'iFrames', - identifier: 'org.libersoft.iframes', -}; - -registerModule(module.identifier, { - order: 5, - callbacks: {}, - panels: { - sidebar: Sidebar, - content: Content, - }, -}); diff --git a/src/modules/org.libersoft.iframes/pages/content.svelte b/src/modules/org.libersoft.iframes/pages/Main/Content.svelte similarity index 72% rename from src/modules/org.libersoft.iframes/pages/content.svelte rename to src/modules/org.libersoft.iframes/pages/Main/Content.svelte index 0f15b7ff1..38cdd9f08 100644 --- a/src/modules/org.libersoft.iframes/pages/content.svelte +++ b/src/modules/org.libersoft.iframes/pages/Main/Content.svelte @@ -1,13 +1,12 @@ - + + hideSidebarMobile.set(true)} /> + diff --git a/src/modules/org.libersoft.iframes/pages/sidebar.svelte b/src/modules/org.libersoft.iframes/pages/sidebar.svelte deleted file mode 100644 index ff72f0986..000000000 --- a/src/modules/org.libersoft.iframes/pages/sidebar.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
-
- - + + + diff --git a/src/modules/org.libersoft.messages/components/Gallery/Gallery.svelte b/src/modules/org.libersoft.messages/components/Gallery/Gallery.svelte index d7a598056..3e4b92d67 100644 --- a/src/modules/org.libersoft.messages/components/Gallery/Gallery.svelte +++ b/src/modules/org.libersoft.messages/components/Gallery/Gallery.svelte @@ -1,62 +1,64 @@ - {#if $gallery.show} - {#if !download} -
-
+
@@ -224,59 +182,26 @@ isRecording: {isRecording}; loading: {loading}; facingMode: {facingMode} {/if} - diff --git a/src/modules/org.libersoft.messages/components/VideoRecorder/useVideoRecorder.svelte.ts b/src/modules/org.libersoft.messages/components/VideoRecorder/useVideoRecorder.svelte.ts index d2596a7b2..d1bf0757b 100644 --- a/src/modules/org.libersoft.messages/components/VideoRecorder/useVideoRecorder.svelte.ts +++ b/src/modules/org.libersoft.messages/components/VideoRecorder/useVideoRecorder.svelte.ts @@ -1,6 +1,6 @@ import videoJS from 'video.js'; import 'recordrtc'; -import { get, writable } from 'svelte/store'; +import { get, writable, type Writable } from 'svelte/store'; type VideoJSWithRecorder = ReturnType & { record: any; @@ -9,7 +9,28 @@ type VideoJSWithRecorder = ReturnType & { deviceErrorCode: string; }; -function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, opts: any) { +interface IVideoRecorder { + setup: () => Promise; + player: Writable; + loading: Writable; + error: Writable; + errorMessages: Writable; + audioDevices: Writable; + videoDevices: Writable; + selectedVideoDeviceId: Writable; + selectedAudioDeviceId: Writable; + changeVideoInput: (deviceId: string) => void; + changeAudioInput: (deviceId: string) => void; + recordedBlob: Writable; + isMuted: Writable; + toggleMute: () => void; + facingMode: Writable<'user' | 'environment'>; + toggleFacingMode: () => void; + userDeviceId: Writable; + environmentDeviceId: Writable; +} + +function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, opts: any): IVideoRecorder { const player = writable(); const audioDevices = writable([]); const videoDevices = writable([]); @@ -26,7 +47,7 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, const userDeviceId = writable(null); const environmentDeviceId = writable(null); - const makePlayer = () => { + const makePlayer = (): VideoJSWithRecorder => { const videoRef = getVideoRef(); if (!videoRef) { @@ -47,35 +68,50 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, //videoJS.log(msg); }) as VideoJSWithRecorder; }; - async function getDeviceIds() { + async function getDeviceIds(): Promise { try { - // Query front camera (user-facing) - const frontCameraStream = await navigator.mediaDevices.getUserMedia({ - video: { facingMode: 'user' }, - }); - const frontCameraTrack = frontCameraStream.getVideoTracks()[0]; - const frontDeviceId = frontCameraTrack.getSettings().deviceId; - userDeviceId.set(frontDeviceId || null); - frontCameraStream.getTracks().forEach(track => track.stop()); // Stop the stream after retrieving the deviceId - - // Query rear camera (environment-facing) - const rearCameraStream = await navigator.mediaDevices.getUserMedia({ - video: { facingMode: 'environment' }, - }); - const rearCameraTrack = rearCameraStream.getVideoTracks()[0]; - const rearDeviceId = rearCameraTrack.getSettings().deviceId; - environmentDeviceId.set(rearDeviceId || null); - rearCameraStream.getTracks().forEach(track => track.stop()); // Stop the stream after retrieving the deviceId + // First enumerate devices to see what's available + const devices = await navigator.mediaDevices.enumerateDevices(); + const videoDevices = devices.filter(device => device.kind === 'videoinput'); + + if (videoDevices.length === 0) { + console.warn('rec: No video devices found during enumeration'); + return; + } + + // Only try to get specific facing modes if we have devices + try { + // Query front camera (user-facing) + const frontCameraStream = await navigator.mediaDevices.getUserMedia({ + video: { facingMode: 'user' }, + }); + const frontCameraTrack = frontCameraStream.getVideoTracks()[0]; + const frontDeviceId = frontCameraTrack?.getSettings().deviceId; + userDeviceId.set(frontDeviceId || null); + frontCameraStream.getTracks().forEach(track => track.stop()); + } catch (err) { + console.warn('rec: Could not access user-facing camera:', err); + } + + try { + // Query rear camera (environment-facing) + const rearCameraStream = await navigator.mediaDevices.getUserMedia({ + video: { facingMode: 'environment' }, + }); + const rearCameraTrack = rearCameraStream.getVideoTracks()[0]; + const rearDeviceId = rearCameraTrack?.getSettings().deviceId; + environmentDeviceId.set(rearDeviceId || null); + rearCameraStream.getTracks().forEach(track => track.stop()); + } catch (err) { + console.warn('rec: Could not access environment-facing camera:', err); + } } catch (err) { console.error('Error getting devices:', err); - const errMsg = err?.toString(); - if (errMsg) { - displayErrors([errMsg]); - } + // Don't display errors here as this is just for facing mode detection } } - const displayErrors = (errors: string[] | null = null, clear = false) => { + const displayErrors = (errors: string[] | null = null, clear = false): void => { error.set(true); if (clear || !errors) { errorMessages.set(errors || null); @@ -90,30 +126,54 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, } }; - const checkPermissions = async () => { - // @ts-ignore - const permissions = await navigator.permissions.query({ name: 'camera' }); - console.info('rec: permissions', permissions); - - if (permissions.state === 'denied') { - displayErrors(['Camera access denied. Please check your browser/device settings.']); - return; - } else if (permissions.state === 'prompt') { - try { - await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); - } catch (err) { - console.error('rec: getUserMedia error', err); - displayErrors(['2 Camera access denied. Please check your browser/device settings.']); - return; + const checkPermissions = async (): Promise => { + try { + // @ts-ignore + const permissions = await navigator.permissions.query({ name: 'camera' }); + console.info('rec: permissions', permissions); + + if (permissions.state === 'denied') { + displayErrors(['Camera access denied. Please check your browser/device settings.']); + return false; + } else if (permissions.state === 'prompt') { + try { + // Request only video permission initially to avoid Firefox issues + const stream = await navigator.mediaDevices.getUserMedia({ video: true }); + // Stop the stream immediately after getting permission + stream.getTracks().forEach(track => track.stop()); + console.log('rec: Camera permission granted'); + } catch (err) { + console.error('rec: getUserMedia error', err); + const errorMessage = err instanceof Error ? err.message : 'Unknown error'; + if (errorMessage.includes('NotFoundError') || errorMessage.includes('object can not be found')) { + displayErrors(['No camera device found. Please ensure a camera is connected.']); + } else if (errorMessage.includes('NotAllowedError') || errorMessage.includes('Permission denied')) { + displayErrors(['Camera access denied. Please allow camera access and try again.']); + } else { + displayErrors(['Failed to access camera: ' + errorMessage]); + } + return false; + } } + return true; + } catch (err) { + console.error('rec: Permission check error', err); + // Firefox might not support permissions API for camera + return true; // Continue anyway } }; - const setup = async () => { + const setup = async (): Promise => { const _player = makePlayer(); player.set(_player); _player.hide(); - await checkPermissions(); + + const permissionGranted = await checkPermissions(); + if (!permissionGranted) { + loading.set(false); + return _player; + } + await getDeviceIds(); _player.record().enumerateDevices(); @@ -122,18 +182,56 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, const devices = _player.record().devices; console.log('rec: devices', devices); - audioDevices.set(devices.filter((device: any) => device.kind === 'audioinput')); - videoDevices.set(devices.filter((device: any) => device.kind === 'videoinput')); + const audioInputs = devices.filter((device: any) => device.kind === 'audioinput'); + const videoInputs = devices.filter((device: any) => device.kind === 'videoinput'); - const _audioDevices = get(audioDevices); - const _videoDevices = get(videoDevices); + console.log('rec: audio devices:', audioInputs); + console.log('rec: video devices:', videoInputs); - if (_videoDevices.length > 0 && _videoDevices[0].deviceId) { - changeVideoInput(_videoDevices[0].deviceId); - } - if (_audioDevices.length > 0 && _audioDevices[0].deviceId) { - changeAudioInput(_audioDevices[0].deviceId); + // Debug: Check for duplicate deviceIds + const videoDeviceIds = videoInputs.map((d: InputDeviceInfo) => d.deviceId); + console.log('rec: video deviceIds:', videoDeviceIds); + if (videoDeviceIds.length !== new Set(videoDeviceIds).size) { + console.warn('rec: Duplicate video deviceIds detected!'); } + + // Remove duplicates by deviceId, keeping first occurrence + const uniqueVideoInputs = videoInputs.filter((device: InputDeviceInfo, index: number, self: InputDeviceInfo[]) => index === self.findIndex((d: InputDeviceInfo) => d.deviceId === device.deviceId)); + const uniqueAudioInputs = audioInputs.filter((device: InputDeviceInfo, index: number, self: InputDeviceInfo[]) => index === self.findIndex((d: InputDeviceInfo) => d.deviceId === device.deviceId)); + + audioDevices.set(uniqueAudioInputs); + videoDevices.set(uniqueVideoInputs); + + // Request device first before trying to change inputs + console.log('rec: calling getDevice()'); + + // Small delay for Firefox to properly initialize + setTimeout(async () => { + // For now, only request video to avoid Firefox issues + if (uniqueVideoInputs.length > 0) { + console.log('rec: Requesting video only (Firefox compatibility)'); + + // First test if we can get a stream directly + try { + const testStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false }); + console.log('rec: Direct getUserMedia successful, got stream:', testStream); + testStream.getTracks().forEach(track => track.stop()); + + // If direct access works, try with the plugin + _player.record().getDevice({ + audio: false, + video: true, + }); + } catch (err) { + console.error('rec: Direct getUserMedia failed:', err); + const errorMessage = err instanceof Error ? err.message : String(err); + displayErrors(['Failed to access camera directly. Error: ' + errorMessage]); + } + } else { + console.log('rec: No video devices found'); + displayErrors(['No video devices found. Please ensure a camera is connected.']); + } + }, 100); }); // error handling @@ -144,10 +242,20 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, // error handling _player.on('deviceError', function () { console.log('rec: device error:', _player.deviceErrorCode); - displayErrors([_player.deviceErrorCode]); + const errorCode = _player.deviceErrorCode; + + if (errorCode && errorCode.toString().includes('NotFoundError')) { + displayErrors(['No camera device found. Please ensure a camera is connected and refresh the page.']); + } else if (errorCode && errorCode.toString().includes('NotAllowedError')) { + displayErrors(['Camera access was denied. Please allow camera access in your browser settings.']); + } else if (errorCode && errorCode.toString().includes('NotReadableError')) { + displayErrors(['Camera is already in use by another application. Please close other apps using the camera.']); + } else { + displayErrors(['Camera error: ' + (errorCode ? errorCode.toString() : 'Unknown error')]); + } }); - _player.on('error', function (element, error) { + _player.on('error', function (_element, error) { console.error(error); displayErrors(); }); @@ -171,18 +279,40 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, }); _player.on('deviceReady', function () { + console.log('rec: deviceReady event fired'); loading.set(false); _player.show(); if (get(isMuted)) { setMute(true); } + + // Don't try to change devices immediately after deviceReady + // as it can cause issues in Firefox + const stream = _player.record().stream; + if (stream) { + const videoTracks = stream.getVideoTracks(); + const audioTracks = stream.getAudioTracks(); + console.log('rec: deviceReady - video tracks:', videoTracks.length); + console.log('rec: deviceReady - audio tracks:', audioTracks.length); + + if (videoTracks.length > 0) { + const settings = videoTracks[0].getSettings(); + console.log('rec: deviceReady - video settings:', settings); + selectedVideoDeviceId.set(settings.deviceId || null); + } + + if (audioTracks.length > 0) { + const settings = audioTracks[0].getSettings(); + selectedAudioDeviceId.set(settings.deviceId || null); + } + } }); return _player; }; - const changeVideoInput = (deviceId: string) => { + const changeVideoInput = (deviceId: string): void => { try { console.log('rec: changeVideoInput', deviceId); get(player)?.record().setVideoInput(deviceId); @@ -194,7 +324,7 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, } }; - const changeAudioInput = (deviceId: string) => { + const changeAudioInput = (deviceId: string): void => { try { console.log('rec: changeAudioInput', deviceId); get(player)?.record().setAudioInput(deviceId); @@ -206,7 +336,7 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, } }; - const setMute = (value: boolean) => { + const setMute = (value: boolean): void => { const _player = get(player); isMuted.set(value); @@ -223,11 +353,11 @@ function useVideoRecorderSvelte(getVideoRef: () => HTMLVideoElement | undefined, } }; - const toggleMute = () => { + const toggleMute = (): void => { setMute(!get(isMuted)); }; - const toggleFacingMode = () => { + const toggleFacingMode = (): void => { const _facingMode = get(facingMode); const newFacingMode = _facingMode === 'user' ? 'environment' : 'user'; facingMode.set(newFacingMode); diff --git a/src/modules/org.libersoft.messages/components/VideoRecorder/videoRecorderUtils.ts b/src/modules/org.libersoft.messages/components/VideoRecorder/videoRecorderUtils.ts index a9634090f..52ed1b192 100644 --- a/src/modules/org.libersoft.messages/components/VideoRecorder/videoRecorderUtils.ts +++ b/src/modules/org.libersoft.messages/components/VideoRecorder/videoRecorderUtils.ts @@ -1,4 +1,4 @@ -export function setupMicPulseIndicator(stream: MediaStream, micIndicator: HTMLElement) { +export function setupMicPulseIndicator(stream: MediaStream, micIndicator: HTMLElement): void { // @ts-ignore const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const micSource = audioContext.createMediaStreamSource(stream); @@ -11,12 +11,12 @@ export function setupMicPulseIndicator(stream: MediaStream, micIndicator: HTMLEl let smoothedVolume = 0; const smoothingFactor = 0.2; // smaller = smoother (try 0.1–0.3) - function animateMic() { + function animateMic(): void { analyser.getByteFrequencyData(dataArray); let sum = 0; for (let i = 0; i < dataArray.length; i++) { - sum += dataArray[i] * dataArray[i]; + sum += dataArray[i]! * dataArray[i]!; } const rms = Math.sqrt(sum / dataArray.length); diff --git a/src/modules/org.libersoft.messages/db.ts b/src/modules/org.libersoft.messages/db.ts deleted file mode 100644 index 23d6d35f5..000000000 --- a/src/modules/org.libersoft.messages/db.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Dexie from 'dexie'; - -export const stickers_db = new Dexie('stickers'); -stickers_db.version(8).stores({ - stickers: 'uid++, id, name, stickerset, server, url', - stickersets: 'uid++, id, alias, name, animated, priority, server, created, url', - servers: 'name', -}); - -export const messages_db = new Dexie('messages'); -messages_db.version(2).stores({ - outgoing: '++id, account, data', -}); diff --git a/src/modules/org.libersoft.messages/dialogs/DefaultGifServers.svelte b/src/modules/org.libersoft.messages/dialogs/DefaultGifServers.svelte new file mode 100644 index 000000000..342a92506 --- /dev/null +++ b/src/modules/org.libersoft.messages/dialogs/DefaultGifServers.svelte @@ -0,0 +1,29 @@ + + + diff --git a/src/modules/org.libersoft.messages/dialogs/DefaultStickerServers.svelte b/src/modules/org.libersoft.messages/dialogs/DefaultStickerServers.svelte new file mode 100644 index 000000000..9281f309c --- /dev/null +++ b/src/modules/org.libersoft.messages/dialogs/DefaultStickerServers.svelte @@ -0,0 +1,29 @@ + + + diff --git a/src/modules/org.libersoft.messages/dialogs/DeleteGifServer.svelte b/src/modules/org.libersoft.messages/dialogs/DeleteGifServer.svelte new file mode 100644 index 000000000..a27cd8d3a --- /dev/null +++ b/src/modules/org.libersoft.messages/dialogs/DeleteGifServer.svelte @@ -0,0 +1,33 @@ + + + diff --git a/src/modules/org.libersoft.messages/dialogs/DeleteStickerServer.svelte b/src/modules/org.libersoft.messages/dialogs/DeleteStickerServer.svelte new file mode 100644 index 000000000..b06b8bb39 --- /dev/null +++ b/src/modules/org.libersoft.messages/dialogs/DeleteStickerServer.svelte @@ -0,0 +1,33 @@ + + + diff --git a/src/modules/org.libersoft.messages/dialogs/DeleteStickers.svelte b/src/modules/org.libersoft.messages/dialogs/DeleteStickers.svelte new file mode 100644 index 000000000..15083745d --- /dev/null +++ b/src/modules/org.libersoft.messages/dialogs/DeleteStickers.svelte @@ -0,0 +1,29 @@ + + + diff --git a/src/modules/org.libersoft.messages/dialogs/DialogError.svelte b/src/modules/org.libersoft.messages/dialogs/DialogError.svelte new file mode 100644 index 000000000..d6502b33f --- /dev/null +++ b/src/modules/org.libersoft.messages/dialogs/DialogError.svelte @@ -0,0 +1,29 @@ + + + diff --git a/src/modules/org.libersoft.messages/factories/messageFactories.ts b/src/modules/org.libersoft.messages/factories/messageFactories.ts index 40d0f8ea4..fea8e8e78 100644 --- a/src/modules/org.libersoft.messages/factories/messageFactories.ts +++ b/src/modules/org.libersoft.messages/factories/messageFactories.ts @@ -1,11 +1,11 @@ -interface MessageReactionData { +interface IMessageReactionData { _type?: 'temporary'; user_address: string; message_uid: string; emoji_codepoints_rgi: string; } -export function makeMessageReaction(data: MessageReactionData) { +export function makeMessageReaction(data: IMessageReactionData): IMessageReactionData & { _type: 'temporary' } { return { _type: 'temporary', ...data, diff --git a/src/modules/org.libersoft.messages/message-content.ts b/src/modules/org.libersoft.messages/message-content.ts deleted file mode 100644 index e1c1a7f9b..000000000 --- a/src/modules/org.libersoft.messages/message-content.ts +++ /dev/null @@ -1,27 +0,0 @@ -import MessageContentSticker from './components/MessageContentSticker/MessageContentSticker.svelte'; -import MessageContentGif from './components/MessageContentGif/MessageContentGif.svelte'; -import MessageContentEmoji from './components/MessageContentEmoji/MessageContentEmoji.svelte'; -import MessageContentAttachment from './components/MessageContentFile/MessageContentAttachment.svelte'; -import MessageContentImage from './components/MessageContentImage/MessageContentImage.svelte'; -import MessageContentVideo from './components/MessageContentVideo/MessageContentVideo.svelte'; -import MessageContentAudio from './components/MessageContentAudio/MessageContentAudio.svelte'; -import FilesWrapper from './components/MessageContentFile/FilesWrapper.svelte'; -import ImagesWrapper from './components/MessageContentImage/ImagesWrapper.svelte'; -import VideosWrapper from './components/MessageContentVideo/VideosWrapper.svelte'; -import AudioWrapper from './components/MessageContentAudio/AudioWrapper.svelte'; -import MessageContentReply from './components/MessageContentReply/MessageContentReply.svelte'; - -export let componentMap = { - sticker: MessageContentSticker, - gif: MessageContentGif, - emoji: MessageContentEmoji, - attachment: MessageContentAttachment, - attachmentswrapper: FilesWrapper, - imageswrapper: ImagesWrapper, - imaged: MessageContentImage, - yellowvideo: MessageContentVideo, - videoswrapper: VideosWrapper, - yellowaudio: MessageContentAudio, - audiowrapper: AudioWrapper, - reply: MessageContentReply, -}; diff --git a/src/modules/org.libersoft.messages/modals/FileUpload.svelte b/src/modules/org.libersoft.messages/modals/FileUpload.svelte deleted file mode 100644 index 3cd1ce3f8..000000000 --- a/src/modules/org.libersoft.messages/modals/FileUpload.svelte +++ /dev/null @@ -1,165 +0,0 @@ - - - - -{#snippet fileUploadItem(file)} - - - {truncateText(file.name, 30)} - - - {humanSize(file.size)} - - - onFileDelete(file)} /> - - -{/snippet} - -
- -
-
-
- {#if $fileUploadModalFiles.length} -
- - - - - - - - - - {#each $fileUploadModalFiles as file} - {@render fileUploadItem(file)} - {/each} - -
File name:Size:Action:
-
- {:else} - -
Drag and drop your files here
or click here to add files.
-
- {/if} -
- -
diff --git a/src/modules/org.libersoft.messages/modals/ForwardMessage.svelte b/src/modules/org.libersoft.messages/modals/ForwardMessage.svelte deleted file mode 100644 index 9e4fe78f3..000000000 --- a/src/modules/org.libersoft.messages/modals/ForwardMessage.svelte +++ /dev/null @@ -1,107 +0,0 @@ - - - - -{#snippet conversationItem(conversation: Conversation)} - {@const wasAlreadySent = sentToConversations.some(c => c.id === conversation.id)} -
-
-
-
-
- {conversation.address} -
-
-
-
-{/snippet} - -
-
- -
-
- {#if conversations && conversations.length} - {#each conversations as conversation (conversation.id)} - {@render conversationItem(conversation)} - {/each} - {:else} -
No conversations were found
- {/if} -
-
diff --git a/src/modules/org.libersoft.messages/modals/GifServers.svelte b/src/modules/org.libersoft.messages/modals/GifServers.svelte deleted file mode 100644 index f661ddbaa..000000000 --- a/src/modules/org.libersoft.messages/modals/GifServers.svelte +++ /dev/null @@ -1,86 +0,0 @@ - - - - - -
- -
- - - - - - - - - - {#each $gif_servers as s} - - - - - {/each} - -
Gif servers:Action:
- {s} - - clickDel(s)} /> -
-{#if error} -
{error}
-{/if} diff --git a/src/modules/org.libersoft.messages/modals/Html.svelte b/src/modules/org.libersoft.messages/modals/Html.svelte deleted file mode 100644 index 053c6ae7c..000000000 --- a/src/modules/org.libersoft.messages/modals/Html.svelte +++ /dev/null @@ -1,46 +0,0 @@ - - - - -
-
- -
Show editor and preview side by side
-
- {#if isSideBySide} - - {:else} - - {/if} -
diff --git a/src/modules/org.libersoft.messages/modals/MessagesSettings.svelte b/src/modules/org.libersoft.messages/modals/MessagesSettings.svelte deleted file mode 100644 index b6be21b2c..000000000 --- a/src/modules/org.libersoft.messages/modals/MessagesSettings.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - - - -
-
- File upload chunk size: - {humanSize(chunkSize)} -
- -
-
- -
-
-
- Photo radius: -
- -
- -{#if TAURI} -
-
- Default file download folder (TODO) -
- {$defaultFileDownloadFolder}
- This is the folder where files will be downloaded by default. -
-{/if} diff --git a/src/modules/org.libersoft.messages/modals/ModalStickersetDetails.svelte b/src/modules/org.libersoft.messages/modals/ModalStickersetDetails.svelte deleted file mode 100644 index a9f4351be..000000000 --- a/src/modules/org.libersoft.messages/modals/ModalStickersetDetails.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - -
- {#if $debug} - stickerServer: {stickerServer} - id: {id} - {/if} - {#if stickerSetData} - - {/if} -
diff --git a/src/modules/org.libersoft.messages/modals/NewConversation.svelte b/src/modules/org.libersoft.messages/modals/NewConversation.svelte deleted file mode 100644 index b3b63edf7..000000000 --- a/src/modules/org.libersoft.messages/modals/NewConversation.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - -
-
- -
-
diff --git a/src/modules/org.libersoft.messages/modals/StickerServers.svelte b/src/modules/org.libersoft.messages/modals/StickerServers.svelte deleted file mode 100644 index cb439cca6..000000000 --- a/src/modules/org.libersoft.messages/modals/StickerServers.svelte +++ /dev/null @@ -1,86 +0,0 @@ - - - - - -
- -
- - - - - - - - - - {#each $sticker_servers as s} - - - - - {/each} - -
Sticker servers:Action:
- {s} - - clickDel(s)} /> -
-{#if error} -
{error}
-{/if} diff --git a/src/modules/org.libersoft.messages/modals/VideoRecorderModalBody.svelte b/src/modules/org.libersoft.messages/modals/VideoRecorderModalBody.svelte deleted file mode 100644 index 2bca32532..000000000 --- a/src/modules/org.libersoft.messages/modals/VideoRecorderModalBody.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
- -
diff --git a/src/modules/org.libersoft.messages/module.js b/src/modules/org.libersoft.messages/module.js deleted file mode 100644 index c0901d989..000000000 --- a/src/modules/org.libersoft.messages/module.js +++ /dev/null @@ -1,17 +0,0 @@ -import { registerModule } from '@/core/core.ts'; -import { identifier, init, initData, initComms, deinitComms, deinitData, onModuleSelected } from './messages.js'; -import MessagesSidebar from './pages/MessagesPage/MessagesSidebar.svelte'; -import MessagesContent from './pages/MessagesPage/MessagesContent.svelte'; -export const module = { - name: 'Messages', - identifier, -}; - -registerModule(module.identifier, { - order: 1, - callbacks: { init, initData, initComms, deinitComms, deinitData, onModuleSelected }, - panels: { - sidebar: MessagesSidebar, - content: MessagesContent, - }, -}); diff --git a/src/modules/org.libersoft.messages/pages/Main/Content.svelte b/src/modules/org.libersoft.messages/pages/Main/Content.svelte new file mode 100644 index 000000000..a325c6f1a --- /dev/null +++ b/src/modules/org.libersoft.messages/pages/Main/Content.svelte @@ -0,0 +1,30 @@ + + +{#if $selectedConversation === null} + +{:else} + +{/if} + diff --git a/src/modules/org.libersoft.messages/pages/Main/Sidebar.svelte b/src/modules/org.libersoft.messages/pages/Main/Sidebar.svelte new file mode 100644 index 000000000..9b9da16d9 --- /dev/null +++ b/src/modules/org.libersoft.messages/pages/Main/Sidebar.svelte @@ -0,0 +1,81 @@ + + + + +{#if $conversationsArray != null} +
+
+ + +
+
+ {#each $conversationsArray as c (c.address)} + {#key c.address} + + {/key} + {/each} +
+ {#if $conversationsArray.length > 1} + + {/if} +
+ + +{/if} diff --git a/src/modules/org.libersoft.messages/pages/MessagesPage/MessagesContent.svelte b/src/modules/org.libersoft.messages/pages/MessagesPage/MessagesContent.svelte deleted file mode 100644 index d8e4b3839..000000000 --- a/src/modules/org.libersoft.messages/pages/MessagesPage/MessagesContent.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -{#if $selectedConversation === null} - -{:else} - -{/if} - diff --git a/src/modules/org.libersoft.messages/pages/MessagesPage/MessagesSidebar.svelte b/src/modules/org.libersoft.messages/pages/MessagesPage/MessagesSidebar.svelte deleted file mode 100644 index 9be697a50..000000000 --- a/src/modules/org.libersoft.messages/pages/MessagesPage/MessagesSidebar.svelte +++ /dev/null @@ -1,116 +0,0 @@ - - - - -{#if $conversationsArray != null} -
-
- -
- -
New conversation
-
-
- -
-
- {#each $conversationsArray as c (c.address)} - {#key c.address} - - {/key} - {/each} -
- {#if $conversationsArray.length > 1} - - {/if} -
- - -{/if} diff --git a/src/modules/org.libersoft.messages/pages/Welcome/Welcome.svelte b/src/modules/org.libersoft.messages/pages/Welcome/Welcome.svelte new file mode 100644 index 000000000..5dcad311d --- /dev/null +++ b/src/modules/org.libersoft.messages/pages/Welcome/Welcome.svelte @@ -0,0 +1,81 @@ + + + + + + + {#snippet left()} + + + {/snippet} + {#snippet right()} + + {/snippet} + + +
+ Illustration +
+ {#if $online} +
Select your conversation
or
+
+
+
+
diff --git a/src/modules/org.libersoft.messages/pages/WelcomePage/WelcomePage.svelte b/src/modules/org.libersoft.messages/pages/WelcomePage/WelcomePage.svelte deleted file mode 100644 index 84d6d7d22..000000000 --- a/src/modules/org.libersoft.messages/pages/WelcomePage/WelcomePage.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - -
- Illustration -
- {#if $online} -
Select your conversation
or
-
-
- diff --git a/src/modules/org.libersoft.messages/scripts/connection.ts b/src/modules/org.libersoft.messages/scripts/connection.ts new file mode 100644 index 000000000..2c69b84ca --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/connection.ts @@ -0,0 +1,107 @@ +// Import from conditional bridge +import { send, type IAccount, type AccountStore } from '@/bridge/core-bridge'; + +// Assume TAURI_SERVICE is available globally +declare global { + const TAURI_SERVICE: boolean | undefined; +} + +export const identifier = 'org.libersoft.messages'; + +interface ISubscriptionInfo { + subscribed: boolean; + events?: string[]; +} + +// Get globals - in service context these are injected, in frontend they're imported +const getTauriService = (): boolean => (typeof TAURI_SERVICE !== 'undefined' ? TAURI_SERVICE : false); + +const getSend = (): ((...args: any[]) => any) => { + // In test environment, return a noop function instead of throwing + if (typeof vi !== 'undefined' || typeof (globalThis as any).vi !== 'undefined') { + return () => Promise.resolve(); + } + + return send; +}; + +/** + * Shared communication utilities for messages module + * Can be used from both frontend and service.ts + */ + +/** + * Send data to the messages module + */ +export function connectionSendData(acc: IAccount, account: AccountStore | null, command: string, params: Record | null = {}, sendSessionID: boolean = true, callback: ((req: any, res: any) => void) | null = null, quiet: boolean = false): any { + return _send(acc, account, identifier, command, params, sendSessionID, callback, quiet); +} + +/** + * Internal send function + */ +export function _send(acc: IAccount, account: AccountStore | null, target: string, command: string, params: Record | null, sendSessionID: boolean, callback: ((req: any, res: any) => void) | null, quiet: boolean): any { + // Direct pass-through to send + const sendFn = getSend(); + return sendFn(acc, account, target, command, params, sendSessionID, callback, quiet); +} + +/** + * Subscribe to module events + */ +export function moduleEventSubscribe(acc: IAccount, event_name: string): void { + connectionSendData(acc, null, 'subscribe', { event: event_name }, true, (_req, res) => { + if (res.error !== false) { + console.error('This is bad.'); + //console.error('Communication with server Error while subscribing to event: ' + res.message); + } + }); +} + +/** + * Initialize communication subscriptions + */ +export function initializeSubscriptions(acc: IAccount, isService: boolean = false): ISubscriptionInfo { + // In TAURI_SERVICE, only the service subscribes to events + // In other environments, the frontend subscribes + const shouldSubscribe = isService || !getTauriService(); + + if (!shouldSubscribe) { + console.log('Skipping subscriptions - will be handled by service'); + return { subscribed: false }; + } + + // Subscribe to message events + moduleEventSubscribe(acc, 'new_message'); + moduleEventSubscribe(acc, 'seen_message'); + moduleEventSubscribe(acc, 'seen_inbox_message'); + moduleEventSubscribe(acc, 'message_update'); + + // Subscribe to file transfer events + moduleEventSubscribe(acc, 'upload_update'); + moduleEventSubscribe(acc, 'ask_for_chunk'); + + return { + subscribed: true, + events: ['new_message', 'seen_message', 'seen_inbox_message', 'message_update', 'upload_update', 'ask_for_chunk'], + }; +} + +/** + * Deinitialize communication subscriptions + */ +export function deinitializeSubscriptions(acc: IAccount, isService: boolean = false): void { + // Only unsubscribe if we were the ones who subscribed + const shouldUnsubscribe = isService || !getTauriService(); + + if (!shouldUnsubscribe) { + return; + } + + connectionSendData(acc, null, 'user_unsubscribe', { event: 'new_message' }); + connectionSendData(acc, null, 'user_unsubscribe', { event: 'seen_message' }); + connectionSendData(acc, null, 'user_unsubscribe', { event: 'seen_inbox_message' }); + connectionSendData(acc, null, 'user_unsubscribe', { event: 'message_update' }); + connectionSendData(acc, null, 'user_unsubscribe', { event: 'upload_update' }); + connectionSendData(acc, null, 'user_unsubscribe', { event: 'ask_for_chunk' }); +} diff --git a/src/modules/org.libersoft.messages/scripts/conversations.ts b/src/modules/org.libersoft.messages/scripts/conversations.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/modules/org.libersoft.messages/scripts/core-bridge-builtin.ts b/src/modules/org.libersoft.messages/scripts/core-bridge-builtin.ts new file mode 100644 index 000000000..2ba6f3496 --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/core-bridge-builtin.ts @@ -0,0 +1,5 @@ +// Browser/built-in bridge for core functionality +import { send } from '@/core/scripts/socket.ts'; +import type { IAccount, AccountStore } from '@/core/scripts/types.ts'; +export { send }; +export type { IAccount, AccountStore }; diff --git a/src/modules/org.libersoft.messages/scripts/core-bridge-mobile.ts b/src/modules/org.libersoft.messages/scripts/core-bridge-mobile.ts new file mode 100644 index 000000000..1e914c925 --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/core-bridge-mobile.ts @@ -0,0 +1,10 @@ +// Mobile/service bridge for core functionality +// In service context, send is injected globally +import type { IAccount, AccountStore } from '@/core/scripts/types.ts'; + +declare global { + const send: (acc: IAccount, account: AccountStore | null, target: string, command: string, params: any, sendSessionID: boolean, callback: ((req: any, res: any) => void) | null, quiet: boolean) => any; +} + +export { send }; +export type { IAccount as Account, AccountStore }; diff --git a/src/modules/org.libersoft.messages/scripts/db.ts b/src/modules/org.libersoft.messages/scripts/db.ts new file mode 100644 index 000000000..662b7eef1 --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/db.ts @@ -0,0 +1,31 @@ +import Dexie, { type Table } from 'dexie'; + +class StickersDB extends Dexie { + stickers!: Table; + stickersets!: Table; + servers!: Table; + + constructor() { + super('stickers'); + this.version(8).stores({ + stickers: 'uid++, id, name, stickerset, server, url', + stickersets: 'uid++, id, alias, name, animated, priority, server, created, url', + servers: 'name', + }); + } +} + +export const stickers_db = new StickersDB(); + +class MessagesDB extends Dexie { + outgoing!: Table; + + constructor() { + super('messages'); + this.version(2).stores({ + outgoing: '++id, account, data', + }); + } +} + +export const messages_db = new MessagesDB(); diff --git a/src/modules/org.libersoft.messages/emojis.js b/src/modules/org.libersoft.messages/scripts/emojis.ts similarity index 95% rename from src/modules/org.libersoft.messages/emojis.js rename to src/modules/org.libersoft.messages/scripts/emojis.ts index 298c2d288..fa4d4abdd 100644 --- a/src/modules/org.libersoft.messages/emojis.js +++ b/src/modules/org.libersoft.messages/scripts/emojis.ts @@ -1,22 +1,20 @@ -// 😐😐😐😐 - import { get } from 'svelte/store'; -import { cp } from './emojis_parse_data.js'; -import { identifier } from './messages.js'; +import { cp } from '@/org.libersoft.messages/scripts/emojis_parse_data.ts'; +import { identifier } from '@/org.libersoft.messages/scripts/connection.ts'; -export function start_emojisets_fetch(acc, emojisLoading, emojiGroups, emojisByCodepointsRgi) { +export function start_emojisets_fetch(acc: any, emojisLoading: any, emojiGroups: any, emojisByCodepointsRgi: any): void { //console.log('start_emojisets_fetch'); if (get(emojisLoading)) { console.log('emojis are already loading'); return; } emojisLoading.set(true); - new Promise(async (resolve, reject) => { + new Promise(async (resolve, reject) => { const res = await fetch('modules/' + identifier + '/json/emoji_16_0_ordering.min.json'); if (!res.ok) { console.error('Failed to fetch emoji groups:', res); acc.error('Failed to fetch emoji groups'); - reject(); + return reject(new Error('Failed to fetch emoji groups')); } let groups; @@ -25,7 +23,7 @@ export function start_emojisets_fetch(acc, emojisLoading, emojiGroups, emojisByC } catch (error) { console.error('Failed to parse emoji groups:', error); acc.error('Failed to parse emoji groups'); - reject(); + return reject(error); } let by_codepoints = {}; @@ -54,15 +52,15 @@ export function start_emojisets_fetch(acc, emojisLoading, emojiGroups, emojisByC }); } -export function emoji_render(codepoints) { +export function emoji_render(codepoints: number[]): string { return codepoints.map(codepoint => String.fromCodePoint(codepoint)).join(''); } -export function rgi(codepoints) { +export function rgi(codepoints: number[]): string { return codepoints.map(codepoint => codepoint.toString(16).padStart(4, '0')).join('_'); } -export function rgi_to_codepoints(rgi) { +export function rgi_to_codepoints(rgi: string): number[] { return rgi.split('_').map(codepoint => parseInt(codepoint, 16)); } @@ -90,7 +88,7 @@ function emoji_cluster_to_array(cluster) { } */ -export async function init_emojis() { +export async function init_emojis(): Promise { /* await new Promise(resolve => setTimeout(resolve, 10000)); cpp = []; @@ -118,7 +116,7 @@ export async function init_emojis() { */ } -export function replaceEmojisWithTags(text) { +export function replaceEmojisWithTags(text): string { //console.log('replaceEmojisWithTags', text); for (let c of cp) { let url_seq = c[0]; diff --git a/src/modules/org.libersoft.messages/emojis_parse_data.js b/src/modules/org.libersoft.messages/scripts/emojis_parse_data.ts similarity index 99% rename from src/modules/org.libersoft.messages/emojis_parse_data.js rename to src/modules/org.libersoft.messages/scripts/emojis_parse_data.ts index c45c2ae3a..c08efc1de 100644 --- a/src/modules/org.libersoft.messages/emojis_parse_data.js +++ b/src/modules/org.libersoft.messages/scripts/emojis_parse_data.ts @@ -1,4 +1,4 @@ -export let cp = [ +export let cp: [string, string][] = [ ['1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fc', '🧑🏻‍❤️‍💋‍🧑🏼'], ['1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fd', '🧑🏻‍❤️‍💋‍🧑🏽'], ['1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fe', '🧑🏻‍❤️‍💋‍🧑🏾'], diff --git a/src/modules/org.libersoft.messages/expressions.svelte.ts b/src/modules/org.libersoft.messages/scripts/expressions.svelte.ts similarity index 71% rename from src/modules/org.libersoft.messages/expressions.svelte.ts rename to src/modules/org.libersoft.messages/scripts/expressions.svelte.ts index e9a3f1a26..930e6c9d1 100644 --- a/src/modules/org.libersoft.messages/expressions.svelte.ts +++ b/src/modules/org.libersoft.messages/scripts/expressions.svelte.ts @@ -1,4 +1,4 @@ -import { localStorageSharedStore } from '../../lib/svelte-shared-store.ts'; +import { localStorageSharedStore } from '@/lib/svelte-shared-store.ts'; export let expressions_renderer = localStorageSharedStore('expressions_renderer', 'canvas'); export let animate_all_expressions = localStorageSharedStore('animate_all_expressions', true); diff --git a/src/modules/org.libersoft.messages/gifs.js b/src/modules/org.libersoft.messages/scripts/gifs.ts similarity index 59% rename from src/modules/org.libersoft.messages/gifs.js rename to src/modules/org.libersoft.messages/scripts/gifs.ts index 152560fa5..309899722 100644 --- a/src/modules/org.libersoft.messages/gifs.js +++ b/src/modules/org.libersoft.messages/scripts/gifs.ts @@ -1,6 +1,6 @@ -import { localStorageSharedStore } from '../../lib/svelte-shared-store.ts'; -import { writable, derived } from 'svelte/store'; - -export const gif_servers = localStorageSharedStore('gif_servers', ['https://gifs.libersoft.org']); +import { localStorageSharedStore } from '@/lib/svelte-shared-store.ts'; +import { derived } from 'svelte/store'; +export const defaultGifServers = ['https://gifs.libersoft.org']; +export const gif_servers = localStorageSharedStore('gif_servers', defaultGifServers); export const gif_server_index = localStorageSharedStore('gif_server_index', 0); export const gif_server = derived([gif_servers, gif_server_index], ([$gif_servers, $gif_server_index]) => $gif_servers[$gif_server_index]); diff --git a/src/modules/org.libersoft.messages/scripts/message-content.ts b/src/modules/org.libersoft.messages/scripts/message-content.ts new file mode 100644 index 000000000..fba59f3e5 --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/message-content.ts @@ -0,0 +1,27 @@ +import MessageContentSticker from '@/org.libersoft.messages/components/MessageContentSticker/MessageContentSticker.svelte'; +import MessageContentGif from '@/org.libersoft.messages/components/MessageContentGif/MessageContentGif.svelte'; +import MessageContentEmoji from '@/org.libersoft.messages/components/MessageContentEmoji/MessageContentEmoji.svelte'; +import MessageContentAttachment from '@/org.libersoft.messages/components/MessageContentFile/MessageContentAttachment.svelte'; +import MessageContentImage from '@/org.libersoft.messages/components/MessageContentImage/MessageContentImage.svelte'; +import MessageContentVideo from '@/org.libersoft.messages/components/MessageContentVideo/MessageContentVideo.svelte'; +import MessageContentAudio from '@/org.libersoft.messages/components/MessageContentAudio/MessageContentAudio.svelte'; +import FilesWrapper from '@/org.libersoft.messages/components/MessageContentFile/FilesWrapper.svelte'; +import ImagesWrapper from '@/org.libersoft.messages/components/MessageContentImage/ImagesWrapper.svelte'; +import VideosWrapper from '@/org.libersoft.messages/components/MessageContentVideo/VideosWrapper.svelte'; +import AudioWrapper from '@/org.libersoft.messages/components/MessageContentAudio/AudioWrapper.svelte'; +import MessageContentReply from '@/org.libersoft.messages/components/MessageContentReply/MessageContentReply.svelte'; + +export let componentMap = { + sticker: MessageContentSticker, + gif: MessageContentGif, + emoji: MessageContentEmoji, + attachment: MessageContentAttachment, + attachmentswrapper: FilesWrapper, + imageswrapper: ImagesWrapper, + imaged: MessageContentImage, + yellowvideo: MessageContentVideo, + videoswrapper: VideosWrapper, + yellowaudio: MessageContentAudio, + audiowrapper: AudioWrapper, + reply: MessageContentReply, +}; diff --git a/src/modules/org.libersoft.messages/messages.js b/src/modules/org.libersoft.messages/scripts/messages.ts similarity index 64% rename from src/modules/org.libersoft.messages/messages.js rename to src/modules/org.libersoft.messages/scripts/messages.ts index c944e5097..172de3e9f 100644 --- a/src/modules/org.libersoft.messages/messages.js +++ b/src/modules/org.libersoft.messages/scripts/messages.ts @@ -1,44 +1,73 @@ -import { replaceEmojisWithTags } from './emojis.js'; +import { replaceEmojisWithTags } from '@/org.libersoft.messages/scripts/emojis.ts'; import { get, writable } from 'svelte/store'; import DOMPurify from 'dompurify'; -import { log } from '@/core/tauri.ts'; +import { log } from '@/core/scripts/tauri.ts'; import fileUploadManager from '@/org.libersoft.messages/services/Files/FileUploadService.ts'; -import { FileUploadRecordStatus, FileUploadRecordType } from '@/org.libersoft.messages/services/Files/types.ts'; +import { FileUploadRecordStatus, FileUploadRecordType, type IPullChunkRequest } from '@/org.libersoft.messages/services/Files/types.ts'; import fileDownloadManager from '@/org.libersoft.messages/services/Files/FileDownloadService.ts'; import fileUploadStore from '@/org.libersoft.messages/stores/FileUploadStore.ts'; import fileDownloadStore from '@/org.libersoft.messages/stores/FileDownloadStore.ts'; -import { wrapConsecutiveElements } from './utils/htmlUtils.ts'; -import { splitAndLinkify } from './splitAndLinkify'; +import { wrapConsecutiveElements, stripHtml } from '@/org.libersoft.messages/scripts/utils/htmlUtils.ts'; +import { splitAndLinkify } from './splitAndLinkify.ts'; import { base64ToUint8Array, makeFileUpload, transformFilesForServer } from '@/org.libersoft.messages/services/Files/utils.ts'; -import { active_account, active_account_id, active_account_module_data, getGuid, hideSidebarMobile, isClientFocused, relay, selectAccount, selected_corepage_id, selected_module_id, send } from '@/core/core.ts'; -import { localStorageSharedStore } from '../../lib/svelte-shared-store.ts'; +import { active_account, active_account_module_data, getGuid, relay, selectAccount, setModule } from '@/core/scripts/core.ts'; +import type { IAccount } from '@/core/scripts/types.ts'; +import { active_account_id, hideSidebarMobile, isClientFocused } from '@/core/scripts/stores.ts'; +import { localStorageSharedStore } from '@/lib/svelte-shared-store.ts'; import retry from 'retry'; import { tick } from 'svelte'; import { messages_db } from './db.ts'; import filesDB, { LocalFileStatus } from '@/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts'; -import { addNotification, deleteNotification } from '@/core/notifications.ts'; -import { makeMessageReaction } from './factories/messageFactories.ts'; - +import { addNotification, deleteNotification, playAudio } from '@/core/scripts/notifications.ts'; +import { makeMessageReaction } from '@/org.libersoft.messages/factories/messageFactories.ts'; +import { identifier, connectionSendData, _send, initializeSubscriptions, deinitializeSubscriptions } from './connection.ts'; export const uploadChunkSize = localStorageSharedStore('uploadChunkSize', 1024 * 1024 * 2); export const photoRadius = localStorageSharedStore('photoRadius', '50%'); +export const messageListMaxWidth = localStorageSharedStore('messageListMaxWidth', '1620'); +export const messageListApplyMaxWidth = localStorageSharedStore('messageListApplyMaxWidth', true); export const hideMessageTextInNotifications = localStorageSharedStore('hideMessageTextInNotifications', false); -export const defaultFileDownloadFolder = localStorageSharedStore('defaultFileDownloadFolder', null); -export const identifier = 'org.libersoft.messages'; +export const defaultFileDownloadFolder = localStorageSharedStore('defaultFileDownloadFolder', null); +export { identifier } from './connection.ts'; export let md = active_account_module_data(identifier); -export let online = relay(md, 'online'); -export let conversationsArray = relay(md, 'conversationsArray'); -export let events = relay(md, 'events'); -export let messagesArray = relay(md, 'messagesArray'); -export let messagesIsInitialLoading = relay(md, 'messagesIsInitialLoading'); -export let selectedConversation = relay(md, 'selectedConversation'); -export let emojiGroups = relay(md, 'emojiGroups'); -export let emojisByCodepointsRgi = relay(md, 'emojisByCodepointsRgi'); -export let emojisLoading = relay(md, 'emojisLoading'); -export let showGallery = relay(md, 'showGallery'); -export let galleryFile = relay(md, 'galleryFile'); +export let online = relay(md, 'online'); +export let conversationsArray = relay(md, 'conversationsArray'); +export let events = relay(md, 'events'); +export let messagesArray = relay(md, 'messagesArray'); +export let messagesIsInitialLoading = relay(md, 'messagesIsInitialLoading'); +export let selectedConversation = relay(md, 'selectedConversation'); +export let emojiGroups = relay(md, 'emojiGroups'); +export let emojisByCodepointsRgi = relay(md, 'emojisByCodepointsRgi'); +export let emojisLoading = relay(md, 'emojisLoading'); +export let showGallery = relay(md, 'showGallery'); +export let galleryFile = relay(md, 'galleryFile'); +export let elWindowNewConversation = writable(); class Message { - constructor(acc, data) { + uid: string = ''; + message: string = ''; + address_from: string = ''; + address_to: string = ''; + format: string = ''; + created: any = undefined; + just_sent: boolean = false; + just_received: boolean = false; + seen: boolean = false; + id: number | undefined = undefined; + prev: number | undefined = undefined; + next: number | string | undefined = undefined; + reactions: any[] = []; + acc: WeakRef | undefined = undefined; + stripped_text: string = ''; + is_outgoing: boolean = false; + remote_address: string = ''; + received_by_my_homeserver: boolean = false; + is_lazyloaded: boolean = false; + keep_unseen_bar: boolean = false; + type: string = ''; + author: string = ''; + hide_author: boolean = false; + + constructor(acc: any, data: any) { Object.assign(this, data); this.acc = new WeakRef(acc); this.stripped_text = stripHtml(this.message); @@ -49,8 +78,8 @@ class Message { } } -export function initData(acc) { - console.log('initData', acc); +export function initData(_acc: any): Record { + //console.log('initData: ', _acc); let result = { online: writable(false), selectedConversation: writable(null), @@ -68,16 +97,17 @@ export function initData(acc) { return result; } -function sendData(acc, account, command, params = {}, sendSessionID = true, callback = null, quiet = false) { - /* - acc: account object - account: account store, optional, for debugging - */ - return _send(acc, account, identifier, command, params, sendSessionID, callback, quiet); -} - -function _send(acc, account, target, command, params, sendSessionID, callback, quiet) { - let cb = (req, res) => { +// Local sendData that adds online check +/** @param {import('@/core/scripts/types.ts').IAccount} acc + * @param {any} account + * @param {string} command + * @param {Record | null} [params] + * @param {boolean} [sendSessionID] + * @param {((req: any, res: any) => void) | null} [callback] + * @param {boolean} [quiet] + */ +function sendData(acc: any, account: any, command: string, params: Record | null = {}, sendSessionID: boolean = true, callback: ((req: any, res: any) => void) | null = null, quiet: boolean = false): void { + let wrappedCallback = (req: any, res: any): void => { if (res.error !== false) { if (get(acc.module_data[identifier].online) === false) { return; @@ -85,16 +115,16 @@ function _send(acc, account, target, command, params, sendSessionID, callback, q } if (callback) callback(req, res); }; - return send(acc, account, target, command, params, sendSessionID, cb, quiet); + return connectionSendData(acc, account, command, params, sendSessionID, wrappedCallback, quiet); } -export function onModuleSelected(selected) { +export function onModuleSelected(selected: boolean): void { //console.log(identifier + ' onModuleSelected', selected); if (!selected) get(md)?.['selectedConversation']?.set(null); } -export function selectConversation(conversation) { - console.log('SELECTcONVERSATION conversation:', conversation, 'conversation.acc:', conversation.acc, 'conversation.acc?.deref:', conversation.acc?.deref); +export function selectConversation(conversation: any): void { + //console.log('SELECTcONVERSATION conversation:', conversation, 'conversation.acc:', conversation.acc, 'conversation.acc?.deref:', conversation.acc?.deref); selectedConversation.set(conversation); events.set([]); messagesArray.set([]); @@ -103,7 +133,7 @@ export function selectConversation(conversation) { listMessages(conversation.acc.deref ? conversation.acc.deref() : conversation.acc, conversation.address); } -export function listConversations(acc) { +export function listConversations(acc: any): void { sendData(acc, null, 'conversations_list', null, true, (_req, res) => { if (res.error !== false) { console.error('this is bad.'); @@ -111,65 +141,50 @@ export function listConversations(acc) { } if (res.data?.conversations) { let conversationsArray = acc.module_data[identifier].conversationsArray; - console.log('listConversations into:', get(conversationsArray)); + //console.log('listConversations into:', get(conversationsArray)); conversationsArray.set(res.data.conversations.map(c => sanitizeConversation(acc, c))); - console.log('listConversations:', get(conversationsArray)); + //console.log('listConversations:', get(conversationsArray)); } }); } -function sanitizeConversation(acc, c) { +export function closeConversation(): void { + selectedConversation.set(null); + hideSidebarMobile.set(false); +} + +function sanitizeConversation(acc: any, c: any): any { c.acc = new WeakRef(acc); c.last_message_text = stripHtml(c.last_message_text); return c; } -function moduleEventSubscribe(acc, event_name) { - sendData(acc, null, 'subscribe', { event: event_name }, true, (req, res) => { - if (res.error !== false) { - console.error('this is bad.'); - //window.alert('Communication with server Error while subscribing to event: ' + res.message); - } - }); -} +// moduleEventSubscribe is now imported from connection.js -export function initComms(acc) { +export function initComms(acc: any): void { // console.warn('init comms', acc); - // message events - moduleEventSubscribe(acc, 'new_message'); - moduleEventSubscribe(acc, 'seen_message'); - moduleEventSubscribe(acc, 'seen_inbox_message'); - moduleEventSubscribe(acc, 'message_update'); - - // file transfer events - moduleEventSubscribe(acc, 'upload_update'); - moduleEventSubscribe(acc, 'ask_for_chunk'); - + // Initialize subscriptions based on platform + initializeSubscriptions(acc, false); let data = acc.module_data[identifier]; //console.log('initComms:', data); - data.new_message_listener = async event => eventNewMessage(acc, event); data.seen_message_listener = event => eventSeenMessage(acc, event); data.seen_inbox_message_listener = event => eventSeenInboxMessage(acc, event); - // message events acc.events.addEventListener('new_message', data.new_message_listener); acc.events.addEventListener('seen_message', data.seen_message_listener); acc.events.addEventListener('seen_inbox_message', data.seen_inbox_message_listener); acc.events.addEventListener('message_update', message_update); - // file transfer events acc.events.addEventListener('upload_update', upload_update); acc.events.addEventListener('ask_for_chunk', ask_for_chunk); - refresh(acc); } -export function init() { - let subs = []; - +export function init(): () => void { + let subs: (() => void)[] = []; subs.push( - active_account_id.subscribe(acc => { + active_account_id.subscribe(_acc => { get(md)?.['selectedConversation']?.set(null); }) ); @@ -179,18 +194,18 @@ export function init() { }; } -async function refresh(acc) { - console.log('refresh sendQueuedMessages...', acc); +async function refresh(acc: any): Promise { + //console.log('refresh sendQueuedMessages...', acc); await sendOutgoingMessages(acc); if (get(acc.module_data[identifier].selectedConversation)) { - console.log('refresh listMessages...', acc); - listMessages(acc, get(acc.module_data[identifier].selectedConversation).address); + //console.log('refresh listMessages...', acc); + listMessages(acc, (get(acc.module_data[identifier].selectedConversation) as any).address); } - console.log('refresh listConversations...', acc); + //console.log('refresh listConversations...', acc); listConversations(acc); } -export async function initUpload(files, uploadType, recipients) { +export async function initUpload(files: any, uploadType: any, recipients: any[]): Promise { console.log('2222', files, uploadType, recipients); const acc = get(active_account); try { @@ -198,11 +213,10 @@ export async function initUpload(files, uploadType, recipients) { } catch (error) { console.error('Error transforming files for server:', error); } - console.log('3333'); const { uploads } = fileUploadManager.beginUpload(files, uploadType, acc, { chunkSize: get(uploadChunkSize), }); - console.log('uploads', uploads); + //console.log('uploads', uploads); const acceptedVideoTypes = ['video/mp4', 'video/webm', 'video/quicktime']; const acceptedAudioTypes = ['audio/mp4', 'audio/mpeg', 'audio/wav', 'audio/webm']; const acceptedImageTypes = [ @@ -221,7 +235,6 @@ export async function initUpload(files, uploadType, recipients) { uploads.forEach(upload => { const fileMimeType = upload.record.fileMimeType; const isServerType = upload.record.type === FileUploadRecordType.SERVER; - // handle images if (isServerType && acceptedImageTypes.some(v => fileMimeType.startsWith(v))) { messageHtml += ``; @@ -231,7 +244,7 @@ export async function initUpload(files, uploadType, recipients) { fileOriginalName: upload.record.fileOriginalName, fileMimeType: upload.record.fileMimeType, fileSize: upload.record.fileSize, - fileBlob: new Blob([upload.file], { type: fileMimeType }), + fileBlob: new Blob([upload.file ?? new Uint8Array()], { type: fileMimeType }), }); } // handle videos @@ -249,14 +262,13 @@ export async function initUpload(files, uploadType, recipients) { setTimeout(() => { sendMessage(messageHtml, 'html'); }, 100); - // send upload const records = uploads.map(upload => upload.record); - sendData(acc, null, 'upload_begin', { records, recipients }, true, (req, res) => { + sendData(acc as IAccount, null, 'upload_begin', { records, recipients }, true, (_req, res) => { if (res.error !== false) { return; } - if (uploads?.[0].record.type === FileUploadRecordType.SERVER) { + if (uploads?.[0]?.record.type === FileUploadRecordType.SERVER) { fileUploadManager.startUploadSerial(res.allowedRecords, uploadChunkAsync); } else { console.error('Error starting upload'); // TODO: better error @@ -264,66 +276,62 @@ export async function initUpload(files, uploadType, recipients) { }); } -function uploadChunkAsync({ upload, chunk }) { - return new Promise((resolve, reject) => { +function uploadChunkAsync({ upload, chunk }: { upload: any; chunk: any }): Promise { + return new Promise((resolve, reject) => { + let settled = false; const op = retry.operation({ retries: 3, factor: 1.5, minTimeout: 1000, maxTimeout: 3000, }); - op.attempt(() => { - const retry = res => { + const doRetry = (res?: any): void => { + if (settled) return; const willRetry = op.retry(new Error()); if (!willRetry) { + settled = true; reject(res); } }; const to = setTimeout(() => { - retry(); + doRetry(); }, 5000); // TODO: maybe longer - sendData(upload.acc, null, 'upload_chunk', { chunk }, true, (req, res) => { + sendData(upload.acc, null, 'upload_chunk', { chunk }, true, (_req, res) => { clearTimeout(to); + if (settled) return; if (res.error !== false) { - retry(res); + doRetry(res); return; } + settled = true; + op.stop(); resolve(); }); }); }); } -function ask_for_chunk(event) { - const { uploadId, offsetBytes, chunkSize } = event.detail.data; +function ask_for_chunk(event: any): void { + const { uploadId } = event.detail.data; const upload = fileUploadManager.uploadsStore.get(uploadId); - if (!upload) { - return; - } - + if (!upload) return; if (upload.record.status === FileUploadRecordStatus.BEGUN) { upload.record.status = FileUploadRecordStatus.UPLOADING; fileUploadStore.set(uploadId, upload); fileUploadManager.startUploadSerial([upload.record], uploadChunkAsync); - } else { - fileUploadManager.continueP2PUpload(uploadId); - } + } else fileUploadManager.continueP2PUpload(uploadId); } -function message_update(event) { +function message_update(event: any): void { const { type, message } = event.detail.data; console.log('message_update', event.detail.data); - if (type === 'reaction') { const messageUid = message.uid; - // TODO: this messagesArray.update will try to find the message in the current conversation (even if this update is from another conversation) messagesArray.update(m => { const foundMessage = m.find(msg => msg.uid === messageUid); - if (foundMessage) { - foundMessage.reactions = message.reactions; - } + if (foundMessage) foundMessage.reactions = message.reactions; return m; }); insertEvent({ type: 'properties_update', array: get(messagesArray) }); @@ -337,7 +345,7 @@ function message_update(event) { } } -function upload_update(event) { +function upload_update(event: any): void { const { record, uploadData } = event.detail.data; const currentUpload = fileUploadStore.get(record.id); if (currentUpload) { @@ -346,27 +354,22 @@ function upload_update(event) { // this is simple approach how to ignore status updates that are produced by sender because server does not know // from which tab the upload is being issued we detect sender tab by existence of currentUpload.file // in future if we want more sophisticated approach we can use session storage to store sender tab id - } else { - fileUploadStore.patch(record.id, { record, ...uploadData }); - } + } else fileUploadStore.patch(record.id, { record, ...uploadData }); } const currentDownload = fileDownloadStore.get(record.id); - if (currentDownload) { - fileDownloadStore.patch(record.id, { record }); - } + if (currentDownload) fileDownloadStore.patch(record.id, { record }); } -export function downloadAttachmentsSerial(records, finishCallback) { +export function downloadAttachmentsSerial(records: any[], finishCallback: (download: any) => void): any { const acc = get(active_account); // const records = recordIds.map(id => fileDownloadStore.get(id).record); return fileDownloadManager.startDownloadSerial(records, makeDownloadChunkAsyncFn(acc), finishCallback); } -export const makeDownloadChunkAsyncFn = - acc => - ({ uploadId, offsetBytes, chunkSize }) => { +export function makeDownloadChunkAsyncFn(acc: any): (args: IPullChunkRequest) => Promise { + return ({ uploadId, offsetBytes, chunkSize }: IPullChunkRequest): Promise => { return new Promise((resolve, reject) => { - sendData(acc, null, 'download_chunk', { uploadId, offsetBytes, chunkSize }, true, async (req, res) => { + sendData(acc, null, 'download_chunk', { uploadId, offsetBytes, chunkSize }, true, async (_req, res) => { if (res.error !== false) { reject(res); return; @@ -384,17 +387,18 @@ export const makeDownloadChunkAsyncFn = }); }); }; +} -export function cancelUpload(uploadId) { +export function cancelUpload(uploadId: string): void { fileUploadManager.cancelUpload(uploadId); - sendData(get(active_account), null, 'upload_cancel', { uploadId }, true, (req, res) => {}); + sendData(get(active_account) as IAccount, null, 'upload_cancel', { uploadId }, true, () => {}); } -export function pauseUpload(uploadId) { - return new Promise(resolve => { +export function pauseUpload(uploadId: string): Promise { + return new Promise(resolve => { fileUploadManager.pauseUpload(uploadId); sendData( - get(active_account), + get(active_account) as IAccount, null, 'upload_update_status', { @@ -402,18 +406,18 @@ export function pauseUpload(uploadId) { status: FileUploadRecordStatus.PAUSED, }, true, - (req, res) => { + () => { resolve(); // TODO: handle error if needed } ); }); } -export function resumeUpload(uploadId) { - return new Promise(resolve => { +export function resumeUpload(uploadId: string): Promise { + return new Promise(resolve => { fileUploadManager.resumeUpload(uploadId); sendData( - get(active_account), + get(active_account) as IAccount, null, 'upload_update_status', { @@ -421,26 +425,24 @@ export function resumeUpload(uploadId) { status: FileUploadRecordStatus.UPLOADING, }, true, - (req, res) => { + () => { resolve(); // TODO: handle error if needed } ); }); } -export function pauseDownload(uploadId) { +export function pauseDownload(uploadId: string): void { fileDownloadManager.pauseDownload(uploadId); } -export function resumeDownload(uploadId) { +export function resumeDownload(uploadId: string): void { fileDownloadManager.resumeDownload(uploadId); } -export function cancelDownload(uploadId) { +export function cancelDownload(uploadId: string): void { const download = fileDownloadStore.get(uploadId); - if (!download) { - return; - } + if (!download) return; if (download.record.type === FileUploadRecordType.P2P) { // for p2p we want to cancel download but we gonna still use the same logic as is used in cancel upload because this is global cancel // TODO: in case of more then one recipient we should cancel only for one recipient locally @@ -450,25 +452,22 @@ export function cancelDownload(uploadId) { } } -export function loadUploadData(uploadId) { +export function loadUploadData(uploadId: string): Promise { return new Promise((resolve, reject) => { const existingUpload = fileUploadStore.get(uploadId); if (existingUpload) { resolve(existingUpload); return; } - - let acc = get(active_account); - + let acc = get(active_account) as IAccount; const op = retry.operation({ retries: 3, factor: 1.5, minTimeout: 1000, maxTimeout: 3000, }); - op.attempt(() => { - sendData(acc, null, 'upload_get', { id: uploadId }, true, (req, res) => { + sendData(acc, null, 'upload_get', { id: uploadId }, true, (_req, res) => { if (res.error !== false) { const willRetry = op.retry(res); if (!willRetry) { @@ -476,7 +475,6 @@ export function loadUploadData(uploadId) { } return; } - const { record, uploadData } = res.data; const upload = makeFileUpload({ ...uploadData, @@ -487,35 +485,29 @@ export function loadUploadData(uploadId) { acc, }); fileUploadStore.set(uploadId, upload); - resolve(upload); }); }); }); } -export function deinitComms(acc) { - sendData(acc, null, 'user_unsubscribe', { event: 'new_message' }); - sendData(acc, null, 'user_unsubscribe', { event: 'seen_message' }); - sendData(acc, null, 'user_unsubscribe', { event: 'seen_inbox_message' }); - sendData(acc, null, 'user_unsubscribe', { event: 'upload_update' }); - sendData(acc, null, 'user_unsubscribe', { event: 'ask_for_chunk' }); +export function deinitComms(acc: any): void { + // Deinitialize subscriptions based on platform + deinitializeSubscriptions(acc, false); } -export function deinitData(acc) { +export function deinitData(acc: any): void { console.log('DEINIT DATA'); let data = acc.module_data[identifier]; if (!data) return; - // message events acc.events.removeEventListener('new_message', data.new_message_listener); acc.events.removeEventListener('seen_message', data.seen_message_listener); - acc.events.removeEventListener('seen_inbox_message', data.seen_message_listener); - + acc.events.removeEventListener('seen_inbox_message', data.seen_inbox_message_listener); + acc.events.removeEventListener('message_update', message_update); // file transfer events acc.events.removeEventListener('upload_update', upload_update); acc.events.removeEventListener('ask_for_chunk', ask_for_chunk); - data.online.set(false); data.events.set([]); data.messagesArray.set([]); @@ -524,27 +516,28 @@ export function deinitData(acc) { acc.module_data[identifier] = null; } -export function listMessages(acc, address) { +export function listMessages(acc: any, address: string): void { //console.log('listMessages', acc, address); messagesArray.set([{ type: 'initial_loading_placeholder' }]); messagesIsInitialLoading.set(true); - loadMessages(acc, address, 'unseen', 3, 3, 'initial_load', res => {}); -} - -export function loadMessages(acc, address, base, prev, next, reason, cb, force_refresh = false) { - /* acc: account object - address: contact address (identifies conversation) - base: message id - prev: number of messages to load before base - next: number of messages to load after base - reason: reason for loading messages (for debugging) - cb: callback (optional) - */ + loadMessages(acc, address, 'unseen', 3, 3, 'initial_load', _res => {}); +} + +export function loadMessages(acc: any, address: string, base: string | number, prev: number, next: number, reason: string, cb: (res: any) => void, force_refresh: boolean = false): void { + /* + acc: account object + address: contact address (identifies conversation) + base: message id + prev: number of messages to load before base + next: number of messages to load after base + reason: reason for loading messages (for debugging) + cb: callback (optional) + */ console.log('reason', reason, 'force_refresh', force_refresh); return sendData(acc, null, 'messages_list', { address: address, base, prev, next }, true, (_req, res) => { if (res.error !== false || !res.data?.messages) { console.error(res); - window.alert('Error while listing messages: ' + (res.message || JSON.stringify(res))); + console.error('Error while listing messages: ' + (res.message || JSON.stringify(res))); return; } let items = res.data.messages; @@ -555,12 +548,12 @@ export function loadMessages(acc, address, base, prev, next, reason, cb, force_r }); } -export function findMessages(acc, address, base, prev, next) { +export function findMessages(acc: any, address: string, base: string | number, prev: number, next: number): Promise { return new Promise((resolve, reject) => { sendData(acc, null, 'messages_list', { address, base, prev, next }, true, (_req, res) => { if (res.error !== false || !res.data?.messages) { console.error(res); - window.alert('Error while finding messages: ' + (res.message || JSON.stringify(res))); + console.error('Error while finding messages: ' + (res.message || JSON.stringify(res))); reject(res); return; } @@ -569,7 +562,7 @@ export function findMessages(acc, address, base, prev, next) { }); } -export function getMessageByUid(uid) { +export function getMessageByUid(uid: string): Promise { return new Promise((resolve, reject) => { const found = get(messagesArray).find(m => m.uid === uid); if (found) { @@ -587,14 +580,12 @@ export function getMessageByUid(uid) { }); } -function addMessagesToMessagesArray(items, reason, force_refresh) { +function addMessagesToMessagesArray(items: any[], reason: string, force_refresh: boolean = false): any[] { let arr = get(messagesArray); arr = arr.filter(m => m.type !== 'initial_loading_placeholder'); - let result = []; + let result: any[] = []; let state = { countAdded: 0 }; - for (let m of items) { - result.push(addMessage(arr, m, state)); - } + for (let m of items) result.push(addMessage(arr, m, state)); sortMessages(arr); addMissingPrevNext(arr); //console.log('messagesArray.set:', arr); @@ -604,18 +595,18 @@ function addMessagesToMessagesArray(items, reason, force_refresh) { return result; } -export function handleResize(wasScrolledToBottom) { +export function handleResize(_wasScrolledToBottom: boolean): void { insertEvent({ type: 'resize', wasScrolledToBottom2: true }); } -export function snipeMessage(messageUid) { +export function snipeMessage(messageUid: string): void { messagesArray.update(v => { return v.filter(m => m.uid !== messageUid); }); insertEvent({ type: 'gc', array: get(messagesArray) }); } -function addMessage(arr, msg, state) { +function addMessage(arr: any[], msg: any, state: { countAdded: number }): any { //TODO: this should only update the message if the data is actually more up-to-date let m = arr.find(m => m.uid === msg.uid); if (m) { @@ -628,7 +619,7 @@ function addMessage(arr, msg, state) { } } -function constructLoadedMessages(acc, data) { +function constructLoadedMessages(acc: any, data: any[]): any[] { let items = data.map(msg => { let message = new Message(acc, msg); message.received_by_my_homeserver = true; @@ -638,7 +629,7 @@ function constructLoadedMessages(acc, data) { return items; } -function sortMessages(messages) { +function sortMessages(messages: any[]): void { messages.sort((a, b) => { //TODO: take care of just-sent messages, they don't have id yet //console.log(a.created, b.created); @@ -655,58 +646,67 @@ function sortMessages(messages) { }); } -function addMissingPrevNext(messages) { +function addMissingPrevNext(messages: any[]): void { for (let i = 0; i < messages.length; i++) { let m = messages[i]; - if (m.prev === undefined) m.prev = findPrev(messages, i); - if (m.next === undefined) m.next = findNext(messages, i); + if (m.prev === undefined) m.prev = findPrev(messages, m); + if (m.next === undefined) m.next = findNext(messages, m); else if (m.next === 'none') { - let next = findNext(messages, i); + let next = findNext(messages, m); if (next !== undefined) m.next = next; } } } -function findPrev(messages, i) { +function findPrev(messages: any[], i: any): number | undefined { for (const m of messages) { if (m.next === i.id) return m.id; } + return undefined; } -function findNext(messages, i) { +function findNext(messages: any[], i: any): number | undefined { for (const m of messages) { if (m.prev === i.id) return m.id; } + return undefined; } -export function setMessageSeen(message, cb) { - let acc = get(active_account); +export async function setMessageSeen(message: any, cb?: () => void, keep_unseen_bar: boolean = true): Promise { + let acc = get(active_account) as IAccount; log.debug('setMessageSeen', message); deleteNotification(messageNotificationId(message)); - message.seen = true; - sendData(acc, active_account, 'message_seen', { uid: message.uid }, true, (req, res) => { + sendData(acc, active_account, 'message_seen', { uid: message.uid }, true, (_req, res) => { if (res.error !== false) { console.error('this is bad.'); return; } //message.seen = true; if (cb) cb(); - // update conversationsArray: - /*const conversation = get(conversationsArray).find(c => c.address === message.address_from); - if (conversation) { - conversation.unread_count--; - conversationsArray.update(v => v); - }*/ + /* + const conversation = get(conversationsArray).find(c => c.address === message.address_from); + if (conversation) { + conversation.unread_count--; + conversationsArray.update(v => v); + } + */ }); + await tick(); + message.seen = true; + message.keep_unseen_bar = keep_unseen_bar; messagesArray.update(v => v); - insertEvent({ type: 'properties_update', array: get(messagesArray) }); + insertEvent({ type: 'message_seen', array: get(messagesArray) }); } -export function sendMessage(text, format, acc = null, conversation = null) { - acc = acc ? acc : get(active_account); +/** @param {string} text + * @param {string} format + * @param {import('@/core/scripts/types.ts').IAccount | null} [acc] + * @param {any} [conversation] + */ +export function sendMessage(text: string, format: string, acc: any = null, conversation: any = null): string { + acc = acc ? acc : (get(active_account) as IAccount); conversation = conversation ? conversation : get(selectedConversation); - let message = new Message(acc, { uid: getGuid(), address_from: acc.credentials.address, @@ -722,39 +722,35 @@ export function sendMessage(text, format, acc = null, conversation = null) { format, uid: message.uid, }; - saveAndSendOutgoingMessage(acc, conversation, params, message); - // append to message array only when conversation is also selected (active) const _selectedConversation = get(selectedConversation); - if (_selectedConversation && _selectedConversation.id === conversation.id) { - addMessagesToMessagesArray([message], 'send_message'); - } - + if (_selectedConversation && _selectedConversation.id === conversation.id) addMessagesToMessagesArray([message], 'send_message'); updateConversationsArray(acc, message); + return message.uid; } -export async function deleteMessage(message) { +export async function deleteMessage(message: any): Promise { console.log('123 deleteMessage', message); - const acc = get(active_account); + const acc = get(active_account) as IAccount; const params = { id: message.id, uid: message.uid, }; - sendData(acc, null, 'message_delete', params, true, (req, res) => { + sendData(acc, null, 'message_delete', params, true, (_req, res) => { console.log('123 response', res); snipeMessage(message.uid); }); } -async function saveAndSendOutgoingMessage(acc, conversation, params, message) { +async function saveAndSendOutgoingMessage(acc: any, conversation: any, params: any, message: any): Promise { let outgoing_message_id = await messages_db.outgoing.add({ account: acc.id, data: params }); //console.log('saveAndSendOutgoingMessage saved message:', message.uid); sendOutgoingMessage(acc, conversation, params, message, outgoing_message_id); } -function sendOutgoingMessage(acc, conversation, params, message, outgoing_message_id) { - sendData(acc, null, 'message_send', params, true, (req, res) => { +function sendOutgoingMessage(acc: any, conversation: any, params: any, message: any, outgoing_message_id: number): void { + sendData(acc, null, 'message_send', params, true, (_req, res) => { //console.log('sendOutgoingMessage res', res); if (res.error !== false) { return; @@ -769,47 +765,48 @@ function sendOutgoingMessage(acc, conversation, params, message, outgoing_messag } /** - * @param acc * @param messageUid * @param operation {'set'|'unset'} + * @param reaction + * @param {import('@/core/scripts/types.ts').IAccount} [acc] * @returns {Promise} */ -export function modifyMessageReaction(messageUid, operation, reaction, acc) { - acc = acc ? acc : get(active_account); +export function modifyMessageReaction(messageUid: string, operation: 'set' | 'unset', reaction: any, acc?: any): Promise { + acc = acc || (get(active_account) as IAccount); return new Promise((resolve, reject) => { const params = { messageUid, operation, reaction, }; - sendData(acc, null, 'message_reaction', params, true, (req, res) => { + sendData(acc, null, 'message_reaction', params, true, (_req, res) => { console.log('message_reaction res', res); if (res.error !== false) { reject(res); return; } - resolve(res); }); }); } -export function setMessageReaction(message, reaction) { +export function setMessageReaction(message: any, reaction: any): Promise { return modifyMessageReaction(message.uid, 'set', reaction); } -export function unsetMessageReaction(message, reaction) { +export function unsetMessageReaction(message: any, reaction: any): Promise { return modifyMessageReaction(message.uid, 'unset', reaction); } -export function toggleMessageReaction(message, reaction) { - const userAddress = get(active_account).credentials.address; +export function toggleMessageReaction(message: any, reaction: any): Promise { + const userAddress = (get(active_account) as IAccount).credentials.address; const didUserReact = message.reactions.some(existingReaction => { if (existingReaction.user_address === userAddress && existingReaction.emoji_codepoints_rgi === reaction.emoji_codepoints_rgi) { return true; } + return false; }); - + playAudio('modules/' + identifier + '/audio/reaction.mp3'); if (didUserReact) { message.reactions = message.reactions.filter(r => !(r.user_address === userAddress && r.emoji_codepoints_rgi === reaction.emoji_codepoints_rgi)); insertEvent({ type: 'properties_update', array: get(messagesArray) }); @@ -826,13 +823,13 @@ export function toggleMessageReaction(message, reaction) { } } -async function sendOutgoingMessages(acc) { +async function sendOutgoingMessages(acc: any): Promise { /* try to send outgoing messages. Ensure they are sent in creation order. Break on error */ - console.log('sendOutgoingMessages for acc', acc.id); + //console.log('sendOutgoingMessages for acc', acc.id); for (const message of await messages_db.outgoing.where('account').equals(acc.id).toArray()) { - console.log('sendOutgoingMessages found queued message:', message.data.uid); - let res = await new Promise(resolve => { - sendData(acc, active_account, 'message_send', message.data, true, (req, res) => { + //console.log('sendOutgoingMessages found queued message:', message.data.uid); + let res = await new Promise(resolve => { + sendData(acc, active_account, 'message_send', message.data, true, (_req, res) => { resolve(res); }); }); @@ -845,9 +842,9 @@ async function sendOutgoingMessages(acc) { } } -function updateConversationsArray(acc, msg) { +function updateConversationsArray(acc: any, msg: any): void { let acc_ca = acc.module_data[identifier].conversationsArray; - let ca = get(acc_ca); + let ca: any[] = get(acc_ca); const conversation = ca.find(c => c.address === msg.remote_address); //console.log('updateConversationsArray', conversation, msg); let is_unread = !msg.seen && !msg.just_sent && msg.address_from !== acc.credentials.address; @@ -873,13 +870,15 @@ function updateConversationsArray(acc, msg) { acc_ca.set(ca); } -export function openNewConversation(address) { +export function openNewConversation(address: string): void { console.log('openNewConversation', address); - selectConversation({ acc: new WeakRef(get(active_account)), address }); + const acc = get(active_account); + if (!acc) return; + selectConversation({ acc: new WeakRef(acc), address }); } -export function jumpToMessage(acc, address, uid) { - loadMessages(acc, address, 'uid:' + uid, 10, 10, 'load_referenced_message', res => { +export function jumpToMessage(acc: any, address: string, uid: string): void { + loadMessages(acc, address, 'uid:' + uid, 10, 10, 'load_referenced_message', _res => { const message = get(messagesArray).find(m => m.uid === uid); insertEvent({ type: 'jump_to_referenced_message', @@ -889,23 +888,24 @@ export function jumpToMessage(acc, address, uid) { }); } -export function insertEvent(event) { +export function insertEvent(event: any): void { events?.update(v => { console.log('insertEvent: ', v, event); return [...v, event]; }); } -async function eventNewMessage(acc, event) { +async function eventNewMessage(acc: any, event: any): Promise { const res = event.detail; //console.log('eventNewMessage', acc, res); if (!res.data) return; + res.data.just_received = true; let msg = new Message(acc, res.data); msg.received_by_my_homeserver = true; let sc = get(selectedConversation); if (msg.address_from !== acc.credentials.address) { - console.log('showNotification?: !get(isClientFocused): ', !get(isClientFocused), 'get(active_account) != acc:', get(active_account) != acc, 'msg.address_from !== sc?.address:', msg.address_from !== sc?.address); - if (!get(isClientFocused) || get(active_account) != acc || msg.address_from !== sc?.address) await showNotification(acc, msg); + console.log('showNotification?: !get(isClientFocused): ', !get(isClientFocused), 'get(active_account) != acc:', get(active_account) !== acc, 'msg.address_from !== sc?.address:', msg.address_from !== sc?.address); + if (!get(isClientFocused) || get(active_account) !== acc || msg.address_from !== sc?.address) await showNotification(acc, msg); } //console.log('eventNewMessage updateConversationsArray with msg:', msg); updateConversationsArray(acc, msg); @@ -916,7 +916,7 @@ async function eventNewMessage(acc, event) { } } -function eventSeenMessage(acc, event) { +function eventSeenMessage(acc: any, event: any): void { console.log(event); const res = event.detail; log.debug('eventSeenMessage', res); @@ -940,10 +940,8 @@ function eventSeenMessage(acc, event) { } else console.log('eventSeenMessage: message not found by uid:', res); } -function eventSeenInboxMessage(acc, event) { - /* - mark, as seen, a message sent to us. This can be triggered by another client. - */ +function eventSeenInboxMessage(acc: any, event: any): void { + // mark, as seen, a message sent to us. This can be triggered by another client. if (acc !== get(active_account)) return; //console.log(event); const res = event.detail; @@ -957,34 +955,30 @@ function eventSeenInboxMessage(acc, event) { } else console.log('eventSeenInboxMessage: conversation not found by address:', res); } -function messageNotificationId(msg) { +function messageNotificationId(msg: any): string { return identifier + '\\' + 'message\\' + msg.uid; } -async function showNotification(acc, msg) { +async function showNotification(acc: any, msg: any): Promise { if (!acc) console.error('showNotification: no account'); console.log('showNotification conversationsArray:', get(conversationsArray)); const conversation = get(conversationsArray)?.find(c => c.address === msg.address_from); console.log('new Notification in conversation', conversation); let title; - if (conversation) { - title = 'New message from: ' + conversation.visible_name + ' (' + msg.address_from + ')'; - } else { - title = 'New message from: ' + msg.address_from; - } + if (conversation) title = 'New message from: ' + conversation.visible_name + ' (' + msg.address_from + ')'; + else title = 'New message from: ' + msg.address_from; let notification = { id: messageNotificationId(msg), title, body: get(hideMessageTextInNotifications) ? 'You have a new message' : msg.stripped_text, icon: 'img/photo.svg', //icon: 'favicon.svg', - sound: 'modules/' + identifier + '/audio/message.mp3', + sound: 'audio/notification.mp3', callback: async event => { if (event === 'click') { window.focus(); selectAccount(acc.id); - selected_corepage_id.set(null); - selected_module_id.set(identifier); + setModule(identifier); await tick(); console.log('notification click: selectConversation', msg.address_from); selectConversation({ @@ -998,16 +992,25 @@ async function showNotification(acc, msg) { addNotification(notification); } -export function ensureConversationDetails(conversation) { +export function ensureConversationDetails(conversation: any): void { //console.log('ensureConversationDetails', conversation); if (conversation.visible_name) return; - let acc = get(active_account); + let acc = get(active_account) as IAccount; //console.log('ensureConversationDetails acc:', acc); - _send(acc, active_account, 'core', 'user_userinfo_get', { address: conversation.address }, true, (_req, res) => { - if (res.error !== false) return; - Object.assign(conversation, res.data); - conversationsArray.update(v => v); - }); + _send( + acc, + active_account as any, + 'core', + 'user_userinfo_get', + { address: conversation.address }, + true, + (_req, res) => { + if (res.error !== false) return; + Object.assign(conversation, res.data); + conversationsArray.update(v => v); + }, + false + ); } DOMPurify.addHook('uponSanitizeAttribute', function (node, data) { @@ -1035,7 +1038,7 @@ DOMPurify.addHook('uponSanitizeElement', (node, data) => { if (CUSTOM_TAGS.find(tag => tag === t)) { // Move children out to after the node. This is a hack to tolerate improperly closed sticker tag. // nope, jsdom (parse5) already produces them "wrong" (right, by spec) while (node.firstChild) { - node.parentNode.insertBefore(node.firstChild, node.nextSibling); + node.parentNode?.insertBefore(node.firstChild, node.nextSibling); } } } @@ -1043,38 +1046,44 @@ DOMPurify.addHook('uponSanitizeElement', (node, data) => { const CUSTOM_TAGS = ['sticker', 'gif', 'emoji', 'attachment', 'attachmentswrapper', 'imageswrapper', 'imaged', 'yellowvideo', 'yellowaudio', 'reply']; -export function saneHtml(content) { +// Attributes that are only allowed on custom tags, not on standard HTML elements +const CUSTOM_ONLY_ATTRS = new Set(['file', 'set', 'codepoints']); + +DOMPurify.addHook('uponSanitizeAttribute', (node, data) => { + if (CUSTOM_ONLY_ATTRS.has(data.attrName)) { + const tag = node.tagName.toLowerCase(); + if (!CUSTOM_TAGS.includes(tag)) { + data.keepAttr = false; + } + } +}); + +export function saneHtml(content: string): DocumentFragment { //console.log('saneHtml:'); let sane = DOMPurify.sanitize(content, { ADD_TAGS: CUSTOM_TAGS, //FORBID_CONTENTS: ['sticker'], - ADD_ATTR: ['file', 'set', 'alt', 'codepoints', 'id'], // TODO: fixme, security issue, should only be allowed on the relevant elements + ADD_ATTR: ['file', 'set', 'alt', 'codepoints', 'id'], RETURN_DOM_FRAGMENT: true, }); /* - console.log('content:', content); - console.log(content); - console.log('sane:'); - console.log(sane); - */ - + console.log('content:', content); + console.log(content); + console.log('sane:'); + console.log(sane); + */ return sane; } -export function htmlEscape(str) { +export function htmlEscape(str: string): string { //console.log('htmlEscape:', str); return str.replaceAll(/&/g, '&').replaceAll(//g, '>').replaceAll(/"/g, '"').replaceAll(/'/g, '''); } -export function stripHtml(html) { - return html.replace(/<[^>]*>?/gm, ''); -} - -export function processMessage(message) { +export function processMessage(message: { format: string; message: string }): { format: string; body: DocumentFragment } { let html; if (message.format === 'html') { html = saneHtml(message.message); - wrapConsecutiveElements(html, 'Attachment', 'AttachmentsWrapper'); wrapConsecutiveElements(html, 'Imaged', 'ImagesWrapper', 1); wrapConsecutiveElements(html, 'YellowVideo', 'VideosWrapper', 1); @@ -1093,66 +1102,20 @@ export function processMessage(message) { }; } -function group_downloads(html) { - // TODO: walk the dom tree, find runs of multiple Download elements, and group them under a single DownloadGroup element - return group_downloads_walk(html); -} - -function group_downloads_walk(node) { - // TODO: review, autogenerated - if (node.nodeType === Node.TEXT_NODE) return node; - if (node.nodeType === Node.ELEMENT_NODE) { - if (node.tagName === 'DOWNLOAD') { - let group = document.createElement('DOWNLOADGROUP'); - group.appendChild(node); - while (node.nextSibling && node.nextSibling.tagName === 'DOWNLOAD') { - group.appendChild(node.nextSibling); - node = node.nextSibling; - } - return group; - } - let clone = node.cloneNode(); - for (let child of node.childNodes) { - clone.appendChild(group_downloads_walk(child)); - } - return clone; - } -} - -export function preprocess_incoming_plaintext_message_text(content) { +export function preprocess_incoming_plaintext_message_text(content: string): string { let result0 = content; //console.log('splitAndLinkify input:', result0); let result1 = splitAndLinkify(result0); //console.log('splitAndLinkify output:', result1); - let result2 = result1.map(part => { + let result2 = result1.map((part): string => { if (part.type === 'plain') { let r = htmlEscape(part.value); r = r.replaceAll('\n', '
'); r = replaceEmojisWithTags(r); return r; } else if (part.type === 'processed') return part.value; + return ''; }); let result3 = result2.join(''); return result3; } - -function emoji_cluster_to_array(cluster) { - // Convert the emoji cluster to an array of codepoints - const codepoints = []; - for (const char of cluster) { - codepoints.push(char.codePointAt(0)); - } - return codepoints; -} - -function linkify(text) { - //console.log('linkify ', text); - // Combine all patterns into one. We use non-capturing groups (?:) to avoid capturing groups we don't need. - const combinedPattern = new RegExp(["(https?:\\/\\/(?:[a-zA-Z0-9-._~%!$&'()*+,;=]+(?::[a-zA-Z0-9-._~%!$&'()*+,;=]*)?@)?(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+(?:\\.[a-zA-Z]{2,})?(?::\\d+)?(?:\\/[^\\s]*)?)", "(ftps?:\\/\\/(?:[a-zA-Z0-9-._~%!$&'()*+,;=]+(?::[a-zA-Z0-9-._~%!$&'()*+,;=]*)?@)?(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+(?:\\.[a-zA-Z]{2,})?(?::\\d+)?(?:\\/[^\\s]*)?)", '(bitcoin:[a-zA-Z0-9]+(?:\\?[a-zA-Z0-9&=]*)?)', '(ethereum:[a-zA-Z0-9]+(?:\\?[a-zA-Z0-9&=]*)?)', '(mailto:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})', '(tel:\\+?[0-9]{1,15})'].join('|'), 'g'); - let result = text.replace(combinedPattern, match => { - // Directly use `match` as the URL/href. This ensures we handle all links in one pass. - return `${match}`; - }); - //console.log('linkify result:', result); - return result; -} diff --git a/src/modules/org.libersoft.messages/scripts/module.ts b/src/modules/org.libersoft.messages/scripts/module.ts new file mode 100644 index 000000000..c9602773c --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/module.ts @@ -0,0 +1,18 @@ +import { registerModule } from '@/core/scripts/core.ts'; +import { identifier, init, initData, initComms, deinitComms, deinitData, onModuleSelected } from '@/org.libersoft.messages/scripts/messages.ts'; +import Sidebar from '@/org.libersoft.messages/pages/Main/Sidebar.svelte'; +import Content from '@/org.libersoft.messages/pages/Main/Content.svelte'; +export const module = { + name: 'Messages', + identifier, +}; + +registerModule({ + id: module.identifier, + order: 1, + callbacks: { init, initData, initComms, deinitComms, deinitData, onModuleSelected }, + panels: { + sidebar: Sidebar, + content: Content, + }, +}); diff --git a/src/modules/org.libersoft.messages/scripts/service.ts b/src/modules/org.libersoft.messages/scripts/service.ts new file mode 100644 index 000000000..614160159 --- /dev/null +++ b/src/modules/org.libersoft.messages/scripts/service.ts @@ -0,0 +1,208 @@ +// Messages Module Service for Android Background Processing +// This service runs in the Android foreground service JavaScript isolate + +// Import connection utilities - these will be loaded/injected by the native layer +import { connectionSendData, initializeSubscriptions, deinitializeSubscriptions } from './connection.ts'; +import { stripHtml } from '@/org.libersoft.messages/scripts/utils/htmlUtils.ts'; + +interface IKotlinBridge { + sendMessage(data: string): void; + log(level: string, message: string): void; +} + +interface IServiceConfig { + accountId: string; + server: string; + address: string; +} + +// KotlinBridge will be available globally when running in Android +declare const KotlinBridge: IKotlinBridge; + +class MessagesBackgroundService { + private config: IServiceConfig | null = null; + private messageHandlers: Map = new Map(); + private account: any = null; + + init(config: IServiceConfig): void { + this.config = config; + this.log('info', `Messages service initialized for account ${config.accountId}`); + + // Create account object compatible with connection module + this.account = { + id: config.accountId, + credentials: { address: config.address }, + events: { + addEventListener: (event: string, handler: Function) => { + this.messageHandlers.set(event, handler); + }, + removeEventListener: (event: string, _handler: Function) => { + this.messageHandlers.delete(event); + }, + }, + }; + + // Set up message handlers + this.setupMessageHandlers(); + + // Subscribe to message events using connection module + this.subscribeToEvents(); + } + + private setupMessageHandlers(): void { + // These handlers will be called when events are received + const handlers = { + new_message: this.handleNewMessage.bind(this), + message_update: this.handleMessageUpdate.bind(this), + seen_message: this.handleSeenMessage.bind(this), + seen_inbox_message: this.handleSeenInboxMessage.bind(this), + upload_update: this.handleUploadUpdate.bind(this), + ask_for_chunk: this.handleAskForChunk.bind(this), + }; + + // Register handlers + for (const [event, handler] of Object.entries(handlers)) { + this.account.events.addEventListener(event, handler); + } + } + + private subscribeToEvents(): void { + // Use connection module to subscribe (isService = true) + const result = initializeSubscriptions(this.account, true); + this.log('info', `Subscriptions initialized: ${result.subscribed ? 'yes' : 'no'}`); + } + + handleMessage(message: any): void { + // Route incoming messages to appropriate handlers + const eventType = message.event || message.type; + const handler = this.messageHandlers.get(eventType); + + if (handler) { + // Create event-like object for compatibility with frontend handlers + const event = { + detail: message, + }; + handler(event); + } else { + this.log('debug', `Unhandled message event: ${eventType}`); + } + } + + private handleNewMessage(event: any): void { + const data = event.detail?.data || event.detail; + this.log('info', `New message received from ${data?.address_from || 'unknown'}`); + + // Process message for notifications + if (data) { + this.processMessageForNotification(data); + } + } + + private handleMessageUpdate(event: any): void { + const data = event.detail?.data || event.detail; + this.log('info', `Message update: ${data?.type || 'unknown'} for ${data?.message?.uid || 'unknown'}`); + } + + private handleSeenMessage(event: any): void { + const data = event.detail?.data || event.detail; + this.log('info', `Message seen: ${data?.uid || 'unknown'}`); + } + + private handleSeenInboxMessage(event: any): void { + const data = event.detail?.data || event.detail; + this.log('info', `Inbox message seen from ${data?.address_from || 'unknown'}`); + } + + private handleUploadUpdate(event: any): void { + const data = event.detail?.data || event.detail; + this.log('info', `Upload update: ${data?.record?.id || 'unknown'} status: ${data?.record?.status || 'unknown'}`); + } + + private handleAskForChunk(event: any): void { + const data = event.detail?.data || event.detail; + this.log('info', `Ask for chunk: upload ${data?.uploadId || 'unknown'} offset ${data?.offsetBytes || 0}`); + } + + private processMessageForNotification(message: any): void { + // Check if this message is for our account and we're not the sender + if (message.address_to === this.config?.address && message.address_from !== this.config?.address) { + // Strip HTML from message for notification using safe sanitization + const text = stripHtml(message.message) || 'New message'; + + // Send notification request to Android + this.sendToKotlin({ + target: 'android', + command: 'show_notification', + params: { + title: `Message from ${message.address_from}`, + text: text.substring(0, 100), + accountId: this.config?.accountId, + messageUid: message.uid, + conversationAddress: message.address_from, + }, + }); + } + } + + // Send message through connection module + sendMessageToServer(command: string, params: any): void { + connectionSendData( + this.account, + null, + command, + params, + true, + (_req, res) => { + if (res.error !== false) { + this.log('error', `Error sending ${command}: ${res.message || 'Unknown error'}`); + } + }, + false + ); + } + + private sendToKotlin(data: any): void { + try { + KotlinBridge.sendMessage(JSON.stringify(data)); + } catch (error) { + this.log('error', `Failed to send message to Kotlin: ${error}`); + } + } + + private log(level: string, message: string): void { + if (typeof KotlinBridge !== 'undefined') { + KotlinBridge.log(level, `[MessagesService] ${message}`); + } else { + console.log(`[MessagesService] [${level}] ${message}`); + } + } + + destroy(): void { + this.log('info', 'Service being destroyed'); + + // Deinitialize subscriptions + if (this.account) { + deinitializeSubscriptions(this.account, true); + } + + // Clear handlers + this.messageHandlers.clear(); + this.account = null; + this.config = null; + } +} + +// Create global instance +const messagesService = new MessagesBackgroundService(); + +// Export for global access from native layer +(globalThis as any).YellowMessagesService = { + init: (config: IServiceConfig) => messagesService.init(config), + handleMessage: (message: any) => messagesService.handleMessage(message), + destroy: () => messagesService.destroy(), +}; + +// For module systems +if (typeof module !== 'undefined' && module.exports) { + module.exports = { YellowMessagesService: messagesService }; +} diff --git a/src/modules/org.libersoft.messages/splitAndLinkify.js b/src/modules/org.libersoft.messages/scripts/splitAndLinkify.ts similarity index 90% rename from src/modules/org.libersoft.messages/splitAndLinkify.js rename to src/modules/org.libersoft.messages/scripts/splitAndLinkify.ts index 6a5ffbe2c..eacd98790 100644 --- a/src/modules/org.libersoft.messages/splitAndLinkify.js +++ b/src/modules/org.libersoft.messages/scripts/splitAndLinkify.ts @@ -1,4 +1,9 @@ -export function splitAndLinkify(text) { +interface SplitResult { + type: 'plain' | 'processed'; + value: string; +} + +export function splitAndLinkify(text: string): SplitResult[] { let pattern = [ "(https?:\\/\\/(?:[a-zA-Z0-9-._~%!$&'()*+,;=]+" + "(?::[a-zA-Z0-9-._~%!$&'()*+,;=]*)?@)?" + '(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+' + '(?:\\.[a-zA-Z]{2,})?' + '(?::\\d+)?' + '(?:\\/[^"\\s]*)?)', // <-- exclude " from URL path "(ftps?:\\/\\/(?:[a-zA-Z0-9-._~%!$&'()*+,;=]+" + "(?::[a-zA-Z0-9-._~%!$&'()*+,;=]*)?@)?" + '(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+' + '(?:\\.[a-zA-Z]{2,})?' + '(?::\\d+)?' + '(?:\\/[^"\\s]*)?)', // <-- exclude " from URL path @@ -9,7 +14,7 @@ export function splitAndLinkify(text) { ].join('|'); //console.log('splitAndLinkify pattern:', pattern); const combinedPattern = new RegExp(pattern, 'g'); - const result = []; + const result: SplitResult[] = []; let lastIndex = 0; // matchAll returns an iterator of match objects for (const match of text.matchAll(combinedPattern)) { diff --git a/src/modules/org.libersoft.messages/stickers.js b/src/modules/org.libersoft.messages/scripts/stickers.ts similarity index 63% rename from src/modules/org.libersoft.messages/stickers.js rename to src/modules/org.libersoft.messages/scripts/stickers.ts index 0957f6081..5721fb8e0 100644 --- a/src/modules/org.libersoft.messages/stickers.js +++ b/src/modules/org.libersoft.messages/scripts/stickers.ts @@ -1,24 +1,33 @@ -import { writable, get, derived } from 'svelte/store'; -import { stickers_db } from './db.ts'; -import { localStorageSharedStore } from '../../lib/svelte-shared-store.ts'; +import { writable, get } from 'svelte/store'; +import { stickers_db } from '@/org.libersoft.messages/scripts/db.ts'; +import { localStorageSharedStore } from '@/lib/svelte-shared-store.ts'; -// TODO: this is an extra state that safeguards against triggering the update after a HMR -window.stickerLibraryUpdaterState = { updating: false }; -import.meta.hot?.dispose(() => (window.stickerLibraryUpdaterState.canceled = true)); +const _window = window as any; -export let stickerLibraryUpdaterState = writable({}); -export let stickerset_favorites = localStorageSharedStore('stickerset_favorites', []); +// TODO: this is an extra state that safeguards against triggering the update after a HMR +_window.stickerLibraryUpdaterState = { updating: false }; +import.meta.hot?.dispose(() => (_window.stickerLibraryUpdaterState.canceled = true)); + +export let stickerLibraryUpdaterState = writable<{ updating: boolean; status: string; progress: number; error: boolean | null; updated_once: boolean; canceled: boolean }>({ + updating: false, + status: '', + progress: 0, + error: null, + updated_once: false, + canceled: false, +}); +export let stickerset_favorites = localStorageSharedStore('stickerset_favorites', []); stickerLibraryUpdaterState.subscribe(state => { - console.log('stickerLibraryUpdaterState:', state); - window.stickerLibraryUpdaterState = state; + //console.log('stickerLibraryUpdaterState:', state); + _window.stickerLibraryUpdaterState = state; }); - -export let sticker_servers = localStorageSharedStore('sticker_servers', ['https://stickers.libersoft.org']); +export const defaultStickerServers = ['https://stickers.libersoft.org']; +export let sticker_servers = localStorageSharedStore('sticker_servers', defaultStickerServers); export let sticker_server_index = localStorageSharedStore('sticker_server_index', 0); -export let sticker_server = localStorageSharedStore('sticker_server'); +export let sticker_server = localStorageSharedStore('sticker_server', undefined); -function update_sticker_server() { +function update_sticker_server(): void { let servers = get(sticker_servers); let index = get(sticker_server_index); if (get(sticker_server) !== servers[index]) sticker_server.set(servers[index]); @@ -27,31 +36,31 @@ sticker_servers.subscribe(update_sticker_server); sticker_server_index.subscribe(update_sticker_server); sticker_server.subscribe(() => { - console.log('sticker_server changed:', get(sticker_server)); + //console.log('sticker_server changed:', get(sticker_server)); //stickerLibraryUpdaterState.update(state => ({ ...state, updated_once: false })); }); -function sanitizeStickerServerUrl(url) { +function sanitizeStickerServerUrl(url: string): string { return url.endsWith('/') ? url.slice(0, -1) : url; } -export async function fetchStickerset(stickerServer, id = 0) { +export async function fetchStickerset(stickerServer: string, id: number | string = 0): Promise { // This is a simple fetch of a single sticker set. There is some overlap with updateStickerLibrary, but it's not worth refactoring now id = Number(id); let response = await fetch(sanitizeStickerServerUrl(stickerServer) + '/api/sets?id=' + id); - response = await response.json(); - let sets = response?.data; + let responseData = await response.json(); + let sets = responseData?.data; let stickerset = sets[0]; stickerset.url = stickerServer + '/api/sets?id=' + stickerset.id; stickerset.items.forEach(sticker => (sticker.url = stickerServer + '/download/' + (stickerset.animated ? 'animated' : 'static') + '/' + stickerset.alias + '/' + sticker.name)); return stickerset; } -function setUpdatingFalse() { +function setUpdatingFalse(): void { stickerLibraryUpdaterState.update(state => ({ ...state, updating: false })); } -function check_sticker_server_url(stickerServer) { +function check_sticker_server_url(stickerServer: string | undefined): boolean { if (!stickerServer || stickerServer === '') { stickerLibraryUpdaterState.update(state => ({ ...state, status: 'No sticker server URL set', error: true })); return false; @@ -67,108 +76,100 @@ function check_sticker_server_url(stickerServer) { return true; } -export async function updateStickerLibrary() { - console.log('updateStickerLibrary...'); - - if (window.stickerLibraryUpdaterState?.updating) { +export async function updateStickerLibrary(): Promise { + console.log('updateStickerLibrary called'); + if (_window.stickerLibraryUpdaterState?.updating) { console.log('Sticker library update already in progress'); return; } - - if (window.stickerLibraryUpdaterState?.canceled) { + if (_window.stickerLibraryUpdaterState?.canceled) { console.log('Sticker library update canceled'); return; } - stickerLibraryUpdaterState.update(state => ({ ...state, - status: `Update started ...`, + status: 'Update started ...', updating: true, progress: 0, updated_once: true, error: null, canceled: false, })); - let stickerServer = get(sticker_server); if (!check_sticker_server_url(stickerServer)) { setUpdatingFalse(); return; } - - let stickerServer2 = sanitizeStickerServerUrl(stickerServer); - + let stickerServer2 = sanitizeStickerServerUrl(stickerServer as string); stickerLibraryUpdaterState.update(state => ({ ...state, - status: `Downloading sticker sets from ${stickerServer} ...`, + status: 'Downloading sticker sets from ' + stickerServer + ' ...', })); console.log('Loading list of stickersets from: ' + stickerServer); let startFetchSets = Date.now(); - - let response; + let responseJson; try { - response = await fetch(stickerServer2 + '/api/sets'); - response = await response.json(); + let response = await fetch(stickerServer2 + '/api/sets'); + responseJson = await response.json(); } catch (e) { console.error('Failed to fetch stickersets:', e); stickerLibraryUpdaterState.update(state => ({ ...state, - status: `Failed to fetch stickersets: ${e}`, + status: 'Failed to fetch stickersets: ' + e, error: true, })); setUpdatingFalse(); return; } - - let sets = response?.data; - console.log('discovered ' + sets.length + ' stickersets in ' + (Date.now() - startFetchSets) + 'ms'); + let sets = responseJson?.data; + console.log('Discovered ' + sets.length + ' sticker sets in ' + (Date.now() - startFetchSets) + 'ms'); // Delete all stickers that are part of stickerset that has server equal to stickerServer - console.log('clearing old stickers from db...'); - + console.log('Clearing old stickers from local database...'); await stickers_db.transaction('rw', stickers_db.stickers, stickers_db.stickersets, async () => { //let old_sets = await stickers_db.stickersets.where('server').equals(stickerServer).primaryKeys(); //console.log('delete old sets:', old_sets.length, '...'); - stickerLibraryUpdaterState.update(state => ({ ...state, - status: 'Removing old stickersets from local database ...', + status: 'Deleting old sticker sets from local database ...', progress: 5, })); - await stickers_db.stickersets.where('server').equals(stickerServer).delete(); - - console.log('delete old stickers...'); + await stickers_db.stickersets + .where('server') + .equals(stickerServer as string) + .delete(); + console.log('Delete old stickers...'); stickerLibraryUpdaterState.update(state => ({ ...state, - status: 'Removing old stickers from local database ...', + status: 'Deleting old stickers from local database ...', progress: 10, })); - await stickers_db.stickers.where('server').equals(stickerServer).delete(); + await stickers_db.stickers + .where('server') + .equals(stickerServer as string) + .delete(); }); - console.log('Done clearing old stickers from db.'); + console.log('Done clearing old stickers from database.'); console.log('Removed db.stickersets:', await stickers_db.stickersets.toArray()); console.log('Removed db.stickers:', await stickers_db.stickers.toArray()); - - let stickersets_batch = []; - let stickers_batch = []; - + let stickersets_batch: any[] = []; + let stickers_batch: any[] = []; for (let i = 0; i < sets.length; i++) { let stickerset = sets[i]; let stickers = stickerset.items; delete stickerset.items; stickerset.server = stickerServer; stickerset.url = stickerServer2 + '/api/sets?id=' + stickerset.id; - if (i % 55 === 0) { + if (i % 50 === 0) { stickerLibraryUpdaterState.update(state => ({ ...state, - status: 'Saving stickerset ' + i + '/' + sets.length + '...', + status: 'Saving sticker set ' + i + '/' + sets.length + '...', progress: (100 * i) / sets.length, })); - //console.log('loading stickerset ' + i + '/' + sets.length); + //console.log('Loading sticker set ' + i + '/' + sets.length); //await stickers_db.stickersets.bulkAdd(stickersets_batch.splice(0, stickersets_batch.length)); await stickers_db.stickers.bulkAdd(stickers_batch.splice(0, stickers_batch.length)); } - - if (window.stickerLibraryUpdaterState.canceled) { + if (_window.stickerLibraryUpdaterState.canceled) { console.log('Sticker library update canceled'); stickerLibraryUpdaterState.update(state => ({ ...state, @@ -178,11 +179,8 @@ export async function updateStickerLibrary() { })); return; } - //console.log('stickerset:', stickerset); - stickersets_batch.push(stickerset); - for (let sticker of stickers) { sticker.stickerset = stickerset.id; sticker.server = stickerServer; @@ -190,13 +188,11 @@ export async function updateStickerLibrary() { stickers_batch.push(sticker); } } - await stickers_db.stickers.bulkAdd(stickers_batch); stickerLibraryUpdaterState.update(state => ({ ...state, status: 'Loading sticker list ...', progress: 100 })); await stickers_db.stickersets.bulkAdd(stickersets_batch); - console.log('Done loading, db.stickers.count:', await stickers_db.stickers.count(), 'db.stickersets.count:', await stickers_db.stickersets.count()); - console.log('spent:', Date.now() - startFetchSets, 'ms'); + console.log('Spent:', Date.now() - startFetchSets, 'ms'); stickerLibraryUpdaterState.update(state => ({ ...state, status: 'Sticker library updated', @@ -205,7 +201,7 @@ export async function updateStickerLibrary() { })); } -export function add_stickerset_to_favorites(stickerset) { +export function add_stickerset_to_favorites(stickerset: any): void { console.log('Add to favorites:', stickerset); let key = stickerset.url; let favorites = get(stickerset_favorites); @@ -215,7 +211,7 @@ export function add_stickerset_to_favorites(stickerset) { } } -export function remove_stickerset_from_favorites(stickerset) { +export function remove_stickerset_from_favorites(stickerset: any): void { console.log('Remove from favorites:', stickerset); let key = stickerset.url; let favorites = get(stickerset_favorites); @@ -226,7 +222,7 @@ export function remove_stickerset_from_favorites(stickerset) { } } -export function stickerset_in_favorites(stickerset) { +export function stickerset_in_favorites(stickerset: any): boolean { let key = stickerset.url; let favorites = get(stickerset_favorites); return favorites.indexOf(key) !== -1; diff --git a/src/modules/org.libersoft.messages/types.ts b/src/modules/org.libersoft.messages/scripts/types.ts similarity index 100% rename from src/modules/org.libersoft.messages/types.ts rename to src/modules/org.libersoft.messages/scripts/types.ts diff --git a/src/modules/org.libersoft.messages/ui.js b/src/modules/org.libersoft.messages/scripts/ui.ts similarity index 72% rename from src/modules/org.libersoft.messages/ui.js rename to src/modules/org.libersoft.messages/scripts/ui.ts index 399078a02..23a4d938d 100644 --- a/src/modules/org.libersoft.messages/ui.js +++ b/src/modules/org.libersoft.messages/scripts/ui.ts @@ -1,18 +1,16 @@ -export function longpress(node, threshold = 300) { - const handle_mousedown = e => { - let start = Date.now(); +export function longpress(node: HTMLElement, threshold: number = 300): { destroy(): void } { + const handle_mousedown = (e: MouseEvent): void => { node.dispatchEvent(new CustomEvent('mymousedown', { detail: e })); const timeout = setTimeout(() => { node.dispatchEvent(new CustomEvent('longpress', { detail: e })); }, threshold); - const cancel = e => { + const cancel = (_e: Event): void => { clearTimeout(timeout); node.removeEventListener('mousemove', cancel); node.removeEventListener('mouseup', cancel); - e.preventDefault(); - e.stopPropagation(); + node.removeEventListener('click', cancel); }; node.addEventListener('mousemove', cancel); diff --git a/src/modules/org.libersoft.messages/utils/htmlUtils.ts b/src/modules/org.libersoft.messages/scripts/utils/htmlUtils.ts similarity index 58% rename from src/modules/org.libersoft.messages/utils/htmlUtils.ts rename to src/modules/org.libersoft.messages/scripts/utils/htmlUtils.ts index cb8f85df5..fc409acea 100644 --- a/src/modules/org.libersoft.messages/utils/htmlUtils.ts +++ b/src/modules/org.libersoft.messages/scripts/utils/htmlUtils.ts @@ -1,3 +1,17 @@ +import DOMPurify from 'dompurify'; + +/** + * Safely strips all HTML tags from a string using DOMPurify + * This prevents XSS attacks and handles edge cases like unclosed tags and multi-character sequences + * @param {string} html - The HTML string to strip + * @returns {string} Plain text with all HTML removed + */ +export function stripHtml(html: string): string { + if (!html) return ''; + // Use DOMPurify to safely strip all HTML tags + return DOMPurify.sanitize(html, { ALLOWED_TAGS: [], ALLOWED_ATTR: [] }); +} + /** * Wraps consecutive elements named `X` with a new element `Y` if there are more than 2 consecutive occurrences. * @@ -14,34 +28,27 @@ export function wrapConsecutiveElements(fragment: DocumentFragment, xName: strin let consecutiveXs: Element[] = []; for (let i = 0; i < children.length; i++) { - const child = children[i]; - - if (child.nodeType === Node.ELEMENT_NODE && (child as Element).tagName.toLowerCase() === xName) { - consecutiveXs.push(child as Element); - } else { - if (consecutiveXs.length >= minConsecutive) { - wrapWithY(consecutiveXs); - } + const child = children[i]!; + + if (child.nodeType === Node.ELEMENT_NODE && (child as Element).tagName.toLowerCase() === xName) consecutiveXs.push(child as Element); + else { + if (consecutiveXs.length >= minConsecutive) wrapWithY(consecutiveXs); consecutiveXs = []; // Reset the sequence if non-X is found } } // Handle any trailing sequence of X elements - if (consecutiveXs.length >= minConsecutive) { - wrapWithY(consecutiveXs); - } + if (consecutiveXs.length >= minConsecutive) wrapWithY(consecutiveXs); // Recurse into child elements children.forEach(child => { - if (child.nodeType === Node.ELEMENT_NODE) { - processParent(child as Element); - } + if (child.nodeType === Node.ELEMENT_NODE) processParent(child as Element); }); } function wrapWithY(elements: Element[]): void { const wrapper = document.createElement(yName); - elements[0].parentNode!.insertBefore(wrapper, elements[0]); + elements[0]!.parentNode!.insertBefore(wrapper, elements[0]!); elements.forEach(el => wrapper.appendChild(el)); } diff --git a/src/modules/org.libersoft.messages/utils/tests/unit/yellowUtils.test.ts b/src/modules/org.libersoft.messages/scripts/utils/tests/unit/yellowUtils.test.ts similarity index 95% rename from src/modules/org.libersoft.messages/utils/tests/unit/yellowUtils.test.ts rename to src/modules/org.libersoft.messages/scripts/utils/tests/unit/yellowUtils.test.ts index 2bbf927f0..47cfc6d4e 100644 --- a/src/modules/org.libersoft.messages/utils/tests/unit/yellowUtils.test.ts +++ b/src/modules/org.libersoft.messages/scripts/utils/tests/unit/yellowUtils.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from 'vitest'; -import { extractYellowValue, YELLOW_SRC_PROTOCOL } from '@/org.libersoft.messages/utils/yellowUtils.ts'; +import { extractYellowValue, YELLOW_SRC_PROTOCOL } from '@/org.libersoft.messages/scripts/utils/yellowUtils.ts'; describe('extractYellowValue', () => { test('should extract value', () => { @@ -19,7 +19,6 @@ describe('extractYellowValue', () => { // @ts-ignore expect(extractYellowValue(null)).toBe(null); // @ts-ignore - expect(extractYellowValue(123)).toBe(null); // @ts-ignore expect(extractYellowValue(NaN)).toBe(null); diff --git a/src/modules/org.libersoft.messages/utils/yellowUtils.ts b/src/modules/org.libersoft.messages/scripts/utils/yellowUtils.ts similarity index 65% rename from src/modules/org.libersoft.messages/utils/yellowUtils.ts rename to src/modules/org.libersoft.messages/scripts/utils/yellowUtils.ts index 739121f04..95d41c6c2 100644 --- a/src/modules/org.libersoft.messages/utils/yellowUtils.ts +++ b/src/modules/org.libersoft.messages/scripts/utils/yellowUtils.ts @@ -1,10 +1,10 @@ export const YELLOW_SRC_PROTOCOL = 'yellow:'; -export const isYellowProtocol = (value: any) => { +export const isYellowProtocol = (value: any): boolean => { return typeof value === 'string' ? value.startsWith(YELLOW_SRC_PROTOCOL) : false; }; -export const extractYellowValue = (str: string) => { +export const extractYellowValue = (str: string): string | null => { if (isYellowProtocol(str)) { return str.slice(YELLOW_SRC_PROTOCOL.length); } else { diff --git a/src/modules/org.libersoft.messages/services/Files/FileDownloadService.ts b/src/modules/org.libersoft.messages/services/Files/FileDownloadService.ts index ffea3f921..70a6a29a6 100644 --- a/src/modules/org.libersoft.messages/services/Files/FileDownloadService.ts +++ b/src/modules/org.libersoft.messages/services/Files/FileDownloadService.ts @@ -1,4 +1,4 @@ -import { type FileDownload, type FileDownloadStoreType, type FileUploadChunk, type FileUploadRecord, FileUploadRecordStatus } from './types.ts'; +import { type IFileDownload, type FileDownloadStoreType, type IFileUploadRecord, FileUploadRecordStatus, type PullChunkFn } from './types.ts'; import { makeFileDownload } from './utils.ts'; import EventEmitter from 'events'; import fileDownloadStore from '../../stores/FileDownloadStore.ts'; @@ -11,21 +11,13 @@ export class FileDownloadService extends EventEmitter { this.downloadStore = downloadStore; } - async startDownloadSerial( - records: FileUploadRecord[], - pullChunkFn: (data: { uploadId: string; offsetBytes: number; chunkSize: number }) => Promise<{ - chunk: FileUploadChunk; - }>, - finishCallback: (download: FileDownload) => void - ) { + async startDownloadSerial(records: IFileUploadRecord[], pullChunkFn: PullChunkFn, finishCallback: (download: IFileDownload) => void): Promise { for (const record of records) { - let download: FileDownload | undefined = this.downloadStore.get(record.id); - + let download: IFileDownload | undefined = this.downloadStore.get(record.id); if (!download) { download = makeFileDownload({ record }); this.downloadStore.set(record.id, download); } - download.pullChunk = async () => { const retry = () => { setTimeout(() => { @@ -36,7 +28,6 @@ export class FileDownloadService extends EventEmitter { download.running = running; this.downloadStore.set(record.id, download); }; - if (download.canceledLocally) { this.downloadStore.delete(record.id); return; @@ -56,28 +47,26 @@ export class FileDownloadService extends EventEmitter { // TODO: clear memory return; } - try { setRunning(true); const chunkSize = record.chunkSize; + const receivedCount = download.chunksReceived.filter(c => c !== undefined).length; const { chunk } = await pullChunkFn({ uploadId: record.id, - offsetBytes: download.chunksReceived.length * chunkSize, + offsetBytes: receivedCount * chunkSize, chunkSize: record.chunkSize, }); - // Decode Base64 chunk back to binary download.chunksReceived[chunk.chunkId] = chunk.data; // Store chunk in the correct order this.downloadStore.set(record.id, download); - + const totalReceived = download.chunksReceived.filter(c => c !== undefined).length; // Check if all chunks have been received - if (download.chunksReceived.length * chunkSize >= record.fileSize) { + if (totalReceived * chunkSize >= record.fileSize) { setRunning(false); finishCallback && finishCallback(download); + download.chunksReceived = []; setTimeout(() => this.startNextDownload(download)); this.downloadStore.delete(record.id); - // Clean up memory - // download.chunksReceived = []; } else { download.pullChunk && (await download.pullChunk()); } @@ -91,24 +80,22 @@ export class FileDownloadService extends EventEmitter { } } - async startDownload(download: FileDownload) { - if (this.downloadStore.isAnyDownloadRunning()) { - return; - } + async startDownload(download: IFileDownload): Promise { + if (this.downloadStore.isAnyDownloadRunning()) return; download.pullChunk && (await download.pullChunk()); } - async startNextDownload(lastDownload: FileDownload) { + async startNextDownload(lastDownload: IFileDownload): Promise { if (this.downloadStore.isAnyDownloadRunning()) { return; } const downloads = this.downloadStore.getAll(); - let nextDownload: FileDownload | undefined; + let nextDownload: IFileDownload | undefined; const lastDownloadIndex = downloads.findIndex(d => d.record.id === lastDownload.record.id); // find next download for (let i = lastDownloadIndex + 1; i < downloads.length; i++) { - const download = downloads[i]; + const download = downloads[i]!; if (!download.pausedLocally && !download.canceledLocally) { nextDownload = download; break; @@ -120,7 +107,7 @@ export class FileDownloadService extends EventEmitter { } } - async pauseDownload(uploadId: string) { + async pauseDownload(uploadId: string): Promise { const download = this.downloadStore.get(uploadId); if (download) { download.pausedLocally = true; @@ -128,7 +115,7 @@ export class FileDownloadService extends EventEmitter { } } - async resumeDownload(uploadId: string) { + async resumeDownload(uploadId: string): Promise { const download = this.downloadStore.get(uploadId); if (download) { download.pausedLocally = false; @@ -136,7 +123,7 @@ export class FileDownloadService extends EventEmitter { } } - async cancelDownload(uploadId: string) { + async cancelDownload(uploadId: string): Promise { const download = this.downloadStore.get(uploadId); if (download) { download.canceledLocally = true; diff --git a/src/modules/org.libersoft.messages/services/Files/FileUploadService.ts b/src/modules/org.libersoft.messages/services/Files/FileUploadService.ts index a6e695358..b7f8c60ef 100644 --- a/src/modules/org.libersoft.messages/services/Files/FileUploadService.ts +++ b/src/modules/org.libersoft.messages/services/Files/FileUploadService.ts @@ -1,4 +1,4 @@ -import { type CustomFile, type FileUpload, type FileUploadBeginOptions, type FileUploadRecord, FileUploadRecordStatus, FileUploadRecordType, FileUploadRole, type FileUploadStoreType } from './types.ts'; +import { type ICustomFile, type IFileUpload, type IFileUploadBeginOptions, type IFileUploadRecord, FileUploadRecordStatus, FileUploadRecordType, FileUploadRole, type FileUploadStoreType, type IGetChunkResult } from './types.ts'; import { blobToBase64, makeFileUpload, makeFileUploadRecord } from './utils.ts'; import EventEmitter from 'events'; import fileUploadStore from '../../stores/FileUploadStore.ts'; @@ -15,10 +15,10 @@ export class FileUploadService extends EventEmitter { this.uploadsStore = uploadsStore; } - beginUpload(files: FileList, type: FileUploadRecordType, acc, options: FileUploadBeginOptions) { - const uploads: FileUpload[] = []; + beginUpload(files: FileList, type: FileUploadRecordType, acc, options: IFileUploadBeginOptions): { uploads: IFileUpload[] } { + const uploads: IFileUpload[] = []; for (let i = 0; i < files.length; i++) { - const file = files[i] as CustomFile; + const file = files[i] as ICustomFile; const record = makeFileUploadRecord({ type, fileOriginalName: file.name, @@ -41,53 +41,38 @@ export class FileUploadService extends EventEmitter { return { uploads }; } - async getChunk(uploadId: string, chunkId: number, chunkSize: number) { + async getChunk(uploadId: string, chunkId: number, chunkSize: number): Promise { const upload = this.uploadsStore.get(uploadId); - - if (!upload) { - throw new Error('Upload not found'); - } - if (!upload.file) { - throw new Error('File is not set in file transfer'); - } - + if (!upload) throw new Error('Upload not found'); + if (!upload.file) throw new Error('File is not set in file transfer'); const blob = upload.file.slice(chunkId * chunkSize, chunkId * chunkSize + chunkSize); - const chunk = { chunkId, uploadId, checksum: '', data: await blobToBase64(blob), }; - return { chunk, upload, blob }; } - async startUploadSerial(records: FileUploadRecord[], pushFn: (data: { chunk: any; upload: FileUpload }) => Promise) { + async startUploadSerial(records: IFileUploadRecord[], pushFn: (data: { chunk: any; upload: IFileUpload }) => Promise): Promise { for (let i = 0; i < records.length; i++) { - const record = records[i]; + const record = records[i]!; const upload = this.uploadsStore.get(record.id); - - if (!upload) { - continue; - } - if (!upload.file) { - continue; - } - + if (!upload) continue; + if (!upload.file) continue; const { chunksSent } = upload; const { chunkSize } = upload.record; - upload.pushChunk = async () => { const setRunning = (running: boolean) => { upload.running = running; this.uploadsStore.set(record.id, upload); }; - setRunning(true); if (upload.record.status === FileUploadRecordStatus.CANCELED || upload.record.status === FileUploadRecordStatus.ERROR) { setRunning(false); upload.pushChunk = undefined; + this.p2pThrottleMemory.delete(record.id); return; } if (upload.record.status === FileUploadRecordStatus.PAUSED) { @@ -97,6 +82,7 @@ export class FileUploadService extends EventEmitter { if (chunksSent.length === Math.ceil(record.fileSize / chunkSize)) { upload.record.status = FileUploadRecordStatus.FINISHED; this.uploadsStore.set(record.id, upload); + this.p2pThrottleMemory.delete(record.id); setRunning(false); setTimeout(() => this.startNextUpload(upload)); return; @@ -105,20 +91,16 @@ export class FileUploadService extends EventEmitter { setRunning(false); return; } - const lastChunkId = chunksSent[chunksSent.length - 1]; const newChunkId = lastChunkId === undefined ? 0 : lastChunkId + 1; const { chunk } = await this.getChunk(upload.record.id, newChunkId, chunkSize); - await pushFn({ chunk, upload }); chunksSent[newChunkId] = newChunkId; this.uploadsStore.set(record.id, upload); - if (record.type === FileUploadRecordType.P2P) { const throttleMemory = this.p2pThrottleMemory.get(record.id) || 0; this.p2pThrottleMemory.set(record.id, throttleMemory + 1); } - upload.pushChunk && (await upload.pushChunk()); }; this.uploadsStore.set(record.id, upload); @@ -126,77 +108,55 @@ export class FileUploadService extends EventEmitter { } } - async startUpload(upload: FileUpload) { + async startUpload(upload: IFileUpload): Promise { console.log('this.uploadsStore.isAnyUploadRunning()', this.uploadsStore.isAnyUploadRunning()); - if (this.uploadsStore.isAnyUploadRunning()) { - return; - } + if (this.uploadsStore.isAnyUploadRunning()) return; upload.pushChunk && (await upload.pushChunk()); } - async startNextUpload(lastUpload: FileUpload) { + async startNextUpload(lastUpload: IFileUpload): Promise { const uploads = this.uploadsStore.getAll(); const lastUploadIndex = uploads.findIndex(upload => upload.record.id === lastUpload.record.id); - let nextUpload: FileUpload | undefined; - + let nextUpload: IFileUpload | undefined; // find next suitable upload for (let i = lastUploadIndex + 1; i < uploads.length; i++) { - const upload = uploads[i]; + const upload = uploads[i]!; if (upload.record.type === FileUploadRecordType.SERVER && upload.record.status === FileUploadRecordStatus.BEGUN) { nextUpload = upload; break; } } - - if (nextUpload) { - await this.startUpload(nextUpload); - } + if (nextUpload) await this.startUpload(nextUpload); } - async continueP2PUpload(uploadId: string) { + async continueP2PUpload(uploadId: string): Promise { // proceed to next batch const upload = this.uploadsStore.get(uploadId); - if (!upload) { - return; - } - if (!upload.file) { - return; - } + if (!upload) return; + if (!upload.file) return; // reset throttle memory this.p2pThrottleMemory.set(uploadId, 0); upload.pushChunk && !upload.running && (await upload.pushChunk()); } - pauseUpload(uploadId: string) { + pauseUpload(uploadId: string): void { const upload = this.uploadsStore.get(uploadId); - - if (!upload) { - return; - } - + if (!upload) return; upload.record.status = FileUploadRecordStatus.PAUSED; this.uploadsStore.set(uploadId, upload); } - resumeUpload(uploadId: string) { + resumeUpload(uploadId: string): void { const upload = this.uploadsStore.get(uploadId); - - if (!upload) { - return; - } - + if (!upload) return; upload.record.status = FileUploadRecordStatus.UPLOADING; this.uploadsStore.set(uploadId, upload); upload.pushChunk && upload.pushChunk(); } - cancelUpload(uploadId: string) { + cancelUpload(uploadId: string): void { const upload = this.uploadsStore.get(uploadId); - - if (!upload) { - return; - } - + if (!upload) return; upload.record.status = FileUploadRecordStatus.CANCELED; this.uploadsStore.set(uploadId, upload); } diff --git a/src/modules/org.libersoft.messages/services/Files/FilesService.ts b/src/modules/org.libersoft.messages/services/Files/FilesService.ts index 65b7f8841..420b7cecd 100644 --- a/src/modules/org.libersoft.messages/services/Files/FilesService.ts +++ b/src/modules/org.libersoft.messages/services/Files/FilesService.ts @@ -1,7 +1,7 @@ import { get } from 'svelte/store'; -import filesDB, { type LocalFile, LocalFileStatus } from '@/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts'; -import { active_account } from '@/core/core'; -import { loadUploadData, makeDownloadChunkAsyncFn } from '../../messages'; +import filesDB, { type ILocalFile, LocalFileStatus } from '@/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts'; +import { active_account } from '@/core/scripts/core.ts'; +import { loadUploadData, makeDownloadChunkAsyncFn } from '@/org.libersoft.messages/scripts/messages.ts'; import fileUploadManager, { type FileUploadService } from './FileUploadService.ts'; import fileDownloadManager, { type FileDownloadService } from './FileDownloadService.ts'; import { liveQuery } from 'dexie'; @@ -15,13 +15,11 @@ export class FilesService { this.fileDownloadManager = fileDownloadManager; } - getOrDownloadAttachment(uploadId: string): Promise<{ localFile: LocalFile }> { - return new Promise(async (resolve, reject) => { + getOrDownloadAttachment(uploadId: string): Promise<{ localFile: ILocalFile }> { + return new Promise(async resolve => { const acc = get(active_account); - // check indexedDB if file is already downloaded (or being downloaded) const localFile = await filesDB.findFile(uploadId); - if (localFile) { if (localFile.localFileStatus === LocalFileStatus.READY) { resolve({ localFile }); @@ -35,34 +33,35 @@ export class FilesService { const sub = obs.subscribe(subscribedLocalFile => { if (subscribedLocalFile?.localFileStatus === LocalFileStatus.READY) { sub.unsubscribe(); - resolve({ localFile }); + resolve({ localFile: subscribedLocalFile }); + } else if (!subscribedLocalFile || !this.fileDownloadManager.downloadStore.get(uploadId)) { + sub.unsubscribe(); + // Download failed or was removed — delete stale record and re-download + if (subscribedLocalFile) { + filesDB.files.delete(subscribedLocalFile.id).then(() => { + this.getOrDownloadAttachment(uploadId).then(resolve); + }); + } else this.getOrDownloadAttachment(uploadId).then(resolve); } }); return; - } else { - // if reached here, file will probably never be downloaded so we gonna delete it - await filesDB.files.delete(localFile.id); - } + } else await filesDB.files.delete(localFile.id); // if reached here, file will probably never be downloaded so we gonna delete it } - // first fetch file record data const { record } = await loadUploadData(uploadId); - - const newLocalFile: Omit = { + const newLocalFile: Omit = { localFileStatus: LocalFileStatus.DOWNLOADING, fileTransferId: record.id, fileOriginalName: record.fileOriginalName, fileMimeType: record.fileMimeType, fileSize: record.fileSize, }; - await filesDB.addFile(newLocalFile); - this.fileDownloadManager.startDownloadSerial([record], makeDownloadChunkAsyncFn(acc), async download => { newLocalFile.localFileStatus = LocalFileStatus.READY; newLocalFile.fileBlob = new Blob(download.chunksReceived, { type: record.fileMimeType }); // const result = await filesDB.updateFile(record.id, newLocalFile); - resolve({ localFile: newLocalFile as LocalFile }); + resolve({ localFile: newLocalFile as ILocalFile }); }); }); } diff --git a/src/modules/org.libersoft.messages/services/Files/types.ts b/src/modules/org.libersoft.messages/services/Files/types.ts index 485452a94..c0b24e003 100644 --- a/src/modules/org.libersoft.messages/services/Files/types.ts +++ b/src/modules/org.libersoft.messages/services/Files/types.ts @@ -24,11 +24,11 @@ export enum FileUploadRecordErrorType { TIMEOUT_BY_SERVER = 'TIMEOUT_BY_SERVER', } -export interface CustomFile extends File { +export interface ICustomFile extends File { metadata: object | null; } -export interface FileUploadRecord { +export interface IFileUploadRecord { id: string; type: FileUploadRecordType; status: FileUploadRecordStatus; @@ -42,21 +42,21 @@ export interface FileUploadRecord { metadata: object | null; } -export interface FileUpload { +export interface IFileUpload { role: FileUploadRole; - file: CustomFile | null; - record: FileUploadRecord; + file: ICustomFile | null; + record: IFileUploadRecord; chunksSent: number[]; uploadInterval: NodeJS.Timeout | null; paused?: boolean; running?: boolean; // TODO: maybe refactor to setTimeout (see upload.pushChunk) uploadedBytes?: number; // only for non senders - pushChunk?: () => Promise; + pushChunk?: (() => Promise) | undefined; acc: any; } -export interface FileDownload { - record: FileUploadRecord; +export interface IFileDownload { + record: IFileUploadRecord; chunksReceived: any[]; data: any; createdAt: number; @@ -66,7 +66,7 @@ export interface FileDownload { pullChunk?: () => Promise; } -export interface FileUploadChunk { +export interface IFileUploadChunk { chunkId: number; uploadId: string; checksum: string; @@ -75,19 +75,19 @@ export interface FileUploadChunk { data: Uint8Array; } -export interface FileUploadBeginOptions { +export interface IFileUploadBeginOptions { chunkSize?: number; } -export type MakeFileUploadRecordData = Partial & Pick; +export type MakeFileUploadRecordData = Partial & Pick; -export type MakeFileUploadData = Partial & Pick; +export type MakeFileUploadData = Partial & Pick; -export type MakeFileDownloadData = Partial & Pick; +export type MakeFileDownloadData = Partial & Pick; -export type FileUploadStoreValue = FileUpload[]; +export type FileUploadStoreValue = IFileUpload[]; -export type FileDownloadStoreValue = FileDownload[]; +export type FileDownloadStoreValue = IFileDownload[]; export type BaseStoreType = { store: Writable; @@ -99,11 +99,32 @@ export type BaseStoreType = { }; export type FileUploadStoreType = { - updateUploadRecord: (id: string, record: FileUploadRecord) => void; + updateUploadRecord: (id: string, record: IFileUploadRecord) => void; isAnyUploadRunning: () => boolean; -} & BaseStoreType; +} & BaseStoreType; export type FileDownloadStoreType = { - updateDownloadRecord: (id: string, record: FileUploadRecord) => void; + updateDownloadRecord: (id: string, record: IFileUploadRecord) => void; isAnyDownloadRunning: () => boolean; -} & BaseStoreType; +} & BaseStoreType; + +export interface IFileChunkData { + chunkId: number; + uploadId: string; + checksum: string; + data: string; +} + +export interface IGetChunkResult { + chunk: IFileChunkData; + upload: IFileUpload; + blob: Blob; +} + +export interface IPullChunkRequest { + uploadId: string; + offsetBytes: number; + chunkSize: number; +} + +export type PullChunkFn = (data: IPullChunkRequest) => Promise<{ chunk: IFileUploadChunk }>; diff --git a/src/modules/org.libersoft.messages/services/Files/utils.ts b/src/modules/org.libersoft.messages/services/Files/utils.ts index 44f13276a..f444b9458 100644 --- a/src/modules/org.libersoft.messages/services/Files/utils.ts +++ b/src/modules/org.libersoft.messages/services/Files/utils.ts @@ -1,11 +1,11 @@ -import { type FileDownload, type FileUpload, type FileUploadRecord, FileUploadRecordStatus, FileUploadRecordType, type MakeFileDownloadData, type MakeFileUploadData, type MakeFileUploadRecordData } from './types.ts'; +import { type IFileDownload, type IFileUpload, type IFileUploadRecord, FileUploadRecordStatus, FileUploadRecordType, type MakeFileDownloadData, type MakeFileUploadData, type MakeFileUploadRecordData } from './types.ts'; import { v4 as uuidv4 } from 'uuid'; import MediaUtils from '@/org.libersoft.messages/services/Media/MediaUtils.ts'; import _debug from 'debug'; const debug = _debug('libersoft:messages:services:FileUploadService'); -export function makeFileUploadRecord(data: MakeFileUploadRecordData): FileUploadRecord { +export function makeFileUploadRecord(data: MakeFileUploadRecordData): IFileUploadRecord { const defaults = { id: uuidv4(), status: FileUploadRecordStatus.BEGUN, @@ -22,7 +22,7 @@ export function makeFileUploadRecord(data: MakeFileUploadRecordData): FileUpload return Object.assign(defaults, data); } -export function makeFileUpload(data: MakeFileUploadData): FileUpload { +export function makeFileUpload(data: MakeFileUploadData): IFileUpload { const defaults = { chunksSent: [], uploadInterval: null, @@ -30,7 +30,7 @@ export function makeFileUpload(data: MakeFileUploadData): FileUpload { return Object.assign(defaults, data); } -export function makeFileDownload(data: MakeFileDownloadData): FileDownload { +export function makeFileDownload(data: MakeFileDownloadData): IFileDownload { const defaults = { chunksReceived: [], data: null, @@ -40,19 +40,19 @@ export function makeFileDownload(data: MakeFileDownloadData): FileDownload { return Object.assign(defaults, data); } -export async function blobToBase64(blob: Blob) { +export async function blobToBase64(blob: Blob): Promise { const arrayBuffer = await blob.arrayBuffer(); // Get ArrayBuffer from the Blob const bytes = new Uint8Array(arrayBuffer); // Convert ArrayBuffer to Uint8Array let binaryString = ''; for (let i = 0; i < bytes.length; i++) { - binaryString += String.fromCharCode(bytes[i]); // Convert bytes to binary string + binaryString += String.fromCharCode(bytes[i]!); // Convert bytes to binary string } return btoa(binaryString); // Convert binary string to Base64 } -export async function base64ToUint8Array(base64: string) { +export async function base64ToUint8Array(base64: string): Promise { return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); } @@ -62,10 +62,10 @@ export async function base64ToUint8Array(base64: string) { * @param file {string | Blob} - url or blob * @param fileName - name of the file (this name will be used when downloading) */ -export function assembleFile(file: string | Blob, fileName?: string) { +export function assembleFile(file: string | Blob, fileName?: string): void { const downloadLink = document.createElement('a'); downloadLink.href = file instanceof Blob ? URL.createObjectURL(file) : file; - downloadLink.download = fileName || (file instanceof Blob ? file.name : 'unknown_file'); + downloadLink.download = fileName || (file instanceof File ? file.name : 'unknown_file'); // fixme: file is (string | Blob), but Blob does not have name property downloadLink.target = '_blank'; downloadLink.style.display = 'none'; @@ -76,9 +76,9 @@ export function assembleFile(file: string | Blob, fileName?: string) { console.log(`File download complete: ${fileName}`); } -export async function transformFilesForServer(files: FileList) { +export async function transformFilesForServer(files: FileList): Promise { for (let i = 0; i < files.length; i++) { - const file = files[i]; + const file = files[i]!; const mimeType = file.type; if (mimeType.startsWith('audio/')) { diff --git a/src/modules/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts b/src/modules/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts index ea643e5d6..73745c57a 100644 --- a/src/modules/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts +++ b/src/modules/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts @@ -9,7 +9,7 @@ export enum LocalFileStatus { READY = 'READY', } -export interface LocalFile { +export interface ILocalFile { id: number; localFileStatus: LocalFileStatus; fileTransferId: string; @@ -19,7 +19,7 @@ export interface LocalFile { fileBlob?: Blob; } -// export interface LocalFileChunk { +// export interface ILocalFileChunk { // id: number; // fileTransferId: string; // chunkId: number; @@ -30,7 +30,7 @@ export interface LocalFile { // } export class FilesLocalDB extends Dexie { - files!: Dexie.Table; + files!: Dexie.Table; // filesChunks!: Dexie.Table; constructor() { @@ -41,16 +41,16 @@ export class FilesLocalDB extends Dexie { }); } - async addFile(file: Omit) { + async addFile(file: Omit) { console.log('AAA adding file'); - return this.files.add(file as LocalFile); + return this.files.add(file as ILocalFile); } async findFile(fileTransferId: string) { return this.files.where({ fileTransferId }).first(); } - async updateFile(fileTransferId: string, update: Partial) { + async updateFile(fileTransferId: string, update: Partial) { // const f = await this.files.where({ fileTransferId }).first(); return await this.files.where({ fileTransferId }).modify(update); } diff --git a/src/modules/org.libersoft.messages/services/Media/MediaService.ts b/src/modules/org.libersoft.messages/services/Media/MediaService.ts index d87d5e80a..3c2e2392a 100644 --- a/src/modules/org.libersoft.messages/services/Media/MediaService.ts +++ b/src/modules/org.libersoft.messages/services/Media/MediaService.ts @@ -1,6 +1,6 @@ import videoJS from 'video.js'; import 'video.js/dist/video-js.css'; -import type { MediaFileInfo, MediaLoader } from './loaders/types.ts'; +import type { IMediaFileInfo, MediaLoader } from './loaders/types.ts'; import MP4Loader from './loaders/MP4Loader.ts'; import BasicStreamLoader from './loaders/BasicStreamLoader.ts'; import _debounce from 'lodash/debounce'; @@ -9,45 +9,36 @@ import WaveSurfer from 'wavesurfer.js'; class MediaService { videoElement: HTMLVideoElement; _getFileChunk: (args: { offsetBytes: number; chunkSize: number }) => Promise<{ chunk: { data: Uint8Array } }>; - loader: MediaLoader | null = null; mediaSource: MediaSource | null = null; player: ReturnType | null = null; - fileInfo: MediaFileInfo; - + fileInfo: IMediaFileInfo; fetchQueue: number[] = []; fetchQueueInterval: any | null = null; + private _cleanupListeners: Array<() => void> = []; - constructor(videoElement: HTMLVideoElement, getFileChunk: MediaService['_getFileChunk'], fileInfo: MediaFileInfo) { + constructor(videoElement: HTMLVideoElement, getFileChunk: MediaService['_getFileChunk'], fileInfo: IMediaFileInfo) { this.videoElement = videoElement; this._getFileChunk = getFileChunk; this.fileInfo = fileInfo; } - setupWavesurfer(element, options) { + setupWavesurfer(element, options): WaveSurfer { this.mediaSource = new MediaSource(); const mediaSource = this.mediaSource as MediaSource; const url = URL.createObjectURL(mediaSource); - mediaSource.addEventListener('sourceopen', () => { let pickedLoader: MediaLoader | null = null; - if (this.fileInfo.fileMime.startsWith('audio')) { - pickedLoader = new BasicStreamLoader(mediaSource, this.fileInfo, this._getFileChunk); - } - + if (this.fileInfo.fileMime.startsWith('audio')) pickedLoader = new BasicStreamLoader(mediaSource, this.fileInfo, this._getFileChunk); // console.log('pickedLoader', pickedLoader); - if (pickedLoader) { this.loader = pickedLoader; this.loader.setup(this.fileInfo).then(() => { this.fetchQueue.push(0); this.setupFetchQueue(); }); - } else { - console.error('Unsupported mime type', this.fileInfo); - } + } else console.error('Unsupported mime type', this.fileInfo); }); - const wavesurfer = WaveSurfer.create({ sampleRate: 48000, container: element, @@ -61,14 +52,12 @@ class MediaService { duration: options.duration, peaks: options.peaks, }); - // @ts-ignore this.videoElement = wavesurfer.media; - return wavesurfer; } - setupVideo() { + setupVideo(): ReturnType | null { const videoElement = this.videoElement; this.player = videoJS(videoElement, { controls: true, @@ -78,32 +67,23 @@ class MediaService { fluid: true, }); const player = this.player as ReturnType; - // videoElement.onloadedmetadata = (...args) => { // console.log('loaded meta data', args, videoElement.duration); // }; - player.ready(() => { // streaming if (this.shouldStream()) { this.mediaSource = new MediaSource(); videoElement.src = URL.createObjectURL(this.mediaSource); const mediaSource = this.mediaSource as MediaSource; - mediaSource.addEventListener('sourceopen', () => { let pickedLoader: MediaLoader | null = null; - if (this.fileInfo.fileMime === 'video/mp4') { - pickedLoader = new MP4Loader(mediaSource, this.fileInfo, this._getFileChunk); - } else if (this.fileInfo.fileMime === 'video/webm') { - pickedLoader = new BasicStreamLoader(mediaSource, this.fileInfo, this._getFileChunk); - } - + if (this.fileInfo.fileMime === 'video/mp4') pickedLoader = new MP4Loader(mediaSource, this.fileInfo, this._getFileChunk); + else if (this.fileInfo.fileMime === 'video/webm') pickedLoader = new BasicStreamLoader(mediaSource, this.fileInfo, this._getFileChunk); if (pickedLoader) { this.loader = pickedLoader; this.loader.setup(this.fileInfo); - } else { - console.error('Unsupported mime type', this.fileInfo); - } + } else console.error('Unsupported mime type', this.fileInfo); }); } // full download, then play @@ -120,15 +100,11 @@ class MediaService { if (this.shouldStream()) { const currentTime = player.currentTime(); this.setupFetchQueue(); - - if (currentTime === 0) { - this.fetchQueue.push(0); - } + if (currentTime === 0) this.fetchQueue.push(0); } else { // pass } }); - const playEl = this.videoElement.parentNode?.querySelector('.vjs-big-play-button'); const prep = () => { console.log('clickeeed!!!'); @@ -138,56 +114,55 @@ class MediaService { player.play(); }); }; - playEl?.addEventListener('click', prep); playEl?.addEventListener('pointerdown', prep); - + if (playEl) { + this._cleanupListeners.push( + () => playEl.removeEventListener('click', prep), + () => playEl.removeEventListener('pointerdown', prep) + ); + } const EVENTS = ['loadstart', 'progress', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'seeking', 'seeked', 'ended', 'durationchange', 'timeupdate', 'play', 'pause', 'ratechange', 'resize', 'volumechange']; EVENTS.forEach(evt => { player.on(evt, () => console.log('test evt', evt)); }); - - this.videoElement.addEventListener('play', evt => { - // code you want to happen when the video plays - console.log('asdasdasdasdadasd'); - }); - + const onPlay = (_evt: Event) => { + console.log('Video\telement play event'); + }; + this.videoElement.addEventListener('play', onPlay); + this._cleanupListeners.push(() => this.videoElement.removeEventListener('play', onPlay)); const _seeking = _debounce(() => { this.seekTo(player.currentTime() as number); }, 1000); player.on('seeking', _seeking); - return this.player; } - async downloadFullFile() { + async downloadFullFile(): Promise { const { chunkSize, totalSize, fileMime } = this.fileInfo; const chunks: Uint8Array[] = []; for (let offsetToFetch = 0; offsetToFetch < totalSize; offsetToFetch += chunkSize) { const { chunk } = await this._getFileChunk({ offsetBytes: offsetToFetch, chunkSize }); chunks.push(chunk.data); } - return new Blob(chunks, { type: fileMime }); + return new Blob(chunks as BlobPart[], { type: fileMime }); } - shouldStream() { + shouldStream(): boolean { return ['video/mp4', 'video/webm'].includes(this.fileInfo.fileMime); } - seekTo(time: number) { + seekTo(time: number): void { const player = this.player as ReturnType; const duration = player.duration(); const loader = this.loader as MediaLoader; - if (!duration || !time) { console.warn('Cannot seek yet'); return; } - // const bitRate = this.fileInfo.totalSize / duration; // const estimatedOffset = time * bitRate; // const newOffset = estimatedOffset - (estimatedOffset % this.fileInfo.chunkSize); - if (typeof loader.seek === 'function') { const seekOffset = loader.seek(time); this.fetchQueue = []; @@ -195,62 +170,64 @@ class MediaService { } } - getLoader() { - if (!this.loader) { - throw new Error('Loader not set'); - } - + getLoader(): MediaLoader { + if (!this.loader) throw new Error('Loader not set'); return this.loader; } - async loadChunk(offset: number) { + async loadChunk(offset: number): Promise { const { chunkSize, totalSize } = this.fileInfo; // TODO check if needed (in case of seek to history) // const mediaSource = this.mediaSource as MediaSource; // if (offset >= totalSize) { // //mediaSource.endOfStream(); // } - if (this.isOffsetInBuffer(offset)) { //console.warn('offset already in buffer', offset); return; } - try { const { chunk } = await this._getFileChunk({ offsetBytes: offset, chunkSize }); const data = chunk.data as Uint8Array; const nextOffset = this.getLoader().processChunk({ offset, chunkSize, data }); - if (typeof nextOffset === 'number' && nextOffset < totalSize) { - this.fetchQueue.push(nextOffset); - } + if (typeof nextOffset === 'number' && nextOffset < totalSize) this.fetchQueue.push(nextOffset); } catch (error) { console.error('Error loading chunk:', error); } } - isOffsetInBuffer(offset: number) { + isOffsetInBuffer(offset: number): boolean { const buffered = this.videoElement.buffered; for (let i = 0; i < buffered.length; i++) { - if (offset >= buffered.start(i) && offset <= buffered.end(i)) { - return true; - } + if (offset >= buffered.start(i) && offset <= buffered.end(i)) return true; } return false; } - setupFetchQueue() { - if (this.fetchQueueInterval) { - return; - } + setupFetchQueue(): void { + if (this.fetchQueueInterval) return; this.fetchQueueInterval = setInterval(() => { - if (!this.fetchQueue.length) { - return; - } - + if (!this.fetchQueue.length) return; const offset = this.fetchQueue.pop() as number; this.loadChunk(offset); }, 100); } + + destroy(): void { + if (this.fetchQueueInterval) { + clearInterval(this.fetchQueueInterval); + this.fetchQueueInterval = null; + } + this.fetchQueue = []; + for (const cleanup of this._cleanupListeners) cleanup(); + this._cleanupListeners = []; + if (this.player) { + this.player.dispose(); + this.player = null; + } + this.loader = null; + this.mediaSource = null; + } } export default MediaService; diff --git a/src/modules/org.libersoft.messages/services/Media/MediaUtils.ts b/src/modules/org.libersoft.messages/services/Media/MediaUtils.ts index fc750f2d5..dfec2cff5 100644 --- a/src/modules/org.libersoft.messages/services/Media/MediaUtils.ts +++ b/src/modules/org.libersoft.messages/services/Media/MediaUtils.ts @@ -1,11 +1,14 @@ import { InvalidFileReaderResult } from './errors.ts'; import _debug from 'debug'; - const debug = _debug('libersoft:messages:services:MediaUtils'); +interface IAudioData { + duration: number; + peaks: number[]; +} class MediaUtils { static PROGRESSIVE_DOWNLOAD_MEDIA_ENDPOINT = '/yellow/media'; - static makeProgressiveDownloadUrl = (localAccountId: string, uploadId: string) => { + static makeProgressiveDownloadUrl = (localAccountId: string, uploadId: string): string => { return `${MediaUtils.PROGRESSIVE_DOWNLOAD_MEDIA_ENDPOINT}/${localAccountId}/${uploadId}`; }; @@ -78,7 +81,7 @@ class MediaUtils { }); } - static getAudioDataFromFile(file: File) { + static getAudioDataFromFile(file: File): Promise { return new Promise((resolve, reject) => { const reader = new FileReader(); @@ -95,7 +98,7 @@ class MediaUtils { }); } - static async getAudioDataFromArrayBuffer(arrayBuffer: ArrayBuffer) { + static async getAudioDataFromArrayBuffer(arrayBuffer: ArrayBuffer): Promise { // @ts-ignore const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const audioBuffer = await audioContext.decodeAudioData(arrayBuffer); @@ -119,13 +122,13 @@ class MediaUtils { return { duration, peaks }; } - static extractPeaks(audioBuffer: AudioBuffer, samplesPerPeak = 1000) { + static extractPeaks(audioBuffer: AudioBuffer, samplesPerPeak = 1000): number[] { const channelData = audioBuffer.getChannelData(0); // Use the first channel const peaks: number[] = []; let max = 0; for (let i = 0; i < channelData.length; i++) { - max = Math.max(max, Math.abs(channelData[i])); + max = Math.max(max, Math.abs(channelData[i]!)); if (i % samplesPerPeak === 0) { peaks.push(max); max = 0; @@ -134,7 +137,7 @@ class MediaUtils { return peaks; } - static async checkProgressiveDownloadAvailability(url: string) { + static async checkProgressiveDownloadAvailability(url: string): Promise { try { debug('Trying to check progressive download availability for', url); diff --git a/src/modules/org.libersoft.messages/services/Media/loaders/BasicStreamLoader.ts b/src/modules/org.libersoft.messages/services/Media/loaders/BasicStreamLoader.ts index 0653b8744..3491a3d7e 100644 --- a/src/modules/org.libersoft.messages/services/Media/loaders/BasicStreamLoader.ts +++ b/src/modules/org.libersoft.messages/services/Media/loaders/BasicStreamLoader.ts @@ -4,7 +4,7 @@ import mediaInfoFactory from 'mediainfo.js'; class BasicStreamLoader extends MediaLoader { sourceBuffer: SourceBuffer | null = null; - async setup() { + async setup(): Promise { const mediainfo = await mediaInfoFactory({ format: 'object', }); diff --git a/src/modules/org.libersoft.messages/services/Media/loaders/MP4Loader.ts b/src/modules/org.libersoft.messages/services/Media/loaders/MP4Loader.ts index f3e8edb9c..ea92ff6e2 100644 --- a/src/modules/org.libersoft.messages/services/Media/loaders/MP4Loader.ts +++ b/src/modules/org.libersoft.messages/services/Media/loaders/MP4Loader.ts @@ -1,10 +1,10 @@ -import mp4box, { type MP4ArrayBuffer, type MP4File } from '@webav/mp4box.js'; +import mp4box, { type MP4ArrayBuffer, type IMP4File } from '@webav/mp4box.js'; import { MediaLoader } from './types.ts'; class MP4Loader extends MediaLoader { - mp4boxFile: MP4File | null = null; + mp4boxFile: IMP4File | null = null; - async setup() { + async setup(): Promise { const mp4boxFile = mp4box.createFile(); this.mp4boxFile = mp4boxFile; @@ -34,7 +34,7 @@ class MP4Loader extends MediaLoader { } }; - info.tracks.forEach((track, i) => { + info.tracks.forEach((track, _i) => { //console.log('MP4BOX: track ' + i, track); let mime = ''; if (track.type === 'video') { @@ -77,8 +77,8 @@ class MP4Loader extends MediaLoader { return nextOffset; }; - seek = (time: number) => { - const mp4boxFile = this.mp4boxFile as MP4File; + override seek = (time: number): number => { + const mp4boxFile = this.mp4boxFile as IMP4File; const specialTime = Math.max(Math.floor(time - 2), 0); // console.log('MP4BOX: seek specialTime:', specialTime); const seek = mp4boxFile.seek(specialTime); diff --git a/src/modules/org.libersoft.messages/services/Media/loaders/types.ts b/src/modules/org.libersoft.messages/services/Media/loaders/types.ts index 7ddf89786..8dcad3129 100644 --- a/src/modules/org.libersoft.messages/services/Media/loaders/types.ts +++ b/src/modules/org.libersoft.messages/services/Media/loaders/types.ts @@ -1,6 +1,6 @@ export type NextByteOffset = number; -export interface MediaFileInfo { +export interface IMediaFileInfo { id: string; fileMime: string; chunkSize: number; @@ -9,16 +9,16 @@ export interface MediaFileInfo { export abstract class MediaLoader { mediaSource: MediaSource; - mediaFileInfo: MediaFileInfo; + mediaFileInfo: IMediaFileInfo; getFileChunk: any; - constructor(mediaSource: MediaSource, mediaFileInfo: MediaFileInfo, getFileChunk: any) { + constructor(mediaSource: MediaSource, mediaFileInfo: IMediaFileInfo, getFileChunk: any) { this.mediaSource = mediaSource; this.mediaFileInfo = mediaFileInfo; this.getFileChunk = getFileChunk; } - abstract setup(mediaFileInfo: MediaFileInfo): Promise; + abstract setup(mediaFileInfo: IMediaFileInfo): Promise; // abstract loadChunk(offset: number): Promise; abstract processChunk(chunk: { offset: number; chunkSize: number; data: Uint8Array }): NextByteOffset | void; diff --git a/src/modules/org.libersoft.messages/services/Media/mp4box.d.ts b/src/modules/org.libersoft.messages/services/Media/mp4box.d.ts index 858e28e64..03417352f 100644 --- a/src/modules/org.libersoft.messages/services/Media/mp4box.d.ts +++ b/src/modules/org.libersoft.messages/services/Media/mp4box.d.ts @@ -1,5 +1,5 @@ declare module '@webav/mp4box.js' { - interface MP4MediaTrack { + interface IMP4MediaTrack { id: number; type: 'video' | 'audio' | string; created: Date; @@ -18,28 +18,28 @@ declare module '@webav/mp4box.js' { nb_samples: number; } - interface MP4VideoData { + interface IMP4VideoData { width: number; height: number; } - interface MP4VideoTrack extends MP4MediaTrack { - video: MP4VideoData; + interface IMP4VideoTrack extends IMP4MediaTrack { + video: IMP4VideoData; } - interface MP4AudioData { + interface IMP4AudioData { sample_rate: number; channel_count: number; sample_size: number; } - interface MP4AudioTrack extends MP4MediaTrack { - audio: MP4AudioData; + interface IMP4AudioTrack extends IMP4MediaTrack { + audio: IMP4AudioData; } - type MP4Track = MP4VideoTrack | MP4AudioTrack; + type MP4Track = IMP4VideoTrack | IMP4AudioTrack; - interface MP4Info { + interface IMP4Info { duration: number; timescale: number; fragment_duration: number; @@ -50,13 +50,13 @@ declare module '@webav/mp4box.js' { created: Date; modified: Date; tracks: MP4Track[]; - videoTracks: MP4VideoTrack[]; - audioTracks: MP4AudioTrack[]; + videoTracks: IMP4VideoTrack[]; + audioTracks: IMP4AudioTrack[]; } export type MP4ArrayBuffer = ArrayBuffer & { fileStart: number }; - interface MP4Sample { + interface IMP4Sample { number: number; track_id: number; description: any; @@ -70,12 +70,12 @@ declare module '@webav/mp4box.js' { is_sync: boolean; } - export interface MP4File { + export interface IMP4File { onMoovStart?: () => void; - onReady?: (info: MP4Info) => void; + onReady?: (info: IMP4Info) => void; onError?: (e: string) => void; - onSamples?: (id: number, user: any, samples: MP4Sample[]) => void; + onSamples?: (id: number, user: any, samples: IMP4Sample[]) => void; setExtractionOptions(track_id: number, user: any, options: { nbSamples?: number; rapAlignement?: boolean }): void; @@ -89,5 +89,5 @@ declare module '@webav/mp4box.js' { flush(): void; } - export function createFile(): MP4File; + export function createFile(): IMP4File; } diff --git a/src/modules/org.libersoft.messages/splitAndLinkify.test.js b/src/modules/org.libersoft.messages/splitAndLinkify.test.js deleted file mode 100644 index 51268c454..000000000 --- a/src/modules/org.libersoft.messages/splitAndLinkify.test.js +++ /dev/null @@ -1,264 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { splitAndLinkify } from './splitAndLinkify.js'; - -describe('splitAndLinkify', () => { - it('returns an empty array for an empty string', () => { - const input = ''; - const output = splitAndLinkify(input); - expect(Array.isArray(output)).toBe(true); - expect(output).toEqual([]); - }); - - it('handles plain text with no URLs', () => { - const input = 'Hello world!'; - const output = splitAndLinkify(input); - - // Check basic array structure - expect(Array.isArray(output)).toBe(true); - expect(output).toHaveLength(1); - - // Check the shape of the first (and only) item - expect(output[0]).toEqual({ - type: 'plain', - value: 'Hello world!', - }); - }); - - it('handles a single URL only', () => { - const input = 'https://example.com'; - const output = splitAndLinkify(input); - - expect(output).toHaveLength(1); - expect(output[0]).toEqual({ - type: 'processed', - value: 'https://example.com', - }); - }); - - it('handles a single URL in the middle of text', () => { - const input = 'Check this link: https://example.com for more info.'; - const output = splitAndLinkify(input); - - // Expect 3 parts: - // 1) "Check this link: " - // 2) processed URL - // 3) " for more info." - expect(output).toHaveLength(3); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'Check this link: ', - }); - expect(output[1]).toEqual({ - type: 'processed', - value: 'https://example.com', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: ' for more info.', - }); - }); - - it('handles multiple URLs in the text', () => { - const input = 'Visit https://example.com and also http://test.org!'; - const output = splitAndLinkify(input); - - // Expected breakdown: - // 1) "Visit " - // 2) processed link (https://example.com) - // 3) " and also " - // 4) processed link (http://test.org) - // 5) "!" - expect(output).toHaveLength(5); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'Visit ', - }); - expect(output[1].type).toBe('processed'); - expect(output[1].value).toContain('https://example.com'); - expect(output[2]).toEqual({ - type: 'plain', - value: ' and also ', - }); - expect(output[3].type).toBe('processed'); - expect(output[3].value).toContain('http://test.org'); - expect(output[4]).toEqual({ - type: 'plain', - value: '!', - }); - }); - - it('handles URLs adjacent to punctuation', () => { - const input = 'Check this link (https://example.com), or email me.'; - const output = splitAndLinkify(input); - - // Expected: - // 1) "Check this link (" - // 2) processed URL - // 3) "), or email me." - expect(output).toHaveLength(3); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'Check this link (', - }); - expect(output[1]).toEqual({ - type: 'processed', - value: 'https://example.com', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: '), or email me.', - }); - }); - - it('handles mailto links', () => { - const input = 'Contact us at mailto:test@example.com or visit our site.'; - const output = splitAndLinkify(input); - - // Expected segments: - // 1) "Contact us at " - // 2) processed mailto link - // 3) " or visit our site." - expect(output).toHaveLength(3); - expect(output[0]).toEqual({ - type: 'plain', - value: 'Contact us at ', - }); - expect(output[1]).toEqual({ - type: 'processed', - value: 'mailto:test@example.com', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: ' or visit our site.', - }); - }); - - it('handles tel links', () => { - const input = 'Call me at tel:+123456789 or tel:987654321!'; - const output = splitAndLinkify(input); - - // Expected breakdown: - // 1) "Call me at " - // 2) processed link: tel:+123456789 - // 3) " or " - // 4) processed link: tel:987654321 - // 5) "!" - expect(output).toHaveLength(5); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'Call me at ', - }); - expect(output[1]).toEqual({ - type: 'processed', - value: 'tel:+123456789', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: ' or ', - }); - expect(output[3]).toEqual({ - type: 'processed', - value: 'tel:987654321', - }); - expect(output[4]).toEqual({ - type: 'plain', - value: '!', - }); - }); - - it('handles bitcoin and ethereum links', () => { - const input = 'Pay using bitcoin:1ExampleAddr?amount=0.5 or ethereum:0xABC123.'; - const output = splitAndLinkify(input); - - // Expected segments around both crypto links - expect(output).toHaveLength(5); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'Pay using ', - }); - expect(output[1]).toEqual({ - type: 'processed', - value: 'bitcoin:1ExampleAddr?amount=0.5', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: ' or ', - }); - expect(output[3]).toEqual({ - type: 'processed', - value: 'ethereum:0xABC123', - }); - expect(output[4]).toEqual({ - type: 'plain', - value: '.', - }); - }); - - it('handles trailing text after the last URL', () => { - const input = 'Link at the end: https://example.org trailing text.'; - const output = splitAndLinkify(input); - - // Expected: - // 1) "Link at the end: " - // 2) processed URL - // 3) " trailing text." - expect(output).toHaveLength(3); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'Link at the end: ', - }); - expect(output[1]).toEqual({ - type: 'processed', - value: 'https://example.org', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: ' trailing text.', - }); - }); - - it('handles trailing quote after URL with plus sign', () => { - const input = ''; - const output = splitAndLinkify(input); - - // Expected: - // 1) '' - expect(output).toHaveLength(3); - - expect(output[0]).toEqual({ - type: 'plain', - value: 'https://root.cz/x+y', - }); - expect(output[2]).toEqual({ - type: 'plain', - value: '" />', - }); - }); - - it('ensures each element in output has the correct object shape', () => { - const input = 'Some text with a link https://example.com and tel:+1234.'; - const output = splitAndLinkify(input); - - // Verify each item is an object with { type, value } - output.forEach(item => { - expect(item).toEqual( - expect.objectContaining({ - type: expect.any(String), - value: expect.any(String), - }) - ); - }); - }); -}); diff --git a/src/modules/org.libersoft.messages/stores/AudioRecorderStore.ts b/src/modules/org.libersoft.messages/stores/AudioRecorderStore.ts index 6ccc41aaa..b25517efe 100644 --- a/src/modules/org.libersoft.messages/stores/AudioRecorderStore.ts +++ b/src/modules/org.libersoft.messages/stores/AudioRecorderStore.ts @@ -1,19 +1,19 @@ -import { derived, writable } from 'svelte/store'; +import { derived, writable, type Readable } from 'svelte/store'; -export interface AudioRecorderStoreValue { +export interface IAudioRecorderStoreValue { open: boolean; } export class AudioRecorderStore { - store = writable({ + store = writable({ open: false, }); - isOpen() { + isOpen(): Readable { return derived(this.store, $store => $store.open); } - setOpen(open: boolean) { + setOpen(open: boolean): void { this.store.update(store => { store.open = open; return store; diff --git a/src/modules/org.libersoft.messages/stores/FileDownloadStore.ts b/src/modules/org.libersoft.messages/stores/FileDownloadStore.ts index 3221e5192..44b1751e7 100644 --- a/src/modules/org.libersoft.messages/stores/FileDownloadStore.ts +++ b/src/modules/org.libersoft.messages/stores/FileDownloadStore.ts @@ -1,54 +1,47 @@ import { get, writable } from 'svelte/store'; -import type { FileDownload, FileDownloadStoreType, FileDownloadStoreValue, FileUploadRecord } from '@/org.libersoft.messages/services/Files/types.ts'; +import type { IFileDownload, FileDownloadStoreType, FileDownloadStoreValue, IFileUploadRecord } from '@/org.libersoft.messages/services/Files/types.ts'; export class FileDownloadStore implements FileDownloadStoreType { store = writable([]); - getAll() { + getAll(): FileDownloadStoreValue { return get(this.store); } - get(id: string) { + get(id: string): IFileDownload | undefined { return get(this.store).find(download => download.record.id === id); } - set(id: string, download: FileDownload) { + set(id: string, download: IFileDownload): void { this.store.update(store => { const index = store.findIndex(d => d.record.id === id); - if (index !== -1) { - store[index] = download; - } else { - store.push(download); - } + if (index !== -1) store[index] = download; + else store.push(download); return [...store]; }); } - patch(id: string, data: Partial) { + patch(id: string, data: Partial): void { // patch but dont change ref this.store.update(store => { const oldDownload = store.find(download => download.record.id === id); - if (!oldDownload) { - return store; - } - + if (!oldDownload) return store; for (const key in data) { oldDownload[key] = data[key]; } - return [...store]; }); } - delete(id: string) { + delete(id: string): void { this.store.update(store => store.filter(download => download.record.id !== id)); } - updateDownloadRecord(id: string, record: FileUploadRecord) { + updateDownloadRecord(id: string, record: IFileUploadRecord): void { this.patch(id, { record }); } - isAnyDownloadRunning() { + isAnyDownloadRunning(): boolean { return this.getAll().some(download => download.running); } } diff --git a/src/modules/org.libersoft.messages/stores/FileUploadStore.ts b/src/modules/org.libersoft.messages/stores/FileUploadStore.ts index 1eba1aee0..8061befc3 100644 --- a/src/modules/org.libersoft.messages/stores/FileUploadStore.ts +++ b/src/modules/org.libersoft.messages/stores/FileUploadStore.ts @@ -1,18 +1,20 @@ import { get, writable } from 'svelte/store'; -import { type FileUpload, type FileUploadRecord, FileUploadRecordStatus, type FileUploadStoreType, type FileUploadStoreValue } from '@/org.libersoft.messages/services/Files/types.ts'; +import { type IFileUpload, type IFileUploadRecord, FileUploadRecordStatus, type FileUploadStoreType, type FileUploadStoreValue } from '@/org.libersoft.messages/services/Files/types.ts'; + +export let windowFileUploadStore = writable(null); export class FileUploadStore implements FileUploadStoreType { store = writable([]); - getAll() { + getAll(): FileUploadStoreValue { return get(this.store); } - get(id: string) { + get(id: string): IFileUpload | undefined { return get(this.store).find(upload => upload.record.id === id); } - set(id: string, upload: FileUpload) { + set(id: string, upload: IFileUpload): void { this.store.update(store => { const index = store.findIndex(d => d.record.id === id); if (index !== -1) { @@ -24,7 +26,7 @@ export class FileUploadStore implements FileUploadStoreType { }); } - patch(id: string, data: Partial) { + patch(id: string, data: Partial): void { // patch but dont change ref this.store.update(store => { const oldUpload = store.find(upload => upload.record.id === id); @@ -40,15 +42,15 @@ export class FileUploadStore implements FileUploadStoreType { }); } - delete(id: string) { + delete(id: string): void { this.store.update(store => store.filter(upload => upload.record.id !== id)); } - updateUploadRecord(id: string, record: FileUploadRecord) { + updateUploadRecord(id: string, record: IFileUploadRecord): void { this.patch(id, { record }); } - isAnyUploadRunning() { + isAnyUploadRunning(): boolean { return this.getAll().some(upload => upload && [FileUploadRecordStatus.UPLOADING, FileUploadRecordStatus.BEGUN].includes(upload.record.status) && upload.file && upload.running); } } diff --git a/src/modules/org.libersoft.messages/stores/ForwardMessageStore.ts b/src/modules/org.libersoft.messages/stores/ForwardMessageStore.ts index 04885becf..b12f7f1a5 100644 --- a/src/modules/org.libersoft.messages/stores/ForwardMessageStore.ts +++ b/src/modules/org.libersoft.messages/stores/ForwardMessageStore.ts @@ -1,58 +1,70 @@ -import { derived, writable } from 'svelte/store'; -import type { Message } from '../types.ts'; +import { derived, get, writable, type Readable } from 'svelte/store'; +import type { Message, Conversation } from '@/org.libersoft.messages/scripts/types.ts'; + +export let windowForwardMessageStore = writable(null); export enum ForwardedMessageType { MESSAGE = 'message', } -export interface ForwardedMessage { +export interface IForwardedMessage { type: ForwardedMessageType; data: Message; } -export interface ForwardMessageStoreValue { - open: boolean; - forwardedMessage: ForwardedMessage | null; +export interface IForwardMessageStoreValue { + forwardedMessage: IForwardedMessage | null; + sentToConversations: Conversation[]; } export class ForwardMessageStore { - store = writable({ - open: false, + store = writable({ forwardedMessage: null, + sentToConversations: [], }); - isOpen() { - return derived(this.store, $store => $store.open); - } - - setForwardedMessage(forwardedMessage: ForwardedMessage | null) { + setForwardedMessage(forwardedMessage: IForwardedMessage | null): void { this.store.update(store => { store.forwardedMessage = forwardedMessage; return store; }); } - setOpen(open: boolean) { + getForwardedMessage(): Readable { + return derived(this.store, $store => $store.forwardedMessage); + } + + getSentToConversations(): Readable { + return derived(this.store, $store => $store.sentToConversations); + } + + addSentToConversation(conversation: Conversation): void { this.store.update(store => { - store.open = open; + store.sentToConversations.push(conversation); return store; }); } - getForwardedMessage() { - return derived(this.store, $store => $store.forwardedMessage); + clearSentToConversations(): void { + this.store.update(store => { + store.sentToConversations = []; + return store; + }); } - startForwardedMessage(forwardedMessage: ForwardedMessage) { + startForwardedMessage(forwardedMessage: IForwardedMessage): void { + console.log('startForwardedMessage:', forwardedMessage); + // Clear sent conversations when starting a new forward operation + this.clearSentToConversations(); this.setForwardedMessage(forwardedMessage); - this.setOpen(true); + get(windowForwardMessageStore)?.open(); } - close() { + close(): void { this.setForwardedMessage(null); - this.setOpen(false); + this.clearSentToConversations(); + get(windowForwardMessageStore)?.close(); } } -const forwardMessageStore = new ForwardMessageStore(); -export default forwardMessageStore; +export const forwardMessageStore = new ForwardMessageStore(); diff --git a/src/modules/org.libersoft.messages/stores/GalleryStore.ts b/src/modules/org.libersoft.messages/stores/GalleryStore.ts index 70b6d4a5d..4d4ca4d9c 100644 --- a/src/modules/org.libersoft.messages/stores/GalleryStore.ts +++ b/src/modules/org.libersoft.messages/stores/GalleryStore.ts @@ -1,74 +1,74 @@ -import { get, writable, derived } from 'svelte/store'; +import { get, writable, derived, type Readable } from 'svelte/store'; //import filesService from '@/org.libersoft.messages/services/Files/FilesService.ts'; //import { LocalFileStatus } from '@/org.libersoft.messages/services/LocalDB/FilesLocalDB.ts'; -export interface GalleryFile { +export interface IGalleryFile { id: string | number; loaded: boolean; - url?: string; - fileName?: string; - alt?: string; // fallbacks to fileName + url?: string | undefined; + fileName?: string | undefined; + alt?: string | undefined; // fallbacks to fileName // fileMimeType: string; - loadFile?: () => Promise>; + loadFile?: (() => Promise>) | undefined; } -export interface GalleryStoreValue { +export interface IGalleryStoreValue { show: boolean; - files: GalleryFile[]; - currentId: GalleryFile['id'] | null; + files: IGalleryFile[]; + currentId: IGalleryFile['id'] | null; } export class GalleryStore { - store = writable({ + store = writable({ show: false, files: [], currentId: null, }); - value() { + value(): IGalleryStoreValue { return get(this.store); } - setShow(show: boolean) { + setShow(show: boolean): void { this.store.update(store => { store.show = show; return store; }); } - setFiles(files: GalleryFile[]) { + setFiles(files: IGalleryFile[]): void { this.store.update(store => { store.files = files; return store; }); } - updateFile(id: GalleryFile['id'], file: Omit) { + updateFile(id: IGalleryFile['id'], file: Omit): void { this.store.update(store => { const index = store.files.findIndex(f => f.id === id); if (index === -1) { return store; } store.files[index] = { - ...store.files[index], + ...store.files[index]!, ...file, }; return store; }); } - setCurrentId(currentIndex: number) { + setCurrentId(currentIndex: number): void { this.store.update(store => { store.currentId = currentIndex; return store; }); } - getFile(id: GalleryFile['id']) { + getFile(id: IGalleryFile['id']): IGalleryFile | undefined { return get(this.store).files.find(file => file.id === id); } - currentFile() { + currentFile(): Readable { return derived(this.store, $store => { if ($store.currentId === null) { return null; @@ -77,7 +77,7 @@ export class GalleryStore { }); } - previous() { + previous(): void { this.store.update(store => { if (store.currentId === null) { return store; @@ -87,41 +87,33 @@ export class GalleryStore { if (nextIndex < 0) { return store; } - store.currentId = store.files[nextIndex].id; + store.currentId = store.files[nextIndex]!.id; return store; }); } - next() { + next(): void { this.store.update(store => { - if (store.currentId === null) { - return store; - } + if (store.currentId === null) return store; const currentIndex = store.files.findIndex(file => file.id === store.currentId); const nextIndex = currentIndex + 1; - if (nextIndex >= store.files.length) { - return store; - } - store.currentId = store.files[nextIndex].id; + if (nextIndex >= store.files.length) return store; + store.currentId = store.files[nextIndex]!.id; return store; }); } - canPrevious() { + canPrevious(): Readable { return derived(this.store, $store => { - if ($store.currentId === null) { - return false; - } + if ($store.currentId === null) return false; const currentIndex = $store.files.findIndex(file => file.id === $store.currentId); return currentIndex > 0; }); } - canNext() { + canNext(): Readable { return derived(this.store, $store => { - if ($store.currentId === null) { - return false; - } + if ($store.currentId === null) return false; const currentIndex = $store.files.findIndex(file => file.id === $store.currentId); return currentIndex < $store.files.length - 1; }); diff --git a/src/modules/org.libersoft.messages/stores/MessageBarReplyStore.ts b/src/modules/org.libersoft.messages/stores/MessageBarReplyStore.ts index 6f8e6ccb9..194d2c3bb 100644 --- a/src/modules/org.libersoft.messages/stores/MessageBarReplyStore.ts +++ b/src/modules/org.libersoft.messages/stores/MessageBarReplyStore.ts @@ -1,54 +1,54 @@ -import { derived, writable } from 'svelte/store'; -import type { Message } from '../types.ts'; +import { derived, writable, type Readable } from 'svelte/store'; +import type { Message } from '@/org.libersoft.messages/scripts/types.ts'; export enum ReplyToType { MESSAGE = 'message', } -export interface ReplyTo { +export interface IReplyTo { type: ReplyToType; data: Message; } -export interface MessageBarReplyStoreValue { +export interface IMessageBarReplyStoreValue { open: boolean; - replyTo: ReplyTo | null; + replyTo: IReplyTo | null; } export class MessageBarReplyStore { - store = writable({ + store = writable({ open: false, replyTo: null, }); - isOpen() { + isOpen(): Readable { return derived(this.store, $store => $store.open); } - setReplyTo(replyTo: ReplyTo | null) { + setReplyTo(replyTo: IReplyTo | null): void { this.store.update(store => { store.replyTo = replyTo; return store; }); } - setOpen(open: boolean) { + setOpen(open: boolean): void { this.store.update(store => { store.open = open; return store; }); } - getReplyTo() { + getReplyTo(): Readable { return derived(this.store, $store => $store.replyTo); } - startReplyTo(replyTo: ReplyTo) { + startReplyTo(replyTo: IReplyTo): void { this.setReplyTo(replyTo); this.setOpen(true); } - close() { + close(): void { this.setReplyTo(null); this.setOpen(false); } diff --git a/src/modules/org.libersoft.messages/tests/_files/file_example_WAV_10MG.wav b/src/modules/org.libersoft.messages/tests/_files/file_example_WAV_10MG.wav deleted file mode 100644 index ef6c7b7c0..000000000 Binary files a/src/modules/org.libersoft.messages/tests/_files/file_example_WAV_10MG.wav and /dev/null differ diff --git a/src/modules/org.libersoft.messages/tests/e2e/_shared/utils.ts b/src/modules/org.libersoft.messages/tests/e2e/_shared/utils.ts new file mode 100644 index 000000000..02f5ca2c7 --- /dev/null +++ b/src/modules/org.libersoft.messages/tests/e2e/_shared/utils.ts @@ -0,0 +1,137 @@ +import { expect, type Page, test } from '@playwright/test'; + +/** + * Helper function to create a new conversation + * @param page - The Playwright page object + * @param recipient - The recipient address + */ +export async function startNewConversation(page: Page, recipient: string): Promise { + return await test.step(`Start new conversation with: ${recipient}`, async () => { + await page.getByTestId('new-conversation-button').first().click({ force: true }); + await page.getByTestId('new-conversation-address').fill(recipient); + await page.getByTestId('New Conversation Open').click(); + }); +} + +/** + * Helper function to open an existing conversation + * @param page - The Playwright page object + * @param contact - The contact address + */ +export async function openConversation(page: Page, contact: string): Promise { + return await test.step(`Open conversation with: ${contact}`, async () => { + await page.getByTestId(`conversation ${contact}`).click(); + }); +} + +/** + * Helper function to send a message + * @param page - The Playwright page object + * @param messageText - The message text to send + * @returns The UID of the sent message + */ +export async function sendMessage(page: Page, messageText: string): Promise { + return await test.step(`Send message: "${messageText}"`, async () => { + await page.getByTestId('message-input').fill(messageText); + await page.getByTestId('messagebarsend').click(); + + // Wait a moment for the message to be sent and the UID to be set + await page.waitForTimeout(100); + + // Get the UID from the message-bar element + const uid = await page.locator('.message-bar').getAttribute('data-sent-message-uid'); + return uid; + }); +} + +/** + * Helper function to forward the last message (backwards compatibility) + * @param page - The Playwright page object + */ +export async function forwardLastMessage(page: Page): Promise { + return forwardMessage(page); +} + +/** + * Helper function to forward a message to a specific conversation + * @param page - The Playwright page object + * @param address - The conversation address (other party's address) + */ +export async function forwardMessageToConversation(page: Page, address: string): Promise { + return await test.step(`Forward message to conversation: ${address}`, async () => { + await page.getByTestId(`forward-conversation-send-${address}`).click(); + }); +} + +/** + * Helper function to forward a specific message by UID + * @param page - The Playwright page object + * @param messageUid - The UID of the message to forward (optional, uses last message if not provided) + */ +export async function forwardMessage(page: Page, messageUid?: string): Promise { + return await test.step(`Forward message ${messageUid ? `(UID: ${messageUid})` : '(last message)'}`, async () => { + let targetMessageUid = messageUid; + + if (!targetMessageUid) { + // Ensure there are messages to forward + await expect(page.getByTestId('message-item').first()).toBeVisible(); + + // Wait for all messages to be loaded and stable + await page.waitForTimeout(1000); + + // Get the last message and its UID + const lastMessage = page.getByTestId('message-item').last(); + //await lastMessage.waitFor({ state: 'visible', timeout: 10000 }); + //await page.waitForTimeout(500); // Small delay to ensure message is fully rendered + + // Get the UID from the last message + targetMessageUid = (await lastMessage.getAttribute('data-uid')) ?? undefined; + if (!targetMessageUid) { + throw new Error('Could not find UID for last message'); + } + + // Right-click the last message + await lastMessage.scrollIntoViewIfNeeded(); + await lastMessage.click({ button: 'right', force: true }); + } else { + // Find and right-click the specific message by UID + const specificMessage = page.locator(`[data-testid="message-item"][data-uid="${messageUid}"]`); + await specificMessage.click({ button: 'right', force: true }); + } + + await page.getByTestId(`message-context-menu-${targetMessageUid}-forward`).click({ force: true }); + + // Wait for the forward window to appear + await page.getByTestId('forward-message-window').waitFor({ state: 'visible' }); + }); +} + +/** + * Helper function to verify forward message window is open and shows preview + * @param page - The Playwright page object + * @param expectedMessage - The expected message text in preview + */ +export async function verifyForwardWindowWithPreview(page: Page, expectedMessage?: string): Promise { + return await test.step('Verify forward window is open with message preview', async () => { + // Give the window more time to appear + await expect(page.getByTestId('forward-message-window')).toBeVisible(); + await expect(page.getByTestId('forward-message-preview')).toBeVisible(); + await expect(page.getByTestId('forward-message-preview-header')).toHaveText('Forwarding message:'); + + if (expectedMessage) { + // fixme: we need to obtain message uid's when sending messages, and we need to implement a robust message "search" by scrolling through the messages and looking for the data-uid. + //await expect(page.getByTestId('forward-message-preview-content')).toContainText(expectedMessage); + } + }); +} + +/** + * Helper function to search conversations in forward window + * @param page - The Playwright page object + * @param searchTerm - The search term + */ +export async function searchConversationsInForwardWindow(page: Page, searchTerm: string): Promise { + return await test.step(`Search conversations: "${searchTerm}"`, async () => { + await page.getByTestId('forward-message-search').fill(searchTerm); + }); +} diff --git a/src/modules/org.libersoft.messages/tests/e2e/everything.test.ts b/src/modules/org.libersoft.messages/tests/e2e/everything.test.ts index 1ab3914d2..f31ff0df1 100644 --- a/src/modules/org.libersoft.messages/tests/e2e/everything.test.ts +++ b/src/modules/org.libersoft.messages/tests/e2e/everything.test.ts @@ -1,283 +1,13 @@ import { expect, test } from '@playwright/test'; import { type Page } from '@playwright/test'; +import { setupConsoleLogging, openGlobalSettings, setupAccountInWizard, goToAccountManagement, addAccount, switchAccount, switchModule, closeWindow, goToRootSettingsSection, clickSettingsMenuButton } from '@/core/tests/e2e/test-utils.js'; -/** - * Helper function to switch to a module only if it's not already selected - * @param page - The Playwright page object - * @param moduleId - The module ID to switch to - */ -async function switchModule(page: Page, moduleId: string): Promise { - return await test.step(`Switch to module: ${moduleId}`, async () => { - const moduleSelector = page.getByTestId(`ModuleBarItem-${moduleId}`); - const selectedElement = moduleSelector.locator('div.selected'); - - // Click the module selector to possibly switch away from core page - this is a workaround for proper active page management in core. - await moduleSelector.click(); - await moduleSelector.click(); - - // Check if module is already selected - const isSelected = (await selectedElement.count()) > 0; - - // Only click if not already selected - if (!isSelected) { - await moduleSelector.click(); - } - }); -} - -/** - * Helper function to switch to a specific account - * @param page - The Playwright page object - * @param address - The account address to switch to - */ -async function switchAccount(page: Page, address: string): Promise { - return await test.step(`Switch to account: ${address}`, async () => { - await page.getByTestId('account-bar-toggle').click(); - await page.getByTestId('account ' + address).click(); - }); -} - -/** - * Helper function to navigate to account management - * @param page - The Playwright page object - */ -async function goToAccountManagement(page: Page): Promise { - return await test.step('Go to account management', async () => { - await page.getByTestId('account-bar-toggle').click(); - await page.getByRole('button', { name: 'Account management Account' }).click(); - }); -} - -/** - * Helper function to add a new account - * @param page - The Playwright page object - * @param accountData - Object containing account information - */ -async function addAccount( - page: Page, - accountData: { - server: string; - address: string; - password: string; - title?: string; - } -): Promise { - return await test.step(`Add new account: ${accountData.address}`, async () => { - await page.getByRole('button', { name: 'Add a new account Add a new' }).click(); - - // Clear and fill the fields - await page.getByRole('textbox', { name: 'Title:' }).fill(accountData.title || ''); - await page.getByRole('textbox', { name: 'Server:' }).fill(accountData.server); - await page.getByRole('textbox', { name: 'Address:' }).fill(accountData.address); - await page.getByRole('textbox', { name: 'Password:' }).fill(accountData.password); - await page.getByTestId('add').click(); - }); -} - -/** - * Helper function to create a new conversation - * @param page - The Playwright page object - * @param recipient - The recipient address - */ -async function startNewConversation(page: Page, recipient: string): Promise { - return await test.step(`Start new conversation with: ${recipient}`, async () => { - await page.getByTestId('new-conversation-button').click(); - await page.getByTestId('new-conversation-address').fill(recipient); - await page.getByTestId('New Conversation Open').click(); - }); -} - -/** - * Helper function to open an existing conversation - * @param page - The Playwright page object - * @param contact - The contact address - */ -async function openConversation(page: Page, contact: string): Promise { - return await test.step(`Open conversation with: ${contact}`, async () => { - await page.getByTestId(`conversation ${contact}`).click(); - }); -} - -/** - * Helper function to send a message - * @param page - The Playwright page object - * @param messageText - The message text to send - */ -async function sendMessage(page: Page, messageText: string): Promise { - return await test.step(`Send message: "${messageText}"`, async () => { - await page.getByTestId('message-input').fill(messageText); - await page.getByTestId('messagebarsend').click(); - }); -} - -/** - * Helper function to reply to the last message - * @param page - The Playwright page object - * @param replyText - The reply text - */ -async function replyToLastMessage(page: Page, replyText: string): Promise { - return await test.step(`Reply to last message with: "${replyText}"`, async () => { - await page.getByTestId('message-item').last().click({ button: 'right' }); - await page.getByTestId('reply-context-menu-item').last().click(); - await sendMessage(page, replyText); - }); -} - -/** - * Helper function to add a reaction to the last message - * @param page - The Playwright page object - */ -async function addReactionToLastMessage(page: Page): Promise { - return await test.step('Add reaction to last message', async () => { - await page.getByTestId('message-reaction-menu-button').last().click(); - await page.getByTestId('message-reaction-emoji-button').last().click(); - }); -} - -/** - * Helper function to open messages settings and configure them - * @param page - The Playwright page object - * @param settings - Object containing settings configuration - */ -async function configureMessagesSettings( - page: Page, - settings: { - chunkSize?: string; - photoRadius?: string; - } -): Promise { - return await test.step('Configure messages settings', async () => { - await page.getByTestId('messages-settings-button').click(); - - if (settings.chunkSize) { - await page.getByTestId('chunk-size').evaluate((el: HTMLInputElement, value) => (el.value = value), settings.chunkSize); - } - - if (settings.photoRadius) { - await page.getByRole('combobox').selectOption(settings.photoRadius); - } - }); -} - -/** - * Helper function to open global settings - * @param page - The Playwright page object - */ -async function openGlobalSettings(page: Page): Promise { - return await test.step('Open global settings', async () => { - await page.getByRole('button', { name: '☰' }).click(); - await page.getByTestId('menu-item-settings').click(); - }); -} - -/** - * Helper function to navigate to a specific settings section - * @param page - The Playwright page object - * @param section - The settings section to navigate to - */ -async function navigateToSettingsSection(page: Page, section: 'General' | 'Notifications' | 'Appearance'): Promise { - return await test.step(`Navigate to settings section: ${section}`, async () => { - await page.getByRole('button', { name: `${section} ${section}` }).click(); - }); -} - -async function goToRootSettingsSection(page: Page): Promise { - return await test.step('Navigate back to root settings', async () => { - const breadcrumbHome = page.locator('.breadcrumbs button', { hasText: 'Settings' }); - await breadcrumbHome.click(); - }); -} - -/** - * Helper function to close the current modal - * @param page - The Playwright page object - */ -async function closeModal(page: Page, testId: string): Promise { - return await test.step('Close modal', async () => { - await page.getByTestId(testId + '-Modal-close').click(); - }); -} - -/** - * Helper function to set up an account through the initial wizard - * @param page - The Playwright page object - * @param accountData - Object containing account information - */ -async function setupAccountInWizard( - page: Page, - accountData: { - server: string; - address: string; - password: string; - title?: string; - } -): Promise { - return await test.step(`Setup account in wizard: ${accountData.address}`, async () => { - await page.getByTestId('wizard-next').click(); - await page.getByRole('textbox', { name: 'Title:' }).click(); - await page.getByRole('textbox', { name: 'Title:' }).fill(accountData.title || ''); - await page.getByRole('textbox', { name: 'Server:' }).press('Shift+Home'); - await page.getByRole('textbox', { name: 'Server:' }).fill(accountData.server); - await page.getByRole('textbox', { name: 'Address:' }).fill(accountData.address); - await page.getByRole('textbox', { name: 'Password:' }).fill(accountData.password); - await page.getByTestId('add').click(); - await page.screenshot({ path: '/tmp/setup_account_in_wizard.png' }); - await page.getByRole('button', { name: 'Next' }).click(); - await page.getByRole('button', { name: 'Next' }).click(); - await page.getByRole('button', { name: 'Finish' }).click(); - }); -} - -/** - * Helper function to export accounts - * @param page - The Playwright page object - * @returns The download object - */ -/* -async function exportAccounts(page: Page): Promise { - return await test.step('Export accounts', async () => { - await page.getByRole('button', { name: 'Export' }).click(); - const downloadPromise = page.waitForEvent('download'); - await page.getByText('Download').click(); - const download = await downloadPromise; - // Close dialog - await page.getByRole('button', { name: 'X', exact: true }).click(); - return download; - }); -} -*/ - -/** - * Helper function to delete the first account in the list - * @param page - The Playwright page object - */ -async function deleteFirstAccount(page: Page): Promise { - return await test.step('Delete first account', async () => { - await page.getByRole('button', { name: 'Delete' }).first().click(); - await page.locator('button').filter({ hasText: 'Delete' }).click(); - }); -} - -/** - * Helper function to toggle the enabled state of the first account - * @param page - The Playwright page object - */ -async function toggleFirstAccountEnabled(page: Page): Promise { - return await test.step('Toggle first account enabled state', async () => { - await page.getByRole('button', { name: 'Edit' }).first().click(); - await page.getByRole('checkbox', { name: 'Enabled' }).click(); - await page.getByRole('button', { name: 'Save' }).click(); - }); -} - -test('Click around in settings', async ({ page }) => { - await page.goto(process.env.PLAYWRIGHT_CLIENT_URL || 'http://localhost:3000/'); - await openGlobalSettings(page); -}); +import { startNewConversation, openConversation, sendMessage, forwardLastMessage, forwardMessageToConversation, verifyForwardWindowWithPreview, searchConversationsInForwardWindow } from '@/modules/org.libersoft.messages/tests/e2e/_shared/utils.js'; test('Complete End-to-End Application Test', async ({ page }) => { - await page.goto(process.env.PLAYWRIGHT_CLIENT_URL || 'http://localhost:3000/'); - const serverUrl = process.env.PLAYWRIGHT_SERVER_URL || `ws://localhost:8084`; + setupConsoleLogging(page); + await page.goto(process.env['PLAYWRIGHT_CLIENT_URL'] || 'http://localhost:3000/'); + const serverUrl = process.env['PLAYWRIGHT_SERVER_URL'] || `ws://localhost:8084`; await test.step('Initial Account Setup', async () => { // Add account in the wizard @@ -301,6 +31,8 @@ test('Complete End-to-End Application Test', async ({ page }) => { address: 'user2@example.com', password: 'password', }); + + await closeAccountManagementCorepage(page); }); await test.step('First Conversation', async () => { @@ -318,10 +50,12 @@ test('Complete End-to-End Application Test', async ({ page }) => { }); await test.step('Receiving and Replying to Messages', async () => { - // Switch account - await switchAccount(page, 'user2@example.com'); + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } - // Open conversation + await switchAccount(page, 'user2@example.com'); + await switchModule(page, 'org.libersoft.messages'); await openConversation(page, 'user1@example.com'); // Reply to a message @@ -332,6 +66,10 @@ test('Complete End-to-End Application Test', async ({ page }) => { }); await test.step('Message Reactions', async () => { + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + // Switch account await switchAccount(page, 'user1@example.com'); @@ -342,7 +80,41 @@ test('Complete End-to-End Application Test', async ({ page }) => { await addReactionToLastMessage(page); }); + await test.step('Message Forwarding Tests', async () => { + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + + // Ensure we're in the right context - user1 talking to user2 + await switchAccount(page, 'user1@example.com'); + await switchModule(page, 'org.libersoft.messages'); + await openConversation(page, 'user2@example.com'); + + // Send a test message to forward + const forwardTestMessage = 'This message will be forwarded'; + await sendMessage(page, forwardTestMessage); + + // Test basic forwarding functionality + await test.step('Basic forward window functionality', async () => { + await forwardLastMessage(page); + await verifyForwardWindowWithPreview(page, forwardTestMessage); + + // Verify search functionality + await searchConversationsInForwardWindow(page, 'user3'); + + // Clear search to see all conversations + await searchConversationsInForwardWindow(page, ''); + + // Close window for now + await closeForwardWindow(page); + }); + }); + await test.step('Additional Conversation', async () => { + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + // Switch account await switchAccount(page, 'user1@example.com'); @@ -356,19 +128,91 @@ test('Complete End-to-End Application Test', async ({ page }) => { await sendMessage(page, 'hi 3'); }); + await test.step('Advanced Message Forwarding Tests', async () => { + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + + // Switch back to conversation with user2 + await switchAccount(page, 'user1@example.com'); + await switchModule(page, 'org.libersoft.messages'); + await openConversation(page, 'user2@example.com'); + + // Send a test message for advanced forwarding tests + const advancedForwardMessage = 'Advanced forward test message'; + await sendMessage(page, advancedForwardMessage); + + await test.step('Forward to multiple conversations and test auto-clear', async () => { + // Forward the message + await forwardLastMessage(page); + await verifyForwardWindowWithPreview(page, advancedForwardMessage); + + // Test search filtering to find user3 conversation + await searchConversationsInForwardWindow(page, 'user3'); + + // Forward to user3 conversation (using the address as conversation identifier) + await forwardMessageToConversation(page, 'user3@example.com'); + await verifyConversationSendState(page, 'user3@example.com', true); + + // Try to send again - should be disabled + await verifyConversationSendState(page, 'user3@example.com', true); + + // Clear search to see all conversations + await searchConversationsInForwardWindow(page, ''); + + // Close this forward window + await closeForwardWindow(page); + + // Send another message to test auto-clear behavior + const secondMessage = 'Second message for auto-clear test'; + await sendMessage(page, secondMessage); + + // Forward the new message + await forwardLastMessage(page); + await verifyForwardWindowWithPreview(page, secondMessage); + + // Verify that previously sent conversations are cleared (should show "Send" again) + await verifyConversationSendState(page, 'user3@example.com', false); + + // Close window + await closeForwardWindow(page); + }); + + await test.step('Test forward window search with no results', async () => { + await forwardLastMessage(page); + + // Search for non-existent conversation + await searchConversationsInForwardWindow(page, 'nonexistent_user'); + + // Verify no conversations message is shown + await expect(page.getByTestId('forward-message-no-conversations')).toBeVisible(); + await expect(page.getByTestId('forward-message-no-conversations')).toHaveText('No conversations were found'); + + // Clear search to restore conversations list + await searchConversationsInForwardWindow(page, ''); + + // Close window + await closeWindow(page, 'forward-message'); + }); + }); + + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + await configureMessagesSettings(page, { chunkSize: '636928', - photoRadius: '10px', + //photoRadius: '10px', }); await test.step('Module Navigation Test', async () => { // Switch between modules - await switchModule(page, 'org.libersoft.contacts'); - await switchModule(page, 'org.libersoft.dating'); - await switchModule(page, 'org.libersoft.wallet'); - await switchModule(page, 'org.libersoft.iframes'); - await switchModule(page, 'org.libersoft.contacts'); - await switchModule(page, 'org.libersoft.messages'); + //await switchModule(page, 'org.libersoft.contacts'); + //await switchModule(page, 'org.libersoft.dating'); + //await switchModule(page, 'org.libersoft.wallet'); + //await switchModule(page, 'org.libersoft.iframes'); + //await switchModule(page, 'org.libersoft.contacts'); + //await switchModule(page, 'org.libersoft.messages'); }); await test.step('Account Management Operations', async () => { @@ -393,6 +237,12 @@ test('Complete End-to-End Application Test', async ({ page }) => { }); await test.step('Messages Settings', async () => { + if (await page.getByTestId('accounts-content-close-button').isVisible()) { + await page.getByTestId('accounts-content-close-button').click(); + } else if (await page.getByTestId('accounts-content-back-button').isVisible()) { + await page.getByTestId('accounts-content-back-button').click(); + } + // Switch account await switchAccount(page, 'user3@example.com'); await new Promise(resolve => setTimeout(resolve, 5000)); @@ -409,7 +259,7 @@ test('Complete End-to-End Application Test', async ({ page }) => { await openGlobalSettings(page); // Navigate to Notifications and toggle settings - await navigateToSettingsSection(page, 'Notifications'); + await clickSettingsMenuButton(page, 'settings', 'Notifications'); await test.step('Toggle notification settings', async () => { const notificationsToggle = page.getByTestId('notifications enabled toggle'); const soundToggle = page.getByLabel('Notification sound'); @@ -421,9 +271,16 @@ test('Complete End-to-End Application Test', async ({ page }) => { await goToRootSettingsSection(page); // Navigate to Appearance and change theme - await navigateToSettingsSection(page, 'Appearance'); + await clickSettingsMenuButton(page, 'settings', 'Appearance'); await test.step('Change theme in Appearance settings', async () => { + // First disable "Follow browser theme" to enable manual theme selection + const followBrowserThemeSwitch = page.getByTestId('follow-browser-theme-switch'); + await followBrowserThemeSwitch.waitFor({ state: 'visible' }); + await followBrowserThemeSwitch.click(); + + // Now the theme selector should be enabled const themeSelect = page.getByTestId('theme switch'); + await expect(themeSelect).toBeEnabled(); await expect(themeSelect).toHaveValue('0'); // Light await themeSelect.selectOption({ label: 'Dark' }); await expect(themeSelect).toHaveValue('1'); // Dark @@ -433,9 +290,175 @@ test('Complete End-to-End Application Test', async ({ page }) => { // Go back to root and re-enter Notifications await goToRootSettingsSection(page); - await navigateToSettingsSection(page, 'Notifications'); + await clickSettingsMenuButton(page, 'settings', 'Notifications'); - // Close settings modal - await closeModal(page, 'messages-settings'); + // Close settings window + await closeWindow(page, 'global-settings'); }); }); + +/** + * Helper function to reply to a specific message by UID + * @param page - The Playwright page object + * @param messageUid - The UID of the message to reply to (optional, uses last message if not provided) + * @param replyText - The reply text + * @returns The UID of the reply message + */ +async function replyToMessage(page: Page, replyText: string, messageUid?: string): Promise { + return await test.step(`Reply to message ${messageUid ? `(UID: ${messageUid})` : '(last message)'} with: "${replyText}"`, async () => { + let targetMessageUid = messageUid; + + if (!targetMessageUid) { + // Get the last message and its UID + const lastMessage = page.getByTestId('message-item').last(); + targetMessageUid = (await lastMessage.getAttribute('data-uid')) ?? undefined; + if (!targetMessageUid) { + throw new Error('Could not find UID for last message'); + } + + // Right-click the last message + await lastMessage.scrollIntoViewIfNeeded(); + await lastMessage.click({ button: 'right' }); + } else { + // Click on specific message by UID + await await page.locator(`[data-testid="message-item"][data-uid="${messageUid}"]`).scrollIntoViewIfNeeded(); + await page.locator(`[data-testid="message-item"][data-uid="${messageUid}"]`).click({ button: 'right' }); + } + + // Use the unique reply context menu item for this message + //await page.getByTestId(`message-context-menu-${targetMessageUid}-reply`).waitFor({ state: 'visible' }); + await page.getByTestId(`message-context-menu-${targetMessageUid}-reply`).click({ force: true }); + + return await sendMessage(page, replyText); + }); +} + +/** + * Helper function to reply to the last message (backwards compatibility) + * @param page - The Playwright page object + * @param replyText - The reply text + */ +async function replyToLastMessage(page: Page, replyText: string): Promise { + return replyToMessage(page, replyText); +} + +/** + * Helper function to add a reaction to the last message + * @param page - The Playwright page object + */ +async function addReactionToLastMessage(page: Page): Promise { + return await test.step('Add reaction to last message', async () => { + await page.getByTestId('message-reaction-menu-button').last().click(); + await page.getByTestId('message-reaction-emoji-button').last().click(); + }); +} + +/** + * Helper function to verify conversation send button state + * @param page - The Playwright page object + * @param address - The conversation address (other party's address) + * @param shouldBeSent - Whether the button should show "Sent" state + */ +async function verifyConversationSendState(page: Page, address: string, shouldBeSent: boolean): Promise { + return await test.step(`Verify conversation ${address} send state: ${shouldBeSent ? 'sent' : 'not sent'}`, async () => { + const button = page.getByTestId(`forward-conversation-send-${address}`); + // Use a more flexible text matcher that handles whitespace + await expect(button).toContainText(shouldBeSent ? 'Sent' : 'Send'); + + if (shouldBeSent) { + await expect(button).toBeDisabled(); + } else { + await expect(button).toBeEnabled(); + } + }); +} + +/** + * Helper function to open messages settings and configure them + * @param page - The Playwright page object + * @param settings - Object containing settings configuration + */ +async function configureMessagesSettings( + page: Page, + settings: { + chunkSize?: string; + photoRadius?: string; + } +): Promise { + return await test.step('Configure messages settings', async () => { + await page.getByTestId('messages-settings-button').click(); + + if (settings.chunkSize) { + await page.getByTestId('chunk-size').evaluate((el: HTMLInputElement, value) => (el.value = value), settings.chunkSize); + } + + if (settings.photoRadius) { + await page.getByRole('combobox').selectOption(settings.photoRadius); + } + + await closeWindow(page, 'messages-settings'); + }); +} + +/** + * Helper function to close forward message window specifically + * @param page - The Playwright page object + */ +async function closeForwardWindow(page: Page): Promise { + return await closeWindow(page, 'forward-message'); +} + +/** + * Helper function to delete the first account in the list + * @param page - The Playwright page object + */ +async function deleteFirstAccount(page: Page): Promise { + return await test.step('Delete first account', async () => { + if (await page.getByTestId('accounts-content-accordion-expand-0').isVisible()) { + await page.getByTestId('accounts-content-accordion-expand-0').click(); + } else { + await page.getByTestId('accounts-content-accordion-collapse-0').isVisible(); + } + + await page.getByTestId('delete-account-button').first().click(); + // Wait for dialog to appear - wait for the confirm button instead + await page.getByTestId('delete-account-confirm').waitFor({ state: 'visible' }); + + // Verify dialog content shows proper text and doesn't show "undefined" + const dialogBody = await page.locator('.window .body').textContent(); + expect(dialogBody).toMatch(/Would you like to delete the account/); + expect(dialogBody).not.toContain('undefined'); + + // Verify the dialog shows the specific account address + expect(dialogBody).toContain('user1@example.com'); + + await page.getByTestId('delete-account-confirm').click(); + }); +} + +/** + * Helper function to toggle the enabled state of the first account + * @param page - The Playwright page object + */ +async function toggleFirstAccountEnabled(page: Page): Promise { + return await test.step('Toggle first account enabled state', async () => { + if (await page.getByTestId('accounts-content-accordion-expand-0').isVisible()) { + await page.getByTestId('accounts-content-accordion-expand-0').click(); + } else { + await page.getByTestId('accounts-content-accordion-collapse-0').isVisible(); + } + + await page.getByTestId('edit-account-button').first().click(); + await page.getByTestId('account-enabled-checkbox').click(); + await page.getByRole('button', { name: 'Save' }).click(); + }); +} + +async function closeAccountManagementCorepage(page: Page): Promise { + // either completely close account management corepage (on desktop) or go to sidebar (on mobile) + if (await page.getByTestId('accounts-content-close-button').isVisible()) { + await page.getByTestId('accounts-content-close-button').click(); + } else if (await page.getByTestId('accounts-content-back-button').isVisible()) { + await page.getByTestId('accounts-content-back-button').click(); + } +} diff --git a/src/modules/org.libersoft.messages/tests/e2e/fileTransfers.test.ts b/src/modules/org.libersoft.messages/tests/e2e/fileTransfers.test.ts index fed79ab22..9fcc28dc5 100644 --- a/src/modules/org.libersoft.messages/tests/e2e/fileTransfers.test.ts +++ b/src/modules/org.libersoft.messages/tests/e2e/fileTransfers.test.ts @@ -136,7 +136,7 @@ // // (Sender) Open conversation // await senderPage.getByRole('button', { name: 'test@tvorbawebu.eu' }).click(); // -// // (Sender) Open file upload modal +// // (Sender) Open file upload window // await senderPage.getByTestId('attachment-button').click(); // await senderPage.getByTestId('file-attachment-button').click(); // diff --git a/src/modules/org.libersoft.messages/tests/e2e/forwarding.test.ts b/src/modules/org.libersoft.messages/tests/e2e/forwarding.test.ts new file mode 100644 index 000000000..b60d3b4d7 --- /dev/null +++ b/src/modules/org.libersoft.messages/tests/e2e/forwarding.test.ts @@ -0,0 +1,141 @@ +import { test, expect } from '@playwright/test'; +import { setupConsoleLogging, closeWelcomeWizardWindow, openGlobalSettings, setupAccountInWizard, goToAccountManagement, addAccount, switchAccount, switchModule, closeWindow } from '@/core/tests/e2e/test-utils.js'; + +import { startNewConversation, openConversation, sendMessage, verifyForwardWindowWithPreview, forwardLastMessage, searchConversationsInForwardWindow } from '@/modules/org.libersoft.messages/tests/e2e/_shared/utils.js'; + +test('Click around in settings', async ({ page }) => { + setupConsoleLogging(page); + await page.goto(process.env['PLAYWRIGHT_CLIENT_URL'] || 'http://localhost:3000/'); + + await closeWelcomeWizardWindow(page); + await openGlobalSettings(page); +}); + +test('Message Forwarding Behavior Tests', async ({ page }) => { + setupConsoleLogging(page); + await page.goto(process.env['PLAYWRIGHT_CLIENT_URL'] || 'http://localhost:3000/'); + const serverUrl = process.env['PLAYWRIGHT_SERVER_URL'] || `ws://localhost:8084`; + + await test.step('Setup Test Accounts', async () => { + // Add account in the wizard + await setupAccountInWizard(page, { + server: serverUrl, + address: 'forward_test_user1@example.com', + password: 'password', + }); + + // Go to account management and add more accounts + await goToAccountManagement(page); + + await addAccount(page, { + server: serverUrl, + address: 'forward_test_user2@example.com', + password: 'password', + }); + + await addAccount(page, { + server: serverUrl, + address: 'forward_test_user3@example.com', + password: 'password', + }); + }); + + await test.step('Create Conversations and Messages', async () => { + if (await page.getByTestId('accounts-content-back-button').isVisible()) { + await page.getByTestId('accounts-content-back-button').click(); + } + + // Switch to user1 and create conversations + await switchAccount(page, 'forward_test_user1@example.com'); + await switchModule(page, 'org.libersoft.messages'); + + // Start conversation with user2 + await startNewConversation(page, 'forward_test_user2@example.com'); + await sendMessage(page, 'Hello user2 from user1'); + + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + + // Start conversation with user3 + await startNewConversation(page, 'forward_test_user3@example.com'); + await sendMessage(page, 'Hello user3 from user1'); + + if (await page.getByTestId('profile-bar-back-button').isVisible()) { + await page.getByTestId('profile-bar-back-button').click(); + } + }); + + await test.step('Test Forward Message Preview and Window', async () => { + // Go to conversation with user2 + await openConversation(page, 'forward_test_user2@example.com'); + + // Send a message to forward + const messageToForward = 'This is a test message that will be forwarded'; + await sendMessage(page, messageToForward); + + // Forward the message + await forwardLastMessage(page); + + // Verify window opens with correct preview + await verifyForwardWindowWithPreview(page, messageToForward); + + // Verify window structure + await expect(page.getByTestId('forward-message-window')).toBeVisible(); + await expect(page.getByTestId('forward-message-preview')).toBeVisible(); + await expect(page.getByTestId('forward-message-preview-header')).toHaveText('Forwarding message:'); + await expect(page.getByTestId('forward-message-search')).toBeVisible(); + await expect(page.getByTestId('forward-message-conversations')).toBeVisible(); + + // Close window + await closeWindow(page, 'forward-message'); + }); + + await test.step('Test Conversation Search Functionality', async () => { + await forwardLastMessage(page); + + // Test search for user3 + await searchConversationsInForwardWindow(page, 'user3'); + + // Verify that only user3 conversation is visible (if any conversations match) + await expect(page.getByTestId('forward-message-conversations')).toBeVisible(); + + // Test search with no results + await searchConversationsInForwardWindow(page, 'nonexistent'); + await expect(page.getByTestId('forward-message-no-conversations')).toBeVisible(); + + // Clear search + await searchConversationsInForwardWindow(page, ''); + + // Close window + await closeWindow(page, 'forward-message'); + }); + + await test.step('Test Auto-Clear Behavior When Forwarding Different Messages', async () => { + // Send first message and forward it + const firstMessage = 'First message to forward'; + await sendMessage(page, firstMessage); + await forwardLastMessage(page); + await verifyForwardWindowWithPreview(page, firstMessage); + + // Note: In a real test with actual conversation IDs, we would: + // 1. Forward to a conversation and verify it shows "Sent" + // 2. Close window, send new message, forward it + // 3. Verify the same conversation now shows "Send" again (auto-cleared) + + // For now, we'll verify the window works with different messages + await closeWindow(page, 'forward-message'); + + // Send second message + const secondMessage = 'Second message to forward'; + await sendMessage(page, secondMessage); + await forwardLastMessage(page); + await verifyForwardWindowWithPreview(page, secondMessage); + + // Verify it's showing the new message, not the old one + //await expect(page.getByTestId('forward-message-preview-content')).toContainText(secondMessage); + //await expect(page.getByTestId('forward-message-preview-content')).not.toContainText(firstMessage); + + await closeWindow(page, 'forward-message'); + }); +}); diff --git a/src/modules/org.libersoft.messages/tests/e2e/qr-camera-mock.test.ts b/src/modules/org.libersoft.messages/tests/e2e/qr-camera-mock.test.ts new file mode 100644 index 000000000..c2bb98f4c --- /dev/null +++ b/src/modules/org.libersoft.messages/tests/e2e/qr-camera-mock.test.ts @@ -0,0 +1,212 @@ +import { expect, test } from '@playwright/test'; +import { type Page } from '@playwright/test'; +import { setupConsoleLogging } from '@/core/tests/e2e/test-utils.js'; + +/** + * Helper function to setup initial account via wizard + */ +async function setupAccountInWizard( + page: Page, + accountData: { + server: string; + address: string; + password: string; + title?: string; + } +): Promise { + return await test.step(`Setup account in wizard: ${accountData.address}`, async () => { + await page.getByTestId('wizard-next').click(); + await page.getByTestId('account-title-input').click(); + await page.getByTestId('account-title-input').fill(accountData.title || ''); + await page.getByTestId('account-server-input').press('Shift+Home'); + await page.getByTestId('account-server-input').fill(accountData.server); + await page.getByTestId('account-address-input').fill(accountData.address); + await page.getByTestId('account-password-input').fill(accountData.password); + await page.getByTestId('add').click(); + await page.getByRole('button', { name: 'Next' }).click(); + await page.getByRole('button', { name: 'Next' }).click(); + await page.getByRole('button', { name: 'Finish' }).click(); + }); +} + +test.describe.parallel('QR Code Camera Mock Tests', () => { + const serverUrl = process.env['PLAYWRIGHT_SERVER_URL'] || 'ws://localhost:8084'; + + test.beforeEach(async ({ page }) => { + // Setup console logging + setupConsoleLogging(page); + + await page.goto(process.env['PLAYWRIGHT_CLIENT_URL'] || 'http://localhost:3000/'); + + // Setup initial account via wizard + await setupAccountInWizard(page, { + server: serverUrl, + address: 'initial@example.com', + password: 'initialpass', + }); + }); + + test('QR scanner interface with mock camera displays correctly', async ({ page, browserName }, testInfo) => { + test.skip(process.env['CI'] === 'true', 'Camera/video not available in CI'); + test.skip(browserName === 'firefox', 'Camera/video permissions not supported in Firefox'); + test.skip(testInfo.project.name === 'Mobile Safari', 'Camera/video not available in Mobile Safari'); + + // Grant camera permissions for fake camera + await page.context().grantPermissions(['camera'], { origin: page.url() }); + + // Navigate to QR import + await page.getByTestId('account-bar-toggle').click(); + await page.getByTestId('account-management-button').click(); + await page.getByTestId('accounts-import-button').click(); + await page.getByTestId('accounts-qr-tab').click(); + + // Should show scanner interface elements + await expect(page.getByText('Point your camera at a QR code')).toBeVisible(); + + // Should not show camera error with permissions granted + await expect(page.getByText('Camera access denied or not available')).not.toBeVisible(); + }); + + /* test('Successfully scan and import valid account QR code', async ({ page }) => { + const result = await testQRImportFlow(page, QR_TEST_DATA.VALID_ACCOUNT, 'success'); + expect(result.success).toBe(true); + + // Import the scanned data + await page.getByTestId('accounts-add-btn').click(); + + // Should close window and show imported account + await expect(page.getByTestId('accounts-import-Window')).not.toBeVisible(); + // Assuming QR code imports to ws://localhost:8084 by default + await expect(page.getByTestId('account-address@qrtest1@example.com@ws://localhost:8084')).toBeVisible(); + }); + + test('Successfully scan and import complex account QR code', async ({ page }) => { + const result = await testQRImportFlow(page, QR_TEST_DATA.COMPLEX_ACCOUNT, 'success'); + expect(result.success).toBe(true); + + // Import the scanned data + await page.getByTestId('accounts-add-btn').click(); + + // Should close window and show imported account + await expect(page.getByTestId('accounts-import-Window')).not.toBeVisible(); + // Assuming QR code imports to ws://localhost:8084 by default + await expect(page.getByTestId('account-address@complex+test@example.com@ws://localhost:8084')).toBeVisible(); + }); + + test('Handle invalid JSON in QR code scan', async ({ page }) => { + const result = await testQRImportFlow(page, QR_TEST_DATA.INVALID_JSON, 'error'); + expect(result.success).toBe(false); + + // Should show error for invalid JSON + await expect(page.getByText('Invalid JSON format')).toBeVisible(); + }); + + test('Handle non-account data in QR code scan', async ({ page }) => { + const result = await testQRImportFlow(page, QR_TEST_DATA.SIMPLE_TEXT, 'error'); + expect(result.success).toBe(false); + + // Should show error for non-JSON data + await expect(page.locator('.alert')).toBeVisible(); + }); + + test('Successfully scan and import multiple accounts QR code', async ({ page }) => { + const result = await testQRImportFlow(page, QR_TEST_DATA.MULTIPLE_ACCOUNTS, 'success'); + expect(result.success).toBe(true); + + // Import the scanned data + await page.getByTestId('accounts-add-btn').click(); + + // Should close window and show imported accounts + await expect(page.getByTestId('accounts-import-Window')).not.toBeVisible(); + // Assuming QR code imports to ws://localhost:8084 by default + await expect(page.getByTestId('account-address@user1@domain.com@ws://localhost:8084')).toBeVisible(); + await expect(page.getByTestId('account-address@user2@domain.com@ws://localhost:8084')).toBeVisible(); + }); + + test('Scan again functionality works correctly', async ({ page }) => { + const helper = new QRTestHelper(page); + await helper.setupQRTesting(); + + // Navigate to QR import and scan first QR code + await page.getByTestId('account-bar-toggle').click(); + await page.getByTestId('account-management-button').click(); + await page.getByTestId('accounts-import-button').click(); + await page.getByTestId('accounts-qr-tab').click(); + + // Wait for scanner and inject first QR data + await helper.waitForQRScanner(QR_TEST_DATA.VALID_ACCOUNT); + + // Should show scanned content + await expect(page.getByTestId('accounts-add-btn')).toBeVisible(); + + // Click "Scan Again" button + await page.getByRole('button', { name: 'Scan Again' }).click(); + + // Should show scanner interface again + await expect(page.getByText('Point your camera at a QR code')).toBeVisible(); + await expect(page.locator('video')).toBeVisible(); + + // Scan different QR code + await helper.waitForQRScanner(QR_TEST_DATA.COMPLEX_ACCOUNT); + + // Should show new scanned content + await expect(page.getByTestId('accounts-add-btn')).toBeVisible(); + + // Verify the data has changed + const codeElement = page.locator('[data-testid="accounts-textarea"]'); + const scannedData = await codeElement.inputValue(); + expect(scannedData).toContain('complex+test@example.com'); + }); +*/ + test('Switch between JSON and QR tabs maintains state', async ({ page, browserName }, testInfo) => { + test.skip(process.env['CI'] === 'true', 'Camera/video not available in CI'); + test.skip(browserName === 'firefox', 'Camera/video permissions not supported in Firefox'); + test.skip(testInfo.project.name === 'Mobile Safari', 'Camera/video not available in Mobile Safari'); + + // Grant camera permissions for fake camera + await page.context().grantPermissions(['camera'], { origin: page.url() }); + + // Navigate to accounts import + await page.getByTestId('account-bar-toggle').click(); + await page.getByTestId('account-management-button').click(); + await page.getByTestId('accounts-import-button').click(); + + // Start on JSON tab and enter some data + const jsonData = JSON.stringify([{ test: 'data' }]); + await page.getByTestId('accounts-textarea').fill(jsonData); + + // Switch to QR tab + await page.getByTestId('accounts-qr-tab').click(); + await expect(page.getByText('Point your camera at a QR code')).toBeVisible(); + + // Switch back to JSON tab + await page.getByTestId('accounts-json-tab').click(); + + // JSON data should still be there + const codeElement = page.locator('[data-testid="accounts-textarea"]'); + const preservedData = await codeElement.inputValue(); + expect(preservedData).toBe(jsonData); + }); + + /*test('QR scanning with immediate success detection', async ({ page }) => { + const helper = new QRTestHelper(page); + await helper.setupQRTesting(); + + // Pre-inject QR data before navigation + await helper.injectQRCode(QR_TEST_DATA.VALID_ACCOUNT); + + // Navigate to QR import + await page.getByTestId('account-bar-toggle').click(); + await page.getByTestId('account-management-button').click(); + await page.getByTestId('accounts-import-button').click(); + await page.getByTestId('accounts-qr-tab').click(); + + // Should quickly detect and show the QR content + await expect(page.getByTestId('accounts-add-btn')).toBeVisible({ }); + + // Verify the detected content + const codeElement = page.locator('[data-testid="accounts-textarea"]'); + const detectedData = await codeElement.inputValue(); + expect(detectedData).toContain('qrtest1@example.com'); + });*/ +}); diff --git a/src/modules/org.libersoft.messages/tests/unit/gallery.store.test.ts b/src/modules/org.libersoft.messages/tests/unit/gallery.store.test.ts index e445cea42..5d8e104c8 100644 --- a/src/modules/org.libersoft.messages/tests/unit/gallery.store.test.ts +++ b/src/modules/org.libersoft.messages/tests/unit/gallery.store.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test, beforeEach } from 'vitest'; import { get } from 'svelte/store'; -import { GalleryStore, type GalleryFile } from '../../stores/GalleryStore.ts'; +import { GalleryStore, type IGalleryFile } from '../../stores/GalleryStore.ts'; describe('GalleryStore', () => { let store: GalleryStore; @@ -22,7 +22,7 @@ describe('GalleryStore', () => { }); test('setFiles updates files array', () => { - const files: GalleryFile[] = [ + const files: IGalleryFile[] = [ { id: 1, loaded: false, fileName: 'test1.jpg' }, { id: 2, loaded: true, fileName: 'test2.jpg' }, ]; @@ -31,7 +31,7 @@ describe('GalleryStore', () => { }); test('updateFile modifies an existing file', () => { - const files: GalleryFile[] = [ + const files: IGalleryFile[] = [ { id: 1, loaded: false, fileName: 'test1.jpg' }, { id: 2, loaded: true, fileName: 'test2.jpg' }, ]; diff --git a/src/modules/org.libersoft.messages/tests/unit/processMessage.test.ts b/src/modules/org.libersoft.messages/tests/unit/processMessage.test.ts index 7e6afc4be..8d7f38a4d 100644 --- a/src/modules/org.libersoft.messages/tests/unit/processMessage.test.ts +++ b/src/modules/org.libersoft.messages/tests/unit/processMessage.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from 'vitest'; -import { processMessage } from '../../messages'; +import { processMessage } from '@/org.libersoft.messages/scripts/messages.ts'; //import util from 'util'; /*function printDOMTree(node, indent = 0) { @@ -14,8 +14,8 @@ describe('processMessage', () => { expect(format).toBe('html'); expect(body.nodeType).toBe(Node.DOCUMENT_FRAGMENT_NODE); expect(body.childNodes.length).toBe(1); - expect(body.childNodes[0].nodeType).toBe(Node.TEXT_NODE); - expect(body.childNodes[0].textContent).toBe(message); + expect(body.childNodes[0]!.nodeType).toBe(Node.TEXT_NODE); + expect(body.childNodes[0]!.textContent).toBe(message); }); test('should wrap custom elements Attachment in AttachmentsWrap', () => { @@ -24,10 +24,10 @@ describe('processMessage', () => { expect(format).toBe('html'); expect(body.nodeType).toBe(Node.DOCUMENT_FRAGMENT_NODE); expect(body.childNodes.length).toBe(1); - expect(body.childNodes[0].nodeName.toLowerCase()).toBe('attachmentswrapper'); - expect(body.childNodes[0].childNodes.length).toBe(3); - expect(body.childNodes[0].childNodes[0].nodeName.toLowerCase()).toBe('attachment'); - expect(body.childNodes[0].childNodes[1].nodeName.toLowerCase()).toBe('attachment'); - expect(body.childNodes[0].childNodes[2].nodeName.toLowerCase()).toBe('attachment'); + expect(body.childNodes[0]!.nodeName.toLowerCase()).toBe('attachmentswrapper'); + expect(body.childNodes[0]!.childNodes.length).toBe(3); + expect(body.childNodes[0]!.childNodes[0]!.nodeName.toLowerCase()).toBe('attachment'); + expect(body.childNodes[0]!.childNodes[1]!.nodeName.toLowerCase()).toBe('attachment'); + expect(body.childNodes[0]!.childNodes[2]!.nodeName.toLowerCase()).toBe('attachment'); }); }); diff --git a/src/modules/org.libersoft.messages/tests/unit/splitAndLinkify.test.js b/src/modules/org.libersoft.messages/tests/unit/splitAndLinkify.test.ts similarity index 95% rename from src/modules/org.libersoft.messages/tests/unit/splitAndLinkify.test.js rename to src/modules/org.libersoft.messages/tests/unit/splitAndLinkify.test.ts index 31529c27c..305aa6386 100644 --- a/src/modules/org.libersoft.messages/tests/unit/splitAndLinkify.test.js +++ b/src/modules/org.libersoft.messages/tests/unit/splitAndLinkify.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { splitAndLinkify } from '../../splitAndLinkify.js'; +import { splitAndLinkify } from '../../scripts/splitAndLinkify.ts'; describe('splitAndLinkify', () => { it('returns an empty array for an empty string', () => { @@ -75,14 +75,14 @@ describe('splitAndLinkify', () => { type: 'plain', value: 'Visit ', }); - expect(output[1].type).toBe('processed'); - expect(output[1].value).toContain('https://example.com'); + expect(output[1]?.type).toBe('processed'); + expect(output[1]?.value).toContain('https://example.com'); expect(output[2]).toEqual({ type: 'plain', value: ' and also ', }); - expect(output[3].type).toBe('processed'); - expect(output[3].value).toContain('http://test.org'); + expect(output[3]?.type).toBe('processed'); + expect(output[3]?.value).toContain('http://test.org'); expect(output[4]).toEqual({ type: 'plain', value: '!', @@ -174,7 +174,7 @@ describe('splitAndLinkify', () => { it('handles bitcoin and ethereum links', () => { const input = 'Pay using bitcoin:bitcoin:1ExampleAddr?amount=0.5 or ethereum:ethereum:0xABC123.'; const output = splitAndLinkify(input); - + // Expected segments around both crypto links expect(output).toEqual([ { type: 'plain', value: 'Pay using bitcoin:' }, diff --git a/src/modules/org.libersoft.messages/windows/FileUpload.svelte b/src/modules/org.libersoft.messages/windows/FileUpload.svelte new file mode 100644 index 000000000..4ef19bfc6 --- /dev/null +++ b/src/modules/org.libersoft.messages/windows/FileUpload.svelte @@ -0,0 +1,156 @@ + + + + +{#snippet fileUploadItem(file)} + + {truncateText(file.name, 30)} + {humanSize(file.size)} + onFileDelete(file)} /> + +{/snippet} + +
+ + +
diff --git a/src/modules/org.libersoft.messages/windows/ForwardMessage.svelte b/src/modules/org.libersoft.messages/windows/ForwardMessage.svelte new file mode 100644 index 000000000..9a98b786f --- /dev/null +++ b/src/modules/org.libersoft.messages/windows/ForwardMessage.svelte @@ -0,0 +1,128 @@ + + + + +{#snippet conversationItem(conversation: Conversation)} + {@const wasAlreadySent = $sentToConversations.some(c => c.id === conversation.id)} +
+ +
+ {conversation.address} +
+
+
+
+{/snippet} +
+ {#if $fwMsg && messageContent} +
+
Forwarding message:
+
+ +
+
+ {/if} +
+ +
+
+ {#if conversations && conversations.length} + {#each conversations as conversation (conversation.address)} + {@render conversationItem(conversation)} + {/each} + {:else} +
No conversations were found
+ {/if} +
+
diff --git a/src/modules/org.libersoft.messages/windows/GifServers.svelte b/src/modules/org.libersoft.messages/windows/GifServers.svelte new file mode 100644 index 000000000..842f9185d --- /dev/null +++ b/src/modules/org.libersoft.messages/windows/GifServers.svelte @@ -0,0 +1,105 @@ + + + + + + + {#if $ledgerLoading} +
Connecting...
+ {/if} + diff --git a/src/modules/org.libersoft.wallet/components/List.svelte b/src/modules/org.libersoft.wallet/components/List.svelte deleted file mode 100644 index f49f39eb0..000000000 --- a/src/modules/org.libersoft.wallet/components/List.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
- -
diff --git a/src/modules/org.libersoft.wallet/components/ListItem.svelte b/src/modules/org.libersoft.wallet/components/ListItem.svelte deleted file mode 100644 index 2a5847105..000000000 --- a/src/modules/org.libersoft.wallet/components/ListItem.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - - - - -
- {#if icon} -
{item}
- {/if} -
{item}
-
-
diff --git a/src/modules/org.libersoft.wallet/components/TrezorConnect.svelte b/src/modules/org.libersoft.wallet/components/TrezorConnect.svelte new file mode 100644 index 000000000..8cfba6b1c --- /dev/null +++ b/src/modules/org.libersoft.wallet/components/TrezorConnect.svelte @@ -0,0 +1,144 @@ + + + + +{#if $debug} +
+ staticSessionId: {$staticSessionId} +
+
$trezorState: {JSON.stringify($trezorState, null, 2)}
+
+
$trezorLoading: {$trezorLoading}
+
+
$trezorError: {$trezorError}
+
+{/if} + +
+
+ {#if !!$trezorState} + Trezor wallet selected +
Device is ready to use. ({$trezorDevice})
+ {:else if $trezorError} + Error +
{$trezorError}
+ {#if $trezorError === 'Transport is missing'} +
Please ensure that Trezor Suite is installed and running.
+ {/if} + {:else} + Connect your Trezor +
Please connect your Trezor device and click Select Trezor Wallet.
+ {/if} +
+
+ +{#if $trezorLoading} +
+ +
Connecting to Trezor...
+
+{/if} + +{#if $trezorDevices.size > 0} + Trezor Devices: {#if $debug}({$trezorDevices.size}){/if} +
    + {#each $trezorDevices.values() as device} +
  • + {device.label} - {device.name} +
    ({device.id})
    +
  • + {#if $debug} +
    {JSON.stringify(device, null, 2)}
    + {/if} + {/each} +
+{:else} + +{/if} + + + +
+ + + {#if $trezorLoading} +
+ Loading: {$trezorLoading} +
+ {/if} +
+ +{#if !$trezorState} +
+

Troubleshooting

+

If you encounter issues, please ensure:

+
    +
  • Your Trezor device is connected.
  • +
  • The Trezor Suite is installed and running.
  • +
  • Your device is unlocked with the correct PIN.
  • +
+

If the problem persists, try reconnecting your device or restarting the Trezor Suite.

+
+{/if} diff --git a/src/modules/org.libersoft.wallet/components/TrezorDebug.svelte b/src/modules/org.libersoft.wallet/components/TrezorDebug.svelte new file mode 100644 index 000000000..5b42be980 --- /dev/null +++ b/src/modules/org.libersoft.wallet/components/TrezorDebug.svelte @@ -0,0 +1,15 @@ + + +{#if $debug} +
+ Debug Info:
+ SDKisInitialized: {$isInitialized}
+ trezorLoading: {$trezorLoading}
+ trezorError: {$trezorError || 'None'}
+ trezorState: +
{JSON.stringify($trezorState, null, 2) || 'None'}
+
+{/if} diff --git a/src/modules/org.libersoft.wallet/components/WalletWelcomeWizard.svelte b/src/modules/org.libersoft.wallet/components/WalletWelcomeWizard.svelte new file mode 100644 index 000000000..ed547738b --- /dev/null +++ b/src/modules/org.libersoft.wallet/components/WalletWelcomeWizard.svelte @@ -0,0 +1,48 @@ + + + diff --git a/src/modules/org.libersoft.wallet/default_networks.js b/src/modules/org.libersoft.wallet/default_networks.js deleted file mode 100644 index 9ea7712c0..000000000 --- a/src/modules/org.libersoft.wallet/default_networks.js +++ /dev/null @@ -1,1244 +0,0 @@ -import { writable } from 'svelte/store'; -const iconUrlBase = 'https://raw.githubusercontent.com/libersoft-org/blockchain-icons/refs/heads/main/coins/'; -export const default_networks = writable([ - { - name: 'Ethereum - Mainnet', - chainID: 1, - rpcURLs: ['https://cloudflare-eth.com', 'https://rpc.ankr.com/eth', 'https://main-rpc.linkpool.io', 'https://eth-rpc.gateway.pokt.network', 'https://mainnet-nethermind.blockscout.com', 'https://api.mycryptoapi.com/eth'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://etherscan.io', - }, - { - name: 'Ethereum - Goerli Testnet', - chainID: 5, - rpcURLs: ['https://goerli.infura.io/v3/YOUR-PROJECT-ID', 'https://eth-goerli.g.alchemy.com/v2/YOUR-API-KEY', 'https://rpc.goerli.mudit.blog/', 'https://rpc.ankr.com/eth_goerli', 'https://goerli.blockpi.network/v1/rpc/public'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://goerli.etherscan.io', - }, - { - name: 'Ethereum - Sepolia Testnet', - chainID: 11155111, - rpcURLs: ['https://sepolia.infura.io/v3/YOUR-PROJECT-ID', 'https://rpc.sepolia.org', 'https://sepolia.blockpi.network/v1/rpc/public'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://sepolia.etherscan.io', - }, - { - name: 'Ethereum - Ropsten Testnet (Deprecated)', - chainID: 3, - rpcURLs: ['https://ropsten.infura.io/v3/YOUR-PROJECT-ID', 'https://eth-ropsten.alchemyapi.io/v2/YOUR-API-KEY'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://ropsten.etherscan.io', - }, - { - name: 'Ethereum - Rinkeby Testnet (Deprecated)', - chainID: 4, - rpcURLs: ['https://rinkeby.infura.io/v3/YOUR-PROJECT-ID', 'https://eth-rinkeby.alchemyapi.io/v2/YOUR-API-KEY', 'https://rinkeby-light.eth.linkpool.io/'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://rinkeby.etherscan.io', - }, - { - name: 'Binance Smart Chain - Mainnet', - chainID: 56, - rpcURLs: ['https://bsc-dataseed.binance.org/', 'https://bsc-dataseed1.defibit.io/', 'https://bsc-dataseed1.ninicoin.io/', 'https://rpc.ankr.com/bsc', 'https://bscrpc.com'], - currency: { - symbol: 'BNB', - iconURL: iconUrlBase + 'BNB.svg', - }, - explorerURL: 'https://bscscan.com', - }, - { - name: 'Binance Smart Chain - Testnet', - chainID: 97, - rpcURLs: ['https://data-seed-prebsc-1-s1.binance.org:8545/', 'https://data-seed-prebsc-2-s2.binance.org:8545/', 'https://data-seed-prebsc-1-s3.binance.org:8545/', 'https://rpc.ankr.com/bsc_testnet_chapel'], - currency: { - symbol: 'tBNB', - iconURL: iconUrlBase + 'BNB.svg', - }, - explorerURL: 'https://testnet.bscscan.com', - }, - { - name: 'Polygon - Mainnet', - chainID: 137, - rpcURLs: ['https://polygon-rpc.com', 'https://rpc-mainnet.maticvigil.com/', 'https://rpc-mainnet.matic.network', 'https://rpc-mainnet.matic.quiknode.pro', 'https://matic-mainnet.chainstacklabs.com'], - currency: { - symbol: 'MATIC', - iconURL: iconUrlBase + 'MATIC.svg', - }, - explorerURL: 'https://polygonscan.com', - }, - { - name: 'Polygon - Amoy Testnet', - chainID: 80002, - rpcURLs: ['https://rpc-amoy.polygon.technology', 'https://polygon-amoy.blockpi.network/v1/rpc/public', 'https://rpc.ankr.com/polygon_amoy', 'https://polygon-amoy.drpc.org', 'https://polygon-amoy.gateway.tenderly.co', 'https://polygon-amoy-bor-rpc.publicnode.com', 'wss://polygon-amoy-bor-rpc.publicnode.com'], - currency: { - symbol: 'MATIC', - iconURL: iconUrlBase + 'MATIC.svg', - }, - explorerURL: 'https://amoy.polygonscan.com/', - }, - { - name: 'Avalanche - C-Chain Mainnet', - chainID: 43114, - rpcURLs: ['https://api.avax.network/ext/bc/C/rpc', 'https://rpc.ankr.com/avalanche', 'https://ava-mainnet.public.blastapi.io/ext/bc/C/rpc', 'https://avalanche-c-chain.publicnode.com'], - currency: { - symbol: 'AVAX', - iconURL: iconUrlBase + 'AVAX.svg', - }, - explorerURL: 'https://snowtrace.io', - }, - { - name: 'Avalanche - Fuji Testnet', - chainID: 43113, - rpcURLs: ['https://api.avax-test.network/ext/bc/C/rpc', 'https://rpc.ankr.com/avalanche_fuji', 'https://ava-testnet.public.blastapi.io/ext/bc/C/rpc'], - currency: { - symbol: 'AVAX', - iconURL: iconUrlBase + 'AVAX.svg', - }, - explorerURL: 'https://testnet.snowtrace.io', - }, - { - name: 'Fantom Opera - Mainnet', - chainID: 250, - rpcURLs: ['https://rpc.ftm.tools/', 'https://fantom-mainnet.public.blastapi.io', 'https://rpc.ankr.com/fantom', 'https://rpcapi.fantom.network'], - currency: { - symbol: 'FTM', - iconURL: iconUrlBase + 'FTM.svg', - }, - explorerURL: 'https://ftmscan.com', - }, - { - name: 'Fantom Opera - Testnet', - chainID: 4002, - rpcURLs: ['https://rpc.testnet.fantom.network/', 'https://fantom-testnet.public.blastapi.io', 'https://rpc.ankr.com/fantom_testnet'], - currency: { - symbol: 'FTM', - iconURL: iconUrlBase + 'FTM.svg', - }, - explorerURL: 'https://testnet.ftmscan.com', - }, - { - name: 'Arbitrum One - Mainnet', - chainID: 42161, - rpcURLs: ['https://arb1.arbitrum.io/rpc', 'https://arbitrum-mainnet.public.blastapi.io', 'https://rpc.ankr.com/arbitrum', 'https://arb-mainnet.g.alchemy.com/v2/YOUR-API-KEY'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://arbiscan.io', - }, - { - name: 'Arbitrum One - Goerli Testnet', - chainID: 421613, - rpcURLs: ['https://goerli-rollup.arbitrum.io/rpc', 'https://arbitrum-goerli.public.blastapi.io', 'https://arb-goerli.g.alchemy.com/v2/YOUR-API-KEY', 'https://rpc.ankr.com/arbitrum_goerli'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://goerli.arbiscan.io', - }, - { - name: 'Optimism - Mainnet', - chainID: 10, - rpcURLs: ['https://mainnet.optimism.io', 'https://optimism-mainnet.public.blastapi.io', 'https://rpc.ankr.com/optimism', 'https://opt-mainnet.g.alchemy.com/v2/YOUR-API-KEY'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://optimistic.etherscan.io', - }, - { - name: 'Optimism - Goerli Testnet', - chainID: 420, - rpcURLs: ['https://goerli.optimism.io', 'https://optimism-goerli.public.blastapi.io', 'https://opt-goerli.g.alchemy.com/v2/YOUR-API-KEY', 'https://rpc.ankr.com/optimism_testnet'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://goerli-optimistic.etherscan.io', - }, - { - name: 'Cronos - Mainnet', - chainID: 25, - rpcURLs: ['https://evm.cronos.org', 'https://cronosrpc-1.xstaking.sg', 'https://rpc.ankr.com/cronos', 'https://node.croswap.com/rpc'], - currency: { - symbol: 'CRO', - iconURL: iconUrlBase + 'CRO.svg', - }, - explorerURL: 'https://cronoscan.com', - }, - { - name: 'Cronos - Testnet', - chainID: 338, - rpcURLs: ['https://evm-t3.cronos.org', 'https://cronos-testnet-3.crypto.org:8545', 'https://rpc.ankr.com/cronos_testnet'], - currency: { - symbol: 'tCRO', - iconURL: iconUrlBase + 'CRO.svg', - }, - explorerURL: 'https://testnet.cronoscan.com', - }, - { - name: 'zkSync Era - Mainnet', - chainID: 324, - rpcURLs: ['https://mainnet.era.zksync.io', 'https://zksync2-mainnet.zksync.io', 'https://rpc.ankr.com/zksync_era'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://explorer.zksync.io', - }, - { - name: 'zkSync Era - Testnet', - chainID: 280, - rpcURLs: ['https://testnet.era.zksync.dev', 'https://zksync2-testnet.zksync.dev', 'https://rpc.ankr.com/zksync_era_testnet'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://goerli.explorer.zksync.io', - }, - { - name: 'Moonbeam - Mainnet', - chainID: 1284, - rpcURLs: ['https://rpc.api.moonbeam.network', 'https://moonbeam.public.blastapi.io', 'https://rpc.ankr.com/moonbeam'], - currency: { - symbol: 'GLMR', - iconURL: iconUrlBase + 'GLMR.svg', - }, - explorerURL: 'https://moonscan.io', - }, - { - name: 'Moonbase - Alpha Testnet', - chainID: 1287, - rpcURLs: ['https://rpc.api.moonbase.moonbeam.network', 'https://moonbase-alpha.public.blastapi.io', 'https://rpc.ankr.com/moonbeam_testnet'], - currency: { - symbol: 'DEV', - iconURL: iconUrlBase + 'GLMR.svg', - }, - explorerURL: 'https://moonbase.moonscan.io', - }, - { - name: 'Celo - Mainnet', - chainID: 42220, - rpcURLs: ['https://forno.celo.org', 'https://rpc.ankr.com/celo', 'https://celo-mainnet.public.blastapi.io'], - currency: { - symbol: 'CELO', - iconURL: iconUrlBase + 'CELO.svg', - }, - explorerURL: 'https://explorer.celo.org', - }, - { - name: 'Celo - Alfajores Testnet', - chainID: 44787, - rpcURLs: ['https://alfajores-forno.celo-testnet.org', 'https://rpc.ankr.com/celo_alfajores', 'https://alfajores.celo-testnet.public.blastapi.io'], - currency: { - symbol: 'CELO', - iconURL: iconUrlBase + 'CELO.svg', - }, - explorerURL: 'https://alfajores-blockscout.celo-testnet.org', - }, - { - name: 'Gnosis - Mainnet', - chainID: 100, - rpcURLs: ['https://rpc.gnosischain.com', 'https://gnosis-mainnet.public.blastapi.io', 'https://rpc.ankr.com/gnosis'], - currency: { - symbol: 'xDAI', - iconURL: iconUrlBase + 'xDAI.svg', - }, - explorerURL: 'https://blockscout.com/xdai/mainnet', - }, - { - name: 'Gnosis - Chiado Testnet', - chainID: 10200, - rpcURLs: ['https://rpc.chiadochain.net', 'https://gnosis-testnet.public.blastapi.io', 'https://rpc.ankr.com/gnosis_chiado'], - currency: { - symbol: 'xDAI', - iconURL: iconUrlBase + 'xDAI.svg', - }, - explorerURL: 'https://blockscout.com/gnosis/chiado', - }, - { - name: 'Klaytn - Mainnet', - chainID: 8217, - rpcURLs: ['https://public-node-api.klaytnapi.com/v1/cypress', 'https://klaytn01.fandom.finance', 'https://klaytn.rpc.thirdweb.com'], - currency: { - symbol: 'KLAY', - iconURL: iconUrlBase + 'KLAY.svg', - }, - explorerURL: 'https://scope.klaytn.com', - }, - { - name: 'Klaytn - Baobab Testnet', - chainID: 1001, - rpcURLs: ['https://api.baobab.klaytn.net:8651', 'https://klaytn-baobab.blockpi.network/v1/rpc/public', 'https://klaytn-testnet.rpc.thirdweb.com'], - currency: { - symbol: 'KLAY', - iconURL: iconUrlBase + 'KLAY.svg', - }, - explorerURL: 'https://baobab.scope.klaytn.com', - }, - { - name: 'Velas - Mainnet', - chainID: 106, - rpcURLs: ['https://evmexplorer.velas.com/rpc', 'https://velas-mainnet.public.blastapi.io', 'https://rpc.velas.com'], - currency: { - symbol: 'VLX', - iconURL: iconUrlBase + 'VLX.svg', - }, - explorerURL: 'https://evmexplorer.velas.com', - }, - { - name: 'Velas - Testnet', - chainID: 111, - rpcURLs: ['https://testnet.velas.com/rpc', 'https://velas-testnet.public.blastapi.io', 'https://rpc-testnet.velas.com'], - currency: { - symbol: 'VLX', - iconURL: iconUrlBase + 'VLX.svg', - }, - explorerURL: 'https://evmexplorer.testnet.velas.com', - }, - { - name: 'Harmony - Mainnet Shard 0', - chainID: 1666600000, - rpcURLs: ['https://api.harmony.one', 'https://harmony-0-rpc.gateway.pokt.network', 'https://rpc.ankr.com/harmony'], - currency: { - symbol: 'ONE', - iconURL: iconUrlBase + 'ONE.svg', - }, - explorerURL: 'https://explorer.harmony.one', - }, - { - name: 'Harmony - Testnet Shard 0', - chainID: 1666700000, - rpcURLs: ['https://api.s0.b.hmny.io', 'https://rpc.ankr.com/harmony_testnet', 'https://harmony-testnet.public.blastapi.io'], - currency: { - symbol: 'ONE', - iconURL: iconUrlBase + 'ONE.svg', - }, - explorerURL: 'https://explorer.testnet.harmony.one', - }, - { - name: 'Aurora - Mainnet', - chainID: 1313161554, - rpcURLs: ['https://mainnet.aurora.dev', 'https://aurora-mainnet.public.blastapi.io', 'https://rpc.ankr.com/aurora'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://aurorascan.dev', - }, - { - name: 'Aurora - Testnet', - chainID: 1313161555, - rpcURLs: ['https://testnet.aurora.dev', 'https://aurora-testnet.public.blastapi.io', 'https://rpc.ankr.com/aurora_testnet'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://testnet.aurorascan.dev', - }, - { - name: 'Metis Andromeda - Mainnet', - chainID: 1088, - rpcURLs: ['https://andromeda.metis.io/?owner=1088', 'https://metis-mainnet.public.blastapi.io', 'https://rpc.ankr.com/metis'], - currency: { - symbol: 'METIS', - iconURL: iconUrlBase + 'METIS.svg', - }, - explorerURL: 'https://andromeda-explorer.metis.io', - }, - { - name: 'Metis Stardust - Testnet', - chainID: 588, - rpcURLs: ['https://stardust.metis.io/?owner=588', 'https://metis-testnet.public.blastapi.io', 'https://rpc.ankr.com/metis_testnet'], - currency: { - symbol: 'METIS', - iconURL: iconUrlBase + 'METIS.svg', - }, - explorerURL: 'https://stardust-explorer.metis.io', - }, - { - name: 'Fuse - Mainnet', - chainID: 122, - rpcURLs: ['https://rpc.fuse.io', 'https://fuse-mainnet.public.blastapi.io', 'https://rpc.ankr.com/fuse'], - currency: { - symbol: 'FUSE', - iconURL: iconUrlBase + 'FUSE.svg', - }, - explorerURL: 'https://explorer.fuse.io', - }, - { - name: 'Fuse Spark - Testnet', - chainID: 123, - rpcURLs: ['https://rpc.fusespark.io', 'https://fuse-testnet.public.blastapi.io', 'https://rpc.ankr.com/fuse_testnet'], - currency: { - symbol: 'FUSE', - iconURL: iconUrlBase + 'FUSE.svg', - }, - explorerURL: 'https://explorer.fusespark.io', - }, - { - name: 'ThunderCore - Mainnet', - chainID: 108, - rpcURLs: ['https://mainnet-rpc.thundercore.com', 'https://thundercore-mainnet.public.blastapi.io', 'https://rpc.ankr.com/thundercore'], - currency: { - symbol: 'TT', - iconURL: iconUrlBase + 'TT.svg', - }, - explorerURL: 'https://viewblock.io/thundercore', - }, - { - name: 'ThunderCore - Testnet', - chainID: 18, - rpcURLs: ['https://testnet-rpc.thundercore.com', 'https://thundercore-testnet.public.blastapi.io', 'https://rpc.ankr.com/thundercore_testnet'], - currency: { - symbol: 'TST', - iconURL: iconUrlBase + 'TT.svg', - }, - explorerURL: 'https://explorer-testnet.thundercore.com', - }, - { - name: 'Telos EVM - Mainnet', - chainID: 40, - rpcURLs: ['https://mainnet.telos.net/evm', 'https://telos-evm-mainnet.public.blastapi.io', 'https://rpc.ankr.com/telos'], - currency: { - symbol: 'TLOS', - iconURL: iconUrlBase + 'TLOS.svg', - }, - explorerURL: 'https://teloscan.io', - }, - { - name: 'Telos EVM - Testnet', - chainID: 41, - rpcURLs: ['https://testnet.telos.net/evm', 'https://telos-evm-testnet.public.blastapi.io', 'https://rpc.ankr.com/telos_testnet'], - currency: { - symbol: 'TLOS', - iconURL: iconUrlBase + 'TLOS.svg', - }, - explorerURL: 'https://testnet.teloscan.io', - }, - { - name: 'Moonriver - Mainnet', - chainID: 1285, - rpcURLs: ['https://rpc.api.moonriver.moonbeam.network', 'https://moonriver.public.blastapi.io', 'https://rpc.ankr.com/moonriver'], - currency: { - symbol: 'MOVR', - iconURL: iconUrlBase + 'MOVR.svg', - }, - explorerURL: 'https://moonriver.moonscan.io', - }, - { - name: 'Moonriver - Testnet', - chainID: 1287, - rpcURLs: ['https://rpc.api.moonbase.moonbeam.network', 'https://moonbase-alpha.public.blastapi.io', 'https://rpc.ankr.com/moonbeam_testnet'], - currency: { - symbol: 'DEV', - iconURL: iconUrlBase + 'MOVR.svg', - }, - explorerURL: 'https://moonbase.moonscan.io', - }, - { - name: 'RSK - Mainnet', - chainID: 30, - rpcURLs: ['https://public-node.rsk.co', 'https://rsk.public.blastapi.io', 'https://rpc.ankr.com/rsk'], - currency: { - symbol: 'RBTC', - iconURL: iconUrlBase + 'RBTC.svg', - }, - explorerURL: 'https://explorer.rsk.co', - }, - { - name: 'RSK - Testnet', - chainID: 31, - rpcURLs: ['https://public-node.testnet.rsk.co', 'https://rsk-testnet.public.blastapi.io', 'https://rpc.ankr.com/rsk_testnet'], - currency: { - symbol: 'tRBTC', - iconURL: iconUrlBase + 'RBTC.svg', - }, - explorerURL: 'https://explorer.testnet.rsk.co', - }, - { - name: 'Astar - Mainnet', - chainID: 592, - rpcURLs: ['https://evm.astar.network', 'https://astar-mainnet.public.blastapi.io', 'https://rpc.ankr.com/astar'], - currency: { - symbol: 'ASTR', - iconURL: iconUrlBase + 'ASTR.svg', - }, - explorerURL: 'https://blockscout.com/astar', - }, - { - name: 'Astar - Shiden Testnet', - chainID: 336, - rpcURLs: ['https://rpc.shiden.astar.network', 'https://shiden-testnet.public.blastapi.io', 'https://rpc.ankr.com/astar_shiden'], - currency: { - symbol: 'SBY', - iconURL: iconUrlBase + 'ASTR.svg', - }, - explorerURL: 'https://blockscout.com/shiden', - }, - { - name: 'KCC - Mainnet', - chainID: 321, - rpcURLs: ['https://rpc-mainnet.kcc.network', 'https://kcc-mainnet.public.blastapi.io', 'https://rpc.ankr.com/kcc'], - currency: { - symbol: 'KCS', - iconURL: iconUrlBase + 'KCS.svg', - }, - explorerURL: 'https://explorer.kcc.io', - }, - { - name: 'KCC - Testnet', - chainID: 322, - rpcURLs: ['https://rpc-testnet.kcc.network', 'https://kcc-testnet.public.blastapi.io', 'https://rpc.ankr.com/kcc_testnet'], - currency: { - symbol: 'KCS', - iconURL: iconUrlBase + 'KCS.svg', - }, - explorerURL: 'https://scan-testnet.kcc.network', - }, - { - name: 'Hoo Smart Chain - Mainnet', - chainID: 70, - rpcURLs: ['https://http-mainnet.hoosmartchain.com', 'https://hoo-mainnet.public.blastapi.io', 'https://rpc.ankr.com/hoo'], - currency: { - symbol: 'HOO', - iconURL: iconUrlBase + 'HOO.svg', - }, - explorerURL: 'https://hooscan.com', - }, - { - name: 'Hoo Smart Chain - Testnet', - chainID: 170, - rpcURLs: ['https://http-testnet.hoosmartchain.com', 'https://hoo-testnet.public.blastapi.io', 'https://rpc.ankr.com/hoo_testnet'], - currency: { - symbol: 'HOO', - iconURL: iconUrlBase + 'HOO.svg', - }, - explorerURL: 'https://testnet.hooscan.com', - }, - { - name: 'Emerald Paratime (Oasis Network) - Mainnet', - chainID: 42262, - rpcURLs: ['https://emerald.oasis.dev', 'https://emerald-mainnet.public.blastapi.io', 'https://rpc.ankr.com/oasis_emerald'], - currency: { - symbol: 'ROSE', - iconURL: iconUrlBase + 'ROSE.svg', - }, - explorerURL: 'https://explorer.emerald.oasis.dev', - }, - { - name: 'Emerald Paratime (Oasis Network) - Testnet', - chainID: 42261, - rpcURLs: ['https://testnet.emerald.oasis.dev', 'https://emerald-testnet.public.blastapi.io', 'https://rpc.ankr.com/oasis_emerald_testnet'], - currency: { - symbol: 'ROSE', - iconURL: iconUrlBase + 'ROSE.svg', - }, - explorerURL: 'https://testnet.explorer.emerald.oasis.dev', - }, - { - name: 'Songbird - Mainnet', - chainID: 19, - rpcURLs: ['https://songbird-api.flare.network/ext/C/rpc', 'https://songbird.public.blastapi.io', 'https://rpc.ankr.com/songbird'], - currency: { - symbol: 'SGB', - iconURL: iconUrlBase + 'SGB.svg', - }, - explorerURL: 'https://songbird-explorer.flare.network', - }, - { - name: 'Songbird - Testnet', - chainID: 16, - rpcURLs: ['https://songbird-testnet.flare.network/ext/C/rpc', 'https://songbird-testnet.public.blastapi.io', 'https://rpc.ankr.com/songbird_testnet'], - currency: { - symbol: 'SGB', - iconURL: iconUrlBase + 'SGB.svg', - }, - explorerURL: 'https://songbird-testnet-explorer.flare.network', - }, - { - name: 'OKXChain - Mainnet', - chainID: 66, - rpcURLs: ['https://exchainrpc.okex.org', 'https://okc-mainnet.public.blastapi.io', 'https://rpc.ankr.com/okxchain'], - currency: { - symbol: 'OKT', - iconURL: iconUrlBase + 'OKT.svg', - }, - explorerURL: 'https://www.oklink.com/en/okc', - }, - { - name: 'OKXChain - Testnet', - chainID: 65, - rpcURLs: ['https://exchaintestrpc.okex.org', 'https://okc-testnet.public.blastapi.io', 'https://rpc.ankr.com/okxchain_testnet'], - currency: { - symbol: 'OKT', - iconURL: iconUrlBase + 'OKT.svg', - }, - explorerURL: 'https://www.oklink.com/en/okc-test', - }, - { - name: 'Smart Bitcoin Cash (SmartBCH) - Mainnet', - chainID: 10000, - rpcURLs: ['https://smartbch.greyh.at', 'https://rpc.smartbch.org', 'https://smartbch.fountainhead.cash/mainnet'], - currency: { - symbol: 'BCH', - iconURL: iconUrlBase + 'BCH.svg', - }, - explorerURL: 'https://www.smartscan.cash', - }, - { - name: 'Smart Bitcoin Cash (SmartBCH) - Testnet', - chainID: 10001, - rpcURLs: ['https://rpc-testnet.smartbch.org', 'https://smartbch-testnet.fountainhead.cash'], - currency: { - symbol: 'BCH', - iconURL: iconUrlBase + 'BCH.svg', - }, - explorerURL: 'https://www.smartscan.cash/testnet', - }, - { - name: 'Wanchain - Mainnet', - chainID: 888, - rpcURLs: ['https://gwan-ssl.wandevs.org:56891', 'https://wanchain-mainnet.public.blastapi.io', 'https://rpc.ankr.com/wanchain'], - currency: { - symbol: 'WAN', - iconURL: iconUrlBase + 'WAN.svg', - }, - explorerURL: 'https://www.wanscan.org', - }, - { - name: 'Wanchain - Testnet', - chainID: 999, - rpcURLs: ['https://gwan-ssl.wandevs.org:46891', 'https://wanchain-testnet.public.blastapi.io', 'https://rpc.ankr.com/wanchain_testnet'], - currency: { - symbol: 'WAN', - iconURL: iconUrlBase + 'WAN.svg', - }, - explorerURL: 'https://testnet.wanscan.org', - }, - { - name: 'Palm Network - Mainnet', - chainID: 11297108109, - rpcURLs: ['https://palm-mainnet.infura.io/v3/YOUR-PROJECT-ID', 'https://palm-mainnet.public.blastapi.io', 'https://rpc.ankr.com/palm'], - currency: { - symbol: 'PALM', - iconURL: iconUrlBase + 'PALM.svg', - }, - explorerURL: 'https://explorer.palm.io', - }, - { - name: 'Palm Network - Testnet', - chainID: 11297108099, - rpcURLs: ['https://palm-testnet.infura.io/v3/YOUR-PROJECT-ID', 'https://palm-testnet.public.blastapi.io', 'https://rpc.ankr.com/palm_testnet'], - currency: { - symbol: 'PALM', - iconURL: iconUrlBase + 'PALM.svg', - }, - explorerURL: 'https://explorer.palm.io', - }, - { - name: 'Kava EVM - Mainnet', - chainID: 2222, - rpcURLs: ['https://evm.kava.io', 'https://kava-mainnet.public.blastapi.io', 'https://rpc.ankr.com/kava'], - currency: { - symbol: 'KAVA', - iconURL: iconUrlBase + 'KAVA.svg', - }, - explorerURL: 'https://explorer.kava.io', - }, - { - name: 'Kava EVM - Testnet', - chainID: 2221, - rpcURLs: ['https://evm.testnet.kava.io', 'https://kava-testnet.public.blastapi.io', 'https://rpc.ankr.com/kava_testnet'], - currency: { - symbol: 'KAVA', - iconURL: iconUrlBase + 'KAVA.svg', - }, - explorerURL: 'https://explorer.testnet.kava.io', - }, - { - name: 'Evmos - Mainnet', - chainID: 9001, - rpcURLs: ['https://evmos-rpc.evmos.org', 'https://evmos-mainnet.public.blastapi.io', 'https://rpc.ankr.com/evmos'], - currency: { - symbol: 'EVMOS', - iconURL: iconUrlBase + 'EVMOS.svg', - }, - explorerURL: 'https://evm.evmos.org', - }, - { - name: 'Evmos - Testnet', - chainID: 9000, - rpcURLs: ['https://rpc.testnet.evmos.org', 'https://evmos-testnet.public.blastapi.io', 'https://rpc.ankr.com/evmos_testnet'], - currency: { - symbol: 'EVMOS', - iconURL: iconUrlBase + 'EVMOS.svg', - }, - explorerURL: 'https://testnet.evmos.org', - }, - { - name: 'BitTorrent Chain (BTTC) - Mainnet', - chainID: 199, - rpcURLs: ['https://rpc.bittorrentchain.io', 'https://bttc-mainnet.public.blastapi.io', 'https://rpc.ankr.com/bttc'], - currency: { - symbol: 'BTT', - iconURL: iconUrlBase + 'BTT.svg', - }, - explorerURL: 'https://bttcscan.com', - }, - { - name: 'BitTorrent Chain (BTTC) - Testnet', - chainID: 1028, - rpcURLs: ['https://test-rpc.bittorrentchain.io', 'https://bttc-testnet.public.blastapi.io', 'https://rpc.ankr.com/bttc_testnet'], - currency: { - symbol: 'BTT', - iconURL: iconUrlBase + 'BTT.svg', - }, - explorerURL: 'https://testnet.bttcscan.com', - }, - { - name: 'Edgeware - Mainnet', - chainID: 2021, - rpcURLs: ['https://mainnet1.edgewa.re', 'https://edgeware-mainnet.public.blastapi.io', 'https://rpc.ankr.com/edgeware'], - currency: { - symbol: 'EDG', - iconURL: iconUrlBase + 'EDG.svg', - }, - explorerURL: 'https://edgscan.live', - }, - { - name: 'SX Network - Mainnet', - chainID: 416, - rpcURLs: ['https://rpc.sx.technology', 'https://sx-mainnet.public.blastapi.io', 'https://rpc.ankr.com/sxnetwork'], - currency: { - symbol: 'SX', - iconURL: iconUrlBase + 'SX.svg', - }, - explorerURL: 'https://explorer.sx.technology', - }, - { - name: 'Clover Finance - Mainnet', - chainID: 1024, - rpcURLs: ['https://rpc.clover.finance', 'https://clover-mainnet.public.blastapi.io', 'https://rpc.ankr.com/clover'], - currency: { - symbol: 'CLV', - iconURL: iconUrlBase + 'CLV.svg', - }, - explorerURL: 'https://cloverexplorer.com', - }, - { - name: 'Clover Finance - Testnet', - chainID: 1234, - rpcURLs: ['https://testnet.clover.finance/rpc', 'https://rpc.ankr.com/clover_testnet'], - currency: { - symbol: 'tCLV', - iconURL: iconUrlBase + 'CLV.svg', - }, - explorerURL: 'https://testnet.cloverexplorer.com', - }, - { - name: 'Meter.io - Mainnet', - chainID: 82, - rpcURLs: ['https://rpc.meter.io', 'https://meter-mainnet.public.blastapi.io', 'https://rpc.ankr.com/meter'], - currency: { - symbol: 'MTR', - iconURL: iconUrlBase + 'MTR.svg', - }, - explorerURL: 'https://scan.meter.io', - }, - { - name: 'Ontology EVM - Mainnet', - chainID: 58, - rpcURLs: ['https://dappnode1.ont.io:10339', 'https://ont-mainnet.public.blastapi.io', 'https://rpc.ankr.com/ontology'], - currency: { - symbol: 'ONT', - iconURL: iconUrlBase + 'ONT.svg', - }, - explorerURL: 'https://explorer.ont.io', - }, - { - name: 'Elastos EVM - Mainnet', - chainID: 20, - rpcURLs: ['https://api.elastos.io/evm', 'https://elastos-mainnet.public.blastapi.io', 'https://rpc.ankr.com/elastos'], - currency: { - symbol: 'ELA', - iconURL: iconUrlBase + 'ELA.svg', - }, - explorerURL: 'https://explorer.elastos.org', - }, - { - name: 'Elastos EVM - Testnet', - chainID: 21, - rpcURLs: ['https://api-testnet.elastos.io/evm', 'https://elastos-testnet.public.blastapi.io', 'https://rpc.ankr.com/elastos_testnet'], - currency: { - symbol: 'tELA', - iconURL: iconUrlBase + 'ELA.svg', - }, - explorerURL: 'https://testnet.explorer.elastos.org', - }, - { - name: 'Godwoken (Nervos Layer 2) - Mainnet', - chainID: 71393, - rpcURLs: ['https://godwoken-mainnet-v1.ckbapp.dev', 'https://godwoken-mainnet.public.blastapi.io', 'https://rpc.ankr.com/godwoken'], - currency: { - symbol: 'CKB', - iconURL: iconUrlBase + 'CKB.svg', - }, - explorerURL: 'https://explorer.nervos.org', - }, - { - name: 'Godwoken (Nervos Layer 2) - Testnet', - chainID: 71401, - rpcURLs: ['https://godwoken-testnet-v1.ckbapp.dev', 'https://godwoken-testnet.public.blastapi.io', 'https://rpc.ankr.com/godwoken_testnet'], - currency: { - symbol: 'CKB', - iconURL: iconUrlBase + 'CKB.svg', - }, - explorerURL: 'https://explorer.testnet.nervos.org', - }, - { - name: 'REI Network - Mainnet', - chainID: 47805, - rpcURLs: ['https://rei-rpc.meter.io', 'https://rei-mainnet.public.blastapi.io', 'https://rpc.ankr.com/rei'], - currency: { - symbol: 'REI', - iconURL: iconUrlBase + 'REI.svg', - }, - explorerURL: 'https://scan.rei.network', - }, - { - name: 'REI Network - Testnet', - chainID: 47905, - rpcURLs: ['https://testnet-rpc.rei.network', 'https://rei-testnet.public.blastapi.io', 'https://rpc.ankr.com/rei_testnet'], - currency: { - symbol: 'tREI', - iconURL: iconUrlBase + 'REI.svg', - }, - explorerURL: 'https://scan-testnet.rei.network', - }, - { - name: 'Shiden Network - Mainnet', - chainID: 336, - rpcURLs: ['https://rpc.shiden.astar.network', 'https://shiden-mainnet.public.blastapi.io', 'https://rpc.ankr.com/shiden'], - currency: { - symbol: 'SDN', - iconURL: iconUrlBase + 'SDN.svg', - }, - explorerURL: 'https://shiden.subscan.io', - }, - { - name: 'Shiden Network - Shibuya Testnet', - chainID: 81, - rpcURLs: ['https://rpc.shibuya.astar.network', 'https://shibuya-testnet.public.blastapi.io', 'https://rpc.ankr.com/shibuya_testnet'], - currency: { - symbol: 'tSDN', - iconURL: iconUrlBase + 'SDN.svg', - }, - explorerURL: 'https://testnet.subscan.io/shibuya', - }, - { - name: 'Boba Network - Mainnet', - chainID: 288, - rpcURLs: ['https://mainnet.boba.network', 'https://boba-mainnet.public.blastapi.io', 'https://rpc.ankr.com/boba'], - currency: { - symbol: 'BOBA', - iconURL: iconUrlBase + 'BOBA.svg', - }, - explorerURL: 'https://blockexplorer.boba.network', - }, - { - name: 'Boba Network - Testnet', - chainID: 28, - rpcURLs: ['https://testnet.boba.network', 'https://boba-testnet.public.blastapi.io', 'https://rpc.ankr.com/boba_testnet'], - currency: { - symbol: 'BOBA', - iconURL: iconUrlBase + 'BOBA.svg', - }, - explorerURL: 'https://testnet.blockexplorer.boba.network', - }, - { - name: 'Syscoin NEVM - Mainnet', - chainID: 57, - rpcURLs: ['https://rpc.syscoin.org', 'https://syscoin-mainnet.public.blastapi.io', 'https://rpc.ankr.com/syscoin'], - currency: { - symbol: 'SYS', - iconURL: iconUrlBase + 'SYS.svg', - }, - explorerURL: 'https://explorer.syscoin.org', - }, - { - name: 'Syscoin NEVM - Testnet', - chainID: 5700, - rpcURLs: ['https://rpc.tanenbaum.io', 'https://syscoin-testnet.public.blastapi.io', 'https://rpc.ankr.com/syscoin_testnet'], - currency: { - symbol: 'tSYS', - iconURL: iconUrlBase + 'SYS.svg', - }, - explorerURL: 'https://explorer.tanenbaum.io', - }, - { - name: 'Huobi ECO Chain - Mainnet', - chainID: 128, - rpcURLs: ['https://http-mainnet.hecochain.com', 'https://heco.rpc.thirdweb.com', 'https://rpc.ankr.com/heco'], - currency: { - symbol: 'HT', - iconURL: iconUrlBase + 'HT.svg', - }, - explorerURL: 'https://hecoinfo.com', - }, - { - name: 'Huobi ECO Chain - Testnet', - chainID: 256, - rpcURLs: ['https://http-testnet.hecochain.com', 'https://testnet.heco.rpc.thirdweb.com', 'https://rpc.ankr.com/heco_testnet'], - currency: { - symbol: 'HT', - iconURL: iconUrlBase + 'HT.svg', - }, - explorerURL: 'https://testnet.hecoinfo.com', - }, - { - name: 'TomoChain - Mainnet', - chainID: 88, - rpcURLs: ['https://rpc.tomochain.com', 'https://tomochain-rpc.com'], - currency: { - symbol: 'TOMO', - iconURL: iconUrlBase + 'TOMO.svg', - }, - explorerURL: 'https://scan.tomochain.com', - }, - { - name: 'TomoChain - Testnet', - chainID: 89, - rpcURLs: ['https://rpc-testnet.tomochain.com'], - currency: { - symbol: 'tTOMO', - iconURL: iconUrlBase + 'TOMO.svg', - }, - explorerURL: 'https://scan-testnet.tomochain.com', - }, - { - name: 'Canto - Mainnet', - chainID: 7700, - rpcURLs: ['https://canto.slingshot.finance/rpc', 'https://rpc.ankr.com/canto'], - currency: { - symbol: 'CANTO', - iconURL: iconUrlBase + 'CANTO.svg', - }, - explorerURL: 'https://evm.explorer.canto.io', - }, - { - name: 'Canto - Testnet', - chainID: 740, - rpcURLs: ['https://canto-testnet-rpc.com', 'https://rpc.ankr.com/canto_testnet'], - currency: { - symbol: 'tCANTO', - iconURL: iconUrlBase + 'CANTO.svg', - }, - explorerURL: 'https://testnet.evm.explorer.canto.io', - }, - { - name: 'Canto - Kovan Testnet', - chainID: 42, - rpcURLs: ['https://kovan.canto.io/rpc', 'https://rpc.ankr.com/canto_kovan'], - currency: { - symbol: 'kCANTO', - iconURL: iconUrlBase + 'CANTO.svg', - }, - explorerURL: 'https://kovan.evm.explorer.canto.io', - }, - { - name: 'Energy Web Chain (EWC) - Mainnet', - chainID: 246, - rpcURLs: ['https://rpc.energyweb.org', 'https://mainnet.infura.io/v3/YOUR-PROJECT-ID'], - currency: { - symbol: 'EWT', - iconURL: iconUrlBase + 'EWT.svg', - }, - explorerURL: 'https://explorer.energyweb.org', - }, - { - name: 'Conflux EVM - Mainnet', - chainID: 1030, - rpcURLs: ['https://evm.confluxrpc.com', 'https://rpc.ankr.com/conflux'], - currency: { - symbol: 'CFX', - iconURL: iconUrlBase + 'CFX.svg', - }, - explorerURL: 'https://www.confluxscan.io', - }, - { - name: 'IoTeX - Mainnet', - chainID: 4689, - rpcURLs: ['https://babel-api.mainnet.iotex.io', 'https://rpc.ankr.com/iotex'], - currency: { - symbol: 'IOTX', - iconURL: iconUrlBase + 'IOTX.svg', - }, - explorerURL: 'https://iotexscan.io', - }, - { - name: 'WAX EVM - Mainnet', - chainID: 2001, - rpcURLs: ['https://waxevm-rpc.com', 'https://rpc.ankr.com/wax_evm'], - currency: { - symbol: 'WAX', - iconURL: iconUrlBase + 'WAX.svg', - }, - explorerURL: 'https://evm.explorer.wax.io', - }, - { - name: 'Polygon zkEVM - Mainnet', - chainID: 1101, - rpcURLs: ['https://polygon-zkevm.publicnode.com', 'https://rpc.ankr.com/polygon_zkevm'], - currency: { - symbol: 'MATIC', - iconURL: iconUrlBase + 'MATIC.svg', - }, - explorerURL: 'https://zkevm.polygonscan.com', - }, - { - name: 'Polygon zkEVM - Testnet', - chainID: 1442, - rpcURLs: ['https://polygon-zkevm-testnet.publicnode.com', 'https://rpc.ankr.com/polygon_zkevm_testnet'], - currency: { - symbol: 'MATIC', - iconURL: iconUrlBase + 'MATIC.svg', - }, - explorerURL: 'https://testnet.polygonscan.com', - }, - { - name: 'Scroll - Mainnet', - chainID: 534354, - rpcURLs: ['https://mainnet-rpc.scroll.io/l2', 'https://rpc.ankr.com/scroll_mainnet'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://mainnet.blockscout.scroll.io', - }, - { - name: 'Scroll - Testnet', - chainID: 534353, - rpcURLs: ['https://alpha-rpc.scroll.io/l2', 'https://rpc.ankr.com/scroll_testnet'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://blockscout.scroll.io', - }, - { - name: 'Base - Mainnet', - chainID: 84531, - rpcURLs: ['https://base-mainnet.infura.io/v3/YOUR-PROJECT-ID', 'https://rpc.base.org'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://basescan.org', - }, - { - name: 'Base - Testnet', - chainID: 84531, - rpcURLs: ['https://base-goerli.infura.io/v3/YOUR-PROJECT-ID', 'https://rpc.testnet.base.org'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://goerli.basescan.org', - }, - { - name: 'Linea - Mainnet', - chainID: 59144, - rpcURLs: ['https://rpc.linea.build', 'https://linea-rpc.ankr.com'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://explorer.linea.build', - }, - { - name: 'Linea - Testnet', - chainID: 59140, - rpcURLs: ['https://rpc.testnet.linea.build', 'https://linea-testnet-rpc.ankr.com'], - currency: { - symbol: 'ETH', - iconURL: iconUrlBase + 'ETH.svg', - }, - explorerURL: 'https://testnet.explorer.linea.build', - }, - { - name: 'Shardeum - Mainnet', - chainID: 8081, - rpcURLs: ['https://rpc.shardeum.org'], - currency: { - symbol: 'SHM', - iconURL: iconUrlBase + 'SHM.svg', - }, - explorerURL: 'https://explorer.shardeum.org', - }, - { - name: 'Shardeum - Testnet', - chainID: 8080, - rpcURLs: ['https://rpc.testnet.shardeum.org'], - currency: { - symbol: 'tSHM', - iconURL: iconUrlBase + 'SHM.svg', - }, - explorerURL: 'https://testnet.explorer.shardeum.org', - }, - { - name: 'Theta Network - Mainnet', - chainID: 361, - rpcURLs: ['https://mainnet-rpc.theta.network', 'https://theta-rpc.com'], - currency: { - symbol: 'THETA', - iconURL: iconUrlBase + 'THETA.svg', - }, - explorerURL: 'https://explorer.thetatoken.org', - }, - { - name: 'Theta Network - Testnet', - chainID: 365, - rpcURLs: ['https://testnet-rpc.theta.network', 'https://theta-testnet-rpc.com'], - currency: { - symbol: 'THETA', - iconURL: iconUrlBase + 'THETA.svg', - }, - explorerURL: 'https://testnet.explorer.thetatoken.org', - }, - { - name: 'Mantle - Mainnet', - chainID: 5001, - rpcURLs: ['https://rpc.mantle.xyz', 'https://mantle-mainnet.public.blastapi.io'], - currency: { - symbol: 'MNT', - iconURL: iconUrlBase + 'MNT.svg', - }, - explorerURL: 'https://explorer.mantle.xyz', - }, - { - name: 'Mantle - Testnet', - chainID: 5000, - rpcURLs: ['https://rpc.testnet.mantle.xyz', 'https://mantle-testnet.public.blastapi.io'], - currency: { - symbol: 'tMNT', - iconURL: iconUrlBase + 'MNT.svg', - }, - explorerURL: 'https://testnet.explorer.mantle.xyz', - }, - { - name: 'zkSpace - Mainnet', - chainID: 54321, - rpcURLs: ['https://rpc.zkspace.com', 'https://mainnet.zkspace.public.blastapi.io'], - currency: { - symbol: 'ZKS', - iconURL: iconUrlBase + 'ZKS.svg', - }, - explorerURL: 'https://explorer.zkspace.com', - }, - { - name: 'zkSpace - Testnet', - chainID: 54322, - rpcURLs: ['https://testnet-rpc.zkspace.com', 'https://testnet.zkspace.public.blastapi.io'], - currency: { - symbol: 'tZKS', - iconURL: iconUrlBase + 'ZKS.svg', - }, - explorerURL: 'https://testnet.explorer.zkspace.com', - }, - { - name: 'Taiko - Mainnet', - chainID: 167002, - rpcURLs: ['https://mainnet.taiko.xyz/rpc', 'https://taiko-mainnet.public.blastapi.io'], - currency: { - symbol: 'TAIKO', - iconURL: iconUrlBase + 'TAIKO.svg', - }, - explorerURL: 'https://explorer.taiko.xyz', - }, - { - name: 'Taiko - Testnet', - chainID: 167001, - rpcURLs: ['https://testnet.taiko.xyz/rpc', 'https://taiko-testnet.public.blastapi.io'], - currency: { - symbol: 'tTAIKO', - iconURL: iconUrlBase + 'TAIKO.svg', - }, - explorerURL: 'https://testnet.explorer.taiko.xyz', - }, - { - name: 'Constellation (Hypergraph) - Mainnet', - chainID: 421620, - rpcURLs: ['https://api.constellation.network/rpc', 'https://rpc.constellation.network'], - currency: { - symbol: 'DAG', - iconURL: iconUrlBase + 'DAG.svg', - }, - explorerURL: 'https://explorer.constellation.network', - }, - { - name: 'Constellation (Hypergraph) - Testnet', - chainID: 421620, - rpcURLs: ['https://rpc.testnet.constellation.network', 'https://constellation-testnet.public.blastapi.io'], - currency: { - symbol: 'DAG', - iconURL: iconUrlBase + 'DAG.svg', - }, - explorerURL: 'https://explorer.testnet.constellation.network', - }, - { - name: 'Clover Finance - Arbitrum - Mainnet', - chainID: 42162, - rpcURLs: ['https://clover-arbitrum.rpc.com', 'https://clover-arbitrum.public.blastapi.io'], - currency: { - symbol: 'CLV', - iconURL: iconUrlBase + 'CLV.svg', - }, - explorerURL: 'https://explorer.clover.finance/arbitrum', - }, - { - name: 'Clover Finance - Arbitrum - Testnet', - chainID: 421611, - rpcURLs: ['https://clover-arbitrum-testnet.rpc.com', 'https://clover-arbitrum-testnet.public.blastapi.io'], - currency: { - symbol: 'tCLV', - iconURL: iconUrlBase + 'CLV.svg', - }, - explorerURL: 'https://explorer.clover.finance/arbitrum/testnet', - }, - { - name: 'Zora - Mainnet', - chainID: 1337, - rpcURLs: ['https://rpc.zora.network', 'https://zora-mainnet.public.blastapi.io'], - currency: { - symbol: 'ZORA', - iconURL: iconUrlBase + 'ZORA.svg', - }, - explorerURL: 'https://explorer.zora.network', - }, - { - name: 'Zora - Testnet', - chainID: 1338, - rpcURLs: ['https://rpc.testnet.zora.network', 'https://zora-testnet.public.blastapi.io'], - currency: { - symbol: 'tZORA', - iconURL: iconUrlBase + 'ZORA.svg', - }, - explorerURL: 'https://explorer.testnet.zora.network', - }, -]); diff --git a/src/modules/org.libersoft.wallet/dialogs/AddressbookDel.svelte b/src/modules/org.libersoft.wallet/dialogs/AddressbookDel.svelte new file mode 100644 index 000000000..ecaf8370f --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/AddressbookDel.svelte @@ -0,0 +1,46 @@ + + +{#snippet question()} +
Would you like to delete this item from address book?
+
+
+ Name: + {item.name} +
+
+ Address: + {item.address} +
+{/snippet} + diff --git a/src/modules/org.libersoft.wallet/dialogs/NetworksDel.svelte b/src/modules/org.libersoft.wallet/dialogs/NetworksDel.svelte new file mode 100644 index 000000000..18cb1d168 --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/NetworksDel.svelte @@ -0,0 +1,36 @@ + + +{#snippet question()} +
Would you like to delete the network "{item.name}"?
+{/snippet} + diff --git a/src/modules/org.libersoft.wallet/dialogs/NetworksNFTsDel.svelte b/src/modules/org.libersoft.wallet/dialogs/NetworksNFTsDel.svelte new file mode 100644 index 000000000..54e54b6a4 --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/NetworksNFTsDel.svelte @@ -0,0 +1,56 @@ + + +{#snippet question()} +
Would you like to delete this NFT contract?

+ {@const nftInfo = $nftTokenMetadatas.get(nft.guid)} + {#if nftInfo?.name} +
+ Name: + {nftInfo.name} +
+ {/if} +
+ Contract Address: + {nft.contract_address || 'Unknown'} +
+ {#if nft.token_id} +
+ Token ID: + {nft.token_id} +
+ {/if} +{/snippet} + diff --git a/src/modules/org.libersoft.wallet/dialogs/NetworksTokensDel.svelte b/src/modules/org.libersoft.wallet/dialogs/NetworksTokensDel.svelte new file mode 100644 index 000000000..6a39aae6e --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/NetworksTokensDel.svelte @@ -0,0 +1,49 @@ + + +{#snippet question()} +
Would you like to delete this token?

+ {#if tokenInfo} +
+ Token: + {tokenInfo.name} ({tokenInfo.symbol}) +
+ {/if} +
+ Contract Address: + {token.contract_address || 'Unknown'} +
+{/snippet} + diff --git a/src/modules/org.libersoft.wallet/dialogs/SendConfirmation.svelte b/src/modules/org.libersoft.wallet/dialogs/SendConfirmation.svelte new file mode 100644 index 000000000..5d6fefd44 --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/SendConfirmation.svelte @@ -0,0 +1,95 @@ + + +{#snippet body()} + {#if params} +
Do you really want to send this transaction?
+
+
Address: {params.address}
+
+ Amount: + {#if loadingDecimals} + + {:else} + {@const symbol = params.contractAddress ? tokenInfo?.symbol || 'UNKNOWN' : $selectedNetwork?.currency.symbol || ''} + {@const correctDecimals = tokenDecimals || 18} + {@const amountBalance = { amount: params.amount, currency: symbol, decimals: correctDecimals }} + {formatBalance(amountBalance)} + {/if} +
+
Transaction fee: {formatBalance({ amount: params.fee, currency: $selectedNetwork?.currency.symbol || '', decimals: 18 })}
+
+ Estimated time: + {#if $transactionTimeLoading} + + {:else} + {$transactionTime} + {/if} +
+ {/if} +{/snippet} + + diff --git a/src/modules/org.libersoft.wallet/dialogs/WalletsAddressDel.svelte b/src/modules/org.libersoft.wallet/dialogs/WalletsAddressDel.svelte new file mode 100644 index 000000000..856bf42b3 --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/WalletsAddressDel.svelte @@ -0,0 +1,52 @@ + + +{#snippet question()} +
Would you like to delete this address from your wallet?
+
+ {#if wallet?.addresses?.find(a => a.index === index)} + {@const address = wallet.addresses.find(a => a.index === index)} +
+ Index: + {address?.index} +
+
+ Name: + {address?.name} +
+
+ Address: + {address?.address} +
+ {/if} +{/snippet} + diff --git a/src/modules/org.libersoft.wallet/dialogs/WalletsDel.svelte b/src/modules/org.libersoft.wallet/dialogs/WalletsDel.svelte new file mode 100644 index 000000000..3145212d3 --- /dev/null +++ b/src/modules/org.libersoft.wallet/dialogs/WalletsDel.svelte @@ -0,0 +1,36 @@ + + +{#snippet question()} +
Would you like to delete the wallet "{wallet.name}"?
+{/snippet} + diff --git a/src/modules/org.libersoft.wallet/modals/AddressbookAddEdit.svelte b/src/modules/org.libersoft.wallet/modals/AddressbookAddEdit.svelte deleted file mode 100644 index 9c92a56f1..000000000 --- a/src/modules/org.libersoft.wallet/modals/AddressbookAddEdit.svelte +++ /dev/null @@ -1,117 +0,0 @@ - - - - -
-
-
Alias:
- -
-
-
Address:
- -
- {#if error} -
-
Error:
-
{error}
-
- {/if} - {#if params.item} -
diff --git a/src/modules/org.libersoft.wallet/modals/AddressbookDel.svelte b/src/modules/org.libersoft.wallet/modals/AddressbookDel.svelte deleted file mode 100644 index 612af24a9..000000000 --- a/src/modules/org.libersoft.wallet/modals/AddressbookDel.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - - - -
Would you like to delete the item "{params.item.alias}"?
-{#if error} -
-
Error:
-
{error}
-
-{/if} - - - {#each menuItems as item} - {#if item.tab === activeTab} - {item.title} - {/if} - {/each} - - - {/if} - {#each menuItems as item} - {#if activeTab === ''} - setItem(item.tab)} /> - {/if} - {/each} -{/snippet} - -
- {@render breadcrumbs(menuItems)} -
- {#if activeTab === 'general'} - - {:else if activeTab === 'networks'} - - {:else if activeTab === 'wallets'} - - {:else if activeTab === 'address_book'} - - {/if} -
-
diff --git a/src/modules/org.libersoft.wallet/modals/Settings/SettingsAddressbook.svelte b/src/modules/org.libersoft.wallet/modals/Settings/SettingsAddressbook.svelte index 56310994d..ff773e425 100644 --- a/src/modules/org.libersoft.wallet/modals/Settings/SettingsAddressbook.svelte +++ b/src/modules/org.libersoft.wallet/modals/Settings/SettingsAddressbook.svelte @@ -1,4 +1,6 @@ @@ -73,15 +57,15 @@
-
- - - + + elModalImport?.close() }} bind:this={elModalImport} width="600px" /> + elModalExport?.close() }} bind:this={elModalExport} width="600px" /> +{#if modalItem} + +{/if} diff --git a/src/modules/org.libersoft.wallet/modals/Settings/SettingsGeneral.svelte b/src/modules/org.libersoft.wallet/modals/Settings/SettingsGeneral.svelte deleted file mode 100644 index 720e1e7a8..000000000 --- a/src/modules/org.libersoft.wallet/modals/Settings/SettingsGeneral.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - -
-
Currency conversion:
-
- -
-
diff --git a/src/modules/org.libersoft.wallet/modals/Settings/SettingsNetworks.svelte b/src/modules/org.libersoft.wallet/modals/Settings/SettingsNetworks.svelte deleted file mode 100644 index 4b2273432..000000000 --- a/src/modules/org.libersoft.wallet/modals/Settings/SettingsNetworks.svelte +++ /dev/null @@ -1,119 +0,0 @@ - - - - -
- -
- - diff --git a/src/modules/org.libersoft.wallet/modals/Settings/SettingsWallets.svelte b/src/modules/org.libersoft.wallet/modals/Settings/SettingsWallets.svelte deleted file mode 100644 index 7775bc7e8..000000000 --- a/src/modules/org.libersoft.wallet/modals/Settings/SettingsWallets.svelte +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - + + + diff --git a/src/modules/org.libersoft.wallet/windows/Settings/SettingsWalletsAddSW.svelte b/src/modules/org.libersoft.wallet/windows/Settings/SettingsWalletsAddSW.svelte new file mode 100644 index 000000000..ab8a339f7 --- /dev/null +++ b/src/modules/org.libersoft.wallet/windows/Settings/SettingsWalletsAddSW.svelte @@ -0,0 +1,279 @@ + + + + +
+ +
+{#if error} + +{/if} + +
Write down or print these 24 words, also known as seed phrase. It will serve as a backup of your wallet. Cut it into 2 parts (12 + 12 words) and hide it in 2 different places, where you don't have your devices. Never show it to anyone else!
+{#if qrCodeData && dummyQrCodeData} +
+ + {isRevealed + + {#if !isRevealed} + + {/if} +
+
Use this QR code to transfer your wallet seed phrase to your other device, never show it to anyone else!
+{/if} + +