@vleap/warps-adapter-solana 0.1.0-beta.6 → 0.1.0-beta.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chains/solana.ts","../src/WarpSolanaDataLoader.ts","../src/constants.ts","../src/tokens/solana.ts","../src/tokens.ts","../src/WarpSolanaExecutor.ts","../src/WarpSolanaOutput.ts","../src/WarpSolanaSerializer.ts","../src/WarpSolanaExplorer.ts","../src/WarpSolanaWallet.ts","../src/providers/SolanaWalletProvider.ts","../src/chains/common.ts"],"sourcesContent":["import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createSolanaAdapter } from './common'\n\nexport const NativeTokenSol: WarpChainAsset = {\n chain: WarpChainName.Solana,\n identifier: 'SOL',\n symbol: 'SOL',\n name: 'Solana',\n decimals: 9,\n logoUrl: 'https://joai.ai/images/tokens/sol.svg',\n}\n\nexport const getSolanaAdapter: AdapterFactory = 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://joai.ai/images/chains/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://joai.ai/images/chains/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://joai.ai/images/chains/solana.svg',\n nativeToken: NativeTokenSol,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/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 private 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.cache?.type)\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 try {\n const signature = identifier\n const tx = await this.connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) return null\n\n const slot = tx.slot\n const blockTime = tx.blockTime ? new Date(tx.blockTime * 1000).toISOString() : new Date().toISOString()\n\n const message = tx.transaction.message\n let accountKeys: PublicKey[] = []\n if ('staticAccountKeys' in message) {\n accountKeys = message.staticAccountKeys || []\n } else {\n try {\n const allKeys = (message as any).getAccountKeys?.()\n if (allKeys) {\n accountKeys = allKeys.keySegments().flat() || []\n }\n } catch {\n accountKeys = []\n }\n }\n const sender = accountKeys[0]?.toBase58() || ''\n const receiver = accountKeys.length > 1 ? accountKeys[1]?.toBase58() || '' : ''\n\n const preBalances = tx.meta?.preBalances || []\n const postBalances = tx.meta?.postBalances || []\n const value = preBalances.length > 0 && postBalances.length > 0 ? BigInt(Math.abs(postBalances[0] - preBalances[0])) : 0n\n\n const status = tx.meta?.err ? 'failed' : 'success'\n let compiledInstructions: any[] = []\n if ('compiledInstructions' in message && Array.isArray(message.compiledInstructions)) {\n compiledInstructions = message.compiledInstructions\n }\n const hasInstructions = compiledInstructions.length > 0\n\n return {\n chain: this.chain.name,\n id: signature,\n receiver,\n sender,\n value,\n function: hasInstructions ? (compiledInstructions[0]?.programIdIndex !== undefined ? 'contract_call' : 'transfer') : 'transfer',\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 } catch (error) {\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 = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\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: knownToken.logoUrl || '',\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","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","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst SolanaChain: WarpChain = WarpChainName.Solana\n\nexport const SolanaTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'Solana',\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 { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { SolanaTokens } from './tokens/solana'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n solana: {\n mainnet: SolanaTokens,\n testnet: SolanaTokens,\n devnet: SolanaTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, 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: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import { createAssociatedTokenAccountInstruction, createTransferInstruction, getAssociatedTokenAddress } from '@solana/spl-token'\nimport { ComputeBudgetProgram, Connection, PublicKey, SystemProgram, Transaction, TransactionInstruction } 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 '@vleap/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<Transaction> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: Transaction | 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<Transaction> {\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 let destinationPubkey: PublicKey\n try {\n destinationPubkey = new PublicKey(executable.destination)\n } catch (error) {\n throw new Error('WarpSolanaExecutor: Invalid destination address')\n }\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet, destinationPubkey)\n }\n\n const fromPubkey = new PublicKey(userWallet as string)\n const transaction = new Transaction()\n\n if (executable.value > 0n) {\n transaction.add(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 const instruction = 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 transaction.add(instruction)\n }\n }\n\n return this.setTransactionDefaults(transaction, fromPubkey)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<Transaction> {\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 const programId = new PublicKey(executable.destination)\n\n const fromPubkey = new PublicKey(userWallet)\n const transaction = new Transaction()\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n\n let instructionData: Buffer = Buffer.alloc(0)\n\n if (action.abi && typeof action.abi === 'string') {\n try {\n const abi = JSON.parse(action.abi)\n if (abi.instructions && abi.instructions[action.func]) {\n const instructionDef = abi.instructions[action.func]\n instructionData = this.encodeInstructionData(instructionDef, nativeArgs, action.func)\n } else if (abi.accounts || abi.types) {\n instructionData = this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n } catch {\n instructionData = this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n } else {\n instructionData = this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n\n const accounts = this.buildInstructionAccounts(action, executable, fromPubkey, programId)\n\n const instruction = new TransactionInstruction({\n keys: accounts,\n programId,\n data: instructionData,\n })\n\n transaction.add(instruction)\n\n if (executable.value > 0n) {\n transaction.add(SystemProgram.transfer({ fromPubkey, toPubkey: programId, lamports: Number(executable.value) }))\n }\n\n return this.setTransactionDefaults(transaction, fromPubkey)\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpSolanaExecutor: Failed to create contract call: ${errorMessage}`)\n }\n }\n\n private encodeInstructionData(instructionDef: any, args: any[], funcName: string): Buffer {\n try {\n const data = Buffer.alloc(8)\n if (instructionDef.discriminator && Buffer.isBuffer(instructionDef.discriminator)) {\n data.set(instructionDef.discriminator.subarray(0, Math.min(8, instructionDef.discriminator.length)), 0)\n } else {\n const hash = Buffer.from(funcName).subarray(0, 8)\n data.set(hash, 0)\n }\n\n if (args.length > 0 && instructionDef.args) {\n const encodedArgs = this.encodeArgs(args, instructionDef.args)\n // @ts-expect-error - Buffer.concat accepts Buffer[] which extends Uint8Array[]\n return Buffer.concat([data, encodedArgs])\n }\n\n return data\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).subarray(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 accepts Buffer[] which extends Uint8Array[]\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(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 accepts Buffer[] which extends Uint8Array[]\n return Buffer.concat(buffers)\n }\n\n private buildInstructionAccounts(\n action: any,\n executable: WarpExecutable,\n fromPubkey: PublicKey,\n programId: PublicKey\n ): Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> {\n const accounts: Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> = [\n { pubkey: fromPubkey, isSigner: true, isWritable: true },\n ]\n\n if (action.accounts && Array.isArray(action.accounts)) {\n for (const accountDef of action.accounts) {\n try {\n const pubkey = new PublicKey(accountDef.address || accountDef.pubkey || executable.destination)\n accounts.push({\n pubkey,\n isSigner: accountDef.signer === true,\n isWritable: accountDef.writable !== false,\n })\n } catch {\n continue\n }\n }\n }\n\n if (!accounts.some((acc) => acc.pubkey.equals(programId))) {\n accounts.push({ pubkey: programId, isSigner: false, isWritable: false })\n }\n\n return accounts\n }\n\n private async createTokenTransferTransaction(\n executable: WarpExecutable,\n userWallet: string,\n destinationPubkey: PublicKey\n ): Promise<Transaction> {\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 nativeTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier === this.chain.nativeToken!.identifier || transfer.identifier === WarpSolanaConstants.NativeToken.Identifier\n )\n const splTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier !== this.chain.nativeToken!.identifier && transfer.identifier !== WarpSolanaConstants.NativeToken.Identifier\n )\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\n const fromPubkey = new PublicKey(userWallet)\n const transaction = new Transaction()\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey: destinationPubkey,\n lamports: Number(transfer.amount),\n })\n )\n\n return this.setTransactionDefaults(transaction, 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\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<Transaction> {\n let mintAddress: PublicKey\n try {\n mintAddress = new PublicKey(transfer.identifier)\n } catch {\n throw new Error(`WarpSolanaExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n const fromPubkey = new PublicKey(userWallet)\n const transaction = new Transaction()\n\n const sourceTokenAccount = await getAssociatedTokenAddress(mintAddress, fromPubkey)\n const destinationTokenAccount = await getAssociatedTokenAddress(mintAddress, destinationPubkey)\n\n const sourceAccountInfo = await this.connection.getAccountInfo(sourceTokenAccount)\n if (!sourceAccountInfo) {\n throw new Error('WarpSolanaExecutor: Source token account does not exist')\n }\n\n const destinationAccountInfo = await this.connection.getAccountInfo(destinationTokenAccount)\n if (!destinationAccountInfo) {\n transaction.add(createAssociatedTokenAccountInstruction(fromPubkey, destinationTokenAccount, destinationPubkey, mintAddress))\n }\n\n transaction.add(createTransferInstruction(sourceTokenAccount, destinationTokenAccount, fromPubkey, Number(transfer.amount)))\n\n return this.setTransactionDefaults(transaction, fromPubkey as PublicKey)\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 let queryAddress: PublicKey\n try {\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Query address is required')\n queryAddress = new PublicKey(executable.destination)\n } catch {\n throw new Error(`WarpSolanaExecutor: Invalid address for query: ${executable.destination}`)\n }\n\n try {\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(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\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 } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\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: '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: null,\n values: { string: [], native: [], mapped: {} },\n output: { _DATA: errorMessage, _ERROR: errorMessage },\n messages: {},\n destination,\n resolvedInputs,\n }\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 // Solana message verification would require the public key\n // This is a simplified version\n return ''\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n\n private async setTransactionDefaults(transaction: Transaction, fromPubkey: PublicKey | null): Promise<Transaction> {\n try {\n const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash('confirmed')\n transaction.recentBlockhash = blockhash\n if (fromPubkey) {\n transaction.feePayer = fromPubkey\n }\n\n const instructions = transaction.instructions\n const hasTransfer = instructions.some((ix) => ix.programId.equals(SystemProgram.programId) && ix.data.length === 4)\n const hasTokenTransfer = instructions.some((ix) => ix.programId.toBase58() === WarpSolanaConstants.Programs.TokenProgram)\n\n let computeUnits = WarpSolanaConstants.ComputeUnitLimit.Default\n if (hasTransfer && !hasTokenTransfer) {\n computeUnits = WarpSolanaConstants.ComputeUnitLimit.Transfer\n } else if (hasTokenTransfer) {\n computeUnits = WarpSolanaConstants.ComputeUnitLimit.TokenTransfer\n } else {\n computeUnits = WarpSolanaConstants.ComputeUnitLimit.ContractCall\n }\n\n const computeUnitLimitIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: computeUnits,\n })\n\n const computeUnitPriceIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: WarpSolanaConstants.PriorityFee.Default,\n })\n\n transaction.instructions = [computeUnitLimitIx, computeUnitPriceIx, ...transaction.instructions]\n\n return transaction\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpSolanaExecutor: Failed to set transaction defaults: ${errorMessage}`)\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 '@vleap/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.cache?.type)\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 handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction, resolvedInputs: string[] = []): WarpActionExecutionResult {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.signature || ''\n const slot = tx.tx?.slot || 0\n const blockTime = tx.tx?.blockTime || 0\n\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 '@vleap/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 '@vleap/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","import * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { SolanaWalletProvider } from './providers/SolanaWalletProvider'\n\nexport class WarpSolanaWallet implements AdapterWarpWallet {\n private connection: Connection\n private walletProvider: WalletProvider\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo,\n walletProvider?: WalletProvider\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n this.connection = new Connection(providerConfig.url, 'confirmed')\n this.walletProvider = walletProvider || new SolanaWalletProvider(config, chain, this.connection)\n this.initializeCache()\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 async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n return await this.walletProvider.signTransaction(tx)\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n return await 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 let transaction: Transaction | VersionedTransaction\n\n if (tx instanceof VersionedTransaction) {\n transaction = tx\n } else if (tx instanceof Transaction) {\n transaction = tx\n } else if (tx.transaction) {\n if (tx.transaction instanceof Transaction) {\n transaction = tx.transaction\n } else if (tx.transaction instanceof VersionedTransaction) {\n transaction = tx.transaction\n } else if (typeof tx.transaction === 'object') {\n try {\n transaction = Transaction.from(tx.transaction)\n } catch {\n throw new Error('Invalid transaction format')\n }\n } else if (Buffer.isBuffer(tx.transaction) || typeof tx.transaction === 'string') {\n transaction = Transaction.from(tx.transaction)\n } else {\n throw new Error('Transaction must be signed before sending')\n }\n } else {\n throw new Error('Transaction must be signed before sending')\n }\n\n const signature = await this.connection.sendRawTransaction(transaction.serialize(), {\n skipPreflight: true,\n maxRetries: 3,\n })\n\n return signature\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n return {\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic,\n }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const keypair = Keypair.generate()\n const entropy = keypair.secretKey.slice(0, 16)\n const mnemonic = bip39.entropyToMnemonic(entropy, wordlist)\n return {\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic,\n }\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n}\n","import { WalletProvider } from '@vleap/warps'\nimport { Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport * as bip39 from '@scure/bip39'\nimport bs58 from 'bs58'\nimport { getWarpWalletMnemonicFromConfig, getWarpWalletPrivateKeyFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\n\nexport class SolanaWalletProvider implements WalletProvider {\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo,\n private connection: Connection\n ) {}\n\n async getAddress(): 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 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 private getKeypair(): Keypair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\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 const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = Keypair.fromSeed(seed.slice(0, 32))\n return this.keypair\n }\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/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: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\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":["WarpChainName","SolanaExplorers","Connection","PublicKey","extractResolvedInputValues","getProviderConfig","getWarpWalletAddressFromConfig","getProviderConfig","WarpConstants","WarpCache","WarpCacheKey","Connection","PublicKey","getProviderConfig","Connection","WarpCache","WarpCacheKey","WarpConstants","getProviderConfig","Connection","getWarpWalletAddressFromConfig","PublicKey","extractResolvedInputValues","url","cluster","bip39","Connection","Keypair","Transaction","VersionedTransaction","getProviderConfig","bs58","Transaction","bs58","getProviderConfig","Connection","VersionedTransaction","Transaction","Keypair","bs58","WarpChainName"]}
1
+ {"version":3,"sources":["../src/chains/solana.ts","../src/WarpSolanaDataLoader.ts","../src/constants.ts","../src/tokens/solana.ts","../src/tokens.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/chains/common.ts"],"sourcesContent":["import { ChainAdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createSolanaAdapter } from './common'\n\nexport const NativeTokenSol: WarpChainAsset = {\n chain: WarpChainName.Solana,\n identifier: 'SOL',\n symbol: 'SOL',\n name: 'Solana',\n decimals: 9,\n logoUrl: 'https://joai.ai/images/tokens/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://joai.ai/images/chains/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://joai.ai/images/chains/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://joai.ai/images/chains/solana.svg',\n nativeToken: NativeTokenSol,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/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 private 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.cache?.type)\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 try {\n const signature = identifier\n const tx = await this.connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n\n if (!tx) return null\n\n const slot = tx.slot\n const blockTime = tx.blockTime ? new Date(tx.blockTime * 1000).toISOString() : new Date().toISOString()\n\n const message = tx.transaction.message\n let accountKeys: PublicKey[] = []\n if ('staticAccountKeys' in message) {\n accountKeys = message.staticAccountKeys || []\n } else {\n try {\n const allKeys = (message as any).getAccountKeys?.()\n if (allKeys) {\n accountKeys = allKeys.keySegments().flat() || []\n }\n } catch {\n accountKeys = []\n }\n }\n const sender = accountKeys[0]?.toBase58() || ''\n const receiver = accountKeys.length > 1 ? accountKeys[1]?.toBase58() || '' : ''\n\n const preBalances = tx.meta?.preBalances || []\n const postBalances = tx.meta?.postBalances || []\n const value = preBalances.length > 0 && postBalances.length > 0 ? BigInt(Math.abs(postBalances[0] - preBalances[0])) : 0n\n\n const status = tx.meta?.err ? 'failed' : 'success'\n let compiledInstructions: any[] = []\n if ('compiledInstructions' in message && Array.isArray(message.compiledInstructions)) {\n compiledInstructions = message.compiledInstructions\n }\n const hasInstructions = compiledInstructions.length > 0\n\n return {\n chain: this.chain.name,\n id: signature,\n receiver,\n sender,\n value,\n function: hasInstructions ? (compiledInstructions[0]?.programIdIndex !== undefined ? 'contract_call' : 'transfer') : 'transfer',\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 } catch (error) {\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 = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\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: knownToken.logoUrl || '',\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","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 { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst SolanaChain: WarpChain = WarpChainName.Solana\n\nexport const SolanaTokens: WarpChainAsset[] = [\n {\n chain: SolanaChain,\n identifier: 'SOL',\n name: 'Solana',\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 { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { SolanaTokens } from './tokens/solana'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n solana: {\n mainnet: SolanaTokens,\n testnet: SolanaTokens,\n devnet: SolanaTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, 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: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import { createAssociatedTokenAccountInstruction, createTransferInstruction, getAssociatedTokenAddress } from '@solana/spl-token'\nimport { ComputeBudgetProgram, Connection, PublicKey, SystemProgram, Transaction, TransactionInstruction } 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 '@vleap/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<Transaction> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: Transaction | 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<Transaction> {\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 let destinationPubkey: PublicKey\n try {\n destinationPubkey = new PublicKey(executable.destination)\n } catch (error) {\n throw new Error('WarpSolanaExecutor: Invalid destination address')\n }\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet, destinationPubkey)\n }\n\n const fromPubkey = new PublicKey(userWallet as string)\n const transaction = new Transaction()\n\n if (executable.value > 0n) {\n transaction.add(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 const instruction = 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 transaction.add(instruction)\n }\n }\n\n return this.setTransactionDefaults(transaction, fromPubkey)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<Transaction> {\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 const programId = new PublicKey(executable.destination)\n\n const fromPubkey = new PublicKey(userWallet)\n const transaction = new Transaction()\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n\n let instructionData: Buffer = Buffer.alloc(0)\n\n if (action.abi && typeof action.abi === 'string') {\n try {\n const abi = JSON.parse(action.abi)\n if (abi.instructions && abi.instructions[action.func]) {\n const instructionDef = abi.instructions[action.func]\n instructionData = this.encodeInstructionData(instructionDef, nativeArgs, action.func)\n } else if (abi.accounts || abi.types) {\n instructionData = this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n } catch {\n instructionData = this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n } else {\n instructionData = this.encodeBasicInstructionData(nativeArgs, action.func)\n }\n\n const accounts = this.buildInstructionAccounts(action, executable, fromPubkey, programId)\n\n const instruction = new TransactionInstruction({\n keys: accounts,\n programId,\n data: instructionData,\n })\n\n transaction.add(instruction)\n\n if (executable.value > 0n) {\n transaction.add(SystemProgram.transfer({ fromPubkey, toPubkey: programId, lamports: Number(executable.value) }))\n }\n\n return this.setTransactionDefaults(transaction, fromPubkey)\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpSolanaExecutor: Failed to create contract call: ${errorMessage}`)\n }\n }\n\n private encodeInstructionData(instructionDef: any, args: any[], funcName: string): Buffer {\n try {\n const data = Buffer.alloc(8)\n if (instructionDef.discriminator && Buffer.isBuffer(instructionDef.discriminator)) {\n data.set(instructionDef.discriminator.subarray(0, Math.min(8, instructionDef.discriminator.length)), 0)\n } else {\n const hash = Buffer.from(funcName).subarray(0, 8)\n data.set(hash, 0)\n }\n\n if (args.length > 0 && instructionDef.args) {\n const encodedArgs = this.encodeArgs(args, instructionDef.args)\n // @ts-expect-error - Buffer.concat accepts Buffer[] which extends Uint8Array[]\n return Buffer.concat([data, encodedArgs])\n }\n\n return data\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).subarray(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 accepts Buffer[] which extends Uint8Array[]\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(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 accepts Buffer[] which extends Uint8Array[]\n return Buffer.concat(buffers)\n }\n\n private buildInstructionAccounts(\n action: any,\n executable: WarpExecutable,\n fromPubkey: PublicKey,\n programId: PublicKey\n ): Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> {\n const accounts: Array<{ pubkey: PublicKey; isSigner: boolean; isWritable: boolean }> = [\n { pubkey: fromPubkey, isSigner: true, isWritable: true },\n ]\n\n if (action.accounts && Array.isArray(action.accounts)) {\n for (const accountDef of action.accounts) {\n try {\n const pubkey = new PublicKey(accountDef.address || accountDef.pubkey || executable.destination)\n accounts.push({\n pubkey,\n isSigner: accountDef.signer === true,\n isWritable: accountDef.writable !== false,\n })\n } catch {\n continue\n }\n }\n }\n\n if (!accounts.some((acc) => acc.pubkey.equals(programId))) {\n accounts.push({ pubkey: programId, isSigner: false, isWritable: false })\n }\n\n return accounts\n }\n\n private async createTokenTransferTransaction(\n executable: WarpExecutable,\n userWallet: string,\n destinationPubkey: PublicKey\n ): Promise<Transaction> {\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 nativeTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier === this.chain.nativeToken!.identifier || transfer.identifier === WarpSolanaConstants.NativeToken.Identifier\n )\n const splTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier !== this.chain.nativeToken!.identifier && transfer.identifier !== WarpSolanaConstants.NativeToken.Identifier\n )\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\n const fromPubkey = new PublicKey(userWallet)\n const transaction = new Transaction()\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey: destinationPubkey,\n lamports: Number(transfer.amount),\n })\n )\n\n return this.setTransactionDefaults(transaction, 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\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<Transaction> {\n let mintAddress: PublicKey\n try {\n mintAddress = new PublicKey(transfer.identifier)\n } catch {\n throw new Error(`WarpSolanaExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n const fromPubkey = new PublicKey(userWallet)\n const transaction = new Transaction()\n\n const sourceTokenAccount = await getAssociatedTokenAddress(mintAddress, fromPubkey)\n const destinationTokenAccount = await getAssociatedTokenAddress(mintAddress, destinationPubkey)\n\n const sourceAccountInfo = await this.connection.getAccountInfo(sourceTokenAccount)\n if (!sourceAccountInfo) {\n throw new Error('WarpSolanaExecutor: Source token account does not exist')\n }\n\n const destinationAccountInfo = await this.connection.getAccountInfo(destinationTokenAccount)\n if (!destinationAccountInfo) {\n transaction.add(createAssociatedTokenAccountInstruction(fromPubkey, destinationTokenAccount, destinationPubkey, mintAddress))\n }\n\n transaction.add(createTransferInstruction(sourceTokenAccount, destinationTokenAccount, fromPubkey, Number(transfer.amount)))\n\n return this.setTransactionDefaults(transaction, fromPubkey as PublicKey)\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 let queryAddress: PublicKey\n try {\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Query address is required')\n queryAddress = new PublicKey(executable.destination)\n } catch {\n throw new Error(`WarpSolanaExecutor: Invalid address for query: ${executable.destination}`)\n }\n\n try {\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(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\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 } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\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: '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: null,\n values: { string: [], native: [], mapped: {} },\n output: { _DATA: errorMessage, _ERROR: errorMessage },\n messages: {},\n destination,\n resolvedInputs,\n }\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 // Solana message verification would require the public key\n // This is a simplified version\n return ''\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n\n private async setTransactionDefaults(transaction: Transaction, fromPubkey: PublicKey | null): Promise<Transaction> {\n try {\n const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash('confirmed')\n transaction.recentBlockhash = blockhash\n if (fromPubkey) {\n transaction.feePayer = fromPubkey\n }\n\n const instructions = transaction.instructions\n const hasTransfer = instructions.some((ix) => ix.programId.equals(SystemProgram.programId) && ix.data.length === 4)\n const hasTokenTransfer = instructions.some((ix) => ix.programId.toBase58() === WarpSolanaConstants.Programs.TokenProgram)\n\n let computeUnits = WarpSolanaConstants.ComputeUnitLimit.Default\n if (hasTransfer && !hasTokenTransfer) {\n computeUnits = WarpSolanaConstants.ComputeUnitLimit.Transfer\n } else if (hasTokenTransfer) {\n computeUnits = WarpSolanaConstants.ComputeUnitLimit.TokenTransfer\n } else {\n computeUnits = WarpSolanaConstants.ComputeUnitLimit.ContractCall\n }\n\n const computeUnitLimitIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: computeUnits,\n })\n\n const computeUnitPriceIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: WarpSolanaConstants.PriorityFee.Default,\n })\n\n transaction.instructions = [computeUnitLimitIx, computeUnitPriceIx, ...transaction.instructions]\n\n return transaction\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpSolanaExecutor: Failed to set transaction defaults: ${errorMessage}`)\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 '@vleap/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.cache?.type)\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 handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction, resolvedInputs: string[] = []): WarpActionExecutionResult {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.signature || ''\n const slot = tx.tx?.slot || 0\n const blockTime = tx.tx?.blockTime || 0\n\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 '@vleap/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 '@vleap/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 { 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} from '@vleap/warps'\nimport { registerExactSvmScheme } from '@x402/svm/exact/client'\nimport { SupportedX402SolanaNetworks } from './constants'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\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 private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') throw new Error(`Wallet can not be used for signing: ${wallet}`)\n\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[wallet.provider]\n if (providerFactory) return providerFactory(this.config, this.chain)\n\n if (wallet.provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain, this.connection)\n if (wallet.provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain, this.connection)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${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 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 return await this.walletProvider.signTransaction(tx)\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n return Promise.all(txs.map(async (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 return await 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 let transaction: Transaction | VersionedTransaction\n\n if (tx instanceof VersionedTransaction) {\n transaction = tx\n } else if (tx instanceof Transaction) {\n transaction = tx\n } else if (tx.transaction) {\n if (tx.transaction instanceof Transaction) {\n transaction = tx.transaction\n } else if (tx.transaction instanceof VersionedTransaction) {\n transaction = tx.transaction\n } else if (typeof tx.transaction === 'object') {\n try {\n transaction = Transaction.from(tx.transaction)\n } catch {\n throw new Error('Invalid transaction format')\n }\n } else if (Buffer.isBuffer(tx.transaction) || typeof tx.transaction === 'string') {\n transaction = Transaction.from(tx.transaction)\n } else {\n throw new Error('Transaction must be signed before sending')\n }\n } else {\n throw new Error('Transaction must be signed before sending')\n }\n\n const signature = await this.connection.sendRawTransaction(transaction.serialize(), {\n skipPreflight: true,\n maxRetries: 3,\n })\n\n return signature\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n return this.walletProvider.create(mnemonic)\n }\n\n generate(): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n return this.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","import * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n getWarpWalletAddressFromConfig,\n getWarpWalletMnemonicFromConfig,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo,\n private connection: Connection\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 create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n return {\n provider: 'mnemonic',\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const keypair = Keypair.generate()\n const entropy = keypair.secretKey.slice(0, 16)\n const mnemonic = bip39.entropyToMnemonic(entropy, wordlist)\n return {\n provider: 'mnemonic',\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\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 * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport {\n getWarpWalletAddressFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n private keypair: Keypair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo,\n private connection: Connection\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 create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keypair = Keypair.fromSeed(seed.slice(0, 32))\n return {\n provider: 'privateKey',\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const keypair = Keypair.generate()\n const entropy = keypair.secretKey.slice(0, 16)\n const mnemonic = bip39.entropyToMnemonic(entropy, wordlist)\n return {\n provider: 'privateKey',\n address: keypair.publicKey.toBase58(),\n privateKey: bs58.encode(keypair.secretKey),\n mnemonic,\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 { ChainAdapter, ChainAdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/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: WarpChain, 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":["WarpChainName","SolanaExplorers","Connection","PublicKey","extractResolvedInputValues","getProviderConfig","getWarpWalletAddressFromConfig","getProviderConfig","WarpConstants","WarpCache","WarpCacheKey","Connection","PublicKey","getProviderConfig","Connection","WarpCache","WarpCacheKey","WarpConstants","getProviderConfig","Connection","getWarpWalletAddressFromConfig","PublicKey","extractResolvedInputValues","url","cluster","Connection","Transaction","VersionedTransaction","getProviderConfig","Transaction","getWarpWalletAddressFromConfig","bs58","bip39","wordlist","Keypair","Transaction","VersionedTransaction","getWarpWalletAddressFromConfig","bs58","getProviderConfig","Connection","VersionedTransaction","Transaction","WarpChainName"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-solana",
3
- "version": "0.1.0-beta.6",
3
+ "version": "0.1.0-beta.7",
4
4
  "description": "Solana adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -38,9 +38,11 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@scure/bip39": "^2.0.1",
41
+ "@solana/kit": "^1.0.0",
41
42
  "@solana/spl-token": "^0.4.14",
42
43
  "@solana/web3.js": "^1.98.4",
43
- "@vleap/warps": "^3.0.0-beta.174",
44
+ "@vleap/warps": "^3.0.0-beta.175",
45
+ "@x402/svm": "^2.0.0",
44
46
  "bs58": "^6.0.0",
45
47
  "tweetnacl": "^1.0.3"
46
48
  }