@vleap/warps-adapter-solana 0.1.0-beta.3 → 0.1.0-beta.5

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/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://vleap.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://vleap.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://vleap.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://vleap.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/?cluster=devnet',\n [SolanaExplorers.SolanaExplorer]: 'https://explorer.solana.com',\n [SolanaExplorers.SolanaExplorerMainnet]: 'https://explorer.solana.com',\n [SolanaExplorers.SolanaExplorerDevnet]: 'https://explorer.solana.com/?cluster=devnet',\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\n let destinationPubkey: PublicKey\n try {\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Destination address is required')\n destinationPubkey = new PublicKey(executable.destination)\n } catch {\n throw new Error(`WarpSolanaExecutor: Invalid destination address: ${executable.destination}`)\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(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey: destinationPubkey,\n lamports: Number(executable.value),\n })\n )\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\n let programId: PublicKey\n try {\n if (!executable.destination) throw new Error('WarpSolanaExecutor: Contract address is required')\n programId = new PublicKey(executable.destination)\n } catch {\n throw new Error(`WarpSolanaExecutor: Invalid contract address: ${executable.destination}`)\n }\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(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey: programId,\n lamports: Number(executable.value),\n })\n )\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 return Buffer.from([...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 return Buffer.from([...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 return Buffer.from(buffers.flatMap((buf) => Array.from(buf)))\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 transaction.add(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: computeUnits,\n })\n )\n\n transaction.add(\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: WarpSolanaConstants.PriorityFee.Default,\n })\n )\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 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 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 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 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 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 {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport { Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english'\nimport bs58 from 'bs58'\n\nexport class WarpSolanaWallet implements AdapterWarpWallet {\n private connection: Connection\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 }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\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 signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n const keypair = this.getKeypair()\n\n return Promise.all(\n txs.map(async (tx) => {\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 && typeof tx.transaction === 'object') {\n const transaction = Transaction.from(tx.transaction)\n transaction.sign(keypair)\n return { ...tx, transaction: transaction.serialize() }\n }\n\n throw new Error('Invalid transaction format')\n })\n )\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 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 try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n getPublicKey(): string | null {\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n private getKeypair(): Keypair {\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 return Keypair.fromSecretKey(secretKey)\n } else if (secretKey.length === 32) {\n return Keypair.fromSeed(secretKey)\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 return Keypair.fromSeed(seed.slice(0, 32))\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","getProviderConfig","Connection","Transaction","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/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 {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport { Connection, Keypair, Transaction, VersionedTransaction } from '@solana/web3.js'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport bs58 from 'bs58'\n\nexport class WarpSolanaWallet implements AdapterWarpWallet {\n private connection: Connection\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 }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\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 signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n const keypair = this.getKeypair()\n\n return Promise.all(\n txs.map(async (tx) => {\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 && typeof tx.transaction === 'object') {\n const transaction = Transaction.from(tx.transaction)\n transaction.sign(keypair)\n return { ...tx, transaction: transaction.serialize() }\n }\n\n throw new Error('Invalid transaction format')\n })\n )\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 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 try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n getPublicKey(): string | null {\n try {\n const keypair = this.getKeypair()\n return keypair.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n private getKeypair(): Keypair {\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 return Keypair.fromSecretKey(secretKey)\n } else if (secretKey.length === 32) {\n return Keypair.fromSeed(secretKey)\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 return Keypair.fromSeed(seed.slice(0, 32))\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","getProviderConfig","Connection","Transaction","bs58","WarpChainName"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-solana",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.5",
4
4
  "description": "Solana adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -40,7 +40,7 @@
40
40
  "@scure/bip39": "^2.0.1",
41
41
  "@solana/spl-token": "^0.4.14",
42
42
  "@solana/web3.js": "^1.98.4",
43
- "@vleap/warps": "^3.0.0-beta.169",
43
+ "@vleap/warps": "^3.0.0-beta.172",
44
44
  "bs58": "^6.0.0",
45
45
  "tweetnacl": "^1.0.3"
46
46
  }