diff --git a/.env.example b/.env.example index a55b0269..ed5031d5 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,9 @@ DATABASE_URL="" NEXT_PUBLIC_BLOCKFROST_API_KEY_MAINNET="" NEXT_PUBLIC_BLOCKFROST_API_KEY_PREPROD="" -BLOB_READ_WRITE_TOKEN="" \ No newline at end of file +BLOB_READ_WRITE_TOKEN="" + +# Pinata Configuration +PINATA_API_KEY=abcd1234efgh5678ijkl9012mnop3456qrst7890uvwx +PINATA_SECRET_API_KEY=1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef +NEXT_PUBLIC_PINATA_GATEWAY_URL=https://gateway.pinata.cloud diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 00000000..ec5dee51 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,268 @@ +# Local Server Testing Guide + +This guide will help you set up and test the server on your local device. + +## Prerequisites + +Before testing, ensure you have: + +1. **Node.js 18+** installed + ```bash + node --version # Should be 18.x or higher + ``` + +2. **PostgreSQL database** running locally or accessible + - Install PostgreSQL: https://www.postgresql.org/download/ + - Or use Docker: `docker run --name postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres` + +3. **npm** or **yarn** package manager + +## Step 1: Install Dependencies + +```bash +npm install +``` + +This will also run `postinstall` which formats and generates Prisma client. + +## Step 2: Set Up Environment Variables + +Create a `.env.local` file in the root directory with the following variables: + +```env +# Database +DATABASE_URL="postgresql://username:password@localhost:5432/multisig" + +# Blockfrost API Keys (get from https://blockfrost.io/) +NEXT_PUBLIC_BLOCKFROST_API_KEY_MAINNET="your-mainnet-api-key" +NEXT_PUBLIC_BLOCKFROST_API_KEY_PREPROD="your-preprod-api-key" + +# Vercel Blob Storage (get from https://vercel.com/dashboard) +BLOB_READ_WRITE_TOKEN="your-blob-token" + +# GitHub Token (for API access if needed) +GITHUB_TOKEN="your-github-token" + +# Optional: Skip environment validation during development +# SKIP_ENV_VALIDATION=true +``` + +### Getting API Keys: + +1. **Blockfrost API Keys**: + - Visit https://blockfrost.io/ + - Sign up for a free account + - Create projects for both Mainnet and Preprod networks + - Copy the API keys + +2. **Vercel Blob Token**: + - Visit https://vercel.com/dashboard + - Go to Storage → Blob + - Create a new blob store + - Copy the read/write token + +3. **GitHub Token** (optional): + - Visit https://github.com/settings/tokens + - Generate a new token with appropriate permissions + +## Step 3: Set Up Database + +### Option A: Using Prisma Migrate (Recommended) + +```bash +# Push schema to database +npm run db:push + +# Generate Prisma client +npm run db:generate +``` + +### Option B: Using Prisma Migrate + +```bash +# Run migrations +npm run db:migrate + +# Generate Prisma client +npm run db:generate +``` + +### Verify Database Connection + +You can use Prisma Studio to verify the database: + +```bash +npm run db:studio +``` + +This will open a browser at `http://localhost:5555` where you can view and edit your database. + +## Step 4: Start the Development Server + +```bash +npm run dev +``` + +The server should start on `http://localhost:3000` + +### Expected Output: + +``` +✓ Ready in Xms +○ Compiling / ... +✓ Compiled / in XXXms +``` + +## Step 5: Test the Server + +### 1. **Check Server Health** + +Open your browser and navigate to: +- **Main Application**: http://localhost:3000 +- **API Documentation**: http://localhost:3000/api-docs (if available) + +### 2. **Test Wallet Connection** + +1. Open http://localhost:3000 +2. Click "Connect Wallet" button +3. Select a Cardano wallet extension (Nami, Eternl, etc.) +4. Verify the connection works + +### 3. **Test API Endpoints** + +You can test API endpoints using curl or a tool like Postman: + +```bash +# Test health endpoint (if available) +curl http://localhost:3000/api/health + +# Test wallet list endpoint +curl http://localhost:3000/api/v1/walletIds +``` + +### 4. **Check Console for Errors** + +Open browser DevTools (F12) and check: +- Console tab for JavaScript errors +- Network tab for failed API requests +- Application tab for localStorage/sessionStorage issues + +## Step 6: Test Production Build (Optional) + +To test the production build locally: + +```bash +# Build the application +npm run build + +# Start production server +npm run start +``` + +The production server will also run on `http://localhost:3000` + +## Troubleshooting + +### Issue: Environment Variables Not Found + +**Error**: `Missing required environment variable: DATABASE_URL` + +**Solution**: +- Ensure `.env.local` file exists in the root directory +- Check that all required variables are set +- Restart the development server after adding variables + +### Issue: Database Connection Failed + +**Error**: `Can't reach database server` + +**Solution**: +- Verify PostgreSQL is running: `pg_isready` or check Docker container +- Check DATABASE_URL format: `postgresql://user:password@host:port/database` +- Ensure database exists: `createdb multisig` (if using PostgreSQL CLI) + +### Issue: Prisma Client Not Generated + +**Error**: `@prisma/client did not initialize yet` + +**Solution**: +```bash +npm run db:generate +``` + +### Issue: Port Already in Use + +**Error**: `Port 3000 is already in use` + +**Solution**: +- Find and kill the process: `lsof -ti:3000 | xargs kill` +- Or use a different port: `PORT=3001 npm run dev` + +### Issue: Wallet Connection Fails + +**Error**: Wallet not detected or connection fails + +**Solution**: +- Ensure you have a Cardano wallet extension installed (Nami, Eternl, etc.) +- Check browser console for errors +- Try refreshing the page +- Clear browser cache and localStorage + +### Issue: Blockfrost API Errors + +**Error**: `401 Unauthorized` or API rate limit errors + +**Solution**: +- Verify API keys are correct +- Check Blockfrost dashboard for rate limits +- Ensure you're using the correct network (mainnet vs preprod) + +## Testing Checklist + +- [ ] Dependencies installed (`npm install`) +- [ ] Environment variables configured (`.env.local`) +- [ ] Database set up and connected +- [ ] Prisma client generated +- [ ] Development server starts without errors +- [ ] Application loads in browser +- [ ] Wallet connection works +- [ ] API endpoints respond correctly +- [ ] No console errors +- [ ] Database operations work (create wallet, transaction, etc.) + +## Additional Testing Commands + +```bash +# Run linter +npm run lint + +# Run tests (if available) +npm test + +# Type check +npx tsc --noEmit + +# Format code +npx prettier --write . +``` + +## Next Steps + +Once the server is running locally: + +1. **Create a test wallet** to verify wallet creation flow +2. **Test transaction creation** to verify transaction flow +3. **Test multi-signature signing** to verify signing flow +4. **Check API documentation** at `/api-docs` (if available) +5. **Test on different networks** (Preprod vs Mainnet) + +## Getting Help + +If you encounter issues: + +1. Check the browser console for errors +2. Check the terminal output for server errors +3. Verify all environment variables are set correctly +4. Ensure database is running and accessible +5. Check the README.md for additional setup instructions + diff --git a/next.config.js b/next.config.js index 72163c56..d5bfe300 100644 --- a/next.config.js +++ b/next.config.js @@ -26,6 +26,10 @@ const config = { protocol: "https", hostname: "ipfs.io", }, + { + protocol: "https", + hostname: "*.mypinata.cloud", + }, ], }, webpack: function (config, options) { diff --git a/package-lock.json b/package-lock.json index c6149b18..43d65188 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,10 +12,10 @@ "@auth/prisma-adapter": "^1.6.0", "@hookform/resolvers": "^3.9.0", "@jinglescode/nostr-chat-plugin": "^0.0.11", - "@meshsdk/core": "^1.9.0-beta.77", - "@meshsdk/core-csl": "^1.9.0-beta.77", - "@meshsdk/core-cst": "^1.9.0-beta.77", - "@meshsdk/react": "^1.9.0-beta.77", + "@meshsdk/core": "^1.9.0-beta.86", + "@meshsdk/core-csl": "^1.9.0-beta.86", + "@meshsdk/core-cst": "^1.9.0-beta.86", + "@meshsdk/react": "^1.9.0-beta.86", "@octokit/core": "^6.1.2", "@prisma/client": "^6.17.1", "@radix-ui/react-accordion": "^1.2.0", @@ -43,6 +43,7 @@ "@trpc/react-query": "^11.0.0-rc.446", "@trpc/server": "^11.0.0-rc.446", "@vercel/blob": "^0.23.4", + "blakejs": "^1.2.1", "busboy": "^1.6.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -430,8 +431,6 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -659,15 +658,10 @@ }, "node_modules/@basementuniverse/commonjs": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@basementuniverse/commonjs/-/commonjs-1.2.10.tgz", - "integrity": "sha512-hmqEAGVCdsyQWJ5PwweFegOZ19gBm5Ppw48/l8mOexcjubyuhmgRt6SB8BoLF9C4lzRemG816hH77w7hJRrDMA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "license": "MIT" }, "node_modules/@basementuniverse/marble-identicons": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@basementuniverse/marble-identicons/-/marble-identicons-0.1.2.tgz", - "integrity": "sha512-Z9w8lp4hwy3zwtl+ldVtN+Vr9BkD/NJCJZWLDjiWYLIkMPglhqUDy8ffXNDAB35UmKj7p/X+LKtSr+ApbMYhLA==", "license": "MIT", "dependencies": { "@basementuniverse/commonjs": "^1.2.10", @@ -681,8 +675,6 @@ }, "node_modules/@biglup/is-cid": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@biglup/is-cid/-/is-cid-1.0.3.tgz", - "integrity": "sha512-R0XPZ/IQhU2TtetSFI9vI+7kJOJYNiCncn5ixEBW+/LNaZCo2HK37Mq3pRNzrM4FryuAkyeqY7Ujmj3I3e3t9g==", "license": "Apache-2.0", "dependencies": { "@multiformats/mafmt": "^12.1.6", @@ -698,8 +690,6 @@ }, "node_modules/@bitcoin-js/tiny-secp256k1-asmjs": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@bitcoin-js/tiny-secp256k1-asmjs/-/tiny-secp256k1-asmjs-2.2.4.tgz", - "integrity": "sha512-Lo62disBIDwPrYAmMsSjEmqak41yb0OFGQVLdktXmcQLgtC1BI5Sd1eHSxNREKZmxMUXevtsgEhGB1DvvatRmQ==", "license": "MIT", "dependencies": { "uint8array-tools": "0.0.7" @@ -710,14 +700,10 @@ }, "node_modules/@bufbuild/protobuf": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.1.tgz", - "integrity": "sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==", "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@cardano-ogmios/client": { "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@cardano-ogmios/client/-/client-6.9.0.tgz", - "integrity": "sha512-IsoUVsaMXiYyhWrdVKYOA5PDlX0EZ2gaq4lfk4JelRw6mcWVxemUrMaU2ndvugO9LQ3SCM1nESPgMIU0xe5FWw==", "license": "MPL-2.0", "dependencies": { "@cardano-ogmios/schema": "6.9.0", @@ -737,8 +723,6 @@ }, "node_modules/@cardano-ogmios/schema": { "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@cardano-ogmios/schema/-/schema-6.9.0.tgz", - "integrity": "sha512-e7QVLF+dQMIv9p+p5CWQjMfBmkERYRa2wK2AjyehQZCJnecZ0gvTbRqewdX5VW4mVXf6KUfFyphsxWK46Pg6LA==", "license": "MPL-2.0", "engines": { "node": ">=14" @@ -746,8 +730,6 @@ }, "node_modules/@cardano-sdk/core": { "version": "0.45.10", - "resolved": "https://registry.npmjs.org/@cardano-sdk/core/-/core-0.45.10.tgz", - "integrity": "sha512-PU/onQuPgsy0CtFKDlHcozGHMTHrigWztTmKq54tL0TdWRcClXbMh5Q63ALcP388ZouPC1nKomOAooVgyrrEfw==", "license": "Apache-2.0", "dependencies": { "@biglup/is-cid": "^1.0.3", @@ -778,8 +760,6 @@ }, "node_modules/@cardano-sdk/core/node_modules/@cardano-sdk/util": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@cardano-sdk/util/-/util-0.16.0.tgz", - "integrity": "sha512-f0tfX8oiauqAFCyyc/o2Ouezyk83QD4zqLl4DUjZNyCtITL8gBHh25Bkw7RUCGEZ+hf6Qms1n0ui0j3wVY7zRg==", "license": "Apache-2.0", "dependencies": { "bech32": "^2.0.0", @@ -795,8 +775,6 @@ }, "node_modules/@cardano-sdk/crypto": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@cardano-sdk/crypto/-/crypto-0.2.3.tgz", - "integrity": "sha512-jTl8rbocV1XO5DBR6+lGY6Owc/bP+wBg5eO3PttTeKhx/J7o99pyuTa5H36a/XTJwqDwKIXV922QxZR+rfjVbA==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/util": "~0.16.0", @@ -831,8 +809,6 @@ }, "node_modules/@cardano-sdk/crypto/node_modules/@cardano-sdk/util": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@cardano-sdk/util/-/util-0.16.0.tgz", - "integrity": "sha512-f0tfX8oiauqAFCyyc/o2Ouezyk83QD4zqLl4DUjZNyCtITL8gBHh25Bkw7RUCGEZ+hf6Qms1n0ui0j3wVY7zRg==", "license": "Apache-2.0", "dependencies": { "bech32": "^2.0.0", @@ -848,8 +824,6 @@ }, "node_modules/@cardano-sdk/dapp-connector": { "version": "0.13.24", - "resolved": "https://registry.npmjs.org/@cardano-sdk/dapp-connector/-/dapp-connector-0.13.24.tgz", - "integrity": "sha512-sgUko8wpLT1iF0ySeSIJIn5f696iuj6TC7E+0CmPApcGy+gpY5ECNRgXx8vus2Cq15EuE/Jtxe6on+9HJX90uw==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "~0.46.10", @@ -865,8 +839,6 @@ }, "node_modules/@cardano-sdk/dapp-connector/node_modules/@cardano-sdk/core": { "version": "0.46.10", - "resolved": "https://registry.npmjs.org/@cardano-sdk/core/-/core-0.46.10.tgz", - "integrity": "sha512-QgEg8EHbGrbGmVfHhkJAG3GLrgReJXr0K7SM/HjhgbvWJDIz3NRrgS3k2NWk7BmaElT4hQX7HFokMaKoV2WeYQ==", "license": "Apache-2.0", "dependencies": { "@biglup/is-cid": "^1.0.3", @@ -897,8 +869,6 @@ }, "node_modules/@cardano-sdk/dapp-connector/node_modules/@cardano-sdk/crypto": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@cardano-sdk/crypto/-/crypto-0.4.4.tgz", - "integrity": "sha512-jvElFox4TPlTZRtjfw0HlkucRD90EeijfhMT0uD0N6ptkn8sRQXUFO+z+1Zcp9v9L2V324N7+2ThpjjBEoUdXQ==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/util": "~0.17.1", @@ -932,8 +902,6 @@ }, "node_modules/@cardano-sdk/dapp-connector/node_modules/@cardano-sdk/util": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@cardano-sdk/util/-/util-0.17.1.tgz", - "integrity": "sha512-TCYe+wRguW1WgRlbWqhGPhcSBkzVzdIcCVgDDN7wiQk2dew0EWVqjsKeqDZdfwzy/s2kr/ZOgXIGywBn/Bzu/Q==", "license": "Apache-2.0", "dependencies": { "bech32": "^2.0.0", @@ -948,8 +916,6 @@ }, "node_modules/@cardano-sdk/input-selection": { "version": "0.13.34", - "resolved": "https://registry.npmjs.org/@cardano-sdk/input-selection/-/input-selection-0.13.34.tgz", - "integrity": "sha512-/AidYTF9WesLoMc4PHoETxXgrfYEq8GECcikjvLwx1mygmKpok4Lp41Aio7sBasUCLvZ82/yTd3uXIAvec1aCA==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "~0.43.0", @@ -965,8 +931,6 @@ }, "node_modules/@cardano-sdk/input-selection/node_modules/@cardano-sdk/core": { "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@cardano-sdk/core/-/core-0.43.0.tgz", - "integrity": "sha512-hPnZXjObJub0eXV2dDAG2/gEg/vw092RZ1VGMZfBSqavz18Tg/K6jGQ3cOpWZ9d+MqFzZTCB+s5ctdRkYt3idA==", "license": "Apache-2.0", "dependencies": { "@biglup/is-cid": "^1.0.3", @@ -997,8 +961,6 @@ }, "node_modules/@cardano-sdk/input-selection/node_modules/@cardano-sdk/crypto": { "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@cardano-sdk/crypto/-/crypto-0.1.32.tgz", - "integrity": "sha512-RCKFvkzD32QpKQ0jULADVRNmfBNkCwiZl2nlFbkZ3aCrfIex+6/2CizoagJ161fA7lL5/HGuzWfjOg3GX2ax6w==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/util": "~0.15.5", @@ -1033,8 +995,6 @@ }, "node_modules/@cardano-sdk/key-management": { "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@cardano-sdk/key-management/-/key-management-0.25.1.tgz", - "integrity": "sha512-D99XTIplI2aQnCZtVUKZdmH9wZJQC2WuZL6hTqGZHHFBAeju2zBzGWT21LlcPRlT0/2DP2/OdfIHoHCr2ORp4g==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "~0.43.0", @@ -1057,8 +1017,6 @@ }, "node_modules/@cardano-sdk/key-management/node_modules/@cardano-sdk/core": { "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@cardano-sdk/core/-/core-0.43.0.tgz", - "integrity": "sha512-hPnZXjObJub0eXV2dDAG2/gEg/vw092RZ1VGMZfBSqavz18Tg/K6jGQ3cOpWZ9d+MqFzZTCB+s5ctdRkYt3idA==", "license": "Apache-2.0", "dependencies": { "@biglup/is-cid": "^1.0.3", @@ -1089,8 +1047,6 @@ }, "node_modules/@cardano-sdk/key-management/node_modules/@cardano-sdk/crypto": { "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@cardano-sdk/crypto/-/crypto-0.1.32.tgz", - "integrity": "sha512-RCKFvkzD32QpKQ0jULADVRNmfBNkCwiZl2nlFbkZ3aCrfIex+6/2CizoagJ161fA7lL5/HGuzWfjOg3GX2ax6w==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/util": "~0.15.5", @@ -1125,8 +1081,6 @@ }, "node_modules/@cardano-sdk/util": { "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@cardano-sdk/util/-/util-0.15.7.tgz", - "integrity": "sha512-L0f3gXFujRwSSpjzq2W/OwW23fg0gw5S+9R+91He3LgmyfjNygd939eFPCLhwOscsHcJ4AN27UJSYnx3JMKZ0w==", "license": "Apache-2.0", "dependencies": { "bech32": "^2.0.0", @@ -1142,8 +1096,6 @@ }, "node_modules/@cardanosolutions/json-bigint": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cardanosolutions/json-bigint/-/json-bigint-1.0.2.tgz", - "integrity": "sha512-hRgKDFRR5zW6vv6KoymE1PuhKk8hxA/F5YsH37ghIFIYnWAMbVoQ7xRKAT5AEy9HrqWM6HxNQLIZ3r3omg96/w==", "license": "MIT", "dependencies": { "bignumber.js": "^9.3.1" @@ -1151,14 +1103,10 @@ }, "node_modules/@chainsafe/is-ip": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.1.0.tgz", - "integrity": "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==", "license": "MIT" }, "node_modules/@chainsafe/netmask": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", - "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", "license": "MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1" @@ -1166,8 +1114,6 @@ }, "node_modules/@connectrpc/connect": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.4.0.tgz", - "integrity": "sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA==", "license": "Apache-2.0", "peerDependencies": { "@bufbuild/protobuf": "^1.4.2" @@ -1175,8 +1121,6 @@ }, "node_modules/@connectrpc/connect-node": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect-node/-/connect-node-1.4.0.tgz", - "integrity": "sha512-0ANnrr6SvsjevsWEgdzHy7BaHkluZyS6s4xNoVt7RBHFR5V/kT9lPokoIbYUOU9JHzdRgTaS3x5595mwUsu15g==", "license": "Apache-2.0", "dependencies": { "undici": "^5.28.3" @@ -1191,8 +1135,6 @@ }, "node_modules/@connectrpc/connect-web": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect-web/-/connect-web-1.4.0.tgz", - "integrity": "sha512-13aO4psFbbm7rdOFGV0De2Za64DY/acMspgloDlcOKzLPPs0yZkhp1OOzAQeiAIr7BM/VOHIA3p8mF0inxCYTA==", "license": "Apache-2.0", "peerDependencies": { "@bufbuild/protobuf": "^1.4.2", @@ -1211,20 +1153,8 @@ "node": ">=14.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz", - "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emurgo/cardano-message-signing-nodejs": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emurgo/cardano-message-signing-nodejs/-/cardano-message-signing-nodejs-1.1.0.tgz", - "integrity": "sha512-PQRc8K8wZshEdmQenNUzVtiI8oJNF/1uAnBhidee5C4o1l2mDLOW+ur46HWHIFKQ6x8mSJTllcjMscHgzju0gQ==", "license": "MIT" }, "node_modules/@esbuild/darwin-arm64": { @@ -1345,8 +1275,6 @@ }, "node_modules/@fabianbormann/cardano-peer-connect": { "version": "1.2.18", - "resolved": "https://registry.npmjs.org/@fabianbormann/cardano-peer-connect/-/cardano-peer-connect-1.2.18.tgz", - "integrity": "sha512-eyVVMlThkURTsHFJDww253Mk+IzCR2yRYaepyomyqu9HWu2/N8qqC98vNksAbAQ12AzQs7ElwwRgT9HggOuhcw==", "license": "Apache-2.0", "dependencies": { "@basementuniverse/marble-identicons": "^0.1.2", @@ -1356,8 +1284,6 @@ }, "node_modules/@fabianbormann/meerkat": { "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@fabianbormann/meerkat/-/meerkat-1.0.17.tgz", - "integrity": "sha512-sRPTwXJbZX/+CmLAYjewvEuOllzmvWONNKSqzrUbW427JfYPypIcJumJoZ0CMbmj9fBJkVTprihu2qrdN/atMA==", "license": "Apache-2.0", "dependencies": { "@babel/plugin-syntax-dynamic-import": "^7.8.3", @@ -1409,14 +1335,10 @@ }, "node_modules/@foxglove/crc": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@foxglove/crc/-/crc-0.0.3.tgz", - "integrity": "sha512-DjIZsnL3CyP/yQ/vUYA9cjrD0a/8YXejI5ZmsaOiT16cLfZcTwaCxIN01/ys4jsy+dZCQ/9DnWFn7AEFbiMDaA==", "license": "MIT" }, "node_modules/@harmoniclabs/bigint-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/bigint-utils/-/bigint-utils-1.0.0.tgz", - "integrity": "sha512-OhZMHcdtH2hHKMlxWFHf71PmKHdoi9ARpjS9mUu0/cd8VWDDjT7VQoQwC5NN/68iyO4O5Dojrvrp9tjG5BDABA==", "license": "Apache-2.0", "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" @@ -1424,14 +1346,10 @@ }, "node_modules/@harmoniclabs/biguint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/biguint/-/biguint-1.0.0.tgz", - "integrity": "sha512-5DyCIBDL4W+7ffR1IJSbGrCG4xEYxAlFH5gCNF42qtyL5ltwZ92Ae1MyXpHM2TUPy7ocSTqlLUsOdy+SvqVVPw==", "license": "Apache-2.0" }, "node_modules/@harmoniclabs/bitstream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/bitstream/-/bitstream-1.0.0.tgz", - "integrity": "sha512-Ed/I46IuCiytE5QiMmmUo9kPJcypM7OuUqoRaAXUALL5C6LKLpT6kYE1qeuhLkx2/WvkHT18jcOX6jhM/nmqoA==", "license": "MIT", "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" @@ -1439,8 +1357,6 @@ }, "node_modules/@harmoniclabs/bytestring": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/bytestring/-/bytestring-1.0.0.tgz", - "integrity": "sha512-d5m10O0okKc6QNX0pSRriFTkk/kNMnMBGbo5X3kEZwKaXTI4tDVoTZBL7bwbYHwOEdSxWJjVtlO9xtB7ZrYZNg==", "license": "Apache-2.0", "dependencies": { "@harmoniclabs/uint8array-utils": "^1.0.0" @@ -1448,9 +1364,6 @@ }, "node_modules/@harmoniclabs/cbor": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/cbor/-/cbor-1.3.0.tgz", - "integrity": "sha512-gzRqqcJL8sulc2/6iqRXZdWUCEeK3A+jwJ88sbVNzgk4IeMFQLSFg4Ck8ZBETu/W/q1zdknjNfJYyH1OxVriQA==", - "deprecated": "update to 1.6.0", "license": "Apache-2.0", "dependencies": { "@harmoniclabs/bytestring": "^1.0.0", @@ -1463,8 +1376,6 @@ }, "node_modules/@harmoniclabs/crypto": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@harmoniclabs/crypto/-/crypto-0.2.5.tgz", - "integrity": "sha512-t2saWMFWBx8tOHotiYTTfQKhPGpWT4AMLXxq3u0apShVXNV0vgL0gEgSMudBjES/wrKByCqa2xmU70gadz26hA==", "license": "MIT", "dependencies": { "@harmoniclabs/bitstream": "^1.0.0", @@ -1473,20 +1384,14 @@ }, "node_modules/@harmoniclabs/obj-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/obj-utils/-/obj-utils-1.0.0.tgz", - "integrity": "sha512-EO1bQBZAORrutcP+leP5YNDwNd/9TOE23VEvs3ktniXg6w0knUrLjUIl2Pkcbs/D1VQxqmsNpXho+vaMj00qxA==", "license": "MIT" }, "node_modules/@harmoniclabs/pair": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@harmoniclabs/pair/-/pair-1.0.0.tgz", - "integrity": "sha512-D9OBowsUsy1LctHxWzd9AngTzoo5x3rBiJ0gu579t41Q23pb+VNx1euEfluUEiaYbgljcl1lb/4D1fFTZd1tRQ==", "license": "MIT" }, "node_modules/@harmoniclabs/plutus-data": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@harmoniclabs/plutus-data/-/plutus-data-1.2.4.tgz", - "integrity": "sha512-cpr6AnJRultH6PJRDriewHEgNLQs2IGLampZrLjmK5shzTsHICD0yD0Zig9eKdcS7dmY6mlzvSpAJWPGeTxbCA==", "license": "Apache-2.0", "dependencies": { "@harmoniclabs/biguint": "^1.0.0", @@ -1500,14 +1405,10 @@ }, "node_modules/@harmoniclabs/uint8array-utils": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@harmoniclabs/uint8array-utils/-/uint8array-utils-1.0.4.tgz", - "integrity": "sha512-Z454prSbX4geXGHyjjcn9vm6u9NsD3VJykv8f8yE1VjIXSPitaLPEnm8u2+B+GMp1chYlLilOq+kW4OvJ6y28A==", "license": "Apache-2.0" }, "node_modules/@harmoniclabs/uplc": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@harmoniclabs/uplc/-/uplc-1.2.4.tgz", - "integrity": "sha512-Px6utj94cO/hQd9NJgVQI8zycsbgh3rAzDeLdZ1m52bo++EuU1GL+arWX3JYso3/3uNrnUFuizjrAIISwQe3Fg==", "license": "Apache-2.0", "dependencies": { "@harmoniclabs/bigint-utils": "^1.0.0", @@ -1584,8 +1485,6 @@ }, "node_modules/@img/colour": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", "license": "MIT", "optional": true, "engines": { @@ -1594,8 +1493,6 @@ }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", - "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", "cpu": [ "arm64" ], @@ -1614,32 +1511,8 @@ "@img/sharp-libvips-darwin-arm64": "1.2.3" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", - "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.3" - } - }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", "cpu": [ "arm64" ], @@ -1652,364 +1525,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", - "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", - "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", - "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", - "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", - "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", - "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", - "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", - "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", - "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", - "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", - "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", - "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", - "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", - "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", - "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.5.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", - "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", - "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", - "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "license": "ISC", @@ -2588,8 +2103,6 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, "node_modules/@mediapipe/tasks-vision": { @@ -2597,9 +2110,9 @@ "license": "Apache-2.0" }, "node_modules/@meshsdk/bitcoin": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/bitcoin/-/bitcoin-1.9.0-beta.83.tgz", - "integrity": "sha512-zKY+6liYizOm/afgqPdfqdlkpf90K9t07o1fsWp51s88llEasnppjbYb4jdKKxhaOqsQlJMGEZAAloMFkSSaGA==", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/bitcoin/-/bitcoin-1.9.0-beta.86.tgz", + "integrity": "sha512-Vby34TGK+Glzp1uhEKER58EFAc7v0xc3jSHcmaza+yVdivfec88cyUxgLvI9ra/VQU6DOdvSR/KxPavOrbSK5Q==", "dependencies": { "@bitcoin-js/tiny-secp256k1-asmjs": "^2.2.3", "bip174": "^3.0.0", @@ -2610,10 +2123,9 @@ } }, "node_modules/@meshsdk/common": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/common/-/common-1.9.0-beta.83.tgz", - "integrity": "sha512-eoOaCqrxUtzJ25ZKo6mKQ33T+rR2DFv+BF6wwsZEsQzdvQjMxUKxk5WB9ix/Ow0NuEsUSSX1u6HhZnQkBfYCnw==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/common/-/common-1.9.0-beta.86.tgz", + "integrity": "sha512-7z3888D8aFAWOdoLg4vX9CS0u6iN1Rmd8V7iEZp/KMyRCvMobB3ppvnJh3h5djK4wtsCTIOTM24rv4uUDeHbqw==", "dependencies": { "bech32": "^2.0.0", "bip39": "3.1.0", @@ -2622,26 +2134,24 @@ } }, "node_modules/@meshsdk/core": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/core/-/core-1.9.0-beta.83.tgz", - "integrity": "sha512-eCMvwpCo7lpBpIP5FaIazp0yeLhPSU9w2FFERmuo/jHBEiY/IWKv0I47Fa0Ygi78BCIHeRAZ9SDrlyVqvPk6kw==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/core/-/core-1.9.0-beta.86.tgz", + "integrity": "sha512-e2eBaOY40B/5+lXvGMyuzgvg9ce9yCMF1ng0EsnoCN0VftZpaotleuRo4D6H+TCwrpnGA/zOD21JL13DHk1x/w==", "dependencies": { - "@meshsdk/common": "1.9.0-beta.83", - "@meshsdk/core-cst": "1.9.0-beta.83", - "@meshsdk/provider": "1.9.0-beta.83", - "@meshsdk/react": "1.9.0-beta.83", - "@meshsdk/transaction": "1.9.0-beta.83", - "@meshsdk/wallet": "1.9.0-beta.83" + "@meshsdk/common": "1.9.0-beta.86", + "@meshsdk/core-cst": "1.9.0-beta.86", + "@meshsdk/provider": "1.9.0-beta.86", + "@meshsdk/react": "1.9.0-beta.86", + "@meshsdk/transaction": "1.9.0-beta.86", + "@meshsdk/wallet": "1.9.0-beta.86" } }, "node_modules/@meshsdk/core-csl": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/core-csl/-/core-csl-1.9.0-beta.83.tgz", - "integrity": "sha512-9lMVvSpP8Mg7MoQ7fg0eY28oJTSlqig33OGMWRovbsvX0re1S4xx8HIZzA86PTyINY3m71/HV2o/dZ3gPnT50g==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/core-csl/-/core-csl-1.9.0-beta.86.tgz", + "integrity": "sha512-xjOYMpVLXTr6rNip9s+asqXPoMZul+aJ7ZXqQwA1HtSMnNLyH+3YRnJ8PnOMfaluzMYhH4Z4xZ7yP8A/FTYiMw==", "dependencies": { - "@meshsdk/common": "1.9.0-beta.83", + "@meshsdk/common": "1.9.0-beta.86", "@sidan-lab/whisky-js-browser": "^1.0.11", "@sidan-lab/whisky-js-nodejs": "^1.0.11", "@types/base32-encoding": "^1.0.2", @@ -2651,10 +2161,9 @@ } }, "node_modules/@meshsdk/core-cst": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/core-cst/-/core-cst-1.9.0-beta.83.tgz", - "integrity": "sha512-4BflalwqS+gfE9I0Wi6ZkkSsZWEESXKqbmYSgHMzK3EHZ6pA/KVp7MFJ3Nf3ctZXu9YmelWI2rA7gNrWJxU74A==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/core-cst/-/core-cst-1.9.0-beta.86.tgz", + "integrity": "sha512-9liWUooR2ogGNod1kaRtIkSNuVpLV5mbNRaNBYRkWa1x0rBoVrnpd/iexWORkvPUIh10RpzcCpGMK0fOOP8Lwg==", "dependencies": { "@cardano-sdk/core": "^0.45.5", "@cardano-sdk/crypto": "^0.2.2", @@ -2664,7 +2173,7 @@ "@harmoniclabs/pair": "^1.0.0", "@harmoniclabs/plutus-data": "1.2.4", "@harmoniclabs/uplc": "1.2.4", - "@meshsdk/common": "1.9.0-beta.83", + "@meshsdk/common": "1.9.0-beta.86", "@types/base32-encoding": "^1.0.2", "base32-encoding": "^1.0.0", "bech32": "^2.0.0", @@ -2673,14 +2182,13 @@ } }, "node_modules/@meshsdk/provider": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/provider/-/provider-1.9.0-beta.83.tgz", - "integrity": "sha512-UipX6IDalkqrq+yYoM7wFXHlDSVyAOChrMeM3b8FNZgnXYWcBFFCe+fgKQpxwGK0fOy6kIKWPs5jDccZydGNKA==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/provider/-/provider-1.9.0-beta.86.tgz", + "integrity": "sha512-wjDdCbQXExXvm4w6gPkoKafDewji7Ol6q+jLV5be64eJ4Yu1q1r1OL1j4I0mzdZj1NK9tJooHRVpfhDKIY1+dg==", "dependencies": { - "@meshsdk/bitcoin": "1.9.0-beta.83", - "@meshsdk/common": "1.9.0-beta.83", - "@meshsdk/core-cst": "1.9.0-beta.83", + "@meshsdk/bitcoin": "1.9.0-beta.86", + "@meshsdk/common": "1.9.0-beta.86", + "@meshsdk/core-cst": "1.9.0-beta.86", "@utxorpc/sdk": "^0.6.7", "@utxorpc/spec": "^0.16.0", "axios": "^1.7.2", @@ -2688,16 +2196,15 @@ } }, "node_modules/@meshsdk/react": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/react/-/react-1.9.0-beta.83.tgz", - "integrity": "sha512-9M2BM3nX4spHA6hSdDQt+NptI3PXJePl5hIVA8GNcj8i8eOJIYPFwP42wL7Ee202uuVQ9boWeAcEDpVl3JKotQ==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/react/-/react-1.9.0-beta.86.tgz", + "integrity": "sha512-eM64bWypnM4dWrC0aBtIUblY5QZaaAwGxFEEdTtJ4Dyq3eyWd2FT1NIMqtbd15EYWgF9IeR87VSefbPlLfoziA==", "dependencies": { "@fabianbormann/cardano-peer-connect": "^1.2.18", - "@meshsdk/bitcoin": "1.9.0-beta.83", - "@meshsdk/common": "1.9.0-beta.83", - "@meshsdk/transaction": "1.9.0-beta.83", - "@meshsdk/wallet": "1.9.0-beta.83", + "@meshsdk/bitcoin": "1.9.0-beta.86", + "@meshsdk/common": "1.9.0-beta.86", + "@meshsdk/transaction": "1.9.0-beta.86", + "@meshsdk/wallet": "1.9.0-beta.86", "@meshsdk/web3-sdk": "0.0.50", "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.2", @@ -2714,41 +2221,36 @@ } }, "node_modules/@meshsdk/transaction": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/transaction/-/transaction-1.9.0-beta.83.tgz", - "integrity": "sha512-B7zIjJT/v5IfyPvY1+peeo8mPgIWASbEi3bjX03iusVpixoESRb1ZAompsEJiJJDn/Q2hSVX9mqH+WTWoUFkgQ==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/transaction/-/transaction-1.9.0-beta.86.tgz", + "integrity": "sha512-hVPl7Z6vGR5Jk/REsdBwL0hoNn81ee6WE2J3kCCgv4uTi9kVIrv9b51qliCdTGOrPe9Z8SEFjVzRfLnTjuPe4g==", "dependencies": { "@cardano-sdk/core": "^0.45.5", "@cardano-sdk/input-selection": "^0.13.33", "@cardano-sdk/util": "^0.15.5", - "@meshsdk/common": "1.9.0-beta.83", - "@meshsdk/core-cst": "1.9.0-beta.83", + "@meshsdk/common": "1.9.0-beta.86", + "@meshsdk/core-cst": "1.9.0-beta.86", "json-bigint": "^1.0.0" } }, "node_modules/@meshsdk/wallet": { - "version": "1.9.0-beta.83", - "resolved": "https://registry.npmjs.org/@meshsdk/wallet/-/wallet-1.9.0-beta.83.tgz", - "integrity": "sha512-F02jZP0QE3UzABn/D5k+A6MXwH9DMYVkNSmiSbcEV7ZDLMQ0fdMpOU+MlyCgd8yCOlDM/Nxdk8oI/PaTrV6aYw==", - "license": "Apache-2.0", + "version": "1.9.0-beta.86", + "resolved": "https://registry.npmjs.org/@meshsdk/wallet/-/wallet-1.9.0-beta.86.tgz", + "integrity": "sha512-6vu3k4D6BBFYgYR+JV4b/eJjK2vuRic1SB7XuwIDhQg+QCtsnNrGWusyjCQYBzm0WGy/Esg3J77lDcckodqzpg==", "dependencies": { - "@meshsdk/common": "1.9.0-beta.83", - "@meshsdk/core-cst": "1.9.0-beta.83", - "@meshsdk/transaction": "1.9.0-beta.83", + "@meshsdk/common": "1.9.0-beta.86", + "@meshsdk/core-cst": "1.9.0-beta.86", + "@meshsdk/transaction": "1.9.0-beta.86", "@simplewebauthn/browser": "^13.0.0" } }, "node_modules/@meshsdk/wallet/node_modules/@simplewebauthn/browser": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-13.2.2.tgz", - "integrity": "sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==", - "license": "MIT" + "integrity": "sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==" }, "node_modules/@meshsdk/web3-sdk": { "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@meshsdk/web3-sdk/-/web3-sdk-0.0.50.tgz", - "integrity": "sha512-mBEdwGJNCJgUfl/VXDicGMe8duqzrNCNEiEgkSRy795JhXrppl9ARPb64P6AkryZ5DxRRjMqZyVNXQRv9fIITQ==", "license": "Apache-2.0", "dependencies": { "@meshsdk/bitcoin": "1.9.0-beta.68", @@ -2764,8 +2266,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/bitcoin": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/bitcoin/-/bitcoin-1.9.0-beta.68.tgz", - "integrity": "sha512-Ni050tWpSR9GABYVgoB/3tOtINJElg8+A4BWsqU0Ez/HK0AJBxLj+/gKAwzIAsOw0utcxd7mgADFUjXZU+oDlQ==", "dependencies": { "@bitcoin-js/tiny-secp256k1-asmjs": "^2.2.3", "bip174": "^3.0.0-rc.1", @@ -2777,8 +2277,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/common": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/common/-/common-1.9.0-beta.68.tgz", - "integrity": "sha512-rmL2uZzSTEW52OYNCdRF1mBdL4pXLcMwjNZrK3Np/6E1zl2to0pArMfuc2bUl5urTIDfTqa2CsuWpgzZQ47N6Q==", "license": "Apache-2.0", "dependencies": { "bech32": "^2.0.0", @@ -2789,8 +2287,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/core": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/core/-/core-1.9.0-beta.68.tgz", - "integrity": "sha512-/1ul9u+WDGylfICcX0Kj1FIDjH4lYyvDae3xmo+X/0DLXDCC9FwgWtpxIyJYXWJUTlsVfjvdqeLbPUeeQEniSw==", "license": "Apache-2.0", "dependencies": { "@meshsdk/common": "1.9.0-beta.68", @@ -2803,8 +2299,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/core-cst": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/core-cst/-/core-cst-1.9.0-beta.68.tgz", - "integrity": "sha512-7KXr9k+Cpg/g2Fwj/opwHl6/yw5fkPxDXe0yCBuX3IeOSwM1lfjaENVdBGUtxz+opkbg+0a8RyPt3wKQG+tiJA==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "^0.45.5", @@ -2825,8 +2319,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/provider": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/provider/-/provider-1.9.0-beta.68.tgz", - "integrity": "sha512-FzcPet8fDBT37CNc2cD/iYGhYsHar6E1dQtt/p2P+DGqnKd7IYp7L6T98fbEBzrJJZI8S0BuhLmRSdAQ0OTqSg==", "license": "Apache-2.0", "dependencies": { "@meshsdk/common": "1.9.0-beta.68", @@ -2839,8 +2331,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/react": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/react/-/react-1.9.0-beta.68.tgz", - "integrity": "sha512-6LPeyj8qChVBpE+ulBah/WS2N5loLpxnrvYFQ6i4po0kRpLDta13jxF7qE4lQ00olsU5qnjEh5KOCbnhhCxSmw==", "license": "Apache-2.0", "dependencies": { "@fabianbormann/cardano-peer-connect": "^1.2.18", @@ -2865,8 +2355,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/transaction": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/transaction/-/transaction-1.9.0-beta.68.tgz", - "integrity": "sha512-FsVKqtCyAGrk3IRzEKIr4R6SNYFEGClwCPzM6LlfuC1z97lScM7yP9FgwkOMe4ZPXn4BS32i62X7EdQVIaQwMg==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "^0.45.5", @@ -2879,8 +2367,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/wallet": { "version": "1.9.0-beta.68", - "resolved": "https://registry.npmjs.org/@meshsdk/wallet/-/wallet-1.9.0-beta.68.tgz", - "integrity": "sha512-7rxU2MD4cDYDoS6soIOqeS+2HVW8ONm/j11+sgoMvLiUbPCpfogWLGLklRKxvZhgzAipUKbPNjak24AoD0Tq6g==", "license": "Apache-2.0", "dependencies": { "@meshsdk/common": "1.9.0-beta.68", @@ -2891,8 +2377,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/web3-sdk": { "version": "0.0.37", - "resolved": "https://registry.npmjs.org/@meshsdk/web3-sdk/-/web3-sdk-0.0.37.tgz", - "integrity": "sha512-uRG0jLjsa83JbPZqnVkec3gjvi0LEMiu1E6ItUALEnKUTTuhDOe3Cx4Ov1PbPTsYVsGRq61DCgzCNHSh2bXy+Q==", "license": "Apache-2.0", "dependencies": { "@meshsdk/bitcoin": "1.9.0-beta.53", @@ -2907,8 +2391,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/bitcoin": { "version": "1.9.0-beta.53", - "resolved": "https://registry.npmjs.org/@meshsdk/bitcoin/-/bitcoin-1.9.0-beta.53.tgz", - "integrity": "sha512-nl6+UZT05vpWUT+Vic2IkhfeJPZlNHm0zvDlOmos5u2JcC1li9T0QmMjYLvyaSj0u29Q0v+iRR4fvF0a8RZTQA==", "dependencies": { "@bitcoin-js/tiny-secp256k1-asmjs": "^2.2.3", "bip174": "^3.0.0-rc.1", @@ -2920,8 +2402,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/common": { "version": "1.9.0-beta.53", - "resolved": "https://registry.npmjs.org/@meshsdk/common/-/common-1.9.0-beta.53.tgz", - "integrity": "sha512-GH75W2P4LPb8MS/F+ftP1wmf2UhSYsug9Naq09bvEU1woohJLmpkJ6JJ1e9fBbAK/N3VRVQEGvv+yM4zs634rQ==", "license": "Apache-2.0", "dependencies": { "bech32": "^2.0.0", @@ -2932,8 +2412,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/core-cst": { "version": "1.9.0-beta.53", - "resolved": "https://registry.npmjs.org/@meshsdk/core-cst/-/core-cst-1.9.0-beta.53.tgz", - "integrity": "sha512-u8I1g8EqfI+ysCtMg258NrMZ+uoSdM5RlrfVRuss0a7jsrSB64ae1kZXDaO2HROycpwz+muZbCVN5JywSVKmTQ==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "^0.45.5", @@ -2954,8 +2432,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/transaction": { "version": "1.9.0-beta.53", - "resolved": "https://registry.npmjs.org/@meshsdk/transaction/-/transaction-1.9.0-beta.53.tgz", - "integrity": "sha512-U53sj8Qve9/XQPqy6gaO7Sm57Fq0tGcYcTlIUq2XUOZtVV0ad88qvCakj9AG0uSq0WnrvPk+L0ExmnnzyL/akw==", "license": "Apache-2.0", "dependencies": { "@cardano-sdk/core": "^0.45.5", @@ -2968,8 +2444,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/web3-sdk/node_modules/@meshsdk/wallet": { "version": "1.9.0-beta.53", - "resolved": "https://registry.npmjs.org/@meshsdk/wallet/-/wallet-1.9.0-beta.53.tgz", - "integrity": "sha512-UyvcRbh3StEowkjTyuomDqG5Pykgbz3PU84gB9LdbxGuX46ZUaqHa5+zq+TfOreJ9CVvIEPkg7YwLas6c1HqMw==", "license": "Apache-2.0", "dependencies": { "@meshsdk/common": "1.9.0-beta.53", @@ -2980,8 +2454,6 @@ }, "node_modules/@meshsdk/web3-sdk/node_modules/@simplewebauthn/browser": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-13.2.2.tgz", - "integrity": "sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==", "license": "MIT" }, "node_modules/@monogrid/gainmap-js": { @@ -2996,8 +2468,6 @@ }, "node_modules/@multiformats/dns": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.10.tgz", - "integrity": "sha512-6X200ceQLns0b/CU0S/So16tGjB5eIXHJ1xvJMPoWaKFHWSgfpW2EhkWJrqap4U3+c37zcowVR0ToPXeYEL7Vw==", "license": "Apache-2.0 OR MIT", "dependencies": { "buffer": "^6.0.3", @@ -3010,8 +2480,6 @@ }, "node_modules/@multiformats/mafmt": { "version": "12.1.6", - "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz", - "integrity": "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww==", "license": "Apache-2.0 OR MIT", "dependencies": { "@multiformats/multiaddr": "^12.0.0" @@ -3019,8 +2487,6 @@ }, "node_modules/@multiformats/multiaddr": { "version": "12.5.1", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz", - "integrity": "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", @@ -3034,8 +2500,6 @@ }, "node_modules/@next/env": { "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.6.tgz", - "integrity": "sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -3048,8 +2512,6 @@ }, "node_modules/@next/swc-darwin-arm64": { "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.6.tgz", - "integrity": "sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==", "cpu": [ "arm64" ], @@ -3069,7 +2531,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -3085,7 +2546,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -3101,7 +2561,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -3117,7 +2576,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -3133,7 +2591,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -3149,7 +2606,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -3165,7 +2621,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -3203,8 +2658,6 @@ }, "node_modules/@noble/hashes": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -3340,8 +2793,6 @@ }, "node_modules/@paralleldrive/cuid2": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.1.5" @@ -3349,8 +2800,6 @@ }, "node_modules/@peculiar/asn1-schema": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz", - "integrity": "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==", "license": "MIT", "dependencies": { "asn1js": "^3.0.6", @@ -3360,8 +2809,6 @@ }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -3372,8 +2819,6 @@ }, "node_modules/@peculiar/webcrypto": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", - "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.8", @@ -4560,8 +4005,6 @@ }, "node_modules/@rvagg/ripemd160": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@rvagg/ripemd160/-/ripemd160-2.2.4.tgz", - "integrity": "sha512-ejuJhx9Q+hfOy/4w86E+obE4OAzTVcDh6QNc0v/0IG9hHvegqzwLeltNJSarzkXvIIZfgh63a/EZhpA25VoJLg==", "license": "MIT" }, "node_modules/@scarf/scarf": { @@ -4571,8 +4014,6 @@ }, "node_modules/@scure/base": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" @@ -4657,20 +4098,14 @@ }, "node_modules/@sidan-lab/whisky-js-browser": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@sidan-lab/whisky-js-browser/-/whisky-js-browser-1.0.11.tgz", - "integrity": "sha512-2deLmdRBJisehbCvAGZqUuPlRXvU5yHuN5cmwPSputbGRb2lfjTb+Nep9ViL93j01/XoDvIn9orXZGqMeIDddQ==", "license": "Apache-2.0" }, "node_modules/@sidan-lab/whisky-js-nodejs": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@sidan-lab/whisky-js-nodejs/-/whisky-js-nodejs-1.0.11.tgz", - "integrity": "sha512-YB6O7GT0aVQltWxeAJDFOscK5SDMxf8EUhjTFq36OWUP4S7GdyWHqu2P4aRZmTLyd6L7+/aWfgI2W8pQZ+Wl8Q==", "license": "Apache-2.0" }, "node_modules/@silentbot1/nat-api": { "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@silentbot1/nat-api/-/nat-api-0.4.8.tgz", - "integrity": "sha512-DBz/1gGzaYIbUdGTBQ7l4NrI7a+DFZgdZShmjmBGgJR4PvQ64wKNMwle2rrW8pdiOesN+DV6/8ZN/PLuksNyTg==", "license": "MIT", "dependencies": { "chrome-dgram": "^3.0.6", @@ -5238,8 +4673,6 @@ }, "node_modules/@swc/helpers": { "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -5298,8 +4731,6 @@ }, "node_modules/@thaunknown/simple-peer": { "version": "10.0.12", - "resolved": "https://registry.npmjs.org/@thaunknown/simple-peer/-/simple-peer-10.0.12.tgz", - "integrity": "sha512-sDrkkOdzlJL8+FXQqYcBb2THHQU+Yrar92SjfW4ZLs877/4QA2kFejuA6DVepsoMpoIbXShc7OCXCwYt4AtGdQ==", "license": "MIT", "dependencies": { "debug": "^4.3.7", @@ -5311,8 +4742,6 @@ }, "node_modules/@thaunknown/simple-websocket": { "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@thaunknown/simple-websocket/-/simple-websocket-9.1.3.tgz", - "integrity": "sha512-pf/FCJsgWtLJiJmIpiSI7acOZVq3bIQCpnNo222UFc8Ph1lOUOTpe6LoYhhiOSKB9GUaWJEVUtZ+sK1/aBgU5Q==", "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -5324,8 +4753,6 @@ }, "node_modules/@thaunknown/simple-websocket/node_modules/ws": { "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -5345,8 +4772,6 @@ }, "node_modules/@thaunknown/thirty-two": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@thaunknown/thirty-two/-/thirty-two-1.0.5.tgz", - "integrity": "sha512-Q53KyCXweV1CS62EfqtPDqfpksn5keQ59PGqzzkK+g8Vif1jB4inoBCcs/BUSdsqddhE3G+2Fn+4RX3S6RqT0A==", "license": "MIT", "dependencies": { "uint8-util": "^2.2.5" @@ -5681,8 +5106,6 @@ }, "node_modules/@types/json-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/json-bigint/-/json-bigint-1.0.4.tgz", - "integrity": "sha512-ydHooXLbOmxBbubnA7Eh+RpBzuaIiQjh8WGJYQB50JFGFrdxW7JzVlyEV7fAXw0T2sqJ1ysTneJbiyNLqZRAag==", "license": "MIT" }, "node_modules/@types/json-schema": { @@ -6054,8 +5477,6 @@ }, "node_modules/@utxorpc/sdk": { "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@utxorpc/sdk/-/sdk-0.6.8.tgz", - "integrity": "sha512-Mff6q2o7R2aam85KmjtAZDKPhJesMmnGFbk2M54lPO0FwrrWRfUf6DYezqWfYcjXgKQSHDuklAcdtF0weEENRA==", "license": "MIT", "dependencies": { "@connectrpc/connect": "1.4", @@ -6067,8 +5488,6 @@ }, "node_modules/@utxorpc/spec": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@utxorpc/spec/-/spec-0.16.0.tgz", - "integrity": "sha512-EK2M0TBp14MrRCYDuFeJ+bAS39RxxLLh+CD08h/YvAgxSv/4ZOBCf1/sxHAGCBGGndB4heZYFeuQ+i1i8vP5lw==", "license": "MIT", "dependencies": { "@bufbuild/protobuf": "^1.10.0" @@ -6097,8 +5516,6 @@ }, "node_modules/@webtorrent/http-node": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webtorrent/http-node/-/http-node-1.3.0.tgz", - "integrity": "sha512-GWZQKroPES4z91Ijx6zsOsb7+USOxjy66s8AoTWg0HiBBdfnbtf9aeh3Uav0MgYn4BL8Q7tVSUpd0gGpngKGEQ==", "license": "MIT", "dependencies": { "freelist": "^1.0.3", @@ -6107,8 +5524,6 @@ }, "node_modules/@zxing/text-encoding": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", "license": "(Unlicense OR Apache-2.0)", "optional": true }, @@ -6124,8 +5539,6 @@ }, "node_modules/abort-error": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz", - "integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==", "license": "Apache-2.0 OR MIT" }, "node_modules/accessor-fn": { @@ -6156,8 +5569,6 @@ }, "node_modules/addr-to-ip-port": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-2.0.0.tgz", - "integrity": "sha512-9bYbtjamtdLHZSqVIUXhilOryNPiL+x+Q5J/Unpg4VY3ZIkK3fT52UoErj1NdUeVm3J1t2iBEAur4Ywbl/bahw==", "license": "MIT", "engines": { "node": ">=12.20.0" @@ -6415,8 +5826,6 @@ }, "node_modules/asn1js": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", - "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", "license": "BSD-3-Clause", "dependencies": { "pvtsutils": "^1.3.6", @@ -6608,8 +6017,6 @@ }, "node_modules/bare-addon-resolve": { "version": "1.9.5", - "resolved": "https://registry.npmjs.org/bare-addon-resolve/-/bare-addon-resolve-1.9.5.tgz", - "integrity": "sha512-XdqrG73zLK9LDfblOJwoAxmJ+7YdfRW4ex46+f4L+wPhk7H7LDrRMAbBw8s8jkxeEFpUenyB7QHnv0ErAWd3Yg==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -6627,8 +6034,6 @@ }, "node_modules/bare-events": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.1.tgz", - "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", "license": "Apache-2.0", "peerDependencies": { "bare-abort-controller": "*" @@ -6641,8 +6046,6 @@ }, "node_modules/bare-fs": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.0.tgz", - "integrity": "sha512-GljgCjeupKZJNetTqxKaQArLK10vpmK28or0+RwWjEl5Rk+/xG3wkpmkv+WrcBm3q1BwHKlnhXzR8O37kcvkXQ==", "license": "Apache-2.0", "dependencies": { "bare-events": "^2.5.4", @@ -6665,8 +6068,6 @@ }, "node_modules/bare-module-resolve": { "version": "1.11.2", - "resolved": "https://registry.npmjs.org/bare-module-resolve/-/bare-module-resolve-1.11.2.tgz", - "integrity": "sha512-HIBu9WacMejg3Dz4X1v6lJjp7ECnwpujvuLub+8I7JJLRwJaGxWMzGYvieOoS9R1n5iRByvTmLtIdPbwjfRgiQ==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -6683,8 +6084,6 @@ }, "node_modules/bare-os": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", "license": "Apache-2.0", "engines": { "bare": ">=1.14.0" @@ -6692,8 +6091,6 @@ }, "node_modules/bare-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "license": "Apache-2.0", "dependencies": { "bare-os": "^3.0.1" @@ -6701,15 +6098,11 @@ }, "node_modules/bare-semver": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bare-semver/-/bare-semver-1.0.2.tgz", - "integrity": "sha512-ESVaN2nzWhcI5tf3Zzcq9aqCZ676VWzqw07eEZ0qxAcEOAFYBa0pWq8sK34OQeHLY3JsfKXZS9mDyzyxGjeLzA==", "license": "Apache-2.0", "optional": true }, "node_modules/bare-stream": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", "license": "Apache-2.0", "dependencies": { "streamx": "^2.21.0" @@ -6729,8 +6122,6 @@ }, "node_modules/bare-url": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.1.tgz", - "integrity": "sha512-v2yl0TnaZTdEnelkKtXZGnotiV6qATBlnNuUMrHl6v9Lmmrh9mw9RYyImPU7/4RahumSwQS1k2oKXcRfXcbjJw==", "license": "Apache-2.0", "dependencies": { "bare-path": "^3.0.0" @@ -6738,8 +6129,6 @@ }, "node_modules/base-x": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", - "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", "license": "MIT" }, "node_modules/base32-encoding": { @@ -6748,8 +6137,6 @@ }, "node_modules/base64-arraybuffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -6782,8 +6169,6 @@ }, "node_modules/bech32": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", "license": "MIT" }, "node_modules/before-after-hook": { @@ -6792,8 +6177,6 @@ }, "node_modules/bencode": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", - "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", "license": "MIT", "dependencies": { "uint8-util": "^2.2.2" @@ -6804,8 +6187,6 @@ }, "node_modules/bep53-range": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bep53-range/-/bep53-range-2.0.0.tgz", - "integrity": "sha512-sMm2sV5PRs0YOVk0LTKtjuIprVzxgTQUsrGX/7Yph2Rm4FO2Fqqtq7hNjsOB5xezM4v4+5rljCgK++UeQJZguA==", "license": "MIT", "engines": { "node": ">=12.20.0" @@ -6820,8 +6201,6 @@ }, "node_modules/bignumber.js": { "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", "engines": { "node": "*" @@ -6837,20 +6216,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bip174": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-3.0.0.tgz", - "integrity": "sha512-N3vz3rqikLEu0d6yQL8GTrSkpYb35NQKWMR7Hlza0lOj6ZOlvQ3Xr7N9Y+JPebaCVoEUHdBeBSuLxcHr71r+Lw==", "license": "MIT", "dependencies": { "uint8array-tools": "^0.0.9", @@ -6862,8 +6229,6 @@ }, "node_modules/bip174/node_modules/uint8array-tools": { "version": "0.0.9", - "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.9.tgz", - "integrity": "sha512-9vqDWmoSXOoi+K14zNaf6LBV51Q8MayF0/IiQs3GlygIKUYtog603e6virExkjjFosfJUBI4LhbQK1iq8IG11A==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -6871,8 +6236,6 @@ }, "node_modules/bip32": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-4.0.0.tgz", - "integrity": "sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.2.0", @@ -6886,8 +6249,6 @@ }, "node_modules/bip39": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", "license": "ISC", "dependencies": { "@noble/hashes": "^1.2.0" @@ -6895,8 +6256,6 @@ }, "node_modules/bitcoinjs-lib": { "version": "6.1.7", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.7.tgz", - "integrity": "sha512-tlf/r2DGMbF7ky1MgUqXHzypYHakkEnm0SZP23CJKIqNY/5uNAnMbFhMJdhjrL/7anfb/U8+AlpdjPWjPnAalg==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.2.0", @@ -6912,14 +6271,10 @@ }, "node_modules/bitcoinjs-lib/node_modules/base-x": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", "license": "MIT" }, "node_modules/bitcoinjs-lib/node_modules/bip174": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", - "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -6927,8 +6282,6 @@ }, "node_modules/bitcoinjs-lib/node_modules/bs58": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", "license": "MIT", "dependencies": { "base-x": "^4.0.0" @@ -6936,8 +6289,6 @@ }, "node_modules/bitcoinjs-lib/node_modules/bs58check": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", - "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.2.0", @@ -6946,8 +6297,6 @@ }, "node_modules/bitcoinjs-lib/node_modules/varuint-bitcoin": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "license": "MIT", "dependencies": { "safe-buffer": "^5.1.1" @@ -6955,8 +6304,6 @@ }, "node_modules/bitfield": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/bitfield/-/bitfield-4.2.0.tgz", - "integrity": "sha512-kUTatQb/mBd8uhvdLrUkouGDBUQiJaIOvPlptUwOWp6MFqih4d1MiVf0m3ATxfZSzu+LjW/awFeABltYa62uIA==", "license": "MIT", "engines": { "node": ">=8" @@ -6967,8 +6314,6 @@ }, "node_modules/bittorrent-dht": { "version": "11.0.11", - "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-11.0.11.tgz", - "integrity": "sha512-5rWMoK/2XjcPSx9nfqiL6mHxsXLwohX+81aL4a3qUyGU1992mBqARQE/evZ+a6eWb5DeRjeDU+qFZm11rmPZnQ==", "funding": [ { "type": "github", @@ -7000,8 +6345,6 @@ }, "node_modules/bittorrent-lsd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bittorrent-lsd/-/bittorrent-lsd-2.0.0.tgz", - "integrity": "sha512-jV+SMTGNY1iGWjf5cPA2HMeA6axuMQRWwWELtsuZ1FmQmZwC74we92nwtDTfv1WMnLx+oqEjWRri42IHjZitSQ==", "funding": [ { "type": "github", @@ -7027,8 +6370,6 @@ }, "node_modules/bittorrent-peerid": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/bittorrent-peerid/-/bittorrent-peerid-1.3.6.tgz", - "integrity": "sha512-VyLcUjVMEOdSpHaCG/7odvCdLbAB1y3l9A2V6WIje24uV7FkJPrQrH/RrlFmKxP89pFVDEnE+YlHaFujlFIZsg==", "funding": [ { "type": "github", @@ -7047,8 +6388,6 @@ }, "node_modules/bittorrent-protocol": { "version": "4.1.21", - "resolved": "https://registry.npmjs.org/bittorrent-protocol/-/bittorrent-protocol-4.1.21.tgz", - "integrity": "sha512-CcuPt6BL7gXa8BF+0GckYcQmr44ARfSPM0rYwMeYgWg+jftekWgy5vuxX6wJDpC5bKFvqNG+74bPBjyM7Swxrw==", "funding": [ { "type": "github", @@ -7080,8 +6419,6 @@ }, "node_modules/bittorrent-tracker": { "version": "11.2.2", - "resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-11.2.2.tgz", - "integrity": "sha512-pVjpd6tPtLByrYwtDOo+cVx9zQZ2XUvlaWrlm57+9yvVDKHuNL+TFEAtyfXuIutghG7Bde/uWXGfoVWpPYY+8A==", "funding": [ { "type": "github", @@ -7133,8 +6470,6 @@ }, "node_modules/bittorrent-tracker/node_modules/utf-8-validate": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.5.tgz", - "integrity": "sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -7147,8 +6482,6 @@ }, "node_modules/bittorrent-tracker/node_modules/ws": { "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -7168,8 +6501,6 @@ }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -7179,8 +6510,6 @@ }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -7203,8 +6532,6 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -7217,8 +6544,6 @@ }, "node_modules/bl/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -7226,8 +6551,6 @@ }, "node_modules/blake2b": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", - "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", "license": "ISC", "dependencies": { "blake2b-wasm": "^2.4.0", @@ -7236,8 +6559,6 @@ }, "node_modules/blake2b-wasm": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", - "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", "license": "MIT", "dependencies": { "b4a": "^1.0.1", @@ -7246,8 +6567,6 @@ }, "node_modules/blake2b-wasm/node_modules/b4a": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "license": "Apache-2.0", "peerDependencies": { "react-native-b4a": "*" @@ -7260,20 +6579,14 @@ }, "node_modules/blakejs": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", "license": "MIT" }, "node_modules/block-iterator": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/block-iterator/-/block-iterator-1.1.1.tgz", - "integrity": "sha512-DrjdVWZemVO4iBf4tiOXjUrY5cNesjzy0t7sIiu2rdl8cOCHRxAgKjSJFc3vBZYYMMmshUAxajl8QQh/uxXTKQ==", "license": "MIT" }, "node_modules/bn.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "license": "MIT" }, "node_modules/brace-expansion": { @@ -7337,8 +6650,6 @@ }, "node_modules/bs58": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", - "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", "license": "MIT", "dependencies": { "base-x": "^5.0.0" @@ -7346,8 +6657,6 @@ }, "node_modules/bs58check": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-4.0.0.tgz", - "integrity": "sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.2.0", @@ -7395,8 +6704,6 @@ }, "node_modules/bufferutil": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", - "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -7486,8 +6793,6 @@ }, "node_modules/cache-chunk-store": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/cache-chunk-store/-/cache-chunk-store-3.2.2.tgz", - "integrity": "sha512-2lJdWbgHFFxcSth9s2wpId3CR3v1YC63KjP4T9WhpW7LWlY7Hiiei3QwwqzkWqlJTfR8lSy9F5kRQECeyj+yQA==", "funding": [ { "type": "github", @@ -7607,8 +6912,6 @@ }, "node_modules/cbor": { "version": "10.0.11", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", - "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", "license": "MIT", "dependencies": { "nofilter": "^3.0.2" @@ -7627,8 +6930,6 @@ }, "node_modules/chacha": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chacha/-/chacha-2.1.0.tgz", - "integrity": "sha512-FhVtqaZOiHlOKUkAWfDlJ+oe/O8iPQbCC0pFXJqphr4YQBCZPXa8Mv3j35+W4eWFWCoTUcW2u5IWDDkknygvVA==", "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -7638,21 +6939,9 @@ "chacha-native": "^2.0.0" } }, - "node_modules/chacha-native": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chacha-native/-/chacha-native-2.0.3.tgz", - "integrity": "sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.1", - "nan": "^2.4.0" - } - }, "node_modules/chalk": { "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -7739,14 +7028,10 @@ }, "node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, "node_modules/chrome-dgram": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.6.tgz", - "integrity": "sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==", "funding": [ { "type": "github", @@ -7769,8 +7054,6 @@ }, "node_modules/chrome-dns": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chrome-dns/-/chrome-dns-1.0.1.tgz", - "integrity": "sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==", "license": "MIT", "dependencies": { "chrome-net": "^3.3.2" @@ -7778,8 +7061,6 @@ }, "node_modules/chrome-net": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/chrome-net/-/chrome-net-3.3.4.tgz", - "integrity": "sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==", "funding": [ { "type": "github", @@ -7801,8 +7082,6 @@ }, "node_modules/chunk-store-iterator": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chunk-store-iterator/-/chunk-store-iterator-1.0.4.tgz", - "integrity": "sha512-LGjzJNmk7W1mrdaBoJNztPumT2ACmgjHmI1AMm8aeGYOl4+LKaYC/yfnx27i++LiAtoe/dR+3jC8HRzb6gW4/A==", "license": "MIT", "dependencies": { "block-iterator": "^1.1.1" @@ -7810,6 +7089,7 @@ }, "node_modules/ci-info": { "version": "4.3.0", + "dev": true, "funding": [ { "type": "github", @@ -7823,8 +7103,6 @@ }, "node_modules/cipher-base": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -7864,8 +7142,6 @@ }, "node_modules/client-only": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, "node_modules/cliui": { @@ -7977,8 +7253,6 @@ }, "node_modules/compact2string": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/compact2string/-/compact2string-1.4.1.tgz", - "integrity": "sha512-3D+EY5nsRhqnOwDxveBv5T8wGo4DEvYxjDtPGmdOX+gfr5gE92c2RC0w2wa+xEefm07QuVqqcF3nZJUZ92l/og==", "license": "BSD", "dependencies": { "ipaddr.js": ">= 0.1.5" @@ -8043,8 +7317,6 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, "node_modules/cors": { @@ -8060,8 +7332,6 @@ }, "node_modules/cpus": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cpus/-/cpus-1.0.3.tgz", - "integrity": "sha512-PXHBvGLuL69u55IkLa5e5838fLhIMHxmkV4ge42a8alGyn7BtawYgI0hQ849EedvtHIOLNNH3i6eQU1BiE9SUA==", "funding": [ { "type": "github", @@ -8080,8 +7350,6 @@ }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", @@ -8093,8 +7361,6 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", @@ -8107,8 +7373,6 @@ }, "node_modules/create-torrent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/create-torrent/-/create-torrent-6.1.0.tgz", - "integrity": "sha512-War593HCsg4TotHgMGWTJqnDHN0pmEU2RM13xUzzSZ78TpRNOC2bbcsC5yMO3pqIkedHEWFzYNqH1yhwuuBYTg==", "funding": [ { "type": "github", @@ -8163,8 +7427,6 @@ }, "node_modules/cross-fetch": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -8172,8 +7434,6 @@ }, "node_modules/cross-fetch-ponyfill": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cross-fetch-ponyfill/-/cross-fetch-ponyfill-1.0.3.tgz", - "integrity": "sha512-uOBkDhUAGAbx/FEzNKkOfx3w57H8xReBBXoZvUnOKTI0FW0Xvrj3GrYv2iZXUqlffC1LMGfQzhmBM/ke+6eTDA==", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -8182,8 +7442,6 @@ }, "node_modules/cross-fetch-ponyfill/node_modules/node-fetch": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", @@ -8462,8 +7720,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -8502,8 +7758,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -8557,8 +7811,6 @@ }, "node_modules/default-gateway": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-7.2.2.tgz", - "integrity": "sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg==", "license": "BSD-2-Clause", "dependencies": { "execa": "^7.1.1" @@ -8569,8 +7821,6 @@ }, "node_modules/default-gateway/node_modules/execa": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -8592,8 +7842,6 @@ }, "node_modules/default-gateway/node_modules/human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "license": "Apache-2.0", "engines": { "node": ">=14.18.0" @@ -8601,8 +7849,6 @@ }, "node_modules/default-gateway/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -8613,8 +7859,6 @@ }, "node_modules/default-gateway/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "license": "MIT", "engines": { "node": ">=12" @@ -8625,8 +7869,6 @@ }, "node_modules/default-gateway/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "license": "MIT", "dependencies": { "path-key": "^4.0.0" @@ -8640,8 +7882,6 @@ }, "node_modules/default-gateway/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" @@ -8655,8 +7895,6 @@ }, "node_modules/default-gateway/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "license": "MIT", "engines": { "node": ">=12" @@ -8667,14 +7905,10 @@ }, "node_modules/default-gateway/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, "node_modules/default-gateway/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "license": "MIT", "engines": { "node": ">=12" @@ -8754,8 +7988,6 @@ }, "node_modules/detect-libc": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -8806,8 +8038,6 @@ }, "node_modules/dns-packet": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -8835,9 +8065,7 @@ } }, "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "version": "0.1.2" }, "node_modules/dompurify": { "version": "3.2.4", @@ -8897,8 +8125,6 @@ }, "node_modules/ecpair": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ecpair/-/ecpair-2.1.0.tgz", - "integrity": "sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==", "license": "MIT", "dependencies": { "randombytes": "^2.1.0", @@ -8947,8 +8173,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -8968,8 +8192,6 @@ }, "node_modules/err-code": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", "license": "MIT" }, "node_modules/error-ex": { @@ -9194,8 +8416,6 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { @@ -9765,8 +8985,6 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" @@ -9861,8 +9079,6 @@ }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, "node_modules/fast-glob": { @@ -9905,8 +9121,6 @@ }, "node_modules/fast-readable-async-iterator": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-readable-async-iterator/-/fast-readable-async-iterator-2.0.0.tgz", - "integrity": "sha512-8Sld+DuyWRIftl86ZguJxR2oXCBccOiJxrY/Rj9/7ZBynW8pYMWzIcqxFL1da+25jaWJZVa+HHX/8SsA21JdTA==", "license": "MIT" }, "node_modules/fastq": { @@ -9981,17 +9195,8 @@ "node": ">= 12" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT", - "optional": true - }, "node_modules/filename-reserved-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -10119,8 +9324,6 @@ }, "node_modules/formidable": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", @@ -10136,8 +9339,6 @@ }, "node_modules/fraction.js": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.1.tgz", - "integrity": "sha512-NQYzZw8MUsxSZFQo6E8tKOlmSd/BlDTNOR4puXFSHSwFwNaIlmbortQy5PDN/KnVQ4xWG2NtN0J0hjPw7eE06A==", "license": "MIT OR GPL-2.0", "engines": { "node": "*" @@ -10177,14 +9378,10 @@ }, "node_modules/freelist": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/freelist/-/freelist-1.0.3.tgz", - "integrity": "sha512-Ji7fEnMdZDGbS5oXElpRJsn9jPvBR8h/037D3bzreNmS8809cISq/2D9//JbA/TaZmkkN8cmecXwmQHmM+NHhg==", "license": "MIT" }, "node_modules/fs-chunk-store": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-chunk-store/-/fs-chunk-store-5.0.0.tgz", - "integrity": "sha512-tKlT0joU9KmsLn0dTbVYVUa7VNqYQhl0X2qPPsN9lPEc3guXOmQJWY5/7kpo34Sk273qyWT5mqEhROCQPF+JKw==", "funding": [ { "type": "github", @@ -10214,14 +9411,10 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "license": "MIT" }, "node_modules/fs-native-extensions": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/fs-native-extensions/-/fs-native-extensions-1.4.4.tgz", - "integrity": "sha512-iLo3r2ei97thJNoj3DgSdzUF2hZ2yekZpXF98LlHc2eZGPOwiVblyEa6iS68zLu9ayXvlE8/c3CMaagNbHJB1Q==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -10235,8 +9428,6 @@ }, "node_modules/fsa-chunk-store": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fsa-chunk-store/-/fsa-chunk-store-1.3.0.tgz", - "integrity": "sha512-0WCfuxqqSB6Tz/g7Ar/nwAxMoigXaIXuvfrnLIEFYIA9uc6w9eNaHuBGzU1X3lyM4cpLKCOTUmKAA/gCiTvzMQ==", "license": "MIT", "dependencies": { "filename-reserved-regex": "^3.0.0" @@ -10359,8 +9550,6 @@ }, "node_modules/get-random-values": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-random-values/-/get-random-values-2.1.0.tgz", - "integrity": "sha512-q2yOLpLyA8f9unfv2LV8KVRUFeOIrQVS5cnqpbv6N+ea9j1rmW5dFKj/2Q7CK3juEfDYQgPxGt941VJcmw0jKg==", "license": "MIT", "dependencies": { "global": "^4.4.0" @@ -10371,8 +9560,6 @@ }, "node_modules/get-stdin": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "license": "MIT", "engines": { "node": ">=12" @@ -10436,8 +9623,6 @@ }, "node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "license": "MIT" }, "node_modules/glob": { @@ -10472,8 +9657,6 @@ }, "node_modules/global": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "license": "MIT", "dependencies": { "min-document": "^2.19.0", @@ -10511,6 +9694,7 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -10560,6 +9744,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10614,8 +9799,6 @@ }, "node_modules/hash-base": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -10629,14 +9812,10 @@ }, "node_modules/hash-base/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/hash-base/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -10650,14 +9829,10 @@ }, "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/hash-base/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -10665,14 +9840,10 @@ }, "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/hashlru": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", - "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==", "license": "MIT" }, "node_modules/hasown": { @@ -10816,8 +9987,6 @@ }, "node_modules/http-parser-js": { "version": "0.4.13", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha512-u8u5ZaG0Tr/VvHlucK2ufMuOp4/5bvwgneXle+y228K5rMbJOlVjThONcaAw3ikAy8b2OO9RfEucdMHFz3UWMA==", "license": "MIT" }, "node_modules/human-signals": { @@ -10830,8 +9999,6 @@ }, "node_modules/i": { "version": "0.3.7", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", - "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", "engines": { "node": ">=0.4" } @@ -10872,8 +10039,6 @@ }, "node_modules/immediate-chunk-store": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/immediate-chunk-store/-/immediate-chunk-store-2.2.0.tgz", - "integrity": "sha512-1bHBna0hCa6arRXicu91IiL9RvvkbNYLVq+mzWdaLGZC3hXvX4doh8e1dLhMKez5siu63CYgO5NrGJbRX5lbPA==", "funding": [ { "type": "github", @@ -10935,6 +10100,7 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -10961,8 +10127,6 @@ }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "license": "ISC" }, "node_modules/inline-style-parser": { @@ -10998,14 +10162,10 @@ }, "node_modules/ip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "license": "MIT" }, "node_modules/ip-address": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "license": "MIT", "dependencies": { "jsbn": "1.1.0", @@ -11017,8 +10177,6 @@ }, "node_modules/ip-set": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ip-set/-/ip-set-2.2.0.tgz", - "integrity": "sha512-NmmY3BfY4pejh6GOqNcNWRsBNdR+I7pUVtXRgZlkZdcnLtlG4X6HNtu2FZoCGyvGRzyroP1fJ+SJZBZ65JJl/Q==", "license": "MIT", "dependencies": { "ip": "^2.0.1" @@ -11026,8 +10184,6 @@ }, "node_modules/ipaddr.js": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "license": "MIT", "engines": { "node": ">= 10" @@ -11055,8 +10211,6 @@ }, "node_modules/is-arguments": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11258,8 +10412,6 @@ }, "node_modules/is-file": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", - "integrity": "sha512-ZGMuc+xA8mRnrXtmtf2l/EkIW2zaD2LSBWlaOVEF6yH4RTndHob65V4SwWWdtGKVthQfXPVKsXqw4TDUjbVxVQ==", "license": "MIT" }, "node_modules/is-finalizationregistry": { @@ -11535,8 +10687,6 @@ }, "node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "license": "MIT" }, "node_modules/isexe": { @@ -11545,8 +10695,6 @@ }, "node_modules/iso-url": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", "license": "MIT", "engines": { "node": ">=12" @@ -11554,8 +10702,6 @@ }, "node_modules/isomorphic-ws": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "license": "MIT", "peerDependencies": { "ws": "*" @@ -12508,8 +11654,6 @@ }, "node_modules/join-async-iterator": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/join-async-iterator/-/join-async-iterator-1.1.1.tgz", - "integrity": "sha512-ATse+nuNeKZ9K1y27LKdvPe/GCe9R/u9dw9vI248e+vILeRK3IcJP4JUPAlSmKRCDK0cKhEwfmiw4Skqx7UnGQ==", "license": "MIT" }, "node_modules/jose": { @@ -12539,8 +11683,6 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, "node_modules/jsesc": { @@ -12567,6 +11709,7 @@ }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -12662,8 +11805,6 @@ }, "node_modules/junk": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "license": "MIT", "engines": { "node": ">=12.20" @@ -12691,8 +11832,6 @@ }, "node_modules/k-bucket": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", - "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", "license": "MIT", "dependencies": { "randombytes": "^2.1.0" @@ -12700,8 +11839,6 @@ }, "node_modules/k-rpc": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-5.1.0.tgz", - "integrity": "sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==", "license": "MIT", "dependencies": { "k-bucket": "^5.0.0", @@ -12711,8 +11848,6 @@ }, "node_modules/k-rpc-socket": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz", - "integrity": "sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==", "license": "MIT", "dependencies": { "bencode": "^2.0.0", @@ -12723,8 +11858,6 @@ }, "node_modules/k-rpc-socket/node_modules/bencode": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.3.tgz", - "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==", "license": "MIT" }, "node_modules/kapsule": { @@ -12812,8 +11945,6 @@ }, "node_modules/last-one-wins": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", - "integrity": "sha512-t+KLJFkHPQk8lfN6WBOiGkiUXoub+gnb2XTYI2P3aiISL+94xgZ1vgz1SXN/N4hthuOoLXarXfBZPUruyjQtfA==", "license": "MIT" }, "node_modules/leven": { @@ -12838,14 +11969,10 @@ }, "node_modules/libsodium-sumo": { "version": "0.7.15", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", - "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", "license": "ISC" }, "node_modules/libsodium-wrappers-sumo": { "version": "0.7.15", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", - "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", "license": "ISC", "dependencies": { "libsodium-sumo": "^0.7.15" @@ -12869,9 +11996,7 @@ } }, "node_modules/limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + "version": "1.1.5" }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -12879,8 +12004,6 @@ }, "node_modules/load-ip-set": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/load-ip-set/-/load-ip-set-3.0.1.tgz", - "integrity": "sha512-ZFZt1g4Exq01SFtKjffqau+L4Qibt+51utymHHiWo8Iu/W7LYSqE7fiZ/iAZ6dIqbmeU6ICSIK02IizSScBkLQ==", "funding": [ { "type": "github", @@ -13016,8 +12139,6 @@ }, "node_modules/lru": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", - "integrity": "sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==", "license": "MIT", "dependencies": { "inherits": "^2.0.1" @@ -13035,8 +12156,6 @@ }, "node_modules/lt_donthave": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lt_donthave/-/lt_donthave-2.0.6.tgz", - "integrity": "sha512-ZVcaRbZpNB6ugwa5T9gUN0Jg9XGT9cyVjZJvdbN3V27rOQ170rEs//zaQXEQkTCBhh3i/JnCRF472KWHJu74Yg==", "funding": [ { "type": "github", @@ -13077,8 +12196,6 @@ }, "node_modules/magnet-uri": { "version": "7.0.7", - "resolved": "https://registry.npmjs.org/magnet-uri/-/magnet-uri-7.0.7.tgz", - "integrity": "sha512-z/+dB2NQsXaDuxVBjoPLpZT8ePaacUmoontoFheRBl++nALHYs4qV9MmhTur9e4SaMbkCR/uPX43UMzEOoeyaw==", "funding": [ { "type": "github", @@ -13158,8 +12275,6 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "license": "MIT", "dependencies": { "hash-base": "^3.0.0", @@ -13532,8 +12647,6 @@ }, "node_modules/memory-chunk-store": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/memory-chunk-store/-/memory-chunk-store-1.3.5.tgz", - "integrity": "sha512-E1Xc1U4ifk/FkC2ZsWhCaW1xg9HbE/OBmQTLe2Tr9c27YPSLbW7kw1cnb3kQWD1rDtErFJHa7mB9EVrs7aTx9g==", "license": "MIT", "dependencies": { "queue-microtask": "^1.2.3" @@ -14081,8 +13194,6 @@ }, "node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "license": "MIT", "bin": { "mime": "cli.js" @@ -14118,8 +13229,6 @@ }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "license": "MIT", "engines": { "node": ">=10" @@ -14130,8 +13239,6 @@ }, "node_modules/min-document": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dependencies": { "dom-walk": "^0.1.0" } @@ -14175,8 +13282,6 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "license": "MIT" }, "node_modules/motion-dom": { @@ -14196,8 +13301,6 @@ }, "node_modules/multiformats": { "version": "13.4.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", - "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==", "license": "Apache-2.0 OR MIT" }, "node_modules/mz": { @@ -14209,17 +13312,8 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "license": "MIT", - "optional": true - }, "node_modules/nanoassert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", - "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", "license": "ISC" }, "node_modules/nanoid": { @@ -14240,14 +13334,10 @@ }, "node_modules/napi-build-utils": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", "license": "MIT" }, "node_modules/napi-macros": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", "license": "MIT", "optional": true }, @@ -14284,8 +13374,6 @@ }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -14293,8 +13381,6 @@ }, "node_modules/next": { "version": "15.5.6", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.6.tgz", - "integrity": "sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==", "license": "MIT", "dependencies": { "@next/env": "15.5.6", @@ -14422,8 +13508,6 @@ }, "node_modules/node-abi": { "version": "3.78.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", - "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -14434,8 +13518,6 @@ }, "node_modules/node-abi/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -14458,8 +13540,6 @@ }, "node_modules/node-datachannel": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-datachannel/-/node-datachannel-0.12.0.tgz", - "integrity": "sha512-pZ9FsVZpHdUKqyWynuCc9IBLkZPJMpDzpNk4YNPCizbIXHYifpYeWqSF35REHGIWi9JMCf11QzapsyQGo/Y4Ig==", "hasInstallScript": true, "license": "MPL 2.0", "dependencies": { @@ -14472,9 +13552,6 @@ }, "node_modules/node-datachannel/node_modules/node-domexception": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-2.0.2.tgz", - "integrity": "sha512-Qf9vHK9c5MGgUXj8SnucCIS4oEPuUstjRaMplLGeZpbWMfNV1rvEcXuwoXfN51dUfD1b4muPHPQtCx/5Dj/QAA==", - "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -14509,8 +13586,6 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -14568,8 +13643,6 @@ }, "node_modules/nofilter": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "license": "MIT", "engines": { "node": ">=12.19" @@ -14632,8 +13705,6 @@ }, "node_modules/npm": { "version": "9.9.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.4.tgz", - "integrity": "sha512-NzcQiLpqDuLhavdyJ2J3tGJ/ni/ebcqHVFZkv1C4/6lblraUPbPgCJ4Vhb4oa3FFhRa2Yj9gA58jGH/ztKueNQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -17960,8 +17031,6 @@ }, "node_modules/p-queue": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.0.tgz", - "integrity": "sha512-KO1RyxstL9g1mK76530TExamZC/S2Glm080Nx8PE5sTd7nlduDQsAfEl4uXX+qZjLiwvDauvzXavufy3+rJ9zQ==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -17976,14 +17045,10 @@ }, "node_modules/p-queue/node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, "node_modules/p-timeout": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", - "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", "license": "MIT", "engines": { "node": ">=20" @@ -18050,8 +17115,6 @@ }, "node_modules/parse-torrent": { "version": "11.0.19", - "resolved": "https://registry.npmjs.org/parse-torrent/-/parse-torrent-11.0.19.tgz", - "integrity": "sha512-T0lEkDdFVQsy0YxHIKjzDHSgt/yl57f3INs5jl7OZqAm77XDF0FgRgrv3LCKgSqsTOrMwYaF0t2761WKdvhgig==", "funding": [ { "type": "github", @@ -18133,8 +17196,6 @@ }, "node_modules/pbkdf2": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "license": "MIT", "dependencies": { "create-hash": "^1.2.0", @@ -18169,8 +17230,6 @@ }, "node_modules/piece-length": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/piece-length/-/piece-length-2.0.1.tgz", - "integrity": "sha512-dBILiDmm43y0JPISWEmVGKBETQjwJe6mSU9GND+P9KW0SJGUwoU/odyH1nbalOP9i8WSYuqf1lQnaj92Bhw+Ug==", "license": "MIT" }, "node_modules/pify": { @@ -18423,8 +17482,6 @@ }, "node_modules/prebuild-install": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", @@ -18590,14 +17647,10 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, "node_modules/progress-events": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz", - "integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==", "license": "Apache-2.0 OR MIT" }, "node_modules/promise-worker-transferable": { @@ -18634,8 +17687,6 @@ }, "node_modules/pump": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -18667,8 +17718,6 @@ }, "node_modules/pvtsutils": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "license": "MIT", "dependencies": { "tslib": "^2.8.1" @@ -18676,8 +17725,6 @@ }, "node_modules/pvutils": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -18685,8 +17732,6 @@ }, "node_modules/qrcode-svg": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/qrcode-svg/-/qrcode-svg-1.1.0.tgz", - "integrity": "sha512-XyQCIXux1zEIA3NPb0AeR8UMYvXZzWEhgdBgBjH9gO7M48H9uoHzviNz8pXw3UzrAcxRRRn9gxHewAVK7bn9qw==", "license": "MIT", "bin": { "qrcode-svg": "bin/qrcode-svg.js" @@ -18716,8 +17761,6 @@ }, "node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "license": "MIT" }, "node_modules/rafor": { @@ -18759,8 +17802,6 @@ }, "node_modules/random-access-file": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/random-access-file/-/random-access-file-4.1.2.tgz", - "integrity": "sha512-GQM6R78DceZDcQod8KxlDFwXIiUvlvuy1EOzxTDsjuDjW5NlnlZi0MOk6iI4itAj/2vcvdqcEExYbVpC/dJcEw==", "license": "MIT", "dependencies": { "bare-fs": "^4.0.1", @@ -18773,8 +17814,6 @@ }, "node_modules/random-access-storage": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/random-access-storage/-/random-access-storage-3.0.2.tgz", - "integrity": "sha512-Es9maUyWdJXWKckKy9s1+vT+DEgAt+PBb9lxPaake/0EDUsHehloKGv9v1zimS2V3gpFAcQXubvc1Rgci2sDPQ==", "license": "MIT", "dependencies": { "bare-events": "^2.2.0", @@ -18783,8 +17822,6 @@ }, "node_modules/random-iterate": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/random-iterate/-/random-iterate-1.0.1.tgz", - "integrity": "sha512-Jdsdnezu913Ot8qgKgSgs63XkAjEsnMcS1z+cC6D6TNXsUXsMxy0RpclF2pzGZTEiTXL9BiArdGTEexcv4nqcA==", "license": "MIT" }, "node_modules/randombytes": { @@ -18796,8 +17833,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -18805,8 +17840,6 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", @@ -18820,8 +17853,6 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -18829,8 +17860,6 @@ }, "node_modules/rc4": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/rc4/-/rc4-0.1.5.tgz", - "integrity": "sha512-xdDTNV90z5x5u25Oc871Xnvu7yAr4tV7Eluh0VSvrhUkry39q1k+zkz7xroqHbRq+8PiazySHJPArqifUvz9VA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -19155,8 +18184,6 @@ }, "node_modules/readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -19209,8 +18236,6 @@ }, "node_modules/record-cache": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.2.0.tgz", - "integrity": "sha512-kyy3HWCez2WrotaL3O4fTn0rsIdfRKOdQQcEJ9KpvmKmbffKVvwsloX063EgRUlpJIXHiDQFhJcTbZequ2uTZw==", "license": "MIT", "dependencies": { "b4a": "^1.3.1" @@ -19218,8 +18243,6 @@ }, "node_modules/record-cache/node_modules/b4a": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "license": "Apache-2.0", "peerDependencies": { "react-native-b4a": "*" @@ -19404,8 +18427,6 @@ }, "node_modules/require-addon": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/require-addon/-/require-addon-1.1.0.tgz", - "integrity": "sha512-KbXAD5q2+v1GJnkzd8zzbOxchTkStSyJZ9QwoCq3QwEXAaIlG3wDYRZGzVD357jmwaGY7hr5VaoEAL0BkF0Kvg==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -19569,8 +18590,6 @@ }, "node_modules/ripemd160": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "license": "MIT", "dependencies": { "hash-base": "^3.1.2", @@ -19607,8 +18626,6 @@ }, "node_modules/run-parallel-limit": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "funding": [ { "type": "github", @@ -19630,8 +18647,6 @@ }, "node_modules/run-series": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", "funding": [ { "type": "github", @@ -19650,8 +18665,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -19735,8 +18748,6 @@ }, "node_modules/sax": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "license": "ISC" }, "node_modules/scheduler": { @@ -19748,8 +18759,6 @@ }, "node_modules/seed-random": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", "license": "MIT" }, "node_modules/semver": { @@ -19830,8 +18839,6 @@ }, "node_modules/sha.js": { "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.4", @@ -19850,8 +18857,6 @@ }, "node_modules/sharp": { "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, @@ -19893,8 +18898,6 @@ }, "node_modules/sharp/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "optional": true, "bin": { @@ -20009,8 +19012,6 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "funding": [ { "type": "github", @@ -20029,8 +19030,6 @@ }, "node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "funding": [ { "type": "github", @@ -20066,8 +19065,6 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -20076,8 +19073,6 @@ }, "node_modules/socks": { "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "license": "MIT", "dependencies": { "ip-address": "^10.0.1", @@ -20090,8 +19085,6 @@ }, "node_modules/socks/node_modules/ip-address": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "license": "MIT", "engines": { "node": ">= 12" @@ -20131,8 +19124,6 @@ }, "node_modules/speed-limiter": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/speed-limiter/-/speed-limiter-1.0.2.tgz", - "integrity": "sha512-Ax+TbUOho84bWUc3AKqWtkIvAIVws7d6QI4oJkgH4yQ5Yil+lR3vjd/7qd51dHKGzS5bFxg0++QwyNRN7s6rZA==", "license": "MIT", "dependencies": { "limiter": "^1.1.5", @@ -20141,8 +19132,6 @@ }, "node_modules/split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "license": "MIT", "dependencies": { "through": "2" @@ -20153,8 +19142,6 @@ }, "node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, "node_modules/stable-hash": { @@ -20209,8 +19196,6 @@ }, "node_modules/streamx": { "version": "2.22.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", - "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", @@ -20222,8 +19207,6 @@ }, "node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "license": "MIT" }, "node_modules/string-length": { @@ -20396,8 +19379,6 @@ }, "node_modules/string2compact": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string2compact/-/string2compact-2.0.1.tgz", - "integrity": "sha512-Bm/T8lHMTRXw+u83LE+OW7fXmC/wM+Mbccfdo533ajSBNxddDHlRrvxE49NdciGHgXkUQM5WYskJ7uTkbBUI0A==", "license": "MIT", "dependencies": { "addr-to-ip-port": "^2.0.0", @@ -20491,8 +19472,6 @@ }, "node_modules/styled-jsx": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "license": "MIT", "dependencies": { "client-only": "0.0.1" @@ -20544,6 +19523,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20795,8 +19775,6 @@ }, "node_modules/tar-fs": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "license": "MIT", "dependencies": { "chownr": "^1.1.1", @@ -20807,8 +19785,6 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "license": "MIT", "dependencies": { "bl": "^4.0.3", @@ -20823,8 +19799,6 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -20837,8 +19811,6 @@ }, "node_modules/tar-stream/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -20898,8 +19870,6 @@ }, "node_modules/text-decoder": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" @@ -20907,8 +19877,6 @@ }, "node_modules/text-decoder/node_modules/b4a": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "license": "Apache-2.0", "peerDependencies": { "react-native-b4a": "*" @@ -20921,6 +19889,7 @@ }, "node_modules/text-table": { "version": "0.2.0", + "dev": true, "license": "MIT" }, "node_modules/thenify": { @@ -21051,26 +20020,18 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, "node_modules/throughput": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/throughput/-/throughput-1.0.2.tgz", - "integrity": "sha512-jvK1ZXuhsggjb3qYQjMiU/AVYYiTeqT5thWvYR2yuy2LGM84P5MSSyAinwHahGsdBYKR9m9HncVR/3f3nFKkxg==", "license": "MIT" }, "node_modules/thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "license": "MIT" }, "node_modules/timeout-refresh": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/timeout-refresh/-/timeout-refresh-1.0.3.tgz", - "integrity": "sha512-Mz0CX4vBGM5lj8ttbIFt7o4ZMxk/9rgudJRh76EvB7xXZMur7T/cjRiH2w4Fmkq0zxf2QpM8IFvOSRn8FEu3gA==", "license": "MIT", "optional": true }, @@ -21094,8 +20055,6 @@ }, "node_modules/to-buffer": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "license": "MIT", "dependencies": { "isarray": "^2.0.5", @@ -21108,8 +20067,6 @@ }, "node_modules/to-buffer/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, "node_modules/to-regex-range": { @@ -21128,8 +20085,6 @@ }, "node_modules/torrent-discovery": { "version": "11.0.19", - "resolved": "https://registry.npmjs.org/torrent-discovery/-/torrent-discovery-11.0.19.tgz", - "integrity": "sha512-BLhdj7o0px+u72UuhJmq6CB0LBkZOa1nwgbd5ktyTELJlvcRL8EoxSSmSpzMOIScLGgslh1uLaAy/POhLpagtg==", "funding": [ { "type": "github", @@ -21158,8 +20113,6 @@ }, "node_modules/torrent-piece": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/torrent-piece/-/torrent-piece-3.0.2.tgz", - "integrity": "sha512-K1A5tZ3BolFrUtnBpk9iDg8av1na0OgQ7E0IlA9tj0bcsPhLhzvln+oMtMmtkqAwmUsbNCilRm2ymUdZg0rVbQ==", "funding": [ { "type": "github", @@ -21184,8 +20137,6 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, "node_modules/tree-sitter": { @@ -21270,8 +20221,6 @@ }, "node_modules/ts-custom-error": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", - "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -21356,8 +20305,6 @@ }, "node_modules/ts-log": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.7.tgz", - "integrity": "sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==", "license": "MIT" }, "node_modules/ts-mixer": { @@ -21396,8 +20343,6 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -21415,8 +20360,6 @@ }, "node_modules/tweetnacl": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", "license": "Unlicense" }, "node_modules/type-check": { @@ -21440,8 +20383,6 @@ }, "node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" @@ -21521,8 +20462,6 @@ }, "node_modules/typeforce": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", "license": "MIT" }, "node_modules/types-ramda": { @@ -21557,8 +20496,6 @@ }, "node_modules/uint8-util": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.5.tgz", - "integrity": "sha512-/QxVQD7CttWpVUKVPz9znO+3Dd4BdTSnFQ7pv/4drVhC9m4BaL2LFHTkJn6EsYoxT79VDq/2Gg8L0H22PrzyMw==", "license": "MIT", "dependencies": { "base64-arraybuffer": "^1.0.2" @@ -21566,8 +20503,6 @@ }, "node_modules/uint8-varint": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", - "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arraylist": "^2.0.0", @@ -21576,8 +20511,6 @@ }, "node_modules/uint8array-tools": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", - "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -21585,8 +20518,6 @@ }, "node_modules/uint8arraylist": { "version": "2.4.8", - "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", - "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arrays": "^5.0.1" @@ -21594,8 +20525,6 @@ }, "node_modules/uint8arrays": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" @@ -21737,14 +20666,10 @@ }, "node_modules/unordered-array-remove": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", - "integrity": "sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==", "license": "MIT" }, "node_modules/unordered-set": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unordered-set/-/unordered-set-2.0.1.tgz", - "integrity": "sha512-eUmNTPzdx+q/WvOHW0bgGYLWvWHNT3PTKEQLg0MAQhc0AHASHVHoP/9YytYd4RBVariqno/mEUhVZN98CmD7bg==", "license": "MIT", "optional": true }, @@ -21877,8 +20802,6 @@ }, "node_modules/ut_metadata": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-4.0.3.tgz", - "integrity": "sha512-2tovup0VDYpT8t8+EhhhKBmbgIyiYyJQZ+Hf+/61+SvjuRS2MEeA5CiSARP4q+9/83Wu09OsGrUre/Zv6OI5NA==", "funding": [ { "type": "github", @@ -21906,8 +20829,6 @@ }, "node_modules/ut_pex": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/ut_pex/-/ut_pex-4.0.4.tgz", - "integrity": "sha512-isVTbp2TKGoMOu+4Zh/i6ijpYr0VG83xjRPgCXaUjKzgXXndjCMWg32/9kZjubD+kxEXcmXMkoS8IttS9FZE8g==", "funding": [ { "type": "github", @@ -21934,8 +20855,6 @@ }, "node_modules/utf-8-validate": { "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -21949,8 +20868,6 @@ }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -21973,8 +20890,6 @@ }, "node_modules/utp-native": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/utp-native/-/utp-native-2.5.3.tgz", - "integrity": "sha512-sWTrWYXPhhWJh+cS2baPzhaZc89zwlWCfwSthUjGhLkZztyPhcQllo+XVVCbNGi7dhyRlxkWxN4NKU6FbA9Y8w==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -21994,8 +20909,6 @@ }, "node_modules/utp-native/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "optional": true, "dependencies": { @@ -22009,8 +20922,6 @@ }, "node_modules/utp-native/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "optional": true, "dependencies": { @@ -22050,8 +20961,6 @@ }, "node_modules/varuint-bitcoin": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-2.0.0.tgz", - "integrity": "sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog==", "license": "MIT", "dependencies": { "uint8array-tools": "^0.0.8" @@ -22059,8 +20968,6 @@ }, "node_modules/varuint-bitcoin/node_modules/uint8array-tools": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.8.tgz", - "integrity": "sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -22127,8 +21034,6 @@ }, "node_modules/vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "license": "MIT" }, "node_modules/walker": { @@ -22141,8 +21046,6 @@ }, "node_modules/web-encoding": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", "license": "MIT", "dependencies": { "util": "^0.12.3" @@ -22165,8 +21068,6 @@ }, "node_modules/webcrypto-core": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", - "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.13", @@ -22178,8 +21079,6 @@ }, "node_modules/webextension-polyfill": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", - "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", "license": "MPL-2.0" }, "node_modules/webgl-constants": { @@ -22191,14 +21090,10 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/webrtc-polyfill": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/webrtc-polyfill/-/webrtc-polyfill-1.1.10.tgz", - "integrity": "sha512-sOn0bj3/noUdzQX7rvk0jFbBurqWDGGo2ipl+WfgoOe/x3cxbGLk/ZUY+WHCISSlLaIeBumi1X3wxQZnUESExQ==", "license": "MIT", "dependencies": { "node-datachannel": "^v0.12.0", @@ -22210,8 +21105,6 @@ }, "node_modules/webtorrent": { "version": "2.8.4", - "resolved": "https://registry.npmjs.org/webtorrent/-/webtorrent-2.8.4.tgz", - "integrity": "sha512-OTzeMVa6r9GXzjj428HC5gSi6oRKFEqOpR5cwQ8+GtbYgQz6PF6y3tzqnVFf6xWvnKcoZiabpHud3gx01Cbt2A==", "funding": [ { "type": "github", @@ -22277,8 +21170,6 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -22366,8 +21257,6 @@ }, "node_modules/which-runtime": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/which-runtime/-/which-runtime-1.3.2.tgz", - "integrity": "sha512-5kwCfWml7+b2NO7KrLMhYihjRx0teKkd3yGp1Xk5Vaf2JGdSh+rgVhEALAD9c/59dP+YwJHXoEO7e8QPy7gOkw==", "license": "Apache-2.0", "optional": true }, @@ -22391,8 +21280,6 @@ }, "node_modules/wif": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==", "license": "MIT", "dependencies": { "bs58check": "<3.0.0" @@ -22400,8 +21287,6 @@ }, "node_modules/wif/node_modules/base-x": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" @@ -22409,8 +21294,6 @@ }, "node_modules/wif/node_modules/bs58": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "license": "MIT", "dependencies": { "base-x": "^3.0.2" @@ -22418,8 +21301,6 @@ }, "node_modules/wif/node_modules/bs58check": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "license": "MIT", "dependencies": { "bs58": "^4.0.0", @@ -22526,6 +21407,7 @@ }, "node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -22537,8 +21419,6 @@ }, "node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -22569,8 +21449,6 @@ }, "node_modules/xml2js": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "license": "MIT", "dependencies": { "sax": ">=0.6.0", @@ -22582,8 +21460,6 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "license": "MIT", "engines": { "node": ">=4.0" diff --git a/package.json b/package.json index 74bb7675..94fff7bd 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,10 @@ "@auth/prisma-adapter": "^1.6.0", "@hookform/resolvers": "^3.9.0", "@jinglescode/nostr-chat-plugin": "^0.0.11", - "@meshsdk/core": "^1.9.0-beta.77", - "@meshsdk/core-csl": "^1.9.0-beta.77", - "@meshsdk/core-cst": "^1.9.0-beta.77", - "@meshsdk/react": "^1.9.0-beta.77", + "@meshsdk/core": "^1.9.0-beta.86", + "@meshsdk/core-csl": "^1.9.0-beta.86", + "@meshsdk/core-cst": "^1.9.0-beta.86", + "@meshsdk/react": "^1.9.0-beta.86", "@octokit/core": "^6.1.2", "@prisma/client": "^6.17.1", "@radix-ui/react-accordion": "^1.2.0", @@ -55,6 +55,7 @@ "@trpc/react-query": "^11.0.0-rc.446", "@trpc/server": "^11.0.0-rc.446", "@vercel/blob": "^0.23.4", + "blakejs": "^1.2.1", "busboy": "^1.6.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", diff --git a/prisma/migrations/20250101000000_add_crowdfund_gov_extension_table/migration.sql b/prisma/migrations/20250101000000_add_crowdfund_gov_extension_table/migration.sql new file mode 100644 index 00000000..4a535adb --- /dev/null +++ b/prisma/migrations/20250101000000_add_crowdfund_gov_extension_table/migration.sql @@ -0,0 +1,68 @@ +-- CreateTable +CREATE TABLE "CrowdfundGovExtension" ( + "id" TEXT NOT NULL, + "crowdfundId" TEXT NOT NULL, + "gov_action_period" INTEGER, + "delegate_pool_id" TEXT, + "gov_action" JSONB, + "stake_register_deposit" INTEGER, + "drep_register_deposit" INTEGER, + "gov_deposit" INTEGER, + "govActionMetadataUrl" TEXT, + "govActionMetadataHash" TEXT, + "drepMetadataUrl" TEXT, + "drepMetadataHash" TEXT, + "govAddress" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "CrowdfundGovExtension_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "CrowdfundGovExtension_crowdfundId_key" ON "CrowdfundGovExtension"("crowdfundId"); + +-- AddForeignKey +ALTER TABLE "CrowdfundGovExtension" ADD CONSTRAINT "CrowdfundGovExtension_crowdfundId_fkey" FOREIGN KEY ("crowdfundId") REFERENCES "Crowdfund"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- Migrate existing data from govDatum JSON to new table +INSERT INTO "CrowdfundGovExtension" ( + "id", + "crowdfundId", + "gov_action_period", + "delegate_pool_id", + "gov_action", + "stake_register_deposit", + "drep_register_deposit", + "gov_deposit", + "govActionMetadataUrl", + "govActionMetadataHash", + "drepMetadataUrl", + "drepMetadataHash", + "govAddress", + "createdAt", + "updatedAt" +) +SELECT + gen_random_uuid()::text as "id", + c.id as "crowdfundId", + (c."govDatum"::jsonb->>'gov_action_period')::integer as "gov_action_period", + c."govDatum"::jsonb->>'delegate_pool_id' as "delegate_pool_id", + c."govDatum"::jsonb->'gov_action' as "gov_action", + (c."govDatum"::jsonb->>'stake_register_deposit')::integer as "stake_register_deposit", + (c."govDatum"::jsonb->>'drep_register_deposit')::integer as "drep_register_deposit", + (c."govDatum"::jsonb->>'gov_deposit')::integer as "gov_deposit", + c."govDatum"::jsonb->>'govActionMetadataUrl' as "govActionMetadataUrl", + c."govDatum"::jsonb->>'govActionMetadataHash' as "govActionMetadataHash", + c."govDatum"::jsonb->>'drepMetadataUrl' as "drepMetadataUrl", + c."govDatum"::jsonb->>'drepMetadataHash' as "drepMetadataHash", + COALESCE(c."govAddress", c."govDatum"::jsonb->>'govAddress') as "govAddress", + c."createdAt" as "createdAt", + CURRENT_TIMESTAMP as "updatedAt" +FROM "Crowdfund" c +WHERE c."govDatum" IS NOT NULL + AND c."govDatum" != '' + AND NOT EXISTS ( + SELECT 1 FROM "CrowdfundGovExtension" cge WHERE cge."crowdfundId" = c.id + ); + diff --git a/prisma/migrations/20250124120000_add_gov_action_anchor_field/migration.sql b/prisma/migrations/20250124120000_add_gov_action_anchor_field/migration.sql new file mode 100644 index 00000000..a7fc1e66 --- /dev/null +++ b/prisma/migrations/20250124120000_add_gov_action_anchor_field/migration.sql @@ -0,0 +1,7 @@ +-- AlterTable +ALTER TABLE "Crowdfund" ADD COLUMN "govActionAnchor" TEXT; + + + + + diff --git a/prisma/migrations/20250806050340_add_crowdfund/migration.sql b/prisma/migrations/20250806050340_add_crowdfund/migration.sql new file mode 100644 index 00000000..020663e6 --- /dev/null +++ b/prisma/migrations/20250806050340_add_crowdfund/migration.sql @@ -0,0 +1,12 @@ +-- CreateTable +CREATE TABLE "Crowdfund" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "proposerKeyHashR0" TEXT NOT NULL, + "authTokenId" TEXT, + "datum" TEXT, + "address" TEXT, + + CONSTRAINT "Crowdfund_pkey" PRIMARY KEY ("id") +); diff --git a/prisma/migrations/20250825090537_add_param_utxo/migration.sql b/prisma/migrations/20250825090537_add_param_utxo/migration.sql new file mode 100644 index 00000000..9b4d4937 --- /dev/null +++ b/prisma/migrations/20250825090537_add_param_utxo/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Crowdfund" ADD COLUMN "paramUtxo" TEXT; diff --git a/prisma/migrations/20250828113754_add_date_crowdfund/migration.sql b/prisma/migrations/20250828113754_add_date_crowdfund/migration.sql new file mode 100644 index 00000000..d86bb0cb --- /dev/null +++ b/prisma/migrations/20250828113754_add_date_crowdfund/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "public"."Crowdfund" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/prisma/migrations/20250909122657_add_gov_crowdfund/migration.sql b/prisma/migrations/20250909122657_add_gov_crowdfund/migration.sql new file mode 100644 index 00000000..548b2332 --- /dev/null +++ b/prisma/migrations/20250909122657_add_gov_crowdfund/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "Crowdfund" ADD COLUMN "govAddress" TEXT, +ADD COLUMN "govDatum" TEXT; diff --git a/prisma/migrations/20251106142106_add_crowdfund_gov_extension_table/migration.sql b/prisma/migrations/20251106142106_add_crowdfund_gov_extension_table/migration.sql new file mode 100644 index 00000000..4a535adb --- /dev/null +++ b/prisma/migrations/20251106142106_add_crowdfund_gov_extension_table/migration.sql @@ -0,0 +1,68 @@ +-- CreateTable +CREATE TABLE "CrowdfundGovExtension" ( + "id" TEXT NOT NULL, + "crowdfundId" TEXT NOT NULL, + "gov_action_period" INTEGER, + "delegate_pool_id" TEXT, + "gov_action" JSONB, + "stake_register_deposit" INTEGER, + "drep_register_deposit" INTEGER, + "gov_deposit" INTEGER, + "govActionMetadataUrl" TEXT, + "govActionMetadataHash" TEXT, + "drepMetadataUrl" TEXT, + "drepMetadataHash" TEXT, + "govAddress" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "CrowdfundGovExtension_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "CrowdfundGovExtension_crowdfundId_key" ON "CrowdfundGovExtension"("crowdfundId"); + +-- AddForeignKey +ALTER TABLE "CrowdfundGovExtension" ADD CONSTRAINT "CrowdfundGovExtension_crowdfundId_fkey" FOREIGN KEY ("crowdfundId") REFERENCES "Crowdfund"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- Migrate existing data from govDatum JSON to new table +INSERT INTO "CrowdfundGovExtension" ( + "id", + "crowdfundId", + "gov_action_period", + "delegate_pool_id", + "gov_action", + "stake_register_deposit", + "drep_register_deposit", + "gov_deposit", + "govActionMetadataUrl", + "govActionMetadataHash", + "drepMetadataUrl", + "drepMetadataHash", + "govAddress", + "createdAt", + "updatedAt" +) +SELECT + gen_random_uuid()::text as "id", + c.id as "crowdfundId", + (c."govDatum"::jsonb->>'gov_action_period')::integer as "gov_action_period", + c."govDatum"::jsonb->>'delegate_pool_id' as "delegate_pool_id", + c."govDatum"::jsonb->'gov_action' as "gov_action", + (c."govDatum"::jsonb->>'stake_register_deposit')::integer as "stake_register_deposit", + (c."govDatum"::jsonb->>'drep_register_deposit')::integer as "drep_register_deposit", + (c."govDatum"::jsonb->>'gov_deposit')::integer as "gov_deposit", + c."govDatum"::jsonb->>'govActionMetadataUrl' as "govActionMetadataUrl", + c."govDatum"::jsonb->>'govActionMetadataHash' as "govActionMetadataHash", + c."govDatum"::jsonb->>'drepMetadataUrl' as "drepMetadataUrl", + c."govDatum"::jsonb->>'drepMetadataHash' as "drepMetadataHash", + COALESCE(c."govAddress", c."govDatum"::jsonb->>'govAddress') as "govAddress", + c."createdAt" as "createdAt", + CURRENT_TIMESTAMP as "updatedAt" +FROM "Crowdfund" c +WHERE c."govDatum" IS NOT NULL + AND c."govDatum" != '' + AND NOT EXISTS ( + SELECT 1 FROM "CrowdfundGovExtension" cge WHERE cge."crowdfundId" = c.id + ); + diff --git a/prisma/migrations/20251116165508_change_deposit_fields_to_bigint/migration.sql b/prisma/migrations/20251116165508_change_deposit_fields_to_bigint/migration.sql new file mode 100644 index 00000000..1c37b734 --- /dev/null +++ b/prisma/migrations/20251116165508_change_deposit_fields_to_bigint/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "CrowdfundGovExtension" ALTER COLUMN "stake_register_deposit" SET DATA TYPE BIGINT USING "stake_register_deposit"::BIGINT; +ALTER TABLE "CrowdfundGovExtension" ALTER COLUMN "drep_register_deposit" SET DATA TYPE BIGINT USING "drep_register_deposit"::BIGINT; +ALTER TABLE "CrowdfundGovExtension" ALTER COLUMN "gov_deposit" SET DATA TYPE BIGINT USING "gov_deposit"::BIGINT; + diff --git a/prisma/migrations/20251124092314_add_spend_stake_ref_scripts/migration.sql b/prisma/migrations/20251124092314_add_spend_stake_ref_scripts/migration.sql new file mode 100644 index 00000000..0418e79f --- /dev/null +++ b/prisma/migrations/20251124092314_add_spend_stake_ref_scripts/migration.sql @@ -0,0 +1,4 @@ +-- AlterTable +ALTER TABLE "Crowdfund" ADD COLUMN "spendRefScript" TEXT, +ADD COLUMN "stakeRefScript" TEXT; + diff --git a/prisma/migrations/20251124094500_add_ref_address/migration.sql b/prisma/migrations/20251124094500_add_ref_address/migration.sql new file mode 100644 index 00000000..1bb5c6fe --- /dev/null +++ b/prisma/migrations/20251124094500_add_ref_address/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "Crowdfund" ADD COLUMN "refAddress" TEXT; + diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 47e88233..b5dabd2d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -101,6 +101,26 @@ model Ballot { createdAt DateTime @default(now()) } +model Crowdfund { + id String @id @default(cuid()) + name String + description String? + proposerKeyHashR0 String + authTokenId String? + datum String? + address String? + paramUtxo String? // JSON string containing { txHash: string, outputIndex: number } + govDatum String? // Stores governance configuration JSON for gov-crowdfund v2 + govAddress String? // Optional governance-specific address metadata + spendRefScript String? // JSON string containing { txHash: string, outputIndex: number } + stakeRefScript String? // JSON string containing { txHash: string, outputIndex: number } + refAddress String? // Address where reference scripts are stored + drepAnchor String? // JSON string containing { url: string, hash: string } + govActionAnchor String? // JSON string containing { url: string, hash: string } + govState Int @default(0) // Governance state: 0=Crowdfund, 1=RegisteredCerts, 2=Proposed, 3=Voted, 4=Refundable + createdAt DateTime @default(now()) +} + model Proxy { id String @id @default(cuid()) walletId String? @@ -144,3 +164,11 @@ model Migration { @@index([status]) @@index([createdAt]) } + +model UrlShortener { + id String @id @default(cuid()) + shortId String @unique + originalUrl String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/src/__tests__/crowdfund-governance-utils.test.ts b/src/__tests__/crowdfund-governance-utils.test.ts new file mode 100644 index 00000000..388e2436 --- /dev/null +++ b/src/__tests__/crowdfund-governance-utils.test.ts @@ -0,0 +1,49 @@ +import { describe, expect, it } from "@jest/globals"; +import { mapGovExtensionToConfig } from "@/components/crowdfund/UI/utils"; + +describe("mapGovExtensionToConfig", () => { + it("maps governance extension payload to config with numeric coercion", () => { + const config = mapGovExtensionToConfig({ + delegate_pool_id: "pool1xyz", + gov_action_period: 8, + stake_register_deposit: "2500000", + drep_register_deposit: 600000000, + gov_deposit: "750000000", + govActionMetadataUrl: "https://example.com/ga.json", + govActionMetadataHash: "abcd1234", + drepMetadataUrl: "https://example.com/drep.json", + drepMetadataHash: "ffff1111", + }); + + expect(config).toEqual({ + delegatePoolId: "pool1xyz", + govActionPeriod: 8, + stakeRegisterDeposit: 2_500_000, + drepRegisterDeposit: 600_000_000, + govDeposit: 750_000_000, + anchorGovAction: { + url: "https://example.com/ga.json", + hash: "abcd1234", + }, + anchorDrep: { + url: "https://example.com/drep.json", + hash: "ffff1111", + }, + }); + }); + + it("throws when delegate_pool_id is missing", () => { + expect(() => + mapGovExtensionToConfig({ + stake_register_deposit: 2_000_000, + }), + ).toThrow("delegate_pool_id is missing"); + }); + + it("throws when extension payload is undefined", () => { + expect(() => mapGovExtensionToConfig()).toThrow( + "Governance extension data is required", + ); + }); +}); + diff --git a/src/__tests__/crowdfund-withdraw-offchain.test.ts b/src/__tests__/crowdfund-withdraw-offchain.test.ts new file mode 100644 index 00000000..128665ac --- /dev/null +++ b/src/__tests__/crowdfund-withdraw-offchain.test.ts @@ -0,0 +1,381 @@ +import { describe, it, expect, beforeEach, jest } from '@jest/globals'; +import { MeshCrowdfundContract } from '../components/crowdfund/base-crowdfund/offchain'; +import { MeshTxBuilder, UTxO } from '@meshsdk/core'; +import { CrowdfundDatumTS } from '../components/crowdfund/crowdfund'; +import { mockSlotConfig, createSlotConfigFromTime, testSanchoSlotResolver } from './testUtils'; + +// Mock MeshTxBuilder +jest.mock('@meshsdk/core', () => { + const actual = jest.requireActual('@meshsdk/core'); + return { + ...actual, + MeshTxBuilder: jest.fn().mockImplementation(() => ({ + setNetwork: jest.fn().mockReturnThis(), + spendingPlutusScriptV3: jest.fn().mockReturnThis(), + txIn: jest.fn().mockReturnThis(), + mintPlutusScriptV3: jest.fn().mockReturnThis(), + mint: jest.fn().mockReturnThis(), + mintingScript: jest.fn().mockReturnThis(), + mintRedeemerValue: jest.fn().mockReturnThis(), + txInRedeemerValue: jest.fn().mockReturnThis(), + txInScript: jest.fn().mockReturnThis(), + txInInlineDatumPresent: jest.fn().mockReturnThis(), + txOut: jest.fn().mockReturnThis(), + txOutInlineDatumValue: jest.fn().mockReturnThis(), + txInCollateral: jest.fn().mockReturnThis(), + changeAddress: jest.fn().mockReturnThis(), + selectUtxosFrom: jest.fn().mockReturnThis(), + invalidHereafter: jest.fn().mockReturnThis(), + complete: jest.fn().mockResolvedValue('mock-tx-hex'), + fetcher: { + fetchAddressUTxOs: jest.fn(), + }, + })), + }; +}); + +// Mock resolveScriptHash +jest.mock('@meshsdk/core', () => { + const actual = jest.requireActual('@meshsdk/core'); + return { + ...actual, + resolveScriptHash: jest.fn((script: string) => `policy-${script.slice(0, 8)}`), + }; +}); + +// Mock resolveSlotNo +jest.mock('@meshsdk/common', () => { + const actual = jest.requireActual('@meshsdk/common'); + return { + ...actual, + resolveSlotNo: jest.fn(() => '12345678'), + }; +}); + +const mockWallet = { + getUtxos: jest.fn(), + getCollateral: jest.fn(), + getUsedAddresses: jest.fn(), + getUnusedAddresses: jest.fn(), + signTx: jest.fn(), + submitTx: jest.fn(), +}; + +const mockFetcher = { + fetchAddressUTxOs: jest.fn(), +}; + +const mockGovernanceConfig = { + delegatePoolId: "pool1testmock", + govActionPeriod: 6, + stakeRegisterDeposit: 2_000_000, + drepRegisterDeposit: 500_000_000, + govDeposit: 100_000_000, +}; + +const createMockUTxO = (lovelace: string, address: string): UTxO => ({ + input: { + txHash: 'mock-tx-hash', + outputIndex: 0, + }, + output: { + address, + amount: [ + { + unit: 'lovelace', + quantity: lovelace, + }, + { + unit: 'mock-policy-id', + quantity: '1', + }, + ], + datum: undefined, + datumHash: undefined, + }, +}); + +const createMockDatum = (): CrowdfundDatumTS => ({ + stake_script: 'stake-script-hash', + share_token: 'share-token-policy-id', + crowdfund_address: 'addr_test1qzk3k4...', + fundraise_target: 100000000000, // 100000 ADA + current_fundraised_amount: 5000000000, // 5000 ADA + allow_over_subscription: false, + deadline: Date.now() + 30 * 24 * 60 * 60 * 1000, + expiry_buffer: 86400, + min_charge: 2000000, // 2 ADA +}); + +describe('MeshCrowdfundContract withdrawCrowdfund', () => { + let contract: MeshCrowdfundContract; + let meshTxBuilder: any; + + beforeEach(() => { + jest.clearAllMocks(); + + // Create mock MeshTxBuilder instance + meshTxBuilder = { + setNetwork: jest.fn().mockReturnThis(), + spendingPlutusScriptV3: jest.fn().mockReturnThis(), + txIn: jest.fn().mockReturnThis(), + mintPlutusScriptV3: jest.fn().mockReturnThis(), + mint: jest.fn().mockReturnThis(), + mintingScript: jest.fn().mockReturnThis(), + mintRedeemerValue: jest.fn().mockReturnThis(), + txInRedeemerValue: jest.fn().mockReturnThis(), + txInScript: jest.fn().mockReturnThis(), + txInInlineDatumPresent: jest.fn().mockReturnThis(), + txOut: jest.fn().mockReturnThis(), + txOutInlineDatumValue: jest.fn().mockReturnThis(), + txInCollateral: jest.fn().mockReturnThis(), + changeAddress: jest.fn().mockReturnThis(), + selectUtxosFrom: jest.fn().mockReturnThis(), + invalidHereafter: jest.fn().mockReturnThis(), + complete: jest.fn().mockResolvedValue('mock-tx-hex'), + fetcher: mockFetcher, + }; + + // Setup wallet mocks + const mockUtxos = [ + createMockUTxO('10000000', 'addr_test1...'), // 10 ADA + ]; + const mockCollateral = createMockUTxO('5000000', 'addr_test1...'); // 5 ADA + + mockWallet.getUtxos = jest.fn().mockResolvedValue(mockUtxos); + mockWallet.getCollateral = jest.fn().mockResolvedValue([mockCollateral]); + mockWallet.getUsedAddresses = jest.fn().mockResolvedValue(['addr_test1...']); + mockWallet.getUnusedAddresses = jest.fn().mockResolvedValue([]); + + contract = new MeshCrowdfundContract( + { + mesh: meshTxBuilder, + fetcher: mockFetcher, + wallet: mockWallet as any, + networkId: 0, // testnet + }, + { + proposerKeyHash: 'test-proposer-hash', + paramUtxo: { txHash: 'mock-tx-hash', outputIndex: 0 }, + governance: mockGovernanceConfig, + }, + ); + + // Set crowdfund address + contract.crowdfundAddress = 'addr_test1qzk3k4...'; + }); + + describe('Successful withdrawals', () => { + it('should successfully create withdrawal transaction', async () => { + const datum = createMockDatum(); + const withdrawAmount = 1000000000; // 1000 ADA + + // Mock AuthToken UTxO at crowdfund address + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + authTokenUtxo.output.amount.push({ + unit: 'mock-policy-id-auth-token', + quantity: '1', + }); + + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + const result = await contract.withdrawCrowdfund(withdrawAmount, datum); + + expect(result).toHaveProperty('tx'); + expect(result.tx).toBe('mock-tx-hex'); + + // Verify transaction building chain was called + expect(meshTxBuilder.spendingPlutusScriptV3).toHaveBeenCalled(); + expect(meshTxBuilder.txIn).toHaveBeenCalled(); + expect(meshTxBuilder.mintPlutusScriptV3).toHaveBeenCalled(); + expect(meshTxBuilder.complete).toHaveBeenCalled(); + }); + + it('should calculate correct new crowdfund amount after withdrawal', async () => { + const datum = createMockDatum(); + const withdrawAmount = 2000000000; // 2000 ADA + const initialAmount = '5000000000'; // 5000 ADA + + const authTokenUtxo = createMockUTxO(initialAmount, contract.crowdfundAddress!); + authTokenUtxo.output.amount.push({ + unit: 'mock-policy-id-auth-token', + quantity: '1', + }); + + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await contract.withdrawCrowdfund(withdrawAmount, datum); + + // Verify txOut was called with reduced amount + const txOutCall = meshTxBuilder.txOut.mock.calls[0]; + expect(txOutCall).toBeDefined(); + + const newAmount = txOutCall[1]; // Second argument is the amount array + const lovelaceAmount = newAmount.find((amt: any) => amt.unit === 'lovelace'); + expect(lovelaceAmount).toBeDefined(); + expect(Number(lovelaceAmount.quantity)).toBe(3000000000); // 5000 - 2000 = 3000 ADA + }); + + it('should update datum with reduced current_fundraised_amount', async () => { + const datum = createMockDatum(); + const withdrawAmount = 1500000000; // 1500 ADA + + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + authTokenUtxo.output.amount.push({ + unit: 'mock-policy-id-auth-token', + quantity: '1', + }); + + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await contract.withdrawCrowdfund(withdrawAmount, datum); + + // Verify txOutInlineDatumValue was called (indicating datum was updated) + expect(meshTxBuilder.txOutInlineDatumValue).toHaveBeenCalled(); + }); + + it('should mint negative share tokens (burn)', async () => { + const datum = createMockDatum(); + const withdrawAmount = 1000000000; // 1000 ADA + + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + authTokenUtxo.output.amount.push({ + unit: 'mock-policy-id-auth-token', + quantity: '1', + }); + + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await contract.withdrawCrowdfund(withdrawAmount, datum); + + // Verify mint was called with negative amount + const mintCall = meshTxBuilder.mint.mock.calls[0]; + expect(mintCall).toBeDefined(); + expect(mintCall[0]).toBe((-withdrawAmount).toString()); // Negative amount for burning + }); + }); + + describe('Error handling', () => { + it('should throw error if no UTxOs found', async () => { + const datum = createMockDatum(); + mockWallet.getUtxos = jest.fn().mockResolvedValue([]); + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('No UTxOs found'); + }); + + it('should throw error if crowdfund address not set', async () => { + const datum = createMockDatum(); + contract.crowdfundAddress = undefined; + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('Crowdfund address not set'); + }); + + it('should throw error if blockchain provider not found', async () => { + const datum = createMockDatum(); + meshTxBuilder.fetcher = null; + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('Blockchain provider not found'); + }); + + it('should throw error if no AuthToken found at crowdfund address', async () => { + const datum = createMockDatum(); + mockFetcher.fetchAddressUTxOs.mockResolvedValue([]); + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('No AuthToken found at crowdfund address'); + }); + + it('should throw error if multiple AuthTokens found', async () => { + const datum = createMockDatum(); + const utxo1 = createMockUTxO('5000000000', contract.crowdfundAddress!); + const utxo2 = createMockUTxO('3000000000', contract.crowdfundAddress!); + + mockFetcher.fetchAddressUTxOs.mockResolvedValue([utxo1, utxo2]); + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('Multiple AuthTokens found'); + }); + + it('should throw error if AuthToken UTxO has no amount', async () => { + const datum = createMockDatum(); + const authTokenUtxo = { + input: { + txHash: 'mock-tx-hash', + outputIndex: 0, + }, + output: { + address: contract.crowdfundAddress!, + amount: undefined, // Missing amount + datum: undefined, + datumHash: undefined, + }, + }; + + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo as any]); + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('No AuthToken amount found'); + }); + + it('should throw error if no collateral found', async () => { + const datum = createMockDatum(); + mockWallet.getCollateral = jest.fn().mockResolvedValue([]); + + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await expect( + contract.withdrawCrowdfund(1000000000, datum), + ).rejects.toThrow('No collateral found'); + }); + }); + + describe('Transaction building', () => { + it('should use correct redeemer for withdrawal (mConStr2)', async () => { + const datum = createMockDatum(); + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await contract.withdrawCrowdfund(1000000000, datum); + + // Verify txInRedeemerValue was called (for the script redeemer) + expect(meshTxBuilder.txInRedeemerValue).toHaveBeenCalled(); + }); + + it('should set transaction TTL', async () => { + const datum = createMockDatum(); + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await contract.withdrawCrowdfund(1000000000, datum); + + // Verify invalidHereafter was called + expect(meshTxBuilder.invalidHereafter).toHaveBeenCalled(); + }); + + it('should include collateral in transaction', async () => { + const datum = createMockDatum(); + const authTokenUtxo = createMockUTxO('5000000000', contract.crowdfundAddress!); + mockFetcher.fetchAddressUTxOs.mockResolvedValue([authTokenUtxo]); + + await contract.withdrawCrowdfund(1000000000, datum); + + // Verify txInCollateral was called + expect(meshTxBuilder.txInCollateral).toHaveBeenCalled(); + }); + }); + + // Note: Custom slot configuration tests removed as the implementation + // has been simplified to use environment variable switching between + // normal MeshJS resolvers and Sancho resolver +}); + diff --git a/src/__tests__/crowdfund-withdraw.test.ts b/src/__tests__/crowdfund-withdraw.test.ts new file mode 100644 index 00000000..c99e37c3 --- /dev/null +++ b/src/__tests__/crowdfund-withdraw.test.ts @@ -0,0 +1,287 @@ +import { describe, it, expect, beforeEach, jest } from '@jest/globals'; +import { createCallerFactory } from '@/server/api/root'; +import { appRouter } from '@/server/api/root'; + +// Mock the database +const mockCrowdfund = { + id: 'test-crowdfund-id', + name: 'Test Crowdfund', + proposerKeyHashR0: 'test-proposer-hash', + datum: JSON.stringify({ + stake_script: 'stake-script-hash', + share_token: 'share-token-policy-id', + crowdfund_address: 'addr_test1...', + fundraise_target: 100000000000, // 100000 ADA + current_fundraised_amount: 5000000000, // 5000 ADA + allow_over_subscription: false, + deadline: Date.now() + 30 * 24 * 60 * 60 * 1000, + expiry_buffer: 86400, + min_charge: 2000000, // 2 ADA + }), + authTokenId: 'test-auth-token-id', + address: 'addr_test1...', + paramUtxo: JSON.stringify({ txHash: 'test-tx-hash', outputIndex: 0 }), + createdAt: new Date(), + updatedAt: new Date(), +}; + +const mockDb = { + crowdfund: { + findUnique: jest.fn(), + update: jest.fn(), + create: jest.fn(), + findMany: jest.fn(), + findFirst: jest.fn(), + delete: jest.fn(), + }, +}; + +// Create test context with mocked database +const mockContext = () => ({ + session: null, + db: mockDb as any, +}); + +describe('Crowdfund Withdraw API', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('withdrawCrowdfund', () => { + it('should successfully withdraw funds from a crowdfund', async () => { + const existingCrowdfund = { ...mockCrowdfund }; + mockDb.crowdfund.findUnique.mockResolvedValue(existingCrowdfund); + + const updatedDatum = JSON.parse(existingCrowdfund.datum); + updatedDatum.current_fundraised_amount = 4000000000; // 5000 - 1000 ADA + + mockDb.crowdfund.update.mockResolvedValue({ + ...existingCrowdfund, + datum: JSON.stringify(updatedDatum), + }); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + const result = await caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 1000000000, // 1000 ADA in lovelace + }); + + expect(mockDb.crowdfund.findUnique).toHaveBeenCalledWith({ + where: { id: 'test-crowdfund-id' }, + }); + + expect(mockDb.crowdfund.update).toHaveBeenCalledWith({ + where: { id: 'test-crowdfund-id' }, + data: { + datum: JSON.stringify({ + ...updatedDatum, + current_fundraised_amount: 4000000000, + }), + }, + }); + + const resultDatum = JSON.parse(result.datum); + expect(resultDatum.current_fundraised_amount).toBe(4000000000); + }); + + it('should prevent withdrawing more than available (minimum is 0)', async () => { + const existingCrowdfund = { + ...mockCrowdfund, + datum: JSON.stringify({ + ...JSON.parse(mockCrowdfund.datum), + current_fundraised_amount: 1000000000, // Only 1000 ADA available + }), + }; + + mockDb.crowdfund.findUnique.mockResolvedValue(existingCrowdfund); + + const updatedDatum = JSON.parse(existingCrowdfund.datum); + updatedDatum.current_fundraised_amount = 0; // Should not go negative + + mockDb.crowdfund.update.mockResolvedValue({ + ...existingCrowdfund, + datum: JSON.stringify(updatedDatum), + }); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + const result = await caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 2000000000, // Trying to withdraw 2000 ADA + }); + + const resultDatum = JSON.parse(result.datum); + expect(resultDatum.current_fundraised_amount).toBe(0); + expect(resultDatum.current_fundraised_amount).not.toBeLessThan(0); + }); + + it('should throw error if crowdfund not found', async () => { + mockDb.crowdfund.findUnique.mockResolvedValue(null); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + + await expect( + caller.crowdfund.withdrawCrowdfund({ + id: 'non-existent-id', + amount: 1000000000, + }), + ).rejects.toThrow('Crowdfund not found'); + + expect(mockDb.crowdfund.update).not.toHaveBeenCalled(); + }); + + it('should throw error if datum is missing', async () => { + const crowdfundWithoutDatum = { + ...mockCrowdfund, + datum: null, + }; + + mockDb.crowdfund.findUnique.mockResolvedValue(crowdfundWithoutDatum); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + + await expect( + caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 1000000000, + }), + ).rejects.toThrow('Crowdfund datum missing'); + + expect(mockDb.crowdfund.update).not.toHaveBeenCalled(); + }); + + it('should throw error if datum is invalid JSON', async () => { + const crowdfundWithInvalidDatum = { + ...mockCrowdfund, + datum: 'invalid-json', + }; + + mockDb.crowdfund.findUnique.mockResolvedValue(crowdfundWithInvalidDatum); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + + await expect( + caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 1000000000, + }), + ).rejects.toThrow('Invalid crowdfund datum'); + + expect(mockDb.crowdfund.update).not.toHaveBeenCalled(); + }); + + it('should handle zero withdrawal amount', async () => { + const existingCrowdfund = { ...mockCrowdfund }; + mockDb.crowdfund.findUnique.mockResolvedValue(existingCrowdfund); + + const updatedDatum = JSON.parse(existingCrowdfund.datum); + // Amount should remain the same when withdrawing 0 + updatedDatum.current_fundraised_amount = 5000000000; + + mockDb.crowdfund.update.mockResolvedValue({ + ...existingCrowdfund, + datum: JSON.stringify(updatedDatum), + }); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + const result = await caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 0, + }); + + const resultDatum = JSON.parse(result.datum); + expect(resultDatum.current_fundraised_amount).toBe(5000000000); + }); + + it('should handle complete withdrawal (all funds)', async () => { + const existingCrowdfund = { ...mockCrowdfund }; + mockDb.crowdfund.findUnique.mockResolvedValue(existingCrowdfund); + + const updatedDatum = JSON.parse(existingCrowdfund.datum); + updatedDatum.current_fundraised_amount = 0; + + mockDb.crowdfund.update.mockResolvedValue({ + ...existingCrowdfund, + datum: JSON.stringify(updatedDatum), + }); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + const result = await caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 5000000000, // Withdraw all 5000 ADA + }); + + const resultDatum = JSON.parse(result.datum); + expect(resultDatum.current_fundraised_amount).toBe(0); + }); + + it('should handle datum with missing current_fundraised_amount field', async () => { + const existingCrowdfund = { + ...mockCrowdfund, + datum: JSON.stringify({ + stake_script: 'stake-script-hash', + share_token: 'share-token-policy-id', + crowdfund_address: 'addr_test1...', + fundraise_target: 100000000000, + // current_fundraised_amount is missing + allow_over_subscription: false, + deadline: Date.now() + 30 * 24 * 60 * 60 * 1000, + expiry_buffer: 86400, + min_charge: 2000000, + }), + }; + + mockDb.crowdfund.findUnique.mockResolvedValue(existingCrowdfund); + + const updatedDatum = JSON.parse(existingCrowdfund.datum); + updatedDatum.current_fundraised_amount = Math.max(0, 0 - 1000000000); // Should be 0 + + mockDb.crowdfund.update.mockResolvedValue({ + ...existingCrowdfund, + datum: JSON.stringify(updatedDatum), + }); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + const result = await caller.crowdfund.withdrawCrowdfund({ + id: 'test-crowdfund-id', + amount: 1000000000, + }); + + const resultDatum = JSON.parse(result.datum); + expect(resultDatum.current_fundraised_amount).toBe(0); + }); + }); + + describe('contributeCrowdfund (for comparison)', () => { + it('should successfully contribute to a crowdfund', async () => { + const existingCrowdfund = { ...mockCrowdfund }; + mockDb.crowdfund.findUnique.mockResolvedValue(existingCrowdfund); + + const updatedDatum = JSON.parse(existingCrowdfund.datum); + updatedDatum.current_fundraised_amount = 6000000000; // 5000 + 1000 ADA + + mockDb.crowdfund.update.mockResolvedValue({ + ...existingCrowdfund, + datum: JSON.stringify(updatedDatum), + }); + + const createCaller = createCallerFactory(appRouter); + const caller = createCaller(() => mockContext()); + const result = await caller.crowdfund.contributeCrowdfund({ + id: 'test-crowdfund-id', + amount: 1000000000, // 1000 ADA in lovelace + }); + + const resultDatum = JSON.parse(result.datum); + expect(resultDatum.current_fundraised_amount).toBe(6000000000); + }); + }); +}); + diff --git a/src/__tests__/testUtils.ts b/src/__tests__/testUtils.ts index 0851b302..ded06123 100644 --- a/src/__tests__/testUtils.ts +++ b/src/__tests__/testUtils.ts @@ -1,4 +1,6 @@ import { MultisigKey } from '../utils/multisigSDK'; +import { SlotConfig } from '@meshsdk/common'; +import { resolveSlotNoSancho } from '../components/crowdfund/test_sancho_utils'; // Mock key hashes for testing export const mockKeyHashes = { @@ -130,3 +132,48 @@ export async function createPaymentAndStakeWallet(): Promise { { keyHash: stakeKeyHash, role: 2, name: 'Stake Key 2' }, ]; } + +// Slot configuration testing utilities + +// Simple test configs for backward compatibility +export const mockSlotConfig: SlotConfig = { + zeroTime: 0, // Unix timestamp 0 (1970-01-01 00:00:00 UTC) + zeroSlot: 0, // Start at slot 0 + slotLength: 1000, // 1 second per slot (1000ms) + startEpoch: 0, // Start at epoch 0 + epochLength: 86400, // 1 day per epoch (86400 seconds) +}; + +export const fastSlotConfig: SlotConfig = { + zeroTime: Date.now(), // Start from current time + zeroSlot: 0, + slotLength: 100, // 100ms per slot + startEpoch: 0, + epochLength: 864, // 86.4 seconds per epoch (864 slots * 100ms) +}; + +/** + * Create a slot config that starts at a specific timestamp + * @param startTime Unix timestamp in milliseconds + * @param slotLengthMs Slot length in milliseconds (default: 1000ms) + * @returns SlotConfig starting at the specified time + */ +export function createSlotConfigFromTime(startTime: number, slotLengthMs: number = 1000): SlotConfig { + return { + zeroTime: startTime, + zeroSlot: 0, + slotLength: slotLengthMs, + startEpoch: 0, + epochLength: 86400000 / slotLengthMs, // 1 day worth of slots + }; +} + +/** + * Test helper to use Sancho slot resolver + * @param network Network name (not used, kept for compatibility) + * @param milliseconds Timestamp in milliseconds + * @returns Promise - slot number as string + */ +export async function testSanchoSlotResolver(network: string, milliseconds: number): Promise { + return resolveSlotNoSancho(network, milliseconds); +} diff --git a/src/components/common/PinataImgDragAndDrop.tsx b/src/components/common/PinataImgDragAndDrop.tsx new file mode 100644 index 00000000..7fa003db --- /dev/null +++ b/src/components/common/PinataImgDragAndDrop.tsx @@ -0,0 +1,194 @@ +import { useState, useRef, useEffect } from "react"; +import { useDropzone } from "react-dropzone"; +import { X } from "lucide-react"; +import { Input } from "@/components/ui/input"; +import Image from "next/image"; + +interface UploadResponse { + url: string; + hash: string; +} + +interface ErrorResponse { + error: string; +} + +interface PinataImgDragAndDropProps { + onImageUpload: (url: string, digest: string) => void; +} + +export default function PinataImgDragAndDrop({ onImageUpload }: PinataImgDragAndDropProps) { + const [uploading, setUploading] = useState(false); + const [error, setError] = useState(null); + const [imageUrl, setImageUrl] = useState(null); + const [filePath, setFilePath] = useState(""); + const [digest, setDigest] = useState(""); + const lastComputedUrlRef = useRef(""); + + async function computeSha256(file: File): Promise { + const arrayBuffer = await file.arrayBuffer(); + const hashBuffer = await crypto.subtle.digest("SHA-256", arrayBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + return hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); + } + + async function handleDropAsync(acceptedFiles: File[]): Promise { + if (!acceptedFiles.length) return; + const file = acceptedFiles[0]; + if (!file) return; + setUploading(true); + setError(null); + + try { + // Compute SHA256 for the file + const fileDigest = await computeSha256(file); + setDigest(fileDigest); + + // Try Pinata first, fallback to Vercel Blob + const formData = new FormData(); + formData.append("file", file); + + let response = await fetch("/api/pinata/upload-image", { + method: "POST", + body: formData, + }); + + let imageUrl: string; + + if (!response.ok) { + const errorData = (await response.json()) as ErrorResponse; + + // If Pinata is not configured (503) or unavailable, fallback to Vercel Blob + if (errorData.error === "Pinata configuration not available" || response.status === 503) { + console.log("Pinata not configured, falling back to Vercel Blob storage for image"); + + // Use existing Vercel Blob image upload + const shortHash = fileDigest.slice(-10); + const blobFormData = new FormData(); + blobFormData.append("file", file); + blobFormData.append("shortHash", shortHash); + blobFormData.append("filename", file.name); + + response = await fetch("/api/vercel-storage/image/put", { + method: "POST", + body: blobFormData, + }); + + if (!response.ok) { + const blobErrorData = (await response.json()) as ErrorResponse; + throw new Error(blobErrorData.error || "Upload failed"); + } + + const blobUploadRes = (await response.json()) as UploadResponse; + imageUrl = blobUploadRes.url; + } else { + throw new Error(errorData.error || "Upload failed"); + } + } else { + const uploadRes = (await response.json()) as UploadResponse; + imageUrl = uploadRes.url; + } + + setImageUrl(imageUrl); + setFilePath(imageUrl); + onImageUpload(imageUrl, fileDigest); + } catch (err) { + console.error("Image upload error:", err); + setError("Failed to upload image to Pinata."); + } finally { + setUploading(false); + } + } + + // Wrap the async drop handler in a synchronous function + const onDrop = (acceptedFiles: File[]): void => { + void handleDropAsync(acceptedFiles); + }; + + const { getRootProps, getInputProps } = useDropzone({ + onDrop, + accept: { "image/*": [] }, + multiple: false, + }); + + // Compute image digest for manually entered URLs + useEffect(() => { + if (filePath && filePath.startsWith("http") && filePath !== lastComputedUrlRef.current) { + void (async () => { + try { + const response = await fetch(filePath); + if (!response.ok) throw new Error("Image fetch failed"); + const arrayBuffer = await response.arrayBuffer(); + const hashBuffer = await crypto.subtle.digest("SHA-256", arrayBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const urlDigest = hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); + setDigest(urlDigest); + lastComputedUrlRef.current = filePath; + onImageUpload(filePath, urlDigest); + } catch (err) { + console.error("Failed to generate digest from URL:", err); + } + })(); + } + }, [filePath, onImageUpload]); + + return ( +
+
+ {imageUrl && ( +
+ Uploaded Preview + +
+ )} +
+ +

