diff --git a/.prettierignore b/.prettierignore index d1d63eb6c..0b86a58a6 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,3 +5,4 @@ Cargo.lock games/world-cup/ games/gacha/pinocchio/idl/ tokens/token-2022/transfer-hook/block-list/pinocchio/sdk/ +tokens/token-2022/transfer-hook/allow-block-list-token/idl/ diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/.prettierignore b/tokens/token-2022/transfer-hook/allow-block-list-token/.prettierignore index bbd564b67..ad04b0683 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/.prettierignore +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/.prettierignore @@ -12,3 +12,9 @@ package-lock.json pnpm-lock.yaml yarn.lock + +# Anchor IDL copied verbatim from `anchor build` output (anchor/target/idl/abl_token.json); +# the input `pnpm run generate-client` reads, never hand-edited. +/idl +# Codama-generated Kit client; already formatted by the renderer itself. +/src/generated diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/README.md b/tokens/token-2022/transfer-hook/allow-block-list-token/README.md index bbe093e51..345fce063 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/README.md +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/README.md @@ -38,6 +38,12 @@ Compile the program (make sure to replace your program ID): Compile the UI: `yarn run build` +The UI talks to the program through a Codama-generated client under `src/generated`, rebuilt by +`pnpm run generate-client` (which `dev` and `build` run for you). It reads the IDL emitted by +`anchor build` when one is present, falling back to the committed copy in `idl/`, so a program ID +change picks up automatically — commit the refreshed `idl/abl_token.json` and `src/generated` when +the change is meant to be permanent. + Serve the UI: `yarn run dev` diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/programs/abl-token/src/instructions/remove_wallet.rs b/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/programs/abl-token/src/instructions/remove_wallet.rs index a7c23a941..e3aa7855a 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/programs/abl-token/src/instructions/remove_wallet.rs +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/programs/abl-token/src/instructions/remove_wallet.rs @@ -1,6 +1,6 @@ use anchor_lang::prelude::*; -use crate::{ABWallet, Config}; +use crate::{ABWallet, Config, AB_WALLET_SEED, CONFIG_SEED}; #[derive(Accounts)] pub struct RemoveWallet<'info> { @@ -8,15 +8,19 @@ pub struct RemoveWallet<'info> { pub authority: Signer<'info>, #[account( - seeds = [b"config"], + seeds = [CONFIG_SEED], bump = config.bump, has_one = authority, )] pub config: Box>, + pub wallet: SystemAccount<'info>, + #[account( mut, close = authority, + seeds = [AB_WALLET_SEED, wallet.key().as_ref()], + bump, )] pub ab_wallet: Account<'info, ABWallet>, diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/src/abl-token-exports.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/src/abl-token-exports.ts deleted file mode 100644 index 6e9a7bd3d..000000000 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/src/abl-token-exports.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Here we export some useful types and functions for interacting with the Anchor program. -import { type AnchorProvider, Program } from '@anchor-lang/core'; -import { type Cluster, PublicKey } from '@solana/web3.js'; -import ABLTokenIDL from '../target/idl/abl_token.json'; -import type { AblToken } from '../target/types/abl_token'; - -// Re-export the generated IDL and type -export { ABLTokenIDL }; - -// The programId is imported from the program IDL. -export const ABL_TOKEN_PROGRAM_ID = new PublicKey(ABLTokenIDL.address); - -// This is a helper function to get the Basic Anchor program. -export function getABLTokenProgram(provider: AnchorProvider, address?: PublicKey): Program { - return new Program( - { - ...ABLTokenIDL, - address: address ? address.toBase58() : ABLTokenIDL.address, - } as AblToken, - provider, - ); -} - -// This is a helper function to get the program ID for the Basic program depending on the cluster. -export function getABLTokenProgramId(cluster: Cluster) { - switch (cluster) { - case 'devnet': - case 'testnet': - // This is the program ID for the Basic program on devnet and testnet. - return new PublicKey('6z68wfurCMYkZG51s1Et9BJEd9nJGUusjHXNt4dGbNNF'); - default: - return ABL_TOKEN_PROGRAM_ID; - } -} - -//ABLTokenIDL.types["mode"] diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/src/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/src/index.ts deleted file mode 100644 index 04fdd85fb..000000000 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './abl-token-exports'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/tests/basic.test.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/tests/basic.test.ts index b7f3c5c7d..ceae8c88b 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/tests/basic.test.ts +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/anchor/tests/basic.test.ts @@ -1,14 +1,135 @@ -import type { Program } from '@anchor-lang/core'; -import * as anchor from '@anchor-lang/core'; -import type { AblToken } from '../target/types/abl_token'; +import * as path from 'node:path'; +import { + appendTransactionMessageInstructions, + createTransactionMessage, + generateKeyPairSigner, + lamports, + pipe, + setTransactionMessageFeePayerSigner, + signTransactionMessageWithSigners, + type Instruction, + type KeyPairSigner, +} from '@solana/kit'; +import { assert } from 'chai'; +import { FailedTransactionMetadata, LiteSVM } from 'litesvm'; +import { decodeABWallet } from '../../src/generated/accounts/aBWallet'; +import { decodeConfig } from '../../src/generated/accounts/config'; +import { + getInitConfigInstructionAsync, + getInitWalletInstructionAsync, + getRemoveWalletInstructionAsync, +} from '../../src/generated/instructions'; +import { findAbWalletPda, findConfigPda } from '../../src/generated/pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../../src/generated/programs'; -describe('abl-token', () => { - // Configure the client to use the local cluster. - anchor.setProvider(anchor.AnchorProvider.env()); +// Exercises the Codama-generated Kit client - the same client the webapp uses - against a +// LiteSVM instance loaded with the built program, covering the generated instruction +// builders, PDA derivation, and account decoders. LiteSVM keeps the suite independent of a +// validator, whose ephemeral program id would not match the client's `declare_id!`. +const PROGRAM_SO = path.join(__dirname, '..', 'target', 'deploy', 'abl_token.so'); - const _program = anchor.workspace.ABLToken as Program; +describe('abl-token (Kit client, via LiteSVM)', () => { + let svm: LiteSVM; + let authority: KeyPairSigner; - it('should run the program', async () => { - // Add your test here. + before(async () => { + svm = new LiteSVM(); + svm.addProgramFromFile(ABL_TOKEN_PROGRAM_ADDRESS, PROGRAM_SO); + authority = await generateKeyPairSigner(); + svm.airdrop(authority.address, lamports(BigInt(10_000_000_000))); + }); + + async function send(instructions: Instruction | Instruction[], payer: KeyPairSigner = authority) { + const transactionMessage = pipe( + createTransactionMessage({ version: 0 }), + m => setTransactionMessageFeePayerSigner(payer, m), + m => svm.setTransactionMessageLifetimeUsingLatestBlockhash(m), + m => appendTransactionMessageInstructions(Array.isArray(instructions) ? instructions : [instructions], m), + ); + const signedTransaction = await signTransactionMessageWithSigners(transactionMessage); + const result = svm.sendTransaction(signedTransaction); + if (result instanceof FailedTransactionMetadata) { + throw new Error(`Transaction failed: ${result.toString()}`); + } + return result; + } + + it('initializes the config, owned by the payer', async () => { + const ix = await getInitConfigInstructionAsync( + { payer: authority }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + await send(ix); + + const [configPda] = await findConfigPda({ programAddress: ABL_TOKEN_PROGRAM_ADDRESS }); + const account = svm.getAccount(configPda); + if (!account?.exists) throw new Error('Config account not found'); + + const config = decodeConfig({ ...account, address: configPda }); + assert.equal(config.data.authority, authority.address); + }); + + it('adds a wallet to the list, then removes it by wallet address alone', async () => { + const wallet = await generateKeyPairSigner(); + + const initIx = await getInitWalletInstructionAsync( + { authority, wallet: wallet.address, allowed: true }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + await send(initIx); + + const [abWalletPda] = await findAbWalletPda( + { wallet: wallet.address }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + const created = svm.getAccount(abWalletPda); + if (!created?.exists) throw new Error('ab_wallet account was not created'); + + const decoded = decodeABWallet({ ...created, address: abWalletPda }); + assert.equal(decoded.data.wallet, wallet.address); + assert.isTrue(decoded.data.allowed); + + // `ab_wallet` is resolved from `wallet` by the generated client, using the seeds the + // Rust account declares. + const removeIx = await getRemoveWalletInstructionAsync( + { authority, wallet: wallet.address }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + await send(removeIx); + + const closed = svm.getAccount(abWalletPda); + assert.isTrue(!closed?.exists || closed.data.length === 0, 'ab_wallet account should be closed'); + }); + + it('rejects removing a wallet for a caller who is not the config authority', async () => { + const wallet = await generateKeyPairSigner(); + const initIx = await getInitWalletInstructionAsync( + { authority, wallet: wallet.address, allowed: false }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + await send(initIx); + + const impostor = await generateKeyPairSigner(); + svm.airdrop(impostor.address, lamports(BigInt(10_000_000_000))); + + const removeIx = await getRemoveWalletInstructionAsync( + { authority: impostor, wallet: wallet.address }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + + let threw = false; + try { + await send(removeIx, impostor); + } catch { + threw = true; + } + assert.isTrue(threw, 'expected the has_one authority check to reject a non-authority caller'); + + const [abWalletPda] = await findAbWalletPda( + { wallet: wallet.address }, + { programAddress: ABL_TOKEN_PROGRAM_ADDRESS }, + ); + const stillThere = svm.getAccount(abWalletPda); + if (!stillThere?.exists) throw new Error('ab_wallet account should still exist'); }); }); diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/eslint.config.mjs b/tokens/token-2022/transfer-hook/allow-block-list-token/eslint.config.mjs index 153e8aaed..ff2de541c 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/eslint.config.mjs +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/eslint.config.mjs @@ -9,6 +9,13 @@ const compat = new FlatCompat({ baseDirectory: __dirname, }); -const eslintConfig = [...compat.extends('next/core-web-vitals', 'next/typescript')]; +const eslintConfig = [ + ...compat.extends('next/core-web-vitals', 'next/typescript'), + { + // Codama-generated client — regenerated on every build (`pnpm run generate-client`), + // never hand-edited, so it's not worth linting. + ignores: ['src/generated/**'], + }, +]; export default eslintConfig; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/idl/abl_token.json b/tokens/token-2022/transfer-hook/allow-block-list-token/idl/abl_token.json new file mode 100644 index 000000000..6df727123 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/idl/abl_token.json @@ -0,0 +1,704 @@ +{ + "address": "3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi", + "metadata": { + "name": "abl_token", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "attach_to_mint", + "discriminator": [ + 203, + 132, + 125, + 16, + 50, + 249, + 174, + 252 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "mint", + "writable": true + }, + { + "name": "extra_metas_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 101, + 120, + 116, + 114, + 97, + 45, + 97, + 99, + 99, + 111, + 117, + 110, + 116, + 45, + 109, + 101, + 116, + 97, + 115 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "args": [] + }, + { + "name": "change_mode", + "discriminator": [ + 124, + 163, + 122, + 208, + 67, + 22, + 162, + 241 + ], + "accounts": [ + { + "name": "authority", + "writable": true, + "signer": true + }, + { + "name": "mint", + "writable": true + }, + { + "name": "token_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "args", + "type": { + "defined": { + "name": "ChangeModeArgs" + } + } + } + ] + }, + { + "name": "init_config", + "discriminator": [ + 23, + 235, + 115, + 232, + 168, + 96, + 1, + 231 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "config", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 111, + 110, + 102, + 105, + 103 + ] + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "init_mint", + "discriminator": [ + 126, + 176, + 233, + 16, + 66, + 117, + 209, + 125 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "mint", + "writable": true, + "signer": true + }, + { + "name": "extra_metas_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 101, + 120, + 116, + 114, + 97, + 45, + 97, + 99, + 99, + 111, + 117, + 110, + 116, + 45, + 109, + 101, + 116, + 97, + 115 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "args": [ + { + "name": "args", + "type": { + "defined": { + "name": "InitMintArgs" + } + } + } + ] + }, + { + "name": "init_wallet", + "discriminator": [ + 141, + 132, + 233, + 130, + 168, + 183, + 10, + 119 + ], + "accounts": [ + { + "name": "authority", + "writable": true, + "signer": true, + "relations": [ + "config" + ] + }, + { + "name": "config", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 111, + 110, + 102, + 105, + 103 + ] + } + ] + } + }, + { + "name": "wallet" + }, + { + "name": "ab_wallet", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 97, + 98, + 95, + 119, + 97, + 108, + 108, + 101, + 116 + ] + }, + { + "kind": "account", + "path": "wallet" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "args", + "type": { + "defined": { + "name": "InitWalletArgs" + } + } + } + ] + }, + { + "name": "remove_wallet", + "discriminator": [ + 26, + 151, + 38, + 109, + 151, + 162, + 104, + 28 + ], + "accounts": [ + { + "name": "authority", + "writable": true, + "signer": true, + "relations": [ + "config" + ] + }, + { + "name": "config", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 99, + 111, + 110, + 102, + 105, + 103 + ] + } + ] + } + }, + { + "name": "wallet" + }, + { + "name": "ab_wallet", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 97, + 98, + 95, + 119, + 97, + 108, + 108, + 101, + 116 + ] + }, + { + "kind": "account", + "path": "wallet" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [] + }, + { + "name": "resize_meta_list", + "discriminator": [ + 244, + 53, + 88, + 253, + 57, + 31, + 94, + 149 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "mint" + }, + { + "name": "extra_metas_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 101, + 120, + 116, + 114, + 97, + 45, + 97, + 99, + 99, + 111, + 117, + 110, + 116, + 45, + 109, + 101, + 116, + 97, + 115 + ] + }, + { + "kind": "account", + "path": "mint" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "args": [] + }, + { + "name": "tx_hook", + "discriminator": [ + 105, + 37, + 101, + 197, + 75, + 251, + 102, + 26 + ], + "accounts": [ + { + "name": "source_token_account" + }, + { + "name": "mint" + }, + { + "name": "destination_token_account" + }, + { + "name": "owner_delegate" + }, + { + "name": "meta_list" + }, + { + "name": "source_ab_wallet" + }, + { + "name": "destination_ab_wallet" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + } + ], + "accounts": [ + { + "name": "ABWallet", + "discriminator": [ + 111, + 162, + 31, + 45, + 79, + 239, + 198, + 72 + ] + }, + { + "name": "Config", + "discriminator": [ + 155, + 12, + 170, + 224, + 30, + 250, + 204, + 130 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "InvalidMetadata", + "msg": "Invalid metadata" + }, + { + "code": 6001, + "name": "WalletNotAllowed", + "msg": "Wallet not allowed" + }, + { + "code": 6002, + "name": "AmountNotAllowed", + "msg": "Amount not allowed" + }, + { + "code": 6003, + "name": "WalletBlocked", + "msg": "Wallet blocked" + }, + { + "code": 6004, + "name": "MintNotUsingThisHook", + "msg": "Mint is not configured to use this transfer hook program" + } + ], + "types": [ + { + "name": "ABWallet", + "type": { + "kind": "struct", + "fields": [ + { + "name": "wallet", + "type": "pubkey" + }, + { + "name": "allowed", + "type": "bool" + } + ] + } + }, + { + "name": "ChangeModeArgs", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mode", + "type": { + "defined": { + "name": "Mode" + } + } + }, + { + "name": "threshold", + "type": "u64" + } + ] + } + }, + { + "name": "Config", + "type": { + "kind": "struct", + "fields": [ + { + "name": "authority", + "type": "pubkey" + }, + { + "name": "bump", + "type": "u8" + } + ] + } + }, + { + "name": "InitMintArgs", + "type": { + "kind": "struct", + "fields": [ + { + "name": "decimals", + "type": "u8" + }, + { + "name": "mint_authority", + "type": "pubkey" + }, + { + "name": "freeze_authority", + "type": "pubkey" + }, + { + "name": "permanent_delegate", + "type": "pubkey" + }, + { + "name": "transfer_hook_authority", + "type": "pubkey" + }, + { + "name": "mode", + "type": { + "defined": { + "name": "Mode" + } + } + }, + { + "name": "threshold", + "type": "u64" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "symbol", + "type": "string" + }, + { + "name": "uri", + "type": "string" + } + ] + } + }, + { + "name": "InitWalletArgs", + "type": { + "kind": "struct", + "fields": [ + { + "name": "allowed", + "type": "bool" + } + ] + } + }, + { + "name": "Mode", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Allow" + }, + { + "name": "Block" + }, + { + "name": "Mixed" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/package.json b/tokens/token-2022/transfer-hook/allow-block-list-token/package.json index 38bf1a2f3..2e2184825 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/package.json +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/package.json @@ -1,60 +1,67 @@ { - "name": "legacy-next-tailwind-basic", - "version": "0.0.0", - "private": true, - "scripts": { - "anchor": "cd anchor && anchor", - "anchor-build": "cd anchor && anchor build", - "anchor-localnet": "cd anchor && anchor localnet", - "anchor-test": "cd anchor && anchor test", - "build": "next build", - "ci": "npm run build && npm run lint && npm run format:check", - "dev": "next dev --turbopack", - "format": "prettier --write .", - "format:check": "prettier --check .", - "lint": "next lint", - "start": "next start" - }, - "dependencies": { - "@anchor-lang/core": "1.0.0-rc.5", - "@radix-ui/react-dialog": "^1.1.14", - "@radix-ui/react-dropdown-menu": "^2.1.15", - "@radix-ui/react-label": "^2.1.7", - "@radix-ui/react-slot": "^1.2.3", - "@solana/spl-token": "0.4.13", - "@solana/wallet-adapter-base": "0.9.27", - "@solana/wallet-adapter-react": "0.15.39", - "@solana/wallet-adapter-react-ui": "0.9.39", - "@solana/web3.js": "^1.98.4", - "@tanstack/react-query": "^5.82.0", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "jotai": "^2.12.5", - "lucide-react": "^0.525.0", - "next": "15.3.5", - "next-themes": "^0.4.6", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "sonner": "^2.0.6", - "tailwind-merge": "^3.3.1", - "tw-animate-css": "^1.3.5" - }, - "devDependencies": { - "@eslint/eslintrc": "^3.3.1", - "@tailwindcss/postcss": "^4.1.4", - "@types/bn.js": "^5.1.6", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^22.15.3", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", - "chai": "^6.2.2", - "eslint": "^9.25.1", - "eslint-config-next": "15.3.1", - "mocha": "^11.7.5", - "prettier": "^3.5.3", - "tailwindcss": "^4.1.4", - "tsx": "^4.19.2", - "typescript": "^5.8.3" - } + "name": "legacy-next-tailwind-basic", + "version": "0.0.0", + "private": true, + "scripts": { + "anchor": "cd anchor && anchor", + "anchor-build": "cd anchor && anchor build", + "anchor-localnet": "cd anchor && anchor localnet", + "anchor-test": "cd anchor && anchor test", + "generate-client": "tsx ./scripts/generate-client.ts", + "predev": "pnpm run generate-client", + "prebuild": "pnpm run generate-client", + "build": "next build", + "ci": "npm run build && npm run lint && npm run format:check", + "dev": "next dev --turbopack", + "format": "prettier --write .", + "format:check": "prettier --check .", + "lint": "next lint", + "start": "next start", + "typecheck": "pnpm run generate-client && tsc --noEmit" + }, + "dependencies": { + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-slot": "^1.2.3", + "@solana-program/system": "^0.13.0", + "@solana-program/token-2022": "^0.15.0", + "@solana/connector": "^0.2.6", + "@solana/instruction-plans": "^7.1.0", + "@solana/kit": "^7.1.0", + "@solana/program-client-core": "^7.1.0", + "@tanstack/react-query": "^5.82.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "jotai": "^2.12.5", + "lucide-react": "^0.525.0", + "next": "15.3.5", + "next-themes": "^0.4.6", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "sonner": "^2.0.6", + "tailwind-merge": "^3.3.1", + "tw-animate-css": "^1.3.5" + }, + "devDependencies": { + "@codama/nodes-from-anchor": "^1.5.3", + "@codama/renderers-js": "^2.3.1", + "@eslint/eslintrc": "^3.3.1", + "@tailwindcss/postcss": "^4.1.4", + "@types/chai": "^5.2.3", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.3", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "chai": "^6.2.2", + "codama": "^1.10.0", + "eslint": "^9.25.1", + "eslint-config-next": "15.3.1", + "litesvm": "^1.3.0", + "mocha": "^11.7.5", + "prettier": "^3.5.3", + "tailwindcss": "^4.1.4", + "tsx": "^4.19.2", + "typescript": "^5.8.3" + } } diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/pnpm-lock.yaml b/tokens/token-2022/transfer-hook/allow-block-list-token/pnpm-lock.yaml index 76c62970d..dca97a692 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/pnpm-lock.yaml +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@anchor-lang/core': - specifier: 1.0.0-rc.5 - version: 1.0.0-rc.5(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) '@radix-ui/react-dialog': specifier: ^1.1.14 version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -23,21 +20,24 @@ importers: '@radix-ui/react-slot': specifier: ^1.2.3 version: 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@solana/spl-token': - specifier: 0.4.13 - version: 0.4.13(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base': - specifier: 0.9.27 - version: 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-react': - specifier: 0.15.39 - version: 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/wallet-adapter-react-ui': - specifier: 0.9.39 - version: 0.9.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.2.0(react@19.2.0))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/web3.js': - specifier: ^1.98.4 - version: 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana-program/system': + specifier: ^0.13.0 + version: 0.13.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana-program/token-2022': + specifier: ^0.15.0 + version: 0.15.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))(@solana/sysvars@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)) + '@solana/connector': + specifier: ^0.2.6 + version: 0.2.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/instruction-plans': + specifier: ^7.1.0 + version: 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/kit': + specifier: ^7.1.0 + version: 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/program-client-core': + specifier: ^7.1.0 + version: 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@tanstack/react-query': specifier: ^5.82.0 version: 5.90.3(react@19.2.0) @@ -75,15 +75,18 @@ importers: specifier: ^1.3.5 version: 1.4.0 devDependencies: + '@codama/nodes-from-anchor': + specifier: ^1.5.3 + version: 1.5.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@codama/renderers-js': + specifier: ^2.3.1 + version: 2.3.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@eslint/eslintrc': specifier: ^3.3.1 version: 3.3.1 '@tailwindcss/postcss': specifier: ^4.1.4 version: 4.1.14 - '@types/bn.js': - specifier: ^5.1.6 - version: 5.2.0 '@types/chai': specifier: ^5.2.3 version: 5.2.3 @@ -102,12 +105,18 @@ importers: chai: specifier: ^6.2.2 version: 6.2.2 + codama: + specifier: ^1.10.0 + version: 1.10.1 eslint: specifier: ^9.25.1 version: 9.37.0(jiti@2.6.1) eslint-config-next: specifier: 15.3.1 version: 15.3.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + litesvm: + specifier: ^1.3.0 + version: 1.3.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) mocha: specifier: ^11.7.5 version: 11.7.6 @@ -130,20 +139,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@anchor-lang/borsh@1.0.0-rc.5': - resolution: {integrity: sha512-17a+xOmvrn7zSIqlbsjqgz4f64vQEvAmZ7qyQuETCHSskC23LTtjRI0DqAl/r/vC6kosPJGWyOr9ddVIqUVtww==} - engines: {node: '>=10'} - peerDependencies: - '@solana/web3.js': ^1.69.0 - - '@anchor-lang/core@1.0.0-rc.5': - resolution: {integrity: sha512-4iPy4RiEFn6obzYY7zx8IaGAXz2fvJ0uCTF6agAcUBjGNZeypfEb4ZZh6TfLnJy78Lh06JeB7XGqKsaBCMEmQA==} - engines: {node: '>=17'} - - '@anchor-lang/errors@1.0.0-rc.5': - resolution: {integrity: sha512-kLx7oLGVCRhtWeS9PQWGkzZTDpNrGkiJQBrx1rAhEiFemL4YumhUuEbXaaEVuLBt7qZcT1eBPN4LQxYGj3QWyw==} - engines: {node: '>=10'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -298,6 +293,42 @@ packages: resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@codama/cli@1.6.1': + resolution: {integrity: sha512-U7YtSNIz2AeNue0TM+lZhVtQgoYD9zbuNzRIzaicnrdpAWvVGPfZhoKBOjDyVt7xxr00VF6ilu2wDCgak1yQfQ==} + hasBin: true + + '@codama/errors@1.10.1': + resolution: {integrity: sha512-AOeZ7SuSuCHlhh2irN6nI/YSkEDh+v7+/1ihqstJpYM5mYx67MuKNw1X3COe9nF8e3lkU+eVtq51ILdAJa34jA==} + hasBin: true + + '@codama/fragments@0.1.4': + resolution: {integrity: sha512-hDykTocyNL0nFKbYZjGPJKtAlMKtKM3PZJbzA8FPOFF1H7U2Z8zd+71UrH9jbSEzdnobAeaRqV71LMPg1yUG8w==} + + '@codama/node-types@1.10.1': + resolution: {integrity: sha512-PANkfJ0/1rWwgWPWPRQoCoVbozWOb5YPvYDkEEvqXbnofC1qIioglMwy8pT3N1nJybMwS4J1prk05hSPmhRvag==} + + '@codama/nodes-from-anchor@1.5.4': + resolution: {integrity: sha512-27Nfbu19etgnNvk5wlmbaCyHOVWYPLwXKr4kDTyuO/cmOWMYR8W4ZiFLivVV+1BYbDtNnCWuIn8RuZZSB8X+XQ==} + + '@codama/nodes@1.10.1': + resolution: {integrity: sha512-hcfCCpubRf/BA0vOSEBu95Q8R42yhs0myrqWVCYgv4DQrEqeAiTJxav5NEgmRj8kdFm04Qn854IT4vVXVLP9mA==} + + '@codama/renderers-core@1.3.12': + resolution: {integrity: sha512-LyjFPg66hgfeEI9yV952LSKH4M1UOl1zoIRZgMT25hw5rGQmxxYxNqyKSleqEzJ4uKEO4kAj2WVhFVK4F4sAbA==} + + '@codama/renderers-js@2.3.1': + resolution: {integrity: sha512-+7WtjpcqnlPkweG+tWWiER2XkJP7SF+RJgYpI0RHc91ZP60Umt0qc+0JPuqMyiPhVrLTN2U/lpsBDQw2MeEsvA==} + engines: {node: '>=20.18.0'} + + '@codama/validators@1.10.1': + resolution: {integrity: sha512-cUe+D4gsZttbynBCH1vxTabsW61jFXCcv+FDrb3DNokf+gJKXkiNAyzTMQPazWCAQZkEVIdRkcj+J4vv1sTE+A==} + + '@codama/visitors-core@1.10.1': + resolution: {integrity: sha512-l5dEZ7Ra5KU64y0Nw79CUp4bAlKRQg9m1DlW1nfQtMEByWEzqteOYesKCgK1z3ypCOXqkN9qlrLAqaYSbOa9Vw==} + + '@codama/visitors@1.10.1': + resolution: {integrity: sha512-odsT0HMGpByL4fynLEmVJVoWB1jU5+DNg6pSiJXHmWpJE68mHvgK3tXUTj7eU8zAW+lAjfQWui6pcFp8W4xhJA==} + '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} @@ -735,6 +766,12 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@nanostores/persistent@1.1.0': + resolution: {integrity: sha512-e6vfv7H99VkCfSoNTR/qNVMj6vXwWcsEL+LCQQamej5GK9iDefKxPCJjdOpBi1p4lNCFIQ+9VjYF1spvvc2p6A==} + engines: {node: ^20.0.0 || >=22.0.0} + peerDependencies: + nanostores: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^1.0.0 + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -800,10 +837,17 @@ packages: resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} engines: {node: ^14.21.3 || >=16} + '@noble/ed25519@3.1.0': + resolution: {integrity: sha512-pfcObRY3CtvwfaG9Mt5XqZdKmAQppl37tHUeuBhDUbiwJBCVY4/A4lbMvb1xKhMDx96AqAqZpMWuBX1HulhX4g==} + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@2.3.0': + resolution: {integrity: sha512-oN+QwyX7VSHotibwubG3kpzbwKrfnyR6OOO+3Nk/53ADL7FmgHHz4TgrbaYKvvOw09u6QTx0oiH1cNCIOuN0CQ==} + engines: {node: '>= 20.19.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1192,188 +1236,987 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.4': - resolution: {integrity: sha512-vSsIVGEOs+IJ8+5gzSwl5XBCW1zFIwhF0Qfx+fqH8F0eN5ip+XExFcnt5Of426HVpmVL2H8jocBwGwvdrTNU/A==} + '@solana-mobile/mobile-wallet-adapter-protocol@2.2.9': + resolution: {integrity: sha512-qtWJq0hzKgngVG0So2ViBRPYDculaxgj40WDSP1nzgdg85MXyAmTEjQqV10uSVbZRm9b1hl601HDJX1sHTgeiw==} peerDependencies: - '@solana/web3.js': ^1.58.0 + react-native: '>0.74' + + '@solana-mobile/wallet-standard-mobile@0.5.3': + resolution: {integrity: sha512-/Ea/CNIWHExpXsA6syVy7fUUhONtYob+VMsmF8flm8GEAZQyzX6UtKSy4NQMMTGBTAGlmmmbBVrZF+Tp5/fDxQ==} - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.4': - resolution: {integrity: sha512-0YvA8QAzMQYujYq1fuJ4wNlouvnJpVYJ4XKqBBh+G8IQGEezhWjuP6DryIg9gw3LD6ju/rDX1jfzGOZ38JAzkQ==} + '@solana-program/record@0.3.0': + resolution: {integrity: sha512-q8z86INfXRQ5357qgVBrw05vC+u3xg8Vb4E1gEwnYUvAkL3cbJSjWVfTlGRiGWYmPNq/FYIWbsFrhsxXyhaJ+w==} + engines: {node: '>=24.0.0'} peerDependencies: - react-native: '>0.69' + '@solana/kit': ^7.0.0 - '@solana-mobile/wallet-adapter-mobile@2.2.4': - resolution: {integrity: sha512-ZKj8xU1bOtgHMgMfJh8qfUtdp5Ii4JhVJP3jqaRswYpRClmTApkBB++izSD3NBQ6fmiGv2G8F7AILQO0dYOwbg==} + '@solana-program/system@0.12.2': + resolution: {integrity: sha512-MaBeOxlvTruQhA7UYkOb3hVTEHPPagOtd+PvTm6a8rGgvEAP0kD4BbC37NceOaR4ABNqdaCmD5OMVRKgrE6KAg==} peerDependencies: - '@solana/web3.js': ^1.58.0 + '@solana/kit': ^6.4.0 - '@solana-mobile/wallet-standard-mobile@0.4.2': - resolution: {integrity: sha512-D/ebTRcpSEdCxfp7OZ0NRg+ScguJHqp208EGWI1R5rMBoGdoeu4ZvIi3VeJdi+Y9qcJFji8p2gf/wdHRL+6RkQ==} + '@solana-program/system@0.13.0': + resolution: {integrity: sha512-Id6QQxCG7ByImXPD5X/c3Ag2kySD+49aJ9waIkfxyUFyokhMQgxYQAx2rKuaygaBlaBQY6VVfBS46pqxZV+99A==} + peerDependencies: + '@solana/kit': ^7.0.0 - '@solana/buffer-layout-utils@0.2.0': - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana-program/token-2022@0.15.0': + resolution: {integrity: sha512-Q9vR9kzP+l9AVWt2Uj5nH44BrnotiLFmX3AYDgsFQfuTla9n66RokNPGaSrCMUvQS0xRBv/u9BhH4p39qdB9Hw==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@solana/kit': ^7.0.0 + '@solana/sysvars': ^7.0.0 + '@solana/zk-sdk': ^0.5.1 + peerDependenciesMeta: + '@solana/zk-sdk': + optional: true + + '@solana-program/token@0.14.0': + resolution: {integrity: sha512-zpLMr6JZndlsQCQvrm0gezfwdr1lmzOGqN6v2WIYXjtDmbF+xg6zh/MAp2UFHRpv3uDmylEdjtQo05pa2OeaYg==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@solana/kit': ^6.5.0 + + '@solana-program/zk-elgamal-proof@0.3.2': + resolution: {integrity: sha512-bCiRVKtqYZpajgC2RVypZL4A0xHjQYVEsVSNMTtPJ1jjE5KOUvsXhnngGMYShK6BHv+fQP4F8QKvEVW/HOSFAg==} + peerDependencies: + '@solana/kit': ^7.0.0 + + '@solana/accounts@6.10.0': + resolution: {integrity: sha512-+FxfDOrnifoPlBkF+fr8eeQdgM6xtIgAg9xKMu3WnIz60oZd4Xnry6+ff6t+ePPoZZp397FSg9ZJet68VCWm5Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/accounts@7.1.0': + resolution: {integrity: sha512-0Vp2advYsTb7eb0jZveXZJaux6OSYcI3nitwoXOTZzCuzjbIjiHI/bpn3CcqfKBPW/1dnCIWAW7VW1otqH0a1w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/addresses@6.10.0': + resolution: {integrity: sha512-vEoCGBTxG0HCERAn84KXkrJjl+pDaNzOpZ0qbgcPS98fYxP5yzbKB8SNOY2bzrbkRUmmw5Q3hqTRERemUN2Gcw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/addresses@7.1.0': + resolution: {integrity: sha512-kA/aav0TdyhrXCG6VCGG/fTuGu4ix5UW2PxtsbpBdZcyi+3TznLS1xKzIZBzqn0DL0q6HKdud6Ene7DWZDH1lw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/assertions@6.10.0': + resolution: {integrity: sha512-lKSAdVo+P/6Lp4vs6shstXmFOpvxrABwn4o1462tb7sKkNapk6o9pPFVPGw4DUgPS3WqWRs1j2tmpuVjhQRntg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/assertions@7.1.0': + resolution: {integrity: sha512-LD9+fhZb/xBECl27gfxDEX+qyj4PRV6700RJuprJWNMvGd8v0eoO0N+0QwnopK7o7O4w3DaW9/a3jH+iiwEqzw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} engines: {node: '>=5.10'} - '@solana/codecs-core@2.0.0-rc.1': - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} - peerDependencies: - typescript: '>=5' - '@solana/codecs-core@2.3.0': resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-data-structures@2.0.0-rc.1': - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + '@solana/codecs-core@5.5.1': + resolution: {integrity: sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/codecs-numbers@2.0.0-rc.1': - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + '@solana/codecs-core@6.10.0': + resolution: {integrity: sha512-nfAl9OMGo4HanIMxGsQoVB7BxMoqBCYEUxl8oEAZZ09pDxnaXQZkTRXEwPPccag37XfW1ciPd1vWPKwB2b0HHQ==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/codecs-numbers@2.3.0': - resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + '@solana/codecs-core@7.1.0': + resolution: {integrity: sha512-pl1gCCvviKekrijEDieZ1ps3LjC6ova2pZ/ZBXEJJa46nF7M0hwdZe/KzbMxKQ8WtT/WqW8Uyh6JQt8IJcMgRw==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/codecs-strings@2.0.0-rc.1': - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + '@solana/codecs-data-structures@5.5.1': + resolution: {integrity: sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w==} + engines: {node: '>=20.18.0'} peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/codecs@2.0.0-rc.1': - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + '@solana/codecs-data-structures@6.10.0': + resolution: {integrity: sha512-CNasJW3bq5u+632Zt5aJ8rOjAjv2HyenpV8o9kAIqdmV4CBpjCCoBnKn8LkuR/sbeREZxJYfhKTXO/9ruAkw7A==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/errors@2.0.0-rc.1': - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true + '@solana/codecs-data-structures@7.1.0': + resolution: {integrity: sha512-yCwyXCD1qtj0qJwCLQVS9aojKDio7t8kqXQVhLfasYFsckvecK+OObkoILkBXBJVmpOXI8nRYwNAb63+CvJo/g==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/errors@2.3.0': - resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} engines: {node: '>=20.18.0'} - hasBin: true peerDependencies: typescript: '>=5.3.3' - '@solana/options@2.0.0-rc.1': - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + '@solana/codecs-numbers@5.5.1': + resolution: {integrity: sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/spl-token-group@0.0.7': - resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} - engines: {node: '>=16'} + '@solana/codecs-numbers@6.10.0': + resolution: {integrity: sha512-CcM+wX4zOiA9zkh8A7t1787A0Ehgmu5+6Z2tKoHew6cNw/dkaUTPa8JnNHbvfsLC8dfHC1BhAEJl86sKmRsfkQ==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.95.3 + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/spl-token-metadata@0.1.6': - resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} - engines: {node: '>=16'} + '@solana/codecs-numbers@7.1.0': + resolution: {integrity: sha512-Hfw5OXx7tbSJ4iQ0r1ar6D+7XixkX8K36ni9cHDrunpiTo9SLIE0Lzj9/889aPNv4J4JggW1bpqzcrz3RI/o5g==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.95.3 + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/spl-token@0.4.13': - resolution: {integrity: sha512-cite/pYWQZZVvLbg5lsodSovbetK/eA24gaR0eeUeMuBAMNrT8XFCwaygKy0N2WSg3gSyjjNpIeAGBAKZaY/1w==} - engines: {node: '>=16'} + '@solana/codecs-strings@5.5.1': + resolution: {integrity: sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.95.5 + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: ^5.0.0 + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true - '@solana/wallet-adapter-base-ui@0.1.6': - resolution: {integrity: sha512-OuxLBOXA2z3dnmuGP0agEb7xhsT3+Nttd+gAkSLgJRX2vgNEAy3Fvw8IKPXv1EE2vRdw/U6Rq0Yjpp3McqVZhw==} - engines: {node: '>=20'} + '@solana/codecs-strings@6.10.0': + resolution: {integrity: sha512-zlaqkg7K6F6IN4V/Ec8TWkTn054gxv7ZLagvGkuEyAdPQ6BzzsehOm2TqCuyXgJJTCGPLY1bEk6yH9NxANe0kA==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.98.0 - react: '*' + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.4.0' + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true - '@solana/wallet-adapter-base@0.9.27': - resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} - engines: {node: '>=20'} + '@solana/codecs-strings@7.1.0': + resolution: {integrity: sha512-YIv/XVDYTzkYiFRdbjK6tI1BUKNlV1ta5hl9oK6+CoCDZn7nECfAN96KPYs94jzbN5VgMgbEqi6tlQcdy5KuCg==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.98.0 + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.4.0' + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true - '@solana/wallet-adapter-react-ui@0.9.39': - resolution: {integrity: sha512-B6GdOobwVuIgEX1qjcbTQEeo+0UGs3WPuBeUlR0dDCzQh9J3IAWRRyL/47FYSHYRp26LAu4ImWy4+M2TFD5OJg==} - engines: {node: '>=20'} + '@solana/codecs@5.5.1': + resolution: {integrity: sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.98.0 - react: '*' - react-dom: '*' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-adapter-react@0.15.39': - resolution: {integrity: sha512-WXtlo88ith5m22qB+qiGw301/Zb9r5pYr4QdXWmlXnRNqwST5MGmJWhG+/RVrzc+OG7kSb3z1gkVNv+2X/Y0Gg==} - engines: {node: '>=20'} + '@solana/codecs@6.10.0': + resolution: {integrity: sha512-lLVuxod4ChWp9i7OvpgIykYG8Q9OGPVXKnHM9VlzDDLylsx7Y1FoQL00sHa7PqFkJVmkBufaA6dcGbQ7FU+lAQ==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.98.0 - react: '*' + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-standard-chains@1.1.1': - resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} - engines: {node: '>=16'} + '@solana/codecs@7.1.0': + resolution: {integrity: sha512-4M1MgIiRX46qMUnrUjVnRnTxETmCZ7VLWddMdf+t6y3aVsMzz8kd9ngH7NloFhHtnAO0n3qJjs2rdgx/Dxd3Zg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-standard-core@1.1.2': - resolution: {integrity: sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA==} - engines: {node: '>=16'} + '@solana/connector@0.2.6': + resolution: {integrity: sha512-5JOb6nKhFOtqjIojDs372QcQE8GFUYSXL343DeOrVWAP2oEuGtIYLIHEKJg4AZFX+owqJAmPzlgYiSdLaK/bow==} + peerDependencies: + '@solana/connector-debugger': '*' + '@solana/keychain': ^1.2.0 + '@solana/keychain-aws-kms': ^1.2.0 + '@solana/keychain-fireblocks': ^1.2.0 + '@solana/keychain-privy': ^1.2.0 + '@solana/keychain-turnkey': ^1.2.0 + '@solana/keychain-vault': ^1.2.0 + '@solana/web3.js': ^1.0.0 + '@walletconnect/universal-provider': ^2.23.9 + react: '>=18.0.0' + peerDependenciesMeta: + '@solana/connector-debugger': + optional: true + '@solana/keychain': + optional: true + '@solana/keychain-aws-kms': + optional: true + '@solana/keychain-fireblocks': + optional: true + '@solana/keychain-privy': + optional: true + '@solana/keychain-turnkey': + optional: true + '@solana/keychain-vault': + optional: true + '@solana/web3.js': + optional: true + '@walletconnect/universal-provider': + optional: true + react: + optional: true - '@solana/wallet-standard-features@1.3.0': - resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} - engines: {node: '>=16'} + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' - '@solana/wallet-standard-util@1.1.2': - resolution: {integrity: sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==} - engines: {node: '>=16'} + '@solana/errors@5.5.1': + resolution: {integrity: sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-standard-wallet-adapter-base@1.1.4': - resolution: {integrity: sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw==} - engines: {node: '>=16'} + '@solana/errors@6.10.0': + resolution: {integrity: sha512-KBLAxCtAXr357JNhCyIDQXWbuSj5vN6w+28FSfcYY6OOSiphmXLAV3V58jgV0C6iNbIzFJFi6yatFyDTdeJsNg==} + engines: {node: '>=20.18.0'} + hasBin: true peerDependencies: - '@solana/web3.js': ^1.98.0 - bs58: ^6.0.0 + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-standard-wallet-adapter-react@1.1.4': - resolution: {integrity: sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg==} - engines: {node: '>=16'} + '@solana/errors@7.1.0': + resolution: {integrity: sha512-sJ0mM6SHN7fa6auHARRAGjjDpkFzhx6jmgHZAjliC/xADMfI2IYrTnAwguRV9dVBOsEHicylIXszvsyRb6BmEw==} + engines: {node: '>=20.18.0'} + hasBin: true peerDependencies: - '@solana/wallet-adapter-base': '*' - react: '*' + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-standard-wallet-adapter@1.1.4': - resolution: {integrity: sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ==} - engines: {node: '>=16'} + '@solana/fast-stable-stringify@6.10.0': + resolution: {integrity: sha512-iCNed27wk6PKSS3QUtHovRfMWF/jbVWogs2vB4tukKUCsqG4rDfDInIwZ6ur/nY6XTrgi2gMMdZq9GAUlWsbfw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/wallet-standard@1.1.4': - resolution: {integrity: sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw==} - engines: {node: '>=16'} + '@solana/fast-stable-stringify@7.1.0': + resolution: {integrity: sha512-DV35b2DoqFwQlO7acwi0WG47oLSORGep7/lTkd/VrCB/MdM0J5TggQ0gRqc9v3ORBDQHcOYmMx6ym4Obqd1EFg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@solana/web3.js@1.98.4': - resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@solana/fixed-points@6.10.0': + resolution: {integrity: sha512-ZkKL0alXH3L7/wMiVG8YUuG8qBKunlM810+YBD7nUPRhifiGsX1zwADViHLYNqLr/jUk0mTYFUcKznTpB/K+Gg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@solana/fixed-points@7.1.0': + resolution: {integrity: sha512-xyVO7h8woz53L5dz9pV5akdf/EcluEvtV85cYtca1pp0ZpdcdnGQ2yve3mN/GuOEb+Ixzthrew2p0c5h9w4Bhg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@solana/functional@6.10.0': + resolution: {integrity: sha512-P8cevu4mAqHTXC37h1TVoOh8zhWB2tlOI/R9vWjYPpcLwcyWf8p2qq4LEGHl5kY+1C+4PNX39HsmCocXOPCDkQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@solana/functional@7.1.0': + resolution: {integrity: sha512-1yfUFHkeMvrD/6yTDu3op3CgWIfr1KAvHo3XQL6yBvz0miEbiQ6tAEZbrwHpudES43sG8ZvlgrkL0Oiu5KwC9g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@tailwindcss/node@4.1.14': - resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} + '@solana/instruction-plans@6.10.0': + resolution: {integrity: sha512-YG7mo4zykzdc6ZTV0BuN6pveK9qeBySzlYYerq578A4eQu3xcypMAYRGAvhMZtWTanjjmD6CKtM0M7kVp0TNxg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true - '@tailwindcss/oxide-android-arm64@4.1.14': + '@solana/instruction-plans@7.1.0': + resolution: {integrity: sha512-Ug7YSchE8Oq8PsaKYlr8IH0woYjmAgi7JdVwd1wtE1pReHvufH63WUsE6B6guqIkQPxiLZL/tmODzKas2zlVtA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/instructions@6.10.0': + resolution: {integrity: sha512-0TToYF+8LXQ3ofPMx+yF6yaM9l4YJvcAPMy0qV5JsrBUFlWXBSANRuudKBQLHMvb+a3OiUTq5X7omuorKMBB3A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/instructions@7.1.0': + resolution: {integrity: sha512-KnXUtSIbKCUjlposzfikAO3qSVliOSoMBzglQYSn3e0x0PpJ2MsVH6tzzI6v124YVhs0OSs5wFwYjENTedPgcg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/keys@6.10.0': + resolution: {integrity: sha512-26IRfdm/hTUCmM7MeEeX0ULSbCM6OzkZTkfkrPircqmRM7xyNqP4hq7u0P7wjb9dl7NfgyG6K7cdvUxrj2e3mA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/keys@7.1.0': + resolution: {integrity: sha512-BGRkTPeBIKPojwVEdYaBXtLMQ0fp8xtQiRxDhOSyYpd1bz52K4bmvrugVtSqfjWLVO+I8SRZGpSZq2G5+DgR1Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/kit@6.10.0': + resolution: {integrity: sha512-/WnnQp3uARh2JCFSfAakejTAqwmXVuMVTcRn5r2yDwY2yzZ4R6mt/Cl59VPimVLNSoTyN/KsEwhv9omr3ERazQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/kit@7.1.0': + resolution: {integrity: sha512-UvzQhbn7ITjoBIinGz7rrdPSfkE8/bl+c6TISTLOXiW5hZw16mKOAkK28duP6bJutgQ57L0oJ4HYu5BTzAznOg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/nominal-types@6.10.0': + resolution: {integrity: sha512-9ykyBBvnkInH7fCacjJi7zu2PJyd+OCt+VTjIISv070fHzKIMFqZqJJ/dJ0SRH2aHwfB3n86iVsmtBtuxi4KKA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/nominal-types@7.1.0': + resolution: {integrity: sha512-oN+gGAqBnGc/iGIq5i4Q/+VFyTqbh0wpLnWTtMbFpXmevrdX3IPPBW5Z76ysZtTtv+M4Ha64kqc2upLJBUGM0A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/offchain-messages@6.10.0': + resolution: {integrity: sha512-RiEgAueeMkFMC1suOXBIcmCZgtXRxy24yk0DldPB37bB4zwOF1SAaRjNRPjIkGK8RhCYrEpPosnzLyavw9ueRg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/offchain-messages@7.1.0': + resolution: {integrity: sha512-nQBqXNLjDvUybc6oRS936gHLGzKwKy9fSlUV4OPo1mLG5V8TcW+jhCc1UOJdmfj0FYDDq5rzqmFTVK4yEu7brw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/options@5.5.1': + resolution: {integrity: sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/options@6.10.0': + resolution: {integrity: sha512-RO9UT3UYD8/Cu2uM6ZXbKvLeMnVD42+g9JRds7Pfs4AhiOyg4R4TJrQUAppTgavPTO3PBRlWtWOC05ZH/yAIbg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/options@7.1.0': + resolution: {integrity: sha512-6Z6NYrnDB7qQXE7liHVpf0+5ytJogNw6QGsO8On/csX4f5WGBLxeP0JJQNnkOvuTrBkUMEq6YtTFxp4/Plqx9A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/plugin-core@6.10.0': + resolution: {integrity: sha512-JE70YTQOfFACVFGvoJon4Scc/eHUWjMu8Ovo35CcV2kHTAHYMCd4UkBd2gmlhK0vRMMomsQi1ZLPlAlTq0OoUQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/plugin-core@7.1.0': + resolution: {integrity: sha512-2UhReZOhFoUMcYz+72EDM3UIrrONZBpP8uhofPKNDmKPslDuJHc8q4RRlO1llGgrfV6dMIsk9j8uV4q3DjWu5g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/plugin-interfaces@6.10.0': + resolution: {integrity: sha512-vr0/l9wcM4orwGr8cjkFWaJ9A4HvzuAv00jMFNMg0Spd0GZqnwnpW+D/fXa1lIJnTRaF3EeEjLh4VjKU037T0Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/plugin-interfaces@7.1.0': + resolution: {integrity: sha512-5QXBy1RnbWmHRCIDZRZ0W2lMnWEw65lw9X+geJmiEfbLnTPKZdpYe+5YSClz26RMcp8X2ETovkgp0E8y0Zz0yg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/program-client-core@6.10.0': + resolution: {integrity: sha512-4PPbTLdC1ylHIuvhOFDP8RnSkXPCFjNFWGslzc+UFKnoR4ajzBcByX94jmaruDMk5ncxgj7tr9pzJTvfGHIaMA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/program-client-core@7.1.0': + resolution: {integrity: sha512-81CmiYVovOElru2E7ZpBg3aAaCOdgEB4FqRatxr3EUKcP8xzsM/gti7sZxmZCd6wyLLAQQokNxpLYBjspC4ZEw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/programs@6.10.0': + resolution: {integrity: sha512-qn/HeLP5KGUJXVub3fyGe69/rWaLX4jzwm6V/1pNxJDbdF+MBdgn18hP6F+VmhfdNmwK0lue3J/1HQ1UTMuQeQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/programs@7.1.0': + resolution: {integrity: sha512-SiHIxX4lbHD36tOFNWyE9T984+yq9X+EOhxg3P2LKDg7nZep9F6L7Qhgw4R+aXF/Zqpy2q8XzO7NYLeT6piQ3g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/promises@6.10.0': + resolution: {integrity: sha512-oJSIn+VBBMWDo8oqw7RV3tI6Jih+Ieup6FcQLYLDUriaeo7+8l1Zdezl8zh7SIfeU4lOfAbRg6mR0huaS/Lltg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/promises@7.1.0': + resolution: {integrity: sha512-4I0tTa0Peh9U6cEJUR3Y0VyQneFGA2C8dL+sw00Dtfr/4hVGr03wmjHUq6CcCiH6e7WqNuznNKsqahe3BgrOMg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-api@6.10.0': + resolution: {integrity: sha512-RjPIVsAb/85P1ptoO3WpC0x7QG6gG/e4q/3lo6gbSznUZOcoM+8sSBnCX7BwP1ZkCDS6NK/ClXLnhhhYZx+OGg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-api@7.1.0': + resolution: {integrity: sha512-mluuAalyk5mfdi2lnPLDCPj6RElgZ0DCaNZmQZhnVM0SabvWxpBIzvTYqmy56Z/b9yiycfkVG3h6ISMZMddNuA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-parsed-types@6.10.0': + resolution: {integrity: sha512-5275mvSV1mxhwvrMVa+K7BU/nAetpHfcb+8Ql9rtA8RRf6DyiimFQFZUukE4Ez6XJihEpCHNy98yhkgai9wytQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-parsed-types@7.1.0': + resolution: {integrity: sha512-WVHfz/VmqZpPbpyTgqz6W4Yk1rKa7tfjSqa77KbWi+yXDzZ+Oha+bAscXxY/yg/w6auu7/JY5+t7Qd0qIjrGmQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-spec-types@6.10.0': + resolution: {integrity: sha512-NDZrKyZrJk4HaMFhTE/lAiMB824cWAodKqDHyKi0UteHU9pyRmil3BN1jt7e+j08mwMWwfklSgyrTaq52g6DIQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-spec-types@7.1.0': + resolution: {integrity: sha512-nEKJARQq8x9YQB/TBptw99bNU9KsmsObu51VleXwTi+PCowHbU7yaNad1lxg81iiX9Z4Lwvvo4c5UdVA4xkYFQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-spec@6.10.0': + resolution: {integrity: sha512-yQdbWw5mZEWrwsunHR9NHkuhMXIB9sPOObwm18D53v5tAJnxTB0IcHvO647XqFDLTK/yQ4AdDtlYD1vsY07AMQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-spec@7.1.0': + resolution: {integrity: sha512-vmFN/HNK0bUV+sDPqs7+NV/orY23PByWN82J1Q4PFZKCOCnyFO/A06pd/MCVuPjmcaJ62xFhTcORrit6dTQL3A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions-api@6.10.0': + resolution: {integrity: sha512-CRPQoTtT1cOwOQUsqS7jgo7wYdAj7jB5ab/UmMPWVpecf2FNMhWhgvxP2s82M7VkDGTGl13qaQ0WySmi7Egrlg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions-api@7.1.0': + resolution: {integrity: sha512-lzi8sPWuMyT89/L1ebY+MTzOma/6vsRdFTFcY5pe4pO4Sfi59j4p+HeYUu/NS0E6+/7Ng3BHFeTtuKD6QkhPDg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions-channel-websocket@6.10.0': + resolution: {integrity: sha512-KkqP1186HELPlJftA88SNAT2znR8knCVzsUipXVzY4zfW8sN3LOa0ePMzh9VZ/V+J+raTt55laR87ovAO0n+zw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions-channel-websocket@7.1.0': + resolution: {integrity: sha512-eW0JCgwSM7YV1YKkZN4rtfIGhh5WSJkCf2+JV1wscF6Zn4hK/9kr8MJ0Y0LWtoDMIuX0W3RCJnYG4T/Pcm1v6w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions-spec@6.10.0': + resolution: {integrity: sha512-nWMwGaG4ulzeX2sskY5TywXF3cwEd8FDmUpLe2JBWxE8XDAOGOKcsYPYFcBgb8ee9KqfPT2PTNdcz9jOhJf34w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions-spec@7.1.0': + resolution: {integrity: sha512-f+s6qIzUHxUTyoZoOvz2uw8Y6tYyUefLxxJtavMZEDXEjsAQ0Zv+yhmPZ5tQCo1JyHGS6EKvaw9AjxVC68NHDA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions@6.10.0': + resolution: {integrity: sha512-6mfuHp/K7unFKCOTCCBC9ziEGnxe2tyJ74EbR51QUnBeCUdYD7Hhdpxic1WRSJ3UeNW/mG4OzFM6z8Wi64Eh9Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-subscriptions@7.1.0': + resolution: {integrity: sha512-Vjs6d1AagH9r52smhX9zxSwprPKvqsWw8XFmvtGbUNI5lxtX1W4TIukscpXiau7dqe6zH6q6cfs9UtuOgY5sXA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-transformers@6.10.0': + resolution: {integrity: sha512-2nFUrVTiE720pJOY4XKx3HuYmishw0of/4oScu76YGm6O8wsmvFvPNAkrEinmieWXQkfpBfRvLZmpl8PaAy+ug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-transformers@7.1.0': + resolution: {integrity: sha512-3sSO13m25IkkS1mXnWFZYwgSOSturEGFQMIs37vdqgiJFAYJjmossOozE+fqOY0CI1oebyURhm5gM86ATuHDYw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-transport-http@6.10.0': + resolution: {integrity: sha512-JrdNuYi0nBbD3X8JUtgX1dQJwIwz/WJvmigDdELysXfGB2bTJpfjqGDLhCLOz2sRl66FASIEqgG/LVa2C9VXcA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-transport-http@7.1.0': + resolution: {integrity: sha512-9zT58Ahfhd/sdYNMKvVOmPLpIMsdrZOrJlnuK0nmB+D8KWbqswDUV46H2HGxRFjvGgKep/CtOSx4RM+kt14ezQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-types@6.10.0': + resolution: {integrity: sha512-zaSecTfCPvz/vcoAmKD6XoRstGHTr1EKJBD8T9UcpEFFB6CtF6DxerDB+wrzkamuT6msmnR2DWXMrYOGDAsgIg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc-types@7.1.0': + resolution: {integrity: sha512-pZO8+EroeRv7kb/d42qQeKHvUmm5tBvH0tXe8Kl2QkqG9+BCZ8NXXd+K7GbYWfVz3XtYmV3W/1B67s1DnzRldQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc@6.10.0': + resolution: {integrity: sha512-EwxsqoD+NXV+m+iobnWNtATD93gTgaNsOiQOzYB1/2e+8S6fl6obdNPB55yfXgtl4jt6GV6/ae4xuPhLv76vvg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/rpc@7.1.0': + resolution: {integrity: sha512-K9PvA39IQ+Z5/GYuDv4xXDPwk1KAPegnMu97b999yH09lBfsWpkHTGCCmNNy7bJAD346IQ/90/KgIbB/YnMEkw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/signers@6.10.0': + resolution: {integrity: sha512-+vtCc+mT1FpGxrA5oL2aaMxSHiMJ2hH5PcDIfjo2XJkHz2klZiCZyT5F9+zpltc9vdi1QTElQq59Sfplmtd33A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/signers@7.1.0': + resolution: {integrity: sha512-sGGEOhPQLn+M9Y5QF3BgzAh9ECoq+XxIOUhyEpCSoUB725oMerir7lgsuyHvSkANhnoGnVxMhy/3b9wzVIazig==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/subscribable@6.10.0': + resolution: {integrity: sha512-VsR6XMwkiDBkZJUcoGkEOhf397pOV75gKCL9Bx8bpi2T3Bbs0CxUpMn4yaUgAnRba3eXmjbXMNCXjttfa6sKbw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/subscribable@7.1.0': + resolution: {integrity: sha512-8YnZV34WRN/AHP1B2XUlLIkINI9AYGcv1lqc2pFswS4VEL0c4iXyCfCXg9D1FM/obEhlU73h+ZJK4deg8yasgA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/sysvars@6.10.0': + resolution: {integrity: sha512-cG13p1+onxz+20iWjwWQr1Z1jQwPm0fnjoW75fqZq7p4rVCie3L2sXvaJsYPjWKrUvpOzOIEHnqZGkG05rCpjg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/sysvars@7.1.0': + resolution: {integrity: sha512-8UZsIsHS0JcYTy41QK9eewWj34mSkahsgD5TQPk/M69W34ElQOLKLkooj4iwXdnV2tMlNniKMIDoIQUhGCfhZw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transaction-confirmation@6.10.0': + resolution: {integrity: sha512-ULvtg65qfenh4T/GYcIlKSUv5EqDcng9UN0dxbHU4kuZdR2e0B8HN2xDC4WhcFQVeFJSbTZmaYFkeTY/Y4gfGQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transaction-confirmation@7.1.0': + resolution: {integrity: sha512-IZd2eEvhIdIaIkZAd6ugeTLB1f8pB5iwu+NmSk2vH0FUGVf3wJui8NzZyj/8+5a6Ps2WUa79JIIizVdvIOzV8A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transaction-introspection@7.1.0': + resolution: {integrity: sha512-AKev/afwQpkTjjNPUsYrZ7lwI76wNiZGy5T5m9FBhVrncg8evMjUHhVrnTvLTLkqMGuVgteR2BH9e2S+igwxPg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transaction-messages@6.10.0': + resolution: {integrity: sha512-s7v8G3BTxGlKYIj3eWCG0g1296v+1LBt16mVnlRH5FuyaJ5AdhlhtRho5HUDpdwE8EXun+y1c48V6uhcZ8wdbQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transaction-messages@7.1.0': + resolution: {integrity: sha512-5JKj7mCppHBzJQF67n5YVaPR3nLNe5+sbgJcSbD2woyR7pdUhjNYyzG2HFeWDghbROpQzy9Dy7Km9iTjw3ry5A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transactions@6.10.0': + resolution: {integrity: sha512-VADSqP9OTYmhrox4pcgDd4+RjVmednXSE0+8Y7SPK4PN1pK5Az2RJ0nSsy0xcTnaOr8mF/crwFktqPrRQwSbQA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transactions@7.1.0': + resolution: {integrity: sha512-J/31jUwrbmJkk4vHnyenbF8iz2dHnhTW0HEzOp86YzVHbm171g5ujL1mmOP4nh8r/UA6xH4QbEJ4kTrID6cN5w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@solana/wallet-standard-chains@1.1.1': + resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} + engines: {node: '>=16'} + + '@solana/wallet-standard-features@1.3.0': + resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} + engines: {node: '>=16'} + + '@solana/wallet-standard-util@1.1.2': + resolution: {integrity: sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==} + engines: {node: '>=16'} + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + + '@solana/webcrypto-ed25519-polyfill@7.1.0': + resolution: {integrity: sha512-Gys9CqogG/P7PPt1hbmxKdX1e4YD78u44Uyoz5zZeUbdPoNoFXzVhhu7MUB35FKlKQinlrZTxvsxhkgSrnZrbw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@tailwindcss/node@4.1.14': + resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} + + '@tailwindcss/oxide-android-arm64@4.1.14': resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==} engines: {node: '>= 10'} cpu: [arm64] @@ -1485,9 +2328,6 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/bn.js@5.2.0': - resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1715,13 +2555,13 @@ packages: cpu: [x64] os: [win32] - '@wallet-standard/app@1.1.0': - resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} - engines: {node: '>=16'} + '@wallet-standard/app@1.1.1': + resolution: {integrity: sha512-WDGwoByhP5gwHH01r5EaLgQdLVkACPCdOMQhmhn8rsm10h/siSgTorShzBxrn0ExSPof+Lu+C3TfgqBrPa1xoQ==} + engines: {node: '>=22'} - '@wallet-standard/base@1.1.0': - resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} - engines: {node: '>=16'} + '@wallet-standard/base@1.1.1': + resolution: {integrity: sha512-gggIHTtxicF9XFMQ12DkfS6NAG92Ak795JeSA7f2whAQ6Y3AkMWWuCMxSZXG2NIPN42kEaZSNVjqMsJRaJRxMQ==} + engines: {node: '>=22'} '@wallet-standard/core@1.1.1': resolution: {integrity: sha512-5Xmjc6+Oe0hcPfVc5n8F77NVLwx1JVAoCVgQpLyv/43/bhtIif+Gx3WUrDlaSDoM8i2kA2xd6YoFbHCxs+e0zA==} @@ -1732,14 +2572,20 @@ packages: engines: {node: '>=16'} hasBin: true - '@wallet-standard/features@1.1.0': - resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} - engines: {node: '>=16'} + '@wallet-standard/features@1.1.1': + resolution: {integrity: sha512-aCWYmVeSCGViyEU5k7GMoW8zxE4Gs+C1s1Pp2XLesvSNlnZ4PMES9HUnTB3hl0b3RVj7C61yze3IWyrncqg4MA==} + engines: {node: '>=22'} '@wallet-standard/wallet@1.1.0': resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} engines: {node: '>=16'} + '@wallet-ui/core@4.2.1': + resolution: {integrity: sha512-4CM6CfH2vB7uodVyY1ZsY2bI+H2wXsJehL/lp+F4OrKbRvDX//FKJDKYXw9EUrVGRyXHndfxshnuDwoAE9P9ww==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@solana/kit': ^6.1.0 || ^7.0.0 + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1905,9 +2751,6 @@ packages: base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} - base-x@4.0.1: - resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1915,16 +2758,6 @@ packages: resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} hasBin: true - bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bn.js@5.2.2: resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} @@ -1952,19 +2785,12 @@ packages: bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer-layout@1.2.2: - resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} - engines: {node: '>=4.5'} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -2055,6 +2881,10 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + codama@1.10.1: + resolution: {integrity: sha512-GWbRUN+cbgfNrBNzWkpi0z9JcgQxwkkQLW3L+1xCvJQilHmOIC/Si3Wxv5+AiXUad1jSwkacWfM/utpTMtPS5w==} + hasBin: true + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -2070,10 +2900,14 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} + commander@15.0.0: + resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} + engines: {node: '>=22.12.0'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -2087,9 +2921,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cross-fetch@3.2.0: - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2407,9 +3238,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -2467,9 +3295,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2906,9 +3731,6 @@ packages: react: optional: true - js-base64@3.7.8: - resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2937,6 +3759,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} + engines: {node: '>= 0.4'} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -2949,6 +3775,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -2956,6 +3785,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -3042,6 +3875,50 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} + litesvm-darwin-arm64@1.3.0: + resolution: {integrity: sha512-fj6cV/ofjMXdl5CwjyyLTQnZObfVH5HYDScQ6O44iRqxASmgEyEh4sC8a7M0YZ1rcli9nu2cWl5ARGura89I7Q==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + litesvm-darwin-x64@1.3.0: + resolution: {integrity: sha512-ZYEddnc+tAn8sVYpzvww0oHFiekbCSv+0OZiA6eUDtcSx9uzeRDmPPQ9eI6vgyews2LefBDSENmUb70GHY6Cqg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + litesvm-linux-arm64-gnu@1.3.0: + resolution: {integrity: sha512-kmmKeef96pJI4AJGCvjzMCW6QHuzFrMF1i6dE6OcrtWHaz0Ag+TFaKOU35H1bjH/fDBwoJUV9UbaIbdWht81tA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + litesvm-linux-arm64-musl@1.3.0: + resolution: {integrity: sha512-FO9p6rx+/3h7R3CU7lkOebL+jy8UEDngSrENHu7pj9EOr78QVyE3Fm0O+WMnwXpMoCSgW0XLhu1cI9NHAbzCTA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + litesvm-linux-x64-gnu@1.3.0: + resolution: {integrity: sha512-yXC8ZAdIei9JQ2xw5/BocOTu/7EqZuFPyhgENQ1mYDhjNpoyUbIuGCWnqtria14mDda0aV9yVev8plGUrUpjUw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + litesvm-linux-x64-musl@1.3.0: + resolution: {integrity: sha512-oedromp1gTjShXmKmxZ1FYtnfM824vRcrPSPvGM0CrqJqKK61m1+tFwNRAVsDlpmWKvO/zsz90ctbgAUo/3TXg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + litesvm@1.3.0: + resolution: {integrity: sha512-tMu9sBIqSbF1gQluXEUtGmXPfZlMc10tOoBVeDokgK77nl/CcuC506sEoFKM5Rq58Dkb070lBMVBLc43TbMUzQ==} + engines: {node: '>= 20'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3216,6 +4093,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanostores@1.2.0: + resolution: {integrity: sha512-F0wCzbsH80G7XXo0Jd9/AVQC7ouWY6idUCTnMwW5t/Rv9W8qmO6endavDwg7TNp5GbugwSukFMVZqzPSrSMndg==} + engines: {node: ^20.0.0 || >=22.0.0} + napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -3363,9 +4244,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3433,6 +4311,11 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.9.6: + resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} + engines: {node: '>=14'} + hasBin: true + pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3440,6 +4323,10 @@ packages: promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -3447,6 +4334,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qr@0.6.0: + resolution: {integrity: sha512-P23VoX7SipHALdiIYG+D+LT/6n22dNKwV92FAb3d+Nlki/5WisSsfLt0UDFz2XEBtuwrECTznvu+chKKFCSYhA==} + engines: {node: '>= 20.19.0'} + qrcode@1.5.4: resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} engines: {node: '>=10.13.0'} @@ -3687,6 +4578,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3811,9 +4705,6 @@ packages: babel-plugin-macros: optional: true - superstruct@0.15.5: - resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} - superstruct@2.0.2: resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} engines: {node: '>=14.0.0'} @@ -3874,9 +4765,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -3940,6 +4828,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@8.10.0: + resolution: {integrity: sha512-ibvdovq3nCFs8Msrd95BW+zUOq+aOVbT+wpHUoPWhztbHEoPc6oof51iFDB6Es8lTKvNvVW9jNSAB8dwrKTMGg==} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -3986,6 +4877,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true vlq@1.0.1: @@ -4076,8 +4968,8 @@ packages: utf-8-validate: optional: true - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4131,39 +5023,13 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + snapshots: '@alloc/quick-lru@5.2.0': {} - '@anchor-lang/borsh@1.0.0-rc.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))': - dependencies: - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - bn.js: 5.2.2 - buffer-layout: 1.2.2 - - '@anchor-lang/core@1.0.0-rc.5(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': - dependencies: - '@anchor-lang/borsh': 1.0.0-rc.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@anchor-lang/errors': 1.0.0-rc.5 - '@noble/hashes': 1.8.0 - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - bn.js: 5.2.2 - bs58: 4.0.1 - buffer-layout: 1.2.2 - camelcase: 6.3.0 - cross-fetch: 3.2.0 - eventemitter3: 4.0.7 - pako: 2.1.0 - superstruct: 0.15.5 - toml: 3.0.0 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - '@anchor-lang/errors@1.0.0-rc.5': {} - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -4338,1014 +5204,2017 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@codama/cli@1.6.1': + dependencies: + '@codama/nodes': 1.10.1 + '@codama/visitors': 1.10.1 + '@codama/visitors-core': 1.10.1 + commander: 15.0.0 + picocolors: 1.1.1 + prompts: 2.4.2 + + '@codama/errors@1.10.1': + dependencies: + '@codama/node-types': 1.10.1 + commander: 15.0.0 + picocolors: 1.1.1 + + '@codama/fragments@0.1.4': + dependencies: + '@codama/errors': 1.10.1 + + '@codama/node-types@1.10.1': {} + + '@codama/nodes-from-anchor@1.5.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@codama/errors': 1.10.1 + '@codama/nodes': 1.10.1 + '@codama/visitors': 1.10.1 + '@noble/hashes': 2.3.0 + '@solana/codecs': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@codama/nodes@1.10.1': + dependencies: + '@codama/errors': 1.10.1 + '@codama/node-types': 1.10.1 + + '@codama/renderers-core@1.3.12': + dependencies: + '@codama/errors': 1.10.1 + '@codama/fragments': 0.1.4 + '@codama/nodes': 1.10.1 + '@codama/visitors-core': 1.10.1 + + '@codama/renderers-js@2.3.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@codama/errors': 1.10.1 + '@codama/nodes': 1.10.1 + '@codama/renderers-core': 1.3.12 + '@codama/visitors-core': 1.10.1 + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + prettier: 3.9.6 + semver: 7.7.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@codama/validators@1.10.1': + dependencies: + '@codama/errors': 1.10.1 + '@codama/nodes': 1.10.1 + '@codama/visitors-core': 1.10.1 + + '@codama/visitors-core@1.10.1': + dependencies: + '@codama/errors': 1.10.1 + '@codama/nodes': 1.10.1 + json-stable-stringify: 1.3.0 + + '@codama/visitors@1.10.1': + dependencies: + '@codama/errors': 1.10.1 + '@codama/nodes': 1.10.1 + '@codama/visitors-core': 1.10.1 + + '@emnapi/core@1.5.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': + dependencies: + eslint: 9.37.0(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3(supports-color@8.1.1) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.37.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@floating-ui/utils': 0.2.10 - '@emnapi/core@1.5.0': + '@floating-ui/dom@1.7.4': dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 - '@emnapi/runtime@1.5.0': + '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - tslib: 2.8.1 - optional: true + '@floating-ui/dom': 1.7.4 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) - '@emnapi/wasi-threads@1.1.0': + '@floating-ui/utils@0.2.10': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': dependencies: - tslib: 2.8.1 - optional: true + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 - '@esbuild/aix-ppc64@0.28.1': - optional: true + '@humanwhocodes/module-importer@1.0.1': {} - '@esbuild/android-arm64@0.28.1': - optional: true + '@humanwhocodes/retry@0.4.3': {} - '@esbuild/android-arm@0.28.1': + '@img/colour@1.0.0': optional: true - '@esbuild/android-x64@0.28.1': + '@img/sharp-darwin-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.3 optional: true - '@esbuild/darwin-arm64@0.28.1': + '@img/sharp-darwin-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.3 optional: true - '@esbuild/darwin-x64@0.28.1': + '@img/sharp-libvips-darwin-arm64@1.2.3': optional: true - '@esbuild/freebsd-arm64@0.28.1': + '@img/sharp-libvips-darwin-x64@1.2.3': optional: true - '@esbuild/freebsd-x64@0.28.1': + '@img/sharp-libvips-linux-arm64@1.2.3': optional: true - '@esbuild/linux-arm64@0.28.1': + '@img/sharp-libvips-linux-arm@1.2.3': optional: true - '@esbuild/linux-arm@0.28.1': + '@img/sharp-libvips-linux-ppc64@1.2.3': optional: true - '@esbuild/linux-ia32@0.28.1': + '@img/sharp-libvips-linux-s390x@1.2.3': optional: true - '@esbuild/linux-loong64@0.28.1': + '@img/sharp-libvips-linux-x64@1.2.3': optional: true - '@esbuild/linux-mips64el@0.28.1': + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': optional: true - '@esbuild/linux-ppc64@0.28.1': + '@img/sharp-libvips-linuxmusl-x64@1.2.3': optional: true - '@esbuild/linux-riscv64@0.28.1': + '@img/sharp-linux-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.3 optional: true - '@esbuild/linux-s390x@0.28.1': + '@img/sharp-linux-arm@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.3 optional: true - '@esbuild/linux-x64@0.28.1': + '@img/sharp-linux-ppc64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.3 optional: true - '@esbuild/netbsd-arm64@0.28.1': + '@img/sharp-linux-s390x@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.3 optional: true - '@esbuild/netbsd-x64@0.28.1': + '@img/sharp-linux-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.3 optional: true - '@esbuild/openbsd-arm64@0.28.1': + '@img/sharp-linuxmusl-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 optional: true - '@esbuild/openbsd-x64@0.28.1': + '@img/sharp-linuxmusl-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 optional: true - '@esbuild/openharmony-arm64@0.28.1': + '@img/sharp-wasm32@0.34.4': + dependencies: + '@emnapi/runtime': 1.5.0 optional: true - '@esbuild/sunos-x64@0.28.1': + '@img/sharp-win32-arm64@0.34.4': optional: true - '@esbuild/win32-arm64@0.28.1': + '@img/sharp-win32-ia32@0.34.4': optional: true - '@esbuild/win32-ia32@0.28.1': + '@img/sharp-win32-x64@0.34.4': optional: true - '@esbuild/win32-x64@0.28.1': - optional: true + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': + '@isaacs/fs-minipass@4.0.1': dependencies: - eslint: 9.37.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 + minipass: 7.1.2 - '@eslint-community/regexpp@4.12.1': {} + '@isaacs/ttlcache@1.4.1': {} - '@eslint/config-array@0.21.0': + '@istanbuljs/load-nyc-config@1.1.0': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 - '@eslint/config-helpers@0.4.0': + '@istanbuljs/schema@0.1.3': {} + + '@jest/create-cache-key-function@29.7.0': dependencies: - '@eslint/core': 0.16.0 + '@jest/types': 29.6.3 - '@eslint/core@0.16.0': + '@jest/environment@29.7.0': dependencies: - '@types/json-schema': 7.0.15 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.18.10 + jest-mock: 29.7.0 - '@eslint/eslintrc@3.3.1': + '@jest/fake-timers@29.7.0': dependencies: - ajv: 6.12.6 - debug: 4.4.3(supports-color@8.1.1) - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.18.10 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.28.4 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - '@eslint/js@9.37.0': {} + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.18.10 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nanostores/persistent@1.1.0(nanostores@1.2.0)': + dependencies: + nanostores: 1.2.0 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@next/env@15.3.5': {} + + '@next/eslint-plugin-next@15.3.1': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.3.5': + optional: true + + '@next/swc-darwin-x64@15.3.5': + optional: true + + '@next/swc-linux-arm64-gnu@15.3.5': + optional: true + + '@next/swc-linux-arm64-musl@15.3.5': + optional: true + + '@next/swc-linux-x64-gnu@15.3.5': + optional: true + + '@next/swc-linux-x64-musl@15.3.5': + optional: true + + '@next/swc-win32-arm64-msvc@15.3.5': + optional: true + + '@next/swc-win32-x64-msvc@15.3.5': + optional: true + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/ed25519@3.1.0': {} - '@eslint/object-schema@2.1.6': {} + '@noble/hashes@1.8.0': {} - '@eslint/plugin-kit@0.4.0': - dependencies: - '@eslint/core': 0.16.0 - levn: 0.4.1 + '@noble/hashes@2.3.0': {} - '@floating-ui/core@1.7.3': + '@nodelib/fs.scandir@2.1.5': dependencies: - '@floating-ui/utils': 0.2.10 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@floating-ui/dom@1.7.4': + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@nolyfill/is-core-module@1.0.39': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@floating-ui/dom': 1.7.4 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@floating-ui/utils@0.2.10': {} + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@humanfs/core@0.19.1': {} + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.2.0)': + dependencies: + react: 19.2.0 + optionalDependencies: + '@types/react': 19.2.2 - '@humanfs/node@0.16.7': + '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.2.0)': dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 + react: 19.2.0 + optionalDependencies: + '@types/react': 19.2.2 - '@humanwhocodes/module-importer@1.0.1': {} + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) + aria-hidden: 1.2.6 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@humanwhocodes/retry@0.4.3': {} + '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + react: 19.2.0 + optionalDependencies: + '@types/react': 19.2.2 - '@img/colour@1.0.0': - optional: true + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-darwin-arm64@0.34.4': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 - optional: true + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-darwin-x64@0.34.4': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.2.0)': + dependencies: + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-libvips-darwin-arm64@1.2.3': - optional: true + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-darwin-x64@1.2.3': - optional: true + '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + '@types/react': 19.2.2 - '@img/sharp-libvips-linux-arm64@1.2.3': - optional: true + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-linux-arm@1.2.3': - optional: true + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) + aria-hidden: 1.2.6 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-linux-ppc64@1.2.3': - optional: true + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/rect': 1.1.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-linux-s390x@1.2.3': - optional: true + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-linux-x64@1.2.3': - optional: true + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - optional: true + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - optional: true + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@img/sharp-linux-arm64@0.34.4': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-linux-arm@0.34.4': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-linux-ppc64@0.34.4': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-linux-s390x@0.34.4': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-linux-x64@0.34.4': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-linuxmusl-arm64@0.34.4': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-linuxmusl-x64@0.34.4': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.0 optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - optional: true + '@types/react': 19.2.2 - '@img/sharp-wasm32@0.34.4': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.2.0)': dependencies: - '@emnapi/runtime': 1.5.0 - optional: true + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + '@types/react': 19.2.2 - '@img/sharp-win32-arm64@0.34.4': - optional: true + '@radix-ui/rect@1.1.1': {} - '@img/sharp-win32-ia32@0.34.4': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))': + dependencies: + merge-options: 3.0.4 + react-native: 0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10) optional: true - '@img/sharp-win32-x64@0.34.4': - optional: true + '@react-native/assets-registry@0.82.0': {} - '@isaacs/cliui@8.0.2': + '@react-native/codegen@0.82.0(@babel/core@7.28.4)': dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.2.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + glob: 7.2.3 + hermes-parser: 0.32.0 + invariant: 2.2.4 + nullthrows: 1.1.1 + yargs: 17.7.2 - '@isaacs/fs-minipass@4.0.1': + '@react-native/community-cli-plugin@0.82.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - minipass: 7.1.2 + '@react-native/dev-middleware': 0.82.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + debug: 4.4.3(supports-color@8.1.1) + invariant: 2.2.4 + metro: 0.83.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + metro-config: 0.83.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + metro-core: 0.83.3 + semver: 7.7.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@isaacs/ttlcache@1.4.1': {} + '@react-native/debugger-frontend@0.82.0': {} - '@istanbuljs/load-nyc-config@1.1.0': + '@react-native/debugger-shell@0.82.0': dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} + cross-spawn: 7.0.6 + fb-dotslash: 0.5.8 - '@jest/create-cache-key-function@29.7.0': + '@react-native/dev-middleware@0.82.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@jest/types': 29.6.3 + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.82.0 + '@react-native/debugger-shell': 0.82.0 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.2.0 + connect: 3.7.0 + debug: 4.4.3(supports-color@8.1.1) + invariant: 2.2.4 + nullthrows: 1.1.1 + open: 7.4.2 + serve-static: 1.16.2 + ws: 6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@jest/environment@29.7.0': + '@react-native/gradle-plugin@0.82.0': {} + + '@react-native/js-polyfills@0.82.0': {} + + '@react-native/normalize-colors@0.82.0': {} + + '@react-native/virtualized-lists@0.82.0(@types/react@19.2.2)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.18.10 - jest-mock: 29.7.0 + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 19.2.0 + react-native: 0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10) + optionalDependencies: + '@types/react': 19.2.2 - '@jest/fake-timers@29.7.0': + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.14.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.18.10 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 + type-detect: 4.0.8 - '@jest/schemas@29.6.3': + '@sinonjs/fake-timers@10.3.0': dependencies: - '@sinclair/typebox': 0.27.8 + '@sinonjs/commons': 3.0.1 - '@jest/transform@29.7.0': + '@solana-mobile/mobile-wallet-adapter-protocol@2.2.9(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/core': 7.28.4 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 + '@solana/kit': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/wallet-standard-features': 1.3.0 + '@solana/wallet-standard-util': 1.1.2 + '@wallet-standard/core': 1.1.1 + react-native: 0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - - supports-color + - bufferutil + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate - '@jest/types@29.6.3': + '@solana-mobile/wallet-standard-mobile@0.5.3(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.18.10 - '@types/yargs': 17.0.33 - chalk: 4.1.2 + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.9(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + '@wallet-standard/base': 1.1.1 + '@wallet-standard/features': 1.1.1 + '@wallet-standard/wallet': 1.1.0 + qrcode: 1.5.4 + tslib: 2.8.1 + optionalDependencies: + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - react-native + - typescript + - utf-8-validate - '@jridgewell/gen-mapping@0.3.13': + '@solana-program/record@0.3.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@solana/kit': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@jridgewell/remapping@2.3.5': + '@solana-program/system@0.12.2(@solana/kit@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@solana/kit': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/source-map@0.3.11': + '@solana-program/system@0.13.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/sourcemap-codec@1.5.5': {} + '@solana/kit': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@jridgewell/trace-mapping@0.3.31': + '@solana-program/token-2022@0.15.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))(@solana/sysvars@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@noble/curves': 1.9.7 + '@solana-program/record': 0.3.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana-program/zk-elgamal-proof': 0.3.2(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana/kit': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/sysvars': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@napi-rs/wasm-runtime@0.2.12': + '@solana-program/token@0.14.0(@solana/kit@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.1 - optional: true + '@solana-program/system': 0.12.2(@solana/kit@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana/kit': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@next/env@15.3.5': {} - - '@next/eslint-plugin-next@15.3.1': + '@solana-program/zk-elgamal-proof@0.3.2(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))': dependencies: - fast-glob: 3.3.1 + '@solana-program/system': 0.13.0(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana/kit': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@next/swc-darwin-arm64@15.3.5': - optional: true + '@solana/accounts@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@next/swc-darwin-x64@15.3.5': - optional: true + '@solana/accounts@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@next/swc-linux-arm64-gnu@15.3.5': - optional: true + '@solana/addresses@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 6.10.0(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@next/swc-linux-arm64-musl@15.3.5': - optional: true + '@solana/addresses@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 7.1.0(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@next/swc-linux-x64-gnu@15.3.5': - optional: true + '@solana/assertions@6.10.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@next/swc-linux-x64-musl@15.3.5': - optional: true + '@solana/assertions@7.1.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@next/swc-win32-arm64-msvc@15.3.5': + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 optional: true - '@next/swc-win32-x64-msvc@15.3.5': + '@solana/codecs-core@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 optional: true - '@noble/curves@1.9.7': + '@solana/codecs-core@5.5.1(typescript@5.9.3)': dependencies: - '@noble/hashes': 1.8.0 + '@solana/errors': 5.5.1(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@noble/hashes@1.8.0': {} + '@solana/codecs-core@6.10.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@nodelib/fs.scandir@2.1.5': + '@solana/codecs-core@7.1.0(typescript@5.9.3)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@solana/errors': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@nodelib/fs.stat@2.0.5': {} + '@solana/codecs-data-structures@5.5.1(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 5.5.1(typescript@5.9.3) + '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@nodelib/fs.walk@1.2.8': + '@solana/codecs-data-structures@6.10.0(typescript@5.9.3)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@nolyfill/is-core-module@1.0.39': {} + '@solana/codecs-data-structures@7.1.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@pkgjs/parseargs@0.11.0': + '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 optional: true - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/codecs-numbers@5.5.1(typescript@5.9.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/codecs-numbers@6.10.0(typescript@5.9.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.2.0)': + '@solana/codecs-numbers@7.1.0(typescript@5.9.3)': dependencies: - react: 19.2.0 + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 - '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.2.0)': + '@solana/codecs-strings@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - react: 19.2.0 + '@solana/codecs-core': 5.5.1(typescript@5.9.3) + '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/codecs-strings@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - aria-hidden: 1.2.6 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 - '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@solana/codecs-strings@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - react: 19.2.0 + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/codecs@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 5.5.1(typescript@5.9.3) + '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) + '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/codecs@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-data-structures': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/fixed-points': 6.10.0(typescript@5.9.3) + '@solana/options': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.2.0)': + '@solana/codecs@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-data-structures': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/fixed-points': 7.1.0(typescript@5.9.3) + '@solana/options': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/connector@0.2.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana-mobile/wallet-standard-mobile': 0.5.3(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/kit': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/signers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/webcrypto-ed25519-polyfill': 7.1.0(typescript@5.9.3) + '@wallet-standard/app': 1.1.1 + '@wallet-standard/base': 1.1.1 + '@wallet-standard/features': 1.1.1 + '@wallet-ui/core': 4.2.1(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + zod: 4.4.3 + optionalDependencies: + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) react: 19.2.0 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - react-native + - typescript + - utf-8-validate + + '@solana/errors@2.3.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 + typescript: 5.9.3 + optional: true + + '@solana/errors@5.5.1(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/errors@6.10.0(typescript@5.9.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + chalk: 5.6.2 + commander: 15.0.0 optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@solana/errors@7.1.0(typescript@5.9.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + chalk: 5.6.2 + commander: 15.0.0 optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/fast-stable-stringify@6.10.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 + + '@solana/fast-stable-stringify@7.1.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 + + '@solana/fixed-points@6.10.0(typescript@5.9.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/fixed-points@7.1.0(typescript@5.9.3)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - aria-hidden: 1.2.6 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/functional@6.10.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 + + '@solana/functional@7.1.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 + + '@solana/instruction-plans@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/rect': 1.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/instructions': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 6.10.0(typescript@5.9.3) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/instruction-plans@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/instructions@6.10.0(typescript@5.9.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/instructions@7.1.0(typescript@5.9.3)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@solana/keys@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/assertions': 6.10.0(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + '@solana/promises': 6.10.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.2.0)': + '@solana/keys@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + '@solana/assertions': 7.1.0(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 + '@solana/kit@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/accounts': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/instruction-plans': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instructions': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/offchain-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/plugin-core': 6.10.0(typescript@5.9.3) + '@solana/plugin-interfaces': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/program-client-core': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/programs': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-api': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-subscriptions': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 6.10.0(typescript@5.9.3) + '@solana/sysvars': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + '@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/accounts': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/instruction-plans': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/offchain-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/plugin-core': 7.1.0(typescript@5.9.3) + '@solana/plugin-interfaces': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/program-client-core': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/programs': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) + '@solana/rpc': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-api': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-subscriptions': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 7.1.0(typescript@5.9.3) + '@solana/sysvars': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/transaction-introspection': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + '@solana/nominal-types@6.10.0(typescript@5.9.3)': optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + '@solana/nominal-types@7.1.0(typescript@5.9.3)': optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@solana/offchain-messages@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - react: 19.2.0 + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-data-structures': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@solana/offchain-messages@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.2.0 + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-data-structures': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.2.0)': + '@solana/options@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 + '@solana/codecs-core': 5.5.1(typescript@5.9.3) + '@solana/codecs-data-structures': 5.5.1(typescript@5.9.3) + '@solana/codecs-numbers': 5.5.1(typescript@5.9.3) + '@solana/codecs-strings': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 5.5.1(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@radix-ui/rect@1.1.1': {} + '@solana/options@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-data-structures': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@react-native-async-storage/async-storage@1.24.0(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))': + '@solana/options@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - merge-options: 3.0.4 - react-native: 0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10) - optional: true + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-data-structures': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@react-native/assets-registry@0.82.0': {} + '@solana/plugin-core@6.10.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 - '@react-native/codegen@0.82.0(@babel/core@7.28.4)': + '@solana/plugin-core@7.1.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 + + '@solana/plugin-interfaces@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 - glob: 7.2.3 - hermes-parser: 0.32.0 - invariant: 2.2.4 - nullthrows: 1.1.1 - yargs: 17.7.2 + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instruction-plans': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@react-native/community-cli-plugin@0.82.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@solana/plugin-interfaces@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@react-native/dev-middleware': 0.82.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - debug: 4.4.3(supports-color@8.1.1) - invariant: 2.2.4 - metro: 0.83.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - metro-config: 0.83.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - metro-core: 0.83.3 - semver: 7.7.3 + '@solana/accounts': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instruction-plans': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + - fastestsmallesttextencoderdecoder - '@react-native/debugger-frontend@0.82.0': {} + '@solana/program-client-core@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/accounts': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/instruction-plans': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instructions': 6.10.0(typescript@5.9.3) + '@solana/plugin-interfaces': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-api': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@react-native/debugger-shell@0.82.0': + '@solana/program-client-core@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/accounts': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/instruction-plans': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/plugin-interfaces': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-api': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/programs@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - cross-spawn: 7.0.6 - fb-dotslash: 0.5.8 + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@react-native/dev-middleware@0.82.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@solana/programs@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.82.0 - '@react-native/debugger-shell': 0.82.0 - chrome-launcher: 0.15.2 - chromium-edge-launcher: 0.2.0 - connect: 3.7.0 - debug: 4.4.3(supports-color@8.1.1) - invariant: 2.2.4 - nullthrows: 1.1.1 - open: 7.4.2 - serve-static: 1.16.2 - ws: 6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + - fastestsmallesttextencoderdecoder - '@react-native/gradle-plugin@0.82.0': {} + '@solana/promises@6.10.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 - '@react-native/js-polyfills@0.82.0': {} + '@solana/promises@7.1.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 - '@react-native/normalize-colors@0.82.0': {} + '@solana/rpc-api@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-transformers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@react-native/virtualized-lists@0.82.0(@types/react@19.2.2)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 19.2.0 - react-native: 0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10) + '@solana/rpc-api@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-transformers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) optionalDependencies: - '@types/react': 19.2.2 + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@rtsao/scc@1.1.0': {} + '@solana/rpc-parsed-types@6.10.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 - '@rushstack/eslint-patch@1.14.0': {} + '@solana/rpc-parsed-types@7.1.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 - '@sinclair/typebox@0.27.8': {} + '@solana/rpc-spec-types@6.10.0(typescript@5.9.3)': + optionalDependencies: + typescript: 5.9.3 - '@sinonjs/commons@3.0.1': + '@solana/rpc-spec-types@7.1.0(typescript@5.9.3)': dependencies: - type-detect: 4.0.8 + '@solana/errors': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@sinonjs/fake-timers@10.3.0': + '@solana/rpc-spec@6.10.0(typescript@5.9.3)': dependencies: - '@sinonjs/commons': 3.0.1 + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + '@solana/subscribable': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': + '@solana/rpc-spec@7.1.0(typescript@5.9.3)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - bs58: 5.0.0 - js-base64: 3.7.8 + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + '@solana/subscribable': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@solana/rpc-subscriptions-api@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-transformers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - react - - react-native + - fastestsmallesttextencoderdecoder - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': + '@solana/rpc-subscriptions-api@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0) - '@solana/wallet-standard-util': 1.1.2 - '@wallet-standard/core': 1.1.1 - js-base64: 3.7.8 - react-native: 0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-transformers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react + - fastestsmallesttextencoderdecoder - '@solana-mobile/wallet-adapter-mobile@2.2.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': + '@solana/rpc-subscriptions-channel-websocket@6.10.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana-mobile/wallet-standard-mobile': 0.4.2(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - js-base64: 3.7.8 + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 6.10.0(typescript@5.9.3) + '@solana/subscribable': 6.10.0(typescript@5.9.3) + ws: 8.21.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@solana/rpc-subscriptions-channel-websocket@7.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 7.1.0(typescript@5.9.3) + '@solana/subscribable': 7.1.0(typescript@5.9.3) + ws: 8.21.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@solana/rpc-subscriptions-spec@6.10.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/promises': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + '@solana/subscribable': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@solana/rpc-subscriptions-spec@7.1.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + '@solana/subscribable': 7.1.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + '@solana/rpc-subscriptions@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/promises': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-subscriptions-api': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 6.10.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-transformers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 6.10.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate + + '@solana/rpc-subscriptions@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-subscriptions-api': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 7.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-transformers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 7.1.0(typescript@5.9.3) optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10)) + typescript: 5.9.3 transitivePeerDependencies: - - react - - react-native + - bufferutil + - fastestsmallesttextencoderdecoder + - utf-8-validate - '@solana-mobile/wallet-standard-mobile@0.4.2(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': + '@solana/rpc-transformers@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - bs58: 5.0.0 - js-base64: 3.7.8 - qrcode: 1.5.4 + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - react - - react-native + - fastestsmallesttextencoderdecoder - '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/rpc-transformers@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - bigint-buffer: 1.1.5 - bignumber.js: 9.3.1 + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate + - fastestsmallesttextencoderdecoder - '@solana/buffer-layout@4.0.1': + '@solana/rpc-transport-http@6.10.0(typescript@5.9.3)': dependencies: - buffer: 6.0.3 + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + undici-types: 8.10.0 + optionalDependencies: + typescript: 5.9.3 - '@solana/codecs-core@2.0.0-rc.1(typescript@5.9.3)': + '@solana/rpc-transport-http@7.1.0(typescript@5.9.3)': dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + undici-types: 8.10.0 + optionalDependencies: typescript: 5.9.3 - '@solana/codecs-core@2.3.0(typescript@5.9.3)': + '@solana/rpc-types@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/fixed-points': 6.10.0(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.9.3)': + '@solana/rpc-types@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/fixed-points': 7.1.0(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + '@solana/rpc@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/rpc-api': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 6.10.0(typescript@5.9.3) + '@solana/rpc-spec-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-transformers': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-transport-http': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/rpc-api': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 7.1.0(typescript@5.9.3) + '@solana/rpc-spec-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-transformers': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-transport-http': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) - fastestsmallesttextencoderdecoder: 1.0.22 + '@solana/signers@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/instructions': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + '@solana/offchain-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + '@solana/offchain-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/errors@2.0.0-rc.1(typescript@5.9.3)': + '@solana/subscribable@6.10.0(typescript@5.9.3)': dependencies: - chalk: 5.6.2 - commander: 12.1.0 + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/promises': 6.10.0(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 - '@solana/errors@2.3.0(typescript@5.9.3)': + '@solana/subscribable@7.1.0(typescript@5.9.3)': dependencies: - chalk: 5.6.2 - commander: 14.0.1 + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 - '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + '@solana/sysvars@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.9.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.9.3) + '@solana/accounts': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-data-structures': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + '@solana/sysvars@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/accounts': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-data-structures': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - - typescript - '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/transaction-confirmation@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 6.10.0(typescript@5.9.3) + '@solana/rpc': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: + - bufferutil - fastestsmallesttextencoderdecoder - - typescript + - utf-8-validate - '@solana/spl-token@0.4.13(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': - dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - buffer: 6.0.3 + '@solana/transaction-confirmation@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 7.1.0(typescript@5.9.3) + '@solana/rpc': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - bufferutil - - encoding - fastestsmallesttextencoderdecoder - - typescript - utf-8-validate - '@solana/wallet-adapter-base-ui@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': + '@solana/transaction-introspection@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - react: 19.2.0 + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - bs58 - - react-native + - fastestsmallesttextencoderdecoder - '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))': - dependencies: - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - eventemitter3: 5.0.1 + '@solana/transaction-messages@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-data-structures': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/instructions': 6.10.0(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/wallet-adapter-react-ui@0.9.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.2.0(react@19.2.0))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-base-ui': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@solana/transaction-messages@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-data-structures': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - bs58 - - react-native + - fastestsmallesttextencoderdecoder - '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': - dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.2.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.28.4)(@types/react@19.2.2)(bufferutil@4.0.9)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - react: 19.2.0 + '@solana/transactions@6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 6.10.0(typescript@5.9.3) + '@solana/codecs-data-structures': 6.10.0(typescript@5.9.3) + '@solana/codecs-numbers': 6.10.0(typescript@5.9.3) + '@solana/codecs-strings': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 6.10.0(typescript@5.9.3) + '@solana/functional': 6.10.0(typescript@5.9.3) + '@solana/instructions': 6.10.0(typescript@5.9.3) + '@solana/keys': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 6.10.0(typescript@5.9.3) + '@solana/rpc-types': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 6.10.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: - - bs58 - - react-native + - fastestsmallesttextencoderdecoder - '@solana/wallet-standard-chains@1.1.1': - dependencies: - '@wallet-standard/base': 1.1.0 + '@solana/transactions@7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 7.1.0(typescript@5.9.3) + '@solana/codecs-data-structures': 7.1.0(typescript@5.9.3) + '@solana/codecs-numbers': 7.1.0(typescript@5.9.3) + '@solana/codecs-strings': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 7.1.0(typescript@5.9.3) + '@solana/functional': 7.1.0(typescript@5.9.3) + '@solana/instructions': 7.1.0(typescript@5.9.3) + '@solana/keys': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 7.1.0(typescript@5.9.3) + '@solana/rpc-types': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 7.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/wallet-standard-core@1.1.2': + '@solana/wallet-standard-chains@1.1.1': dependencies: - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 + '@wallet-standard/base': 1.1.1 '@solana/wallet-standard-features@1.3.0': dependencies: - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 + '@wallet-standard/base': 1.1.1 + '@wallet-standard/features': 1.1.1 '@solana/wallet-standard-util@1.1.2': dependencies: @@ -5353,50 +7222,6 @@ snapshots: '@solana/wallet-standard-chains': 1.1.1 '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - bs58: 5.0.0 - - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - react: 19.2.0 - transitivePeerDependencies: - - '@solana/web3.js' - - bs58 - - '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0)': - dependencies: - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - - '@solana/wallet-standard@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0)': - dependencies: - '@solana/wallet-standard-core': 1.1.2 - '@solana/wallet-standard-wallet-adapter': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.0) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.28.4 @@ -5419,6 +7244,13 @@ snapshots: - encoding - typescript - utf-8-validate + optional: true + + '@solana/webcrypto-ed25519-polyfill@7.1.0(typescript@5.9.3)': + dependencies: + '@noble/ed25519': 3.1.0 + optionalDependencies: + typescript: 5.9.3 '@swc/counter@0.1.3': {} @@ -5429,6 +7261,7 @@ snapshots: '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 + optional: true '@tailwindcss/node@4.1.14': dependencies: @@ -5535,10 +7368,6 @@ snapshots: dependencies: '@babel/types': 7.28.4 - '@types/bn.js@5.2.0': - dependencies: - '@types/node': 22.18.10 - '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -5547,6 +7376,7 @@ snapshots: '@types/connect@3.4.38': dependencies: '@types/node': 22.18.10 + optional: true '@types/deep-eql@4.0.2': {} @@ -5572,7 +7402,8 @@ snapshots: '@types/mocha@10.0.10': {} - '@types/node@12.20.55': {} + '@types/node@12.20.55': + optional: true '@types/node@22.18.10': dependencies: @@ -5588,15 +7419,18 @@ snapshots: '@types/stack-utils@2.0.3': {} - '@types/uuid@8.3.4': {} + '@types/uuid@8.3.4': + optional: true '@types/ws@7.4.7': dependencies: '@types/node': 22.18.10 + optional: true '@types/ws@8.18.1': dependencies: '@types/node': 22.18.10 + optional: true '@types/yargs-parser@21.0.3': {} @@ -5756,18 +7590,18 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@wallet-standard/app@1.1.0': + '@wallet-standard/app@1.1.1': dependencies: - '@wallet-standard/base': 1.1.0 + '@wallet-standard/base': 1.1.1 - '@wallet-standard/base@1.1.0': {} + '@wallet-standard/base@1.1.1': {} '@wallet-standard/core@1.1.1': dependencies: - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 + '@wallet-standard/app': 1.1.1 + '@wallet-standard/base': 1.1.1 '@wallet-standard/errors': 0.1.1 - '@wallet-standard/features': 1.1.0 + '@wallet-standard/features': 1.1.1 '@wallet-standard/wallet': 1.1.0 '@wallet-standard/errors@0.1.1': @@ -5775,13 +7609,20 @@ snapshots: chalk: 5.6.2 commander: 13.1.0 - '@wallet-standard/features@1.1.0': + '@wallet-standard/features@1.1.1': dependencies: - '@wallet-standard/base': 1.1.0 + '@wallet-standard/base': 1.1.1 '@wallet-standard/wallet@1.1.0': dependencies: - '@wallet-standard/base': 1.1.0 + '@wallet-standard/base': 1.1.1 + + '@wallet-ui/core@4.2.1(@solana/kit@7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10))': + dependencies: + '@nanostores/persistent': 1.1.0(nanostores@1.2.0) + '@solana/kit': 7.1.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + nanostores: 1.2.0 + qr: 0.6.0 abort-controller@3.0.0: dependencies: @@ -5803,6 +7644,7 @@ snapshots: agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 + optional: true ajv@6.12.6: dependencies: @@ -5991,30 +7833,21 @@ snapshots: base-x@3.0.11: dependencies: safe-buffer: 5.2.1 - - base-x@4.0.1: {} + optional: true base64-js@1.5.1: {} baseline-browser-mapping@2.8.16: {} - bigint-buffer@1.1.5: - dependencies: - bindings: 1.5.0 - - bignumber.js@9.3.1: {} - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - bn.js@5.2.2: {} + bn.js@5.2.2: + optional: true borsh@0.7.0: dependencies: bn.js: 5.2.2 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 + optional: true brace-expansion@1.1.12: dependencies: @@ -6042,10 +7875,7 @@ snapshots: bs58@4.0.1: dependencies: base-x: 3.0.11 - - bs58@5.0.0: - dependencies: - base-x: 4.0.1 + optional: true bser@2.1.1: dependencies: @@ -6053,12 +7883,11 @@ snapshots: buffer-from@1.1.2: {} - buffer-layout@1.2.2: {} - buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + optional: true bufferutil@4.0.9: dependencies: @@ -6153,6 +7982,14 @@ snapshots: clsx@2.1.1: {} + codama@1.10.1: + dependencies: + '@codama/cli': 1.6.1 + '@codama/errors': 1.10.1 + '@codama/nodes': 1.10.1 + '@codama/validators': 1.10.1 + '@codama/visitors': 1.10.1 + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -6163,7 +8000,9 @@ snapshots: commander@13.1.0: {} - commander@14.0.1: {} + commander@14.0.2: {} + + commander@15.0.0: {} commander@2.20.3: {} @@ -6180,12 +8019,6 @@ snapshots: convert-source-map@2.0.0: {} - cross-fetch@3.2.0: - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -6246,7 +8079,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delay@5.0.0: {} + delay@5.0.0: + optional: true depd@2.0.0: {} @@ -6394,11 +8228,13 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es6-promise@4.2.8: {} + es6-promise@4.2.8: + optional: true es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 + optional: true esbuild@0.28.1: optionalDependencies: @@ -6640,13 +8476,13 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} - - eventemitter3@5.0.1: {} + eventemitter3@5.0.1: + optional: true exponential-backoff@3.1.3: {} - eyes@0.1.8: {} + eyes@0.1.8: + optional: true fast-deep-equal@3.1.3: {} @@ -6670,9 +8506,11 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-stable-stringify@1.0.0: {} + fast-stable-stringify@1.0.0: + optional: true - fastestsmallesttextencoderdecoder@1.0.22: {} + fastestsmallesttextencoderdecoder@1.0.22: + optional: true fastq@1.19.1: dependencies: @@ -6692,8 +8530,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-uri-to-path@1.0.0: {} - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -6887,8 +8723,10 @@ snapshots: humanize-ms@1.2.1: dependencies: ms: 2.1.3 + optional: true - ieee754@1.2.1: {} + ieee754@1.2.1: + optional: true ignore@5.3.2: {} @@ -7055,6 +8893,7 @@ snapshots: isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optional: true istanbul-lib-coverage@3.2.2: {} @@ -7100,6 +8939,7 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true jest-environment-node@29.7.0: dependencies: @@ -7182,8 +9022,6 @@ snapshots: '@types/react': 19.2.2 react: 19.2.0 - js-base64@3.7.8: {} - js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -7205,7 +9043,16 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: {} + json-stable-stringify@1.3.0: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + + json-stringify-safe@5.0.1: + optional: true json5@1.0.2: dependencies: @@ -7213,6 +9060,8 @@ snapshots: json5@2.2.3: {} + jsonify@0.0.1: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.9 @@ -7224,6 +9073,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -7289,6 +9140,42 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + litesvm-darwin-arm64@1.3.0: + optional: true + + litesvm-darwin-x64@1.3.0: + optional: true + + litesvm-linux-arm64-gnu@1.3.0: + optional: true + + litesvm-linux-arm64-musl@1.3.0: + optional: true + + litesvm-linux-x64-gnu@1.3.0: + optional: true + + litesvm-linux-x64-musl@1.3.0: + optional: true + + litesvm@1.3.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10): + dependencies: + '@solana-program/system': 0.12.2(@solana/kit@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana-program/token': 0.14.0(@solana/kit@6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)) + '@solana/kit': 6.10.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10) + optionalDependencies: + litesvm-darwin-arm64: 1.3.0 + litesvm-darwin-x64: 1.3.0 + litesvm-linux-arm64-gnu: 1.3.0 + litesvm-linux-arm64-musl: 1.3.0 + litesvm-linux-x64-gnu: 1.3.0 + litesvm-linux-x64-musl: 1.3.0 + transitivePeerDependencies: + - bufferutil + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -7579,6 +9466,8 @@ snapshots: nanoid@3.3.11: {} + nanostores@1.2.0: {} + napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} @@ -7618,6 +9507,7 @@ snapshots: node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + optional: true node-gyp-build@4.8.4: optional: true @@ -7728,8 +9618,6 @@ snapshots: package-json-from-dist@1.0.1: {} - pako@2.1.0: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -7777,6 +9665,8 @@ snapshots: prettier@3.6.2: {} + prettier@3.9.6: {} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -7787,6 +9677,11 @@ snapshots: dependencies: asap: 2.0.6 + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -7795,6 +9690,8 @@ snapshots: punycode@2.3.1: {} + qr@0.6.0: {} + qrcode@1.5.4: dependencies: dijkstrajs: 1.0.3 @@ -7969,10 +9866,11 @@ snapshots: buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.21.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.0.9 utf-8-validate: 5.0.10 + optional: true run-parallel@1.2.0: dependencies: @@ -8136,6 +10034,8 @@ snapshots: signal-exit@4.1.0: {} + sisteransi@1.0.5: {} + slash@3.0.0: {} sonner@2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0): @@ -8177,11 +10077,13 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - stream-chain@2.2.5: {} + stream-chain@2.2.5: + optional: true stream-json@1.9.1: dependencies: stream-chain: 2.2.5 + optional: true streamsearch@1.1.0: {} @@ -8266,9 +10168,8 @@ snapshots: optionalDependencies: '@babel/core': 7.28.4 - superstruct@0.15.5: {} - - superstruct@2.0.2: {} + superstruct@2.0.2: + optional: true supports-color@7.2.0: dependencies: @@ -8307,7 +10208,8 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-encoding-utf-8@1.0.2: {} + text-encoding-utf-8@1.0.2: + optional: true throat@5.0.0: {} @@ -8324,9 +10226,8 @@ snapshots: toidentifier@1.0.1: {} - toml@3.0.0: {} - - tr46@0.0.3: {} + tr46@0.0.3: + optional: true ts-api-utils@2.1.0(typescript@5.9.3): dependencies: @@ -8401,6 +10302,8 @@ snapshots: undici-types@6.21.0: {} + undici-types@8.10.0: {} + unpipe@1.0.0: {} unrs-resolver@1.11.1: @@ -8459,7 +10362,8 @@ snapshots: utils-merge@1.0.1: {} - uuid@8.3.2: {} + uuid@8.3.2: + optional: true vlq@1.0.1: {} @@ -8467,7 +10371,8 @@ snapshots: dependencies: makeerror: 1.0.12 - webidl-conversions@3.0.1: {} + webidl-conversions@3.0.1: + optional: true whatwg-fetch@3.6.20: {} @@ -8475,6 +10380,7 @@ snapshots: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + optional: true which-boxed-primitive@1.1.1: dependencies: @@ -8564,7 +10470,7 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + ws@8.21.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 utf-8-validate: 5.0.10 @@ -8618,3 +10524,5 @@ snapshots: yargs-parser: 21.1.1 yocto-queue@0.1.0: {} + + zod@4.4.3: {} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/scripts/generate-client.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/scripts/generate-client.ts new file mode 100644 index 000000000..ab2228b8b --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/scripts/generate-client.ts @@ -0,0 +1,40 @@ +import { rootNodeFromAnchor, type AnchorIdl } from '@codama/nodes-from-anchor'; +import { renderVisitor } from '@codama/renderers-js'; +import { createFromRoot } from 'codama'; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const appRoot = path.join(__dirname, '..'); +// `anchor build` writes an IDL carrying whatever program id `declare_id!` currently holds, so +// preferring it keeps the generated client pointed at the program a local deploy actually +// creates - including after `anchor keys sync` assigns a fresh keypair. The committed copy +// under `idl/` is the fallback for checkouts that have never been built, such as CI and +// `next build`. +const builtIdlPath = path.join(appRoot, 'anchor', 'target', 'idl', 'abl_token.json'); +const committedIdlPath = path.join(appRoot, 'idl', 'abl_token.json'); +const idlPath = fs.existsSync(builtIdlPath) ? builtIdlPath : committedIdlPath; +const idl = JSON.parse(fs.readFileSync(idlPath, 'utf-8')) as AnchorIdl; +const generatedDir = path.join(appRoot, 'src', 'generated'); + +console.log(`Generating client from ${path.relative(appRoot, idlPath)}`); + +const codama = createFromRoot(rootNodeFromAnchor(idl)); + +void (async () => { + await Promise.resolve( + codama.accept( + renderVisitor(generatedDir, { + deleteFolderBeforeRendering: true, + dependencyVersions: { + '@solana/kit': '^7.1.0', + '@solana/program-client-core': '^7.1.0', + }, + formatCode: true, + generatedFolder: '.', + }), + ), + ); +})(); diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/app/globals.css b/tokens/token-2022/transfer-hook/allow-block-list-token/src/app/globals.css index 900514b9d..76c592405 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/src/app/globals.css +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/app/globals.css @@ -119,9 +119,3 @@ @apply bg-background text-foreground; } } - -.wallet-adapter-button-trigger { - height: auto; - @apply !border !bg-background !shadow-xs hover:!bg-accent !text-accent-foreground hover:!text-accent-foreground dark:!bg-input/30 !border-input/10 dark:!border-input dark:hover:!bg-input/50; - @apply !px-2 !py-[6px] !rounded-md !text-sm !font-semibold !shadow-sm !transition-all; -} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-config.tsx b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-config.tsx index 3831a3189..7496fed94 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-config.tsx +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-config.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useWallet } from '@solana/wallet-adapter-react'; -import { PublicKey } from '@solana/web3.js'; +import { useWallet } from '@solana/connector/react'; +import { address as toAddress, type Address } from '@solana/kit'; import React from 'react'; import { Button } from '@/components/ui/button'; import { ellipsify } from '@/lib/utils'; @@ -11,7 +11,7 @@ import { WalletButton } from '../solana/solana-provider'; import { useAblTokenProgram } from './abl-token-data-access'; export default function AblTokenConfig() { - const { publicKey } = useWallet(); + const { account } = useWallet(); const { programId, getConfig, getAbWallets } = useAblTokenProgram(); const config = getConfig.data; @@ -22,7 +22,7 @@ export default function AblTokenConfig() { abWallets = getAbWallets.data; }, [getAbWallets.refetch, getAbWallets.data]); - return publicKey ? ( + return account ? (

