├── .editorconfig ├── .gitignore ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── package-lock.json ├── package.json ├── src ├── handlers │ ├── getParsedAccountData.ts │ ├── getParsedAccountsData.ts │ └── getParsedTransaction.ts ├── index.ts ├── types.d.ts ├── utils │ ├── convertLegacyIdl.ts │ └── utils.ts └── websocketHandler.ts ├── test ├── index.spec.ts └── tsconfig.json ├── tsconfig.json ├── vitest.config.mts ├── worker-configuration.d.ts ├── wrangler.jsonc ├── wrangler.toml └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = tab 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.yml] 12 | indent_style = space 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | 15 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 16 | 17 | # Runtime data 18 | 19 | pids 20 | _.pid 21 | _.seed 22 | \*.pid.lock 23 | 24 | # Directory for instrumented libs generated by jscoverage/JSCover 25 | 26 | lib-cov 27 | 28 | # Coverage directory used by tools like istanbul 29 | 30 | coverage 31 | \*.lcov 32 | 33 | # nyc test coverage 34 | 35 | .nyc_output 36 | 37 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 38 | 39 | .grunt 40 | 41 | # Bower dependency directory (https://bower.io/) 42 | 43 | bower_components 44 | 45 | # node-waf configuration 46 | 47 | .lock-wscript 48 | 49 | # Compiled binary addons (https://nodejs.org/api/addons.html) 50 | 51 | build/Release 52 | 53 | # Dependency directories 54 | 55 | node_modules/ 56 | jspm_packages/ 57 | 58 | # Snowpack dependency directory (https://snowpack.dev/) 59 | 60 | web_modules/ 61 | 62 | # TypeScript cache 63 | 64 | \*.tsbuildinfo 65 | 66 | # Optional npm cache directory 67 | 68 | .npm 69 | 70 | # Optional eslint cache 71 | 72 | .eslintcache 73 | 74 | # Optional stylelint cache 75 | 76 | .stylelintcache 77 | 78 | # Microbundle cache 79 | 80 | .rpt2_cache/ 81 | .rts2_cache_cjs/ 82 | .rts2_cache_es/ 83 | .rts2_cache_umd/ 84 | 85 | # Optional REPL history 86 | 87 | .node_repl_history 88 | 89 | # Output of 'npm pack' 90 | 91 | \*.tgz 92 | 93 | # Yarn Integrity file 94 | 95 | .yarn-integrity 96 | 97 | # dotenv environment variable files 98 | 99 | .env 100 | .env.development.local 101 | .env.test.local 102 | .env.production.local 103 | .env.local 104 | 105 | # parcel-bundler cache (https://parceljs.org/) 106 | 107 | .cache 108 | .parcel-cache 109 | 110 | # Next.js build output 111 | 112 | .next 113 | out 114 | 115 | # Nuxt.js build / generate output 116 | 117 | .nuxt 118 | dist 119 | 120 | # Gatsby files 121 | 122 | .cache/ 123 | 124 | # Comment in the public line in if your project uses Gatsby and not Next.js 125 | 126 | # https://nextjs.org/blog/next-9-1#public-directory-support 127 | 128 | # public 129 | 130 | # vuepress build output 131 | 132 | .vuepress/dist 133 | 134 | # vuepress v2.x temp and cache directory 135 | 136 | .temp 137 | .cache 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.\* 170 | 171 | # wrangler project 172 | 173 | .dev.vars 174 | .wrangler/ 175 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 140, 3 | "singleQuote": true, 4 | "semi": true, 5 | "useTabs": true 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "wrangler.json": "jsonc" 4 | } 5 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Solana RpcX 2 | 3 | A Cloudflare worker that extends Solana RPC with account parsing capabilities through rpcX methods. It enables automatic parsing for any accounts with an on-chain IDL (accounts that Solana Explorer can parse). 4 | 5 | ### Available Methods 6 | 7 | - `getParsedAccountData` - Parse a single account 8 | - `getParsedAccountsData` - Parse multiple accounts in batch 9 | - `getParsedTransaction` - Parse transaction 10 | - `subscribeParsedAccount` - Subscribe to parsed account updates 11 | 12 | ### Development 13 | 14 | Start local development server: 15 | 16 | ```bash 17 | wrangler dev 18 | ``` 19 | 20 | ### Deploy 21 | 22 | Deploy to Cloudflare to parse on the edge: 23 | 24 | ```bash 25 | wrangler deploy 26 | ``` 27 | 28 | Set the `RPC_ENDPOINT` environment variable to the URL of the base rpc endpoint. 29 | 30 | ## Usage Examples 31 | 32 | ### 1. Fetch a Single Parsed Account 33 | 34 | ```bash 35 | curl "https://rpcx.magicblock.app" \ 36 | -X POST \ 37 | -H "Content-Type: application/json" \ 38 | -d '{"jsonrpc":"2.0","id":1,"method":"getParsedAccountData","params":["FPxc7bcafdCQqHS8S1KX4ENCPP3vncxsKK3yRZ3mMzGn", {"encoding": "base64"}]}' 39 | ``` 40 | 41 | Example response: 42 | 43 | ```json 44 | { 45 | "jsonrpc": "2.0", 46 | "id": 1, 47 | "result": { 48 | "context": { 49 | "slot": 322677507, 50 | "apiVersion": "2.1.9" 51 | }, 52 | "value": { 53 | "lamports": 6876480, 54 | "data": { 55 | "text": "You are an AI agent ..." 56 | }, 57 | "owner": "LLMrieZMpbJFwN52WgmBNMxYojrpRVYXdC1RCweEbab", 58 | "executable": false, 59 | "rentEpoch": 18446744073709552000, 60 | "space": 860 61 | } 62 | } 63 | } 64 | ``` 65 | 66 | ### 2. Fetch Multiple Parsed Accounts 67 | 68 | ```bash 69 | curl -s "https://rpcx.magicblock.app" \ 70 | -X POST \ 71 | -H "Content-Type: application/json" \ 72 | -d '{"jsonrpc":"2.0","id":"0","method":"getParsedAccountsData","params":{"pubkeys":["GFg67j2Yq7wcW8ikRgtiRpVCEmYUw9BjteRehjNwnQrt","FPxc7bcafdCQqHS8S1KX4ENCPP3vncxsKK3yRZ3mMzGn"]}}' | jq . 73 | ``` 74 | 75 | ### 3. Use Custom RPC Endpoint 76 | 77 | Add the Rpc header to specify a custom RPC endpoint: 78 | 79 | ```bash 80 | curl -s "https://rpcx.magicblock.app" \ 81 | -X POST \ 82 | -H "Content-Type: application/json" \ 83 | -H "Rpc: https://api.mainnet-beta.solana.com/" \ 84 | -d '{"jsonrpc":"2.0","id":1,"method":"getParsedAccountData","params":["FPxc7bcafdCQqHS8S1KX4ENCPP3vncxsKK3yRZ3mMzGn"]}' | jq . 85 | ``` 86 | 87 | ### 4. Subscribe to Parsed Account Updates 88 | 89 | Connect: 90 | 91 | ```bash 92 | wscat -c "wss://rpcx.magicblock.app" 93 | ``` 94 | 95 | Subscribe to updates: 96 | 97 | ```bash 98 | {"jsonrpc":"2.0","id":1,"method":"subscribeParsedAccount","params":["5RgeA5P8bRaynJovch3zQURfJxXL3QK2JYg1YamSvyLb",{"encoding":"jsonParsed","commitment":"confirmed"}]} 99 | ``` 100 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rpcx", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "deploy": "wrangler deploy", 7 | "dev": "wrangler dev", 8 | "start": "wrangler dev", 9 | "test": "vitest", 10 | "cf-typegen": "wrangler types" 11 | }, 12 | "devDependencies": { 13 | "@cloudflare/vitest-pool-workers": "^0.6.4", 14 | "@cloudflare/workers-types": "^4.20250214.0", 15 | "@types/bn.js": "^5.1.6", 16 | "typescript": "^5.5.2", 17 | "vitest": "~2.1.9", 18 | "wrangler": "^3.109.2" 19 | }, 20 | "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", 21 | "dependencies": { 22 | "@coral-xyz/anchor": "^0.30.1", 23 | "@solana/web3.js": "^1.98.0", 24 | "bn.js": "^5.2.1", 25 | "bs58": "^6.0.0", 26 | "buffer": "^6.0.3", 27 | "change-case": "^5.4.4" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/handlers/getParsedAccountData.ts: -------------------------------------------------------------------------------- 1 | import { Idl, Program, Provider } from '@coral-xyz/anchor'; 2 | import { PublicKey } from '@solana/web3.js'; 3 | import { Buffer } from 'buffer'; 4 | import { errorResponse, getIdl, decodeAccount } from '../utils/utils'; 5 | 6 | export async function handleGetParsedAccountData( 7 | body: { id: string; params?: any }, 8 | provider: Provider, 9 | rpcEndpoint: string, 10 | env: Env, 11 | ctx: ExecutionContext 12 | ) { 13 | const req = new Request(rpcEndpoint, { 14 | method: 'POST', 15 | headers: { 16 | 'Content-Type': 'application/json', 17 | 'Accept': 'application/json', 18 | 'Access-Control-Allow-Origin': '*', 19 | 'Access-Control-Allow-Methods': 'POST, OPTIONS', 20 | 'Access-Control-Allow-Headers': 'Content-Type' 21 | }, 22 | body: JSON.stringify({ 23 | jsonrpc: '2.0', 24 | id: body.id, 25 | method: 'getAccountInfo', 26 | params: [ 27 | body.params?.[0], 28 | { 29 | encoding: 'base64', 30 | commitment: body.params.commitment || 'processed', 31 | } 32 | ] 33 | }) 34 | }); 35 | const accountRes = await fetch(req); 36 | let accountInfo; 37 | try{ 38 | accountInfo = await accountRes.json() as { result: { value: { data: any, owner: string } } }; 39 | }catch (error: unknown) { 40 | // @ts-ignore 41 | return errorResponse(body.id, -32602, "Error parsing response", { error: error.message, account: body.params?.[0], statusCode: accountRes.status}); 42 | } 43 | if (accountInfo.result.value) { 44 | const dataBuffer = Buffer.from(accountInfo.result.value.data[0], 'base64'); 45 | const owner = new PublicKey(accountInfo.result.value.owner); 46 | const idl = await getIdl(owner, provider, env, ctx); 47 | 48 | if (!idl) { 49 | return errorResponse(body.id, -32602, "IDL not found for program", { programId: owner.toString() }); 50 | } 51 | 52 | try { 53 | const program = new Program(idl as Idl, provider); 54 | const decodedAccount = decodeAccount(dataBuffer, program); 55 | accountInfo.result.value.data = decodedAccount.data; 56 | // @ts-ignore 57 | accountInfo.result.value.name = decodedAccount.name; 58 | // @ts-ignore 59 | accountInfo.result.value.parsed = true; 60 | // @ts-ignore 61 | accountInfo.result.value.key = body.params?.[0]; 62 | } catch (error: unknown) { 63 | return errorResponse(body.id, -32602, "Failed to decode account data", { 64 | error: error instanceof Error ? error.message : String(error), 65 | account: body.params?.[0] 66 | }); 67 | } 68 | } 69 | 70 | return accountInfo; 71 | } 72 | -------------------------------------------------------------------------------- /src/handlers/getParsedAccountsData.ts: -------------------------------------------------------------------------------- 1 | import { Idl, Program, Provider } from '@coral-xyz/anchor'; 2 | import { PublicKey } from '@solana/web3.js'; 3 | import { Buffer } from 'buffer'; 4 | import { errorResponse, getIdl, decodeAccount } from '../utils/utils'; 5 | 6 | export async function handleGetParsedAccountsData(body: { 7 | id: string, 8 | params?: any 9 | }, provider: Provider, rpcEndpoint: string, env: Env, ctx: ExecutionContext) { 10 | if (!body.params || !body.params.pubkeys || !Array.isArray(body.params.pubkeys)) { 11 | return errorResponse(body.id, -32602, 'Invalid parameters. Expected \'pubkeys\' array.'); 12 | } 13 | 14 | const pubkeys = body.params.pubkeys; 15 | const onlyParsed = body.params.onlyParsed; 16 | const req = new Request(rpcEndpoint, { 17 | method: 'POST', 18 | headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, 19 | body: JSON.stringify({ 20 | jsonrpc: '2.0', 21 | id: body.id, 22 | method: 'getMultipleAccounts', 23 | params: [ 24 | pubkeys, 25 | { 26 | encoding: 'base64', 27 | commitment: body.params.commitment || 'processed', 28 | } 29 | ] 30 | }) 31 | }); 32 | 33 | const multiRes = await fetch(req); 34 | const accountsResponse: AccountsResponse = await multiRes.json(); 35 | 36 | if (!accountsResponse.result || !Array.isArray(accountsResponse.result.value)) { 37 | return errorResponse(body.id, -32603, 'Invalid response from getMultipleAccounts'); 38 | } 39 | 40 | const idlCache = new Map(); 41 | 42 | try { 43 | // Prepare an array of promises for fetching IDLs 44 | const idlPromises = accountsResponse.result.value.map(async (account, _) => { 45 | if (account) { 46 | const owner = new PublicKey(account.owner); 47 | return getIdl(owner, provider, env, ctx, idlCache); 48 | } 49 | return null; 50 | }); 51 | 52 | // Resolve all IDL promises in parallel 53 | const idls = await Promise.all(idlPromises); 54 | 55 | // Process each account with its corresponding IDL 56 | for (let i = 0; i < accountsResponse.result.value.length; i++) { 57 | const account = accountsResponse.result.value[i]; 58 | if (account) { 59 | const dataBuffer = Buffer.from(account.data[0], 'base64'); 60 | const idl = idls[i]; 61 | if (idl) { 62 | const program = new Program(idl as Idl, provider); 63 | try { 64 | let decodedAccount = decodeAccount(dataBuffer, program); 65 | account.name = decodedAccount.name; 66 | account.data = decodedAccount.data; 67 | account.parsed = true; 68 | account.key = pubkeys[i].toString(); 69 | } catch { 70 | console.warn('Account type not found for discriminator', { 71 | accountIndex: i, 72 | pubkey: pubkeys[i] 73 | }); 74 | } 75 | } 76 | if (onlyParsed && account.parsed !== true) { 77 | account.data = null; 78 | } 79 | } 80 | } 81 | } catch (error: unknown) { 82 | return errorResponse(body.id, -32602, 'Failed to decode account data', { error: error instanceof Error ? error.message : String(error) }); 83 | } 84 | 85 | return accountsResponse; 86 | } 87 | -------------------------------------------------------------------------------- /src/handlers/getParsedTransaction.ts: -------------------------------------------------------------------------------- 1 | import { Idl, Program, Provider } from '@coral-xyz/anchor'; 2 | import { PublicKey } from '@solana/web3.js'; 3 | import { Buffer } from 'buffer'; 4 | import { errorResponse, getIdl, decodeAccount, decodeTransaction } from '../utils/utils'; 5 | 6 | export async function handleGetParsedTransaction( 7 | body: { id: string; params?: any }, 8 | provider: Provider, 9 | rpcEndpoint: string, 10 | env: Env, 11 | ctx: ExecutionContext 12 | ) { 13 | const req = new Request(rpcEndpoint, { 14 | method: 'POST', 15 | headers: { 16 | 'Content-Type': 'application/json', 17 | 'Accept': 'application/json', 18 | 'Access-Control-Allow-Origin': '*', 19 | 'Access-Control-Allow-Methods': 'POST, OPTIONS', 20 | 'Access-Control-Allow-Headers': 'Content-Type' 21 | }, 22 | body: JSON.stringify({ 23 | jsonrpc: '2.0', 24 | id: body.id, 25 | method: 'getTransaction', 26 | params: [ 27 | body.params?.[0], 28 | { 29 | encoding: 'json', 30 | commitment: body.params.commitment || 'confirmed', 31 | maxSupportedTransactionVersion: 0, 32 | } 33 | ] 34 | }) 35 | }); 36 | console.log(req); 37 | const transactionRes = await fetch(req); 38 | let transactionInfo; 39 | try{ 40 | transactionInfo = await transactionRes.json() as { result: { meta: any, slot: number, transaction: any } }; 41 | console.log(transactionInfo); 42 | }catch (error: unknown) { 43 | // @ts-ignore 44 | return errorResponse(body.id, -32602, "Error parsing response", { error: error.message, account: body.params?.[0], statusCode: accountRes.status}); 45 | } 46 | if (transactionInfo.result.transaction) { 47 | try { 48 | await Promise.all(transactionInfo.result.transaction.message.instructions.map(async (instruction: any, index: number) => { 49 | try { 50 | const programIdIndex = instruction.programIdIndex; 51 | const programId = new PublicKey(transactionInfo.result.transaction.message.accountKeys[programIdIndex]); 52 | 53 | const idl = await getIdl(programId, provider, env, ctx); 54 | if (!idl) return; 55 | 56 | const program = new Program(idl as Idl, provider); 57 | const decodedTransaction = decodeTransaction(transactionInfo.result.transaction, program); 58 | 59 | const name = decodedTransaction[index]?.name; 60 | const data = decodedTransaction[index]?.data; 61 | 62 | if (name && data) { 63 | instruction.name = name; 64 | instruction.parsedData = data; 65 | instruction.programId = programId.toString(); 66 | instruction.programName = program.idl.metadata?.name; 67 | } 68 | } catch (err) { 69 | console.error(`Error processing instruction ${index}:`, err); 70 | } 71 | }) 72 | ); 73 | 74 | } catch (error: unknown) { 75 | return errorResponse(body.id, -32602, "Failed to decode account data", { 76 | error: error instanceof Error ? error.message : String(error), 77 | account: body.params?.[0] 78 | }); 79 | } 80 | } 81 | return transactionInfo; 82 | } 83 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Provider } from '@coral-xyz/anchor'; 2 | import { Connection, PublicKey } from '@solana/web3.js'; 3 | import { handleGetParsedAccountData } from './handlers/getParsedAccountData'; 4 | import { handleGetParsedAccountsData } from './handlers/getParsedAccountsData'; 5 | import { handleWebSocketConnection } from './websocketHandler'; 6 | import { Buffer } from 'buffer'; 7 | import { BN } from 'bn.js'; 8 | import { handleGetParsedTransaction } from './handlers/getParsedTransaction'; 9 | (globalThis as any).Buffer = Buffer; 10 | (globalThis as any).BN = BN; 11 | 12 | export class SimpleProvider implements Provider { 13 | readonly connection: Connection; 14 | readonly publicKey?: PublicKey; 15 | constructor(connection: Connection, publicKey?: PublicKey) { 16 | this.connection = connection; 17 | this.publicKey = publicKey; 18 | } 19 | } 20 | 21 | const JSON_HEADERS = { 22 | 'Content-Type': 'application/json', 23 | 'Access-Control-Allow-Origin': '*' 24 | }; 25 | 26 | export default { 27 | async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { 28 | let rpcEndpoint = request?.headers?.get("Rpc")?.trim(); 29 | 30 | if (rpcEndpoint === "devnet"){ 31 | rpcEndpoint = env?.RPC_ENDPOINT_DEVNET?.trim(); 32 | } 33 | 34 | if (!rpcEndpoint) { 35 | rpcEndpoint = env?.RPC_ENDPOINT?.trim() || 'https://api.mainnet-beta.solana.com/'; 36 | } 37 | 38 | const provider = new SimpleProvider(new Connection(rpcEndpoint)); 39 | 40 | if (request.headers.get('Upgrade') === 'websocket') { 41 | const webSocketPair = new WebSocketPair(); 42 | const [client, server] = Object.values(webSocketPair); 43 | 44 | const wsEndpoint = rpcEndpoint.replace('https://', 'wss://'); 45 | await handleWebSocketConnection(provider, server, wsEndpoint, env, ctx); 46 | 47 | return new Response(null, { 48 | status: 101, 49 | webSocket: client, 50 | }); 51 | } 52 | 53 | // Handle HTTP requests 54 | let body; 55 | try { 56 | body = await request.json() as { method: string; id: string; params?: any }; 57 | } catch (error: any) { 58 | return new Response(JSON.stringify({ 59 | jsonrpc: "2.0", 60 | error: { code: -32700, message: "Parse error", data: error.message }, 61 | id: null 62 | }), { 63 | status: 400, 64 | headers: JSON_HEADERS 65 | }); 66 | } 67 | 68 | if (body.method === 'getParsedAccountData') { 69 | const result = await handleGetParsedAccountData(body, provider, rpcEndpoint, env, ctx); 70 | return new Response(JSON.stringify(result), { headers: JSON_HEADERS }); 71 | } 72 | 73 | if (body.method === 'getParsedAccountsData') { 74 | const result = await handleGetParsedAccountsData(body, provider, rpcEndpoint, env, ctx); 75 | return new Response(JSON.stringify(result), { headers: JSON_HEADERS }); 76 | } 77 | 78 | if (body.method === 'getParsedTransaction') { 79 | const result = await handleGetParsedTransaction(body, provider, rpcEndpoint, env, ctx); 80 | return new Response(JSON.stringify(result), { headers: JSON_HEADERS }); 81 | } 82 | 83 | // Proxy all other HTTP requests 84 | const proxyReq = new Request(rpcEndpoint, { 85 | method: request.method, 86 | headers: { ...request.headers, 'Content-Type': 'application/json', 'Accept': 'application/json' }, 87 | body: JSON.stringify(body) 88 | }); 89 | const proxyRes = await fetch(proxyReq); 90 | return new Response(proxyRes.body, { status: proxyRes.status, headers: JSON_HEADERS }); 91 | }, 92 | } satisfies ExportedHandler; 93 | -------------------------------------------------------------------------------- /src/types.d.ts: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/utils/convertLegacyIdl.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a port of the anchor command `anchor idl convert` to TypeScript. 3 | */ 4 | import { Idl } from '@coral-xyz/anchor'; 5 | import { 6 | IdlAccount, 7 | IdlConst, 8 | IdlDefinedFields, 9 | IdlEnumVariant, 10 | IdlErrorCode, 11 | IdlEvent, 12 | IdlField, 13 | IdlInstruction, 14 | IdlInstructionAccountItem, 15 | IdlInstructionAccounts, 16 | IdlMetadata, 17 | IdlType, 18 | IdlTypeDef, 19 | IdlTypeDefined, 20 | IdlTypeDefTy, 21 | } from '@coral-xyz/anchor/dist/cjs/idl'; 22 | import { sha256 } from '@noble/hashes/sha256'; 23 | import { snakeCase } from 'change-case'; 24 | 25 | // Legacy types based on the Rust structs 26 | // Should be included in next minor release of anchor 27 | interface LegacyIdl { 28 | version: string; 29 | name: string; 30 | docs?: string[]; 31 | constants: LegacyIdlConst[]; 32 | instructions: LegacyIdlInstruction[]; 33 | accounts: LegacyIdlTypeDefinition[]; 34 | types: LegacyIdlTypeDefinition[]; 35 | events?: LegacyIdlEvent[]; 36 | errors?: LegacyIdlErrorCode[]; 37 | metadata?: any; 38 | } 39 | 40 | interface LegacyIdlConst { 41 | name: string; 42 | type: LegacyIdlType; 43 | value: string; 44 | } 45 | 46 | interface LegacyIdlInstruction { 47 | name: string; 48 | docs?: string[]; 49 | accounts: LegacyIdlAccountItem[]; 50 | args: LegacyIdlField[]; 51 | returns?: LegacyIdlType; 52 | } 53 | 54 | interface LegacyIdlTypeDefinition { 55 | name: string; 56 | docs?: string[]; 57 | type: LegacyIdlTypeDefinitionTy; 58 | } 59 | 60 | type LegacyIdlTypeDefinitionTy = 61 | | { kind: 'struct'; fields: LegacyIdlField[] } 62 | | { kind: 'enum'; variants: LegacyIdlEnumVariant[] } 63 | | { kind: 'alias'; value: LegacyIdlType }; 64 | 65 | interface LegacyIdlField { 66 | name: string; 67 | docs?: string[]; 68 | type: LegacyIdlType; 69 | } 70 | 71 | interface LegacyIdlEnumVariant { 72 | name: string; 73 | fields?: LegacyEnumFields; 74 | } 75 | 76 | type LegacyEnumFields = LegacyIdlField[] | LegacyIdlType[]; 77 | 78 | interface LegacyIdlEvent { 79 | name: string; 80 | fields: LegacyIdlEventField[]; 81 | } 82 | 83 | interface LegacyIdlEventField { 84 | name: string; 85 | type: LegacyIdlType; 86 | index: boolean; 87 | } 88 | 89 | interface LegacyIdlErrorCode { 90 | code: number; 91 | name: string; 92 | msg?: string; 93 | } 94 | 95 | type LegacyIdlAccountItem = LegacyIdlAccount | LegacyIdlAccounts; 96 | 97 | interface LegacyIdlAccount { 98 | name: string; 99 | isMut: boolean; 100 | isSigner: boolean; 101 | isOptional?: boolean; 102 | docs?: string[]; 103 | pda?: LegacyIdlPda; 104 | relations: string[]; 105 | } 106 | 107 | interface LegacyIdlAccounts { 108 | name: string; 109 | accounts: LegacyIdlAccountItem[]; 110 | } 111 | 112 | interface LegacyIdlPda { 113 | seeds: LegacyIdlSeed[]; 114 | programId?: LegacyIdlSeed; 115 | } 116 | 117 | type LegacyIdlSeed = 118 | | { kind: 'const'; type: LegacyIdlType; value: any } 119 | | { kind: 'arg'; type: LegacyIdlType; path: string } 120 | | { kind: 'account'; type: LegacyIdlType; account?: string; path: string }; 121 | 122 | type LegacyIdlType = 123 | | 'bool' 124 | | 'u8' 125 | | 'i8' 126 | | 'u16' 127 | | 'i16' 128 | | 'u32' 129 | | 'i32' 130 | | 'u64' 131 | | 'i64' 132 | | 'u128' 133 | | 'i128' 134 | | 'f32' 135 | | 'f64' 136 | | 'bytes' 137 | | 'string' 138 | | 'publicKey' 139 | | { vec: LegacyIdlType } 140 | | { option: LegacyIdlType } 141 | | { defined: string } 142 | | { array: [LegacyIdlType, number] } 143 | | { generic: string } 144 | | { definedWithTypeArgs: { name: string; args: LegacyIdlDefinedTypeArg[] } }; 145 | 146 | type LegacyIdlDefinedTypeArg = { generic: string } | { value: string } | { type: LegacyIdlType }; 147 | 148 | function convertLegacyIdl(legacyIdl: LegacyIdl, programAddress?: string): Idl { 149 | const address: string | undefined = programAddress ?? legacyIdl.metadata?.address; 150 | if (!address) { 151 | throw new Error('Program id missing in `idl.metadata.address` field'); 152 | } 153 | return { 154 | accounts: (legacyIdl.accounts || []).map(convertAccount), 155 | address: address, 156 | constants: (legacyIdl.constants || []).map(convertConst), 157 | errors: legacyIdl.errors?.map(convertErrorCode) || [], 158 | events: legacyIdl.events?.map(convertEvent) || [], 159 | instructions: legacyIdl.instructions.map(convertInstruction), 160 | metadata: { 161 | name: legacyIdl.name, 162 | version: legacyIdl.version, 163 | } as IdlMetadata, 164 | types: [ 165 | ...(legacyIdl.types || []).map(convertTypeDef), 166 | ...(legacyIdl.accounts || []).map(convertTypeDef), 167 | ...(legacyIdl.events || []).map(convertEventToTypeDef), 168 | ], 169 | }; 170 | } 171 | 172 | function traverseType(type: IdlType, refs: Set) { 173 | if (typeof type === 'string') { 174 | // skip 175 | } else if ('vec' in type) { 176 | traverseType(type.vec, refs); 177 | } else if ('option' in type) { 178 | traverseType(type.option, refs); 179 | } else if ('defined' in type) { 180 | refs.add(type.defined.name); 181 | } else if ('array' in type) { 182 | traverseType(type.array[0], refs); 183 | } else if ('generic' in type) { 184 | refs.add(type.generic); 185 | } else if ('coption' in type) { 186 | traverseType(type.coption, refs); 187 | } 188 | } 189 | 190 | function traverseIdlFields(fields: IdlDefinedFields, refs: Set) { 191 | fields.forEach(field => 192 | typeof field === 'string' 193 | ? traverseType(field, refs) 194 | : typeof field === 'object' && 'type' in field 195 | ? traverseType(field.type, refs) 196 | : traverseType(field, refs) 197 | ); 198 | } 199 | 200 | function traverseTypeDef(type: IdlTypeDefTy, refs: Set) { 201 | switch (type.kind) { 202 | case 'struct': 203 | traverseIdlFields(type.fields ?? [], refs); 204 | return; 205 | case 'enum': 206 | type.variants.forEach(variant => traverseIdlFields(variant.fields ?? [], refs)); 207 | return; 208 | case 'type': 209 | traverseType(type.alias, refs); 210 | return; 211 | } 212 | } 213 | 214 | function getTypeReferences(idl: Idl): Set { 215 | const refs = new Set(); 216 | idl.constants?.forEach(constant => traverseType(constant.type, refs)); 217 | idl.accounts?.forEach(account => refs.add(account.name)); 218 | idl.instructions?.forEach(instruction => instruction.args.forEach(arg => traverseType(arg.type, refs))); 219 | idl.events?.forEach(event => refs.add(event.name)); 220 | 221 | // Build up recursive type references in breadth-first manner. 222 | // Very inefficient since we traverse same types multiple times. 223 | // But it works. Open to contributions that do proper graph traversal 224 | let prevSize = refs.size; 225 | let sizeDiff = 1; 226 | while (sizeDiff > 0) { 227 | for (const idlType of idl.types ?? []) { 228 | if (refs.has(idlType.name)) { 229 | traverseTypeDef(idlType.type, refs); 230 | } 231 | } 232 | sizeDiff = refs.size - prevSize; 233 | prevSize = refs.size; 234 | } 235 | return refs; 236 | } 237 | 238 | // Remove types that are not used in definition of instructions, accounts, events, or constants 239 | function removeUnusedTypes(idl: Idl): Idl | null { 240 | if (idl == null) return null; 241 | const usedElsewhere = getTypeReferences(idl); 242 | return { ...idl, types: (idl.types ?? []).filter(type => usedElsewhere.has(type.name)) }; 243 | } 244 | 245 | function getDisc(prefix: string, name: string): number[] { 246 | const hash = sha256(`${prefix}:${name}`); 247 | return Array.from(hash.slice(0, 8)); 248 | } 249 | 250 | function convertInstruction(instruction: LegacyIdlInstruction): IdlInstruction { 251 | const name = snakeCase(instruction.name); 252 | return { 253 | accounts: instruction.accounts.map(convertInstructionAccount), 254 | args: instruction.args.map(convertField), 255 | discriminator: getDisc('global', name), 256 | name, 257 | returns: instruction.returns ? convertType(instruction.returns) : undefined, 258 | }; 259 | } 260 | 261 | function convertAccount(account: LegacyIdlTypeDefinition): IdlAccount { 262 | return { 263 | discriminator: getDisc('account', account.name), 264 | name: account.name, 265 | }; 266 | } 267 | 268 | function convertTypeDef(typeDef: LegacyIdlTypeDefinition): IdlTypeDef { 269 | return { 270 | name: typeDef.name, 271 | type: convertTypeDefTy(typeDef.type), 272 | }; 273 | } 274 | 275 | function convertTypeDefTy(type: LegacyIdlTypeDefinitionTy): IdlTypeDef['type'] { 276 | switch (type.kind) { 277 | case 'struct': 278 | return { 279 | fields: type.fields.map(convertField), 280 | kind: 'struct', 281 | }; 282 | case 'enum': 283 | return { 284 | kind: 'enum', 285 | variants: type.variants.map(convertEnumVariant), 286 | }; 287 | case 'alias': 288 | return { 289 | alias: convertType(type.value), 290 | kind: 'type', 291 | }; 292 | } 293 | } 294 | 295 | function convertField(field: LegacyIdlField): IdlField { 296 | return { 297 | name: snakeCase(field.name), 298 | type: convertType(field.type), 299 | }; 300 | } 301 | 302 | function convertEnumVariant(variant: LegacyIdlEnumVariant): IdlEnumVariant { 303 | return { 304 | fields: variant.fields ? convertEnumFields(variant.fields) : undefined, 305 | name: variant.name, 306 | }; 307 | } 308 | 309 | function convertEnumFields(fields: LegacyEnumFields): IdlDefinedFields { 310 | if (Array.isArray(fields) && fields.length > 0 && typeof fields[0] === 'object' && 'type' in fields[0]) { 311 | return (fields as LegacyIdlField[]).map(convertField) as IdlField[]; 312 | } else { 313 | return (fields as LegacyIdlType[]).map(type => convertType(type)) as IdlType[]; 314 | } 315 | } 316 | 317 | function convertEvent(event: LegacyIdlEvent): IdlEvent { 318 | return { 319 | discriminator: getDisc('event', event.name), 320 | name: event.name, 321 | }; 322 | } 323 | 324 | function convertErrorCode(error: LegacyIdlErrorCode): IdlErrorCode { 325 | return { 326 | code: error.code, 327 | msg: error.msg, 328 | name: error.name, 329 | }; 330 | } 331 | 332 | function convertConst(constant: LegacyIdlConst): IdlConst { 333 | return { 334 | name: constant.name, 335 | type: convertType(constant.type), 336 | value: constant.value, 337 | }; 338 | } 339 | 340 | function convertInstructionAccount(account: LegacyIdlAccountItem): IdlInstructionAccountItem { 341 | if ('accounts' in account) { 342 | return convertInstructionAccounts(account); 343 | } else { 344 | return { 345 | docs: account.docs || [], 346 | name: snakeCase(account.name), 347 | optional: account.isOptional || false, 348 | pda: account.pda ? convertPda(account.pda) : undefined, 349 | relations: account.relations || [], 350 | signer: account.isSigner || false, 351 | writable: account.isMut || false, 352 | }; 353 | } 354 | } 355 | 356 | function convertInstructionAccounts(accounts: LegacyIdlAccounts): IdlInstructionAccounts { 357 | return { 358 | accounts: accounts.accounts.map(convertInstructionAccount), 359 | name: snakeCase(accounts.name), 360 | }; 361 | } 362 | 363 | function convertPda(pda: LegacyIdlPda): { seeds: any[]; programId?: any } { 364 | return { 365 | ...(pda.programId ? { programId: convertSeed(pda.programId) } : {}), 366 | seeds: pda.seeds.map(convertSeed), 367 | }; 368 | } 369 | 370 | function convertSeed(seed: LegacyIdlSeed): any { 371 | switch (seed.kind) { 372 | case 'const': 373 | return { kind: 'const', type: convertType(seed.type), value: seed.value }; 374 | case 'arg': 375 | return { kind: 'arg', path: seed.path, type: convertType(seed.type) }; 376 | case 'account': 377 | return { 378 | ...(seed.account ? { account: seed.account } : {}), 379 | kind: 'account', 380 | path: seed.path, 381 | type: convertType(seed.type), 382 | }; 383 | } 384 | } 385 | 386 | function convertEventToTypeDef(event: LegacyIdlEvent): IdlTypeDef { 387 | return { 388 | name: event.name, 389 | type: { 390 | fields: event.fields.map(field => ({ 391 | name: snakeCase(field.name), 392 | type: convertType(field.type), 393 | })), 394 | kind: 'struct', 395 | }, 396 | }; 397 | } 398 | 399 | function convertType(type: LegacyIdlType): IdlType { 400 | if (typeof type === 'string') { 401 | return type === 'publicKey' ? 'pubkey' : type; 402 | } else if ('vec' in type) { 403 | return { vec: convertType(type.vec) }; 404 | } else if ('option' in type) { 405 | return { option: convertType(type.option) }; 406 | } else if ('defined' in type) { 407 | return { defined: { generics: [], name: type.defined } } as IdlTypeDefined; 408 | } else if ('array' in type) { 409 | return { array: [convertType(type.array[0]), type.array[1]] }; 410 | } else if ('generic' in type) { 411 | return type; 412 | } else if ('definedWithTypeArgs' in type) { 413 | return { 414 | defined: { 415 | generics: type.definedWithTypeArgs.args.map(convertDefinedTypeArg), 416 | name: type.definedWithTypeArgs.name, 417 | }, 418 | } as IdlTypeDefined; 419 | } 420 | throw new Error(`Unsupported type: ${JSON.stringify(type)}`); 421 | } 422 | 423 | function convertDefinedTypeArg(arg: LegacyIdlDefinedTypeArg): any { 424 | if ('generic' in arg) { 425 | return { generic: arg.generic }; 426 | } else if ('value' in arg) { 427 | return { value: arg.value }; 428 | } else if ('type' in arg) { 429 | return { type: convertType(arg.type) }; 430 | } 431 | throw new Error(`Unsupported defined type arg: ${JSON.stringify(arg)}`); 432 | } 433 | 434 | export function getIdlSpecType(idl: any): IdlSpec { 435 | return idl?.metadata?.spec ?? 'legacy'; 436 | } 437 | 438 | export type IdlSpec = '0.1.0' | 'legacy'; 439 | 440 | export function formatIdl(idl: any, programAddress?: string): Idl | null { 441 | if (!idl) { 442 | return null; 443 | } 444 | const spec = getIdlSpecType(idl); 445 | switch (spec) { 446 | case '0.1.0': 447 | return idl as Idl; 448 | case 'legacy': 449 | return removeUnusedTypes(convertLegacyIdl(idl as LegacyIdl, programAddress)); 450 | default: 451 | throw new Error(`IDL spec not supported: ${spec}`); 452 | } 453 | } 454 | -------------------------------------------------------------------------------- /src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Program, Provider } from '@coral-xyz/anchor'; 2 | import { PublicKey } from '@solana/web3.js'; 3 | import { Buffer } from 'buffer'; 4 | import { formatIdl } from './convertLegacyIdl'; 5 | import BN from "bn.js"; 6 | 7 | export function errorResponse(id: string, code: number, message: string, data?: any): unknown { 8 | return { 9 | jsonrpc: "2.0", 10 | error: { code, message, data }, 11 | id, 12 | } 13 | } 14 | 15 | export async function getIdl( 16 | owner: PublicKey, 17 | provider: Provider, 18 | env: Env, 19 | ctx: ExecutionContext, 20 | cache?: Map 21 | ): Promise { 22 | const ownerStr = owner.toString(); 23 | if (cache && cache.has(ownerStr)) return cache.get(ownerStr); 24 | const cacheKey = `idl:${ownerStr}`; 25 | let idl = env.IDL_CACHE ? await env.IDL_CACHE.get(cacheKey, 'json') : null; 26 | if (!idl) { 27 | idl = await Program.fetchIdl(owner, provider); 28 | try { 29 | idl = formatIdl(idl, ownerStr); 30 | if (env.IDL_CACHE && idl) { 31 | ctx.waitUntil(env.IDL_CACHE.put(cacheKey, JSON.stringify(idl), { expirationTtl: 3600 })); 32 | } 33 | }catch (error) { 34 | console.error("Error formatting IDL:", error); 35 | } 36 | } 37 | if (idl && cache) cache.set(ownerStr, idl); 38 | return idl; 39 | } 40 | 41 | function formatData(obj: any): any { 42 | if (obj instanceof BN) { 43 | return obj.toString(10); 44 | } else if (obj instanceof PublicKey) { 45 | return obj.toString(); 46 | } else if (Array.isArray(obj)) { 47 | return obj.map(formatData); 48 | } else if (obj && typeof obj === "object") { 49 | const result: any = {}; 50 | for (const key in obj) { 51 | result[key] = formatData(obj[key]); 52 | } 53 | return result; 54 | } 55 | return obj; 56 | } 57 | 58 | export function decodeAccount(dataBuffer: Buffer, program: Program): any { 59 | const discriminator = dataBuffer.subarray(0, 8); 60 | const accountType = program.idl.accounts?.find(acc => 61 | Buffer.compare(Buffer.from(acc.discriminator), discriminator) === 0 62 | ); 63 | if (!accountType) { 64 | throw new Error("Account type not found for discriminator"); 65 | } 66 | const decoded = program.coder.accounts.decode(accountType.name, dataBuffer); 67 | return { 68 | name: accountType.name, 69 | data: formatData(decoded) 70 | }; 71 | } 72 | 73 | export function decodeTransaction(transaction: any, program: Program): {name?: string, data?: any}[] { 74 | const message = transaction?.message; 75 | if (!message || !message.instructions) { 76 | console.error("Invalid transaction format"); 77 | return []; 78 | } 79 | const decodedInstructions: any[] = []; 80 | for (const ix of message.instructions) { 81 | // Only decode if the instruction belongs to our program 82 | const programId = message.accountKeys[ix.programIdIndex]; 83 | if (programId !== program.programId.toString()) { 84 | decodedInstructions.push({}); 85 | }else{ 86 | try { 87 | // @ts-ignore 88 | const decoded = program.coder.instruction.decode(ix.data, 'base64'); 89 | decodedInstructions.push({ 90 | name: decoded?.name, 91 | data: formatData(decoded?.data), 92 | }); 93 | } catch (err) { 94 | decodedInstructions.push({}); 95 | } 96 | } 97 | } 98 | return decodedInstructions; 99 | } 100 | -------------------------------------------------------------------------------- /src/websocketHandler.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js'; 2 | import { Buffer } from 'buffer'; 3 | import { Program, Provider } from '@coral-xyz/anchor'; 4 | import { decodeAccount, getIdl } from './utils/utils'; 5 | 6 | export async function handleWebSocketConnection( 7 | provider: Provider, 8 | server: WebSocket, 9 | rpcEndpoint: string, 10 | env: Env, ctx: ExecutionContext) { 11 | server.accept(); 12 | const backendSocket = new WebSocket(rpcEndpoint); 13 | const subscriptionMap = new Map(); 14 | 15 | server.addEventListener('message', async event => { 16 | const message = JSON.parse(event.data as string); 17 | 18 | if (message.method === 'subscribeParsedAccount') { 19 | const accountPubkey = new PublicKey(message.params[0]); 20 | // Extract commitment from params if available 21 | const configParam = message.params[1] || {}; 22 | const commitment = configParam.commitment || 'processed'; 23 | 24 | const subscribeMessage = { 25 | jsonrpc: '2.0', 26 | id: message.id, 27 | method: 'accountSubscribe', 28 | params: [ 29 | message.params[0], 30 | { 31 | encoding: 'base64', 32 | commitment: commitment 33 | } 34 | ] 35 | }; 36 | backendSocket.send(JSON.stringify(subscribeMessage)); 37 | 38 | // Store subscription ID when we get the response 39 | backendSocket.addEventListener('message', function handler(event) { 40 | const response = JSON.parse(event.data as string); 41 | if (response.id === message.id) { 42 | subscriptionMap.set(response.result, accountPubkey); 43 | backendSocket.removeEventListener('message', handler); 44 | } 45 | }); 46 | } else { 47 | backendSocket.send(event.data as string); 48 | } 49 | }); 50 | 51 | backendSocket.addEventListener('message', async event => { 52 | const message = JSON.parse(event.data as string); 53 | 54 | if (message.method === 'accountNotification') { 55 | const subscription = message.params.subscription; 56 | const accountPubkey = subscriptionMap.get(subscription); 57 | 58 | if (accountPubkey) { 59 | const accountData = message.params.result.value; 60 | const dataBuffer = Buffer.from(accountData.data[0], 'base64'); 61 | const owner = new PublicKey(accountData.owner); 62 | 63 | const idl = await getIdl(owner, provider, env, ctx); 64 | 65 | if (idl) { 66 | try { 67 | const program = new Program(idl, provider); 68 | let decodedAccount = decodeAccount(dataBuffer, program); 69 | message.params.result.value.data = decodedAccount.data; 70 | message.params.result.value.name = decodedAccount.name; 71 | message.params.result.value.parsed = true; 72 | } catch (error) { 73 | console.error('Failed to decode account data:', error); 74 | } 75 | } 76 | } 77 | } 78 | server.send(JSON.stringify(message)); 79 | }); 80 | 81 | server.addEventListener('close', () => backendSocket.close()); 82 | backendSocket.addEventListener('close', () => server.close()); 83 | } 84 | -------------------------------------------------------------------------------- /test/index.spec.ts: -------------------------------------------------------------------------------- 1 | // test/index.spec.ts 2 | import { env, createExecutionContext, waitOnExecutionContext, SELF } from 'cloudflare:test'; 3 | import { describe, it, expect } from 'vitest'; 4 | import worker from '../src/index'; 5 | 6 | // For now, you'll need to do something like this to get a correctly-typed 7 | // `Request` to pass to `worker.fetch()`. 8 | const IncomingRequest = Request; 9 | 10 | describe('Hello World worker', () => { 11 | it('responds with Hello World! (unit style)', async () => { 12 | const request = new IncomingRequest('http://example.com'); 13 | // Create an empty context to pass to `worker.fetch()`. 14 | const ctx = createExecutionContext(); 15 | const response = await worker.fetch(request, env, ctx); 16 | // Wait for all `Promise`s passed to `ctx.waitUntil()` to settle before running test assertions 17 | await waitOnExecutionContext(ctx); 18 | expect(await response.text()).toMatchInlineSnapshot(`"Hello World!"`); 19 | }); 20 | 21 | it('responds with Hello World! (integration style)', async () => { 22 | const response = await SELF.fetch('https://example.com'); 23 | expect(await response.text()).toMatchInlineSnapshot(`"Hello World!"`); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["@cloudflare/workers-types/experimental", "@cloudflare/vitest-pool-workers"] 5 | }, 6 | "include": ["./**/*.ts", "../worker-configuration.d.ts"], 7 | "exclude": [] 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 6 | "target": "es2021", 7 | /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 8 | "lib": ["es2021"], 9 | /* Specify what JSX code is generated. */ 10 | "jsx": "react-jsx", 11 | 12 | /* Specify what module code is generated. */ 13 | "module": "es2022", 14 | /* Specify how TypeScript looks up a file from a given module specifier. */ 15 | "moduleResolution": "Bundler", 16 | /* Specify type package names to be included without being referenced in a source file. */ 17 | "types": [ 18 | "@cloudflare/workers-types/2023-07-01" 19 | ], 20 | /* Enable importing .json files */ 21 | "resolveJsonModule": true, 22 | 23 | /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 24 | "allowJs": true, 25 | /* Enable error reporting in type-checked JavaScript files. */ 26 | "checkJs": false, 27 | 28 | /* Disable emitting files from a compilation. */ 29 | "noEmit": true, 30 | 31 | /* Ensure that each file can be safely transpiled without relying on other imports. */ 32 | "isolatedModules": true, 33 | /* Allow 'import x from y' when a module doesn't have a default export. */ 34 | "allowSyntheticDefaultImports": true, 35 | /* Ensure that casing is correct in imports. */ 36 | "forceConsistentCasingInFileNames": true, 37 | 38 | /* Enable all strict type-checking options. */ 39 | "strict": true, 40 | 41 | /* Skip type checking all .d.ts files. */ 42 | "skipLibCheck": true 43 | }, 44 | "exclude": ["test"], 45 | "include": ["worker-configuration.d.ts", "src/**/*.ts"] 46 | } 47 | -------------------------------------------------------------------------------- /vitest.config.mts: -------------------------------------------------------------------------------- 1 | import { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config'; 2 | 3 | export default defineWorkersConfig({ 4 | test: { 5 | poolOptions: { 6 | workers: { 7 | wrangler: { configPath: './wrangler.jsonc' }, 8 | }, 9 | }, 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /worker-configuration.d.ts: -------------------------------------------------------------------------------- 1 | interface Env { 2 | RPC_ENDPOINT: string; 3 | RPC_ENDPOINT_DEVNET: string; 4 | IDL_CACHE: KVNamespace; 5 | } 6 | 7 | interface AccountsResponse { 8 | jsonrpc: string; 9 | result: { 10 | value: (AccountInfo | null)[]; 11 | }; 12 | id: string; 13 | } 14 | -------------------------------------------------------------------------------- /wrangler.jsonc: -------------------------------------------------------------------------------- 1 | /** 2 | * For more details on how to configure Wrangler, refer to: 3 | * https://developers.cloudflare.com/workers/wrangler/configuration/ 4 | */ 5 | { 6 | "$schema": "node_modules/wrangler/config-schema.json", 7 | "name": "rpcx", 8 | "main": "src/index.ts", 9 | "compatibility_date": "2025-02-14", 10 | "routes": [ 11 | { "pattern": "rpcx.magicblock.app", "custom_domain": true } 12 | ], 13 | "observability": { 14 | "enabled": true 15 | } 16 | /** 17 | * Smart Placement 18 | * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement 19 | */ 20 | // "placement": { "mode": "smart" }, 21 | 22 | /** 23 | * Bindings 24 | * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including 25 | * databases, object storage, AI inference, real-time communication and more. 26 | * https://developers.cloudflare.com/workers/runtime-apis/bindings/ 27 | */ 28 | 29 | /** 30 | * Environment Variables 31 | * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables 32 | */ 33 | // "vars": { "MY_VARIABLE": "production_value" }, 34 | /** 35 | * Note: Use secrets to store sensitive data. 36 | * https://developers.cloudflare.com/workers/configuration/secrets/ 37 | */ 38 | 39 | /** 40 | * Static Assets 41 | * https://developers.cloudflare.com/workers/static-assets/binding/ 42 | */ 43 | // "assets": { "directory": "./public/", "binding": "ASSETS" }, 44 | 45 | /** 46 | * Service Bindings (communicate between multiple Workers) 47 | * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings 48 | */ 49 | // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }] 50 | } 51 | -------------------------------------------------------------------------------- /wrangler.toml: -------------------------------------------------------------------------------- 1 | [build.deps] 2 | browser_only_package_imports = ["buffer"] 3 | 4 | kv_namespaces = [ 5 | { binding = "IDL_CACHE", id = "YOUR_KV_ID" } 6 | ] 7 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.25.0": 6 | version "7.26.9" 7 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz" 8 | integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg== 9 | dependencies: 10 | regenerator-runtime "^0.14.0" 11 | 12 | "@cloudflare/kv-asset-handler@0.3.4": 13 | version "0.3.4" 14 | resolved "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz" 15 | integrity sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q== 16 | dependencies: 17 | mime "^3.0.0" 18 | 19 | "@cloudflare/vitest-pool-workers@^0.6.4": 20 | version "0.6.16" 21 | resolved "https://registry.npmjs.org/@cloudflare/vitest-pool-workers/-/vitest-pool-workers-0.6.16.tgz" 22 | integrity sha512-fKGP+jMyrIh54QncFa7A5NE3k8fWW6oCU4v9IW6Hiu7cAVKBvhdPUAfYBQS7EU1TsjGJl/y5N4Urds3PUFocoQ== 23 | dependencies: 24 | birpc "0.2.14" 25 | cjs-module-lexer "^1.2.3" 26 | devalue "^4.3.0" 27 | esbuild "0.17.19" 28 | miniflare "3.20250204.1" 29 | semver "^7.5.1" 30 | wrangler "3.109.1" 31 | zod "^3.22.3" 32 | 33 | "@cloudflare/workerd-darwin-64@1.20250204.0": 34 | version "1.20250204.0" 35 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250204.0.tgz#4e61a4247b2e04227e0ccdd631127cbf0e80b791" 36 | integrity sha512-HpsgbWEfvdcwuZ8WAZhi1TlSCyyHC3tbghpKsOqGDaQNltyAFAWqa278TPNfcitYf/FmV4961v3eqUE+RFdHNQ== 37 | 38 | "@cloudflare/workerd-darwin-64@1.20250214.0": 39 | version "1.20250214.0" 40 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250214.0.tgz#fa8712b23d834e72a9682599e5530837d821e000" 41 | integrity sha512-cDvvedWDc5zrgDnuXe2qYcz/TwBvzmweO55C7XpPuAWJ9Oqxv81PkdekYxD8mH989aQ/GI5YD0Fe6fDYlM+T3Q== 42 | 43 | "@cloudflare/workerd-darwin-arm64@1.20250204.0": 44 | version "1.20250204.0" 45 | resolved "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250204.0.tgz" 46 | integrity sha512-AJ8Tk7KMJqePlch3SH8oL41ROtsrb07hKRHD6M+FvGC3tLtf26rpteAAMNYKMDYKzFNFUIKZNijYDFZjBFndXQ== 47 | 48 | "@cloudflare/workerd-darwin-arm64@1.20250214.0": 49 | version "1.20250214.0" 50 | resolved "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250214.0.tgz" 51 | integrity sha512-NytCvRveVzu0mRKo+tvZo3d/gCUway3B2ZVqSi/TS6NXDGBYIJo7g6s3BnTLS74kgyzeDOjhu9j/RBJBS809qw== 52 | 53 | "@cloudflare/workerd-linux-64@1.20250204.0": 54 | version "1.20250204.0" 55 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250204.0.tgz#d3c255f201bf49bb8511ba734e506d87865ec151" 56 | integrity sha512-RIUfUSnDC8h73zAa+u1K2Frc7nc+eeQoBBP7SaqsRe6JdX8jfIv/GtWjQWCoj8xQFgLvhpJKZ4sTTTV+AilQbw== 57 | 58 | "@cloudflare/workerd-linux-64@1.20250214.0": 59 | version "1.20250214.0" 60 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250214.0.tgz#1fe090a9232ccbfb71abe92f55b554a9fc2fb796" 61 | integrity sha512-pQ7+aHNHj8SiYEs4d/6cNoimE5xGeCMfgU1yfDFtA9YGN9Aj2BITZgOWPec+HW7ZkOy9oWlNrO6EvVjGgB4tbQ== 62 | 63 | "@cloudflare/workerd-linux-arm64@1.20250204.0": 64 | version "1.20250204.0" 65 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250204.0.tgz#bda13fd9c919050ba436d2f3235407910d23843c" 66 | integrity sha512-8Ql8jDjoIgr2J7oBD01kd9kduUz60njofrBpAOkjCPed15He8e8XHkYaYow3g0xpae4S2ryrPOeoD3M64sRxeg== 67 | 68 | "@cloudflare/workerd-linux-arm64@1.20250214.0": 69 | version "1.20250214.0" 70 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250214.0.tgz#e890f88fca6d86174069416298f3889c212f5fe6" 71 | integrity sha512-Vhlfah6Yd9ny1npNQjNgElLIjR6OFdEbuR3LCfbLDCwzWEBFhIf7yC+Tpp/a0Hq7kLz3sLdktaP7xl3PJhyOjA== 72 | 73 | "@cloudflare/workerd-windows-64@1.20250204.0": 74 | version "1.20250204.0" 75 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250204.0.tgz#34096e76d25fe0e21b6e2774c8e8d827bd787208" 76 | integrity sha512-RpDJO3+to+e17X3EWfRCagboZYwBz2fowc+jL53+fd7uD19v3F59H48lw2BDpHJMRyhg6ouWcpM94OhsHv8ecA== 77 | 78 | "@cloudflare/workerd-windows-64@1.20250214.0": 79 | version "1.20250214.0" 80 | resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250214.0.tgz#4e7666cc41196a215e11e720b27518311c957fa7" 81 | integrity sha512-GMwMyFbkjBKjYJoKDhGX8nuL4Gqe3IbVnVWf2Q6086CValyIknupk5J6uQWGw2EBU3RGO3x4trDXT5WphQJZDQ== 82 | 83 | "@cloudflare/workers-types@^4.20250214.0": 84 | version "4.20250214.0" 85 | resolved "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20250214.0.tgz" 86 | integrity sha512-+M8oOFVbyXT5GeJrYLWMUGyPf5wGB4+k59PPqdedtOig7NjZ5r4S79wMdaZ/EV5IV8JPtZBSNjTKpDnNmfxjaQ== 87 | 88 | "@coral-xyz/anchor-errors@^0.30.1": 89 | version "0.30.1" 90 | resolved "https://registry.npmjs.org/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz" 91 | integrity sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ== 92 | 93 | "@coral-xyz/anchor@^0.30.1": 94 | version "0.30.1" 95 | resolved "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.30.1.tgz" 96 | integrity sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ== 97 | dependencies: 98 | "@coral-xyz/anchor-errors" "^0.30.1" 99 | "@coral-xyz/borsh" "^0.30.1" 100 | "@noble/hashes" "^1.3.1" 101 | "@solana/web3.js" "^1.68.0" 102 | bn.js "^5.1.2" 103 | bs58 "^4.0.1" 104 | buffer-layout "^1.2.2" 105 | camelcase "^6.3.0" 106 | cross-fetch "^3.1.5" 107 | crypto-hash "^1.3.0" 108 | eventemitter3 "^4.0.7" 109 | pako "^2.0.3" 110 | snake-case "^3.0.4" 111 | superstruct "^0.15.4" 112 | toml "^3.0.0" 113 | 114 | "@coral-xyz/borsh@^0.30.1": 115 | version "0.30.1" 116 | resolved "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.30.1.tgz" 117 | integrity sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ== 118 | dependencies: 119 | bn.js "^5.1.2" 120 | buffer-layout "^1.2.0" 121 | 122 | "@cspotcode/source-map-support@0.8.1": 123 | version "0.8.1" 124 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" 125 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 126 | dependencies: 127 | "@jridgewell/trace-mapping" "0.3.9" 128 | 129 | "@emnapi/runtime@^1.2.0": 130 | version "1.3.1" 131 | resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" 132 | integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== 133 | dependencies: 134 | tslib "^2.4.0" 135 | 136 | "@esbuild-plugins/node-globals-polyfill@0.2.3": 137 | version "0.2.3" 138 | resolved "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz" 139 | integrity sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw== 140 | 141 | "@esbuild-plugins/node-modules-polyfill@0.2.2": 142 | version "0.2.2" 143 | resolved "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz" 144 | integrity sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA== 145 | dependencies: 146 | escape-string-regexp "^4.0.0" 147 | rollup-plugin-node-polyfills "^0.2.1" 148 | 149 | "@esbuild/aix-ppc64@0.21.5": 150 | version "0.21.5" 151 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" 152 | integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== 153 | 154 | "@esbuild/android-arm64@0.17.19": 155 | version "0.17.19" 156 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" 157 | integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== 158 | 159 | "@esbuild/android-arm64@0.21.5": 160 | version "0.21.5" 161 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" 162 | integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== 163 | 164 | "@esbuild/android-arm@0.17.19": 165 | version "0.17.19" 166 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" 167 | integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== 168 | 169 | "@esbuild/android-arm@0.21.5": 170 | version "0.21.5" 171 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" 172 | integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== 173 | 174 | "@esbuild/android-x64@0.17.19": 175 | version "0.17.19" 176 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" 177 | integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== 178 | 179 | "@esbuild/android-x64@0.21.5": 180 | version "0.21.5" 181 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" 182 | integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== 183 | 184 | "@esbuild/darwin-arm64@0.17.19": 185 | version "0.17.19" 186 | resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz" 187 | integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== 188 | 189 | "@esbuild/darwin-arm64@0.21.5": 190 | version "0.21.5" 191 | resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz" 192 | integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== 193 | 194 | "@esbuild/darwin-x64@0.17.19": 195 | version "0.17.19" 196 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" 197 | integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== 198 | 199 | "@esbuild/darwin-x64@0.21.5": 200 | version "0.21.5" 201 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" 202 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== 203 | 204 | "@esbuild/freebsd-arm64@0.17.19": 205 | version "0.17.19" 206 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" 207 | integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== 208 | 209 | "@esbuild/freebsd-arm64@0.21.5": 210 | version "0.21.5" 211 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" 212 | integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== 213 | 214 | "@esbuild/freebsd-x64@0.17.19": 215 | version "0.17.19" 216 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" 217 | integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== 218 | 219 | "@esbuild/freebsd-x64@0.21.5": 220 | version "0.21.5" 221 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" 222 | integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== 223 | 224 | "@esbuild/linux-arm64@0.17.19": 225 | version "0.17.19" 226 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" 227 | integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== 228 | 229 | "@esbuild/linux-arm64@0.21.5": 230 | version "0.21.5" 231 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" 232 | integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== 233 | 234 | "@esbuild/linux-arm@0.17.19": 235 | version "0.17.19" 236 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" 237 | integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== 238 | 239 | "@esbuild/linux-arm@0.21.5": 240 | version "0.21.5" 241 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" 242 | integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== 243 | 244 | "@esbuild/linux-ia32@0.17.19": 245 | version "0.17.19" 246 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" 247 | integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== 248 | 249 | "@esbuild/linux-ia32@0.21.5": 250 | version "0.21.5" 251 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" 252 | integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== 253 | 254 | "@esbuild/linux-loong64@0.17.19": 255 | version "0.17.19" 256 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" 257 | integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== 258 | 259 | "@esbuild/linux-loong64@0.21.5": 260 | version "0.21.5" 261 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" 262 | integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== 263 | 264 | "@esbuild/linux-mips64el@0.17.19": 265 | version "0.17.19" 266 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" 267 | integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== 268 | 269 | "@esbuild/linux-mips64el@0.21.5": 270 | version "0.21.5" 271 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" 272 | integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== 273 | 274 | "@esbuild/linux-ppc64@0.17.19": 275 | version "0.17.19" 276 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" 277 | integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== 278 | 279 | "@esbuild/linux-ppc64@0.21.5": 280 | version "0.21.5" 281 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" 282 | integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== 283 | 284 | "@esbuild/linux-riscv64@0.17.19": 285 | version "0.17.19" 286 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" 287 | integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== 288 | 289 | "@esbuild/linux-riscv64@0.21.5": 290 | version "0.21.5" 291 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" 292 | integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== 293 | 294 | "@esbuild/linux-s390x@0.17.19": 295 | version "0.17.19" 296 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" 297 | integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== 298 | 299 | "@esbuild/linux-s390x@0.21.5": 300 | version "0.21.5" 301 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" 302 | integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== 303 | 304 | "@esbuild/linux-x64@0.17.19": 305 | version "0.17.19" 306 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" 307 | integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== 308 | 309 | "@esbuild/linux-x64@0.21.5": 310 | version "0.21.5" 311 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" 312 | integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== 313 | 314 | "@esbuild/netbsd-x64@0.17.19": 315 | version "0.17.19" 316 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" 317 | integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== 318 | 319 | "@esbuild/netbsd-x64@0.21.5": 320 | version "0.21.5" 321 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" 322 | integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== 323 | 324 | "@esbuild/openbsd-x64@0.17.19": 325 | version "0.17.19" 326 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" 327 | integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== 328 | 329 | "@esbuild/openbsd-x64@0.21.5": 330 | version "0.21.5" 331 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" 332 | integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== 333 | 334 | "@esbuild/sunos-x64@0.17.19": 335 | version "0.17.19" 336 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" 337 | integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== 338 | 339 | "@esbuild/sunos-x64@0.21.5": 340 | version "0.21.5" 341 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" 342 | integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== 343 | 344 | "@esbuild/win32-arm64@0.17.19": 345 | version "0.17.19" 346 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" 347 | integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== 348 | 349 | "@esbuild/win32-arm64@0.21.5": 350 | version "0.21.5" 351 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" 352 | integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== 353 | 354 | "@esbuild/win32-ia32@0.17.19": 355 | version "0.17.19" 356 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" 357 | integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== 358 | 359 | "@esbuild/win32-ia32@0.21.5": 360 | version "0.21.5" 361 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" 362 | integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== 363 | 364 | "@esbuild/win32-x64@0.17.19": 365 | version "0.17.19" 366 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" 367 | integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== 368 | 369 | "@esbuild/win32-x64@0.21.5": 370 | version "0.21.5" 371 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" 372 | integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== 373 | 374 | "@fastify/busboy@^2.0.0": 375 | version "2.1.1" 376 | resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" 377 | integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== 378 | 379 | "@img/sharp-darwin-arm64@0.33.5": 380 | version "0.33.5" 381 | resolved "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz" 382 | integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== 383 | optionalDependencies: 384 | "@img/sharp-libvips-darwin-arm64" "1.0.4" 385 | 386 | "@img/sharp-darwin-x64@0.33.5": 387 | version "0.33.5" 388 | resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" 389 | integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== 390 | optionalDependencies: 391 | "@img/sharp-libvips-darwin-x64" "1.0.4" 392 | 393 | "@img/sharp-libvips-darwin-arm64@1.0.4": 394 | version "1.0.4" 395 | resolved "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz" 396 | integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== 397 | 398 | "@img/sharp-libvips-darwin-x64@1.0.4": 399 | version "1.0.4" 400 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" 401 | integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== 402 | 403 | "@img/sharp-libvips-linux-arm64@1.0.4": 404 | version "1.0.4" 405 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" 406 | integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== 407 | 408 | "@img/sharp-libvips-linux-arm@1.0.5": 409 | version "1.0.5" 410 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" 411 | integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== 412 | 413 | "@img/sharp-libvips-linux-s390x@1.0.4": 414 | version "1.0.4" 415 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" 416 | integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== 417 | 418 | "@img/sharp-libvips-linux-x64@1.0.4": 419 | version "1.0.4" 420 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" 421 | integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== 422 | 423 | "@img/sharp-libvips-linuxmusl-arm64@1.0.4": 424 | version "1.0.4" 425 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" 426 | integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== 427 | 428 | "@img/sharp-libvips-linuxmusl-x64@1.0.4": 429 | version "1.0.4" 430 | resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" 431 | integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== 432 | 433 | "@img/sharp-linux-arm64@0.33.5": 434 | version "0.33.5" 435 | resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" 436 | integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== 437 | optionalDependencies: 438 | "@img/sharp-libvips-linux-arm64" "1.0.4" 439 | 440 | "@img/sharp-linux-arm@0.33.5": 441 | version "0.33.5" 442 | resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" 443 | integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== 444 | optionalDependencies: 445 | "@img/sharp-libvips-linux-arm" "1.0.5" 446 | 447 | "@img/sharp-linux-s390x@0.33.5": 448 | version "0.33.5" 449 | resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" 450 | integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== 451 | optionalDependencies: 452 | "@img/sharp-libvips-linux-s390x" "1.0.4" 453 | 454 | "@img/sharp-linux-x64@0.33.5": 455 | version "0.33.5" 456 | resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" 457 | integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== 458 | optionalDependencies: 459 | "@img/sharp-libvips-linux-x64" "1.0.4" 460 | 461 | "@img/sharp-linuxmusl-arm64@0.33.5": 462 | version "0.33.5" 463 | resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" 464 | integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== 465 | optionalDependencies: 466 | "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" 467 | 468 | "@img/sharp-linuxmusl-x64@0.33.5": 469 | version "0.33.5" 470 | resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" 471 | integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== 472 | optionalDependencies: 473 | "@img/sharp-libvips-linuxmusl-x64" "1.0.4" 474 | 475 | "@img/sharp-wasm32@0.33.5": 476 | version "0.33.5" 477 | resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" 478 | integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== 479 | dependencies: 480 | "@emnapi/runtime" "^1.2.0" 481 | 482 | "@img/sharp-win32-ia32@0.33.5": 483 | version "0.33.5" 484 | resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" 485 | integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== 486 | 487 | "@img/sharp-win32-x64@0.33.5": 488 | version "0.33.5" 489 | resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" 490 | integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== 491 | 492 | "@jridgewell/resolve-uri@^3.0.3": 493 | version "3.1.2" 494 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" 495 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 496 | 497 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.5.0": 498 | version "1.5.0" 499 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" 500 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 501 | 502 | "@jridgewell/trace-mapping@0.3.9": 503 | version "0.3.9" 504 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" 505 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 506 | dependencies: 507 | "@jridgewell/resolve-uri" "^3.0.3" 508 | "@jridgewell/sourcemap-codec" "^1.4.10" 509 | 510 | "@noble/curves@^1.4.2": 511 | version "1.8.1" 512 | resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz" 513 | integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== 514 | dependencies: 515 | "@noble/hashes" "1.7.1" 516 | 517 | "@noble/hashes@1.7.1", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0": 518 | version "1.7.1" 519 | resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz" 520 | integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== 521 | 522 | "@rollup/rollup-android-arm-eabi@4.34.8": 523 | version "4.34.8" 524 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz#731df27dfdb77189547bcef96ada7bf166bbb2fb" 525 | integrity sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw== 526 | 527 | "@rollup/rollup-android-arm64@4.34.8": 528 | version "4.34.8" 529 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz#4bea6db78e1f6927405df7fe0faf2f5095e01343" 530 | integrity sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q== 531 | 532 | "@rollup/rollup-darwin-arm64@4.34.8": 533 | version "4.34.8" 534 | resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz" 535 | integrity sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q== 536 | 537 | "@rollup/rollup-darwin-x64@4.34.8": 538 | version "4.34.8" 539 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz#c572c024b57ee8ddd1b0851703ace9eb6cc0dd82" 540 | integrity sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw== 541 | 542 | "@rollup/rollup-freebsd-arm64@4.34.8": 543 | version "4.34.8" 544 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz#cf74f8113b5a83098a5c026c165742277cbfb88b" 545 | integrity sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA== 546 | 547 | "@rollup/rollup-freebsd-x64@4.34.8": 548 | version "4.34.8" 549 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz#39561f3a2f201a4ad6a01425b1ff5928154ecd7c" 550 | integrity sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q== 551 | 552 | "@rollup/rollup-linux-arm-gnueabihf@4.34.8": 553 | version "4.34.8" 554 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz#980d6061e373bfdaeb67925c46d2f8f9b3de537f" 555 | integrity sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g== 556 | 557 | "@rollup/rollup-linux-arm-musleabihf@4.34.8": 558 | version "4.34.8" 559 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz#f91a90f30dc00d5a64ac2d9bbedc829cd3cfaa78" 560 | integrity sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA== 561 | 562 | "@rollup/rollup-linux-arm64-gnu@4.34.8": 563 | version "4.34.8" 564 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz#fac700fa5c38bc13a0d5d34463133093da4c92a0" 565 | integrity sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A== 566 | 567 | "@rollup/rollup-linux-arm64-musl@4.34.8": 568 | version "4.34.8" 569 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz#f50ecccf8c78841ff6df1706bc4782d7f62bf9c3" 570 | integrity sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q== 571 | 572 | "@rollup/rollup-linux-loongarch64-gnu@4.34.8": 573 | version "4.34.8" 574 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz#5869dc0b28242da6553e2b52af41374f4038cd6e" 575 | integrity sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ== 576 | 577 | "@rollup/rollup-linux-powerpc64le-gnu@4.34.8": 578 | version "4.34.8" 579 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz#5cdd9f851ce1bea33d6844a69f9574de335f20b1" 580 | integrity sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw== 581 | 582 | "@rollup/rollup-linux-riscv64-gnu@4.34.8": 583 | version "4.34.8" 584 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz#ef5dc37f4388f5253f0def43e1440ec012af204d" 585 | integrity sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw== 586 | 587 | "@rollup/rollup-linux-s390x-gnu@4.34.8": 588 | version "4.34.8" 589 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz#7dbc3ccbcbcfb3e65be74538dfb6e8dd16178fde" 590 | integrity sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA== 591 | 592 | "@rollup/rollup-linux-x64-gnu@4.34.8": 593 | version "4.34.8" 594 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz#5783fc0adcab7dc069692056e8ca8d83709855ce" 595 | integrity sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA== 596 | 597 | "@rollup/rollup-linux-x64-musl@4.34.8": 598 | version "4.34.8" 599 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz#00b6c29b298197a384e3c659910b47943003a678" 600 | integrity sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ== 601 | 602 | "@rollup/rollup-win32-arm64-msvc@4.34.8": 603 | version "4.34.8" 604 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz#cbfee01f1fe73791c35191a05397838520ca3cdd" 605 | integrity sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ== 606 | 607 | "@rollup/rollup-win32-ia32-msvc@4.34.8": 608 | version "4.34.8" 609 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz#95cdbdff48fe6c948abcf6a1d500b2bd5ce33f62" 610 | integrity sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w== 611 | 612 | "@rollup/rollup-win32-x64-msvc@4.34.8": 613 | version "4.34.8" 614 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz#4cdb2cfae69cdb7b1a3cc58778e820408075e928" 615 | integrity sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g== 616 | 617 | "@solana/buffer-layout@^4.0.1": 618 | version "4.0.1" 619 | resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz" 620 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== 621 | dependencies: 622 | buffer "~6.0.3" 623 | 624 | "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.98.0": 625 | version "1.98.0" 626 | resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.0.tgz" 627 | integrity sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA== 628 | dependencies: 629 | "@babel/runtime" "^7.25.0" 630 | "@noble/curves" "^1.4.2" 631 | "@noble/hashes" "^1.4.0" 632 | "@solana/buffer-layout" "^4.0.1" 633 | agentkeepalive "^4.5.0" 634 | bigint-buffer "^1.1.5" 635 | bn.js "^5.2.1" 636 | borsh "^0.7.0" 637 | bs58 "^4.0.1" 638 | buffer "6.0.3" 639 | fast-stable-stringify "^1.0.0" 640 | jayson "^4.1.1" 641 | node-fetch "^2.7.0" 642 | rpc-websockets "^9.0.2" 643 | superstruct "^2.0.2" 644 | 645 | "@swc/helpers@^0.5.11": 646 | version "0.5.15" 647 | resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz" 648 | integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== 649 | dependencies: 650 | tslib "^2.8.0" 651 | 652 | "@types/bn.js@^5.1.6": 653 | version "5.1.6" 654 | resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz" 655 | integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== 656 | dependencies: 657 | "@types/node" "*" 658 | 659 | "@types/connect@^3.4.33": 660 | version "3.4.38" 661 | resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" 662 | integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== 663 | dependencies: 664 | "@types/node" "*" 665 | 666 | "@types/estree@1.0.6", "@types/estree@^1.0.0": 667 | version "1.0.6" 668 | resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" 669 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== 670 | 671 | "@types/node@*": 672 | version "22.13.5" 673 | resolved "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz" 674 | integrity sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg== 675 | dependencies: 676 | undici-types "~6.20.0" 677 | 678 | "@types/node@^12.12.54": 679 | version "12.20.55" 680 | resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" 681 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 682 | 683 | "@types/uuid@^8.3.4": 684 | version "8.3.4" 685 | resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz" 686 | integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== 687 | 688 | "@types/ws@^7.4.4": 689 | version "7.4.7" 690 | resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" 691 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 692 | dependencies: 693 | "@types/node" "*" 694 | 695 | "@types/ws@^8.2.2": 696 | version "8.5.14" 697 | resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz" 698 | integrity sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw== 699 | dependencies: 700 | "@types/node" "*" 701 | 702 | "@vitest/expect@2.1.9": 703 | version "2.1.9" 704 | resolved "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz" 705 | integrity sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw== 706 | dependencies: 707 | "@vitest/spy" "2.1.9" 708 | "@vitest/utils" "2.1.9" 709 | chai "^5.1.2" 710 | tinyrainbow "^1.2.0" 711 | 712 | "@vitest/mocker@2.1.9": 713 | version "2.1.9" 714 | resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz" 715 | integrity sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg== 716 | dependencies: 717 | "@vitest/spy" "2.1.9" 718 | estree-walker "^3.0.3" 719 | magic-string "^0.30.12" 720 | 721 | "@vitest/pretty-format@2.1.9", "@vitest/pretty-format@^2.1.9": 722 | version "2.1.9" 723 | resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz" 724 | integrity sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ== 725 | dependencies: 726 | tinyrainbow "^1.2.0" 727 | 728 | "@vitest/runner@2.1.9": 729 | version "2.1.9" 730 | resolved "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz" 731 | integrity sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g== 732 | dependencies: 733 | "@vitest/utils" "2.1.9" 734 | pathe "^1.1.2" 735 | 736 | "@vitest/snapshot@2.1.9": 737 | version "2.1.9" 738 | resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz" 739 | integrity sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ== 740 | dependencies: 741 | "@vitest/pretty-format" "2.1.9" 742 | magic-string "^0.30.12" 743 | pathe "^1.1.2" 744 | 745 | "@vitest/spy@2.1.9": 746 | version "2.1.9" 747 | resolved "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz" 748 | integrity sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ== 749 | dependencies: 750 | tinyspy "^3.0.2" 751 | 752 | "@vitest/utils@2.1.9": 753 | version "2.1.9" 754 | resolved "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz" 755 | integrity sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ== 756 | dependencies: 757 | "@vitest/pretty-format" "2.1.9" 758 | loupe "^3.1.2" 759 | tinyrainbow "^1.2.0" 760 | 761 | JSONStream@^1.3.5: 762 | version "1.3.5" 763 | resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" 764 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 765 | dependencies: 766 | jsonparse "^1.2.0" 767 | through ">=2.2.7 <3" 768 | 769 | acorn-walk@8.3.2: 770 | version "8.3.2" 771 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" 772 | integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== 773 | 774 | acorn@8.14.0, acorn@^8.14.0: 775 | version "8.14.0" 776 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" 777 | integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== 778 | 779 | agentkeepalive@^4.5.0: 780 | version "4.6.0" 781 | resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz" 782 | integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== 783 | dependencies: 784 | humanize-ms "^1.2.1" 785 | 786 | as-table@^1.0.36: 787 | version "1.0.55" 788 | resolved "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz" 789 | integrity sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ== 790 | dependencies: 791 | printable-characters "^1.0.42" 792 | 793 | assertion-error@^2.0.1: 794 | version "2.0.1" 795 | resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz" 796 | integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== 797 | 798 | base-x@^3.0.2: 799 | version "3.0.10" 800 | resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz" 801 | integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== 802 | dependencies: 803 | safe-buffer "^5.0.1" 804 | 805 | base-x@^5.0.0: 806 | version "5.0.0" 807 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.0.tgz#6d835ceae379130e1a4cb846a70ac4746f28ea9b" 808 | integrity sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ== 809 | 810 | base64-js@^1.3.1: 811 | version "1.5.1" 812 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 813 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 814 | 815 | bigint-buffer@^1.1.5: 816 | version "1.1.5" 817 | resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" 818 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 819 | dependencies: 820 | bindings "^1.3.0" 821 | 822 | bindings@^1.3.0: 823 | version "1.5.0" 824 | resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" 825 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 826 | dependencies: 827 | file-uri-to-path "1.0.0" 828 | 829 | birpc@0.2.14: 830 | version "0.2.14" 831 | resolved "https://registry.npmjs.org/birpc/-/birpc-0.2.14.tgz" 832 | integrity sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA== 833 | 834 | blake3-wasm@2.1.5: 835 | version "2.1.5" 836 | resolved "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz" 837 | integrity sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g== 838 | 839 | bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: 840 | version "5.2.1" 841 | resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" 842 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 843 | 844 | borsh@^0.7.0: 845 | version "0.7.0" 846 | resolved "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" 847 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 848 | dependencies: 849 | bn.js "^5.2.0" 850 | bs58 "^4.0.0" 851 | text-encoding-utf-8 "^1.0.2" 852 | 853 | bs58@^4.0.0, bs58@^4.0.1: 854 | version "4.0.1" 855 | resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 856 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 857 | dependencies: 858 | base-x "^3.0.2" 859 | 860 | bs58@^6.0.0: 861 | version "6.0.0" 862 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" 863 | integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== 864 | dependencies: 865 | base-x "^5.0.0" 866 | 867 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 868 | version "1.2.2" 869 | resolved "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz" 870 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 871 | 872 | buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: 873 | version "6.0.3" 874 | resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 875 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 876 | dependencies: 877 | base64-js "^1.3.1" 878 | ieee754 "^1.2.1" 879 | 880 | bufferutil@^4.0.1: 881 | version "4.0.9" 882 | resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz" 883 | integrity sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw== 884 | dependencies: 885 | node-gyp-build "^4.3.0" 886 | 887 | cac@^6.7.14: 888 | version "6.7.14" 889 | resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" 890 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== 891 | 892 | camelcase@^6.3.0: 893 | version "6.3.0" 894 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" 895 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 896 | 897 | chai@^5.1.2: 898 | version "5.2.0" 899 | resolved "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz" 900 | integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw== 901 | dependencies: 902 | assertion-error "^2.0.1" 903 | check-error "^2.1.1" 904 | deep-eql "^5.0.1" 905 | loupe "^3.1.0" 906 | pathval "^2.0.0" 907 | 908 | change-case@^5.4.4: 909 | version "5.4.4" 910 | resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" 911 | integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== 912 | 913 | check-error@^2.1.1: 914 | version "2.1.1" 915 | resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz" 916 | integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== 917 | 918 | cjs-module-lexer@^1.2.3: 919 | version "1.4.3" 920 | resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz" 921 | integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== 922 | 923 | color-convert@^2.0.1: 924 | version "2.0.1" 925 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 926 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 927 | dependencies: 928 | color-name "~1.1.4" 929 | 930 | color-name@^1.0.0, color-name@~1.1.4: 931 | version "1.1.4" 932 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 933 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 934 | 935 | color-string@^1.9.0: 936 | version "1.9.1" 937 | resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" 938 | integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== 939 | dependencies: 940 | color-name "^1.0.0" 941 | simple-swizzle "^0.2.2" 942 | 943 | color@^4.2.3: 944 | version "4.2.3" 945 | resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" 946 | integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== 947 | dependencies: 948 | color-convert "^2.0.1" 949 | color-string "^1.9.0" 950 | 951 | commander@^2.20.3: 952 | version "2.20.3" 953 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 954 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 955 | 956 | confbox@^0.1.8: 957 | version "0.1.8" 958 | resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" 959 | integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== 960 | 961 | cookie@^0.5.0: 962 | version "0.5.0" 963 | resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" 964 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 965 | 966 | cross-fetch@^3.1.5: 967 | version "3.2.0" 968 | resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz" 969 | integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== 970 | dependencies: 971 | node-fetch "^2.7.0" 972 | 973 | crypto-hash@^1.3.0: 974 | version "1.3.0" 975 | resolved "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz" 976 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 977 | 978 | data-uri-to-buffer@^2.0.0: 979 | version "2.0.2" 980 | resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz" 981 | integrity sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA== 982 | 983 | debug@^4.3.7: 984 | version "4.4.0" 985 | resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" 986 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 987 | dependencies: 988 | ms "^2.1.3" 989 | 990 | deep-eql@^5.0.1: 991 | version "5.0.2" 992 | resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz" 993 | integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== 994 | 995 | defu@^6.1.4: 996 | version "6.1.4" 997 | resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz" 998 | integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== 999 | 1000 | delay@^5.0.0: 1001 | version "5.0.0" 1002 | resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" 1003 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 1004 | 1005 | detect-libc@^2.0.3: 1006 | version "2.0.3" 1007 | resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" 1008 | integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== 1009 | 1010 | devalue@^4.3.0: 1011 | version "4.3.3" 1012 | resolved "https://registry.npmjs.org/devalue/-/devalue-4.3.3.tgz" 1013 | integrity sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg== 1014 | 1015 | dot-case@^3.0.4: 1016 | version "3.0.4" 1017 | resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" 1018 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 1019 | dependencies: 1020 | no-case "^3.0.4" 1021 | tslib "^2.0.3" 1022 | 1023 | es-module-lexer@^1.5.4: 1024 | version "1.6.0" 1025 | resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz" 1026 | integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== 1027 | 1028 | es6-promise@^4.0.3: 1029 | version "4.2.8" 1030 | resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" 1031 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 1032 | 1033 | es6-promisify@^5.0.0: 1034 | version "5.0.0" 1035 | resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" 1036 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 1037 | dependencies: 1038 | es6-promise "^4.0.3" 1039 | 1040 | esbuild@0.17.19: 1041 | version "0.17.19" 1042 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz" 1043 | integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== 1044 | optionalDependencies: 1045 | "@esbuild/android-arm" "0.17.19" 1046 | "@esbuild/android-arm64" "0.17.19" 1047 | "@esbuild/android-x64" "0.17.19" 1048 | "@esbuild/darwin-arm64" "0.17.19" 1049 | "@esbuild/darwin-x64" "0.17.19" 1050 | "@esbuild/freebsd-arm64" "0.17.19" 1051 | "@esbuild/freebsd-x64" "0.17.19" 1052 | "@esbuild/linux-arm" "0.17.19" 1053 | "@esbuild/linux-arm64" "0.17.19" 1054 | "@esbuild/linux-ia32" "0.17.19" 1055 | "@esbuild/linux-loong64" "0.17.19" 1056 | "@esbuild/linux-mips64el" "0.17.19" 1057 | "@esbuild/linux-ppc64" "0.17.19" 1058 | "@esbuild/linux-riscv64" "0.17.19" 1059 | "@esbuild/linux-s390x" "0.17.19" 1060 | "@esbuild/linux-x64" "0.17.19" 1061 | "@esbuild/netbsd-x64" "0.17.19" 1062 | "@esbuild/openbsd-x64" "0.17.19" 1063 | "@esbuild/sunos-x64" "0.17.19" 1064 | "@esbuild/win32-arm64" "0.17.19" 1065 | "@esbuild/win32-ia32" "0.17.19" 1066 | "@esbuild/win32-x64" "0.17.19" 1067 | 1068 | esbuild@^0.21.3: 1069 | version "0.21.5" 1070 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz" 1071 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== 1072 | optionalDependencies: 1073 | "@esbuild/aix-ppc64" "0.21.5" 1074 | "@esbuild/android-arm" "0.21.5" 1075 | "@esbuild/android-arm64" "0.21.5" 1076 | "@esbuild/android-x64" "0.21.5" 1077 | "@esbuild/darwin-arm64" "0.21.5" 1078 | "@esbuild/darwin-x64" "0.21.5" 1079 | "@esbuild/freebsd-arm64" "0.21.5" 1080 | "@esbuild/freebsd-x64" "0.21.5" 1081 | "@esbuild/linux-arm" "0.21.5" 1082 | "@esbuild/linux-arm64" "0.21.5" 1083 | "@esbuild/linux-ia32" "0.21.5" 1084 | "@esbuild/linux-loong64" "0.21.5" 1085 | "@esbuild/linux-mips64el" "0.21.5" 1086 | "@esbuild/linux-ppc64" "0.21.5" 1087 | "@esbuild/linux-riscv64" "0.21.5" 1088 | "@esbuild/linux-s390x" "0.21.5" 1089 | "@esbuild/linux-x64" "0.21.5" 1090 | "@esbuild/netbsd-x64" "0.21.5" 1091 | "@esbuild/openbsd-x64" "0.21.5" 1092 | "@esbuild/sunos-x64" "0.21.5" 1093 | "@esbuild/win32-arm64" "0.21.5" 1094 | "@esbuild/win32-ia32" "0.21.5" 1095 | "@esbuild/win32-x64" "0.21.5" 1096 | 1097 | escape-string-regexp@^4.0.0: 1098 | version "4.0.0" 1099 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 1100 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1101 | 1102 | estree-walker@^0.6.1: 1103 | version "0.6.1" 1104 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" 1105 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 1106 | 1107 | estree-walker@^3.0.3: 1108 | version "3.0.3" 1109 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" 1110 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== 1111 | dependencies: 1112 | "@types/estree" "^1.0.0" 1113 | 1114 | eventemitter3@^4.0.7: 1115 | version "4.0.7" 1116 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 1117 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 1118 | 1119 | eventemitter3@^5.0.1: 1120 | version "5.0.1" 1121 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" 1122 | integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== 1123 | 1124 | exit-hook@2.2.1: 1125 | version "2.2.1" 1126 | resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz" 1127 | integrity sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw== 1128 | 1129 | expect-type@^1.1.0: 1130 | version "1.1.0" 1131 | resolved "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz" 1132 | integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== 1133 | 1134 | eyes@^0.1.8: 1135 | version "0.1.8" 1136 | resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" 1137 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 1138 | 1139 | fast-stable-stringify@^1.0.0: 1140 | version "1.0.0" 1141 | resolved "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" 1142 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 1143 | 1144 | file-uri-to-path@1.0.0: 1145 | version "1.0.0" 1146 | resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" 1147 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1148 | 1149 | fsevents@~2.3.2, fsevents@~2.3.3: 1150 | version "2.3.3" 1151 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" 1152 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1153 | 1154 | get-source@^2.0.12: 1155 | version "2.0.12" 1156 | resolved "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz" 1157 | integrity sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w== 1158 | dependencies: 1159 | data-uri-to-buffer "^2.0.0" 1160 | source-map "^0.6.1" 1161 | 1162 | glob-to-regexp@0.4.1: 1163 | version "0.4.1" 1164 | resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" 1165 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 1166 | 1167 | humanize-ms@^1.2.1: 1168 | version "1.2.1" 1169 | resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" 1170 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== 1171 | dependencies: 1172 | ms "^2.0.0" 1173 | 1174 | ieee754@^1.2.1: 1175 | version "1.2.1" 1176 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 1177 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1178 | 1179 | is-arrayish@^0.3.1: 1180 | version "0.3.2" 1181 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" 1182 | integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== 1183 | 1184 | isomorphic-ws@^4.0.1: 1185 | version "4.0.1" 1186 | resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" 1187 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 1188 | 1189 | jayson@^4.1.1: 1190 | version "4.1.3" 1191 | resolved "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz" 1192 | integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== 1193 | dependencies: 1194 | "@types/connect" "^3.4.33" 1195 | "@types/node" "^12.12.54" 1196 | "@types/ws" "^7.4.4" 1197 | JSONStream "^1.3.5" 1198 | commander "^2.20.3" 1199 | delay "^5.0.0" 1200 | es6-promisify "^5.0.0" 1201 | eyes "^0.1.8" 1202 | isomorphic-ws "^4.0.1" 1203 | json-stringify-safe "^5.0.1" 1204 | uuid "^8.3.2" 1205 | ws "^7.5.10" 1206 | 1207 | json-stringify-safe@^5.0.1: 1208 | version "5.0.1" 1209 | resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 1210 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 1211 | 1212 | jsonparse@^1.2.0: 1213 | version "1.3.1" 1214 | resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" 1215 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 1216 | 1217 | loupe@^3.1.0, loupe@^3.1.2: 1218 | version "3.1.3" 1219 | resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz" 1220 | integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== 1221 | 1222 | lower-case@^2.0.2: 1223 | version "2.0.2" 1224 | resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" 1225 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 1226 | dependencies: 1227 | tslib "^2.0.3" 1228 | 1229 | magic-string@^0.25.3: 1230 | version "0.25.9" 1231 | resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" 1232 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== 1233 | dependencies: 1234 | sourcemap-codec "^1.4.8" 1235 | 1236 | magic-string@^0.30.12: 1237 | version "0.30.17" 1238 | resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz" 1239 | integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== 1240 | dependencies: 1241 | "@jridgewell/sourcemap-codec" "^1.5.0" 1242 | 1243 | mime@^3.0.0: 1244 | version "3.0.0" 1245 | resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" 1246 | integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== 1247 | 1248 | miniflare@3.20250204.1: 1249 | version "3.20250204.1" 1250 | resolved "https://registry.npmjs.org/miniflare/-/miniflare-3.20250204.1.tgz" 1251 | integrity sha512-B4PQi/Ai4d0ZTWahQwsFe5WAfr1j8ISMYxJZTc56g2/btgbX+Go099LmojAZY/fMRLhIYsglcStW8SeW3f/afA== 1252 | dependencies: 1253 | "@cspotcode/source-map-support" "0.8.1" 1254 | acorn "8.14.0" 1255 | acorn-walk "8.3.2" 1256 | exit-hook "2.2.1" 1257 | glob-to-regexp "0.4.1" 1258 | stoppable "1.1.0" 1259 | undici "^5.28.4" 1260 | workerd "1.20250204.0" 1261 | ws "8.18.0" 1262 | youch "3.2.3" 1263 | zod "3.22.3" 1264 | 1265 | miniflare@3.20250214.0: 1266 | version "3.20250214.0" 1267 | resolved "https://registry.npmjs.org/miniflare/-/miniflare-3.20250214.0.tgz" 1268 | integrity sha512-XKwn+X/V2CEpbRhoeaIcJHpV/Duz5Md5rxVT8I6S1oqd3aLZkn8cUX1tuxHpUvfQSPuXwWH+2ESLNnTf9PKEWg== 1269 | dependencies: 1270 | "@cspotcode/source-map-support" "0.8.1" 1271 | acorn "8.14.0" 1272 | acorn-walk "8.3.2" 1273 | exit-hook "2.2.1" 1274 | glob-to-regexp "0.4.1" 1275 | stoppable "1.1.0" 1276 | undici "^5.28.5" 1277 | workerd "1.20250214.0" 1278 | ws "8.18.0" 1279 | youch "3.2.3" 1280 | zod "3.22.3" 1281 | 1282 | mlly@^1.7.4: 1283 | version "1.7.4" 1284 | resolved "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz" 1285 | integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== 1286 | dependencies: 1287 | acorn "^8.14.0" 1288 | pathe "^2.0.1" 1289 | pkg-types "^1.3.0" 1290 | ufo "^1.5.4" 1291 | 1292 | ms@^2.0.0, ms@^2.1.3: 1293 | version "2.1.3" 1294 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 1295 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1296 | 1297 | mustache@^4.2.0: 1298 | version "4.2.0" 1299 | resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" 1300 | integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== 1301 | 1302 | nanoid@^3.3.8: 1303 | version "3.3.8" 1304 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz" 1305 | integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== 1306 | 1307 | no-case@^3.0.4: 1308 | version "3.0.4" 1309 | resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" 1310 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 1311 | dependencies: 1312 | lower-case "^2.0.2" 1313 | tslib "^2.0.3" 1314 | 1315 | node-fetch@^2.7.0: 1316 | version "2.7.0" 1317 | resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" 1318 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 1319 | dependencies: 1320 | whatwg-url "^5.0.0" 1321 | 1322 | node-gyp-build@^4.3.0: 1323 | version "4.8.4" 1324 | resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz" 1325 | integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== 1326 | 1327 | ohash@^1.1.4: 1328 | version "1.1.4" 1329 | resolved "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz" 1330 | integrity sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g== 1331 | 1332 | pako@^2.0.3: 1333 | version "2.1.0" 1334 | resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" 1335 | integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== 1336 | 1337 | path-to-regexp@6.3.0: 1338 | version "6.3.0" 1339 | resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz" 1340 | integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== 1341 | 1342 | pathe@^1.1.2: 1343 | version "1.1.2" 1344 | resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" 1345 | integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== 1346 | 1347 | pathe@^2.0.1: 1348 | version "2.0.3" 1349 | resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" 1350 | integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== 1351 | 1352 | pathval@^2.0.0: 1353 | version "2.0.0" 1354 | resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz" 1355 | integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== 1356 | 1357 | picocolors@^1.1.1: 1358 | version "1.1.1" 1359 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" 1360 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 1361 | 1362 | pkg-types@^1.3.0: 1363 | version "1.3.1" 1364 | resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" 1365 | integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== 1366 | dependencies: 1367 | confbox "^0.1.8" 1368 | mlly "^1.7.4" 1369 | pathe "^2.0.1" 1370 | 1371 | postcss@^8.4.43: 1372 | version "8.5.3" 1373 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz" 1374 | integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== 1375 | dependencies: 1376 | nanoid "^3.3.8" 1377 | picocolors "^1.1.1" 1378 | source-map-js "^1.2.1" 1379 | 1380 | printable-characters@^1.0.42: 1381 | version "1.0.42" 1382 | resolved "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz" 1383 | integrity sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ== 1384 | 1385 | regenerator-runtime@^0.14.0: 1386 | version "0.14.1" 1387 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" 1388 | integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== 1389 | 1390 | rollup-plugin-inject@^3.0.0: 1391 | version "3.0.2" 1392 | resolved "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz" 1393 | integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== 1394 | dependencies: 1395 | estree-walker "^0.6.1" 1396 | magic-string "^0.25.3" 1397 | rollup-pluginutils "^2.8.1" 1398 | 1399 | rollup-plugin-node-polyfills@^0.2.1: 1400 | version "0.2.1" 1401 | resolved "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz" 1402 | integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== 1403 | dependencies: 1404 | rollup-plugin-inject "^3.0.0" 1405 | 1406 | rollup-pluginutils@^2.8.1: 1407 | version "2.8.2" 1408 | resolved "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" 1409 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== 1410 | dependencies: 1411 | estree-walker "^0.6.1" 1412 | 1413 | rollup@^4.20.0: 1414 | version "4.34.8" 1415 | resolved "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz" 1416 | integrity sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ== 1417 | dependencies: 1418 | "@types/estree" "1.0.6" 1419 | optionalDependencies: 1420 | "@rollup/rollup-android-arm-eabi" "4.34.8" 1421 | "@rollup/rollup-android-arm64" "4.34.8" 1422 | "@rollup/rollup-darwin-arm64" "4.34.8" 1423 | "@rollup/rollup-darwin-x64" "4.34.8" 1424 | "@rollup/rollup-freebsd-arm64" "4.34.8" 1425 | "@rollup/rollup-freebsd-x64" "4.34.8" 1426 | "@rollup/rollup-linux-arm-gnueabihf" "4.34.8" 1427 | "@rollup/rollup-linux-arm-musleabihf" "4.34.8" 1428 | "@rollup/rollup-linux-arm64-gnu" "4.34.8" 1429 | "@rollup/rollup-linux-arm64-musl" "4.34.8" 1430 | "@rollup/rollup-linux-loongarch64-gnu" "4.34.8" 1431 | "@rollup/rollup-linux-powerpc64le-gnu" "4.34.8" 1432 | "@rollup/rollup-linux-riscv64-gnu" "4.34.8" 1433 | "@rollup/rollup-linux-s390x-gnu" "4.34.8" 1434 | "@rollup/rollup-linux-x64-gnu" "4.34.8" 1435 | "@rollup/rollup-linux-x64-musl" "4.34.8" 1436 | "@rollup/rollup-win32-arm64-msvc" "4.34.8" 1437 | "@rollup/rollup-win32-ia32-msvc" "4.34.8" 1438 | "@rollup/rollup-win32-x64-msvc" "4.34.8" 1439 | fsevents "~2.3.2" 1440 | 1441 | rpc-websockets@^9.0.2: 1442 | version "9.1.0" 1443 | resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.1.0.tgz" 1444 | integrity sha512-HuOa2akHgKqncDOOd+ulHhwAKJI6aCtJeIz6B6wHGAzHmZLdLHiuSZCd5bhBIwKk8SN4wTPkKilwpB1nysn2Xg== 1445 | dependencies: 1446 | "@swc/helpers" "^0.5.11" 1447 | "@types/uuid" "^8.3.4" 1448 | "@types/ws" "^8.2.2" 1449 | buffer "^6.0.3" 1450 | eventemitter3 "^5.0.1" 1451 | uuid "^8.3.2" 1452 | ws "^8.5.0" 1453 | optionalDependencies: 1454 | bufferutil "^4.0.1" 1455 | utf-8-validate "^5.0.2" 1456 | 1457 | safe-buffer@^5.0.1: 1458 | version "5.2.1" 1459 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1460 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1461 | 1462 | semver@^7.5.1, semver@^7.6.3: 1463 | version "7.7.1" 1464 | resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" 1465 | integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== 1466 | 1467 | sharp@^0.33.5: 1468 | version "0.33.5" 1469 | resolved "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz" 1470 | integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== 1471 | dependencies: 1472 | color "^4.2.3" 1473 | detect-libc "^2.0.3" 1474 | semver "^7.6.3" 1475 | optionalDependencies: 1476 | "@img/sharp-darwin-arm64" "0.33.5" 1477 | "@img/sharp-darwin-x64" "0.33.5" 1478 | "@img/sharp-libvips-darwin-arm64" "1.0.4" 1479 | "@img/sharp-libvips-darwin-x64" "1.0.4" 1480 | "@img/sharp-libvips-linux-arm" "1.0.5" 1481 | "@img/sharp-libvips-linux-arm64" "1.0.4" 1482 | "@img/sharp-libvips-linux-s390x" "1.0.4" 1483 | "@img/sharp-libvips-linux-x64" "1.0.4" 1484 | "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" 1485 | "@img/sharp-libvips-linuxmusl-x64" "1.0.4" 1486 | "@img/sharp-linux-arm" "0.33.5" 1487 | "@img/sharp-linux-arm64" "0.33.5" 1488 | "@img/sharp-linux-s390x" "0.33.5" 1489 | "@img/sharp-linux-x64" "0.33.5" 1490 | "@img/sharp-linuxmusl-arm64" "0.33.5" 1491 | "@img/sharp-linuxmusl-x64" "0.33.5" 1492 | "@img/sharp-wasm32" "0.33.5" 1493 | "@img/sharp-win32-ia32" "0.33.5" 1494 | "@img/sharp-win32-x64" "0.33.5" 1495 | 1496 | siginfo@^2.0.0: 1497 | version "2.0.0" 1498 | resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" 1499 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== 1500 | 1501 | simple-swizzle@^0.2.2: 1502 | version "0.2.2" 1503 | resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" 1504 | integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== 1505 | dependencies: 1506 | is-arrayish "^0.3.1" 1507 | 1508 | snake-case@^3.0.4: 1509 | version "3.0.4" 1510 | resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" 1511 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 1512 | dependencies: 1513 | dot-case "^3.0.4" 1514 | tslib "^2.0.3" 1515 | 1516 | source-map-js@^1.2.1: 1517 | version "1.2.1" 1518 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" 1519 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== 1520 | 1521 | source-map@^0.6.1: 1522 | version "0.6.1" 1523 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 1524 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1525 | 1526 | sourcemap-codec@^1.4.8: 1527 | version "1.4.8" 1528 | resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" 1529 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1530 | 1531 | stackback@0.0.2: 1532 | version "0.0.2" 1533 | resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" 1534 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== 1535 | 1536 | stacktracey@^2.1.8: 1537 | version "2.1.8" 1538 | resolved "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz" 1539 | integrity sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw== 1540 | dependencies: 1541 | as-table "^1.0.36" 1542 | get-source "^2.0.12" 1543 | 1544 | std-env@^3.8.0: 1545 | version "3.8.0" 1546 | resolved "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz" 1547 | integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== 1548 | 1549 | stoppable@1.1.0: 1550 | version "1.1.0" 1551 | resolved "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz" 1552 | integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== 1553 | 1554 | superstruct@^0.15.4: 1555 | version "0.15.5" 1556 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz" 1557 | integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== 1558 | 1559 | superstruct@^2.0.2: 1560 | version "2.0.2" 1561 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz" 1562 | integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== 1563 | 1564 | text-encoding-utf-8@^1.0.2: 1565 | version "1.0.2" 1566 | resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" 1567 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1568 | 1569 | "through@>=2.2.7 <3": 1570 | version "2.3.8" 1571 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1572 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1573 | 1574 | tinybench@^2.9.0: 1575 | version "2.9.0" 1576 | resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz" 1577 | integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== 1578 | 1579 | tinyexec@^0.3.1: 1580 | version "0.3.2" 1581 | resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" 1582 | integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== 1583 | 1584 | tinypool@^1.0.1: 1585 | version "1.0.2" 1586 | resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz" 1587 | integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== 1588 | 1589 | tinyrainbow@^1.2.0: 1590 | version "1.2.0" 1591 | resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz" 1592 | integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== 1593 | 1594 | tinyspy@^3.0.2: 1595 | version "3.0.2" 1596 | resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz" 1597 | integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== 1598 | 1599 | toml@^3.0.0: 1600 | version "3.0.0" 1601 | resolved "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" 1602 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 1603 | 1604 | tr46@~0.0.3: 1605 | version "0.0.3" 1606 | resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" 1607 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1608 | 1609 | tslib@^2.0.3, tslib@^2.4.0, tslib@^2.8.0: 1610 | version "2.8.1" 1611 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" 1612 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== 1613 | 1614 | typescript@^5.5.2: 1615 | version "5.7.3" 1616 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz" 1617 | integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== 1618 | 1619 | ufo@^1.5.4: 1620 | version "1.5.4" 1621 | resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz" 1622 | integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== 1623 | 1624 | undici-types@~6.20.0: 1625 | version "6.20.0" 1626 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" 1627 | integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== 1628 | 1629 | undici@^5.28.4, undici@^5.28.5: 1630 | version "5.28.5" 1631 | resolved "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz" 1632 | integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== 1633 | dependencies: 1634 | "@fastify/busboy" "^2.0.0" 1635 | 1636 | unenv@2.0.0-rc.1: 1637 | version "2.0.0-rc.1" 1638 | resolved "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.1.tgz" 1639 | integrity sha512-PU5fb40H8X149s117aB4ytbORcCvlASdtF97tfls4BPIyj4PeVxvpSuy1jAptqYHqB0vb2w2sHvzM0XWcp2OKg== 1640 | dependencies: 1641 | defu "^6.1.4" 1642 | mlly "^1.7.4" 1643 | ohash "^1.1.4" 1644 | pathe "^1.1.2" 1645 | ufo "^1.5.4" 1646 | 1647 | utf-8-validate@^5.0.2: 1648 | version "5.0.10" 1649 | resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" 1650 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== 1651 | dependencies: 1652 | node-gyp-build "^4.3.0" 1653 | 1654 | uuid@^8.3.2: 1655 | version "8.3.2" 1656 | resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1657 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1658 | 1659 | vite-node@2.1.9: 1660 | version "2.1.9" 1661 | resolved "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz" 1662 | integrity sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA== 1663 | dependencies: 1664 | cac "^6.7.14" 1665 | debug "^4.3.7" 1666 | es-module-lexer "^1.5.4" 1667 | pathe "^1.1.2" 1668 | vite "^5.0.0" 1669 | 1670 | vite@^5.0.0: 1671 | version "5.4.14" 1672 | resolved "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz" 1673 | integrity sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA== 1674 | dependencies: 1675 | esbuild "^0.21.3" 1676 | postcss "^8.4.43" 1677 | rollup "^4.20.0" 1678 | optionalDependencies: 1679 | fsevents "~2.3.3" 1680 | 1681 | vitest@~2.1.9: 1682 | version "2.1.9" 1683 | resolved "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz" 1684 | integrity sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q== 1685 | dependencies: 1686 | "@vitest/expect" "2.1.9" 1687 | "@vitest/mocker" "2.1.9" 1688 | "@vitest/pretty-format" "^2.1.9" 1689 | "@vitest/runner" "2.1.9" 1690 | "@vitest/snapshot" "2.1.9" 1691 | "@vitest/spy" "2.1.9" 1692 | "@vitest/utils" "2.1.9" 1693 | chai "^5.1.2" 1694 | debug "^4.3.7" 1695 | expect-type "^1.1.0" 1696 | magic-string "^0.30.12" 1697 | pathe "^1.1.2" 1698 | std-env "^3.8.0" 1699 | tinybench "^2.9.0" 1700 | tinyexec "^0.3.1" 1701 | tinypool "^1.0.1" 1702 | tinyrainbow "^1.2.0" 1703 | vite "^5.0.0" 1704 | vite-node "2.1.9" 1705 | why-is-node-running "^2.3.0" 1706 | 1707 | webidl-conversions@^3.0.0: 1708 | version "3.0.1" 1709 | resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" 1710 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1711 | 1712 | whatwg-url@^5.0.0: 1713 | version "5.0.0" 1714 | resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" 1715 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1716 | dependencies: 1717 | tr46 "~0.0.3" 1718 | webidl-conversions "^3.0.0" 1719 | 1720 | why-is-node-running@^2.3.0: 1721 | version "2.3.0" 1722 | resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz" 1723 | integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== 1724 | dependencies: 1725 | siginfo "^2.0.0" 1726 | stackback "0.0.2" 1727 | 1728 | workerd@1.20250204.0: 1729 | version "1.20250204.0" 1730 | resolved "https://registry.npmjs.org/workerd/-/workerd-1.20250204.0.tgz" 1731 | integrity sha512-zcKufjVFsQMiD3/acg1Ix00HIMCkXCrDxQXYRDn/1AIz3QQGkmbVDwcUk1Ki2jBUoXmBCMsJdycRucgMVEypWg== 1732 | optionalDependencies: 1733 | "@cloudflare/workerd-darwin-64" "1.20250204.0" 1734 | "@cloudflare/workerd-darwin-arm64" "1.20250204.0" 1735 | "@cloudflare/workerd-linux-64" "1.20250204.0" 1736 | "@cloudflare/workerd-linux-arm64" "1.20250204.0" 1737 | "@cloudflare/workerd-windows-64" "1.20250204.0" 1738 | 1739 | workerd@1.20250214.0: 1740 | version "1.20250214.0" 1741 | resolved "https://registry.npmjs.org/workerd/-/workerd-1.20250214.0.tgz" 1742 | integrity sha512-QWcqXZLiMpV12wiaVnb3nLmfs/g4ZsFQq2mX85z546r3AX4CTIkXl0VP50W3CwqLADej3PGYiRDOTelDOwVG1g== 1743 | optionalDependencies: 1744 | "@cloudflare/workerd-darwin-64" "1.20250214.0" 1745 | "@cloudflare/workerd-darwin-arm64" "1.20250214.0" 1746 | "@cloudflare/workerd-linux-64" "1.20250214.0" 1747 | "@cloudflare/workerd-linux-arm64" "1.20250214.0" 1748 | "@cloudflare/workerd-windows-64" "1.20250214.0" 1749 | 1750 | wrangler@3.109.1: 1751 | version "3.109.1" 1752 | resolved "https://registry.npmjs.org/wrangler/-/wrangler-3.109.1.tgz" 1753 | integrity sha512-1Jx+nZ6eCXPQ2rsGdrV6Qy/LGvhpqudeuTl4AYHl9P8Zugp44Uzxnj5w11qF4v/rv1dOZoA5TydSt9xMFfhpKg== 1754 | dependencies: 1755 | "@cloudflare/kv-asset-handler" "0.3.4" 1756 | "@esbuild-plugins/node-globals-polyfill" "0.2.3" 1757 | "@esbuild-plugins/node-modules-polyfill" "0.2.2" 1758 | blake3-wasm "2.1.5" 1759 | esbuild "0.17.19" 1760 | miniflare "3.20250204.1" 1761 | path-to-regexp "6.3.0" 1762 | unenv "2.0.0-rc.1" 1763 | workerd "1.20250204.0" 1764 | optionalDependencies: 1765 | fsevents "~2.3.2" 1766 | sharp "^0.33.5" 1767 | 1768 | wrangler@^3.109.2: 1769 | version "3.109.2" 1770 | resolved "https://registry.npmjs.org/wrangler/-/wrangler-3.109.2.tgz" 1771 | integrity sha512-CT8izugPBth5o1o4gLNcQrDkHKSX2Jthy6gkyhaWiy2pFrx+536NMn/atWilLA1t1uhIgddEI5BXDNudIkPPHA== 1772 | dependencies: 1773 | "@cloudflare/kv-asset-handler" "0.3.4" 1774 | "@esbuild-plugins/node-globals-polyfill" "0.2.3" 1775 | "@esbuild-plugins/node-modules-polyfill" "0.2.2" 1776 | blake3-wasm "2.1.5" 1777 | esbuild "0.17.19" 1778 | miniflare "3.20250214.0" 1779 | path-to-regexp "6.3.0" 1780 | unenv "2.0.0-rc.1" 1781 | workerd "1.20250214.0" 1782 | optionalDependencies: 1783 | fsevents "~2.3.2" 1784 | sharp "^0.33.5" 1785 | 1786 | ws@8.18.0, ws@^8.5.0: 1787 | version "8.18.0" 1788 | resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" 1789 | integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== 1790 | 1791 | ws@^7.5.10: 1792 | version "7.5.10" 1793 | resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" 1794 | integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== 1795 | 1796 | youch@3.2.3: 1797 | version "3.2.3" 1798 | resolved "https://registry.npmjs.org/youch/-/youch-3.2.3.tgz" 1799 | integrity sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw== 1800 | dependencies: 1801 | cookie "^0.5.0" 1802 | mustache "^4.2.0" 1803 | stacktracey "^2.1.8" 1804 | 1805 | zod@3.22.3: 1806 | version "3.22.3" 1807 | resolved "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz" 1808 | integrity sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug== 1809 | 1810 | zod@^3.22.3: 1811 | version "3.24.2" 1812 | resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz" 1813 | integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== 1814 | --------------------------------------------------------------------------------