+ {uploading ? "Uploading..." : "Drag & Drop an image here, or click to select"} +

+

+ Images will be uploaded to IPFS (via Pinata) or Vercel Blob storage +

+
+
+ { + const url = e.target.value.trim(); + if (url !== filePath) { + setDigest(""); + lastComputedUrlRef.current = ""; + } + setFilePath(url); + setImageUrl(url); + }} + /> + {error &&

{error}

} + {digest &&

SHA-256: {digest}

} +
+ ); +} diff --git a/src/components/common/cardano-objects/connect-wallet.tsx b/src/components/common/cardano-objects/connect-wallet.tsx index 332d3f3d..5a4106c7 100644 --- a/src/components/common/cardano-objects/connect-wallet.tsx +++ b/src/components/common/cardano-objects/connect-wallet.tsx @@ -65,14 +65,25 @@ export default function ConnectWallet() { quantity: asset.quantity, }); if (asset.unit === "lovelace") continue; - const assetInfo = await provider.get(`/assets/${asset.unit}`); - setUserAssetMetadata( - asset.unit, - assetInfo?.metadata?.name || - assetInfo?.onchain_metadata?.name || + + try { + const assetInfo = await provider.get(`/assets/${asset.unit}`); + setUserAssetMetadata( asset.unit, - assetInfo?.metadata?.decimals || 0, - ); + assetInfo?.metadata?.name || + assetInfo?.onchain_metadata?.name || + asset.unit, + assetInfo?.metadata?.decimals || 0, + ); + } catch (assetError) { + // Asset not found in Koios database, use fallback metadata + console.warn(`Asset ${asset.unit} not found in Koios database, using fallback metadata`); + setUserAssetMetadata( + asset.unit, + asset.unit, // Use unit as fallback name + 0, // Default decimals + ); + } } setUserAssets(userAssets); } diff --git a/src/components/common/overall-layout/menus/wallets.tsx b/src/components/common/overall-layout/menus/wallets.tsx index fd4c9cee..9d63a947 100644 --- a/src/components/common/overall-layout/menus/wallets.tsx +++ b/src/components/common/overall-layout/menus/wallets.tsx @@ -1,5 +1,5 @@ import useUserWallets from "@/hooks/useUserWallets"; -import { House, Sparkle, Landmark, FolderCode, FileCode2 } from "lucide-react"; +import { House, Sparkle, Landmark, FolderCode, FileCode2, Users } from "lucide-react"; import MenuLink from "./menu-link"; import { useRouter } from "next/router"; @@ -78,6 +78,17 @@ export default function MenuWallets() { )} + + {/* Global Crowdfund - only when NOT in wallet context */} + {!router.pathname.startsWith("/wallets/[wallet]") && ( + + + Crowdfund + + )} ); } diff --git a/src/components/common/overall-layout/mobile-wrappers/wallet-data-loader-wrapper.tsx b/src/components/common/overall-layout/mobile-wrappers/wallet-data-loader-wrapper.tsx index 63983655..529cfece 100644 --- a/src/components/common/overall-layout/mobile-wrappers/wallet-data-loader-wrapper.tsx +++ b/src/components/common/overall-layout/mobile-wrappers/wallet-data-loader-wrapper.tsx @@ -71,18 +71,40 @@ export default function WalletDataLoaderWrapper({ const blockchainProvider = getProvider(network); for (let i = 1; i <= maxPage; i++) { - const transactions: TxInfo[] = await blockchainProvider.get( - `/addresses/${appWallet.address}/transactions?page=${i}&order=desc`, - ); + // Use standardized IFetcher method + console.log(`Fetching transactions for ${appWallet.address}, page ${i}`); + const txResponse = await blockchainProvider.fetchAddressTxs(appWallet.address, { + page: i, + order: 'desc' + }); + console.log(`Received ${txResponse.length} transactions for page ${i}`); + + // Convert TransactionInfo[] to TxInfo[] format for compatibility + const transactions: TxInfo[] = txResponse.map((tx: any) => ({ + tx_hash: tx.hash || tx.tx_hash, + block_height: tx.block || 0, + block_time: tx.slot || 0, + tx_index: tx.index || 0 + })); if (transactions.length === 0) { break; } for (const tx of transactions) { - const txData = await blockchainProvider.get( - `/txs/${tx.tx_hash}/utxos`, - ); + // Use standardized IFetcher method + const utxos = await blockchainProvider.fetchUTxOs(tx.tx_hash); + // Convert UTxO[] to UTXO[] format for compatibility + const outputs = utxos.map((utxo: any) => ({ + address: utxo.output.address, + amount: utxo.output.amount, + output_index: utxo.input.outputIndex, + tx_hash: utxo.input.txHash, + data_hash: utxo.output.dataHash, + inline_datum: utxo.output.plutusData, + reference_script_hash: utxo.output.scriptHash, + })); + const txData = { inputs: [], outputs }; _transactions.push({ hash: tx.tx_hash, tx: tx, @@ -109,46 +131,56 @@ export default function WalletDataLoaderWrapper({ async function getWalletAssets() { try { + if (!appWallet?.address) { + return; + } + const blockchainProvider = getProvider(network); - const assets = await blockchainProvider.get( - `/addresses/${appWallet?.address}/`, - ); + + // Use standardized IFetcher method - fetchAddressUTxOs to get assets + console.log(`Fetching UTxOs for ${appWallet.address}`); + const utxos = await blockchainProvider.fetchAddressUTxOs(appWallet.address); + console.log(`Received ${utxos.length} UTxOs`); + + // Extract unique assets from UTxOs + const assetMap = new Map(); + + for (const utxo of utxos) { + for (const amount of utxo.output.amount) { + const currentQuantity = assetMap.get(amount.unit) || "0"; + const newQuantity = (BigInt(currentQuantity) + BigInt(amount.quantity)).toString(); + assetMap.set(amount.unit, newQuantity); + } + } + const walletAssets: Asset[] = []; - if (assets.amount) { - for (const asset of assets.amount) { - walletAssets.push({ - unit: asset.unit, - quantity: asset.quantity, - }); - if (asset.unit === "lovelace") continue; - const assetInfo = await blockchainProvider.get( - `/assets/${asset.unit}`, - ); + + // Convert asset map to Asset array + for (const [unit, quantity] of assetMap.entries()) { + walletAssets.push({ unit, quantity }); + + if (unit === "lovelace") continue; + + // Fetch asset metadata using standardized IFetcher method + try { + const assetInfo = await blockchainProvider.fetchAssetMetadata(unit); setWalletAssetMetadata( - asset.unit, - assetInfo?.metadata?.name || - assetInfo?.onchain_metadata?.name || - assetInfo?.policyId || - asset.unit, - assetInfo?.metadata?.decimals || 0, - assetInfo?.metadata?.logo || - assetInfo?.onchain_metadata?.image || - "", - assetInfo?.metadata?.ticker || - assetInfo?.metadata?.name || - assetInfo?.onchain_metadata?.name || - assetInfo?.policyId || - asset.unit, - assetInfo?.policy_id || "", + unit, + assetInfo?.name || unit, + assetInfo?.decimals || 0, + assetInfo?.image || "", + assetInfo?.ticker || assetInfo?.name || unit, + assetInfo?.policyId || "", ); + } catch (error) { + console.warn(`Failed to fetch metadata for asset ${unit}:`, error); } - setWalletAssets(walletAssets); - } else { - setWalletAssets([]); } + + setWalletAssets(walletAssets); } catch (error) { + console.error("Error fetching wallet assets:", error); setWalletAssets([]); - setWalletAssetMetadata("", "", 0, "", "", ""); } } @@ -211,22 +243,33 @@ export default function WalletDataLoaderWrapper({ } async function refreshWallet() { - if (fetchingTransactions.current) return; + if (fetchingTransactions.current) { + console.log("WalletDataLoaderWrapper: Already fetching, skipping refresh"); + return; + } + console.log("WalletDataLoaderWrapper: Starting wallet refresh"); fetchingTransactions.current = true; setLoading(true); - await fetchUtxos(); - await getTransactionsOnChain(); - await getWalletAssets(); - await getDRepInfo(); - await fetchProxyData(); // Fetch proxy data - void ctx.transaction.getPendingTransactions.invalidate(); - void ctx.transaction.getAllTransactions.invalidate(); - // Also refresh proxy data - void ctx.proxy.getProxiesByUserOrWallet.invalidate(); - setRandomState(); - setLoading(false); - fetchingTransactions.current = false; + + try { + await fetchUtxos(); + await getTransactionsOnChain(); + await getWalletAssets(); + await getDRepInfo(); + await fetchProxyData(); // Fetch proxy data + void ctx.transaction.getPendingTransactions.invalidate(); + void ctx.transaction.getAllTransactions.invalidate(); + // Also refresh proxy data + void ctx.proxy.getProxiesByUserOrWallet.invalidate(); + setRandomState(); + console.log("WalletDataLoaderWrapper: Wallet refresh completed successfully"); + } catch (error) { + console.error("WalletDataLoaderWrapper: Error during wallet refresh:", error); + } finally { + setLoading(false); + fetchingTransactions.current = false; + } // Call the optional callback after action completes if (onAction) { @@ -235,7 +278,10 @@ export default function WalletDataLoaderWrapper({ } useEffect(() => { + // WalletDataLoaderWrapper useEffect triggered + if (appWallet && prevWalletIdRef.current !== appWallet.id) { + console.log("WalletDataLoaderWrapper: Calling refreshWallet for wallet change"); refreshWallet(); prevWalletIdRef.current = appWallet.id; } @@ -249,6 +295,7 @@ export default function WalletDataLoaderWrapper({ className="rounded-full" onClick={() => refreshWallet()} disabled={loading} + title="Refresh wallet data" > @@ -260,6 +307,7 @@ export default function WalletDataLoaderWrapper({
refreshWallet()} + title="Refresh wallet data" > Refresh Wallet diff --git a/src/components/common/overall-layout/wallet-data-loader.tsx b/src/components/common/overall-layout/wallet-data-loader.tsx index 6920b24f..f1b37ab0 100644 --- a/src/components/common/overall-layout/wallet-data-loader.tsx +++ b/src/components/common/overall-layout/wallet-data-loader.tsx @@ -5,9 +5,16 @@ import { useEffect, useState } from "react"; import { getProvider } from "@/utils/get-provider"; import { useWalletsStore } from "@/lib/zustand/wallets"; import { api } from "@/utils/api"; -import { OnChainTransaction, TxInfo } from "@/types/transaction"; +import type { OnChainTransaction, TxInfo } from "@/types/transaction"; import { useSiteStore } from "@/lib/zustand/site"; import { useProxyActions } from "@/lib/zustand/proxy"; +import type { ProxyData } from "@/lib/zustand/proxy"; +import type { UTXO } from "@/types/transaction"; + +interface TxUtxosResponse { + inputs: UTXO[]; + outputs: UTXO[]; +} export default function WalletDataLoader() { const { appWallet } = useAppWallet(); @@ -37,12 +44,31 @@ export default function WalletDataLoader() { if (appWallet) { const _transactions: OnChainTransaction[] = []; const blockchainProvider = getProvider(network); - let transactions: TxInfo[] = await blockchainProvider.get( - `/addresses/${appWallet.address}/transactions`, - ); + // Use standardized IFetcher method + const txResponse = await blockchainProvider.fetchAddressTxs(appWallet.address); + // Convert TransactionInfo[] to TxInfo[] format for compatibility + const transactionsResponse: TxInfo[] = txResponse.map((tx: any) => ({ + tx_hash: tx.hash || tx.tx_hash, + block_height: tx.block || 0, + block_time: tx.slot || 0, + tx_index: tx.index || 0 + })); + let transactions = transactionsResponse; transactions = transactions.reverse().splice(0, 10); for (const tx of transactions) { - const txData = await blockchainProvider.get(`/txs/${tx.tx_hash}/utxos`); + // Use standardized IFetcher method + const utxos = await blockchainProvider.fetchUTxOs(tx.tx_hash); + // Convert UTxO[] to UTXO[] format for compatibility + const outputs = utxos.map((utxo: any) => ({ + address: utxo.output.address, + amount: utxo.output.amount, + output_index: utxo.input.outputIndex, + tx_hash: utxo.input.txHash, + data_hash: utxo.output.dataHash, + inline_datum: utxo.output.plutusData, + reference_script_hash: utxo.output.scriptHash, + })); + const txData: TxUtxosResponse = { inputs: [], outputs }; _transactions.push({ hash: tx.tx_hash, tx: tx, @@ -63,7 +89,7 @@ export default function WalletDataLoader() { // Get proxies from API const proxies = await ctx.proxy.getProxiesByUserOrWallet.fetch({ walletId: appWallet.id, - }); + }) as ProxyData[]; console.log("WalletDataLoader: Found proxies", proxies); @@ -105,24 +131,26 @@ export default function WalletDataLoader() { } useEffect(() => { - console.log("WalletDataLoader: useEffect triggered", { - hasAppWallet: !!appWallet, - walletId: appWallet?.id, - hasUtxos: appWallet?.id ? walletsUtxos[appWallet.id] !== undefined : false - }); + // WalletDataLoader useEffect triggered if (appWallet && walletsUtxos[appWallet?.id] === undefined) { console.log("WalletDataLoader: Calling refreshWallet"); - refreshWallet(); + void refreshWallet().catch((error) => { + console.error("WalletDataLoader: Error in refreshWallet:", error); + }); } - }, [appWallet]); + }, [appWallet, walletsUtxos]); return (