From c2a7fdd4a52098f11a801a366928ad0d206a4f42 Mon Sep 17 00:00:00 2001 From: cevin Date: Thu, 6 Nov 2025 10:25:39 +0800 Subject: [PATCH 1/3] add x402 express.js template --- community/x402-express/.env.example | 21 + community/x402-express/.gitignore | 3 + community/x402-express/README.md | 253 ++ community/x402-express/components/about.htm | 71 + community/x402-express/package.json | 28 + community/x402-express/pnpm-lock.yaml | 2501 +++++++++++++++++++ community/x402-express/public/logo.png | Bin 0 -> 8980 bytes community/x402-express/public/style.css | 9 + community/x402-express/src/client.ts | 83 + community/x402-express/src/config.ts | 9 + community/x402-express/src/index.ts | 78 + community/x402-express/src/routes/index.ts | 59 + community/x402-express/src/types.ts | 3 + community/x402-express/tsconfig.json | 15 + templates.json | 16 + 15 files changed, 3149 insertions(+) create mode 100644 community/x402-express/.env.example create mode 100644 community/x402-express/.gitignore create mode 100644 community/x402-express/README.md create mode 100644 community/x402-express/components/about.htm create mode 100644 community/x402-express/package.json create mode 100644 community/x402-express/pnpm-lock.yaml create mode 100644 community/x402-express/public/logo.png create mode 100644 community/x402-express/public/style.css create mode 100644 community/x402-express/src/client.ts create mode 100644 community/x402-express/src/config.ts create mode 100644 community/x402-express/src/index.ts create mode 100644 community/x402-express/src/routes/index.ts create mode 100644 community/x402-express/src/types.ts create mode 100644 community/x402-express/tsconfig.json diff --git a/community/x402-express/.env.example b/community/x402-express/.env.example new file mode 100644 index 0000000..8fd5137 --- /dev/null +++ b/community/x402-express/.env.example @@ -0,0 +1,21 @@ +# Server Configuration +# Solana address to receive payments (must be a valid base58 Solana address) +PAY_TO_ADDRESS=Dy6mBH4YeqJCRZohd39iSFaf4jyLaxPeBakbZwt1jToL + +# Payment Configuration (also configurable in src/config.ts) +# Solana network (mainnet-beta, devnet, etc.) +NETWORK=mainnet-beta + +# Token asset for payments (USDC, SOL, etc.) +ASSET=USDC + +# Payment amount per request (as string) +AMOUNT=100 + +# Client Configuration +# Your Solana keypair as a JSON array (get from wallet's secret key) +# Example: [123,45,67,...] (array of numbers 0-255) +SECRET_KEY= + +# Optional: Proxy URL for client requests +# PROXY_URL=http://proxy.example.com:8080 diff --git a/community/x402-express/.gitignore b/community/x402-express/.gitignore new file mode 100644 index 0000000..400bedc --- /dev/null +++ b/community/x402-express/.gitignore @@ -0,0 +1,3 @@ +node_modules +.env +.vercel diff --git a/community/x402-express/README.md b/community/x402-express/README.md new file mode 100644 index 0000000..bf5c2ee --- /dev/null +++ b/community/x402-express/README.md @@ -0,0 +1,253 @@ +# X402 Express Server and Client + +This project demonstrates how to use X402 payment system with Express.js, allowing API endpoints to charge for access using Solana USDC payments. + +## What is X402? + +X402 is a payment protocol that enables API endpoints to automatically charge clients for access. Payments are processed on the Solana blockchain using USDC. + +## Project Structure + +- **Server** (`src/index.ts`): Express.js server with X402-protected API routes +- **Client** (`src/client.ts`): Example client that automatically pays when calling protected endpoints +- **Routes** (`src/routes/index.ts`): API routes with X402 payment middleware +- **Config** (`src/config.ts`): Centralized configuration for payment settings (network, asset, amount, payment address) + +## Server + +The server sets up Express.js with a protected API endpoint that requires payment: + +### Protected Route + +The `/api/protected` endpoint requires a payment of **100 USDC** to access. It uses X402 middleware to automatically verify and process payments. + +```bash +# Start the server (configure for your deployment platform) +# For Vercel: +vercel dev +``` + +### Configuration + +Payment configuration is centralized in `src/config.ts`. The following environment variables can be set to customize the payment settings: + +- `PAY_TO_ADDRESS`: Solana address to receive payments (defaults to a test address) +- `NETWORK`: Solana network (defaults to `"mainnet-beta"`) +- `ASSET`: Token asset to use for payments (defaults to `"USDC"`) +- `AMOUNT`: Payment amount per request (defaults to `"100"`) + +All configuration values can be overridden via environment variables or edited directly in `src/config.ts`. + +## Client + +The client demonstrates how to automatically pay for API access using X402: + +### Setup + +1. Install dependencies: +```bash +pnpm install +``` + +2. Configure environment variables in `.env`: +``` +SECRET_KEY=[your Solana keypair JSON array] +PROXY_URL=[optional proxy URL] +``` + +### Usage + +Run the client to call the protected endpoint: +```bash +pnpm run client +``` + +The client will: +1. Load your Solana keypair +2. Create a payment handler with X402 +3. Wrap `fetch` to automatically handle payments +4. Call the protected endpoint (payment happens automatically) + +### How It Works + +- The client uses `@faremeter/payment-solana` to create a payment handler +- `wrap(fetch, { handlers: [handler] })` automatically adds payment to requests +- When calling a protected endpoint, the payment is processed on Solana before the request completes + +## X402 Usage + +X402 middleware is configured using centralized settings in `src/config.ts`: + +- **Network**: Solana mainnet-beta (configurable via `NETWORK` env var or `src/config.ts`) +- **Asset**: USDC (configurable via `ASSET` env var or `src/config.ts`) +- **Amount**: 100 USDC per request (configurable via `AMOUNT` env var or `src/config.ts`) +- **Payment Address**: Set via `PAY_TO_ADDRESS` env var or `src/config.ts` +- **Facilitator**: Handles payment verification at `https://facilitator.corbits.io` + +The middleware automatically: +- Validates incoming payment signatures +- Verifies payment amounts +- Grants access only after successful payment + +## Deployment + +### Deploy to Vercel + +Deploy your own instance of this project to Vercel with one click: + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/v1xingyue/x402-express) + +> **Note:** Replace `your-username/x402-express` with your repository URL if deploying from your own fork. + +### Manual Deployment Steps + +1. **Fork or clone this repository** +2. **Connect to Vercel:** + - Go to [Vercel](https://vercel.com) + - Import your repository + - Configure the project settings + +3. **Set environment variables in Vercel:** + - Go to Project Settings → Environment Variables + - Add `PAY_TO_ADDRESS` with your Solana address to receive payments + - Optionally set `NETWORK`, `ASSET`, and `AMOUNT` to customize payment settings + - The client-side variables (`SECRET_KEY`, `PROXY_URL`) are only needed for local client development + +4. **Deploy:** + - Vercel will automatically detect Express.js and deploy + - Your API will be available at `https://your-project.vercel.app` + +5. **Update client URL:** + - Update the API URL in `src/client.ts` to point to your deployed server + - Replace `https://x402-express.vercel.app` with your Vercel deployment URL + +## Development + +### Getting Started + +1. **Clone and install dependencies:** +```bash +git clone +cd x402-express +pnpm install +``` + +2. **Set up environment variables:** +```bash +cp .env.example .env +``` + +3. **Configure your `.env` file:** + - **SECRET_KEY**: Convert your Solana wallet's secret key to a JSON array format + ```bash + # If you have a keypair file, you can extract it: + # The format should be: [123,45,67,...] (array of 64 numbers) + ``` + - **PAY_TO_ADDRESS**: Your Solana address to receive payments (get USDC test tokens from [Circle Faucet](https://faucet.circle.com/)) + - **NETWORK** (optional): Solana network - defaults to `"mainnet-beta"` (also configurable in `src/config.ts`) + - **ASSET** (optional): Token asset for payments - defaults to `"USDC"` (also configurable in `src/config.ts`) + - **AMOUNT** (optional): Payment amount per request - defaults to `"100"` (also configurable in `src/config.ts`) + - **PROXY_URL** (optional): Set if you need to use a proxy for requests + +4. **Run the server:** +```bash +# For local development with Vercel: +vercel dev + +# Or configure for your preferred deployment platform +``` + +5. **Test the client:** +```bash +pnpm run client +``` + +### Adding More Protected Routes + +To add additional protected routes with X402 payment, follow this pattern in `src/routes/index.ts`: + +```typescript +import { payToAddress, network, asset, amount } from "../config.js"; + +// Option 1: Use default config values +const defaultExtract = solana.x402Exact({ + network: network as Network, + asset: asset as Asset, + amount: amount, + payTo: payToAddress, +}); + +// Option 2: Create custom payment requirement +const customExtract = solana.x402Exact({ + network: "mainnet-beta", + asset: "USDC", + amount: "50", // Amount in USDC (adjust as needed) + payTo: payToAddress, +}); + +// Create protected route +router.get( + "/custom-endpoint", + await middleware.createMiddleware({ + facilitatorURL: "https://facilitator.corbits.io", + accepts: [customExtract], + }), + (_, res) => { + return res.json({ message: "Custom protected endpoint" }); + } +); +``` + +### Customizing Payment Settings + +Payment configuration is centralized in `src/config.ts`. You can customize: + +1. **Via Environment Variables** (recommended for deployments): + ```bash + NETWORK=mainnet-beta + ASSET=USDC + AMOUNT=100 + PAY_TO_ADDRESS=YourSolanaAddressHere + ``` + +2. **Directly in `src/config.ts`**: + ```typescript + export const amount = process.env.AMOUNT || "100"; // Change default here + export const asset = process.env.ASSET || "USDC"; // Change asset here + export const network = process.env.NETWORK || "mainnet-beta"; // Change network here + ``` + +- **Amount**: Default is `"100"` USDC. Amounts are specified as strings (e.g., `"50"`, `"1000"`) +- **Asset**: Currently set to `"USDC"`. Can be changed to other supported SPL tokens +- **Network**: Currently `"mainnet-beta"`. Can be changed to `"devnet"` for testing + +### Development Workflow + +1. **Local Development:** + - Make changes to server routes in `src/routes/index.ts` + - Update client code in `src/client.ts` + - Test locally with `vercel dev` + +2. **Adding New Features:** + - Create new route files in `src/routes/` if needed + - Import and use them in `src/routes/index.ts` + - Update client to call new endpoints + +3. **Testing Payments:** + - Use test USDC from [Circle Faucet](https://faucet.circle.com/) + - Monitor transactions on Solana explorer + - Check facilitator logs for payment verification + +### Tips + +- Keep your `SECRET_KEY` secure and never commit it to version control +- Use different addresses for development and production +- Monitor your Solana wallet balance to ensure sufficient USDC for testing +- The facilitator handles payment verification, so your server doesn't need direct blockchain access + + +## 🤝 Contribution + +Contributed by [cevin](https://github.com/v1xingyue) from [Solar](https://www.solar.team/). + +Feel free to raise issues or submit PRs for future improvements. \ No newline at end of file diff --git a/community/x402-express/components/about.htm b/community/x402-express/components/about.htm new file mode 100644 index 0000000..3c06067 --- /dev/null +++ b/community/x402-express/components/about.htm @@ -0,0 +1,71 @@ + + + + About - X402 Express Server + + + + + +
+

