@joai/warps-adapter-solana 1.0.0-beta.24 → 1.0.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/chains/solana.ts","../src/WarpSolanaDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/tokens/solana-mainnet.ts","../src/tokens/solana-devnet.ts","../src/tokens/solana-testnet.ts","../src/WarpSolanaExecutor.ts","../src/WarpSolanaOutput.ts","../src/WarpSolanaSerializer.ts","../src/WarpSolanaExplorer.ts","../src/WarpSolanaWallet.ts","../src/providers/MnemonicWalletProvider.ts","../src/providers/PrivateKeyWalletProvider.ts","../src/providers/ReadOnlyWalletProvider.ts","../src/chains/common.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './main'\nexport * from './tokens'\nexport * from './types'\nexport * from './WarpSolanaDataLoader'\nexport * from './WarpSolanaExecutor'\nexport * from './WarpSolanaExplorer'\nexport * from './WarpSolanaOutput'\nexport * from './WarpSolanaSerializer'\nexport * from './WarpSolanaWallet'\n","import { ChainAdapterFactory, WarpChainAsset, WarpChainName } from '@joai/warps'\nimport { createSolanaAdapter } from './common'\n\nexport const NativeTokenSol: WarpChainAsset = {\n chain: WarpChainName.Solana,\n identifier: 'SOL',\n symbol: 'SOL',\n name: 'SOL',\n decimals: 9,\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/sol.svg',\n}\n\nexport const SolanaAdapter: ChainAdapterFactory = createSolanaAdapter(WarpChainName.Solana, {\n mainnet: {\n name: WarpChainName.Solana,\n displayName: 'Solana Mainnet',\n chainId: '101',\n blockTime: 400,\n addressHrp: '',\n defaultApiUrl: 'https://api.mainnet-beta.solana.com',\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/solana.svg',\n nativeToken: NativeTokenSol,\n },\n testnet: {\n name: WarpChainName.Solana,\n displayName: 'Solana Testnet',\n chainId: '103',\n blockTime: 400,\n addressHrp: '',\n defaultApiUrl: 'https://api.testnet.solana.com',\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/solana.svg',\n nativeToken: NativeTokenSol,\n },\n devnet: {\n name: WarpChainName.Solana,\n displayName: 'Solana Devnet',\n chainId: '103',\n blockTime: 400,\n addressHrp: '',\n defaultApiUrl: 'https://api.devnet.solana.com',\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/solana.svg',\n nativeToken: NativeTokenSol,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n getWarpChainAssetLogoUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainEnv,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@joai/warps'\nimport { Connection, PublicKey } from '@solana/web3.js'\nimport { getAccount, getMint } from '@solana/spl-token'\nimport { WarpSolanaConstants } from './constants'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\nexport class WarpSolanaDataLoader implements AdapterWarpDataLoader {\n public readonly connection: Connection\n private cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.cache = new WarpCache(config.env, config.cache)\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const publicKey = new PublicKey(address)\n const balance = await this.connection.getBalance(publicKey)\n\n return {\n chain: this.chain.name,\n address,\n balance: BigInt(balance),\n }\n } catch (error) {\n throw new Error(`Failed to get account: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getTokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0n ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.metadata.name,\n symbol: tokenBalance.metadata.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.metadata.decimals,\n logoUrl: tokenBalance.metadata.logoUrl || '',\n })\n }\n }\n\n return assets\n } catch (error) {\n return []\n }\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier || identifier === 'SOL') {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownToken = findKnownTokenById(this.chain.name, env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl,\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n const signature = identifier\n\n if (awaitCompleted) {\n const tx = await this.waitForTransaction(signature)\n if (!tx) {\n return this.createFailedAction(signature, 'Transaction not found after waiting for completion')\n }\n return this.parseTransactionToAction(tx, signature)\n }\n\n try {\n const tx = await this.connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n if (!tx) return null\n return this.parseTransactionToAction(tx, signature)\n } catch {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getTokenBalances(address: string): Promise<Array<{ tokenAddress: string; balance: bigint; metadata: { name: string; symbol: string; decimals: number; logoUrl: string } }>> {\n try {\n const publicKey = new PublicKey(address)\n const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(publicKey, {\n programId: new PublicKey(WarpSolanaConstants.Programs.TokenProgram),\n })\n\n const env: WarpChainEnv = (this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet') as WarpChainEnv\n const knownTokens = getKnownTokensForChain(this.chain.name, env)\n\n const balances = await Promise.all(\n tokenAccounts.value.map(async (tokenAccount: any) => {\n const mintAddress = tokenAccount.account.data.parsed.info.mint\n const balance = BigInt(tokenAccount.account.data.parsed.info.tokenAmount.amount)\n const decimals = tokenAccount.account.data.parsed.info.tokenAmount.decimals\n\n const knownToken = knownTokens.find((token) => token.identifier === mintAddress)\n\n if (knownToken) {\n return {\n tokenAddress: mintAddress,\n balance,\n metadata: {\n name: knownToken.name,\n symbol: knownToken.symbol,\n decimals: knownToken.decimals,\n logoUrl: getWarpChainAssetLogoUrl(knownToken, this.config) || '',\n },\n }\n }\n\n const metadata = await this.getTokenMetadata(mintAddress)\n\n return {\n tokenAddress: mintAddress,\n balance,\n metadata: {\n name: metadata.name,\n symbol: metadata.symbol,\n decimals: metadata.decimals || decimals,\n logoUrl: metadata.logoUrl,\n },\n }\n })\n )\n\n return balances.filter((b: any) => b.balance > 0n)\n } catch (error) {\n return []\n }\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n try {\n const mintPublicKey = new PublicKey(tokenAddress)\n const mintInfo = await getMint(this.connection, mintPublicKey)\n\n return {\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n decimals: mintInfo.decimals,\n logoUrl: '',\n }\n } catch (error) {\n return {\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n decimals: WarpSolanaConstants.NativeToken.Decimals,\n logoUrl: '',\n }\n }\n }\n\n private async waitForTransaction(signature: string): Promise<any> {\n const maxWaitTime = 300000\n const startTime = Date.now()\n let delay = 1000\n let lastError: any = null\n let attempts = 0\n\n while (Date.now() - startTime < maxWaitTime) {\n attempts++\n try {\n const tx = await this.tryFetchTransaction(signature)\n if (tx) return tx\n } catch (err: any) {\n lastError = err\n }\n if (Date.now() - startTime < maxWaitTime) {\n delay = this.calculateBackoffDelay(delay, attempts, lastError)\n await new Promise((resolve) => setTimeout(resolve, delay))\n }\n }\n\n try {\n return await this.connection.getTransaction(signature, { commitment: 'confirmed', maxSupportedTransactionVersion: 0 })\n } catch {\n return null\n }\n }\n\n private async tryFetchTransaction(signature: string): Promise<any> {\n try {\n const confirmation = await Promise.race([\n this.connection.confirmTransaction(signature, 'finalized'),\n new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 60000)),\n ])\n if (confirmation) {\n const tx = await this.connection.getTransaction(signature, { commitment: 'finalized', maxSupportedTransactionVersion: 0 })\n if (tx) return tx\n }\n } catch {\n // Try direct fetch\n }\n\n try {\n const tx = await this.connection.getTransaction(signature, { commitment: 'finalized', maxSupportedTransactionVersion: 0 })\n if (tx) return tx\n } catch {\n // Try confirmed\n }\n\n try {\n return await this.connection.getTransaction(signature, { commitment: 'confirmed', maxSupportedTransactionVersion: 0 })\n } catch {\n return null\n }\n }\n\n private calculateBackoffDelay(currentDelay: number, attempts: number, lastError: any): number {\n if (lastError?.message?.includes('429') || lastError?.message?.includes('rate limit')) {\n return Math.min(currentDelay * 2, 30000)\n }\n\n if (attempts % 10 === 0) {\n return 2000\n }\n\n return Math.min(currentDelay * 1.1, 15000)\n }\n\n private createFailedAction(signature: string, error: string): WarpChainAction {\n return {\n chain: this.chain.name,\n id: signature,\n receiver: '',\n sender: '',\n value: 0n,\n function: '',\n status: 'failed',\n createdAt: new Date().toISOString(),\n error,\n tx: {\n signature,\n slot: 0,\n blockTime: null,\n err: { message: error },\n } as any,\n }\n }\n\n private parseTransactionToAction(tx: any, signature: string): WarpChainAction {\n const slot = tx.slot\n const blockTime = tx.blockTime ? new Date(tx.blockTime * 1000).toISOString() : new Date().toISOString()\n const accountKeys = this.extractAccountKeys(tx.transaction.message)\n const sender = accountKeys[0]?.toBase58() || ''\n const receiver = accountKeys.length > 1 ? accountKeys[1]?.toBase58() || '' : ''\n const value = this.calculateTransactionValue(tx.meta)\n const status = tx.meta?.err ? 'failed' : 'success'\n const functionName = this.determineFunctionName(tx.transaction.message)\n\n return {\n chain: this.chain.name,\n id: signature,\n receiver,\n sender,\n value,\n function: functionName,\n status,\n createdAt: blockTime,\n error: tx.meta?.err ? JSON.stringify(tx.meta.err) : null,\n tx: {\n signature,\n slot,\n blockTime,\n err: tx.meta?.err || null,\n } as any,\n }\n }\n\n private extractAccountKeys(message: any): PublicKey[] {\n if ('staticAccountKeys' in message) {\n return message.staticAccountKeys || []\n }\n\n try {\n const allKeys = (message as any).getAccountKeys?.()\n if (allKeys) {\n return allKeys.keySegments().flat() || []\n }\n } catch {\n // Ignore\n }\n\n return []\n }\n\n private calculateTransactionValue(meta: any): bigint {\n const preBalances = meta?.preBalances || []\n const postBalances = meta?.postBalances || []\n if (preBalances.length === 0 || postBalances.length === 0) return 0n\n return BigInt(Math.abs(postBalances[0] - preBalances[0]))\n }\n\n private determineFunctionName(message: any): string {\n let compiledInstructions: any[] = []\n if ('compiledInstructions' in message && Array.isArray(message.compiledInstructions)) {\n compiledInstructions = message.compiledInstructions\n }\n\n if (compiledInstructions.length === 0) return 'transfer'\n return compiledInstructions[0]?.programIdIndex !== undefined ? 'contract_call' : 'transfer'\n }\n}\n","export const WarpSolanaConstants = {\n ComputeUnitLimit: {\n Default: 200000,\n Transfer: 5000,\n TokenTransfer: 10000,\n ContractCall: 200000,\n },\n PriorityFee: {\n Default: 1000,\n },\n Validation: {\n MinComputeUnits: 1000,\n MaxComputeUnits: 1400000,\n },\n Programs: {\n TokenProgram: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n SystemProgram: '11111111111111111111111111111111',\n },\n NativeToken: {\n Identifier: 'SOL',\n Decimals: 9,\n },\n}\n\nexport enum SolanaExplorers {\n Solscan = 'solscan',\n SolscanMainnet = 'solscan_mainnet',\n SolscanDevnet = 'solscan_devnet',\n SolanaExplorer = 'solana_explorer',\n SolanaExplorerMainnet = 'solana_explorer_mainnet',\n SolanaExplorerDevnet = 'solana_explorer_devnet',\n}\n\nexport type ExplorerName = SolanaExplorers\n\nexport const SolanaExplorerMap = {\n solana: {\n mainnet: [SolanaExplorers.SolscanMainnet, SolanaExplorers.SolanaExplorerMainnet] as const,\n testnet: [SolanaExplorers.Solscan, SolanaExplorers.SolanaExplorer] as const,\n devnet: [SolanaExplorers.SolscanDevnet, SolanaExplorers.SolanaExplorerDevnet] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [SolanaExplorers.Solscan]: 'https://solscan.io',\n [SolanaExplorers.SolscanMainnet]: 'https://solscan.io',\n [SolanaExplorers.SolscanDevnet]: 'https://solscan.io',\n [SolanaExplorers.SolanaExplorer]: 'https://explorer.solana.com',\n [SolanaExplorers.SolanaExplorerMainnet]: 'https://explorer.solana.com',\n [SolanaExplorers.SolanaExplorerDevnet]: 'https://explorer.solana.com',\n}\n\nexport const SolanaExplorerNames = {\n mainnet: [SolanaExplorers.SolscanMainnet, SolanaExplorers.SolanaExplorerMainnet] as const,\n testnet: [SolanaExplorers.Solscan, SolanaExplorers.SolanaExplorer] as const,\n devnet: [SolanaExplorers.SolscanDevnet, SolanaExplorers.SolanaExplorerDevnet] as const,\n} as const\n\nexport const SolanaExplorerUrls: Record<ExplorerName, string> = ExplorerUrls\n\nexport const X402SolanaNetworkIdentifiers = {\n Mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n Devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n} as const\n\nexport const SupportedX402SolanaNetworks: string[] = [X402SolanaNetworkIdentifiers.Mainnet, X402SolanaNetworkIdentifiers.Devnet]\n","import { WarpChainName, WarpChainAsset, WarpChainEnv } from '@joai/warps'\nimport { SolanaMainnetTokens } from './tokens/solana-mainnet'\nimport { SolanaDevnetTokens } from './tokens/solana-devnet'\nimport { SolanaTestnetTokens } from './tokens/solana-testnet'\n\nexport const KnownTokens: Partial<Record<WarpChainName, Record<WarpChainEnv, WarpChainAsset[]>>> = {\n [WarpChainName.Solana]: {\n mainnet: SolanaMainnetTokens,\n testnet: SolanaTestnetTokens,\n devnet: SolanaDevnetTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChainName, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: WarpChainName, env: WarpChainEnv): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import { WarpChainAsset, WarpChainName } from '@joai/warps'\n\nconst SolanaChain = WarpChainName.Solana\n\nexport const SolanaMainnetTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'SOL',\n symbol: 'SOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: SolanaChain,\n identifier: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: SolanaChain,\n identifier: 'So11111111111111111111111111111111111111112',\n name: 'Wrapped SOL',\n symbol: 'WSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: '3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: SolanaChain,\n identifier: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs',\n name: 'Ethereum (Wormhole)',\n symbol: 'ETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/279/small/ethereum.png',\n },\n {\n chain: SolanaChain,\n identifier: '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj',\n name: 'Orca',\n symbol: 'ORCA',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/17547/small/orca.png',\n },\n {\n chain: SolanaChain,\n identifier: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So',\n name: 'Marinade SOL',\n symbol: 'mSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/17752/small/mSOL.png',\n },\n {\n chain: SolanaChain,\n identifier: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',\n name: 'JitoSOL',\n symbol: 'JitoSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/30168/small/jitosol.png',\n },\n {\n chain: SolanaChain,\n identifier: 'bSo13r4TkiE4KumL71LsHTPpL2suBYJxqsd4P6Bwv11',\n name: 'bSOL',\n symbol: 'bSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/30167/small/bsol.png',\n },\n {\n chain: SolanaChain,\n identifier: '7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT',\n name: 'UXD Stablecoin',\n symbol: 'UXD',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/25342/small/uxd.png',\n },\n {\n chain: SolanaChain,\n identifier: 'A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM',\n name: 'USD Coin (Wormhole)',\n symbol: 'USDCet',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n]\n","import { WarpChainAsset, WarpChainName } from '@joai/warps'\n\nconst SolanaChain = WarpChainName.Solana\n\nexport const SolanaDevnetTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'SOL',\n symbol: 'SOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: SolanaChain,\n identifier: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: SolanaChain,\n identifier: 'So11111111111111111111111111111111111111112',\n name: 'Wrapped SOL',\n symbol: 'WSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n]\n","import { WarpChainAsset, WarpChainName } from '@joai/warps'\n\nconst SolanaChain = WarpChainName.Solana\n\nexport const SolanaTestnetTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'SOL',\n symbol: 'SOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: SolanaChain,\n identifier: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: SolanaChain,\n identifier: 'So11111111111111111111111111111111111111112',\n name: 'Wrapped SOL',\n symbol: 'WSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n]\n","import { createAssociatedTokenAccountInstruction, createTransferInstruction, getAssociatedTokenAddress, TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport { ComputeBudgetProgram, Connection, MessageV0, PublicKey, SystemProgram, TransactionInstruction, VersionedTransaction } from '@solana/web3.js'\nimport {\n AdapterWarpExecutor,\n applyOutputToMessages,\n extractResolvedInputValues,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecutionResult,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@joai/warps'\nimport { WarpSolanaConstants } from './constants'\nimport { WarpSolanaOutput } from './WarpSolanaOutput'\nimport { WarpSolanaSerializer } from './WarpSolanaSerializer'\n\nexport class WarpSolanaExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpSolanaSerializer\n private readonly connection: Connection\n private readonly output: WarpSolanaOutput\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpSolanaSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.output = new WarpSolanaOutput(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<VersionedTransaction> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: VersionedTransaction | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpSolanaExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpSolanaExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpSolanaExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<VersionedTransaction> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpSolanaExecutor: createTransfer - user address not set')\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Destination address is required')\n\n const destinationPubkey = this.toPublicKey(executable.destination, 'Invalid destination address')\n const fromPubkey = this.toPublicKey(userWallet, 'Invalid user wallet address')\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet, destinationPubkey)\n }\n\n const instructions: TransactionInstruction[] = []\n\n if (executable.value > 0n) {\n instructions.push(SystemProgram.transfer({ fromPubkey, toPubkey: destinationPubkey, lamports: Number(executable.value) }))\n }\n\n if (executable.data) {\n const data = this.serializer.stringToTyped(executable.data)\n if (data && typeof data === 'string') {\n const dataBuffer = Buffer.from(data, 'base64')\n instructions.push(\n new TransactionInstruction({\n keys: [\n { pubkey: fromPubkey, isSigner: true, isWritable: true },\n { pubkey: destinationPubkey, isSigner: false, isWritable: true },\n ],\n programId: destinationPubkey,\n data: dataBuffer,\n })\n )\n }\n }\n\n return this.setTransactionDefaults(instructions, fromPubkey)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<VersionedTransaction> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpSolanaExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpSolanaExecutor: Contract action must have a function name')\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Contract address is required')\n\n const programId = this.toPublicKey(executable.destination, 'Invalid contract address')\n const fromPubkey = this.toPublicKey(userWallet, 'Invalid user wallet address')\n const instructions: TransactionInstruction[] = []\n\n const argsToUse = this.extractContractArgs(executable)\n const nativeArgs = argsToUse.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const instructionData = this.buildInstructionData(action, nativeArgs)\n\n const accounts = await this.buildInstructionAccounts(action, executable, fromPubkey, programId)\n await this.ensureATAs(action, accounts, fromPubkey, instructions)\n instructions.push(new TransactionInstruction({ keys: accounts, programId, data: instructionData }))\n\n if (executable.value > 0n) {\n instructions.push(SystemProgram.transfer({ fromPubkey, toPubkey: programId, lamports: Number(executable.value) }))\n }\n\n return this.setTransactionDefaults(instructions, fromPubkey)\n }\n\n private async ensureATAs(\n action: any,\n accounts: Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>,\n fromPubkey: PublicKey,\n instructions: TransactionInstruction[]\n ): Promise<void> {\n if (!action.accounts || !Array.isArray(action.accounts)) return\n\n const createdATAs = new Set<string>()\n\n for (let idx = 0; idx < action.accounts.length; idx++) {\n const accountDef = action.accounts[idx]\n const accountStr = typeof accountDef === 'string' ? accountDef : JSON.stringify(accountDef)\n\n if (accountStr.includes('{{USER_ATA:')) {\n const match = accountStr.match(/USER_ATA[:\\s]*([^\"}\\s]+)/)\n if (match) {\n const mintAddress = match[1]\n try {\n const mintPubkey = new PublicKey(mintAddress)\n const expectedAta = await getAssociatedTokenAddress(mintPubkey, fromPubkey)\n const ataKey = expectedAta.toBase58()\n\n if (!createdATAs.has(ataKey)) {\n createdATAs.add(ataKey)\n const ataInfo = await this.connection.getAccountInfo(expectedAta)\n if (!ataInfo) {\n instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, expectedAta, fromPubkey, mintPubkey))\n }\n }\n } catch {\n continue\n }\n }\n }\n\n if (accountStr.includes('{{RECEIVER_ATA:')) {\n const match = accountStr.match(/RECEIVER_ATA[:\\s]*([^\"}\\s:]+)[:\\s]*([^\"}\\s]+)/)\n if (match) {\n const mintAddress = match[1]\n const receiverAddress = match[2]\n try {\n const mintPubkey = new PublicKey(mintAddress)\n const receiverPubkey = new PublicKey(receiverAddress)\n const expectedAta = await getAssociatedTokenAddress(mintPubkey, receiverPubkey)\n const ataKey = expectedAta.toBase58()\n\n if (!createdATAs.has(ataKey)) {\n createdATAs.add(ataKey)\n const ataInfo = await this.connection.getAccountInfo(expectedAta)\n if (!ataInfo) {\n instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, expectedAta, receiverPubkey, mintPubkey))\n }\n }\n } catch {\n continue\n }\n }\n }\n }\n }\n\n private encodeInstructionData(instructionDef: any, args: any[], funcName: string): Buffer {\n try {\n let discriminatorBuffer: Buffer\n if (instructionDef.discriminator) {\n if (Buffer.isBuffer(instructionDef.discriminator)) {\n discriminatorBuffer = instructionDef.discriminator\n } else if (Array.isArray(instructionDef.discriminator)) {\n discriminatorBuffer = Buffer.from(instructionDef.discriminator)\n } else {\n discriminatorBuffer = Buffer.from(funcName).slice(0, 8)\n }\n } else {\n discriminatorBuffer = Buffer.from(funcName).slice(0, 8)\n }\n\n if (args.length > 0 && instructionDef.args && instructionDef.args.length > 0) {\n const encodedArgs = this.encodeArgs(args, instructionDef.args)\n // @ts-expect-error - Buffer.concat works correctly but TypeScript types are strict\n return Buffer.concat([discriminatorBuffer, encodedArgs])\n }\n\n return discriminatorBuffer\n } catch {\n return this.encodeBasicInstructionData(args, funcName)\n }\n }\n\n private encodeBasicInstructionData(args: any[], funcName: string): Buffer {\n const funcHash = Buffer.from(funcName).slice(0, 8)\n const data = Buffer.alloc(8)\n data.set(funcHash, 0)\n\n if (args.length > 0) {\n const encodedArgs = args.map((arg) => {\n if (typeof arg === 'string') {\n return Buffer.from(arg, 'utf8')\n } else if (typeof arg === 'number' || typeof arg === 'bigint') {\n const num = typeof arg === 'bigint' ? Number(arg) : arg\n const buf = Buffer.alloc(8)\n buf.writeBigUInt64LE(BigInt(num), 0)\n return buf\n } else if (Buffer.isBuffer(arg)) {\n return arg\n } else if (arg instanceof Uint8Array) {\n return Buffer.from(arg)\n }\n return Buffer.from(String(arg), 'utf8')\n })\n // @ts-expect-error - Buffer.concat works correctly but TypeScript types are strict\n return Buffer.concat([data, ...encodedArgs])\n }\n\n return data\n }\n\n private encodeArgs(args: any[], argDefs: any[]): Buffer {\n const buffers: Buffer[] = []\n for (let i = 0; i < Math.min(args.length, argDefs.length); i++) {\n const arg = args[i]\n const def = argDefs[i]\n\n if (def.type === 'u64' || def.type === 'u128') {\n const num = typeof arg === 'bigint' ? arg : BigInt(arg)\n const size = def.type === 'u128' ? 16 : 8\n const buf = Buffer.alloc(size)\n if (size === 16) {\n buf.writeBigUInt64LE(num & 0xffffffffffffffffn, 0)\n buf.writeBigUInt64LE(num >> 64n, 8)\n } else {\n buf.writeBigUInt64LE(num, 0)\n }\n buffers.push(buf)\n } else if (def.type === 'string') {\n buffers.push(Buffer.from(String(arg), 'utf8'))\n } else if (def.type === 'publicKey' || def.type === 'pubkey') {\n try {\n const pubkey = new PublicKey(arg)\n buffers.push(Buffer.from(pubkey.toBuffer()))\n } catch {\n buffers.push(Buffer.from(String(arg), 'utf8'))\n }\n } else {\n buffers.push(Buffer.from(String(arg), 'utf8'))\n }\n }\n // @ts-expect-error - Buffer.concat works correctly but TypeScript types are strict\n return Buffer.concat(buffers)\n }\n\n private async buildInstructionAccounts(\n action: any,\n executable: WarpExecutable,\n fromPubkey: PublicKey,\n programId: PublicKey\n ): Promise<Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>> {\n const accounts: Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> = []\n\n const accountInputs = this.extractAccountInputs(action, executable)\n if (accountInputs.length > 0) {\n for (const accountInput of accountInputs) {\n while (accounts.length < accountInput.index) {\n accounts.push({ pubkey: fromPubkey, isSigner: true, isWritable: true })\n }\n const address = await this.resolveAccountFromInput(accountInput, executable, fromPubkey)\n const { isSigner, isWritable } = this.determineAccountFlags(accountInput.input, address, fromPubkey)\n accounts.push({ pubkey: address, isSigner, isWritable })\n }\n return accounts\n }\n\n if (!action.accounts || !Array.isArray(action.accounts)) return accounts\n\n for (let idx = 0; idx < action.accounts.length; idx++) {\n const accountDef = action.accounts[idx]\n let address = this.extractAccountAddress(accountDef)\n\n if (address === '[object Object]' || (typeof accountDef === 'string' && accountDef === '[object Object]')) {\n address = fromPubkey.toBase58()\n } else if (!address || address.length === 0) {\n throw new Error(`Invalid account definition at index ${idx}: ${JSON.stringify(accountDef)}`)\n }\n\n if (address === '{{USER_WALLET}}' || (typeof address === 'string' && address.includes('{{USER_WALLET}}'))) {\n address = fromPubkey.toBase58()\n } else if (typeof address === 'string' && address.includes('{{')) {\n const originalAddress = address\n let maxIterations = 10\n while (address.includes('{{') && maxIterations-- > 0) {\n const beforeInterpolation: string = address\n address = this.interpolateAccountAddress(address, executable.resolvedInputs)\n if (address === beforeInterpolation) break\n }\n if (!address || (address.includes('{{') && !address.startsWith('{{USER_ATA:') && !address.startsWith('{{RECEIVER_ATA:'))) {\n throw new Error(`Failed to interpolate account address at index ${idx}: ${originalAddress} -> ${address}. ResolvedInputs: ${JSON.stringify(executable.resolvedInputs.map(r => ({ as: r.input?.as, value: r.value })))}`)\n }\n }\n\n const pubkey = await this.resolveAccountPubkey(address, fromPubkey)\n const { isSigner, isWritable } = this.determineAccountFlags(accountDef, pubkey, fromPubkey)\n accounts.push({ pubkey, isSigner, isWritable })\n }\n\n return accounts\n }\n\n private extractAccountInputs(action: any, executable: WarpExecutable): Array<{ input: any; index: number }> {\n if (!action.inputs || !Array.isArray(action.inputs)) return []\n\n const accountInputs: Array<{ input: any; index: number }> = []\n for (const input of action.inputs) {\n if (input.position && typeof input.position === 'string' && input.position.startsWith('account:')) {\n const index = parseInt(input.position.split(':')[1] || '0', 10)\n accountInputs.push({ input, index })\n }\n }\n return accountInputs.sort((a, b) => a.index - b.index)\n }\n\n private async resolveAccountFromInput(\n accountInput: { input: any; index: number },\n executable: WarpExecutable,\n fromPubkey: PublicKey\n ): Promise<PublicKey> {\n const resolved = executable.resolvedInputs.find((r: any) => r.input === accountInput.input || r.input?.as === accountInput.input.as)\n if (!resolved) {\n throw new Error(`Account input at index ${accountInput.index} not resolved: ${accountInput.input.as || accountInput.input.name}`)\n }\n\n let address = resolved.value\n if (typeof address === 'string' && address.includes(':')) {\n address = address.split(':')[1]\n }\n\n if (!address || typeof address !== 'string') {\n throw new Error(`Invalid address for account input at index ${accountInput.index}: ${accountInput.input.as || accountInput.input.name}`)\n }\n\n if (accountInput.input.as === 'USER_WALLET') {\n return fromPubkey\n }\n\n if (accountInput.input.as?.startsWith('USER_ATA:') || accountInput.input.as?.startsWith('RECEIVER_ATA:')) {\n return await this.resolveAccountPubkey(`{{${accountInput.input.as}}}`, fromPubkey)\n }\n\n return new PublicKey(address)\n }\n\n private interpolateAccountAddress(address: string, resolvedInputs: any[]): string {\n if (!address.includes('{{')) return address\n\n for (const resolved of resolvedInputs) {\n if (!resolved.input?.as) continue\n const placeholder = `{{${resolved.input.as.toUpperCase()}}}`\n if (address === placeholder || address.includes(placeholder)) {\n let value = resolved.value\n if (typeof value === 'string' && value.includes(':')) {\n value = value.split(':')[1]\n }\n if (value) {\n return address.replace(new RegExp(placeholder.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'), String(value))\n }\n }\n }\n\n for (const resolved of resolvedInputs) {\n if (!resolved.input?.name) continue\n const placeholder = `{{${resolved.input.name.toUpperCase().replace(/\\s+/g, '_')}}}`\n if (address === placeholder || address.includes(placeholder)) {\n let value = resolved.value\n if (typeof value === 'string' && value.includes(':')) {\n value = value.split(':')[1]\n }\n if (value) {\n return address.replace(new RegExp(placeholder.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'), String(value))\n }\n }\n }\n\n return address\n }\n\n private async createTokenTransferTransaction(\n executable: WarpExecutable,\n userWallet: string,\n destinationPubkey: PublicKey\n ): Promise<VersionedTransaction> {\n if (executable.transfers.length === 0) throw new Error('WarpSolanaExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpSolanaExecutor: No native token defined for this chain')\n\n const nativeId = this.chain.nativeToken.identifier\n const nativeTokenTransfers = executable.transfers.filter((t) => t.identifier === nativeId || t.identifier === WarpSolanaConstants.NativeToken.Identifier)\n const splTokenTransfers = executable.transfers.filter((t) => t.identifier !== nativeId && t.identifier !== WarpSolanaConstants.NativeToken.Identifier)\n\n if (nativeTokenTransfers.length === 1 && splTokenTransfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n if (transfer.amount <= 0n) throw new Error('WarpSolanaExecutor: Native token transfer amount must be positive')\n const fromPubkey = new PublicKey(userWallet)\n return this.setTransactionDefaults([SystemProgram.transfer({ fromPubkey, toPubkey: destinationPubkey, lamports: Number(transfer.amount) })], fromPubkey)\n }\n\n if (nativeTokenTransfers.length === 0 && splTokenTransfers.length === 1) {\n return this.createSingleTokenTransfer(executable, splTokenTransfers[0], userWallet, destinationPubkey)\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpSolanaExecutor: Multiple token transfers not yet supported')\n throw new Error('WarpSolanaExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string,\n destinationPubkey: PublicKey\n ): Promise<VersionedTransaction> {\n const mintAddress = new PublicKey(transfer.identifier)\n const fromPubkey = new PublicKey(userWallet)\n const sourceTokenAccount = await getAssociatedTokenAddress(mintAddress, fromPubkey)\n const destinationTokenAccount = await getAssociatedTokenAddress(mintAddress, destinationPubkey)\n\n if (!(await this.connection.getAccountInfo(sourceTokenAccount))) {\n throw new Error('WarpSolanaExecutor: Source token account does not exist')\n }\n\n const instructions: TransactionInstruction[] = []\n if (!(await this.connection.getAccountInfo(destinationTokenAccount))) {\n instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, destinationTokenAccount, destinationPubkey, mintAddress))\n }\n instructions.push(createTransferInstruction(sourceTokenAccount, destinationTokenAccount, fromPubkey, Number(transfer.amount)))\n\n return this.setTransactionDefaults(instructions, fromPubkey)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecutionResult> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpSolanaExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpSolanaExecutor: Query action must have a function name')\n\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Query address is required')\n const queryAddress = new PublicKey(executable.destination)\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n\n let decodedResult: any[] = []\n let isSuccess = true\n\n if (action.func === 'getAccount' || action.func === 'getAccountInfo') {\n const accountInfo = await this.connection.getAccountInfo(queryAddress)\n if (!accountInfo) {\n throw new Error('Account not found')\n }\n decodedResult = [\n accountInfo.lamports,\n accountInfo.owner.toBase58(),\n accountInfo.executable,\n accountInfo.rentEpoch,\n accountInfo.data.toString('base64'),\n ]\n } else if (action.func === 'getBalance') {\n const balance = await this.connection.getBalance(queryAddress)\n decodedResult = [balance.toString()]\n } else if (action.func === 'getProgramAccounts') {\n const accounts = await this.connection.getProgramAccounts(queryAddress)\n decodedResult = accounts.map((acc) => ({\n pubkey: acc.pubkey.toBase58(),\n account: {\n lamports: acc.account.lamports,\n owner: acc.account.owner.toBase58(),\n data: acc.account.data.toString('base64'),\n },\n }))\n } else {\n const accountInfo = await this.connection.getAccountInfo(queryAddress)\n if (!accountInfo) {\n throw new Error('Account not found')\n }\n decodedResult = [accountInfo.data.toString('base64')]\n }\n\n const { values, output } = await this.output.extractQueryOutput(executable.warp, decodedResult, executable.action, executable.resolvedInputs)\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, output)\n\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: isSuccess ? 'success' : 'error',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n output: { ...output, _DATA: decodedResult },\n messages: applyOutputToMessages(executable.warp, output, this.config),\n destination,\n resolvedInputs,\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const messageBytes = new TextEncoder().encode(message)\n const signatureBytes = Buffer.from(signature, 'base64')\n return ''\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n\n private async setTransactionDefaults(instructions: TransactionInstruction[], fromPubkey: PublicKey | null): Promise<VersionedTransaction> {\n const { blockhash } = await this.connection.getLatestBlockhash('confirmed')\n const allInstructions = this.addComputeBudgetInstructions(instructions)\n const accountMetaMap = this.buildAccountMetaMap(allInstructions, fromPubkey)\n const { signedAccounts, unsignedAccounts } = this.sortAccounts(accountMetaMap)\n const { staticAccountKeys, accountIndexMap } = this.buildAccountIndexMap(signedAccounts, unsignedAccounts)\n const compiledInstructions = this.compileInstructions(allInstructions, accountIndexMap)\n const messageV0 = this.buildMessageV0(blockhash, signedAccounts, unsignedAccounts, accountMetaMap, staticAccountKeys, compiledInstructions)\n\n const versionedTx = new VersionedTransaction(messageV0)\n if (versionedTx.version !== 0) {\n throw new Error(`Expected VersionedTransaction v0, got version: ${versionedTx.version}`)\n }\n\n return versionedTx\n }\n\n private toPublicKey(address: string, errorMsg: string): PublicKey {\n try {\n return new PublicKey(address)\n } catch {\n throw new Error(`WarpSolanaExecutor: ${errorMsg}`)\n }\n }\n\n private extractContractArgs(executable: WarpExecutable): string[] {\n if (executable.args.length > 0) return executable.args\n if (executable.resolvedInputs.length === 0) return []\n\n const argInputs = executable.resolvedInputs\n .filter((ri) => ri.input.position?.toString().startsWith('arg:'))\n .map((ri) => {\n const index = Math.max(0, parseInt(ri.input.position!.toString().split(':')[1] || '0', 10) - 1)\n return { index, value: ri.value }\n })\n .sort((a, b) => a.index - b.index)\n\n const maxIndex = Math.max(...argInputs.map((a) => a.index), -1)\n if (maxIndex < 0) return []\n\n const args = new Array(maxIndex + 1).fill(null)\n argInputs.forEach(({ index, value }) => {\n if (value) args[index] = value\n })\n return args.filter((arg): arg is string => arg !== null && arg !== undefined)\n }\n\n private buildInstructionData(action: any, nativeArgs: any[]): Buffer {\n if (!action.abi || typeof action.abi !== 'string') {\n return this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n\n try {\n const abi = JSON.parse(action.abi)\n if (abi.instructions && abi.instructions[action.func]) {\n return this.encodeInstructionData(abi.instructions[action.func], nativeArgs, action.func)\n }\n } catch {\n // Fall through to basic encoding\n }\n\n return this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n\n\n private extractAccountAddress(accountDef: any): string | undefined {\n if (typeof accountDef === 'string') return accountDef\n if (!accountDef || typeof accountDef !== 'object') return undefined\n\n const str = JSON.stringify(accountDef)\n if (str.includes('USER_WALLET') || str.includes('{{USER_WALLET}}')) return '{{USER_WALLET}}'\n if (str.includes('RECEIVER_ADDRESS') || str.includes('{{RECEIVER_ADDRESS}}')) return '{{RECEIVER_ADDRESS}}'\n if (str.includes('USER_ATA')) {\n const match = str.match(/USER_ATA[:\\s]*([^\"}\\s]+)/)\n if (match) return `{{USER_ATA:${match[1]}}}`\n }\n\n const addrValue = accountDef.address || accountDef.pubkey || accountDef.value\n if (typeof addrValue === 'string') return addrValue\n if (addrValue?.toBase58) return addrValue.toBase58()\n if (addrValue?.identifier) return addrValue.identifier\n if (addrValue?.value) return addrValue.value\n\n const keys = Object.keys(accountDef)\n if (keys.length === 1 && typeof accountDef[keys[0]] === 'string') return accountDef[keys[0]]\n return undefined\n }\n\n private async resolveAccountPubkey(address: string, fromPubkey: PublicKey): Promise<PublicKey> {\n if (address.includes('{{USER_WALLET}}') || address === fromPubkey.toBase58()) {\n return fromPubkey\n }\n\n if (address.startsWith('{{USER_ATA:') && address.endsWith('}}')) {\n const mintAddress = address.slice(11, -2)\n if (!mintAddress || mintAddress.includes('{{')) {\n throw new Error(`Invalid USER_ATA placeholder: ${address}. Mint address must be resolved first.`)\n }\n const mintPubkey = new PublicKey(mintAddress)\n return await getAssociatedTokenAddress(mintPubkey, fromPubkey)\n }\n\n if (address.startsWith('{{RECEIVER_ATA:') && address.endsWith('}}')) {\n const content = address.slice(15, -2)\n const parts = content.split(':')\n if (parts.length === 2) {\n let mintAddress = parts[0]\n let receiverAddress = parts[1]\n if (mintAddress.includes('{{') || receiverAddress.includes('{{')) {\n throw new Error(`Invalid RECEIVER_ATA placeholder: ${address}. Mint and receiver addresses must be resolved first.`)\n }\n if (mintAddress.includes(':')) mintAddress = mintAddress.split(':')[1]\n if (receiverAddress.includes(':')) receiverAddress = receiverAddress.split(':')[1]\n const mintPubkey = new PublicKey(mintAddress)\n const receiverPubkey = new PublicKey(receiverAddress)\n return await getAssociatedTokenAddress(mintPubkey, receiverPubkey)\n }\n }\n\n return new PublicKey(address)\n }\n\n private determineAccountFlags(accountDef: any, pubkey: PublicKey, fromPubkey: PublicKey): { isSigner: boolean; isWritable: boolean } {\n const accountMeta = typeof accountDef === 'object' ? accountDef : {}\n\n if (pubkey.equals(fromPubkey)) {\n return { isSigner: true, isWritable: true }\n }\n\n const isSigner = accountMeta.signer === true\n const isWritable = typeof accountDef === 'object' && accountMeta.writable !== undefined ? accountMeta.writable !== false : true\n\n return { isSigner, isWritable }\n }\n\n private addComputeBudgetInstructions(instructions: TransactionInstruction[]): TransactionInstruction[] {\n const hasTokenTransfer = instructions.some((ix) => ix.programId.toBase58() === WarpSolanaConstants.Programs.TokenProgram)\n const computeUnits = hasTokenTransfer ? WarpSolanaConstants.ComputeUnitLimit.TokenTransfer : WarpSolanaConstants.ComputeUnitLimit.Default\n\n const computeUnitLimitIx = ComputeBudgetProgram.setComputeUnitLimit({ units: computeUnits })\n const computeUnitPriceIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: WarpSolanaConstants.PriorityFee.Default })\n\n return [computeUnitLimitIx, computeUnitPriceIx, ...instructions]\n }\n\n private buildAccountMetaMap(\n instructions: TransactionInstruction[],\n fromPubkey: PublicKey | null\n ): Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> {\n const accountMetaMap = new Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>()\n\n if (fromPubkey) {\n accountMetaMap.set(fromPubkey.toBase58(), { pubkey: fromPubkey, isSigner: true, isWritable: true })\n }\n\n for (const ix of instructions) {\n const programIdStr = ix.programId.toBase58()\n if (!accountMetaMap.has(programIdStr)) {\n accountMetaMap.set(programIdStr, { pubkey: ix.programId, isSigner: false, isWritable: false })\n }\n\n for (const key of ix.keys) {\n const keyStr = key.pubkey.toBase58()\n const existing = accountMetaMap.get(keyStr)\n if (existing) {\n accountMetaMap.set(keyStr, {\n pubkey: key.pubkey,\n isSigner: existing.isSigner || key.isSigner,\n isWritable: existing.isWritable || key.isWritable,\n })\n } else {\n accountMetaMap.set(keyStr, {\n pubkey: key.pubkey,\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })\n }\n }\n }\n\n return accountMetaMap\n }\n\n private sortAccounts(accountMetaMap: Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>): {\n signedAccounts: PublicKey[]\n unsignedAccounts: PublicKey[]\n } {\n const signedAccounts: PublicKey[] = []\n const unsignedAccounts: PublicKey[] = []\n\n for (const meta of accountMetaMap.values()) {\n ;(meta.isSigner ? signedAccounts : unsignedAccounts).push(meta.pubkey)\n }\n\n const sortByWritable = (a: PublicKey, b: PublicKey) =>\n (accountMetaMap.get(a.toBase58())!.isWritable ? 0 : 1) - (accountMetaMap.get(b.toBase58())!.isWritable ? 0 : 1)\n\n signedAccounts.sort(sortByWritable)\n unsignedAccounts.sort(sortByWritable)\n return { signedAccounts, unsignedAccounts }\n }\n\n private buildAccountIndexMap(\n signedAccounts: PublicKey[],\n unsignedAccounts: PublicKey[]\n ): { staticAccountKeys: PublicKey[]; accountIndexMap: Map<string, number> } {\n const staticAccountKeys = [...signedAccounts, ...unsignedAccounts]\n const accountIndexMap = new Map<string, number>()\n\n staticAccountKeys.forEach((key, index) => {\n accountIndexMap.set(key.toBase58(), index)\n })\n\n return { staticAccountKeys, accountIndexMap }\n }\n\n private compileInstructions(\n instructions: TransactionInstruction[],\n accountIndexMap: Map<string, number>\n ): Array<{ programIdIndex: number; accountKeyIndexes: number[]; data: Uint8Array }> {\n return instructions.map((ix) => {\n const programIdIndex = accountIndexMap.get(ix.programId.toBase58())!\n const accountKeyIndexes = ix.keys.map((key) => accountIndexMap.get(key.pubkey.toBase58())!)\n return {\n programIdIndex,\n accountKeyIndexes,\n data: Uint8Array.from(ix.data),\n }\n })\n }\n\n private buildMessageV0(\n blockhash: string,\n signedAccounts: PublicKey[],\n unsignedAccounts: PublicKey[],\n accountMetaMap: Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>,\n staticAccountKeys: PublicKey[],\n compiledInstructions: Array<{ programIdIndex: number; accountKeyIndexes: number[]; data: Uint8Array }>\n ): MessageV0 {\n const getWritable = (key: PublicKey) => accountMetaMap.get(key.toBase58())!.isWritable\n return new MessageV0({\n header: {\n numRequiredSignatures: signedAccounts.length,\n numReadonlySignedAccounts: signedAccounts.filter((k) => !getWritable(k)).length,\n numReadonlyUnsignedAccounts: unsignedAccounts.filter((k) => !getWritable(k)).length,\n },\n staticAccountKeys,\n recentBlockhash: blockhash,\n compiledInstructions,\n addressTableLookups: [],\n })\n }\n}\n","import {\n AdapterWarpOutput,\n evaluateOutputCommon,\n extractResolvedInputValues,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseOutputOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecutionResult,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionOutput,\n WarpNativeValue,\n WarpCache,\n WarpCacheKey,\n} from '@joai/warps'\nimport { Connection, TransactionSignature } from '@solana/web3.js'\nimport { WarpSolanaSerializer } from './WarpSolanaSerializer'\n\nexport class WarpSolanaOutput implements AdapterWarpOutput {\n private readonly serializer: WarpSolanaSerializer\n private readonly connection: Connection\n private readonly cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpSolanaSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.cache = new WarpCache(config.env, config.cache)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecutionResult> {\n const inputs: ResolvedInput[] = this.cache.get(WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || '', actionIndex)) ?? []\n const resolvedInputs = extractResolvedInputValues(inputs)\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction, resolvedInputs)\n }\n\n if (typeof tx === 'string') {\n return this.handleTransactionSignature(warp, actionIndex, tx, resolvedInputs)\n }\n\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex, resolvedInputs: string[] = []): WarpActionExecutionResult {\n return {\n status: 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction, resolvedInputs: string[] = []): Promise<WarpActionExecutionResult> {\n const isPending = tx.status === 'pending'\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.signature || ''\n\n if (isPending) {\n throw new Error(`Transaction ${transactionHash} is still pending. Execution should only proceed after finalization.`)\n }\n\n const slot = tx.tx?.slot || 0\n const blockTime = tx.tx?.blockTime || 0\n const rawValues = [transactionHash, slot.toString(), blockTime.toString()]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleTransactionSignature(\n warp: Warp,\n actionIndex: WarpActionIndex,\n signature: TransactionSignature,\n resolvedInputs: string[] = []\n ): Promise<WarpActionExecutionResult> {\n try {\n const tx = await this.connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n const success = !tx.meta?.err\n const slot = tx.slot\n const blockTime = tx.blockTime || 0\n const fee = tx.meta?.fee || 0\n\n const rawValues = [signature, slot.toString(), blockTime.toString(), fee.toString()]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: signature,\n tx: {\n signature,\n slot,\n blockTime,\n fee,\n err: tx.meta?.err || null,\n } as any,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n } catch (error) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n }\n\n async extractQueryOutput(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[]; mapped: Record<string, any> }; output: WarpExecutionOutput }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues, mapped: {} }\n let output: WarpExecutionOutput = {}\n\n if (!warp.output) return { values, output }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.output)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseOutputOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n output[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n output[key] = getNestedValue(path) || null\n } else {\n output[key] = path\n }\n }\n\n return { values, output: await evaluateOutputCommon(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const tx = await this.connection.getTransaction(txHash, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) {\n return { status: 'pending' }\n }\n\n return {\n status: tx.meta?.err ? 'failed' : 'confirmed',\n blockNumber: tx.slot,\n gasUsed: BigInt(tx.meta?.fee || 0),\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<any> {\n try {\n const tx = await this.connection.getTransaction(txHash, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) {\n return null\n }\n\n return {\n signature: txHash,\n slot: tx.slot,\n blockTime: tx.blockTime,\n fee: tx.meta?.fee || 0,\n err: tx.meta?.err || null,\n }\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@joai/warps'\nimport { PublicKey } from '@solana/web3.js'\nimport bs58 from 'bs58'\n\nexport class WarpSolanaSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (value && typeof value === 'object' && 'toBase58' in value && typeof value.toBase58 === 'function') {\n return `address:${value.toBase58()}`\n }\n if (typeof value === 'string') {\n if (value.length >= 32 && value.length <= 44) {\n try {\n const pubkey = new PublicKey(value)\n if (pubkey.toBase58() === value && /^[1-9A-HJ-NP-Za-km-z]+$/.test(value)) {\n return `address:${value}`\n }\n } catch {\n // Not a valid Solana address\n }\n }\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (value instanceof PublicKey) {\n return `address:${value.toBase58()}`\n }\n if (value instanceof Uint8Array) {\n return `hex:${bs58.encode(value)}`\n }\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n const asset = value as { identifier: string; amount: bigint; decimals?: number }\n if (asset.decimals !== undefined) {\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${WarpConstants.ArgCompositeSeparator}${asset.decimals}`\n }\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n case 'asset':\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n return value\n }\n return value\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n case 'asset':\n const assetParts = stringValue.split(WarpConstants.ArgCompositeSeparator)\n const identifier = assetParts[0] || ''\n const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n\n const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : undefined\n return { identifier, amount, decimals }\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { ExplorerName, SolanaExplorers, SolanaExplorerNames, SolanaExplorerUrls } from './constants'\n\nexport class WarpSolanaExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const explorers = SolanaExplorerNames[this.config.env]\n if (!explorers) {\n return [SolanaExplorers.SolscanMainnet as ExplorerName]\n }\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = SolanaExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = SolanaExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = SolanaExplorerUrls[primaryExplorer]\n return url || SolanaExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/tx/${hash}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/tx/${hash}${cluster}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/block/${blockNumber}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/block/${blockNumber}${cluster}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/token/${identifier}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/token/${identifier}${cluster}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/account/${address}${cluster}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}${cluster}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}${cluster}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/account/${address}${cluster}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}${cluster}`\n }\n })\n\n return urls\n }\n}\n","/// <reference path=\"./types.d.ts\" />\nimport { createKeyPairSignerFromBytes } from '@solana/kit'\nimport { Commitment, Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { registerExactSvmScheme } from '@x402/svm/exact/client'\nimport { SupportedX402SolanaNetworks } from './constants'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\nimport { ReadOnlyWalletProvider } from './providers/ReadOnlyWalletProvider'\n\nexport class WarpSolanaWallet implements AdapterWarpWallet {\n private connection: Connection\n private walletProvider: WalletProvider | null\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.walletProvider = this.createProvider()\n this.initializeCache()\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.signTransaction(tx)\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n return Promise.all(txs.map((tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const transaction = this.resolveTransaction(tx)\n\n if (!transaction.signatures || transaction.signatures.length === 0 || !transaction.signatures.some((sig) => sig.some((b) => b !== 0))) {\n throw new Error('Transaction must be signed before sending')\n }\n\n try {\n const shouldSkipPreflight = await this.shouldSkipPreflight(transaction)\n return await this.sendWithRetry(transaction, shouldSkipPreflight)\n } catch (simError: any) {\n if (simError.message?.includes('MissingRequiredSignature')) {\n return await this.sendRawTransaction(transaction, { skipPreflight: true })\n }\n throw new Error(`Transaction send failed: ${simError?.message || String(simError)}`)\n }\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation('mnemonic')\n return await walletProvider.importFromMnemonic(mnemonic)\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation('privateKey')\n return await walletProvider.importFromPrivateKey(privateKey)\n }\n\n async export(provider: WarpWalletProvider): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation(provider)\n return await walletProvider.export()\n }\n\n async generate(provider: WarpWalletProvider): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation(provider)\n return await walletProvider.generate()\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n\n async registerX402Handlers(client: unknown): Promise<Record<string, () => void>> {\n if (!this.walletProvider) return {}\n\n const provider = this.walletProvider as unknown as Record<string, unknown>\n const getKeypair = provider.getKeypairInstance as (() => Keypair) | undefined\n\n if (typeof getKeypair !== 'function') return {}\n\n const keypair = getKeypair()\n if (!keypair || !keypair.secretKey) return {}\n\n const signer = await createKeyPairSignerFromBytes(keypair.secretKey)\n const handlers: Record<string, () => void> = {}\n\n for (const network of SupportedX402SolanaNetworks) {\n handlers[network] = () => {\n registerExactSvmScheme(client as Parameters<typeof registerExactSvmScheme>[0], { signer })\n }\n }\n\n return handlers\n }\n\n private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') return new ReadOnlyWalletProvider(this.config, this.chain)\n return this.createProviderForOperation(wallet.provider)\n }\n\n private initializeCache() {\n initializeWalletCache(this.walletProvider).then((cache: { address: string | null; publicKey: string | null }) => {\n this.cachedAddress = cache.address\n this.cachedPublicKey = cache.publicKey\n })\n }\n\n private createProviderForOperation(provider: WarpWalletProvider): WalletProvider {\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[provider]\n if (providerFactory) {\n const walletProvider = providerFactory(this.config, this.chain)\n if (!walletProvider) throw new Error(`Custom wallet provider factory returned null for ${provider}`)\n return walletProvider\n }\n\n if (provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain)\n if (provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${provider}`)\n }\n\n private resolveTransaction(tx: WarpAdapterGenericTransaction): VersionedTransaction {\n if (tx instanceof VersionedTransaction) {\n if (tx.version === undefined || tx.version === 'legacy') {\n throw new Error('Transaction must be a VersionedTransaction (v0), not legacy')\n }\n return tx\n }\n\n if (tx instanceof Transaction) {\n throw new Error('Legacy Transaction format is not supported. All transactions must use VersionedTransaction (v0).')\n }\n\n if (tx.transaction instanceof VersionedTransaction) {\n if (tx.transaction.version === undefined || tx.transaction.version === 'legacy') {\n throw new Error('Transaction must be a VersionedTransaction (v0), not legacy')\n }\n return tx.transaction\n }\n\n if (tx.transaction instanceof Transaction) {\n throw new Error('Legacy Transaction format is not supported. All transactions must use VersionedTransaction (v0).')\n }\n\n if (!tx.transaction) {\n throw new Error('Transaction must be signed before sending')\n }\n\n throw new Error('Invalid transaction format - only VersionedTransaction is supported')\n }\n\n private async shouldSkipPreflight(transaction: VersionedTransaction): Promise<boolean> {\n if (!transaction.signatures || transaction.signatures.length === 0 || !transaction.signatures.some((sig) => sig.some((b) => b !== 0))) {\n return false\n }\n\n try {\n const simulation = await this.connection.simulateTransaction(transaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n })\n if (simulation.value.err) {\n const errMsg = JSON.stringify(simulation.value.err)\n if (errMsg.includes('\"Custom\": 17') || errMsg.includes('\"Custom\":17') || errMsg.includes('0x11')) {\n return true\n }\n throw new Error(`Transaction simulation failed: ${errMsg}`)\n }\n } catch (error: any) {\n if (error.message?.includes('Transaction simulation failed')) throw error\n }\n return false\n }\n\n private async sendWithRetry(transaction: VersionedTransaction, skipPreflight: boolean): Promise<string> {\n if (skipPreflight) {\n return this.sendRawTransaction(transaction, { skipPreflight: true })\n }\n\n try {\n return await this.sendRawTransaction(transaction, { skipPreflight: false, preflightCommitment: 'confirmed' })\n } catch (error: any) {\n if (this.isSimulationError(error)) {\n return this.sendRawTransaction(transaction, { skipPreflight: true })\n }\n throw error\n }\n }\n\n private async sendRawTransaction(transaction: VersionedTransaction, options: { skipPreflight: boolean; preflightCommitment?: Commitment; maxRetries?: number }): Promise<string> {\n const signature = await this.connection.sendRawTransaction(transaction.serialize(), {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries || 3,\n preflightCommitment: options.preflightCommitment,\n })\n if (!signature || typeof signature !== 'string' || signature.length < 32) {\n throw new Error('Invalid transaction signature received')\n }\n return signature\n }\n\n private isSimulationError(error: any): boolean {\n const msg = error?.message?.toLowerCase() || ''\n return msg.includes('simulation') || msg.includes('preflight') || msg.includes('0x1') || msg.includes('custom program error')\n }\n}\n","import * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n getWarpWalletAddressFromConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n normalizeAndValidateMnemonic,\n normalizeMnemonic,\n setWarpWalletInConfig,\n validateMnemonicLength,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport bs58 from 'bs58'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'mnemonic'\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<string | null> {\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeypair()\n\n if (tx instanceof VersionedTransaction) {\n tx.sign([keypair])\n return tx\n }\n\n if (tx instanceof Transaction) {\n tx.sign(keypair)\n return tx\n }\n\n if (tx.transaction) {\n if (tx.transaction instanceof Transaction) {\n tx.transaction.sign(keypair)\n return { ...tx, transaction: tx.transaction.serialize() }\n }\n if (typeof tx.transaction === 'object') {\n try {\n const transaction = Transaction.from(tx.transaction)\n transaction.sign(keypair)\n return { ...tx, transaction: transaction.serialize(), signature: transaction.signature }\n } catch {\n throw new Error('Invalid transaction format')\n }\n }\n }\n\n throw new Error('Invalid transaction format')\n }\n\n async signMessage(message: string): Promise<string> {\n const keypair = this.getKeypair()\n const messageBytes = new TextEncoder().encode(message)\n const nacl = await import('tweetnacl')\n const secretKey = keypair.secretKey\n if (secretKey.length !== 64) {\n throw new Error(`Invalid secret key length: expected 64, got ${secretKey.length}`)\n }\n const privateKeySlice = secretKey.slice(0, 32)\n const privateKeyBytes = new Uint8Array(privateKeySlice)\n if (privateKeyBytes.length !== 32) {\n throw new Error(`Invalid private key length: expected 32, got ${privateKeyBytes.length}`)\n }\n const signature = nacl.sign.detached(messageBytes, privateKeyBytes)\n return bs58.encode(signature)\n }\n\n getKeypairInstance(): Keypair {\n return this.getKeypair()\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n const trimmedMnemonic = normalizeAndValidateMnemonic(mnemonic)\n const seed = bip39.mnemonicToSeedSync(trimmedMnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n const walletDetails: WarpWalletDetails = {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: trimmedMnemonic,\n }\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n return walletDetails\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey))\n const walletDetails: WarpWalletDetails = {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: null,\n }\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n return walletDetails\n }\n\n async export(): Promise<WarpWalletDetails> {\n const keypair = this.getKeypair()\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n return {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: privateKey || null,\n mnemonic: mnemonic || null,\n }\n }\n\n async generate(): Promise<WarpWalletDetails> {\n const mnemonicRaw = bip39.generateMnemonic(wordlist, 256)\n const mnemonic = normalizeMnemonic(mnemonicRaw)\n validateMnemonicLength(mnemonic)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n return {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: null,\n mnemonic,\n }\n }\n\n private getKeypair(): Keypair {\n if (this.keypair) return this.keypair\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (!mnemonic) throw new Error('No mnemonic provided')\n\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = Keypair.fromSeed(seed.slice(0, 32))\n return this.keypair\n }\n}\n","import { Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n getWarpWalletAddressFromConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport bs58 from 'bs58'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'privateKey'\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<string | null> {\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeypair()\n\n if (tx instanceof VersionedTransaction) {\n tx.sign([keypair])\n return tx\n }\n\n if (tx instanceof Transaction) {\n tx.sign(keypair)\n return tx\n }\n\n if (tx.transaction) {\n if (tx.transaction instanceof Transaction) {\n tx.transaction.sign(keypair)\n return { ...tx, transaction: tx.transaction.serialize() }\n }\n if (typeof tx.transaction === 'object') {\n try {\n const transaction = Transaction.from(tx.transaction)\n transaction.sign(keypair)\n return { ...tx, transaction: transaction.serialize(), signature: transaction.signature }\n } catch {\n throw new Error('Invalid transaction format')\n }\n }\n }\n\n throw new Error('Invalid transaction format')\n }\n\n async signMessage(message: string): Promise<string> {\n const keypair = this.getKeypair()\n const messageBytes = new TextEncoder().encode(message)\n const nacl = await import('tweetnacl')\n const secretKey = keypair.secretKey\n if (secretKey.length !== 64) {\n throw new Error(`Invalid secret key length: expected 64, got ${secretKey.length}`)\n }\n const privateKeySlice = secretKey.slice(0, 32)\n const privateKeyBytes = new Uint8Array(privateKeySlice)\n if (privateKeyBytes.length !== 32) {\n throw new Error(`Invalid private key length: expected 32, got ${privateKeyBytes.length}`)\n }\n const signature = nacl.sign.detached(messageBytes, privateKeyBytes)\n return bs58.encode(signature)\n }\n\n getKeypairInstance(): Keypair {\n return this.getKeypair()\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n throw new Error('PrivateKeyWalletProvider does not support importing from mnemonics. Use MnemonicWalletProvider instead.')\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey))\n const walletDetails: WarpWalletDetails = {\n provider: PrivateKeyWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: null,\n }\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n return walletDetails\n }\n\n async export(): Promise<WarpWalletDetails> {\n const keypair = this.getKeypair()\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n return {\n provider: PrivateKeyWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: privateKey || null,\n mnemonic: mnemonic || null,\n }\n }\n\n async generate(): Promise<WarpWalletDetails> {\n const keypair = Keypair.generate()\n return {\n provider: PrivateKeyWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: null,\n }\n }\n\n private getKeypair(): Keypair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('No private key provided')\n\n try {\n const secretKey = bs58.decode(privateKey)\n if (secretKey.length === 64) {\n this.keypair = Keypair.fromSecretKey(secretKey)\n return this.keypair\n } else if (secretKey.length === 32) {\n this.keypair = Keypair.fromSeed(secretKey)\n return this.keypair\n } else {\n throw new Error(`Invalid private key length: expected 32 or 64 bytes, got ${secretKey.length}`)\n }\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid private key format: ${error.message}`)\n }\n throw new Error('Invalid private key format')\n }\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@joai/warps'\nimport { getWarpWalletAddressFromConfig, WarpChainInfo, WarpClientConfig } from '@joai/warps'\n\nexport class ReadOnlyWalletProvider implements WalletProvider {\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n return getWarpWalletAddressFromConfig(this.config, this.chain.name)\n }\n\n async getPublicKey(): Promise<string | null> {\n return getWarpWalletAddressFromConfig(this.config, this.chain.name)\n }\n\n async signTransaction(tx: any): Promise<any> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async signMessage(message: string): Promise<string> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async export(): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async generate(): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n}\n","import { ChainAdapter, ChainAdapterFactory, WarpChainName, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { WarpSolanaDataLoader } from '../WarpSolanaDataLoader'\nimport { WarpSolanaExecutor } from '../WarpSolanaExecutor'\nimport { WarpSolanaExplorer } from '../WarpSolanaExplorer'\nimport { WarpSolanaOutput } from '../WarpSolanaOutput'\nimport { WarpSolanaSerializer } from '../WarpSolanaSerializer'\nimport { WarpSolanaWallet } from '../WarpSolanaWallet'\n\nexport const createSolanaAdapter = (chainName: WarpChainName, chainInfos: Record<WarpChainEnv, WarpChainInfo>): ChainAdapterFactory => {\n return (config: WarpClientConfig, fallback?: ChainAdapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpSolanaExecutor(config, chainInfos[config.env]),\n output: new WarpSolanaOutput(config, chainInfos[config.env]),\n serializer: new WarpSolanaSerializer(),\n registry: fallback.registry,\n explorer: new WarpSolanaExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpSolanaDataLoader(config, chainInfos[config.env]),\n wallet: new WarpSolanaWallet(config, chainInfos[config.env]),\n }\n }\n}\n"],"mappings":"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","names":["import_warps","import_warps","SolanaExplorers","import_warps","import_warps","SolanaChain","import_warps","SolanaChain","import_spl_token","import_web3","import_warps","import_warps","import_web3","import_warps","import_web3","bs58","url","cluster","import_web3","import_warps","import_web3","import_warps","import_bs58","bs58","import_web3","import_warps","import_bs58","bs58","import_warps"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/chains/solana.ts","../src/WarpSolanaDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/tokens/solana-mainnet.ts","../src/tokens/solana-devnet.ts","../src/tokens/solana-testnet.ts","../src/WarpSolanaExecutor.ts","../src/WarpSolanaOutput.ts","../src/WarpSolanaSerializer.ts","../src/WarpSolanaExplorer.ts","../src/WarpSolanaWallet.ts","../src/providers/MnemonicWalletProvider.ts","../src/providers/PrivateKeyWalletProvider.ts","../src/providers/ReadOnlyWalletProvider.ts","../src/chains/common.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './main'\nexport * from './tokens'\nexport * from './types'\nexport * from './WarpSolanaDataLoader'\nexport * from './WarpSolanaExecutor'\nexport * from './WarpSolanaExplorer'\nexport * from './WarpSolanaOutput'\nexport * from './WarpSolanaSerializer'\nexport * from './WarpSolanaWallet'\n","import { ChainAdapterFactory, WarpChainAsset, WarpChainName } from '@joai/warps'\nimport { createSolanaAdapter } from './common'\n\nexport const NativeTokenSol: WarpChainAsset = {\n chain: WarpChainName.Solana,\n identifier: 'SOL',\n symbol: 'SOL',\n name: 'SOL',\n decimals: 9,\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/sol.svg',\n}\n\nexport const SolanaAdapter: ChainAdapterFactory = createSolanaAdapter(WarpChainName.Solana, {\n mainnet: {\n name: WarpChainName.Solana,\n displayName: 'Solana Mainnet',\n chainId: '101',\n blockTime: 400,\n addressHrp: '',\n defaultApiUrl: 'https://api.mainnet-beta.solana.com',\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/solana.svg',\n nativeToken: NativeTokenSol,\n },\n testnet: {\n name: WarpChainName.Solana,\n displayName: 'Solana Testnet',\n chainId: '103',\n blockTime: 400,\n addressHrp: '',\n defaultApiUrl: 'https://api.testnet.solana.com',\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/solana.svg',\n nativeToken: NativeTokenSol,\n },\n devnet: {\n name: WarpChainName.Solana,\n displayName: 'Solana Devnet',\n chainId: '103',\n blockTime: 400,\n addressHrp: '',\n defaultApiUrl: 'https://api.devnet.solana.com',\n logoUrl: 'https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/solana.svg',\n nativeToken: NativeTokenSol,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n getWarpChainAssetLogoUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainEnv,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@joai/warps'\nimport { Connection, PublicKey } from '@solana/web3.js'\nimport { getAccount, getMint } from '@solana/spl-token'\nimport { WarpSolanaConstants } from './constants'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\nexport class WarpSolanaDataLoader implements AdapterWarpDataLoader {\n public readonly connection: Connection\n private cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.cache = new WarpCache(config.env, config.cache)\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const publicKey = new PublicKey(address)\n const balance = await this.connection.getBalance(publicKey)\n\n return {\n chain: this.chain.name,\n address,\n balance: BigInt(balance),\n }\n } catch (error) {\n throw new Error(`Failed to get account: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getTokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0n ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.metadata.name,\n symbol: tokenBalance.metadata.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.metadata.decimals,\n logoUrl: tokenBalance.metadata.logoUrl || '',\n })\n }\n }\n\n return assets\n } catch (error) {\n return []\n }\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier || identifier === 'SOL') {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownToken = findKnownTokenById(this.chain.name, env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl,\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n const signature = identifier\n\n if (awaitCompleted) {\n const tx = await this.waitForTransaction(signature)\n if (!tx) {\n return this.createFailedAction(signature, 'Transaction not found after waiting for completion')\n }\n return this.parseTransactionToAction(tx, signature)\n }\n\n try {\n const tx = await this.connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n if (!tx) return null\n return this.parseTransactionToAction(tx, signature)\n } catch {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getTokenBalances(address: string): Promise<Array<{ tokenAddress: string; balance: bigint; metadata: { name: string; symbol: string; decimals: number; logoUrl: string } }>> {\n try {\n const publicKey = new PublicKey(address)\n const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(publicKey, {\n programId: new PublicKey(WarpSolanaConstants.Programs.TokenProgram),\n })\n\n const env: WarpChainEnv = (this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet') as WarpChainEnv\n const knownTokens = getKnownTokensForChain(this.chain.name, env)\n\n const balances = await Promise.all(\n tokenAccounts.value.map(async (tokenAccount: any) => {\n const mintAddress = tokenAccount.account.data.parsed.info.mint\n const balance = BigInt(tokenAccount.account.data.parsed.info.tokenAmount.amount)\n const decimals = tokenAccount.account.data.parsed.info.tokenAmount.decimals\n\n const knownToken = knownTokens.find((token) => token.identifier === mintAddress)\n\n if (knownToken) {\n return {\n tokenAddress: mintAddress,\n balance,\n metadata: {\n name: knownToken.name,\n symbol: knownToken.symbol,\n decimals: knownToken.decimals,\n logoUrl: getWarpChainAssetLogoUrl(knownToken, this.config) || '',\n },\n }\n }\n\n const metadata = await this.getTokenMetadata(mintAddress)\n\n return {\n tokenAddress: mintAddress,\n balance,\n metadata: {\n name: metadata.name,\n symbol: metadata.symbol,\n decimals: metadata.decimals || decimals,\n logoUrl: metadata.logoUrl,\n },\n }\n })\n )\n\n return balances.filter((b: any) => b.balance > 0n)\n } catch (error) {\n return []\n }\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n try {\n const mintPublicKey = new PublicKey(tokenAddress)\n const mintInfo = await getMint(this.connection, mintPublicKey)\n\n return {\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n decimals: mintInfo.decimals,\n logoUrl: '',\n }\n } catch (error) {\n return {\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n decimals: WarpSolanaConstants.NativeToken.Decimals,\n logoUrl: '',\n }\n }\n }\n\n private async waitForTransaction(signature: string): Promise<any> {\n const maxWaitTime = 300000\n const startTime = Date.now()\n let delay = 1000\n let lastError: any = null\n let attempts = 0\n\n while (Date.now() - startTime < maxWaitTime) {\n attempts++\n try {\n const tx = await this.tryFetchTransaction(signature)\n if (tx) return tx\n } catch (err: any) {\n lastError = err\n }\n if (Date.now() - startTime < maxWaitTime) {\n delay = this.calculateBackoffDelay(delay, attempts, lastError)\n await new Promise((resolve) => setTimeout(resolve, delay))\n }\n }\n\n try {\n return await this.connection.getTransaction(signature, { commitment: 'confirmed', maxSupportedTransactionVersion: 0 })\n } catch {\n return null\n }\n }\n\n private async tryFetchTransaction(signature: string): Promise<any> {\n try {\n const confirmation = await Promise.race([\n this.connection.confirmTransaction(signature, 'finalized'),\n new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 60000)),\n ])\n if (confirmation) {\n const tx = await this.connection.getTransaction(signature, { commitment: 'finalized', maxSupportedTransactionVersion: 0 })\n if (tx) return tx\n }\n } catch {\n // Try direct fetch\n }\n\n try {\n const tx = await this.connection.getTransaction(signature, { commitment: 'finalized', maxSupportedTransactionVersion: 0 })\n if (tx) return tx\n } catch {\n // Try confirmed\n }\n\n try {\n return await this.connection.getTransaction(signature, { commitment: 'confirmed', maxSupportedTransactionVersion: 0 })\n } catch {\n return null\n }\n }\n\n private calculateBackoffDelay(currentDelay: number, attempts: number, lastError: any): number {\n if (lastError?.message?.includes('429') || lastError?.message?.includes('rate limit')) {\n return Math.min(currentDelay * 2, 30000)\n }\n\n if (attempts % 10 === 0) {\n return 2000\n }\n\n return Math.min(currentDelay * 1.1, 15000)\n }\n\n private createFailedAction(signature: string, error: string): WarpChainAction {\n return {\n chain: this.chain.name,\n id: signature,\n receiver: '',\n sender: '',\n value: 0n,\n function: '',\n status: 'failed',\n createdAt: new Date().toISOString(),\n error,\n tx: {\n signature,\n slot: 0,\n blockTime: null,\n err: { message: error },\n } as any,\n }\n }\n\n private parseTransactionToAction(tx: any, signature: string): WarpChainAction {\n const slot = tx.slot\n const blockTime = tx.blockTime ? new Date(tx.blockTime * 1000).toISOString() : new Date().toISOString()\n const accountKeys = this.extractAccountKeys(tx.transaction.message)\n const sender = accountKeys[0]?.toBase58() || ''\n const receiver = accountKeys.length > 1 ? accountKeys[1]?.toBase58() || '' : ''\n const value = this.calculateTransactionValue(tx.meta)\n const status = tx.meta?.err ? 'failed' : 'success'\n const functionName = this.determineFunctionName(tx.transaction.message)\n\n return {\n chain: this.chain.name,\n id: signature,\n receiver,\n sender,\n value,\n function: functionName,\n status,\n createdAt: blockTime,\n error: tx.meta?.err ? JSON.stringify(tx.meta.err) : null,\n tx: {\n signature,\n slot,\n blockTime,\n err: tx.meta?.err || null,\n } as any,\n }\n }\n\n private extractAccountKeys(message: any): PublicKey[] {\n if ('staticAccountKeys' in message) {\n return message.staticAccountKeys || []\n }\n\n try {\n const allKeys = (message as any).getAccountKeys?.()\n if (allKeys) {\n return allKeys.keySegments().flat() || []\n }\n } catch {\n // Ignore\n }\n\n return []\n }\n\n private calculateTransactionValue(meta: any): bigint {\n const preBalances = meta?.preBalances || []\n const postBalances = meta?.postBalances || []\n if (preBalances.length === 0 || postBalances.length === 0) return 0n\n return BigInt(Math.abs(postBalances[0] - preBalances[0]))\n }\n\n private determineFunctionName(message: any): string {\n let compiledInstructions: any[] = []\n if ('compiledInstructions' in message && Array.isArray(message.compiledInstructions)) {\n compiledInstructions = message.compiledInstructions\n }\n\n if (compiledInstructions.length === 0) return 'transfer'\n return compiledInstructions[0]?.programIdIndex !== undefined ? 'contract_call' : 'transfer'\n }\n}\n","export const WarpSolanaConstants = {\n ComputeUnitLimit: {\n Default: 200000,\n Transfer: 5000,\n TokenTransfer: 10000,\n ContractCall: 200000,\n },\n PriorityFee: {\n Default: 1000,\n },\n Validation: {\n MinComputeUnits: 1000,\n MaxComputeUnits: 1400000,\n },\n Programs: {\n TokenProgram: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n SystemProgram: '11111111111111111111111111111111',\n },\n NativeToken: {\n Identifier: 'SOL',\n Decimals: 9,\n },\n}\n\nexport enum SolanaExplorers {\n Solscan = 'solscan',\n SolscanMainnet = 'solscan_mainnet',\n SolscanDevnet = 'solscan_devnet',\n SolanaExplorer = 'solana_explorer',\n SolanaExplorerMainnet = 'solana_explorer_mainnet',\n SolanaExplorerDevnet = 'solana_explorer_devnet',\n}\n\nexport type ExplorerName = SolanaExplorers\n\nexport const SolanaExplorerMap = {\n solana: {\n mainnet: [SolanaExplorers.SolscanMainnet, SolanaExplorers.SolanaExplorerMainnet] as const,\n testnet: [SolanaExplorers.Solscan, SolanaExplorers.SolanaExplorer] as const,\n devnet: [SolanaExplorers.SolscanDevnet, SolanaExplorers.SolanaExplorerDevnet] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [SolanaExplorers.Solscan]: 'https://solscan.io',\n [SolanaExplorers.SolscanMainnet]: 'https://solscan.io',\n [SolanaExplorers.SolscanDevnet]: 'https://solscan.io',\n [SolanaExplorers.SolanaExplorer]: 'https://explorer.solana.com',\n [SolanaExplorers.SolanaExplorerMainnet]: 'https://explorer.solana.com',\n [SolanaExplorers.SolanaExplorerDevnet]: 'https://explorer.solana.com',\n}\n\nexport const SolanaExplorerNames = {\n mainnet: [SolanaExplorers.SolscanMainnet, SolanaExplorers.SolanaExplorerMainnet] as const,\n testnet: [SolanaExplorers.Solscan, SolanaExplorers.SolanaExplorer] as const,\n devnet: [SolanaExplorers.SolscanDevnet, SolanaExplorers.SolanaExplorerDevnet] as const,\n} as const\n\nexport const SolanaExplorerUrls: Record<ExplorerName, string> = ExplorerUrls\n\nexport const X402SolanaNetworkIdentifiers = {\n Mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n Devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n} as const\n\nexport const SupportedX402SolanaNetworks: string[] = [X402SolanaNetworkIdentifiers.Mainnet, X402SolanaNetworkIdentifiers.Devnet]\n","import { WarpChainName, WarpChainAsset, WarpChainEnv } from '@joai/warps'\nimport { SolanaMainnetTokens } from './tokens/solana-mainnet'\nimport { SolanaDevnetTokens } from './tokens/solana-devnet'\nimport { SolanaTestnetTokens } from './tokens/solana-testnet'\n\nexport const KnownTokens: Partial<Record<WarpChainName, Record<WarpChainEnv, WarpChainAsset[]>>> = {\n [WarpChainName.Solana]: {\n mainnet: SolanaMainnetTokens,\n testnet: SolanaTestnetTokens,\n devnet: SolanaDevnetTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChainName, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: WarpChainName, env: WarpChainEnv): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import { WarpChainAsset, WarpChainName } from '@joai/warps'\n\nconst SolanaChain = WarpChainName.Solana\n\nexport const SolanaMainnetTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'SOL',\n symbol: 'SOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: SolanaChain,\n identifier: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: SolanaChain,\n identifier: 'So11111111111111111111111111111111111111112',\n name: 'Wrapped SOL',\n symbol: 'WSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: '3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: SolanaChain,\n identifier: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs',\n name: 'Ethereum (Wormhole)',\n symbol: 'ETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/279/small/ethereum.png',\n },\n {\n chain: SolanaChain,\n identifier: '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj',\n name: 'Orca',\n symbol: 'ORCA',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/17547/small/orca.png',\n },\n {\n chain: SolanaChain,\n identifier: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So',\n name: 'Marinade SOL',\n symbol: 'mSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/17752/small/mSOL.png',\n },\n {\n chain: SolanaChain,\n identifier: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',\n name: 'JitoSOL',\n symbol: 'JitoSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/30168/small/jitosol.png',\n },\n {\n chain: SolanaChain,\n identifier: 'bSo13r4TkiE4KumL71LsHTPpL2suBYJxqsd4P6Bwv11',\n name: 'bSOL',\n symbol: 'bSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/30167/small/bsol.png',\n },\n {\n chain: SolanaChain,\n identifier: '7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT',\n name: 'UXD Stablecoin',\n symbol: 'UXD',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/25342/small/uxd.png',\n },\n {\n chain: SolanaChain,\n identifier: 'A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM',\n name: 'USD Coin (Wormhole)',\n symbol: 'USDCet',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n]\n","import { WarpChainAsset, WarpChainName } from '@joai/warps'\n\nconst SolanaChain = WarpChainName.Solana\n\nexport const SolanaDevnetTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'SOL',\n symbol: 'SOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: SolanaChain,\n identifier: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: SolanaChain,\n identifier: 'So11111111111111111111111111111111111111112',\n name: 'Wrapped SOL',\n symbol: 'WSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n]\n","import { WarpChainAsset, WarpChainName } from '@joai/warps'\n\nconst SolanaChain = WarpChainName.Solana\n\nexport const SolanaTestnetTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'SOL',\n symbol: 'SOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n {\n chain: SolanaChain,\n identifier: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: SolanaChain,\n identifier: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: SolanaChain,\n identifier: 'So11111111111111111111111111111111111111112',\n name: 'Wrapped SOL',\n symbol: 'WSOL',\n decimals: 9,\n logoUrl: 'https://assets.coingecko.com/coins/images/4128/small/solana.png',\n },\n]\n","import { createAssociatedTokenAccountInstruction, createTransferInstruction, getAssociatedTokenAddress, TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport { ComputeBudgetProgram, Connection, MessageV0, PublicKey, SystemProgram, TransactionInstruction, VersionedTransaction } from '@solana/web3.js'\nimport {\n AdapterWarpExecutor,\n applyOutputToMessages,\n extractResolvedInputValues,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecutionResult,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@joai/warps'\nimport { WarpSolanaConstants } from './constants'\nimport { WarpSolanaOutput } from './WarpSolanaOutput'\nimport { WarpSolanaSerializer } from './WarpSolanaSerializer'\n\nexport class WarpSolanaExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpSolanaSerializer\n private readonly connection: Connection\n private readonly output: WarpSolanaOutput\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpSolanaSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.output = new WarpSolanaOutput(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<VersionedTransaction> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: VersionedTransaction | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpSolanaExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpSolanaExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpSolanaExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<VersionedTransaction> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpSolanaExecutor: createTransfer - user address not set')\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Destination address is required')\n\n const destinationPubkey = this.toPublicKey(executable.destination, 'Invalid destination address')\n const fromPubkey = this.toPublicKey(userWallet, 'Invalid user wallet address')\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet, destinationPubkey)\n }\n\n const instructions: TransactionInstruction[] = []\n\n if (executable.value > 0n) {\n instructions.push(SystemProgram.transfer({ fromPubkey, toPubkey: destinationPubkey, lamports: Number(executable.value) }))\n }\n\n if (executable.data) {\n const data = this.serializer.stringToTyped(executable.data)\n if (data && typeof data === 'string') {\n const dataBuffer = Buffer.from(data, 'base64')\n instructions.push(\n new TransactionInstruction({\n keys: [\n { pubkey: fromPubkey, isSigner: true, isWritable: true },\n { pubkey: destinationPubkey, isSigner: false, isWritable: true },\n ],\n programId: destinationPubkey,\n data: dataBuffer,\n })\n )\n }\n }\n\n return this.setTransactionDefaults(instructions, fromPubkey)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<VersionedTransaction> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpSolanaExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpSolanaExecutor: Contract action must have a function name')\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Contract address is required')\n\n const programId = this.toPublicKey(executable.destination, 'Invalid contract address')\n const fromPubkey = this.toPublicKey(userWallet, 'Invalid user wallet address')\n const instructions: TransactionInstruction[] = []\n\n const argsToUse = this.extractContractArgs(executable)\n const nativeArgs = argsToUse.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const instructionData = this.buildInstructionData(action, nativeArgs)\n\n const accounts = await this.buildInstructionAccounts(action, executable, fromPubkey, programId)\n await this.ensureATAs(action, accounts, fromPubkey, instructions)\n instructions.push(new TransactionInstruction({ keys: accounts, programId, data: instructionData }))\n\n if (executable.value > 0n) {\n instructions.push(SystemProgram.transfer({ fromPubkey, toPubkey: programId, lamports: Number(executable.value) }))\n }\n\n return this.setTransactionDefaults(instructions, fromPubkey)\n }\n\n private async ensureATAs(\n action: any,\n accounts: Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>,\n fromPubkey: PublicKey,\n instructions: TransactionInstruction[]\n ): Promise<void> {\n if (!action.accounts || !Array.isArray(action.accounts)) return\n\n const createdATAs = new Set<string>()\n\n for (let idx = 0; idx < action.accounts.length; idx++) {\n const accountDef = action.accounts[idx]\n const accountStr = typeof accountDef === 'string' ? accountDef : JSON.stringify(accountDef)\n\n if (accountStr.includes('{{USER_ATA:')) {\n const match = accountStr.match(/USER_ATA[:\\s]*([^\"}\\s]+)/)\n if (match) {\n const mintAddress = match[1]\n try {\n const mintPubkey = new PublicKey(mintAddress)\n const expectedAta = await getAssociatedTokenAddress(mintPubkey, fromPubkey)\n const ataKey = expectedAta.toBase58()\n\n if (!createdATAs.has(ataKey)) {\n createdATAs.add(ataKey)\n const ataInfo = await this.connection.getAccountInfo(expectedAta)\n if (!ataInfo) {\n instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, expectedAta, fromPubkey, mintPubkey))\n }\n }\n } catch {\n continue\n }\n }\n }\n\n if (accountStr.includes('{{RECEIVER_ATA:')) {\n const match = accountStr.match(/RECEIVER_ATA[:\\s]*([^\"}\\s:]+)[:\\s]*([^\"}\\s]+)/)\n if (match) {\n const mintAddress = match[1]\n const receiverAddress = match[2]\n try {\n const mintPubkey = new PublicKey(mintAddress)\n const receiverPubkey = new PublicKey(receiverAddress)\n const expectedAta = await getAssociatedTokenAddress(mintPubkey, receiverPubkey)\n const ataKey = expectedAta.toBase58()\n\n if (!createdATAs.has(ataKey)) {\n createdATAs.add(ataKey)\n const ataInfo = await this.connection.getAccountInfo(expectedAta)\n if (!ataInfo) {\n instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, expectedAta, receiverPubkey, mintPubkey))\n }\n }\n } catch {\n continue\n }\n }\n }\n }\n }\n\n private encodeInstructionData(instructionDef: any, args: any[], funcName: string): Buffer {\n try {\n let discriminatorBuffer: Buffer\n if (instructionDef.discriminator) {\n if (Buffer.isBuffer(instructionDef.discriminator)) {\n discriminatorBuffer = instructionDef.discriminator\n } else if (Array.isArray(instructionDef.discriminator)) {\n discriminatorBuffer = Buffer.from(instructionDef.discriminator)\n } else {\n discriminatorBuffer = Buffer.from(funcName).slice(0, 8)\n }\n } else {\n discriminatorBuffer = Buffer.from(funcName).slice(0, 8)\n }\n\n if (args.length > 0 && instructionDef.args && instructionDef.args.length > 0) {\n const encodedArgs = this.encodeArgs(args, instructionDef.args)\n // @ts-expect-error - Buffer.concat works correctly but TypeScript types are strict\n return Buffer.concat([discriminatorBuffer, encodedArgs])\n }\n\n return discriminatorBuffer\n } catch {\n return this.encodeBasicInstructionData(args, funcName)\n }\n }\n\n private encodeBasicInstructionData(args: any[], funcName: string): Buffer {\n const funcHash = Buffer.from(funcName).slice(0, 8)\n const data = Buffer.alloc(8)\n data.set(funcHash, 0)\n\n if (args.length > 0) {\n const encodedArgs = args.map((arg) => {\n if (typeof arg === 'string') {\n return Buffer.from(arg, 'utf8')\n } else if (typeof arg === 'number' || typeof arg === 'bigint') {\n const num = typeof arg === 'bigint' ? Number(arg) : arg\n const buf = Buffer.alloc(8)\n buf.writeBigUInt64LE(BigInt(num), 0)\n return buf\n } else if (Buffer.isBuffer(arg)) {\n return arg\n } else if (arg instanceof Uint8Array) {\n return Buffer.from(arg)\n }\n return Buffer.from(String(arg), 'utf8')\n })\n // @ts-expect-error - Buffer.concat works correctly but TypeScript types are strict\n return Buffer.concat([data, ...encodedArgs])\n }\n\n return data\n }\n\n private encodeArgs(args: any[], argDefs: any[]): Buffer {\n const buffers: Buffer[] = []\n for (let i = 0; i < Math.min(args.length, argDefs.length); i++) {\n const arg = args[i]\n const def = argDefs[i]\n\n if (def.type === 'u64' || def.type === 'u128') {\n const num = typeof arg === 'bigint' ? arg : BigInt(arg)\n const size = def.type === 'u128' ? 16 : 8\n const buf = Buffer.alloc(size)\n if (size === 16) {\n buf.writeBigUInt64LE(num & 0xffffffffffffffffn, 0)\n buf.writeBigUInt64LE(num >> 64n, 8)\n } else {\n buf.writeBigUInt64LE(num, 0)\n }\n buffers.push(buf)\n } else if (def.type === 'string') {\n buffers.push(Buffer.from(String(arg), 'utf8'))\n } else if (def.type === 'publicKey' || def.type === 'pubkey') {\n try {\n const pubkey = new PublicKey(arg)\n buffers.push(Buffer.from(pubkey.toBuffer()))\n } catch {\n buffers.push(Buffer.from(String(arg), 'utf8'))\n }\n } else {\n buffers.push(Buffer.from(String(arg), 'utf8'))\n }\n }\n // @ts-expect-error - Buffer.concat works correctly but TypeScript types are strict\n return Buffer.concat(buffers)\n }\n\n private async buildInstructionAccounts(\n action: any,\n executable: WarpExecutable,\n fromPubkey: PublicKey,\n programId: PublicKey\n ): Promise<Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>> {\n const accounts: Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> = []\n\n const accountInputs = this.extractAccountInputs(action, executable)\n if (accountInputs.length > 0) {\n for (const accountInput of accountInputs) {\n while (accounts.length < accountInput.index) {\n accounts.push({ pubkey: fromPubkey, isSigner: true, isWritable: true })\n }\n const address = await this.resolveAccountFromInput(accountInput, executable, fromPubkey)\n const { isSigner, isWritable } = this.determineAccountFlags(accountInput.input, address, fromPubkey)\n accounts.push({ pubkey: address, isSigner, isWritable })\n }\n return accounts\n }\n\n if (!action.accounts || !Array.isArray(action.accounts)) return accounts\n\n for (let idx = 0; idx < action.accounts.length; idx++) {\n const accountDef = action.accounts[idx]\n let address = this.extractAccountAddress(accountDef)\n\n if (address === '[object Object]' || (typeof accountDef === 'string' && accountDef === '[object Object]')) {\n address = fromPubkey.toBase58()\n } else if (!address || address.length === 0) {\n throw new Error(`Invalid account definition at index ${idx}: ${JSON.stringify(accountDef)}`)\n }\n\n if (address === '{{USER_WALLET}}' || (typeof address === 'string' && address.includes('{{USER_WALLET}}'))) {\n address = fromPubkey.toBase58()\n } else if (typeof address === 'string' && address.includes('{{')) {\n const originalAddress = address\n let maxIterations = 10\n while (address.includes('{{') && maxIterations-- > 0) {\n const beforeInterpolation: string = address\n address = this.interpolateAccountAddress(address, executable.resolvedInputs)\n if (address === beforeInterpolation) break\n }\n if (!address || (address.includes('{{') && !address.startsWith('{{USER_ATA:') && !address.startsWith('{{RECEIVER_ATA:'))) {\n throw new Error(`Failed to interpolate account address at index ${idx}: ${originalAddress} -> ${address}. ResolvedInputs: ${JSON.stringify(executable.resolvedInputs.map(r => ({ as: r.input?.as, value: r.value })))}`)\n }\n }\n\n const pubkey = await this.resolveAccountPubkey(address, fromPubkey)\n const { isSigner, isWritable } = this.determineAccountFlags(accountDef, pubkey, fromPubkey)\n accounts.push({ pubkey, isSigner, isWritable })\n }\n\n return accounts\n }\n\n private extractAccountInputs(action: any, executable: WarpExecutable): Array<{ input: any; index: number }> {\n if (!action.inputs || !Array.isArray(action.inputs)) return []\n\n const accountInputs: Array<{ input: any; index: number }> = []\n for (const input of action.inputs) {\n if (input.position && typeof input.position === 'string' && input.position.startsWith('account:')) {\n const index = parseInt(input.position.split(':')[1] || '0', 10)\n accountInputs.push({ input, index })\n }\n }\n return accountInputs.sort((a, b) => a.index - b.index)\n }\n\n private async resolveAccountFromInput(\n accountInput: { input: any; index: number },\n executable: WarpExecutable,\n fromPubkey: PublicKey\n ): Promise<PublicKey> {\n const resolved = executable.resolvedInputs.find((r: any) => r.input === accountInput.input || r.input?.as === accountInput.input.as)\n if (!resolved) {\n throw new Error(`Account input at index ${accountInput.index} not resolved: ${accountInput.input.as || accountInput.input.name}`)\n }\n\n let address = resolved.value\n if (typeof address === 'string' && address.includes(':')) {\n address = address.split(':')[1]\n }\n\n if (!address || typeof address !== 'string') {\n throw new Error(`Invalid address for account input at index ${accountInput.index}: ${accountInput.input.as || accountInput.input.name}`)\n }\n\n if (accountInput.input.as === 'USER_WALLET') {\n return fromPubkey\n }\n\n if (accountInput.input.as?.startsWith('USER_ATA:') || accountInput.input.as?.startsWith('RECEIVER_ATA:')) {\n return await this.resolveAccountPubkey(`{{${accountInput.input.as}}}`, fromPubkey)\n }\n\n return new PublicKey(address)\n }\n\n private interpolateAccountAddress(address: string, resolvedInputs: any[]): string {\n if (!address.includes('{{')) return address\n\n for (const resolved of resolvedInputs) {\n if (!resolved.input?.as) continue\n const placeholder = `{{${resolved.input.as.toUpperCase()}}}`\n if (address === placeholder || address.includes(placeholder)) {\n let value = resolved.value\n if (typeof value === 'string' && value.includes(':')) {\n value = value.split(':')[1]\n }\n if (value) {\n return address.replace(new RegExp(placeholder.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'), String(value))\n }\n }\n }\n\n for (const resolved of resolvedInputs) {\n if (!resolved.input?.name) continue\n const placeholder = `{{${resolved.input.name.toUpperCase().replace(/\\s+/g, '_')}}}`\n if (address === placeholder || address.includes(placeholder)) {\n let value = resolved.value\n if (typeof value === 'string' && value.includes(':')) {\n value = value.split(':')[1]\n }\n if (value) {\n return address.replace(new RegExp(placeholder.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'), String(value))\n }\n }\n }\n\n return address\n }\n\n private async createTokenTransferTransaction(\n executable: WarpExecutable,\n userWallet: string,\n destinationPubkey: PublicKey\n ): Promise<VersionedTransaction> {\n if (executable.transfers.length === 0) throw new Error('WarpSolanaExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpSolanaExecutor: No native token defined for this chain')\n\n const nativeId = this.chain.nativeToken.identifier\n const nativeTokenTransfers = executable.transfers.filter((t) => t.identifier === nativeId || t.identifier === WarpSolanaConstants.NativeToken.Identifier)\n const splTokenTransfers = executable.transfers.filter((t) => t.identifier !== nativeId && t.identifier !== WarpSolanaConstants.NativeToken.Identifier)\n\n if (nativeTokenTransfers.length === 1 && splTokenTransfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n if (transfer.amount <= 0n) throw new Error('WarpSolanaExecutor: Native token transfer amount must be positive')\n const fromPubkey = new PublicKey(userWallet)\n return this.setTransactionDefaults([SystemProgram.transfer({ fromPubkey, toPubkey: destinationPubkey, lamports: Number(transfer.amount) })], fromPubkey)\n }\n\n if (nativeTokenTransfers.length === 0 && splTokenTransfers.length === 1) {\n return this.createSingleTokenTransfer(executable, splTokenTransfers[0], userWallet, destinationPubkey)\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpSolanaExecutor: Multiple token transfers not yet supported')\n throw new Error('WarpSolanaExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string,\n destinationPubkey: PublicKey\n ): Promise<VersionedTransaction> {\n const mintAddress = new PublicKey(transfer.identifier)\n const fromPubkey = new PublicKey(userWallet)\n const sourceTokenAccount = await getAssociatedTokenAddress(mintAddress, fromPubkey)\n const destinationTokenAccount = await getAssociatedTokenAddress(mintAddress, destinationPubkey)\n\n if (!(await this.connection.getAccountInfo(sourceTokenAccount))) {\n throw new Error('WarpSolanaExecutor: Source token account does not exist')\n }\n\n const instructions: TransactionInstruction[] = []\n if (!(await this.connection.getAccountInfo(destinationTokenAccount))) {\n instructions.push(createAssociatedTokenAccountInstruction(fromPubkey, destinationTokenAccount, destinationPubkey, mintAddress))\n }\n instructions.push(createTransferInstruction(sourceTokenAccount, destinationTokenAccount, fromPubkey, Number(transfer.amount)))\n\n return this.setTransactionDefaults(instructions, fromPubkey)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecutionResult> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpSolanaExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpSolanaExecutor: Query action must have a function name')\n\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Query address is required')\n const queryAddress = new PublicKey(executable.destination)\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n\n let decodedResult: any[] = []\n let isSuccess = true\n\n if (action.func === 'getAccount' || action.func === 'getAccountInfo') {\n const accountInfo = await this.connection.getAccountInfo(queryAddress)\n if (!accountInfo) {\n throw new Error('Account not found')\n }\n decodedResult = [\n accountInfo.lamports,\n accountInfo.owner.toBase58(),\n accountInfo.executable,\n accountInfo.rentEpoch,\n accountInfo.data.toString('base64'),\n ]\n } else if (action.func === 'getBalance') {\n const balance = await this.connection.getBalance(queryAddress)\n decodedResult = [balance.toString()]\n } else if (action.func === 'getProgramAccounts') {\n const accounts = await this.connection.getProgramAccounts(queryAddress)\n decodedResult = accounts.map((acc) => ({\n pubkey: acc.pubkey.toBase58(),\n account: {\n lamports: acc.account.lamports,\n owner: acc.account.owner.toBase58(),\n data: acc.account.data.toString('base64'),\n },\n }))\n } else {\n const accountInfo = await this.connection.getAccountInfo(queryAddress)\n if (!accountInfo) {\n throw new Error('Account not found')\n }\n decodedResult = [accountInfo.data.toString('base64')]\n }\n\n const { values, output } = await this.output.extractQueryOutput(executable.warp, decodedResult, executable.action, executable.resolvedInputs)\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, output)\n\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: isSuccess ? 'success' : 'error',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n output: { ...output, _DATA: decodedResult },\n messages: applyOutputToMessages(executable.warp, output, this.config),\n destination,\n resolvedInputs,\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const messageBytes = new TextEncoder().encode(message)\n const signatureBytes = Buffer.from(signature, 'base64')\n return ''\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n\n private async setTransactionDefaults(instructions: TransactionInstruction[], fromPubkey: PublicKey | null): Promise<VersionedTransaction> {\n const { blockhash } = await this.connection.getLatestBlockhash('confirmed')\n const allInstructions = this.addComputeBudgetInstructions(instructions)\n const accountMetaMap = this.buildAccountMetaMap(allInstructions, fromPubkey)\n const { signedAccounts, unsignedAccounts } = this.sortAccounts(accountMetaMap)\n const { staticAccountKeys, accountIndexMap } = this.buildAccountIndexMap(signedAccounts, unsignedAccounts)\n const compiledInstructions = this.compileInstructions(allInstructions, accountIndexMap)\n const messageV0 = this.buildMessageV0(blockhash, signedAccounts, unsignedAccounts, accountMetaMap, staticAccountKeys, compiledInstructions)\n\n const versionedTx = new VersionedTransaction(messageV0)\n if (versionedTx.version !== 0) {\n throw new Error(`Expected VersionedTransaction v0, got version: ${versionedTx.version}`)\n }\n\n return versionedTx\n }\n\n private toPublicKey(address: string, errorMsg: string): PublicKey {\n try {\n return new PublicKey(address)\n } catch {\n throw new Error(`WarpSolanaExecutor: ${errorMsg}`)\n }\n }\n\n private extractContractArgs(executable: WarpExecutable): string[] {\n if (executable.args.length > 0) return executable.args\n if (executable.resolvedInputs.length === 0) return []\n\n const argInputs = executable.resolvedInputs\n .filter((ri) => ri.input.position?.toString().startsWith('arg:'))\n .map((ri) => {\n const index = Math.max(0, parseInt(ri.input.position!.toString().split(':')[1] || '0', 10) - 1)\n return { index, value: ri.value }\n })\n .sort((a, b) => a.index - b.index)\n\n const maxIndex = Math.max(...argInputs.map((a) => a.index), -1)\n if (maxIndex < 0) return []\n\n const args = new Array(maxIndex + 1).fill(null)\n argInputs.forEach(({ index, value }) => {\n if (value) args[index] = value\n })\n return args.filter((arg): arg is string => arg !== null && arg !== undefined)\n }\n\n private buildInstructionData(action: any, nativeArgs: any[]): Buffer {\n if (!action.abi || typeof action.abi !== 'string') {\n return this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n\n try {\n const abi = JSON.parse(action.abi)\n if (abi.instructions && abi.instructions[action.func]) {\n return this.encodeInstructionData(abi.instructions[action.func], nativeArgs, action.func)\n }\n } catch {\n // Fall through to basic encoding\n }\n\n return this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n\n\n private extractAccountAddress(accountDef: any): string | undefined {\n if (typeof accountDef === 'string') return accountDef\n if (!accountDef || typeof accountDef !== 'object') return undefined\n\n const str = JSON.stringify(accountDef)\n if (str.includes('USER_WALLET') || str.includes('{{USER_WALLET}}')) return '{{USER_WALLET}}'\n if (str.includes('RECEIVER_ADDRESS') || str.includes('{{RECEIVER_ADDRESS}}')) return '{{RECEIVER_ADDRESS}}'\n if (str.includes('USER_ATA')) {\n const match = str.match(/USER_ATA[:\\s]*([^\"}\\s]+)/)\n if (match) return `{{USER_ATA:${match[1]}}}`\n }\n\n const addrValue = accountDef.address || accountDef.pubkey || accountDef.value\n if (typeof addrValue === 'string') return addrValue\n if (addrValue?.toBase58) return addrValue.toBase58()\n if (addrValue?.identifier) return addrValue.identifier\n if (addrValue?.value) return addrValue.value\n\n const keys = Object.keys(accountDef)\n if (keys.length === 1 && typeof accountDef[keys[0]] === 'string') return accountDef[keys[0]]\n return undefined\n }\n\n private async resolveAccountPubkey(address: string, fromPubkey: PublicKey): Promise<PublicKey> {\n if (address.includes('{{USER_WALLET}}') || address === fromPubkey.toBase58()) {\n return fromPubkey\n }\n\n if (address.startsWith('{{USER_ATA:') && address.endsWith('}}')) {\n const mintAddress = address.slice(11, -2)\n if (!mintAddress || mintAddress.includes('{{')) {\n throw new Error(`Invalid USER_ATA placeholder: ${address}. Mint address must be resolved first.`)\n }\n const mintPubkey = new PublicKey(mintAddress)\n return await getAssociatedTokenAddress(mintPubkey, fromPubkey)\n }\n\n if (address.startsWith('{{RECEIVER_ATA:') && address.endsWith('}}')) {\n const content = address.slice(15, -2)\n const parts = content.split(':')\n if (parts.length === 2) {\n let mintAddress = parts[0]\n let receiverAddress = parts[1]\n if (mintAddress.includes('{{') || receiverAddress.includes('{{')) {\n throw new Error(`Invalid RECEIVER_ATA placeholder: ${address}. Mint and receiver addresses must be resolved first.`)\n }\n if (mintAddress.includes(':')) mintAddress = mintAddress.split(':')[1]\n if (receiverAddress.includes(':')) receiverAddress = receiverAddress.split(':')[1]\n const mintPubkey = new PublicKey(mintAddress)\n const receiverPubkey = new PublicKey(receiverAddress)\n return await getAssociatedTokenAddress(mintPubkey, receiverPubkey)\n }\n }\n\n return new PublicKey(address)\n }\n\n private determineAccountFlags(accountDef: any, pubkey: PublicKey, fromPubkey: PublicKey): { isSigner: boolean; isWritable: boolean } {\n const accountMeta = typeof accountDef === 'object' ? accountDef : {}\n\n if (pubkey.equals(fromPubkey)) {\n return { isSigner: true, isWritable: true }\n }\n\n const isSigner = accountMeta.signer === true\n const isWritable = typeof accountDef === 'object' && accountMeta.writable !== undefined ? accountMeta.writable !== false : true\n\n return { isSigner, isWritable }\n }\n\n private addComputeBudgetInstructions(instructions: TransactionInstruction[]): TransactionInstruction[] {\n const hasTokenTransfer = instructions.some((ix) => ix.programId.toBase58() === WarpSolanaConstants.Programs.TokenProgram)\n const computeUnits = hasTokenTransfer ? WarpSolanaConstants.ComputeUnitLimit.TokenTransfer : WarpSolanaConstants.ComputeUnitLimit.Default\n\n const computeUnitLimitIx = ComputeBudgetProgram.setComputeUnitLimit({ units: computeUnits })\n const computeUnitPriceIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: WarpSolanaConstants.PriorityFee.Default })\n\n return [computeUnitLimitIx, computeUnitPriceIx, ...instructions]\n }\n\n private buildAccountMetaMap(\n instructions: TransactionInstruction[],\n fromPubkey: PublicKey | null\n ): Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> {\n const accountMetaMap = new Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>()\n\n if (fromPubkey) {\n accountMetaMap.set(fromPubkey.toBase58(), { pubkey: fromPubkey, isSigner: true, isWritable: true })\n }\n\n for (const ix of instructions) {\n const programIdStr = ix.programId.toBase58()\n if (!accountMetaMap.has(programIdStr)) {\n accountMetaMap.set(programIdStr, { pubkey: ix.programId, isSigner: false, isWritable: false })\n }\n\n for (const key of ix.keys) {\n const keyStr = key.pubkey.toBase58()\n const existing = accountMetaMap.get(keyStr)\n if (existing) {\n accountMetaMap.set(keyStr, {\n pubkey: key.pubkey,\n isSigner: existing.isSigner || key.isSigner,\n isWritable: existing.isWritable || key.isWritable,\n })\n } else {\n accountMetaMap.set(keyStr, {\n pubkey: key.pubkey,\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })\n }\n }\n }\n\n return accountMetaMap\n }\n\n private sortAccounts(accountMetaMap: Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>): {\n signedAccounts: PublicKey[]\n unsignedAccounts: PublicKey[]\n } {\n const signedAccounts: PublicKey[] = []\n const unsignedAccounts: PublicKey[] = []\n\n for (const meta of accountMetaMap.values()) {\n ;(meta.isSigner ? signedAccounts : unsignedAccounts).push(meta.pubkey)\n }\n\n const sortByWritable = (a: PublicKey, b: PublicKey) =>\n (accountMetaMap.get(a.toBase58())!.isWritable ? 0 : 1) - (accountMetaMap.get(b.toBase58())!.isWritable ? 0 : 1)\n\n signedAccounts.sort(sortByWritable)\n unsignedAccounts.sort(sortByWritable)\n return { signedAccounts, unsignedAccounts }\n }\n\n private buildAccountIndexMap(\n signedAccounts: PublicKey[],\n unsignedAccounts: PublicKey[]\n ): { staticAccountKeys: PublicKey[]; accountIndexMap: Map<string, number> } {\n const staticAccountKeys = [...signedAccounts, ...unsignedAccounts]\n const accountIndexMap = new Map<string, number>()\n\n staticAccountKeys.forEach((key, index) => {\n accountIndexMap.set(key.toBase58(), index)\n })\n\n return { staticAccountKeys, accountIndexMap }\n }\n\n private compileInstructions(\n instructions: TransactionInstruction[],\n accountIndexMap: Map<string, number>\n ): Array<{ programIdIndex: number; accountKeyIndexes: number[]; data: Uint8Array }> {\n return instructions.map((ix) => {\n const programIdIndex = accountIndexMap.get(ix.programId.toBase58())!\n const accountKeyIndexes = ix.keys.map((key) => accountIndexMap.get(key.pubkey.toBase58())!)\n return {\n programIdIndex,\n accountKeyIndexes,\n data: Uint8Array.from(ix.data),\n }\n })\n }\n\n private buildMessageV0(\n blockhash: string,\n signedAccounts: PublicKey[],\n unsignedAccounts: PublicKey[],\n accountMetaMap: Map<string, { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }>,\n staticAccountKeys: PublicKey[],\n compiledInstructions: Array<{ programIdIndex: number; accountKeyIndexes: number[]; data: Uint8Array }>\n ): MessageV0 {\n const getWritable = (key: PublicKey) => accountMetaMap.get(key.toBase58())!.isWritable\n return new MessageV0({\n header: {\n numRequiredSignatures: signedAccounts.length,\n numReadonlySignedAccounts: signedAccounts.filter((k) => !getWritable(k)).length,\n numReadonlyUnsignedAccounts: unsignedAccounts.filter((k) => !getWritable(k)).length,\n },\n staticAccountKeys,\n recentBlockhash: blockhash,\n compiledInstructions,\n addressTableLookups: [],\n })\n }\n}\n","import {\n AdapterWarpOutput,\n evaluateOutputCommon,\n extractResolvedInputValues,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseOutputOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecutionResult,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionOutput,\n WarpNativeValue,\n WarpCache,\n WarpCacheKey,\n} from '@joai/warps'\nimport { Connection, TransactionSignature } from '@solana/web3.js'\nimport { WarpSolanaSerializer } from './WarpSolanaSerializer'\n\nexport class WarpSolanaOutput implements AdapterWarpOutput {\n private readonly serializer: WarpSolanaSerializer\n private readonly connection: Connection\n private readonly cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpSolanaSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.cache = new WarpCache(config.env, config.cache)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecutionResult> {\n const inputs: ResolvedInput[] = this.cache.get(WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || '', actionIndex)) ?? []\n const resolvedInputs = extractResolvedInputValues(inputs)\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction, resolvedInputs)\n }\n\n if (typeof tx === 'string') {\n return this.handleTransactionSignature(warp, actionIndex, tx, resolvedInputs)\n }\n\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex, resolvedInputs: string[] = []): WarpActionExecutionResult {\n return {\n status: 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction, resolvedInputs: string[] = []): Promise<WarpActionExecutionResult> {\n const isPending = tx.status === 'pending'\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.signature || ''\n\n if (isPending) {\n throw new Error(`Transaction ${transactionHash} is still pending. Execution should only proceed after finalization.`)\n }\n\n const slot = tx.tx?.slot || 0\n const blockTime = tx.tx?.blockTime || 0\n const rawValues = [transactionHash, slot.toString(), blockTime.toString()]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleTransactionSignature(\n warp: Warp,\n actionIndex: WarpActionIndex,\n signature: TransactionSignature,\n resolvedInputs: string[] = []\n ): Promise<WarpActionExecutionResult> {\n try {\n const tx = await this.connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n const success = !tx.meta?.err\n const slot = tx.slot\n const blockTime = tx.blockTime || 0\n const fee = tx.meta?.fee || 0\n\n const rawValues = [signature, slot.toString(), blockTime.toString(), fee.toString()]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: signature,\n tx: {\n signature,\n slot,\n blockTime,\n fee,\n err: tx.meta?.err || null,\n } as any,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n } catch (error) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n }\n\n async extractQueryOutput(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[]; mapped: Record<string, any> }; output: WarpExecutionOutput }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues, mapped: {} }\n let output: WarpExecutionOutput = {}\n\n if (!warp.output) return { values, output }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.output)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseOutputOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n output[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n output[key] = getNestedValue(path) || null\n } else {\n output[key] = path\n }\n }\n\n return { values, output: await evaluateOutputCommon(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const tx = await this.connection.getTransaction(txHash, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) {\n return { status: 'pending' }\n }\n\n return {\n status: tx.meta?.err ? 'failed' : 'confirmed',\n blockNumber: tx.slot,\n gasUsed: BigInt(tx.meta?.fee || 0),\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<any> {\n try {\n const tx = await this.connection.getTransaction(txHash, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) {\n return null\n }\n\n return {\n signature: txHash,\n slot: tx.slot,\n blockTime: tx.blockTime,\n fee: tx.meta?.fee || 0,\n err: tx.meta?.err || null,\n }\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@joai/warps'\nimport { PublicKey } from '@solana/web3.js'\nimport bs58 from 'bs58'\n\nexport class WarpSolanaSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (value && typeof value === 'object' && 'toBase58' in value && typeof value.toBase58 === 'function') {\n return `address:${value.toBase58()}`\n }\n if (typeof value === 'string') {\n if (value.length >= 32 && value.length <= 44) {\n try {\n const pubkey = new PublicKey(value)\n if (pubkey.toBase58() === value && /^[1-9A-HJ-NP-Za-km-z]+$/.test(value)) {\n return `address:${value}`\n }\n } catch {\n // Not a valid Solana address\n }\n }\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (value instanceof PublicKey) {\n return `address:${value.toBase58()}`\n }\n if (value instanceof Uint8Array) {\n return `hex:${bs58.encode(value)}`\n }\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n const asset = value as { identifier: string; amount: bigint; decimals?: number }\n if (asset.decimals !== undefined) {\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${WarpConstants.ArgCompositeSeparator}${asset.decimals}`\n }\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n case 'asset':\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n return value\n }\n return value\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n case 'asset':\n const assetParts = stringValue.split(WarpConstants.ArgCompositeSeparator)\n const identifier = assetParts[0] || ''\n const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n\n const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : undefined\n return { identifier, amount, decimals }\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { ExplorerName, SolanaExplorers, SolanaExplorerNames, SolanaExplorerUrls } from './constants'\n\nexport class WarpSolanaExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const explorers = SolanaExplorerNames[this.config.env]\n if (!explorers) {\n return [SolanaExplorers.SolscanMainnet as ExplorerName]\n }\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = SolanaExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = SolanaExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = SolanaExplorerUrls[primaryExplorer]\n return url || SolanaExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/tx/${hash}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/tx/${hash}${cluster}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/block/${blockNumber}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/block/${blockNumber}${cluster}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/token/${identifier}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/token/${identifier}${cluster}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n if (baseUrl.includes('?')) {\n const cluster = this.config.env === 'mainnet' ? '' : `&cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n return `${baseUrl}/account/${address}${cluster}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/account/${address}${cluster}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}${cluster}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}${cluster}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/account/${address}${cluster}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const cluster = this.config.env === 'mainnet' ? '' : `?cluster=${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = SolanaExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}${cluster}`\n }\n })\n\n return urls\n }\n}\n","/// <reference path=\"./types.d.ts\" />\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { createKeyPairSignerFromBytes } from '@solana/kit'\nimport { Commitment, Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport { registerExactSvmScheme } from '@x402/svm/exact/client'\nimport { SupportedX402SolanaNetworks } from './constants'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\nimport { ReadOnlyWalletProvider } from './providers/ReadOnlyWalletProvider'\n\nexport class WarpSolanaWallet implements AdapterWarpWallet {\n private connection: Connection\n private walletProvider: WalletProvider | null\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.walletProvider = this.createProvider()\n this.initializeCache()\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.signTransaction(tx)\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n return Promise.all(txs.map((tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const transaction = this.resolveTransaction(tx)\n\n if (!transaction.signatures || transaction.signatures.length === 0 || !transaction.signatures.some((sig) => sig.some((b) => b !== 0))) {\n throw new Error('Transaction must be signed before sending')\n }\n\n try {\n const shouldSkipPreflight = await this.shouldSkipPreflight(transaction)\n return await this.sendWithRetry(transaction, shouldSkipPreflight)\n } catch (simError: any) {\n if (simError.message?.includes('MissingRequiredSignature')) {\n return await this.sendRawTransaction(transaction, { skipPreflight: true })\n }\n throw new Error(`Transaction send failed: ${simError?.message || String(simError)}`)\n }\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation('mnemonic')\n return await walletProvider.importFromMnemonic(mnemonic)\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation('privateKey')\n return await walletProvider.importFromPrivateKey(privateKey)\n }\n\n async export(provider: WarpWalletProvider): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation(provider)\n return await walletProvider.export()\n }\n\n async generate(provider: WarpWalletProvider): Promise<WarpWalletDetails> {\n const walletProvider = this.createProviderForOperation(provider)\n return await walletProvider.generate()\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n\n async registerX402Handlers(client: unknown): Promise<Record<string, () => void>> {\n if (!this.walletProvider) return {}\n\n const provider = this.walletProvider as unknown as Record<string, unknown>\n const getKeypair = provider.getKeypairInstance as (() => Keypair) | undefined\n\n if (typeof getKeypair !== 'function') return {}\n\n const keypair = getKeypair()\n if (!keypair || !keypair.secretKey) return {}\n\n const signer = await createKeyPairSignerFromBytes(keypair.secretKey)\n const handlers: Record<string, () => void> = {}\n\n for (const network of SupportedX402SolanaNetworks) {\n handlers[network] = () => {\n registerExactSvmScheme(client as Parameters<typeof registerExactSvmScheme>[0], { signer })\n }\n }\n\n return handlers\n }\n\n private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') return new ReadOnlyWalletProvider(this.config, this.chain)\n if (!wallet.provider) return new ReadOnlyWalletProvider(this.config, this.chain)\n return this.createProviderForOperation(wallet.provider)\n }\n\n private initializeCache() {\n initializeWalletCache(this.walletProvider).then((cache: { address: string | null; publicKey: string | null }) => {\n this.cachedAddress = cache.address\n this.cachedPublicKey = cache.publicKey\n })\n }\n\n private createProviderForOperation(provider: WarpWalletProvider): WalletProvider {\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[provider]\n if (providerFactory) {\n const walletProvider = providerFactory(this.config, this.chain)\n if (!walletProvider) throw new Error(`Custom wallet provider factory returned null for ${provider}`)\n return walletProvider\n }\n\n if (provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain)\n if (provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${provider}`)\n }\n\n private resolveTransaction(tx: WarpAdapterGenericTransaction): VersionedTransaction {\n if (tx instanceof VersionedTransaction) {\n if (tx.version === undefined || tx.version === 'legacy') {\n throw new Error('Transaction must be a VersionedTransaction (v0), not legacy')\n }\n return tx\n }\n\n if (tx instanceof Transaction) {\n throw new Error('Legacy Transaction format is not supported. All transactions must use VersionedTransaction (v0).')\n }\n\n if (tx.transaction instanceof VersionedTransaction) {\n if (tx.transaction.version === undefined || tx.transaction.version === 'legacy') {\n throw new Error('Transaction must be a VersionedTransaction (v0), not legacy')\n }\n return tx.transaction\n }\n\n if (tx.transaction instanceof Transaction) {\n throw new Error('Legacy Transaction format is not supported. All transactions must use VersionedTransaction (v0).')\n }\n\n if (!tx.transaction) {\n throw new Error('Transaction must be signed before sending')\n }\n\n throw new Error('Invalid transaction format - only VersionedTransaction is supported')\n }\n\n private async shouldSkipPreflight(transaction: VersionedTransaction): Promise<boolean> {\n if (!transaction.signatures || transaction.signatures.length === 0 || !transaction.signatures.some((sig) => sig.some((b) => b !== 0))) {\n return false\n }\n\n try {\n const simulation = await this.connection.simulateTransaction(transaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n })\n if (simulation.value.err) {\n const errMsg = JSON.stringify(simulation.value.err)\n if (errMsg.includes('\"Custom\": 17') || errMsg.includes('\"Custom\":17') || errMsg.includes('0x11')) {\n return true\n }\n throw new Error(`Transaction simulation failed: ${errMsg}`)\n }\n } catch (error: any) {\n if (error.message?.includes('Transaction simulation failed')) throw error\n }\n return false\n }\n\n private async sendWithRetry(transaction: VersionedTransaction, skipPreflight: boolean): Promise<string> {\n if (skipPreflight) {\n return this.sendRawTransaction(transaction, { skipPreflight: true })\n }\n\n try {\n return await this.sendRawTransaction(transaction, { skipPreflight: false, preflightCommitment: 'confirmed' })\n } catch (error: any) {\n if (this.isSimulationError(error)) {\n return this.sendRawTransaction(transaction, { skipPreflight: true })\n }\n throw error\n }\n }\n\n private async sendRawTransaction(\n transaction: VersionedTransaction,\n options: { skipPreflight: boolean; preflightCommitment?: Commitment; maxRetries?: number }\n ): Promise<string> {\n const signature = await this.connection.sendRawTransaction(transaction.serialize(), {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries || 3,\n preflightCommitment: options.preflightCommitment,\n })\n if (!signature || typeof signature !== 'string' || signature.length < 32) {\n throw new Error('Invalid transaction signature received')\n }\n return signature\n }\n\n private isSimulationError(error: any): boolean {\n const msg = error?.message?.toLowerCase() || ''\n return msg.includes('simulation') || msg.includes('preflight') || msg.includes('0x1') || msg.includes('custom program error')\n }\n}\n","import * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n getWarpWalletAddressFromConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n normalizeAndValidateMnemonic,\n normalizeMnemonic,\n setWarpWalletInConfig,\n validateMnemonicLength,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport bs58 from 'bs58'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'mnemonic'\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<string | null> {\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeypair()\n\n if (tx instanceof VersionedTransaction) {\n tx.sign([keypair])\n return tx\n }\n\n if (tx instanceof Transaction) {\n tx.sign(keypair)\n return tx\n }\n\n if (tx.transaction) {\n if (tx.transaction instanceof Transaction) {\n tx.transaction.sign(keypair)\n return { ...tx, transaction: tx.transaction.serialize() }\n }\n if (typeof tx.transaction === 'object') {\n try {\n const transaction = Transaction.from(tx.transaction)\n transaction.sign(keypair)\n return { ...tx, transaction: transaction.serialize(), signature: transaction.signature }\n } catch {\n throw new Error('Invalid transaction format')\n }\n }\n }\n\n throw new Error('Invalid transaction format')\n }\n\n async signMessage(message: string): Promise<string> {\n const keypair = this.getKeypair()\n const messageBytes = new TextEncoder().encode(message)\n const nacl = await import('tweetnacl')\n const secretKey = keypair.secretKey\n if (secretKey.length !== 64) {\n throw new Error(`Invalid secret key length: expected 64, got ${secretKey.length}`)\n }\n const privateKeySlice = secretKey.slice(0, 32)\n const privateKeyBytes = new Uint8Array(privateKeySlice)\n if (privateKeyBytes.length !== 32) {\n throw new Error(`Invalid private key length: expected 32, got ${privateKeyBytes.length}`)\n }\n const signature = nacl.sign.detached(messageBytes, privateKeyBytes)\n return bs58.encode(signature)\n }\n\n getKeypairInstance(): Keypair {\n return this.getKeypair()\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n const trimmedMnemonic = normalizeAndValidateMnemonic(mnemonic)\n const seed = bip39.mnemonicToSeedSync(trimmedMnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n const walletDetails: WarpWalletDetails = {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: trimmedMnemonic,\n }\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n return walletDetails\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey))\n const walletDetails: WarpWalletDetails = {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: null,\n }\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n return walletDetails\n }\n\n async export(): Promise<WarpWalletDetails> {\n const keypair = this.getKeypair()\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n return {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: privateKey || null,\n mnemonic: mnemonic || null,\n }\n }\n\n async generate(): Promise<WarpWalletDetails> {\n const mnemonicRaw = bip39.generateMnemonic(wordlist, 256)\n const mnemonic = normalizeMnemonic(mnemonicRaw)\n validateMnemonicLength(mnemonic)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n return {\n provider: MnemonicWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: null,\n mnemonic,\n }\n }\n\n private getKeypair(): Keypair {\n if (this.keypair) return this.keypair\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (!mnemonic) throw new Error('No mnemonic provided')\n\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = Keypair.fromSeed(seed.slice(0, 32))\n return this.keypair\n }\n}\n","import { Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n getWarpWalletAddressFromConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport bs58 from 'bs58'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'privateKey'\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<string | null> {\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeypair()\n\n if (tx instanceof VersionedTransaction) {\n tx.sign([keypair])\n return tx\n }\n\n if (tx instanceof Transaction) {\n tx.sign(keypair)\n return tx\n }\n\n if (tx.transaction) {\n if (tx.transaction instanceof Transaction) {\n tx.transaction.sign(keypair)\n return { ...tx, transaction: tx.transaction.serialize() }\n }\n if (typeof tx.transaction === 'object') {\n try {\n const transaction = Transaction.from(tx.transaction)\n transaction.sign(keypair)\n return { ...tx, transaction: transaction.serialize(), signature: transaction.signature }\n } catch {\n throw new Error('Invalid transaction format')\n }\n }\n }\n\n throw new Error('Invalid transaction format')\n }\n\n async signMessage(message: string): Promise<string> {\n const keypair = this.getKeypair()\n const messageBytes = new TextEncoder().encode(message)\n const nacl = await import('tweetnacl')\n const secretKey = keypair.secretKey\n if (secretKey.length !== 64) {\n throw new Error(`Invalid secret key length: expected 64, got ${secretKey.length}`)\n }\n const privateKeySlice = secretKey.slice(0, 32)\n const privateKeyBytes = new Uint8Array(privateKeySlice)\n if (privateKeyBytes.length !== 32) {\n throw new Error(`Invalid private key length: expected 32, got ${privateKeyBytes.length}`)\n }\n const signature = nacl.sign.detached(messageBytes, privateKeyBytes)\n return bs58.encode(signature)\n }\n\n getKeypairInstance(): Keypair {\n return this.getKeypair()\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n throw new Error('PrivateKeyWalletProvider does not support importing from mnemonics. Use MnemonicWalletProvider instead.')\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey))\n const walletDetails: WarpWalletDetails = {\n provider: PrivateKeyWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: null,\n }\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n return walletDetails\n }\n\n async export(): Promise<WarpWalletDetails> {\n const keypair = this.getKeypair()\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n return {\n provider: PrivateKeyWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: privateKey || null,\n mnemonic: mnemonic || null,\n }\n }\n\n async generate(): Promise<WarpWalletDetails> {\n const keypair = Keypair.generate()\n return {\n provider: PrivateKeyWalletProvider.PROVIDER_NAME,\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic: null,\n }\n }\n\n private getKeypair(): Keypair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('No private key provided')\n\n try {\n const secretKey = bs58.decode(privateKey)\n if (secretKey.length === 64) {\n this.keypair = Keypair.fromSecretKey(secretKey)\n return this.keypair\n } else if (secretKey.length === 32) {\n this.keypair = Keypair.fromSeed(secretKey)\n return this.keypair\n } else {\n throw new Error(`Invalid private key length: expected 32 or 64 bytes, got ${secretKey.length}`)\n }\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid private key format: ${error.message}`)\n }\n throw new Error('Invalid private key format')\n }\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@joai/warps'\nimport { getWarpWalletAddressFromConfig, WarpChainInfo, WarpClientConfig } from '@joai/warps'\n\nexport class ReadOnlyWalletProvider implements WalletProvider {\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n return getWarpWalletAddressFromConfig(this.config, this.chain.name)\n }\n\n async getPublicKey(): Promise<string | null> {\n return getWarpWalletAddressFromConfig(this.config, this.chain.name)\n }\n\n async signTransaction(tx: any): Promise<any> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async signMessage(message: string): Promise<string> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async export(): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async generate(): Promise<WarpWalletDetails> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n}\n","import { ChainAdapter, ChainAdapterFactory, WarpChainName, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { WarpSolanaDataLoader } from '../WarpSolanaDataLoader'\nimport { WarpSolanaExecutor } from '../WarpSolanaExecutor'\nimport { WarpSolanaExplorer } from '../WarpSolanaExplorer'\nimport { WarpSolanaOutput } from '../WarpSolanaOutput'\nimport { WarpSolanaSerializer } from '../WarpSolanaSerializer'\nimport { WarpSolanaWallet } from '../WarpSolanaWallet'\n\nexport const createSolanaAdapter = (chainName: WarpChainName, chainInfos: Record<WarpChainEnv, WarpChainInfo>): ChainAdapterFactory => {\n return (config: WarpClientConfig, fallback?: ChainAdapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpSolanaExecutor(config, chainInfos[config.env]),\n output: new WarpSolanaOutput(config, chainInfos[config.env]),\n serializer: new WarpSolanaSerializer(),\n registry: fallback.registry,\n explorer: new WarpSolanaExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpSolanaDataLoader(config, chainInfos[config.env]),\n wallet: new WarpSolanaWallet(config, chainInfos[config.env]),\n }\n }\n}\n"],"mappings":"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","names":["import_warps","import_warps","SolanaExplorers","import_warps","import_warps","SolanaChain","import_warps","SolanaChain","import_spl_token","import_web3","import_warps","import_warps","import_web3","import_warps","import_web3","bs58","url","cluster","import_warps","import_web3","import_web3","import_warps","import_bs58","bs58","import_web3","import_warps","import_bs58","bs58","import_warps"]}