@@ -34,7 +34,7 @@ export default function AblTokenConfig() {

- {config.authority.equals(publicKey) ? ( + {config.authority === account ? ( ) : (
@@ -52,7 +52,7 @@ export default function AblTokenConfig() {
- +
@@ -61,10 +61,10 @@ export default function AblTokenConfig() { export function AblTokenConfigCreate() { const { initConfig, getConfig } = useAblTokenProgram(); - const { publicKey } = useWallet(); + const { account } = useWallet(); const handleCreate = async () => { - if (!publicKey) return; + if (!account) return; try { await initConfig.mutateAsync(); // Refresh the config list @@ -93,8 +93,8 @@ export function AblTokenConfigList({ }: { abWallets: | { - publicKey: PublicKey; - account: { wallet: PublicKey; allowed: boolean }; + publicKey: Address; + account: { wallet: Address; allowed: boolean }; }[] | undefined; }) { @@ -178,7 +178,7 @@ export function AblTokenConfigListChange({ onWalletListUpdate }: { onWalletListU }) .filter(entry => { try { - new PublicKey(entry.address); + toAddress(entry.address); return ['allow', 'block', 'remove'].includes(entry.mode); } catch { return false; @@ -237,7 +237,7 @@ export function AblTokenConfigListChange({ onWalletListUpdate }: { onWalletListU try { await processBatchWallets.mutateAsync({ wallets: batch.map(w => ({ - wallet: new PublicKey(w.address), + wallet: toAddress(w.address), mode: w.mode, })), }); diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-data-access.tsx b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-data-access.tsx index af33e8f9a..e5dff6b14 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-data-access.tsx +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-data-access.tsx @@ -1,73 +1,79 @@ 'use client'; -import type { BN } from '@anchor-lang/core'; -import { getABLTokenProgram, getABLTokenProgramId } from '@project/anchor'; +import { useKitTransactionSigner, useSolanaClient } from '@solana/connector/react'; import { - createAssociatedTokenAccountIdempotentInstruction, - createMintToCheckedInstruction, - getAssociatedTokenAddressSync, - getMint, - getPermanentDelegate, - getTokenMetadata, - getTransferHook, - TOKEN_2022_PROGRAM_ID, -} from '@solana/spl-token'; -import { useConnection } from '@solana/wallet-adapter-react'; -import { type Cluster, Keypair, PublicKey, Transaction } from '@solana/web3.js'; -import { useMutation, useQuery } from '@tanstack/react-query'; -import { useMemo } from 'react'; + generateKeyPairSigner, + getBase58Decoder, + parseBase64RpcAccount, + type Address, + type Base58EncodedBytes, +} from '@solana/kit'; +import { fetchMint, getMintToATAInstructionPlanAsync, type Extension } from '@solana-program/token-2022'; +import { assertIsSingleInstructionPlan, flattenInstructionPlan } from '@solana/instruction-plans'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; +import { useSendInstruction } from '@/hooks/use-send-instruction'; +import { A_B_WALLET_DISCRIMINATOR, decodeABWallet, fetchConfig } from '@/generated/accounts'; +import { + getAttachToMintInstructionAsync, + getChangeModeInstruction, + getInitConfigInstructionAsync, + getInitMintInstructionAsync, + getInitWalletInstructionAsync, + getRemoveWalletInstructionAsync, +} from '@/generated/instructions'; +import { findConfigPda } from '@/generated/pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '@/generated/programs'; +import { Mode } from '@/generated/types'; import { useCluster } from '../cluster/cluster-data-access'; -import { useAnchorProvider } from '../solana/solana-provider'; import { useTransactionToast } from '../use-transaction-toast'; -export function useHasTransferHookEnabled(mint: PublicKey) { - const { connection } = useConnection(); - const { cluster } = useCluster(); - const programId = useMemo(() => getABLTokenProgramId(cluster.network as Cluster), [cluster]); +function findExtension( + extensions: Extension[] | undefined, + kind: TKind, +): Extract | undefined { + return extensions?.find((ext): ext is Extract => ext.__kind === kind); +} - return useQuery({ - queryKey: ['has-transfer-hook', { cluster }], - queryFn: async () => { - const mintInfo = await getMint(connection, mint, 'confirmed', TOKEN_2022_PROGRAM_ID); - const transferHook = getTransferHook(mintInfo); - return transferHook !== null && programId.equals(transferHook.programId); - }, - }); +function mintExtensions(mint: Awaited>): Extension[] { + return mint.data.extensions.__option === 'Some' ? mint.data.extensions.value : []; } -export function useGetToken(mint: PublicKey) { - const { connection } = useConnection(); +export function useGetToken(mint: Address) { + const { client } = useSolanaClient(); const { cluster } = useCluster(); - const programId = useMemo(() => getABLTokenProgramId(cluster.network as Cluster), [cluster]); return useQuery({ - queryKey: ['get-token', { endpoint: connection.rpcEndpoint, mint }], + enabled: client !== null, + queryKey: ['get-token', { endpoint: cluster.endpoint, mint }], queryFn: async () => { - const mintInfo = await getMint(connection, mint, 'confirmed', TOKEN_2022_PROGRAM_ID); - - const metadata = await getTokenMetadata(connection, mint, 'confirmed', TOKEN_2022_PROGRAM_ID); + const mintAccount = await fetchMint(client!.rpc, mint); + const extensions = mintExtensions(mintAccount); - const mode = metadata?.additionalMetadata.find(metadata => metadata[0] === 'AB')?.[1] || null; - const threshold = metadata?.additionalMetadata.find(metadata => metadata[0] === 'threshold')?.[1] || null; + const metadata = findExtension(extensions, 'TokenMetadata'); + const mode = metadata?.additionalMetadata.get('AB') ?? null; + const threshold = metadata?.additionalMetadata.get('threshold') ?? null; - const permanentDelegate = await getPermanentDelegate(mintInfo); + const permanentDelegate = findExtension(extensions, 'PermanentDelegate')?.delegate ?? null; - const transferHook = getTransferHook(mintInfo); - - const isTransferHookEnabled = transferHook !== null; - const isTransferHookSet = transferHook?.programId?.equals(programId) || false; - const transferHookProgramId = transferHook?.programId || null; + const transferHook = findExtension(extensions, 'TransferHook'); + const isTransferHookEnabled = transferHook !== undefined; + const isTransferHookSet = transferHook?.programId === ABL_TOKEN_PROGRAM_ADDRESS; + const transferHookProgramId = transferHook?.programId ?? null; return { name: metadata?.name, symbol: metadata?.symbol, uri: metadata?.uri, - decimals: mintInfo.decimals, - supply: mintInfo.supply, - mintAuthority: mintInfo.mintAuthority, - freezeAuthority: mintInfo.freezeAuthority, - permanentDelegate: permanentDelegate?.delegate ?? null, + decimals: mintAccount.data.decimals, + supply: mintAccount.data.supply, + mintAuthority: + mintAccount.data.mintAuthority.__option === 'Some' ? mintAccount.data.mintAuthority.value : null, + freezeAuthority: + mintAccount.data.freezeAuthority.__option === 'Some' + ? mintAccount.data.freezeAuthority.value + : null, + permanentDelegate, isTransferHookEnabled, isTransferHookSet, transferHookProgramId, @@ -79,72 +85,71 @@ export function useGetToken(mint: PublicKey) { } export function useAblTokenProgram() { - const { connection } = useConnection(); + const { client } = useSolanaClient(); const { cluster } = useCluster(); const transactionToast = useTransactionToast(); - const provider = useAnchorProvider(); - const programId = useMemo(() => getABLTokenProgramId(cluster.network as Cluster), [cluster]); - const program = useMemo(() => getABLTokenProgram(provider, programId), [provider, programId]); + const { signer } = useKitTransactionSigner(); + const sendInstruction = useSendInstruction(); + const queryClient = useQueryClient(); const getProgramAccount = useQuery({ + enabled: client !== null, queryKey: ['get-program-account', { cluster }], - queryFn: () => connection.getParsedAccountInfo(programId), + queryFn: () => + client!.rpc + .getAccountInfo(ABL_TOKEN_PROGRAM_ADDRESS, { encoding: 'jsonParsed', commitment: 'confirmed' }) + .send(), }); const initToken = useMutation({ mutationKey: ['abl-token', 'init-token', { cluster }], - mutationFn: (args: { - mintAuthority: PublicKey; - freezeAuthority: PublicKey; - permanentDelegate: PublicKey; - transferHookAuthority: PublicKey; - mode: string; - threshold: BN; + mutationFn: async (args: { + mintAuthority: Address; + freezeAuthority: Address; + permanentDelegate: Address; + transferHookAuthority: Address; + mode: 'allow' | 'block' | 'threshold'; + threshold: bigint; name: string; symbol: string; uri: string; decimals: number; }) => { - const modeEnum = - args.mode === 'allow' ? { allow: {} } : args.mode === 'block' ? { block: {} } : { mixed: {} }; - const mint = Keypair.generate(); + if (!signer) throw new Error('Wallet not connected'); + const modeEnum = args.mode === 'allow' ? Mode.Allow : args.mode === 'block' ? Mode.Block : Mode.Mixed; + const mint = await generateKeyPairSigner(); - return program.methods - .initMint({ - decimals: args.decimals, - mintAuthority: args.mintAuthority, - freezeAuthority: args.freezeAuthority, - permanentDelegate: args.permanentDelegate, - transferHookAuthority: args.mintAuthority, - mode: modeEnum, - threshold: args.threshold, - name: args.name, - symbol: args.symbol, - uri: args.uri, - }) - .accounts({ - mint: mint.publicKey, - }) - .signers([mint]) - .rpc() - .then(signature => ({ signature, mintAddress: mint.publicKey })); + const ix = await getInitMintInstructionAsync({ + payer: signer, + mint, + decimals: args.decimals, + mintAuthority: args.mintAuthority, + freezeAuthority: args.freezeAuthority, + permanentDelegate: args.permanentDelegate, + transferHookAuthority: args.transferHookAuthority, + mode: modeEnum, + threshold: args.threshold, + name: args.name, + symbol: args.symbol, + uri: args.uri, + }); + + const signature = await sendInstruction(ix, signer); + return { signature, mintAddress: mint.address }; }, onSuccess: ({ signature, mintAddress }) => { transactionToast(signature); - window.location.href = `/manage-token/${mintAddress.toString()}`; + window.location.href = `/manage-token/${mintAddress}`; }, onError: () => toast.error('Failed to initialize token'), }); const attachToExistingToken = useMutation({ mutationKey: ['abl-token', 'attach-to-existing-token', { cluster }], - mutationFn: (args: { mint: PublicKey }) => { - return program.methods - .attachToMint() - .accounts({ - mint: args.mint, - }) - .rpc(); + mutationFn: async (args: { mint: Address }) => { + if (!signer) throw new Error('Wallet not connected'); + const ix = await getAttachToMintInstructionAsync({ payer: signer, mint: args.mint }); + return sendInstruction(ix, signer); }, onSuccess: signature => { transactionToast(signature); @@ -154,18 +159,16 @@ export function useAblTokenProgram() { const changeMode = useMutation({ mutationKey: ['abl-token', 'change-mode', { cluster }], - mutationFn: (args: { mode: string; threshold: BN; mint: PublicKey }) => { - const modeEnum = - args.mode === 'Allow' ? { allow: {} } : args.mode === 'Block' ? { block: {} } : { mixed: {} }; - return program.methods - .changeMode({ - mode: modeEnum, - threshold: args.threshold, - }) - .accounts({ - mint: args.mint, - }) - .rpc(); + mutationFn: async (args: { mode: string; threshold: bigint; mint: Address }) => { + if (!signer) throw new Error('Wallet not connected'); + const modeEnum = args.mode === 'Allow' ? Mode.Allow : args.mode === 'Block' ? Mode.Block : Mode.Mixed; + const ix = getChangeModeInstruction({ + authority: signer, + mint: args.mint, + mode: modeEnum, + threshold: args.threshold, + }); + return sendInstruction(ix, signer); }, onSuccess: signature => { transactionToast(signature); @@ -174,145 +177,122 @@ export function useAblTokenProgram() { }); const initWallet = useMutation({ - mutationKey: ['abl-token', 'change-mode', { cluster }], - mutationFn: (args: { wallet: PublicKey; allowed: boolean }) => { - return program.methods - .initWallet({ - allowed: args.allowed, - }) - .accounts({ - wallet: args.wallet, - }) - .rpc(); + mutationKey: ['abl-token', 'init-wallet', { cluster }], + mutationFn: async (args: { wallet: Address; allowed: boolean }) => { + if (!signer) throw new Error('Wallet not connected'); + const ix = await getInitWalletInstructionAsync({ + authority: signer, + wallet: args.wallet, + allowed: args.allowed, + }); + return sendInstruction(ix, signer); }, onSuccess: signature => { transactionToast(signature); + return queryClient.invalidateQueries({ queryKey: ['get-ab-wallets', { cluster }] }); }, onError: () => toast.error('Failed to run program'), }); const processBatchWallets = useMutation({ mutationKey: ['abl-token', 'process-batch-wallets', { cluster }], - mutationFn: async (args: { wallets: { wallet: PublicKey; mode: 'allow' | 'block' | 'remove' }[] }) => { + mutationFn: async (args: { wallets: { wallet: Address; mode: 'allow' | 'block' | 'remove' }[] }) => { + if (!signer) throw new Error('Wallet not connected'); const instructions = await Promise.all( - args.wallets.map(wallet => { + args.wallets.map(async wallet => { if (wallet.mode === 'remove') { - const [abWalletPda] = PublicKey.findProgramAddressSync( - [Buffer.from('ab_wallet'), wallet.wallet.toBuffer()], - program.programId, - ); - return program.methods - .removeWallet() - .accounts({ - abWallet: abWalletPda, - }) - .instruction(); + return getRemoveWalletInstructionAsync({ authority: signer, wallet: wallet.wallet }); } - return program.methods - .initWallet({ - allowed: wallet.mode === 'allow', - }) - .accounts({ - wallet: wallet.wallet, - }) - .instruction(); + return getInitWalletInstructionAsync({ + authority: signer, + wallet: wallet.wallet, + allowed: wallet.mode === 'allow', + }); }), ); - const transaction = new Transaction(); - transaction.add(...instructions); - transaction.feePayer = provider.wallet.publicKey; - transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; - //transaction.sign(provider.wallet); - - const signedTx = await provider.wallet.signTransaction(transaction); - - return connection.sendRawTransaction(signedTx.serialize()); + return sendInstruction(instructions, signer); }, onSuccess: signature => { transactionToast(signature); + return queryClient.invalidateQueries({ queryKey: ['get-ab-wallets', { cluster }] }); }, onError: () => toast.error('Failed to run program'), }); const removeWallet = useMutation({ - mutationKey: ['abl-token', 'change-mode', { cluster }], - mutationFn: (args: { wallet: PublicKey }) => { - const [abWalletPda] = PublicKey.findProgramAddressSync( - [Buffer.from('ab_wallet'), args.wallet.toBuffer()], - program.programId, - ); - return program.methods - .removeWallet() - .accounts({ - abWallet: abWalletPda, - }) - .rpc(); + mutationKey: ['abl-token', 'remove-wallet', { cluster }], + mutationFn: async (args: { wallet: Address }) => { + if (!signer) throw new Error('Wallet not connected'); + const ix = await getRemoveWalletInstructionAsync({ authority: signer, wallet: args.wallet }); + return sendInstruction(ix, signer); }, onSuccess: signature => { transactionToast(signature); + return queryClient.invalidateQueries({ queryKey: ['get-ab-wallets', { cluster }] }); }, onError: () => toast.error('Failed to run program'), }); const initConfig = useMutation({ mutationKey: ['abl-token', 'init-config', { cluster }], - mutationFn: () => { - return program.methods.initConfig().rpc(); + mutationFn: async () => { + if (!signer) throw new Error('Wallet not connected'); + const ix = await getInitConfigInstructionAsync({ payer: signer }); + return sendInstruction(ix, signer); }, }); const getConfig = useQuery({ + enabled: client !== null, queryKey: ['get-config', { cluster }], - queryFn: () => { - const [configPda] = PublicKey.findProgramAddressSync([Buffer.from('config')], program.programId); - return program.account.config.fetch(configPda); + queryFn: async () => { + const [configPda] = await findConfigPda(); + return (await fetchConfig(client!.rpc, configPda)).data; }, }); const getAbWallets = useQuery({ + enabled: client !== null, queryKey: ['get-ab-wallets', { cluster }], - queryFn: () => { - return program.account.abWallet.all(); + queryFn: async () => { + const discriminatorBase58 = getBase58Decoder().decode(A_B_WALLET_DISCRIMINATOR) as Base58EncodedBytes; + const accounts = await client!.rpc + .getProgramAccounts(ABL_TOKEN_PROGRAM_ADDRESS, { + encoding: 'base64', + filters: [{ memcmp: { offset: BigInt(0), bytes: discriminatorBase58, encoding: 'base58' } }], + }) + .send(); + + return accounts.map(({ pubkey, account }) => { + const decoded = decodeABWallet(parseBase64RpcAccount(pubkey, account)); + return { publicKey: pubkey, account: { wallet: decoded.data.wallet, allowed: decoded.data.allowed } }; + }); }, }); - /* - const getBalance = useQuery({ - queryKey: ['get-balance', { cluster }], - queryFn: () => { - getbal - }, - })*/ - const mintTo = useMutation({ mutationKey: ['abl-token', 'mint-to', { cluster }], - mutationFn: async (args: { mint: PublicKey; amount: BN; recipient: PublicKey }) => { - const mintInfo = await getMint(connection, args.mint, 'confirmed', TOKEN_2022_PROGRAM_ID); - const ata = getAssociatedTokenAddressSync(args.mint, args.recipient, true, TOKEN_2022_PROGRAM_ID); + mutationFn: async (args: { mint: Address; amount: bigint; recipient: Address }) => { + if (!signer || !client) throw new Error('Wallet not connected'); + const mintAccount = await fetchMint(client.rpc, args.mint); - const ix = createAssociatedTokenAccountIdempotentInstruction( - provider.publicKey, - ata, - args.recipient, - args.mint, - TOKEN_2022_PROGRAM_ID, - ); - const ix2 = createMintToCheckedInstruction( - args.mint, - ata, - provider.publicKey, - args.amount.toNumber(), - mintInfo.decimals, - undefined, - TOKEN_2022_PROGRAM_ID, - ); - const tx = new Transaction(); - tx.add(ix, ix2); - tx.feePayer = provider.wallet.publicKey; - tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; - const signedTx = await provider.wallet.signTransaction(tx); - return connection.sendRawTransaction(signedTx.serialize()); + // Plans the idempotent-create-ATA and mint-to instructions together. Minting is not + // a transfer, so tx_hook never runs and no extra-account resolution is required. + const plan = await getMintToATAInstructionPlanAsync({ + payer: signer, + owner: args.recipient, + mint: args.mint, + mintAuthority: signer, + amount: args.amount, + decimals: mintAccount.data.decimals, + }); + const instructions = flattenInstructionPlan(plan).map(single => { + assertIsSingleInstructionPlan(single); + return single.instruction; + }); + + return sendInstruction(instructions, signer); }, onSuccess: signature => { transactionToast(signature); @@ -321,8 +301,7 @@ export function useAblTokenProgram() { }); return { - program, - programId, + programId: ABL_TOKEN_PROGRAM_ADDRESS, getProgramAccount, initToken, changeMode, diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-feature.tsx b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-feature.tsx index b7952cf20..89953866f 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-feature.tsx +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-feature.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useWallet } from '@solana/wallet-adapter-react'; +import { useWallet } from '@solana/connector/react'; import { ellipsify } from '@/lib/utils'; import { AppHero } from '../app-hero'; import { ExplorerLink } from '../cluster/cluster-ui'; @@ -9,10 +9,10 @@ import { useAblTokenProgram } from './abl-token-data-access'; import { AblTokenCreate, AblTokenProgram } from './abl-token-ui'; export default function AblTokenFeature() { - const { publicKey } = useWallet(); + const { account } = useWallet(); const { programId } = useAblTokenProgram(); - return publicKey ? ( + return account ? (

@@ -26,7 +26,7 @@ export default function AblTokenFeature() {

- +
diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-manage-token-detail.tsx b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-manage-token-detail.tsx index c3f2aef0f..7245843e5 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-manage-token-detail.tsx +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/abl-token/abl-token-manage-token-detail.tsx @@ -1,8 +1,7 @@ 'use client'; -import { BN } from '@anchor-lang/core'; -import { useWallet } from '@solana/wallet-adapter-react'; -import { PublicKey } from '@solana/web3.js'; +import { useWallet } from '@solana/connector/react'; +import { address as toAddress, type Address } from '@solana/kit'; import { useParams } from 'next/navigation'; import React from 'react'; import { Button } from '@/components/ui/button'; @@ -16,19 +15,19 @@ interface TokenInfo { uri: string | undefined; decimals: number; supply: number; - mintAuthority: PublicKey | null; - freezeAuthority: PublicKey | null; - permanentDelegate: PublicKey | null; + mintAuthority: Address | null; + freezeAuthority: Address | null; + permanentDelegate: Address | null; mode: string | null; threshold: string | null; - transferHookProgramId: PublicKey | null; + transferHookProgramId: Address | null; isTransferHookEnabled: boolean; isTransferHookSet: boolean; } function TokenInfo({ tokenAddress }: { tokenAddress: string }) { const { attachToExistingToken } = useAblTokenProgram(); - const tokenInfo = useGetToken(new PublicKey(tokenAddress)); + const tokenInfo = useGetToken(toAddress(tokenAddress)); return (

Token Information

@@ -39,7 +38,7 @@ function TokenInfo({ tokenAddress }: { tokenAddress: string }) {
Symbol: {tokenInfo.data?.symbol}
Decimals: {tokenInfo.data?.decimals}
URI: {tokenInfo.data?.uri}
-
Supply: {tokenInfo.data?.supply}
+
Supply: {tokenInfo.data?.supply?.toString()}
Mint Authority: {tokenInfo.data?.mintAuthority?.toString()}
Freeze Authority: {tokenInfo.data?.freezeAuthority?.toString()}
Permanent Delegate: {tokenInfo.data?.permanentDelegate?.toString()}
@@ -56,9 +55,7 @@ function TokenInfo({ tokenAddress }: { tokenAddress: string }) { TxHook: Enabled.{' '} + + + +
{walletInfo.name ?? 'Connected wallet'}
+
{account}
+
+ + void handleDisconnect()} + > + + Disconnect + +
+ + ); + } return ( - - - {children} - - + + + + + + Connect wallet + + {connectors.length === 0 && ( + No Wallet Standard wallets detected + )} + {connectors.map(walletConnector => ( + void handleConnect(walletConnector.id)} + > + {walletConnector.icon && ( + // eslint-disable-next-line @next/next/no-img-element + + )} + {walletConnector.name} + {!walletConnector.ready && ( + Not ready + )} + + ))} + + ); } -export function useAnchorProvider() { - const { connection } = useConnection(); - const wallet = useWallet(); +export function SolanaProvider({ children }: { children: ReactNode }) { + const { cluster } = useCluster(); + + const connectorConfig = useMemo(() => { + const connectorCluster: ConnectorCluster = { + id: connectorClusterIdFor(cluster), + label: cluster.name, + url: cluster.endpoint, + }; + return getDefaultConfig({ + appName: 'ABL Token', + autoConnect: true, + clusters: [connectorCluster], + enableMobile: true, + network: connectorNetworkFor(cluster), + persistClusterSelection: false, + }); + }, [cluster]); - return new AnchorProvider(connection, wallet as AnchorWallet, { - commitment: 'confirmed', - }); + // Keyed on the endpoint so switching clusters reinitializes the wallet connector against + // the new chain instead of reusing the previous one's session. + return ( + + {children} + + ); } diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/use-transaction-toast.tsx b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/use-transaction-toast.tsx index 40f9fced0..938b1c81e 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/use-transaction-toast.tsx +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/components/use-transaction-toast.tsx @@ -1,7 +1,21 @@ -import type { Connection, SendTransactionError } from '@solana/web3.js'; +import { isSolanaError, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE } from '@solana/kit'; import { toast } from 'sonner'; +import { + ABL_TOKEN_ERROR__AMOUNT_NOT_ALLOWED, + ABL_TOKEN_ERROR__WALLET_BLOCKED, + ABL_TOKEN_ERROR__WALLET_NOT_ALLOWED, +} from '@/generated/errors'; import { ExplorerLink } from './cluster/cluster-ui'; +const ABL_TOKEN_ERROR_TOASTS = [ + { code: ABL_TOKEN_ERROR__WALLET_BLOCKED, message: 'Destination wallet is blocked from receiving funds.' }, + { code: ABL_TOKEN_ERROR__WALLET_NOT_ALLOWED, message: 'Destination wallet is not allowed to receive funds.' }, + { + code: ABL_TOKEN_ERROR__AMOUNT_NOT_ALLOWED, + message: 'Destination wallet is not authorized to receive this amount.', + }, +]; + export function useTransactionToast() { return (signature: string) => { toast('Transaction sent', { @@ -11,23 +25,23 @@ export function useTransactionToast() { } export function useTransactionErrorToast() { - return async (error: Error, connection: Connection) => { - const logs = await (error as SendTransactionError).getLogs(connection); - const anchorError = logs.find(l => l.startsWith('Program log: AnchorError occurred')); - if (anchorError) { - if (anchorError.includes('WalletBlocked')) { - toast.error(`Destination wallet is blocked from receiving funds.`); - } else if (anchorError.includes('WalletNotAllowed')) { - toast.error(`Destination wallet is not allowed to receive funds.`); - } else if (anchorError.includes('AmountNotAllowed')) { - toast.error(`Destination wallet is not authorized to receive this amount.`); - } else { - console.log('ERROR: ', error); - toast.error(`Failed to run program: ${error}`); - } - } else { - console.log('ERROR: ', error); - toast.error(`Failed to run program: ${error}`); + return (error: unknown) => { + // Preflight simulation failures carry the program's simulation logs in the + // SolanaError's context, the kit equivalent of web3.js's + // `SendTransactionError.getLogs(connection)`. + const logs = isSolanaError(error, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE) + ? (error.context.logs ?? []) + : []; + // Anchor prints `Error Number: 6003` alongside the variant name; the numbers come from + // the generated error constants, so they stay in sync with the program's enum. + const message = ABL_TOKEN_ERROR_TOASTS.find(({ code }) => + logs.some(log => log.includes(`Error Number: ${code}.`)), + )?.message; + if (message) { + toast.error(message); + return; } + console.log('ERROR: ', error); + toast.error(`Failed to run program: ${error}`); }; } diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/aBWallet.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/aBWallet.ts new file mode 100644 index 000000000..e6be8b2ab --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/aBWallet.ts @@ -0,0 +1,128 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + assertAccountExists, + assertAccountsExist, + combineCodec, + decodeAccount, + fetchEncodedAccount, + fetchEncodedAccounts, + fixDecoderSize, + fixEncoderSize, + getAddressDecoder, + getAddressEncoder, + getBooleanDecoder, + getBooleanEncoder, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + transformEncoder, + type Account, + type Address, + type EncodedAccount, + type FetchAccountConfig, + type FetchAccountsConfig, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type MaybeAccount, + type MaybeEncodedAccount, + type ReadonlyUint8Array, +} from '@solana/kit'; + +export const A_B_WALLET_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([111, 162, 31, 45, 79, 239, 198, 72]); + +export function getABWalletDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(A_B_WALLET_DISCRIMINATOR); +} + +export type ABWallet = { discriminator: ReadonlyUint8Array; wallet: Address; allowed: boolean }; + +export type ABWalletArgs = { wallet: Address; allowed: boolean }; + +/** Gets the encoder for {@link ABWalletArgs} account data. */ +export function getABWalletEncoder(): FixedSizeEncoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], + ['wallet', getAddressEncoder()], + ['allowed', getBooleanEncoder()], + ]), + value => ({ ...value, discriminator: A_B_WALLET_DISCRIMINATOR }), + ); +} + +/** Gets the decoder for {@link ABWallet} account data. */ +export function getABWalletDecoder(): FixedSizeDecoder { + return getStructDecoder([ + ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], + ['wallet', getAddressDecoder()], + ['allowed', getBooleanDecoder()], + ]); +} + +/** Gets the codec for {@link ABWallet} account data. */ +export function getABWalletCodec(): FixedSizeCodec { + return combineCodec(getABWalletEncoder(), getABWalletDecoder()); +} + +export function decodeABWallet( + encodedAccount: EncodedAccount, +): Account; +export function decodeABWallet( + encodedAccount: MaybeEncodedAccount, +): MaybeAccount; +export function decodeABWallet( + encodedAccount: EncodedAccount | MaybeEncodedAccount, +): Account | MaybeAccount { + return decodeAccount(encodedAccount as MaybeEncodedAccount, getABWalletDecoder()); +} + +export async function fetchABWallet( + rpc: Parameters[0], + address: Address, + config?: FetchAccountConfig, +): Promise> { + const maybeAccount = await fetchMaybeABWallet(rpc, address, config); + assertAccountExists(maybeAccount); + return maybeAccount; +} + +export async function fetchMaybeABWallet( + rpc: Parameters[0], + address: Address, + config?: FetchAccountConfig, +): Promise> { + const maybeAccount = await fetchEncodedAccount(rpc, address, config); + return decodeABWallet(maybeAccount); +} + +export async function fetchAllABWallet( + rpc: Parameters[0], + addresses: Array
, + config?: FetchAccountsConfig, +): Promise[]> { + const maybeAccounts = await fetchAllMaybeABWallet(rpc, addresses, config); + assertAccountsExist(maybeAccounts); + return maybeAccounts; +} + +export async function fetchAllMaybeABWallet( + rpc: Parameters[0], + addresses: Array
, + config?: FetchAccountsConfig, +): Promise[]> { + const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); + return maybeAccounts.map(maybeAccount => decodeABWallet(maybeAccount)); +} + +export function getABWalletSize(): number { + return 41; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/config.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/config.ts new file mode 100644 index 000000000..96303504d --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/config.ts @@ -0,0 +1,128 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + assertAccountExists, + assertAccountsExist, + combineCodec, + decodeAccount, + fetchEncodedAccount, + fetchEncodedAccounts, + fixDecoderSize, + fixEncoderSize, + getAddressDecoder, + getAddressEncoder, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + getU8Decoder, + getU8Encoder, + transformEncoder, + type Account, + type Address, + type EncodedAccount, + type FetchAccountConfig, + type FetchAccountsConfig, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type MaybeAccount, + type MaybeEncodedAccount, + type ReadonlyUint8Array, +} from '@solana/kit'; + +export const CONFIG_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([155, 12, 170, 224, 30, 250, 204, 130]); + +export function getConfigDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(CONFIG_DISCRIMINATOR); +} + +export type Config = { discriminator: ReadonlyUint8Array; authority: Address; bump: number }; + +export type ConfigArgs = { authority: Address; bump: number }; + +/** Gets the encoder for {@link ConfigArgs} account data. */ +export function getConfigEncoder(): FixedSizeEncoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], + ['authority', getAddressEncoder()], + ['bump', getU8Encoder()], + ]), + value => ({ ...value, discriminator: CONFIG_DISCRIMINATOR }), + ); +} + +/** Gets the decoder for {@link Config} account data. */ +export function getConfigDecoder(): FixedSizeDecoder { + return getStructDecoder([ + ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], + ['authority', getAddressDecoder()], + ['bump', getU8Decoder()], + ]); +} + +/** Gets the codec for {@link Config} account data. */ +export function getConfigCodec(): FixedSizeCodec { + return combineCodec(getConfigEncoder(), getConfigDecoder()); +} + +export function decodeConfig( + encodedAccount: EncodedAccount, +): Account; +export function decodeConfig( + encodedAccount: MaybeEncodedAccount, +): MaybeAccount; +export function decodeConfig( + encodedAccount: EncodedAccount | MaybeEncodedAccount, +): Account | MaybeAccount { + return decodeAccount(encodedAccount as MaybeEncodedAccount, getConfigDecoder()); +} + +export async function fetchConfig( + rpc: Parameters[0], + address: Address, + config?: FetchAccountConfig, +): Promise> { + const maybeAccount = await fetchMaybeConfig(rpc, address, config); + assertAccountExists(maybeAccount); + return maybeAccount; +} + +export async function fetchMaybeConfig( + rpc: Parameters[0], + address: Address, + config?: FetchAccountConfig, +): Promise> { + const maybeAccount = await fetchEncodedAccount(rpc, address, config); + return decodeConfig(maybeAccount); +} + +export async function fetchAllConfig( + rpc: Parameters[0], + addresses: Array
, + config?: FetchAccountsConfig, +): Promise[]> { + const maybeAccounts = await fetchAllMaybeConfig(rpc, addresses, config); + assertAccountsExist(maybeAccounts); + return maybeAccounts; +} + +export async function fetchAllMaybeConfig( + rpc: Parameters[0], + addresses: Array
, + config?: FetchAccountsConfig, +): Promise[]> { + const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); + return maybeAccounts.map(maybeAccount => decodeConfig(maybeAccount)); +} + +export function getConfigSize(): number { + return 41; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/index.ts new file mode 100644 index 000000000..56283d4ff --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/accounts/index.ts @@ -0,0 +1,10 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './aBWallet'; +export * from './config'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/errors/ablToken.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/errors/ablToken.ts new file mode 100644 index 000000000..14f1e276e --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/errors/ablToken.ts @@ -0,0 +1,61 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + isProgramError, + type Address, + type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM, + type SolanaError, +} from '@solana/kit'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +/** InvalidMetadata: Invalid metadata */ +export const ABL_TOKEN_ERROR__INVALID_METADATA = 0x1770; // 6000 +/** WalletNotAllowed: Wallet not allowed */ +export const ABL_TOKEN_ERROR__WALLET_NOT_ALLOWED = 0x1771; // 6001 +/** AmountNotAllowed: Amount not allowed */ +export const ABL_TOKEN_ERROR__AMOUNT_NOT_ALLOWED = 0x1772; // 6002 +/** WalletBlocked: Wallet blocked */ +export const ABL_TOKEN_ERROR__WALLET_BLOCKED = 0x1773; // 6003 +/** MintNotUsingThisHook: Mint is not configured to use this transfer hook program */ +export const ABL_TOKEN_ERROR__MINT_NOT_USING_THIS_HOOK = 0x1774; // 6004 + +export type AblTokenError = + | typeof ABL_TOKEN_ERROR__AMOUNT_NOT_ALLOWED + | typeof ABL_TOKEN_ERROR__INVALID_METADATA + | typeof ABL_TOKEN_ERROR__MINT_NOT_USING_THIS_HOOK + | typeof ABL_TOKEN_ERROR__WALLET_BLOCKED + | typeof ABL_TOKEN_ERROR__WALLET_NOT_ALLOWED; + +let ablTokenErrorMessages: Record | undefined; +if (process.env['NODE_ENV'] !== 'production') { + ablTokenErrorMessages = { + [ABL_TOKEN_ERROR__AMOUNT_NOT_ALLOWED]: `Amount not allowed`, + [ABL_TOKEN_ERROR__INVALID_METADATA]: `Invalid metadata`, + [ABL_TOKEN_ERROR__MINT_NOT_USING_THIS_HOOK]: `Mint is not configured to use this transfer hook program`, + [ABL_TOKEN_ERROR__WALLET_BLOCKED]: `Wallet blocked`, + [ABL_TOKEN_ERROR__WALLET_NOT_ALLOWED]: `Wallet not allowed`, + }; +} + +export function getAblTokenErrorMessage(code: AblTokenError): string { + if (process.env['NODE_ENV'] !== 'production') { + return (ablTokenErrorMessages as Record)[code]; + } + + return 'Error message not available in production bundles.'; +} + +export function isAblTokenError( + error: unknown, + transactionMessage: { instructions: Record }, + code?: TProgramErrorCode, +): error is SolanaError & + Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> { + return isProgramError(error, transactionMessage, ABL_TOKEN_PROGRAM_ADDRESS, code); +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/errors/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/errors/index.ts new file mode 100644 index 000000000..e6e57f32e --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/errors/index.ts @@ -0,0 +1,9 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './ablToken'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/index.ts new file mode 100644 index 000000000..157d6f194 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/index.ts @@ -0,0 +1,14 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './accounts'; +export * from './errors'; +export * from './instructions'; +export * from './pdas'; +export * from './programs'; +export * from './types'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/attachToMint.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/attachToMint.ts new file mode 100644 index 000000000..2f6cda69b --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/attachToMint.ts @@ -0,0 +1,310 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { + getAccountMetaFactory, + getAddressFromResolvedInstructionAccount, + type ResolvedInstructionAccount, +} from '@solana/program-client-core'; +import { findExtraMetasAccountPda } from '../pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const ATTACH_TO_MINT_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([203, 132, 125, 16, 50, 249, 174, 252]); + +export function getAttachToMintDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(ATTACH_TO_MINT_DISCRIMINATOR); +} + +export type AttachToMintInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountPayer extends string | AccountMeta = string, + TAccountMint extends string | AccountMeta = string, + TAccountExtraMetasAccount extends string | AccountMeta = string, + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TAccountTokenProgram extends string | AccountMeta = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountPayer extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountPayer, + TAccountMint extends string ? WritableAccount : TAccountMint, + TAccountExtraMetasAccount extends string + ? WritableAccount + : TAccountExtraMetasAccount, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, + ...TRemainingAccounts, + ] + >; + +export type AttachToMintInstructionData = { discriminator: ReadonlyUint8Array }; + +export type AttachToMintInstructionDataArgs = {}; + +export function getAttachToMintInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), value => ({ + ...value, + discriminator: ATTACH_TO_MINT_DISCRIMINATOR, + })); +} + +export function getAttachToMintInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]); +} + +export function getAttachToMintInstructionDataCodec(): FixedSizeCodec< + AttachToMintInstructionDataArgs, + AttachToMintInstructionData +> { + return combineCodec(getAttachToMintInstructionDataEncoder(), getAttachToMintInstructionDataDecoder()); +} + +export type AttachToMintAsyncInput< + TAccountPayer extends string = string, + TAccountMint extends string = string, + TAccountExtraMetasAccount extends string = string, + TAccountSystemProgram extends string = string, + TAccountTokenProgram extends string = string, +> = { + payer: TransactionSigner; + mint: Address; + extraMetasAccount?: Address; + systemProgram?: Address; + tokenProgram?: Address; +}; + +export async function getAttachToMintInstructionAsync< + TAccountPayer extends string, + TAccountMint extends string, + TAccountExtraMetasAccount extends string, + TAccountSystemProgram extends string, + TAccountTokenProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: AttachToMintAsyncInput< + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >, + config?: { programAddress?: TProgramAddress }, +): Promise< + AttachToMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + > +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: true }, + extraMetasAccount: { value: input.extraMetasAccount ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.extraMetasAccount.value) { + accounts.extraMetasAccount.value = await findExtraMetasAccountPda({ + mint: getAddressFromResolvedInstructionAccount('mint', accounts.mint.value), + }); + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('mint', accounts.mint), + getAccountMeta('extraMetasAccount', accounts.extraMetasAccount), + getAccountMeta('systemProgram', accounts.systemProgram), + getAccountMeta('tokenProgram', accounts.tokenProgram), + ], + data: getAttachToMintInstructionDataEncoder().encode({}), + programAddress, + } as AttachToMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >); +} + +export type AttachToMintInput< + TAccountPayer extends string = string, + TAccountMint extends string = string, + TAccountExtraMetasAccount extends string = string, + TAccountSystemProgram extends string = string, + TAccountTokenProgram extends string = string, +> = { + payer: TransactionSigner; + mint: Address; + extraMetasAccount: Address; + systemProgram?: Address; + tokenProgram?: Address; +}; + +export function getAttachToMintInstruction< + TAccountPayer extends string, + TAccountMint extends string, + TAccountExtraMetasAccount extends string, + TAccountSystemProgram extends string, + TAccountTokenProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: AttachToMintInput< + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >, + config?: { programAddress?: TProgramAddress }, +): AttachToMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: true }, + extraMetasAccount: { value: input.extraMetasAccount ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('mint', accounts.mint), + getAccountMeta('extraMetasAccount', accounts.extraMetasAccount), + getAccountMeta('systemProgram', accounts.systemProgram), + getAccountMeta('tokenProgram', accounts.tokenProgram), + ], + data: getAttachToMintInstructionDataEncoder().encode({}), + programAddress, + } as AttachToMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >); +} + +export type ParsedAttachToMintInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + payer: TAccountMetas[0]; + mint: TAccountMetas[1]; + extraMetasAccount: TAccountMetas[2]; + systemProgram: TAccountMetas[3]; + tokenProgram: TAccountMetas[4]; + }; + data: AttachToMintInstructionData; +}; + +export function parseAttachToMintInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedAttachToMintInstruction { + if (instruction.accounts.length < 5) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 5, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + payer: getNextAccount(), + mint: getNextAccount(), + extraMetasAccount: getNextAccount(), + systemProgram: getNextAccount(), + tokenProgram: getNextAccount(), + }, + data: getAttachToMintInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/changeMode.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/changeMode.ts new file mode 100644 index 000000000..3c11ac6cd --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/changeMode.ts @@ -0,0 +1,213 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + getU64Decoder, + getU64Encoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { getAccountMetaFactory, type ResolvedInstructionAccount } from '@solana/program-client-core'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; +import { getModeDecoder, getModeEncoder, type Mode, type ModeArgs } from '../types'; + +export const CHANGE_MODE_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([124, 163, 122, 208, 67, 22, 162, 241]); + +export function getChangeModeDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(CHANGE_MODE_DISCRIMINATOR); +} + +export type ChangeModeInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountAuthority extends string | AccountMeta = string, + TAccountMint extends string | AccountMeta = string, + TAccountTokenProgram extends string | AccountMeta = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountAuthority extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountAuthority, + TAccountMint extends string ? WritableAccount : TAccountMint, + TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + ...TRemainingAccounts, + ] + >; + +export type ChangeModeInstructionData = { discriminator: ReadonlyUint8Array; mode: Mode; threshold: bigint }; + +export type ChangeModeInstructionDataArgs = { mode: ModeArgs; threshold: number | bigint }; + +export function getChangeModeInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], + ['mode', getModeEncoder()], + ['threshold', getU64Encoder()], + ]), + value => ({ ...value, discriminator: CHANGE_MODE_DISCRIMINATOR }), + ); +} + +export function getChangeModeInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([ + ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], + ['mode', getModeDecoder()], + ['threshold', getU64Decoder()], + ]); +} + +export function getChangeModeInstructionDataCodec(): FixedSizeCodec< + ChangeModeInstructionDataArgs, + ChangeModeInstructionData +> { + return combineCodec(getChangeModeInstructionDataEncoder(), getChangeModeInstructionDataDecoder()); +} + +export type ChangeModeInput< + TAccountAuthority extends string = string, + TAccountMint extends string = string, + TAccountTokenProgram extends string = string, + TAccountSystemProgram extends string = string, +> = { + authority: TransactionSigner; + mint: Address; + tokenProgram?: Address; + systemProgram?: Address; + mode: ChangeModeInstructionDataArgs['mode']; + threshold: ChangeModeInstructionDataArgs['threshold']; +}; + +export function getChangeModeInstruction< + TAccountAuthority extends string, + TAccountMint extends string, + TAccountTokenProgram extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: ChangeModeInput, + config?: { programAddress?: TProgramAddress }, +): ChangeModeInstruction< + TProgramAddress, + TAccountAuthority, + TAccountMint, + TAccountTokenProgram, + TAccountSystemProgram +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + authority: { value: input.authority ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: true }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('authority', accounts.authority), + getAccountMeta('mint', accounts.mint), + getAccountMeta('tokenProgram', accounts.tokenProgram), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getChangeModeInstructionDataEncoder().encode(args as ChangeModeInstructionDataArgs), + programAddress, + } as ChangeModeInstruction< + TProgramAddress, + TAccountAuthority, + TAccountMint, + TAccountTokenProgram, + TAccountSystemProgram + >); +} + +export type ParsedChangeModeInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + authority: TAccountMetas[0]; + mint: TAccountMetas[1]; + tokenProgram: TAccountMetas[2]; + systemProgram: TAccountMetas[3]; + }; + data: ChangeModeInstructionData; +}; + +export function parseChangeModeInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedChangeModeInstruction { + if (instruction.accounts.length < 4) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 4, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + authority: getNextAccount(), + mint: getNextAccount(), + tokenProgram: getNextAccount(), + systemProgram: getNextAccount(), + }, + data: getChangeModeInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/index.ts new file mode 100644 index 000000000..98d8dba35 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/index.ts @@ -0,0 +1,16 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './attachToMint'; +export * from './changeMode'; +export * from './initConfig'; +export * from './initMint'; +export * from './initWallet'; +export * from './removeWallet'; +export * from './resizeMetaList'; +export * from './txHook'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initConfig.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initConfig.ts new file mode 100644 index 000000000..64767acd6 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initConfig.ts @@ -0,0 +1,220 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { getAccountMetaFactory, type ResolvedInstructionAccount } from '@solana/program-client-core'; +import { findConfigPda } from '../pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const INIT_CONFIG_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([23, 235, 115, 232, 168, 96, 1, 231]); + +export function getInitConfigDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(INIT_CONFIG_DISCRIMINATOR); +} + +export type InitConfigInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountPayer extends string | AccountMeta = string, + TAccountConfig extends string | AccountMeta = string, + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountPayer extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountPayer, + TAccountConfig extends string ? WritableAccount : TAccountConfig, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + ...TRemainingAccounts, + ] + >; + +export type InitConfigInstructionData = { discriminator: ReadonlyUint8Array }; + +export type InitConfigInstructionDataArgs = {}; + +export function getInitConfigInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), value => ({ + ...value, + discriminator: INIT_CONFIG_DISCRIMINATOR, + })); +} + +export function getInitConfigInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]); +} + +export function getInitConfigInstructionDataCodec(): FixedSizeCodec< + InitConfigInstructionDataArgs, + InitConfigInstructionData +> { + return combineCodec(getInitConfigInstructionDataEncoder(), getInitConfigInstructionDataDecoder()); +} + +export type InitConfigAsyncInput< + TAccountPayer extends string = string, + TAccountConfig extends string = string, + TAccountSystemProgram extends string = string, +> = { + payer: TransactionSigner; + config?: Address; + systemProgram?: Address; +}; + +export async function getInitConfigInstructionAsync< + TAccountPayer extends string, + TAccountConfig extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: InitConfigAsyncInput, + config?: { programAddress?: TProgramAddress }, +): Promise> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + config: { value: input.config ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.config.value) { + accounts.config.value = await findConfigPda(); + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('config', accounts.config), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getInitConfigInstructionDataEncoder().encode({}), + programAddress, + } as InitConfigInstruction); +} + +export type InitConfigInput< + TAccountPayer extends string = string, + TAccountConfig extends string = string, + TAccountSystemProgram extends string = string, +> = { + payer: TransactionSigner; + config: Address; + systemProgram?: Address; +}; + +export function getInitConfigInstruction< + TAccountPayer extends string, + TAccountConfig extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: InitConfigInput, + config?: { programAddress?: TProgramAddress }, +): InitConfigInstruction { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + config: { value: input.config ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('config', accounts.config), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getInitConfigInstructionDataEncoder().encode({}), + programAddress, + } as InitConfigInstruction); +} + +export type ParsedInitConfigInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + payer: TAccountMetas[0]; + config: TAccountMetas[1]; + systemProgram: TAccountMetas[2]; + }; + data: InitConfigInstructionData; +}; + +export function parseInitConfigInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedInitConfigInstruction { + if (instruction.accounts.length < 3) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 3, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { payer: getNextAccount(), config: getNextAccount(), systemProgram: getNextAccount() }, + data: getInitConfigInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initMint.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initMint.ts new file mode 100644 index 000000000..015ebd07d --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initMint.ts @@ -0,0 +1,395 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + addDecoderSizePrefix, + addEncoderSizePrefix, + combineCodec, + fixDecoderSize, + fixEncoderSize, + getAddressDecoder, + getAddressEncoder, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getU64Decoder, + getU64Encoder, + getU8Decoder, + getU8Encoder, + getUtf8Decoder, + getUtf8Encoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { + getAccountMetaFactory, + getAddressFromResolvedInstructionAccount, + type ResolvedInstructionAccount, +} from '@solana/program-client-core'; +import { findExtraMetasAccountPda } from '../pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; +import { getModeDecoder, getModeEncoder, type Mode, type ModeArgs } from '../types'; + +export const INIT_MINT_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([126, 176, 233, 16, 66, 117, 209, 125]); + +export function getInitMintDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(INIT_MINT_DISCRIMINATOR); +} + +export type InitMintInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountPayer extends string | AccountMeta = string, + TAccountMint extends string | AccountMeta = string, + TAccountExtraMetasAccount extends string | AccountMeta = string, + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TAccountTokenProgram extends string | AccountMeta = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountPayer extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountPayer, + TAccountMint extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountMint, + TAccountExtraMetasAccount extends string + ? WritableAccount + : TAccountExtraMetasAccount, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, + ...TRemainingAccounts, + ] + >; + +export type InitMintInstructionData = { + discriminator: ReadonlyUint8Array; + decimals: number; + mintAuthority: Address; + freezeAuthority: Address; + permanentDelegate: Address; + transferHookAuthority: Address; + mode: Mode; + threshold: bigint; + name: string; + symbol: string; + uri: string; +}; + +export type InitMintInstructionDataArgs = { + decimals: number; + mintAuthority: Address; + freezeAuthority: Address; + permanentDelegate: Address; + transferHookAuthority: Address; + mode: ModeArgs; + threshold: number | bigint; + name: string; + symbol: string; + uri: string; +}; + +export function getInitMintInstructionDataEncoder(): Encoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], + ['decimals', getU8Encoder()], + ['mintAuthority', getAddressEncoder()], + ['freezeAuthority', getAddressEncoder()], + ['permanentDelegate', getAddressEncoder()], + ['transferHookAuthority', getAddressEncoder()], + ['mode', getModeEncoder()], + ['threshold', getU64Encoder()], + ['name', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())], + ['symbol', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())], + ['uri', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())], + ]), + value => ({ ...value, discriminator: INIT_MINT_DISCRIMINATOR }), + ); +} + +export function getInitMintInstructionDataDecoder(): Decoder { + return getStructDecoder([ + ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], + ['decimals', getU8Decoder()], + ['mintAuthority', getAddressDecoder()], + ['freezeAuthority', getAddressDecoder()], + ['permanentDelegate', getAddressDecoder()], + ['transferHookAuthority', getAddressDecoder()], + ['mode', getModeDecoder()], + ['threshold', getU64Decoder()], + ['name', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], + ['symbol', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], + ['uri', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], + ]); +} + +export function getInitMintInstructionDataCodec(): Codec { + return combineCodec(getInitMintInstructionDataEncoder(), getInitMintInstructionDataDecoder()); +} + +export type InitMintAsyncInput< + TAccountPayer extends string = string, + TAccountMint extends string = string, + TAccountExtraMetasAccount extends string = string, + TAccountSystemProgram extends string = string, + TAccountTokenProgram extends string = string, +> = { + payer: TransactionSigner; + mint: TransactionSigner; + extraMetasAccount?: Address; + systemProgram?: Address; + tokenProgram?: Address; + decimals: InitMintInstructionDataArgs['decimals']; + mintAuthority: InitMintInstructionDataArgs['mintAuthority']; + freezeAuthority: InitMintInstructionDataArgs['freezeAuthority']; + permanentDelegate: InitMintInstructionDataArgs['permanentDelegate']; + transferHookAuthority: InitMintInstructionDataArgs['transferHookAuthority']; + mode: InitMintInstructionDataArgs['mode']; + threshold: InitMintInstructionDataArgs['threshold']; + name: InitMintInstructionDataArgs['name']; + symbol: InitMintInstructionDataArgs['symbol']; + uri: InitMintInstructionDataArgs['uri']; +}; + +export async function getInitMintInstructionAsync< + TAccountPayer extends string, + TAccountMint extends string, + TAccountExtraMetasAccount extends string, + TAccountSystemProgram extends string, + TAccountTokenProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: InitMintAsyncInput< + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >, + config?: { programAddress?: TProgramAddress }, +): Promise< + InitMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + > +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: true }, + extraMetasAccount: { value: input.extraMetasAccount ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.extraMetasAccount.value) { + accounts.extraMetasAccount.value = await findExtraMetasAccountPda({ + mint: getAddressFromResolvedInstructionAccount('mint', accounts.mint.value), + }); + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('mint', accounts.mint), + getAccountMeta('extraMetasAccount', accounts.extraMetasAccount), + getAccountMeta('systemProgram', accounts.systemProgram), + getAccountMeta('tokenProgram', accounts.tokenProgram), + ], + data: getInitMintInstructionDataEncoder().encode(args as InitMintInstructionDataArgs), + programAddress, + } as InitMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >); +} + +export type InitMintInput< + TAccountPayer extends string = string, + TAccountMint extends string = string, + TAccountExtraMetasAccount extends string = string, + TAccountSystemProgram extends string = string, + TAccountTokenProgram extends string = string, +> = { + payer: TransactionSigner; + mint: TransactionSigner; + extraMetasAccount: Address; + systemProgram?: Address; + tokenProgram?: Address; + decimals: InitMintInstructionDataArgs['decimals']; + mintAuthority: InitMintInstructionDataArgs['mintAuthority']; + freezeAuthority: InitMintInstructionDataArgs['freezeAuthority']; + permanentDelegate: InitMintInstructionDataArgs['permanentDelegate']; + transferHookAuthority: InitMintInstructionDataArgs['transferHookAuthority']; + mode: InitMintInstructionDataArgs['mode']; + threshold: InitMintInstructionDataArgs['threshold']; + name: InitMintInstructionDataArgs['name']; + symbol: InitMintInstructionDataArgs['symbol']; + uri: InitMintInstructionDataArgs['uri']; +}; + +export function getInitMintInstruction< + TAccountPayer extends string, + TAccountMint extends string, + TAccountExtraMetasAccount extends string, + TAccountSystemProgram extends string, + TAccountTokenProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: InitMintInput< + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >, + config?: { programAddress?: TProgramAddress }, +): InitMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: true }, + extraMetasAccount: { value: input.extraMetasAccount ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('mint', accounts.mint), + getAccountMeta('extraMetasAccount', accounts.extraMetasAccount), + getAccountMeta('systemProgram', accounts.systemProgram), + getAccountMeta('tokenProgram', accounts.tokenProgram), + ], + data: getInitMintInstructionDataEncoder().encode(args as InitMintInstructionDataArgs), + programAddress, + } as InitMintInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >); +} + +export type ParsedInitMintInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + payer: TAccountMetas[0]; + mint: TAccountMetas[1]; + extraMetasAccount: TAccountMetas[2]; + systemProgram: TAccountMetas[3]; + tokenProgram: TAccountMetas[4]; + }; + data: InitMintInstructionData; +}; + +export function parseInitMintInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedInitMintInstruction { + if (instruction.accounts.length < 5) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 5, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + payer: getNextAccount(), + mint: getNextAccount(), + extraMetasAccount: getNextAccount(), + systemProgram: getNextAccount(), + tokenProgram: getNextAccount(), + }, + data: getInitMintInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initWallet.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initWallet.ts new file mode 100644 index 000000000..8131b00a4 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/initWallet.ts @@ -0,0 +1,313 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBooleanDecoder, + getBooleanEncoder, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { + getAccountMetaFactory, + getAddressFromResolvedInstructionAccount, + type ResolvedInstructionAccount, +} from '@solana/program-client-core'; +import { findAbWalletPda, findConfigPda } from '../pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const INIT_WALLET_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([141, 132, 233, 130, 168, 183, 10, 119]); + +export function getInitWalletDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(INIT_WALLET_DISCRIMINATOR); +} + +export type InitWalletInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountAuthority extends string | AccountMeta = string, + TAccountConfig extends string | AccountMeta = string, + TAccountWallet extends string | AccountMeta = string, + TAccountAbWallet extends string | AccountMeta = string, + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountAuthority extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountAuthority, + TAccountConfig extends string ? ReadonlyAccount : TAccountConfig, + TAccountWallet extends string ? ReadonlyAccount : TAccountWallet, + TAccountAbWallet extends string ? WritableAccount : TAccountAbWallet, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + ...TRemainingAccounts, + ] + >; + +export type InitWalletInstructionData = { discriminator: ReadonlyUint8Array; allowed: boolean }; + +export type InitWalletInstructionDataArgs = { allowed: boolean }; + +export function getInitWalletInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], + ['allowed', getBooleanEncoder()], + ]), + value => ({ ...value, discriminator: INIT_WALLET_DISCRIMINATOR }), + ); +} + +export function getInitWalletInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([ + ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], + ['allowed', getBooleanDecoder()], + ]); +} + +export function getInitWalletInstructionDataCodec(): FixedSizeCodec< + InitWalletInstructionDataArgs, + InitWalletInstructionData +> { + return combineCodec(getInitWalletInstructionDataEncoder(), getInitWalletInstructionDataDecoder()); +} + +export type InitWalletAsyncInput< + TAccountAuthority extends string = string, + TAccountConfig extends string = string, + TAccountWallet extends string = string, + TAccountAbWallet extends string = string, + TAccountSystemProgram extends string = string, +> = { + authority: TransactionSigner; + config?: Address; + wallet: Address; + abWallet?: Address; + systemProgram?: Address; + allowed: InitWalletInstructionDataArgs['allowed']; +}; + +export async function getInitWalletInstructionAsync< + TAccountAuthority extends string, + TAccountConfig extends string, + TAccountWallet extends string, + TAccountAbWallet extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: InitWalletAsyncInput< + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >, + config?: { programAddress?: TProgramAddress }, +): Promise< + InitWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + > +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + authority: { value: input.authority ?? null, isWritable: true }, + config: { value: input.config ?? null, isWritable: false }, + wallet: { value: input.wallet ?? null, isWritable: false }, + abWallet: { value: input.abWallet ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.config.value) { + accounts.config.value = await findConfigPda(); + } + if (!accounts.abWallet.value) { + accounts.abWallet.value = await findAbWalletPda({ + wallet: getAddressFromResolvedInstructionAccount('wallet', accounts.wallet.value), + }); + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('authority', accounts.authority), + getAccountMeta('config', accounts.config), + getAccountMeta('wallet', accounts.wallet), + getAccountMeta('abWallet', accounts.abWallet), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getInitWalletInstructionDataEncoder().encode(args as InitWalletInstructionDataArgs), + programAddress, + } as InitWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >); +} + +export type InitWalletInput< + TAccountAuthority extends string = string, + TAccountConfig extends string = string, + TAccountWallet extends string = string, + TAccountAbWallet extends string = string, + TAccountSystemProgram extends string = string, +> = { + authority: TransactionSigner; + config: Address; + wallet: Address; + abWallet: Address; + systemProgram?: Address; + allowed: InitWalletInstructionDataArgs['allowed']; +}; + +export function getInitWalletInstruction< + TAccountAuthority extends string, + TAccountConfig extends string, + TAccountWallet extends string, + TAccountAbWallet extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: InitWalletInput, + config?: { programAddress?: TProgramAddress }, +): InitWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + authority: { value: input.authority ?? null, isWritable: true }, + config: { value: input.config ?? null, isWritable: false }, + wallet: { value: input.wallet ?? null, isWritable: false }, + abWallet: { value: input.abWallet ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('authority', accounts.authority), + getAccountMeta('config', accounts.config), + getAccountMeta('wallet', accounts.wallet), + getAccountMeta('abWallet', accounts.abWallet), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getInitWalletInstructionDataEncoder().encode(args as InitWalletInstructionDataArgs), + programAddress, + } as InitWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >); +} + +export type ParsedInitWalletInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + authority: TAccountMetas[0]; + config: TAccountMetas[1]; + wallet: TAccountMetas[2]; + abWallet: TAccountMetas[3]; + systemProgram: TAccountMetas[4]; + }; + data: InitWalletInstructionData; +}; + +export function parseInitWalletInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedInitWalletInstruction { + if (instruction.accounts.length < 5) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 5, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + authority: getNextAccount(), + config: getNextAccount(), + wallet: getNextAccount(), + abWallet: getNextAccount(), + systemProgram: getNextAccount(), + }, + data: getInitWalletInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/removeWallet.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/removeWallet.ts new file mode 100644 index 000000000..69ae8a4c1 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/removeWallet.ts @@ -0,0 +1,303 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { + getAccountMetaFactory, + getAddressFromResolvedInstructionAccount, + type ResolvedInstructionAccount, +} from '@solana/program-client-core'; +import { findAbWalletPda, findConfigPda } from '../pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const REMOVE_WALLET_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([26, 151, 38, 109, 151, 162, 104, 28]); + +export function getRemoveWalletDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(REMOVE_WALLET_DISCRIMINATOR); +} + +export type RemoveWalletInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountAuthority extends string | AccountMeta = string, + TAccountConfig extends string | AccountMeta = string, + TAccountWallet extends string | AccountMeta = string, + TAccountAbWallet extends string | AccountMeta = string, + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountAuthority extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountAuthority, + TAccountConfig extends string ? ReadonlyAccount : TAccountConfig, + TAccountWallet extends string ? ReadonlyAccount : TAccountWallet, + TAccountAbWallet extends string ? WritableAccount : TAccountAbWallet, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + ...TRemainingAccounts, + ] + >; + +export type RemoveWalletInstructionData = { discriminator: ReadonlyUint8Array }; + +export type RemoveWalletInstructionDataArgs = {}; + +export function getRemoveWalletInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), value => ({ + ...value, + discriminator: REMOVE_WALLET_DISCRIMINATOR, + })); +} + +export function getRemoveWalletInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]); +} + +export function getRemoveWalletInstructionDataCodec(): FixedSizeCodec< + RemoveWalletInstructionDataArgs, + RemoveWalletInstructionData +> { + return combineCodec(getRemoveWalletInstructionDataEncoder(), getRemoveWalletInstructionDataDecoder()); +} + +export type RemoveWalletAsyncInput< + TAccountAuthority extends string = string, + TAccountConfig extends string = string, + TAccountWallet extends string = string, + TAccountAbWallet extends string = string, + TAccountSystemProgram extends string = string, +> = { + authority: TransactionSigner; + config?: Address; + wallet: Address; + abWallet?: Address; + systemProgram?: Address; +}; + +export async function getRemoveWalletInstructionAsync< + TAccountAuthority extends string, + TAccountConfig extends string, + TAccountWallet extends string, + TAccountAbWallet extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: RemoveWalletAsyncInput< + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >, + config?: { programAddress?: TProgramAddress }, +): Promise< + RemoveWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + > +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + authority: { value: input.authority ?? null, isWritable: true }, + config: { value: input.config ?? null, isWritable: false }, + wallet: { value: input.wallet ?? null, isWritable: false }, + abWallet: { value: input.abWallet ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.config.value) { + accounts.config.value = await findConfigPda(); + } + if (!accounts.abWallet.value) { + accounts.abWallet.value = await findAbWalletPda({ + wallet: getAddressFromResolvedInstructionAccount('wallet', accounts.wallet.value), + }); + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('authority', accounts.authority), + getAccountMeta('config', accounts.config), + getAccountMeta('wallet', accounts.wallet), + getAccountMeta('abWallet', accounts.abWallet), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getRemoveWalletInstructionDataEncoder().encode({}), + programAddress, + } as RemoveWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >); +} + +export type RemoveWalletInput< + TAccountAuthority extends string = string, + TAccountConfig extends string = string, + TAccountWallet extends string = string, + TAccountAbWallet extends string = string, + TAccountSystemProgram extends string = string, +> = { + authority: TransactionSigner; + config: Address; + wallet: Address; + abWallet: Address; + systemProgram?: Address; +}; + +export function getRemoveWalletInstruction< + TAccountAuthority extends string, + TAccountConfig extends string, + TAccountWallet extends string, + TAccountAbWallet extends string, + TAccountSystemProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: RemoveWalletInput< + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >, + config?: { programAddress?: TProgramAddress }, +): RemoveWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + authority: { value: input.authority ?? null, isWritable: true }, + config: { value: input.config ?? null, isWritable: false }, + wallet: { value: input.wallet ?? null, isWritable: false }, + abWallet: { value: input.abWallet ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('authority', accounts.authority), + getAccountMeta('config', accounts.config), + getAccountMeta('wallet', accounts.wallet), + getAccountMeta('abWallet', accounts.abWallet), + getAccountMeta('systemProgram', accounts.systemProgram), + ], + data: getRemoveWalletInstructionDataEncoder().encode({}), + programAddress, + } as RemoveWalletInstruction< + TProgramAddress, + TAccountAuthority, + TAccountConfig, + TAccountWallet, + TAccountAbWallet, + TAccountSystemProgram + >); +} + +export type ParsedRemoveWalletInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + authority: TAccountMetas[0]; + config: TAccountMetas[1]; + wallet: TAccountMetas[2]; + abWallet: TAccountMetas[3]; + systemProgram: TAccountMetas[4]; + }; + data: RemoveWalletInstructionData; +}; + +export function parseRemoveWalletInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedRemoveWalletInstruction { + if (instruction.accounts.length < 5) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 5, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + authority: getNextAccount(), + config: getNextAccount(), + wallet: getNextAccount(), + abWallet: getNextAccount(), + systemProgram: getNextAccount(), + }, + data: getRemoveWalletInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/resizeMetaList.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/resizeMetaList.ts new file mode 100644 index 000000000..872e15e72 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/resizeMetaList.ts @@ -0,0 +1,310 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, + type WritableSignerAccount, +} from '@solana/kit'; +import { + getAccountMetaFactory, + getAddressFromResolvedInstructionAccount, + type ResolvedInstructionAccount, +} from '@solana/program-client-core'; +import { findExtraMetasAccountPda } from '../pdas'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const RESIZE_META_LIST_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([244, 53, 88, 253, 57, 31, 94, 149]); + +export function getResizeMetaListDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(RESIZE_META_LIST_DISCRIMINATOR); +} + +export type ResizeMetaListInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountPayer extends string | AccountMeta = string, + TAccountMint extends string | AccountMeta = string, + TAccountExtraMetasAccount extends string | AccountMeta = string, + TAccountSystemProgram extends string | AccountMeta = '11111111111111111111111111111111', + TAccountTokenProgram extends string | AccountMeta = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountPayer extends string + ? WritableSignerAccount & AccountSignerMeta + : TAccountPayer, + TAccountMint extends string ? ReadonlyAccount : TAccountMint, + TAccountExtraMetasAccount extends string + ? WritableAccount + : TAccountExtraMetasAccount, + TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, + TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, + ...TRemainingAccounts, + ] + >; + +export type ResizeMetaListInstructionData = { discriminator: ReadonlyUint8Array }; + +export type ResizeMetaListInstructionDataArgs = {}; + +export function getResizeMetaListInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), value => ({ + ...value, + discriminator: RESIZE_META_LIST_DISCRIMINATOR, + })); +} + +export function getResizeMetaListInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]); +} + +export function getResizeMetaListInstructionDataCodec(): FixedSizeCodec< + ResizeMetaListInstructionDataArgs, + ResizeMetaListInstructionData +> { + return combineCodec(getResizeMetaListInstructionDataEncoder(), getResizeMetaListInstructionDataDecoder()); +} + +export type ResizeMetaListAsyncInput< + TAccountPayer extends string = string, + TAccountMint extends string = string, + TAccountExtraMetasAccount extends string = string, + TAccountSystemProgram extends string = string, + TAccountTokenProgram extends string = string, +> = { + payer: TransactionSigner; + mint: Address; + extraMetasAccount?: Address; + systemProgram?: Address; + tokenProgram?: Address; +}; + +export async function getResizeMetaListInstructionAsync< + TAccountPayer extends string, + TAccountMint extends string, + TAccountExtraMetasAccount extends string, + TAccountSystemProgram extends string, + TAccountTokenProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: ResizeMetaListAsyncInput< + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >, + config?: { programAddress?: TProgramAddress }, +): Promise< + ResizeMetaListInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + > +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: false }, + extraMetasAccount: { value: input.extraMetasAccount ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.extraMetasAccount.value) { + accounts.extraMetasAccount.value = await findExtraMetasAccountPda({ + mint: getAddressFromResolvedInstructionAccount('mint', accounts.mint.value), + }); + } + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('mint', accounts.mint), + getAccountMeta('extraMetasAccount', accounts.extraMetasAccount), + getAccountMeta('systemProgram', accounts.systemProgram), + getAccountMeta('tokenProgram', accounts.tokenProgram), + ], + data: getResizeMetaListInstructionDataEncoder().encode({}), + programAddress, + } as ResizeMetaListInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >); +} + +export type ResizeMetaListInput< + TAccountPayer extends string = string, + TAccountMint extends string = string, + TAccountExtraMetasAccount extends string = string, + TAccountSystemProgram extends string = string, + TAccountTokenProgram extends string = string, +> = { + payer: TransactionSigner; + mint: Address; + extraMetasAccount: Address; + systemProgram?: Address; + tokenProgram?: Address; +}; + +export function getResizeMetaListInstruction< + TAccountPayer extends string, + TAccountMint extends string, + TAccountExtraMetasAccount extends string, + TAccountSystemProgram extends string, + TAccountTokenProgram extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: ResizeMetaListInput< + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >, + config?: { programAddress?: TProgramAddress }, +): ResizeMetaListInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + payer: { value: input.payer ?? null, isWritable: true }, + mint: { value: input.mint ?? null, isWritable: false }, + extraMetasAccount: { value: input.extraMetasAccount ?? null, isWritable: true }, + systemProgram: { value: input.systemProgram ?? null, isWritable: false }, + tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.systemProgram.value) { + accounts.systemProgram.value = + '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; + } + if (!accounts.tokenProgram.value) { + accounts.tokenProgram.value = + 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' as Address<'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('payer', accounts.payer), + getAccountMeta('mint', accounts.mint), + getAccountMeta('extraMetasAccount', accounts.extraMetasAccount), + getAccountMeta('systemProgram', accounts.systemProgram), + getAccountMeta('tokenProgram', accounts.tokenProgram), + ], + data: getResizeMetaListInstructionDataEncoder().encode({}), + programAddress, + } as ResizeMetaListInstruction< + TProgramAddress, + TAccountPayer, + TAccountMint, + TAccountExtraMetasAccount, + TAccountSystemProgram, + TAccountTokenProgram + >); +} + +export type ParsedResizeMetaListInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + payer: TAccountMetas[0]; + mint: TAccountMetas[1]; + extraMetasAccount: TAccountMetas[2]; + systemProgram: TAccountMetas[3]; + tokenProgram: TAccountMetas[4]; + }; + data: ResizeMetaListInstructionData; +}; + +export function parseResizeMetaListInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedResizeMetaListInstruction { + if (instruction.accounts.length < 5) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 5, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + payer: getNextAccount(), + mint: getNextAccount(), + extraMetasAccount: getNextAccount(), + systemProgram: getNextAccount(), + tokenProgram: getNextAccount(), + }, + data: getResizeMetaListInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/txHook.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/txHook.ts new file mode 100644 index 000000000..1c3a28da0 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/instructions/txHook.ts @@ -0,0 +1,237 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + fixDecoderSize, + fixEncoderSize, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + getU64Decoder, + getU64Encoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, +} from '@solana/kit'; +import { getAccountMetaFactory, type ResolvedInstructionAccount } from '@solana/program-client-core'; +import { ABL_TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const TX_HOOK_DISCRIMINATOR: ReadonlyUint8Array = new Uint8Array([105, 37, 101, 197, 75, 251, 102, 26]); + +export function getTxHookDiscriminatorBytes(): ReadonlyUint8Array { + return fixEncoderSize(getBytesEncoder(), 8).encode(TX_HOOK_DISCRIMINATOR); +} + +export type TxHookInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountSourceTokenAccount extends string | AccountMeta = string, + TAccountMint extends string | AccountMeta = string, + TAccountDestinationTokenAccount extends string | AccountMeta = string, + TAccountOwnerDelegate extends string | AccountMeta = string, + TAccountMetaList extends string | AccountMeta = string, + TAccountSourceAbWallet extends string | AccountMeta = string, + TAccountDestinationAbWallet extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountSourceTokenAccount extends string + ? ReadonlyAccount + : TAccountSourceTokenAccount, + TAccountMint extends string ? ReadonlyAccount : TAccountMint, + TAccountDestinationTokenAccount extends string + ? ReadonlyAccount + : TAccountDestinationTokenAccount, + TAccountOwnerDelegate extends string ? ReadonlyAccount : TAccountOwnerDelegate, + TAccountMetaList extends string ? ReadonlyAccount : TAccountMetaList, + TAccountSourceAbWallet extends string ? ReadonlyAccount : TAccountSourceAbWallet, + TAccountDestinationAbWallet extends string + ? ReadonlyAccount + : TAccountDestinationAbWallet, + ...TRemainingAccounts, + ] + >; + +export type TxHookInstructionData = { discriminator: ReadonlyUint8Array; amount: bigint }; + +export type TxHookInstructionDataArgs = { amount: number | bigint }; + +export function getTxHookInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], + ['amount', getU64Encoder()], + ]), + value => ({ ...value, discriminator: TX_HOOK_DISCRIMINATOR }), + ); +} + +export function getTxHookInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([ + ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], + ['amount', getU64Decoder()], + ]); +} + +export function getTxHookInstructionDataCodec(): FixedSizeCodec { + return combineCodec(getTxHookInstructionDataEncoder(), getTxHookInstructionDataDecoder()); +} + +export type TxHookInput< + TAccountSourceTokenAccount extends string = string, + TAccountMint extends string = string, + TAccountDestinationTokenAccount extends string = string, + TAccountOwnerDelegate extends string = string, + TAccountMetaList extends string = string, + TAccountSourceAbWallet extends string = string, + TAccountDestinationAbWallet extends string = string, +> = { + sourceTokenAccount: Address; + mint: Address; + destinationTokenAccount: Address; + ownerDelegate: Address; + metaList: Address; + sourceAbWallet: Address; + destinationAbWallet: Address; + amount: TxHookInstructionDataArgs['amount']; +}; + +export function getTxHookInstruction< + TAccountSourceTokenAccount extends string, + TAccountMint extends string, + TAccountDestinationTokenAccount extends string, + TAccountOwnerDelegate extends string, + TAccountMetaList extends string, + TAccountSourceAbWallet extends string, + TAccountDestinationAbWallet extends string, + TProgramAddress extends Address = typeof ABL_TOKEN_PROGRAM_ADDRESS, +>( + input: TxHookInput< + TAccountSourceTokenAccount, + TAccountMint, + TAccountDestinationTokenAccount, + TAccountOwnerDelegate, + TAccountMetaList, + TAccountSourceAbWallet, + TAccountDestinationAbWallet + >, + config?: { programAddress?: TProgramAddress }, +): TxHookInstruction< + TProgramAddress, + TAccountSourceTokenAccount, + TAccountMint, + TAccountDestinationTokenAccount, + TAccountOwnerDelegate, + TAccountMetaList, + TAccountSourceAbWallet, + TAccountDestinationAbWallet +> { + // Program address. + const programAddress = config?.programAddress ?? ABL_TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + sourceTokenAccount: { value: input.sourceTokenAccount ?? null, isWritable: false }, + mint: { value: input.mint ?? null, isWritable: false }, + destinationTokenAccount: { value: input.destinationTokenAccount ?? null, isWritable: false }, + ownerDelegate: { value: input.ownerDelegate ?? null, isWritable: false }, + metaList: { value: input.metaList ?? null, isWritable: false }, + sourceAbWallet: { value: input.sourceAbWallet ?? null, isWritable: false }, + destinationAbWallet: { value: input.destinationAbWallet ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('sourceTokenAccount', accounts.sourceTokenAccount), + getAccountMeta('mint', accounts.mint), + getAccountMeta('destinationTokenAccount', accounts.destinationTokenAccount), + getAccountMeta('ownerDelegate', accounts.ownerDelegate), + getAccountMeta('metaList', accounts.metaList), + getAccountMeta('sourceAbWallet', accounts.sourceAbWallet), + getAccountMeta('destinationAbWallet', accounts.destinationAbWallet), + ], + data: getTxHookInstructionDataEncoder().encode(args as TxHookInstructionDataArgs), + programAddress, + } as TxHookInstruction< + TProgramAddress, + TAccountSourceTokenAccount, + TAccountMint, + TAccountDestinationTokenAccount, + TAccountOwnerDelegate, + TAccountMetaList, + TAccountSourceAbWallet, + TAccountDestinationAbWallet + >); +} + +export type ParsedTxHookInstruction< + TProgram extends string = typeof ABL_TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + sourceTokenAccount: TAccountMetas[0]; + mint: TAccountMetas[1]; + destinationTokenAccount: TAccountMetas[2]; + ownerDelegate: TAccountMetas[3]; + metaList: TAccountMetas[4]; + sourceAbWallet: TAccountMetas[5]; + destinationAbWallet: TAccountMetas[6]; + }; + data: TxHookInstructionData; +}; + +export function parseTxHookInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedTxHookInstruction { + if (instruction.accounts.length < 7) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 7, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + sourceTokenAccount: getNextAccount(), + mint: getNextAccount(), + destinationTokenAccount: getNextAccount(), + ownerDelegate: getNextAccount(), + metaList: getNextAccount(), + sourceAbWallet: getNextAccount(), + destinationAbWallet: getNextAccount(), + }, + data: getTxHookInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/package.json b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/package.json new file mode 100644 index 000000000..178c1c825 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/package.json @@ -0,0 +1,22 @@ +{ + "name": "js-client", + "version": "1.0.0", + "description": "", + "main": "src/index.ts", + "files": [ + "./dist/src", + "./dist/types", + "./src/" + ], + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "peerDependencies": { + "@solana/kit": "^7.1.0" + }, + "dependencies": { + "@solana/program-client-core": "^7.1.0" + } +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/abWallet.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/abWallet.ts new file mode 100644 index 000000000..288b460c9 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/abWallet.ts @@ -0,0 +1,35 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + getAddressEncoder, + getBytesEncoder, + getProgramDerivedAddress, + type Address, + type ProgramDerivedAddress, +} from '@solana/kit'; + +export type AbWalletSeeds = { + wallet: Address; +}; + +export async function findAbWalletPda( + seeds: AbWalletSeeds, + config: { programAddress?: Address | undefined } = {}, +): Promise { + const { + programAddress = '3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi' as Address<'3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi'>, + } = config; + return await getProgramDerivedAddress({ + programAddress, + seeds: [ + getBytesEncoder().encode(new Uint8Array([97, 98, 95, 119, 97, 108, 108, 101, 116])), + getAddressEncoder().encode(seeds.wallet), + ], + }); +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/config.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/config.ts new file mode 100644 index 000000000..88b280ca0 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/config.ts @@ -0,0 +1,21 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { getBytesEncoder, getProgramDerivedAddress, type Address, type ProgramDerivedAddress } from '@solana/kit'; + +export async function findConfigPda( + config: { programAddress?: Address | undefined } = {}, +): Promise { + const { + programAddress = '3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi' as Address<'3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi'>, + } = config; + return await getProgramDerivedAddress({ + programAddress, + seeds: [getBytesEncoder().encode(new Uint8Array([99, 111, 110, 102, 105, 103]))], + }); +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/extraMetasAccount.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/extraMetasAccount.ts new file mode 100644 index 000000000..1e87f96ff --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/extraMetasAccount.ts @@ -0,0 +1,39 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + getAddressEncoder, + getBytesEncoder, + getProgramDerivedAddress, + type Address, + type ProgramDerivedAddress, +} from '@solana/kit'; + +export type ExtraMetasAccountSeeds = { + mint: Address; +}; + +export async function findExtraMetasAccountPda( + seeds: ExtraMetasAccountSeeds, + config: { programAddress?: Address | undefined } = {}, +): Promise { + const { + programAddress = '3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi' as Address<'3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi'>, + } = config; + return await getProgramDerivedAddress({ + programAddress, + seeds: [ + getBytesEncoder().encode( + new Uint8Array([ + 101, 120, 116, 114, 97, 45, 97, 99, 99, 111, 117, 110, 116, 45, 109, 101, 116, 97, 115, + ]), + ), + getAddressEncoder().encode(seeds.mint), + ], + }); +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/index.ts new file mode 100644 index 000000000..4a3fbf3c2 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/pdas/index.ts @@ -0,0 +1,11 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './abWallet'; +export * from './config'; +export * from './extraMetasAccount'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/programs/ablToken.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/programs/ablToken.ts new file mode 100644 index 000000000..ea833f500 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/programs/ablToken.ts @@ -0,0 +1,357 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + assertIsInstructionWithAccounts, + containsBytes, + extendClient, + fixEncoderSize, + getBytesEncoder, + SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, + SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, + SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, + SolanaError, + type Address, + type ClientWithPayer, + type ClientWithRpc, + type ClientWithTransactionPlanning, + type ClientWithTransactionSending, + type ExtendedClient, + type GetAccountInfoApi, + type GetMultipleAccountsApi, + type Instruction, + type InstructionWithData, + type ReadonlyUint8Array, +} from '@solana/kit'; +import { + addSelfFetchFunctions, + addSelfPlanAndSendFunctions, + type SelfFetchFunctions, + type SelfPlanAndSendFunctions, +} from '@solana/program-client-core'; +import { + getABWalletCodec, + getConfigCodec, + type ABWallet, + type ABWalletArgs, + type Config, + type ConfigArgs, +} from '../accounts'; +import { + getAttachToMintInstructionAsync, + getChangeModeInstruction, + getInitConfigInstructionAsync, + getInitMintInstructionAsync, + getInitWalletInstructionAsync, + getRemoveWalletInstructionAsync, + getResizeMetaListInstructionAsync, + getTxHookInstruction, + parseAttachToMintInstruction, + parseChangeModeInstruction, + parseInitConfigInstruction, + parseInitMintInstruction, + parseInitWalletInstruction, + parseRemoveWalletInstruction, + parseResizeMetaListInstruction, + parseTxHookInstruction, + type AttachToMintAsyncInput, + type ChangeModeInput, + type InitConfigAsyncInput, + type InitMintAsyncInput, + type InitWalletAsyncInput, + type ParsedAttachToMintInstruction, + type ParsedChangeModeInstruction, + type ParsedInitConfigInstruction, + type ParsedInitMintInstruction, + type ParsedInitWalletInstruction, + type ParsedRemoveWalletInstruction, + type ParsedResizeMetaListInstruction, + type ParsedTxHookInstruction, + type RemoveWalletAsyncInput, + type ResizeMetaListAsyncInput, + type TxHookInput, +} from '../instructions'; +import { findAbWalletPda, findConfigPda, findExtraMetasAccountPda } from '../pdas'; + +export const ABL_TOKEN_PROGRAM_ADDRESS = + '3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi' as Address<'3ku1ZEGvBEEfhaYsAzBZuecTPEa58ZRhoVqHVGpGxVGi'>; + +export enum AblTokenAccount { + ABWallet, + Config, +} + +export function identifyAblTokenAccount(account: { data: ReadonlyUint8Array } | ReadonlyUint8Array): AblTokenAccount { + const data = 'data' in account ? account.data : account; + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([111, 162, 31, 45, 79, 239, 198, 72])), + 0, + ) + ) { + return AblTokenAccount.ABWallet; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([155, 12, 170, 224, 30, 250, 204, 130])), + 0, + ) + ) { + return AblTokenAccount.Config; + } + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, { + accountData: data, + programName: 'ablToken', + }); +} + +export enum AblTokenInstruction { + AttachToMint, + ChangeMode, + InitConfig, + InitMint, + InitWallet, + RemoveWallet, + ResizeMetaList, + TxHook, +} + +export function identifyAblTokenInstruction( + instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array, +): AblTokenInstruction { + const data = 'data' in instruction ? instruction.data : instruction; + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([203, 132, 125, 16, 50, 249, 174, 252])), + 0, + ) + ) { + return AblTokenInstruction.AttachToMint; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([124, 163, 122, 208, 67, 22, 162, 241])), + 0, + ) + ) { + return AblTokenInstruction.ChangeMode; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([23, 235, 115, 232, 168, 96, 1, 231])), + 0, + ) + ) { + return AblTokenInstruction.InitConfig; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([126, 176, 233, 16, 66, 117, 209, 125])), + 0, + ) + ) { + return AblTokenInstruction.InitMint; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([141, 132, 233, 130, 168, 183, 10, 119])), + 0, + ) + ) { + return AblTokenInstruction.InitWallet; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([26, 151, 38, 109, 151, 162, 104, 28])), + 0, + ) + ) { + return AblTokenInstruction.RemoveWallet; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([244, 53, 88, 253, 57, 31, 94, 149])), + 0, + ) + ) { + return AblTokenInstruction.ResizeMetaList; + } + if ( + containsBytes( + data, + fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([105, 37, 101, 197, 75, 251, 102, 26])), + 0, + ) + ) { + return AblTokenInstruction.TxHook; + } + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { + instructionData: data, + programName: 'ablToken', + }); +} + +export type ParsedAblTokenInstruction = + | ({ instructionType: AblTokenInstruction.AttachToMint } & ParsedAttachToMintInstruction) + | ({ instructionType: AblTokenInstruction.ChangeMode } & ParsedChangeModeInstruction) + | ({ instructionType: AblTokenInstruction.InitConfig } & ParsedInitConfigInstruction) + | ({ instructionType: AblTokenInstruction.InitMint } & ParsedInitMintInstruction) + | ({ instructionType: AblTokenInstruction.InitWallet } & ParsedInitWalletInstruction) + | ({ instructionType: AblTokenInstruction.RemoveWallet } & ParsedRemoveWalletInstruction) + | ({ instructionType: AblTokenInstruction.ResizeMetaList } & ParsedResizeMetaListInstruction) + | ({ instructionType: AblTokenInstruction.TxHook } & ParsedTxHookInstruction); + +export function parseAblTokenInstruction( + instruction: Instruction & InstructionWithData, +): ParsedAblTokenInstruction { + const instructionType = identifyAblTokenInstruction(instruction); + switch (instructionType) { + case AblTokenInstruction.AttachToMint: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.AttachToMint, ...parseAttachToMintInstruction(instruction) }; + } + case AblTokenInstruction.ChangeMode: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.ChangeMode, ...parseChangeModeInstruction(instruction) }; + } + case AblTokenInstruction.InitConfig: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.InitConfig, ...parseInitConfigInstruction(instruction) }; + } + case AblTokenInstruction.InitMint: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.InitMint, ...parseInitMintInstruction(instruction) }; + } + case AblTokenInstruction.InitWallet: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.InitWallet, ...parseInitWalletInstruction(instruction) }; + } + case AblTokenInstruction.RemoveWallet: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.RemoveWallet, ...parseRemoveWalletInstruction(instruction) }; + } + case AblTokenInstruction.ResizeMetaList: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: AblTokenInstruction.ResizeMetaList, + ...parseResizeMetaListInstruction(instruction), + }; + } + case AblTokenInstruction.TxHook: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: AblTokenInstruction.TxHook, ...parseTxHookInstruction(instruction) }; + } + default: + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { + instructionType: instructionType as string, + programName: 'ablToken', + }); + } +} + +export type AblTokenPlugin = { + accounts: AblTokenPluginAccounts; + instructions: AblTokenPluginInstructions; + pdas: AblTokenPluginPdas; + identifyAccount: typeof identifyAblTokenAccount; + identifyInstruction: typeof identifyAblTokenInstruction; + parseInstruction: typeof parseAblTokenInstruction; +}; + +export type AblTokenPluginAccounts = { + aBWallet: ReturnType & SelfFetchFunctions; + config: ReturnType & SelfFetchFunctions; +}; + +export type AblTokenPluginInstructions = { + attachToMint: ( + input: MakeOptional, + ) => ReturnType & SelfPlanAndSendFunctions; + changeMode: (input: ChangeModeInput) => ReturnType & SelfPlanAndSendFunctions; + initConfig: ( + input: MakeOptional, + ) => ReturnType & SelfPlanAndSendFunctions; + initMint: ( + input: MakeOptional, + ) => ReturnType & SelfPlanAndSendFunctions; + initWallet: ( + input: InitWalletAsyncInput, + ) => ReturnType & SelfPlanAndSendFunctions; + removeWallet: ( + input: RemoveWalletAsyncInput, + ) => ReturnType & SelfPlanAndSendFunctions; + resizeMetaList: ( + input: MakeOptional, + ) => ReturnType & SelfPlanAndSendFunctions; + txHook: (input: TxHookInput) => ReturnType & SelfPlanAndSendFunctions; +}; + +export type AblTokenPluginPdas = { + extraMetasAccount: typeof findExtraMetasAccountPda; + config: typeof findConfigPda; + abWallet: typeof findAbWalletPda; +}; + +export type AblTokenPluginRequirements = ClientWithRpc & + ClientWithPayer & + ClientWithTransactionPlanning & + ClientWithTransactionSending; + +export function ablTokenProgram() { + return (client: T): ExtendedClient => { + return extendClient(client, { + ablToken: { + accounts: { + aBWallet: addSelfFetchFunctions(client, getABWalletCodec()), + config: addSelfFetchFunctions(client, getConfigCodec()), + }, + instructions: { + attachToMint: input => + addSelfPlanAndSendFunctions( + client, + getAttachToMintInstructionAsync({ ...input, payer: input.payer ?? client.payer }), + ), + changeMode: input => addSelfPlanAndSendFunctions(client, getChangeModeInstruction(input)), + initConfig: input => + addSelfPlanAndSendFunctions( + client, + getInitConfigInstructionAsync({ ...input, payer: input.payer ?? client.payer }), + ), + initMint: input => + addSelfPlanAndSendFunctions( + client, + getInitMintInstructionAsync({ ...input, payer: input.payer ?? client.payer }), + ), + initWallet: input => addSelfPlanAndSendFunctions(client, getInitWalletInstructionAsync(input)), + removeWallet: input => addSelfPlanAndSendFunctions(client, getRemoveWalletInstructionAsync(input)), + resizeMetaList: input => + addSelfPlanAndSendFunctions( + client, + getResizeMetaListInstructionAsync({ ...input, payer: input.payer ?? client.payer }), + ), + txHook: input => addSelfPlanAndSendFunctions(client, getTxHookInstruction(input)), + }, + pdas: { extraMetasAccount: findExtraMetasAccountPda, config: findConfigPda, abWallet: findAbWalletPda }, + identifyAccount: identifyAblTokenAccount, + identifyInstruction: identifyAblTokenInstruction, + parseInstruction: parseAblTokenInstruction, + }, + }); + }; +} + +type MakeOptional = Omit & Partial>; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/programs/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/programs/index.ts new file mode 100644 index 000000000..e6e57f32e --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/programs/index.ts @@ -0,0 +1,9 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './ablToken'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/types/index.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/types/index.ts new file mode 100644 index 000000000..bf899c594 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/types/index.ts @@ -0,0 +1,9 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +export * from './mode'; diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/types/mode.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/types/mode.ts new file mode 100644 index 000000000..4388d9d05 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/generated/types/mode.ts @@ -0,0 +1,36 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + combineCodec, + getEnumDecoder, + getEnumEncoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, +} from '@solana/kit'; + +export enum Mode { + Allow, + Block, + Mixed, +} + +export type ModeArgs = Mode; + +export function getModeEncoder(): FixedSizeEncoder { + return getEnumEncoder(Mode); +} + +export function getModeDecoder(): FixedSizeDecoder { + return getEnumDecoder(Mode); +} + +export function getModeCodec(): FixedSizeCodec { + return combineCodec(getModeEncoder(), getModeDecoder()); +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/src/hooks/use-send-instruction.ts b/tokens/token-2022/transfer-hook/allow-block-list-token/src/hooks/use-send-instruction.ts new file mode 100644 index 000000000..a6553bca6 --- /dev/null +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/src/hooks/use-send-instruction.ts @@ -0,0 +1,52 @@ +'use client'; + +import { useSolanaClient, useTransactionPreparer } from '@solana/connector/react'; +import { + appendTransactionMessageInstructions, + assertIsTransactionWithBlockhashLifetime, + createTransactionMessage, + getSignatureFromTransaction, + pipe, + sendAndConfirmTransactionFactory, + setTransactionMessageFeePayerSigner, + signTransactionMessageWithSigners, + type Instruction, + type TransactionSigner, +} from '@solana/kit'; +import { useMemo } from 'react'; + +/** + * Signs and sends one or more instructions with the connected wallet. + * + * `useTransactionPreparer` (from @solana/connector) attaches the latest blockhash, and + * `client.rpc`/`client.rpcSubscriptions` (from `useSolanaClient`) point at the cluster the + * wallet connector is configured for, so sending follows the user's cluster selection. + */ +export function useSendInstruction() { + const { client } = useSolanaClient(); + const { prepare } = useTransactionPreparer(); + const sendAndConfirm = useMemo( + () => + client + ? sendAndConfirmTransactionFactory({ rpc: client.rpc, rpcSubscriptions: client.rpcSubscriptions }) + : null, + [client], + ); + + return async (ix: Instruction | Instruction[], feePayer: TransactionSigner): Promise => { + if (!sendAndConfirm) throw new Error('Solana client not ready'); + + const instructions = Array.isArray(ix) ? ix : [ix]; + const transactionMessage = pipe( + createTransactionMessage({ version: 0 }), + tx => setTransactionMessageFeePayerSigner(feePayer, tx), + tx => appendTransactionMessageInstructions(instructions, tx), + ); + + const prepared = await prepare(transactionMessage); + const signedTransaction = await signTransactionMessageWithSigners(prepared); + assertIsTransactionWithBlockhashLifetime(signedTransaction); + await sendAndConfirm(signedTransaction, { commitment: 'confirmed' }); + return getSignatureFromTransaction(signedTransaction); + }; +} diff --git a/tokens/token-2022/transfer-hook/allow-block-list-token/tsconfig.json b/tokens/token-2022/transfer-hook/allow-block-list-token/tsconfig.json index 230b97f01..3541a5bf6 100644 --- a/tokens/token-2022/transfer-hook/allow-block-list-token/tsconfig.json +++ b/tokens/token-2022/transfer-hook/allow-block-list-token/tsconfig.json @@ -20,7 +20,6 @@ ], "baseUrl": ".", "paths": { - "@project/anchor": ["anchor/src"], "@/*": ["./src/*"] } },