About X402 Express

+ +

Project Overview

+

This project demonstrates how to use X402 payment system with Express.js, allowing API endpoints to charge for access using Solana USDC payments.

+ +

Project Structure

+
    +
  • Server (src/index.ts): Express.js server with X402-protected API routes
  • +
  • Client (src/client.ts): Example client that automatically pays when calling protected endpoints
  • +
  • Routes (src/routes/index.ts): API routes with X402 payment middleware
  • +
  • Config (src/config.ts): Centralized configuration for payment settings (network, asset, amount, payment address)
  • +
+ +

Protected Route

+

The /api/protected endpoint requires a payment of 100 USDC to access. It uses X402 middleware to automatically verify and process payments.

+ +

Configuration

+

Payment configuration is centralized in src/config.ts. The following environment variables can be set to customize the payment settings:

+
    +
  • PAY_TO_ADDRESS: Solana address to receive payments (defaults to a test address)
  • +
  • NETWORK: Solana network (defaults to "mainnet-beta")
  • +
  • ASSET: Token asset to use for payments (defaults to "USDC")
  • +
  • AMOUNT: Payment amount per request (defaults to "100")
  • +
+ +

Client Usage

+

The client demonstrates how to automatically pay for API access using X402:

+
    +
  1. Load your Solana keypair
  2. +
  3. Create a payment handler with X402
  4. +
  5. Wrap fetch to automatically handle payments
  6. +
  7. Call the protected endpoint (payment happens automatically)
  8. +
+ +

X402 Middleware

+

X402 middleware is configured using centralized settings in src/config.ts:

+
    +
  • Network: Solana mainnet-beta (configurable via NETWORK env var)
  • +
  • Asset: USDC (configurable via ASSET env var)
  • +
  • Amount: 100 USDC per request (configurable via AMOUNT env var)
  • +
  • Payment Address: Set via PAY_TO_ADDRESS env var
  • +
  • Facilitator: Handles payment verification at https://facilitator.corbits.io
  • +
+ +

The middleware automatically:

+
    +
  • Validates incoming payment signatures
  • +
  • Verifies payment amounts
  • +
  • Grants access only after successful payment
  • +
+ +

Development

+

For detailed setup instructions, deployment guides, and code examples, please refer to the GitHub repository README.

+
+ + diff --git a/community/x402-express/package.json b/community/x402-express/package.json new file mode 100644 index 0000000..c2c1685 --- /dev/null +++ b/community/x402-express/package.json @@ -0,0 +1,28 @@ +{ + "name": "express", + "version": "1.0.0", + "description": "", + "type": "module", + "keywords": [], + "author": "", + "license": "ISC", + "scripts": { + "client": "tsx src/client.ts" + }, + "dependencies": { + "@faremeter/fetch": "^0.11.0", + "@faremeter/info": "^0.11.0", + "@faremeter/middleware": "^0.11.0", + "@faremeter/payment-solana": "^0.11.0", + "@solana/web3.js": "^1.98.4", + "@types/express": "^5.0.0", + "dotenv": "^17.2.3", + "express": "^4.18.2", + "ts-node": "^10.9.2", + "undici": "^7.16.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "tsx": "^4.20.6" + } +} diff --git a/community/x402-express/pnpm-lock.yaml b/community/x402-express/pnpm-lock.yaml new file mode 100644 index 0000000..ad5b344 --- /dev/null +++ b/community/x402-express/pnpm-lock.yaml @@ -0,0 +1,2501 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@faremeter/fetch': + specifier: ^0.11.0 + version: 0.11.0 + '@faremeter/info': + specifier: ^0.11.0 + version: 0.11.0 + '@faremeter/middleware': + specifier: ^0.11.0 + version: 0.11.0 + '@faremeter/payment-solana': + specifier: ^0.11.0 + version: 0.11.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': + specifier: ^1.98.4 + version: 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@types/express': + specifier: ^5.0.0 + version: 5.0.3 + dotenv: + specifier: ^17.2.3 + version: 17.2.3 + express: + specifier: ^4.18.2 + version: 4.21.2 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.17.2)(typescript@5.9.3) + undici: + specifier: ^7.16.0 + version: 7.16.0 + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.17.2 + tsx: + specifier: ^4.20.6 + version: 4.20.6 + +packages: + + '@ark/schema@0.47.0': + resolution: {integrity: sha512-s5Hc1TUmRiA+NhewAHZJtl7xuFN0y4vAdv/JrvgCxgf1NKwBAylTvqCnQ8iPYn8kG3qAmHwgPpbJ+C5iHKJsbQ==} + + '@ark/util@0.47.0': + resolution: {integrity: sha512-KAOwSSjgZCEYd/3QEIjmq1LRHnVk2fOjypGVfm3V+1C7KrSsV5yRoQjb50b0KTuA1A317G9LXz+UD6g4O1A6NA==} + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@faremeter/fetch@0.11.0': + resolution: {integrity: sha512-Xy/O7wjmVzUEGkQOhxofShphhhbts7gAKYudXuAx+ZMW1dl2pmRBFwaT/8dhUtw67I+G/GwEtAewlaoLZCyFfA==} + + '@faremeter/info@0.11.0': + resolution: {integrity: sha512-GQexaWenji1uQYkfvVpqzwKMtNVrw9W74z3DbOKnGQ0TGjC8E10tZDul2k/huT+TBEWwRZF1qb3exMxgxJQY8Q==} + + '@faremeter/middleware@0.11.0': + resolution: {integrity: sha512-UpFV4+U5BE3S/ZYgmwNFq6ZdnvjvGenWO0IaWMEOcGgSW7rGuz8HsjSG+fdVSUe2I2qfFoARLOTIcFHc/gTeDg==} + + '@faremeter/payment-solana@0.11.0': + resolution: {integrity: sha512-5e0ZaJ4DQrVlhxxFu+WvQGo8EoVYuVMzSV+RxdWycPKdZYK6qZDUfm0h3nZwpmsHdogKiB/n8/3b+/uiOqdpfA==} + + '@faremeter/types@0.11.0': + resolution: {integrity: sha512-7jQ7Y4kBpiDmBiPGfsyH8NCFPxLRb8ubegzpx50PetQrzYUv2sE9uhSa/oOzd/ZjiN6RJujKXuLX0jVPjNa2XA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@logtape/logtape@1.0.4': + resolution: {integrity: sha512-YvNVrXIxVpnY528zoiEjX8PqTfr0UCtKXyssvaWL8AE+OByFTCooKuKMdPlm6g65YUI9fPXrHn4UnogSskABnA==} + + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@solana-program/compute-budget@0.8.0': + resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana-program/token@0.5.1': + resolution: {integrity: sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana/accounts@2.3.0': + resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/addresses@2.3.0': + resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/addresses@3.0.3': + resolution: {integrity: sha512-AuMwKhJI89ANqiuJ/fawcwxNKkSeHH9CApZd2xelQQLS7X8uxAOovpcmEgiObQuiVP944s9ScGUT62Bdul9qYg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/assertions@2.3.0': + resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/assertions@3.0.3': + resolution: {integrity: sha512-2qspxdbWp2y62dfCIlqeWQr4g+hE8FYSSwcaP6itwMwGRb8393yDGCJfI/znuzJh6m/XVWhMHIgFgsBwnevCmg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-core@3.0.3': + resolution: {integrity: sha512-emKykJ3h1DmnDOY29Uv9eJXP8E/FHzvlUBJ6te+5EbKdFjj7vdlKYPfDxOI6iGdXTY+YC/ELtbNBh6QwF2uEDQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-data-structures@2.3.0': + resolution: {integrity: sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@3.0.3': + resolution: {integrity: sha512-pfXkH9J0glrM8qj6389GAn30+cJOxzXLR2FsPOHCUMXrqLhGjMMZAWhsQkpOQ37SGc/7EiQsT/gmyGC7gxHqJQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs-strings@2.3.0': + resolution: {integrity: sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + + '@solana/codecs-strings@3.0.3': + resolution: {integrity: sha512-VHBXnnTVtcQ1j+7Vrz+qSYo38no+jiHRdGnhFspRXEHNJbllzwKqgBE7YN3qoIXH+MKxgJUcwO5KHmdzf8Wn2A==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs@2.3.0': + resolution: {integrity: sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@3.0.3': + resolution: {integrity: sha512-1l84xJlHNva6io62PcYfUamwWlc0eM95nHgCrKX0g0cLoC6D6QHYPCEbEVkR+C5UtP9JDgyQM8MFiv+Ei5tO9Q==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/fast-stable-stringify@2.3.0': + resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/functional@2.3.0': + resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/instructions@2.3.0': + resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/keys@2.3.0': + resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/kit@2.3.0': + resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/nominal-types@2.3.0': + resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/nominal-types@3.0.3': + resolution: {integrity: sha512-aZavCiexeUAoMHRQg4s1AHkH3wscbOb70diyfjhwZVgFz1uUsFez7csPp9tNFkNolnadVb2gky7yBk3IImQJ6A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/options@2.3.0': + resolution: {integrity: sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/programs@2.3.0': + resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/promises@2.3.0': + resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-api@2.3.0': + resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-parsed-types@2.3.0': + resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-spec-types@2.3.0': + resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-spec@2.3.0': + resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-api@2.3.0': + resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-channel-websocket@2.3.0': + resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + ws: ^8.18.0 + + '@solana/rpc-subscriptions-spec@2.3.0': + resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions@2.3.0': + resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transformers@2.3.0': + resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transport-http@2.3.0': + resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-types@2.3.0': + resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-types@3.0.3': + resolution: {integrity: sha512-petWQ5xSny9UfmC3Qp2owyhNU0w9SyBww4+v7tSVyXMcCC9v6j/XsqTeimH1S0qQUllnv0/FY83ohFaxofmZ6Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc@2.3.0': + resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/signers@2.3.0': + resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.4.13': + resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/subscribable@2.3.0': + resolution: {integrity: sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/sysvars@2.3.0': + resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-confirmation@2.3.0': + resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-messages@2.3.0': + resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transactions@2.3.0': + resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/express-serve-static-core@5.0.7': + resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} + + '@types/express@5.0.3': + resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@22.17.2': + resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==} + + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/send@0.17.5': + resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + + '@types/serve-static@1.15.8': + resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arktype@2.1.21: + resolution: {integrity: sha512-RPsqONfr/hi8nnlzqSn1i3oMAtvFqt8jIVD7tIFoqP+/wu0Jb04f0bQOLBBDILWv+tjBxBqmCeIfO4f9AMYktw==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + rpc-websockets@9.2.0: + resolution: {integrity: sha512-DS/XHdPxplQTtNRKiBCRWGBJfjOk56W7fyFUpiYi9fSTWTzoEMbUkn3J4gB0IMniIEVeAGR1/rzFQogzD5MxvQ==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.20.6: + resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} + engines: {node: '>=18.0.0'} + hasBin: true + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + engines: {node: '>=20.18.1'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + +snapshots: + + '@ark/schema@0.47.0': + dependencies: + '@ark/util': 0.47.0 + + '@ark/util@0.47.0': {} + + '@babel/runtime@7.28.4': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@faremeter/fetch@0.11.0': + dependencies: + '@faremeter/types': 0.11.0 + arktype: 2.1.21 + + '@faremeter/info@0.11.0': + dependencies: + '@faremeter/types': 0.11.0 + arktype: 2.1.21 + + '@faremeter/middleware@0.11.0': + dependencies: + '@faremeter/types': 0.11.0 + '@logtape/logtape': 1.0.4 + arktype: 2.1.21 + + '@faremeter/payment-solana@0.11.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@faremeter/info': 0.11.0 + '@faremeter/types': 0.11.0 + '@logtape/logtape': 1.0.4 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/spl-token': 0.4.13(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + arktype: 2.1.21 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + - ws + + '@faremeter/types@0.11.0': + dependencies: + arktype: 2.1.21 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@logtape/logtape@1.0.4': {} + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 3.0.3(typescript@5.9.3) + '@solana/codecs-core': 3.0.3(typescript@5.9.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 3.0.3(typescript@5.9.3) + '@solana/nominal-types': 3.0.3(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/assertions@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/assertions@3.0.3(typescript@5.9.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.3.1 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-core@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-core@3.0.3(typescript@5.9.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-data-structures@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@3.0.3(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.9.3) + '@solana/errors': 3.0.3(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 + + '@solana/codecs-strings@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 + + '@solana/codecs-strings@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.9.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.9.3) + '@solana/errors': 3.0.3(typescript@5.9.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 + + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/codecs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-rc.1(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 12.1.0 + typescript: 5.9.3 + + '@solana/errors@2.3.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 + typescript: 5.9.3 + + '@solana/errors@3.0.3(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.0 + typescript: 5.9.3 + + '@solana/fast-stable-stringify@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/functional@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/instructions@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/nominal-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/nominal-types@3.0.3(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/options@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/promises@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-parsed-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-spec-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-spec@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-transport-http@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + undici-types: 7.16.0 + + '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-types@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 3.0.3(typescript@5.9.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.9.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 3.0.3(typescript@5.9.3) + '@solana/nominal-types': 3.0.3(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/rpc-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-transport-http': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token@0.4.13(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + + '@solana/subscribable@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.28.4 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.2.0 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.17.2 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.17.2 + + '@types/express-serve-static-core@5.0.7': + dependencies: + '@types/node': 22.17.2 + '@types/qs': 6.14.0 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.5 + + '@types/express@5.0.3': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.0.7 + '@types/serve-static': 1.15.8 + + '@types/http-errors@2.0.5': {} + + '@types/mime@1.3.5': {} + + '@types/node@12.20.55': {} + + '@types/node@22.17.2': + dependencies: + undici-types: 6.21.0 + + '@types/qs@6.14.0': {} + + '@types/range-parser@1.2.7': {} + + '@types/send@0.17.5': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.17.2 + + '@types/serve-static@1.15.8': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 22.17.2 + '@types/send': 0.17.5 + + '@types/uuid@8.3.4': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 22.17.2 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.17.2 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + arg@4.1.3: {} + + arktype@2.1.21: + dependencies: + '@ark/schema': 0.47.0 + '@ark/util': 0.47.0 + + array-flatten@1.1.1: {} + + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.3.1: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bn.js@5.2.2: {} + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + chalk@5.6.2: {} + + commander@12.1.0: {} + + commander@14.0.0: {} + + commander@14.0.2: {} + + commander@2.20.3: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + create-require@1.1.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + delay@5.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + diff@4.0.2: {} + + dotenv@17.2.3: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escape-html@1.0.3: {} + + etag@1.8.1: {} + + eventemitter3@5.0.1: {} + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + + file-uri-to-path@1.0.0: {} + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + gopd@1.2.0: {} + + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + json-stringify-safe@5.0.1: {} + + make-error@1.3.6: {} + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.3: {} + + methods@1.1.2: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + negotiator@0.6.3: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: + optional: true + + object-inspect@1.13.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + parseurl@1.3.3: {} + + path-to-regexp@0.1.12: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + resolve-pkg-maps@1.0.0: {} + + rpc-websockets@9.2.0: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + statuses@2.0.1: {} + + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + superstruct@2.0.2: {} + + text-encoding-utf-8@1.0.2: {} + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + ts-node@10.9.2(@types/node@22.17.2)(typescript@5.9.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.17.2 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@2.8.1: {} + + tsx@4.20.6: + dependencies: + esbuild: 0.25.12 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typescript@5.9.3: {} + + undici-types@6.21.0: {} + + undici-types@7.16.0: {} + + undici@7.16.0: {} + + unpipe@1.0.0: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + utils-merge@1.0.1: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + vary@1.1.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + yn@3.1.1: {} diff --git a/community/x402-express/public/logo.png b/community/x402-express/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..60760a01e95f27ec140371de0ae170096089c98b GIT binary patch literal 8980 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 literal 0 HcmV?d00001 diff --git a/community/x402-express/public/style.css b/community/x402-express/public/style.css new file mode 100644 index 0000000..d41efc0 --- /dev/null +++ b/community/x402-express/public/style.css @@ -0,0 +1,9 @@ +body { + font-family: system-ui, sans-serif; + margin: 2rem; + line-height: 1.5; + } + nav a { + margin-right: 1rem; + } + \ No newline at end of file diff --git a/community/x402-express/src/client.ts b/community/x402-express/src/client.ts new file mode 100644 index 0000000..a21df6b --- /dev/null +++ b/community/x402-express/src/client.ts @@ -0,0 +1,83 @@ +import { + Keypair, + PublicKey, + VersionedTransaction, + Connection, +} from "@solana/web3.js"; +import { exact as solanaExact } from "@faremeter/payment-solana"; +import { wrap } from "@faremeter/fetch"; +import { solana } from "@faremeter/info"; +import dotenv from "dotenv"; +import { ProxyAgent, setGlobalDispatcher } from "undici"; +import type { Network, Asset } from "./types.js"; +import { asset } from "./config.js"; +dotenv.config(); + +const proxy = process.env.PROXY_URL; +if (proxy) { + console.log(`using proxy ${proxy}`); + const proxyAgent = new ProxyAgent(proxy); + setGlobalDispatcher(proxyAgent); +} + +// Load keypair from file +const keypairData = JSON.parse(process.env.SECRET_KEY as string); +const keypair = Keypair.fromSecretKey(Uint8Array.from(keypairData)); + +console.log(`current address ${keypair.publicKey.toBase58()}`); + +const network = process.env.NETWORK || "mainnet-beta"; +const connection = new Connection("https://api.mainnet-beta.solana.com"); +const tokenInfo = solana.lookupKnownSPLToken( + network as Network, + asset as Asset +); +if (!tokenInfo) { + throw new Error(`${asset} info not found`); +} +const tokenMint = new PublicKey(tokenInfo.address); +console.log(`token mint address ${tokenMint.toBase58()}`); + +// Create wallet interface +const wallet = { + network, + publicKey: keypair.publicKey, + updateTransaction: async (tx: VersionedTransaction) => { + tx.sign([keypair]); + return tx; + }, +}; + +const main = async () => { + // Setup payment handler + const handler = solanaExact.createPaymentHandler( + wallet, + tokenMint, + connection + ); + const fetchWithPayer = wrap(fetch, { handlers: [handler] }); + // const fetchWithoutPayer = fetch; + + // // Call the API - payment happens automatically + // const response = await fetchWithPayer("https://helius.api.corbits.dev", { + // method: "POST", + // headers: { "Content-Type": "application/json" }, + // body: JSON.stringify({ + // jsonrpc: "2.0", + // id: 1, + // method: "getBlockHeight", + // }), + // }); + + const response = await fetchWithPayer( + "https://x402-express.vercel.app/api/protected" + ).catch((error) => { + console.error(error); + return null; + }); + + const data = await response.json(); + console.log(data); +}; + +main(); diff --git a/community/x402-express/src/config.ts b/community/x402-express/src/config.ts new file mode 100644 index 0000000..364f84f --- /dev/null +++ b/community/x402-express/src/config.ts @@ -0,0 +1,9 @@ +// you can get dev usdc faucet https://faucet.circle.com/ +export const payToAddress = + process.env.PAY_TO_ADDRESS || "Dy6mBH4YeqJCRZohd39iSFaf4jyLaxPeBakbZwt1jToL"; + +export const network = process.env.NETWORK || "mainnet-beta"; + +export const asset = process.env.ASSET || "USDC"; + +export const amount = process.env.AMOUNT || "100"; diff --git a/community/x402-express/src/index.ts b/community/x402-express/src/index.ts new file mode 100644 index 0000000..ffebb91 --- /dev/null +++ b/community/x402-express/src/index.ts @@ -0,0 +1,78 @@ +import express from "express"; +import path from "path"; +import { fileURLToPath } from "url"; + +import apiRouter from "./routes/index.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const app = express(); + +// Home route - HTML +app.get("/", (req, res) => { + res.type("html").send(` + + + + + X402 Express Server + + + + +

X402 Express Server and Client

+

This project demonstrates how to use X402 payment system with Express.js, allowing API endpoints to charge for access using Solana USDC payments.

+ +

What is X402?

+

X402 is a payment protocol that enables API endpoints to automatically charge clients for access. Payments are processed on the Solana blockchain using USDC.

+ +

Features

+
    +
  • Protected API Routes: Endpoints that require payment to access
  • +
  • Automatic Payment Processing: Clients automatically pay when calling protected endpoints
  • +
  • Solana Integration: Payments processed on Solana using USDC
  • +
  • Configurable Settings: Customize payment amounts, network, and payment address
  • +
+ +

Quick Start

+

Try the protected endpoint:

+ + +

Usage

+

For detailed setup and usage instructions, see the About page or check the GitHub repository.

+ + Logo + + + `); +}); + +app.get("/about", function (req, res) { + res.sendFile(path.join(__dirname, "..", "components", "about.htm")); +}); + +// Example API endpoint - JSON +app.get("/api-data", (req, res) => { + res.json({ + message: "Here is some sample API data", + items: ["apple", "banana", "cherry"], + }); +}); + +// Health check +app.get("/healthz", (req, res) => { + res.status(200).json({ status: "ok", timestamp: new Date().toISOString() }); +}); + +app.use("/api", apiRouter); + +export default app; diff --git a/community/x402-express/src/routes/index.ts b/community/x402-express/src/routes/index.ts new file mode 100644 index 0000000..61fead2 --- /dev/null +++ b/community/x402-express/src/routes/index.ts @@ -0,0 +1,59 @@ +import { Router, Request, Response } from "express"; +import { express as middleware } from "@faremeter/middleware"; +import { solana } from "@faremeter/info"; +import { PublicKey } from "@solana/web3.js"; +import { payToAddress, network, asset, amount } from "../config.js"; +import type { Network, Asset } from "../types.js"; + +const router: Router = Router(); + +(async () => { + // Standard API route + router.get("/", (_req: Request, res: Response) => { + res.json({ + message: "Welcome to X402 API", + version: "1.0.0", + status: "ok", + timestamp: new Date().toISOString(), + }); + }); + + // Validate the address format + try { + new PublicKey(payToAddress); + console.log("Using payTo address:", payToAddress); + } catch (error: any) { + throw new Error( + `Invalid PAY_TO_ADDRESS: ${payToAddress}. Error: ${error.message}` + ); + } + + const usdcExtract = solana.x402Exact({ + network: network as Network, + asset: asset as Asset, + amount: amount as string, + payTo: payToAddress, + }); + + router.use((req, _res, next) => { + console.log("request received", req.url); + console.log("request method", req.method); + console.log("request headers", req.headers); + next(); + }); + + router.get( + "/protected", + await middleware.createMiddleware({ + facilitatorURL: "https://facilitator.corbits.io", + accepts: [usdcExtract], + }), + (_, res) => { + return res.json({ + msg: "success", + }); + } + ); +})(); + +export default router; diff --git a/community/x402-express/src/types.ts b/community/x402-express/src/types.ts new file mode 100644 index 0000000..3340bcf --- /dev/null +++ b/community/x402-express/src/types.ts @@ -0,0 +1,3 @@ +export type Network = "mainnet-beta" | "devnet" | "testnet"; + +export type Asset = "USDC"; diff --git a/community/x402-express/tsconfig.json b/community/x402-express/tsconfig.json new file mode 100644 index 0000000..f684c52 --- /dev/null +++ b/community/x402-express/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "./dist", + "rootDir": ".", + "esModuleInterop": true, + "skipLibCheck": true + }, + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + } +} diff --git a/templates.json b/templates.json index 4742f13..a1c906a 100644 --- a/templates.json +++ b/templates.json @@ -390,6 +390,22 @@ "displayName": "Supabase Auth", "usecase": "Auth" }, + { + "description": "Express.js X402 payment protocol integration", + "id": "gh:solana-foundation/templates/community/x402-express", + "image": "community/x402-express/og-image.png", + "keywords": [ + "solana", + "express", + "x402", + "template", + "starter" + ], + "name": "x402-template", + "path": "community/x402-template", + "displayName": "X402 Next.js", + "usecase": "Payments" + }, { "description": "Next.js Solana starter with X402 payment protocol integration", "id": "gh:solana-foundation/templates/community/x402-template", From a8527cde4ef29e5a5c0d3809705f9439dfd14de9 Mon Sep 17 00:00:00 2001 From: cevin Date: Mon, 17 Nov 2025 09:28:46 +0800 Subject: [PATCH 2/3] solve some review problem --- community/x402-express/README.md | 11 +++++++---- community/x402-express/package.json | 11 +++++------ community/x402-express/src/server.ts | 7 +++++++ templates.json | 6 +++--- 4 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 community/x402-express/src/server.ts diff --git a/community/x402-express/README.md b/community/x402-express/README.md index bf5c2ee..842ce03 100644 --- a/community/x402-express/README.md +++ b/community/x402-express/README.md @@ -25,6 +25,9 @@ The `/api/protected` endpoint requires a payment of **100 USDC** to access. It u # Start the server (configure for your deployment platform) # For Vercel: vercel dev + +# Without Vercel: +npm run server ``` ### Configuration @@ -46,7 +49,7 @@ The client demonstrates how to automatically pay for API access using X402: 1. Install dependencies: ```bash -pnpm install +npm install ``` 2. Configure environment variables in `.env`: @@ -59,7 +62,7 @@ PROXY_URL=[optional proxy URL] Run the client to call the protected endpoint: ```bash -pnpm run client +npm run client ``` The client will: @@ -129,7 +132,7 @@ Deploy your own instance of this project to Vercel with one click: ```bash git clone cd x402-express -pnpm install +npm install ``` 2. **Set up environment variables:** @@ -159,7 +162,7 @@ vercel dev 5. **Test the client:** ```bash -pnpm run client +npm run client ``` ### Adding More Protected Routes diff --git a/community/x402-express/package.json b/community/x402-express/package.json index c2c1685..dc3dbaf 100644 --- a/community/x402-express/package.json +++ b/community/x402-express/package.json @@ -7,9 +7,12 @@ "author": "", "license": "ISC", "scripts": { - "client": "tsx src/client.ts" + "client": "tsx src/client.ts", + "server": "tsx src/server.ts" }, - "dependencies": { + "devDependencies": { + "@types/node": "^22.0.0", + "tsx": "^4.20.6", "@faremeter/fetch": "^0.11.0", "@faremeter/info": "^0.11.0", "@faremeter/middleware": "^0.11.0", @@ -20,9 +23,5 @@ "express": "^4.18.2", "ts-node": "^10.9.2", "undici": "^7.16.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "tsx": "^4.20.6" } } diff --git a/community/x402-express/src/server.ts b/community/x402-express/src/server.ts new file mode 100644 index 0000000..037f07e --- /dev/null +++ b/community/x402-express/src/server.ts @@ -0,0 +1,7 @@ +import app from "./index.js"; + +const PORT = process.env.PORT || 3000; + +app.listen(PORT, () => { + console.log(`Server is running on port ${PORT}`); +}); \ No newline at end of file diff --git a/templates.json b/templates.json index a1c906a..b9e5f36 100644 --- a/templates.json +++ b/templates.json @@ -401,9 +401,9 @@ "template", "starter" ], - "name": "x402-template", - "path": "community/x402-template", - "displayName": "X402 Next.js", + "name": "x402-express", + "path": "community/x402-express", + "displayName": "x402 Express Server", "usecase": "Payments" }, { From 7fe688328fd89c506a58a7c6a59ad3b834fb216c Mon Sep 17 00:00:00 2001 From: cevin Date: Mon, 17 Nov 2025 09:36:33 +0800 Subject: [PATCH 3/3] add og-image --- community/x402-express/og-image.png | Bin 0 -> 24238 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 community/x402-express/og-image.png diff --git a/community/x402-express/og-image.png b/community/x402-express/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..8b767680fafb02c35ff843555abe20409412345b GIT binary patch literal 24238 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