@ghostspeak/sdk 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -30
- package/dist/GhostSpeakClient-CWmGaM9Q.d.ts +1007 -0
- package/dist/StakingModule-C5rzuOWb.d.ts +2526 -0
- package/dist/{agent-M74TCRON.js → agent-5YLZ7DAC.js} +4 -4
- package/dist/{agent-M74TCRON.js.map → agent-5YLZ7DAC.js.map} +1 -1
- package/dist/batch-operations-45CQFEID.js +4 -0
- package/dist/batch-operations-45CQFEID.js.map +1 -0
- package/dist/browser.d.ts +45 -554
- package/dist/browser.js +15 -842
- package/dist/browser.js.map +1 -1
- package/dist/chunk-AL3HQN73.js +754 -0
- package/dist/chunk-AL3HQN73.js.map +1 -0
- package/dist/chunk-BF3IQ35I.js +284 -0
- package/dist/chunk-BF3IQ35I.js.map +1 -0
- package/dist/chunk-BQDGRTVP.js +168 -0
- package/dist/chunk-BQDGRTVP.js.map +1 -0
- package/dist/chunk-C5CDA3WX.js +7314 -0
- package/dist/chunk-C5CDA3WX.js.map +1 -0
- package/dist/chunk-E3FD2CNY.js +1869 -0
- package/dist/chunk-E3FD2CNY.js.map +1 -0
- package/dist/{chunk-V3SOFUAZ.js → chunk-G7S6B6WB.js} +327 -493
- package/dist/chunk-G7S6B6WB.js.map +1 -0
- package/dist/chunk-IHVDQ4YI.js +4231 -0
- package/dist/chunk-IHVDQ4YI.js.map +1 -0
- package/dist/chunk-JV2SWONF.js +98 -0
- package/dist/chunk-JV2SWONF.js.map +1 -0
- package/dist/chunk-KB6CKIUK.js +231 -0
- package/dist/chunk-KB6CKIUK.js.map +1 -0
- package/dist/chunk-RIZZPLLB.js +343 -0
- package/dist/chunk-RIZZPLLB.js.map +1 -0
- package/dist/chunk-S74EH3KD.js +7890 -0
- package/dist/chunk-S74EH3KD.js.map +1 -0
- package/dist/chunk-SFTSZ3LC.js +156 -0
- package/dist/chunk-SFTSZ3LC.js.map +1 -0
- package/dist/chunk-SKMJJ3Q6.js +125 -0
- package/dist/chunk-SKMJJ3Q6.js.map +1 -0
- package/dist/chunk-SZGFSCNU.js +3682 -0
- package/dist/chunk-SZGFSCNU.js.map +1 -0
- package/dist/chunk-TTB4OS2D.js +69 -0
- package/dist/chunk-TTB4OS2D.js.map +1 -0
- package/dist/chunk-UP2VWCW5.js +33 -0
- package/dist/{chunk-NSBPE2FW.js.map → chunk-UP2VWCW5.js.map} +1 -1
- package/dist/{chunk-UJUGGLMT.js → chunk-VQZQCHUT.js} +5 -5
- package/dist/{chunk-UJUGGLMT.js.map → chunk-VQZQCHUT.js.map} +1 -1
- package/dist/client.d.ts +6 -4
- package/dist/client.js +12 -10
- package/dist/createAgentAuthorization-ULG47ZJI.js +5 -0
- package/dist/createAgentAuthorization-ULG47ZJI.js.map +1 -0
- package/dist/credentials.d.ts +155 -0
- package/dist/credentials.js +4 -0
- package/dist/credentials.js.map +1 -0
- package/dist/crypto.js +2 -2
- package/dist/errors.js +1 -1
- package/dist/feature-flags-B1g0DCPe.d.ts +1181 -0
- package/dist/generated-EG5USUFG.js +9 -0
- package/dist/{generated-VNLHMR6Y.js.map → generated-EG5USUFG.js.map} +1 -1
- package/dist/{ghostspeak_wasm-SB2RPJ3D.js → ghostspeak_wasm-F227HOSM.js} +3 -3
- package/dist/{ghostspeak_wasm-SB2RPJ3D.js.map → ghostspeak_wasm-F227HOSM.js.map} +1 -1
- package/dist/index.d.ts +1210 -1506
- package/dist/index.js +601 -3532
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/minimal/core-minimal.d.ts +2383 -1264
- package/dist/minimal/core-minimal.js +9 -9
- package/dist/minimal/core-minimal.js.map +1 -1
- package/dist/nacl-fast-W5BJ3KZ2.js +2229 -0
- package/dist/nacl-fast-W5BJ3KZ2.js.map +1 -0
- package/dist/pda-4KP7CURF.js +4 -0
- package/dist/pda-4KP7CURF.js.map +1 -0
- package/dist/pda-Ce7VYg4T.d.ts +25 -0
- package/dist/reputation-types-Yebf0Rm_.d.ts +1071 -0
- package/dist/revokeAuthorization-OK7E7OK3.js +5 -0
- package/dist/revokeAuthorization-OK7E7OK3.js.map +1 -0
- package/dist/signature-verification-DGxR4aYQ.d.ts +448 -0
- package/dist/types.js +1 -1
- package/dist/updateReputationWithAuth-Y4ONEVSP.js +5 -0
- package/dist/updateReputationWithAuth-Y4ONEVSP.js.map +1 -0
- package/dist/utils.d.ts +69 -203
- package/dist/utils.js +15 -153
- package/dist/utils.js.map +1 -1
- package/package.json +28 -31
- package/dist/.tsbuildinfo +0 -1
- package/dist/GhostSpeakClient-hsGuGg__.d.ts +0 -860
- package/dist/GovernanceModule-DQYYys-H.d.ts +0 -1766
- package/dist/chunk-ASQXX4IT.js +0 -572
- package/dist/chunk-ASQXX4IT.js.map +0 -1
- package/dist/chunk-COGZFWOT.js +0 -19657
- package/dist/chunk-COGZFWOT.js.map +0 -1
- package/dist/chunk-FKRN4PW5.js +0 -1667
- package/dist/chunk-FKRN4PW5.js.map +0 -1
- package/dist/chunk-GMHIUK2R.js +0 -7526
- package/dist/chunk-GMHIUK2R.js.map +0 -1
- package/dist/chunk-IAWBZYPE.js +0 -356
- package/dist/chunk-IAWBZYPE.js.map +0 -1
- package/dist/chunk-NSBPE2FW.js +0 -15
- package/dist/chunk-OWYHJG6H.js +0 -13311
- package/dist/chunk-OWYHJG6H.js.map +0 -1
- package/dist/chunk-RDDPOFR5.js +0 -3
- package/dist/chunk-RDDPOFR5.js.map +0 -1
- package/dist/chunk-RERCHKZP.js +0 -35
- package/dist/chunk-RERCHKZP.js.map +0 -1
- package/dist/chunk-TVVGXYCI.js +0 -2887
- package/dist/chunk-TVVGXYCI.js.map +0 -1
- package/dist/chunk-V3SOFUAZ.js.map +0 -1
- package/dist/chunk-ZGP5552B.js +0 -377
- package/dist/chunk-ZGP5552B.js.map +0 -1
- package/dist/chunk-ZWOYNHVK.js +0 -196
- package/dist/chunk-ZWOYNHVK.js.map +0 -1
- package/dist/dist/.tsbuildinfo +0 -1
- package/dist/elgamal-VZLWB3XK.js +0 -5
- package/dist/elgamal-VZLWB3XK.js.map +0 -1
- package/dist/feature-flags-V722ZuXO.d.ts +0 -3512
- package/dist/generated-VNLHMR6Y.js +0 -5
- package/dist/ipfs-types-BOt9ZNg4.d.ts +0 -592
- package/dist/multisigConfig-BzEhy6jy.d.ts +0 -58
- package/dist/pda-B_nS8SbD.d.ts +0 -114
- package/dist/pda-S4BFJVGE.js +0 -4
- package/dist/pda-S4BFJVGE.js.map +0 -1
- package/dist/system-addresses-BFNLEbFx.d.ts +0 -857
- package/dist/token-2022-rpc-RALH4RK7.js +0 -593
- package/dist/token-2022-rpc-RALH4RK7.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/rpc-client.ts","../src/utils/transaction-urls.ts","../src/core/DevTools.ts","../src/core/InstructionBuilder.ts","../src/core/BaseModule.ts","../src/utils/ipfs-utils.ts","../src/core/modules/AgentModule.ts","../src/constants/ghostspeak.ts","../src/modules/escrow/EscrowModule.ts","../src/modules/channels/ChannelModule.ts","../src/modules/marketplace/MarketplaceModule.ts","../src/modules/governance/GovernanceModule.ts","../src/modules/token2022/Token2022Module.ts"],"names":["address","createSolanaRpc","getProgramDerivedAddress","getAddressEncoder"],"mappings":"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","file":"chunk-TVVGXYCI.js","sourcesContent":["import type { Address } from '@solana/addresses'\nimport { \n createSolanaRpc, \n createSolanaRpcSubscriptions,\n lamports,\n type Signature,\n type Base64EncodedWireTransaction,\n type TransactionError,\n type TransactionMessageBytesBase64\n} from '@solana/kit'\nimport type {\n Commitment,\n AccountInfo,\n GetAccountInfoOptions,\n GetMultipleAccountsOptions,\n GetProgramAccountsOptions,\n SignatureStatus,\n SimulatedTransactionResponse,\n SendTransactionOptions\n} from '../types/rpc-types.js'\n\nexport interface RpcClientConfig {\n endpoint: string\n wsEndpoint?: string\n commitment?: Commitment\n maxRetries?: number\n retryDelay?: number\n timeout?: number\n}\n\n/**\n * Unified RPC client with all features consolidated from multiple implementations.\n * This is the single source of truth for all RPC operations.\n */\nexport class RpcClient {\n private rpc: ReturnType<typeof createSolanaRpc>\n private rpcSubscriptions?: ReturnType<typeof createSolanaRpcSubscriptions>\n private commitment: Commitment\n private endpoint: string\n private maxRetries: number\n private retryDelay: number\n private timeout: number\n\n constructor(config: RpcClientConfig) {\n this.endpoint = config.endpoint\n this.rpc = createSolanaRpc(config.endpoint)\n this.commitment = config.commitment ?? 'confirmed'\n this.maxRetries = config.maxRetries ?? 3\n this.retryDelay = config.retryDelay ?? 1000\n this.timeout = config.timeout ?? 60000\n \n if (config.wsEndpoint) {\n this.rpcSubscriptions = createSolanaRpcSubscriptions(config.wsEndpoint)\n }\n }\n\n /**\n * Get account information with automatic retries\n */\n async getAccountInfo(\n address: Address,\n options?: GetAccountInfoOptions\n ): Promise<AccountInfo | null> {\n return this.withRetry(async () => {\n const result = await this.rpc.getAccountInfo(address, {\n commitment: options?.commitment ?? this.commitment,\n encoding: 'base64'\n }).send()\n\n if (!result.value) return null\n\n return this.parseAccountInfo(result.value)\n })\n }\n\n /**\n * Get multiple accounts efficiently\n */\n async getMultipleAccounts(\n addresses: Address[],\n options?: GetMultipleAccountsOptions\n ): Promise<(AccountInfo | null)[]> {\n return this.withRetry(async () => {\n const result = await this.rpc.getMultipleAccounts(addresses, {\n commitment: options?.commitment ?? this.commitment,\n encoding: 'base64'\n }).send()\n\nreturn result.value.map((account: unknown) => \n account ? this.parseAccountInfo(account) : null\n )\n })\n }\n\n /**\n * Get program accounts with filters\n */\n async getProgramAccounts(\n programId: Address,\n options?: GetProgramAccountsOptions\n ): Promise<{ pubkey: Address; account: AccountInfo }[]> {\n return this.withRetry(async () => {\n const result = await this.rpc.getProgramAccounts(programId, {\n commitment: options?.commitment ?? this.commitment,\n encoding: 'base64',\n filters: options?.filters\n }).send()\n\nreturn result.map((item: unknown) => {\n const typedItem = item as { pubkey: string; account: unknown }\n return {\n pubkey: typedItem.pubkey as Address,\n account: this.parseAccountInfo(typedItem.account)\n }\n })\n })\n }\n\n /**\n * Get latest blockhash with automatic caching\n */\n private blockhashCache: { value: { blockhash: string; lastValidBlockHeight: bigint }; timestamp: number } | null = null\n \n async getLatestBlockhash(): Promise<{ blockhash: string; lastValidBlockHeight: bigint }> {\n // Cache blockhash for 1 second to avoid excessive RPC calls\n const now = Date.now()\n if (this.blockhashCache && now - this.blockhashCache.timestamp < 1000) {\n return this.blockhashCache.value\n }\n\n const result = await this.withRetry(async () => {\n const response = await this.rpc.getLatestBlockhash({\n commitment: this.commitment\n }).send()\n \n return {\n blockhash: response.value.blockhash,\n lastValidBlockHeight: BigInt(response.value.lastValidBlockHeight)\n }\n })\n\n this.blockhashCache = { value: result, timestamp: now }\n return result\n }\n\n /**\n * Send transaction with enhanced error handling\n */\n async sendTransaction(\n transaction: Base64EncodedWireTransaction,\n options?: SendTransactionOptions\n ): Promise<Signature> {\n return this.withRetry(async () => {\n const result = await this.rpc.sendTransaction(transaction, {\n encoding: 'base64',\n skipPreflight: options?.skipPreflight ?? false,\n preflightCommitment: options?.preflightCommitment ?? this.commitment,\n maxRetries: options?.maxRetries ? BigInt(options.maxRetries) : undefined\n }).send()\n \n return result as Signature\n })\n }\n\n /**\n * Get signature statuses with batch support\n */\n async getSignatureStatuses(\n signatures: Signature[]\n ): Promise<(SignatureStatus | null)[]> {\n return this.withRetry(async () => {\n const result = await this.rpc.getSignatureStatuses(signatures).send()\n \nreturn result.value.map((status: unknown) => {\n if (!status) return null\n \n const typedStatus = status as {\n slot: bigint\n confirmations: number | null\n err: unknown | null\n confirmationStatus: string | null\n }\n \n return {\n slot: typedStatus.slot,\n confirmations: typedStatus.confirmations,\n err: typedStatus.err as TransactionError | null,\n confirmationStatus: typedStatus.confirmationStatus as Commitment | undefined\n }\n })\n })\n }\n\n /**\n * Simulate transaction with detailed error info\n */\n async simulateTransaction(\n transaction: Base64EncodedWireTransaction,\n options?: {\n commitment?: Commitment\n replaceRecentBlockhash?: boolean\n }\n ): Promise<SimulatedTransactionResponse> {\n return this.withRetry(async () => {\n const result = await this.rpc.simulateTransaction(transaction, {\n encoding: 'base64',\n commitment: options?.commitment ?? this.commitment,\n replaceRecentBlockhash: options?.replaceRecentBlockhash ?? false\n }).send()\n \n return {\n err: result.value.err,\n logs: result.value.logs ?? [],\n unitsConsumed: result.value.unitsConsumed ? BigInt(result.value.unitsConsumed) : undefined,\n returnData: result.value.returnData\n }\n })\n }\n\n /**\n * Get fee for message\n */\n async getFeeForMessage(encodedMessage: TransactionMessageBytesBase64): Promise<bigint | null> {\n return this.withRetry(async () => {\n const result = await this.rpc.getFeeForMessage(encodedMessage, {\n commitment: this.commitment\n }).send()\n \n return result.value ? BigInt(result.value) : null\n })\n }\n\n /**\n * Health check\n */\n async isHealthy(): Promise<boolean> {\n try {\n await this.rpc.getHealth().send()\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Get RPC node version\n */\n async getVersion(): Promise<{ 'solana-core': string; 'feature-set': number }> {\n const result = await this.rpc.getVersion().send()\n return result\n }\n\n /**\n * Subscribe to account changes (WebSocket) \n * Note: This is a placeholder implementation. In production, you would use the actual subscription API\n */\n async subscribeToAccount(\n address: Address,\n callback: (accountInfo: AccountInfo | null) => void\n ): Promise<() => void> {\n if (!this.rpcSubscriptions) {\n throw new Error('WebSocket endpoint not configured')\n }\n\n // Placeholder implementation - in practice would use actual subscription\n console.warn('Account subscription is not fully implemented in this version')\n \n // Poll for changes as a fallback (not recommended for production)\n const intervalId = setInterval(async () => {\n try {\n const accountInfo = await this.getAccountInfo(address)\n callback(accountInfo)\n } catch (error) {\n console.error('Subscription polling error:', error)\n }\n }, 5000) // Poll every 5 seconds\n\n return () => {\n clearInterval(intervalId)\n }\n }\n\n // Private helper methods\n\n private async withRetry<T>(\n operation: () => Promise<T>,\n retries = this.maxRetries\n ): Promise<T> {\n let lastError: Error | undefined\n \n for (let i = 0; i <= retries; i++) {\n try {\n return await operation()\n } catch (error) {\n lastError = error as Error\n if (i < retries) {\n await new Promise(resolve => setTimeout(resolve, this.retryDelay * Math.pow(2, i)))\n }\n }\n }\n \n throw lastError\n }\n\n private parseAccountInfo(rawAccount: unknown): AccountInfo {\n const account = rawAccount as {\n executable: boolean\n lamports: number\n owner: string\n rentEpoch?: number\n data: [string, string] | string\n space?: number\n }\n\n const dataArray = account.data\n const base64Data = Array.isArray(dataArray) ? dataArray[0] : dataArray\n \n return {\n executable: account.executable,\n lamports: typeof account.lamports === 'number' ? lamports(BigInt(account.lamports)) : account.lamports,\n owner: account.owner as Address,\n rentEpoch: account.rentEpoch !== undefined ? (typeof account.rentEpoch === 'number' ? BigInt(account.rentEpoch) : account.rentEpoch) : BigInt(0),\n data: Buffer.from(base64Data, 'base64'),\n space: account.space ? (typeof account.space === 'number' ? BigInt(account.space) : account.space) : undefined\n }\n }\n}","import type { Address, Signature } from '@solana/kit'\nimport type { Commitment } from '../types/index.js'\n\n/**\n * Solana cluster types for URL generation\n */\nexport type SolanaCluster = 'mainnet-beta' | 'devnet' | 'testnet' | 'localnet'\n\n/**\n * Transaction result with verification URLs\n */\nexport interface TransactionResult {\n signature: string | Signature\n cluster: SolanaCluster\n urls: {\n solanaExplorer: string\n solscan: string\n solanaFM: string\n xray: string\n }\n commitment: Commitment\n timestamp: number\n}\n\n/**\n * Detect cluster from RPC endpoint URL\n */\nexport function detectClusterFromEndpoint(rpcUrl: string): SolanaCluster {\n if (rpcUrl.includes('devnet')) return 'devnet'\n if (rpcUrl.includes('testnet')) return 'testnet'\n if (rpcUrl.includes('localhost') || rpcUrl.includes('127.0.0.1')) return 'localnet'\n return 'mainnet-beta'\n}\n\n/**\n * Generate Solana Explorer URL for transaction\n */\nexport function getSolanaExplorerUrl(\n signature: string | Signature, \n cluster: SolanaCluster = 'mainnet-beta'\n): string {\n const baseUrl = 'https://explorer.solana.com/tx'\n \n switch (cluster) {\n case 'devnet':\n return `${baseUrl}/${signature}?cluster=devnet`\n case 'testnet':\n return `${baseUrl}/${signature}?cluster=testnet`\n case 'localnet':\n return `${baseUrl}/${signature}?cluster=custom&customUrl=http://localhost:8899`\n default:\n return `${baseUrl}/${signature}`\n }\n}\n\n/**\n * Generate Solscan URL for transaction\n */\nexport function getSolscanUrl(\n signature: string | Signature, \n cluster: SolanaCluster = 'mainnet-beta'\n): string {\n const baseUrl = 'https://solscan.io/tx'\n \n switch (cluster) {\n case 'devnet':\n return `${baseUrl}/${signature}?cluster=devnet`\n case 'testnet':\n return `${baseUrl}/${signature}?cluster=testnet`\n case 'localnet':\n return `Local transaction: ${signature} (not viewable on Solscan)`\n default:\n return `${baseUrl}/${signature}`\n }\n}\n\n/**\n * Generate SolanaFM URL for transaction\n */\nexport function getSolanaFMUrl(\n signature: string | Signature, \n cluster: SolanaCluster = 'mainnet-beta'\n): string {\n const baseUrl = 'https://solana.fm/tx'\n \n switch (cluster) {\n case 'devnet':\n return `${baseUrl}/${signature}?cluster=devnet-solana`\n case 'testnet':\n return `${baseUrl}/${signature}?cluster=testnet-solana`\n case 'localnet':\n return `Local transaction: ${signature} (not viewable on SolanaFM)`\n default:\n return `${baseUrl}/${signature}`\n }\n}\n\n/**\n * Generate XRAY URL for transaction (Helius explorer)\n */\nexport function getXrayUrl(\n signature: string | Signature, \n cluster: SolanaCluster = 'mainnet-beta'\n): string {\n const baseUrl = 'https://xray.helius.xyz/tx'\n \n switch (cluster) {\n case 'devnet':\n return `${baseUrl}/${signature}?network=devnet`\n case 'testnet':\n return `${baseUrl}/${signature}?network=testnet`\n case 'localnet':\n return `Local transaction: ${signature} (not viewable on XRAY)`\n default:\n return `${baseUrl}/${signature}`\n }\n}\n\n/**\n * Generate all explorer URLs for a transaction\n */\nexport function generateExplorerUrls(\n signature: string | Signature,\n cluster: SolanaCluster = 'mainnet-beta'\n): TransactionResult['urls'] {\n return {\n solanaExplorer: getSolanaExplorerUrl(signature, cluster),\n solscan: getSolscanUrl(signature, cluster),\n solanaFM: getSolanaFMUrl(signature, cluster),\n xray: getXrayUrl(signature, cluster)\n }\n}\n\n/**\n * Create a complete transaction result with all verification URLs\n */\nexport function createTransactionResult(\n signature: string | Signature,\n cluster: SolanaCluster,\n commitment: Commitment = 'confirmed'\n): TransactionResult {\n return {\n signature,\n cluster,\n urls: generateExplorerUrls(signature, cluster),\n commitment,\n timestamp: Date.now()\n }\n}\n\n/**\n * Generate account explorer URLs\n */\nexport function getAccountExplorerUrls(\n address: Address,\n cluster: SolanaCluster = 'mainnet-beta'\n) {\n const clusterParam = cluster === 'mainnet-beta' ? '' : `?cluster=${cluster}`\n \n return {\n solanaExplorer: `https://explorer.solana.com/address/${address}${clusterParam}`,\n solscan: cluster === 'mainnet-beta' \n ? `https://solscan.io/account/${address}`\n : `https://solscan.io/account/${address}?cluster=${cluster}`,\n solanaFM: cluster === 'mainnet-beta'\n ? `https://solana.fm/address/${address}`\n : `https://solana.fm/address/${address}?cluster=${cluster}-solana`\n }\n}\n\n/**\n * Log transaction details with clickable URLs\n */\nexport function logTransactionDetails(result: TransactionResult): void {\n console.log('\\n🎉 TRANSACTION SUCCESSFUL!')\n console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')\n console.log(`📝 Signature: ${result.signature}`)\n console.log(`🌐 Cluster: ${result.cluster}`)\n console.log(`⏰ Timestamp: ${new Date(result.timestamp).toISOString()}`)\n console.log(`🔒 Commitment: ${result.commitment}`)\n console.log('\\n🔗 VIEW TRANSACTION ON EXPLORERS:')\n console.log(` 🔍 Solana Explorer: ${result.urls.solanaExplorer}`)\n console.log(` 📊 Solscan: ${result.urls.solscan}`)\n console.log(` 🎯 SolanaFM: ${result.urls.solanaFM}`)\n console.log(` ⚡ XRAY (Helius): ${result.urls.xray}`)\n console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')\n}\n\n/**\n * Create markdown link for transaction\n */\nexport function createTransactionMarkdown(\n signature: string | Signature,\n cluster: SolanaCluster = 'mainnet-beta',\n linkText?: string\n): string {\n const url = getSolanaExplorerUrl(signature, cluster)\n const text = linkText ?? `View Transaction ${signature.slice(0, 8)}...`\n return `[${text}](${url})`\n}\n\n/**\n * Wait for transaction confirmation with progress updates\n */\nexport async function waitForTransactionConfirmation(\n signature: string | Signature,\n cluster: SolanaCluster,\n commitment: Commitment = 'confirmed',\n timeoutMs = 30000\n): Promise<void> {\n console.log(`⏳ Waiting for transaction confirmation...`)\n console.log(` Signature: ${signature}`)\n console.log(` Cluster: ${cluster}`)\n console.log(` Commitment: ${commitment}`)\n \n const startTime = Date.now()\n const checkInterval = 2000 // Check every 2 seconds\n \n return new Promise((resolve, reject) => {\n const intervalId = setInterval(() => {\n const elapsed = Date.now() - startTime\n \n if (elapsed >= timeoutMs) {\n clearInterval(intervalId)\n reject(new Error(`Transaction confirmation timeout after ${timeoutMs}ms`))\n return\n }\n \n console.log(` ⏱️ Waiting... (${Math.floor(elapsed/1000)}s elapsed)`)\n \n // In a real implementation, you would check transaction status here\n // For now, we simulate confirmation after a reasonable time\n if (elapsed >= 5000) {\n clearInterval(intervalId)\n console.log(` ✅ Transaction confirmed after ${Math.floor(elapsed/1000)}s`)\n resolve()\n }\n }, checkInterval)\n })\n}","/**\n * Developer Tools for GhostSpeak SDK\n * \n * Provides debugging, inspection, and development utilities\n */\n\nimport type { Instruction, AccountRole } from '@solana/kit'\n// Type alias for backward compatibility with @solana/kit v2\ntype IInstruction = Instruction\nimport type { Address } from '@solana/addresses'\nimport type { GhostSpeakConfig } from '../types/index.js'\nimport { RpcClient } from './rpc-client.js'\n\n/**\n * Transaction analysis result\n */\nexport interface TransactionAnalysis {\n instructions: InstructionAnalysis[]\n totalAccounts: number\n signerCount: number\n writableAccounts: Address[]\n readonlyAccounts: Address[]\n estimatedSize: number\n estimatedComputeUnits: bigint\n estimatedFee: bigint\n warnings: string[]\n}\n\n/**\n * Individual instruction analysis\n */\nexport interface InstructionAnalysis {\n index: number\n programId: Address\n accountCount: number\n dataSize: number\n humanReadable: string\n accounts: AccountInfo[]\n}\n\n/**\n * Account information in instruction\n */\nexport interface AccountInfo {\n address: Address\n isWritable: boolean\n isSigner: boolean\n role: AccountRole\n}\n\n/**\n * Developer tools for debugging and analysis\n */\nexport class DevTools {\n private static instance: DevTools | null = null\n private rpcClient: RpcClient\n private config: GhostSpeakConfig\n private isDevelopment: boolean\n private logs: string[] = []\n private timings: Map<string, number> = new Map()\n\n constructor(config: GhostSpeakConfig) {\n this.config = config\n this.rpcClient = new RpcClient({\n endpoint: config.rpcEndpoint ?? 'https://api.devnet.solana.com',\n commitment: config.commitment\n })\n this.isDevelopment = process.env.NODE_ENV === 'development' || \n config.cluster === 'localnet' ||\n false\n }\n\n /**\n * Get singleton instance\n */\n static getInstance(config?: GhostSpeakConfig): DevTools {\n if (!DevTools.instance && config) {\n DevTools.instance = new DevTools(config)\n }\n if (!DevTools.instance) {\n throw new Error('DevTools not initialized. Call with config first.')\n }\n return DevTools.instance\n }\n\n /**\n * Enable development mode\n */\n enableDevMode(): void {\n this.isDevelopment = true\n console.log('🛠️ GhostSpeak Development Mode Enabled')\n console.log(' - Transaction simulation before sending')\n console.log(' - Cost estimates for all operations')\n console.log(' - Enhanced error messages')\n console.log(' - Performance timing')\n }\n\n /**\n * Check if in development mode\n */\n isDevMode(): boolean {\n return this.isDevelopment\n }\n\n /**\n * Analyze transaction instructions\n */\n analyzeTransaction(instructions: IInstruction[]): TransactionAnalysis {\n const writableAccounts = new Set<Address>()\n const readonlyAccounts = new Set<Address>()\n const signers = new Set<Address>()\n const warnings: string[] = []\n let totalSize = 64 // Base transaction overhead\n\n const instructionAnalyses: InstructionAnalysis[] = instructions.map((instr, index) => {\n totalSize += 32 // Program ID\n totalSize += (instr.accounts?.length ?? 0) * 32 // Account metas\n totalSize += instr.data?.length ?? 0 // Instruction data\n\n const accounts: AccountInfo[] = (instr.accounts ?? []).map(acc => {\n // Check if the role has 'writable' in its name or is specifically writable\n const isWritable = acc.role.toString().includes('writable') || \n acc.role.toString().includes('WRITABLE') ||\n acc.role === 1 || // AccountRole.WRITABLE = 1\n acc.role === 3 // AccountRole.WRITABLE_SIGNER = 3\n // Check if the role has 'signer' in its name or contains signer property\n const isSigner = acc.role.toString().includes('signer') || \n acc.role.toString().includes('SIGNER') ||\n (typeof acc === 'object' && 'signer' in acc) ||\n acc.role === 3 // AccountRole.WRITABLE_SIGNER = 3\n \n // Account analysis complete\n \n if (isWritable) {\n writableAccounts.add(acc.address)\n } else {\n readonlyAccounts.add(acc.address)\n }\n \n if (isSigner) {\n signers.add(acc.address)\n }\n\n return {\n address: acc.address,\n isWritable,\n isSigner,\n role: acc.role\n }\n })\n\n const humanReadable = this.getInstructionDescription(instr, index)\n\n return {\n index,\n programId: instr.programAddress,\n accountCount: accounts.length,\n dataSize: instr.data?.length ?? 0,\n humanReadable,\n accounts\n }\n })\n\n // Calculate estimated compute units\n const estimatedComputeUnits = this.estimateComputeUnits(instructions)\n \n // Calculate estimated fee\n const estimatedFee = this.estimateFee(estimatedComputeUnits, instructions.length)\n\n // Generate warnings\n if (totalSize > 1232) {\n warnings.push(`Transaction size (${totalSize} bytes) exceeds limit (1232 bytes)`)\n }\n \n if (signers.size === 0) {\n warnings.push('No signers found in transaction')\n }\n \n if (estimatedComputeUnits > BigInt(1_400_000)) {\n warnings.push(`High compute usage: ${estimatedComputeUnits} units`)\n }\n\n return {\n instructions: instructionAnalyses,\n totalAccounts: writableAccounts.size + readonlyAccounts.size,\n signerCount: signers.size,\n writableAccounts: Array.from(writableAccounts),\n readonlyAccounts: Array.from(readonlyAccounts),\n estimatedSize: totalSize,\n estimatedComputeUnits,\n estimatedFee,\n warnings\n }\n }\n\n /**\n * Get human-readable instruction description\n */\n private getInstructionDescription(instruction: IInstruction, _index: number): string {\n // Try to decode based on program ID\n const programId = instruction.programAddress\n \n // GhostSpeak program\n if (programId === this.config.programId) {\n return this.decodeGhostSpeakInstruction(instruction)\n }\n \n // System program\n if (programId === '11111111111111111111111111111111') {\n return 'System Program: Transfer or Create Account'\n }\n \n // Token program\n if (programId === 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA') {\n return 'Token Program: Token Operation'\n }\n \n // Token-2022 program\n if (programId === 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb') {\n return 'Token-2022 Program: Advanced Token Operation'\n }\n \n return `Unknown Instruction`\n }\n\n /**\n * Decode GhostSpeak instruction\n */\n private decodeGhostSpeakInstruction(instruction: IInstruction): string {\n if (!instruction.data || instruction.data.length < 8) {\n return 'GhostSpeak: Unknown Instruction'\n }\n \n // Read discriminator (first 8 bytes)\n const discriminator = Array.from(instruction.data.slice(0, 8))\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n \n // Map common discriminators to names\n const instructionMap: Record<string, string> = {\n 'a8c5e109d3d1b8d5': 'Register Agent',\n 'b7f3c8e0a2d4e9f1': 'Create Escrow',\n 'c4d2f7a9b8e1c3f5': 'Send Message',\n 'd9e8f2b5c1a7e4f8': 'Create Channel',\n // Add more mappings as needed\n }\n \n return `GhostSpeak: ${instructionMap[discriminator] ?? 'Custom Instruction'}`\n }\n\n /**\n * Estimate compute units for instructions\n */\n private estimateComputeUnits(instructions: IInstruction[]): bigint {\n let totalUnits = BigInt(0)\n \n for (const instr of instructions) {\n // Base cost per instruction\n totalUnits += BigInt(200)\n \n // Account access costs\n totalUnits += BigInt((instr.accounts?.length ?? 0) * 150)\n \n // Data processing cost\n totalUnits += BigInt((instr.data?.length ?? 0) * 10)\n \n // Program-specific costs\n if (instr.programAddress === this.config.programId) {\n // GhostSpeak operations are more complex\n totalUnits += BigInt(5000)\n }\n }\n \n return totalUnits\n }\n\n /**\n * Estimate transaction fee\n */\n private estimateFee(computeUnits: bigint, instructionCount: number): bigint {\n // Base fee: 5000 lamports per signature\n const baseFee = BigInt(5000)\n \n // Compute unit fee: ~0.000005 SOL per 1M units\n const computeFee = (computeUnits * BigInt(5)) / BigInt(1_000_000)\n \n // Priority fee estimate\n const priorityFee = BigInt(instructionCount * 1000)\n \n return baseFee + computeFee + priorityFee\n }\n\n /**\n * Log debug message\n */\n log(message: string, data?: unknown): void {\n if (!this.isDevelopment) return\n \n const timestamp = new Date().toISOString()\n const logEntry = `[${timestamp}] ${message}`\n \n this.logs.push(logEntry)\n console.log(`🔍 ${logEntry}`)\n \n if (data) {\n console.log(' Data:', data)\n }\n }\n\n /**\n * Start timing an operation\n */\n startTiming(label: string): void {\n if (!this.isDevelopment) return\n const perfNow = typeof performance !== 'undefined' ? performance.now() : Date.now()\n this.timings.set(label, perfNow)\n }\n\n /**\n * End timing and log result\n */\n endTiming(label: string): void {\n if (!this.isDevelopment) return\n \n const start = this.timings.get(label)\n if (!start) return\n \n const perfNow = typeof performance !== 'undefined' ? performance.now() : Date.now()\n const duration = perfNow - start\n this.log(`${label} took ${duration.toFixed(2)}ms`)\n this.timings.delete(label)\n }\n\n /**\n * Format transaction for display\n */\n formatTransaction(analysis: TransactionAnalysis): string {\n const lines: string[] = [\n '📋 Transaction Analysis',\n '═══════════════════════════════════════',\n `Instructions: ${analysis.instructions.length}`,\n `Total Accounts: ${analysis.totalAccounts}`,\n `Signers: ${analysis.signerCount}`,\n `Estimated Size: ${analysis.estimatedSize} bytes`,\n `Estimated Compute Units: ${analysis.estimatedComputeUnits.toLocaleString()}`,\n `Estimated Fee: ${(Number(analysis.estimatedFee) / 1e9).toFixed(6)} SOL`,\n ''\n ]\n \n // Add instruction details\n lines.push('Instructions:')\n for (const instr of analysis.instructions) {\n lines.push(` ${instr.index + 1}. ${instr.humanReadable}`)\n lines.push(` Program: ${instr.programId.slice(0, 8)}...`)\n lines.push(` Accounts: ${instr.accountCount}, Data: ${instr.dataSize} bytes`)\n }\n \n // Add warnings\n if (analysis.warnings.length > 0) {\n lines.push('')\n lines.push('⚠️ Warnings:')\n for (const warning of analysis.warnings) {\n lines.push(` - ${warning}`)\n }\n }\n \n lines.push('═══════════════════════════════════════')\n \n return lines.join('\\n')\n }\n\n /**\n * Export debug logs\n */\n exportLogs(): string[] {\n return [...this.logs]\n }\n\n /**\n * Clear debug logs\n */\n clearLogs(): void {\n this.logs = []\n this.timings.clear()\n }\n}\n\n/**\n * Global development mode check\n */\nexport function isDevMode(): boolean {\n return DevTools.getInstance().isDevMode()\n}\n\n/**\n * Global logging function\n */\nexport function devLog(message: string, data?: unknown): void {\n DevTools.getInstance().log(message, data)\n}\n\n/**\n * Export DevTools as default\n */\nexport default DevTools","import type { Address } from '@solana/addresses'\nimport type { Instruction, TransactionSigner, Blockhash, Base64EncodedBytes, Base58EncodedBytes, TransactionMessageBytesBase64, TransactionMessageBytes, SignaturesMap, Signature } from '@solana/kit'\n// Type alias for backward compatibility with @solana/kit v2\ntype IInstruction = Instruction\nimport type { GhostSpeakConfig, ParticipantType } from '../types/index.js'\nimport { RpcClient } from './rpc-client.js'\nimport { createTransactionResult } from '../utils/transaction-urls.js'\nimport { logEnhancedError, createErrorContext } from '../utils/enhanced-client-errors.js'\nimport { DevTools, type TransactionAnalysis } from './DevTools.js'\nimport {\n pipe,\n createTransactionMessage,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageFeePayer,\n setTransactionMessageLifetimeUsingBlockhash,\n appendTransactionMessageInstructions,\n signTransactionMessageWithSigners,\n getBase64EncodedWireTransaction,\n compileTransactionMessage\n} from '@solana/kit'\n\n/**\n * Type for instruction-like objects from generated code\n */\ntype InstructionLike = {\n programAddress: Address\n accounts?: readonly unknown[]\n data?: unknown\n}\n\n/**\n * Helper to validate instruction has required properties\n */\nfunction validateInstruction(instruction: unknown): asserts instruction is InstructionLike {\n const inst = instruction as Record<string, unknown>\n if (!inst.programAddress) {\n throw new Error('Invalid instruction format')\n }\n}\n\n/**\n * Unified instruction builder that eliminates duplication across all instruction classes.\n * This is the single source of truth for instruction execution patterns.\n */\nexport class InstructionBuilder {\n private rpcClient: RpcClient\n private config: GhostSpeakConfig\n private devTools: DevTools\n private debugMode = false\n\n constructor(config: GhostSpeakConfig) {\n this.config = config\n this.rpcClient = new RpcClient({\n endpoint: config.rpcEndpoint ?? 'https://api.devnet.solana.com',\n wsEndpoint: config.wsEndpoint,\n commitment: config.commitment ?? 'confirmed'\n })\n this.devTools = DevTools.getInstance(config)\n }\n\n /**\n * Execute a single instruction with unified error handling and transaction patterns\n */\n async execute<T = string>(\n instructionName: string,\n instructionGetter: () => Promise<InstructionLike> | InstructionLike,\n signers: TransactionSigner[],\n options?: {\n simulate?: boolean\n returnDetails?: boolean\n skipPreflight?: boolean\n maxRetries?: number\n }\n ): Promise<T> {\n const context = createErrorContext(\n 'execute',\n instructionName,\n signers.map(s => ({ address: s.address, name: 'signer' })),\n { programId: this.config.programId }\n )\n\n try {\n // Start timing if in dev mode\n if (this.devTools.isDevMode()) {\n this.devTools.startTiming(instructionName)\n }\n\n // Get the instruction and validate it\n const instruction = await Promise.resolve(instructionGetter())\n validateInstruction(instruction)\n\n // Debug mode - show analysis before execution\n if (this.debugMode || this.devTools.isDevMode()) {\n const analysis = this.devTools.analyzeTransaction([instruction] as unknown as IInstruction[])\n console.log(this.devTools.formatTransaction(analysis))\n this.debugMode = false // Reset debug mode\n }\n\n // Simulate if requested\n if (options?.simulate) {\n return await this.simulateInstruction(instruction, signers) as T\n }\n\n // Get latest blockhash\n const latestBlockhashResult = await this.rpcClient.getLatestBlockhash()\n const latestBlockhash = {\n blockhash: latestBlockhashResult.blockhash as Blockhash,\n lastValidBlockHeight: latestBlockhashResult.lastValidBlockHeight\n }\n\n // Build transaction message\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayerSigner(signers[0], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions([instruction as IInstruction], tx)\n )\n\n // Sign transaction\n const signedTransaction = await signTransactionMessageWithSigners(transactionMessage)\n \n // Send and confirm\n const signatureResult = await this.sendAndConfirm(\n signedTransaction,\n options?.skipPreflight ?? false,\n options?.maxRetries ?? 30\n )\n \n if (typeof signatureResult !== 'string') {\n throw new Error('Transaction signature is not a string')\n }\n \n const signature = signatureResult\n\n // Return detailed result if requested\n if (options?.returnDetails) {\n const cluster = this.config.cluster ?? 'devnet'\n const result = createTransactionResult(signature, cluster, this.config.commitment ?? 'confirmed') as unknown\n \n // End timing if in dev mode\n if (this.devTools.isDevMode()) {\n this.devTools.endTiming(instructionName)\n }\n \n return result as T\n }\n\n // End timing if in dev mode\n if (this.devTools.isDevMode()) {\n this.devTools.endTiming(instructionName)\n }\n\n return signature as T\n } catch (error) {\n logEnhancedError(error as Error, context)\n throw error\n }\n }\n\n /**\n * Execute multiple instructions in a single transaction\n */\n async executeBatch<T = string>(\n batchName: string,\n instructionGetters: (() => Promise<InstructionLike> | InstructionLike)[],\n signers: TransactionSigner[],\n options?: {\n simulate?: boolean\n returnDetails?: boolean\n skipPreflight?: boolean\n }\n ): Promise<T> {\n const context = createErrorContext(\n 'executeBatch',\n batchName,\n signers.map(s => ({ address: s.address, name: 'signer' })),\n { programId: this.config.programId, instructionCount: instructionGetters.length }\n )\n\n try {\n // Get all instructions and validate them\n const instructions = await Promise.all(\n instructionGetters.map(async (getter, i) => {\n const instruction = await Promise.resolve(getter())\n try {\n validateInstruction(instruction)\n return instruction\n } catch (error) {\n throw new Error(`Instruction ${i} in ${batchName}: ${(error as Error).message}`)\n }\n })\n )\n\n // Check transaction size\n const estimatedSize = this.estimateTransactionSize(instructions as IInstruction[])\n if (estimatedSize > 1232) {\n throw new Error(`Transaction too large: ${estimatedSize} bytes (max: 1232)`)\n }\n\n // Simulate if requested\n if (options?.simulate) {\n return await this.simulateBatch(instructions as IInstruction[], signers) as T\n }\n\n // Get latest blockhash\n const latestBlockhashResult = await this.rpcClient.getLatestBlockhash()\n const latestBlockhash = {\n blockhash: latestBlockhashResult.blockhash as Blockhash,\n lastValidBlockHeight: latestBlockhashResult.lastValidBlockHeight\n }\n\n // Build transaction message\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayerSigner(signers[0], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions(instructions as IInstruction[], tx)\n )\n\n // Sign transaction\n const signedTransaction = await signTransactionMessageWithSigners(transactionMessage)\n \n // Send and confirm\n const signatureResult = await this.sendAndConfirm(\n signedTransaction,\n options?.skipPreflight ?? false\n )\n \n if (typeof signatureResult !== 'string') {\n throw new Error('Transaction signature is not a string')\n }\n \n const signature = signatureResult\n\n // Return detailed result if requested\n if (options?.returnDetails) {\n const cluster = this.config.cluster ?? 'devnet'\n const result = createTransactionResult(signature, cluster, this.config.commitment ?? 'confirmed') as unknown\n \n // End timing if in dev mode\n if (this.devTools.isDevMode()) {\n this.devTools.endTiming(batchName)\n }\n \n return result as T\n }\n\n // End timing if in dev mode\n if (this.devTools.isDevMode()) {\n this.devTools.endTiming(batchName)\n }\n\n return signature as T\n } catch (error) {\n logEnhancedError(error as Error, context)\n throw error\n }\n }\n\n /**\n * Get and decode account data with unified error handling\n */\n async getAccount<T>(\n address: Address,\n decoderImportName: string\n ): Promise<T | null> {\n try {\n const accountInfo = await this.rpcClient.getAccountInfo(address, {\n commitment: this.config.commitment\n })\n \n if (!accountInfo) return null\n\n // Dynamic import and decode\n const generated = await import('../generated/index.js')\n const decoderGetter = (generated as Record<string, unknown>)[decoderImportName] as (() => { decode: (data: Uint8Array | Buffer) => T })\n \n // Decoder existence guaranteed by dynamic import\n\n const decoder = decoderGetter()\n const rawData = this.extractRawData(accountInfo.data)\n \n return decoder.decode(rawData)\n } catch (error) {\n console.warn(`Failed to fetch account ${address}:`, error)\n return null\n }\n }\n\n /**\n * Get multiple accounts with unified pattern\n */\n async getAccounts<T>(\n addresses: Address[],\n decoderImportName: string\n ): Promise<(T | null)[]> {\n try {\n const accounts = await this.rpcClient.getMultipleAccounts(addresses, {\n commitment: this.config.commitment\n })\n\n // Dynamic import decoder\n const generated = await import('../generated/index.js')\n const decoderGetter = (generated as Record<string, unknown>)[decoderImportName] as (() => { decode: (data: Uint8Array | Buffer) => T })\n \n // Decoder existence guaranteed by dynamic import\n\n const decoder = decoderGetter()\n \n return accounts.map(accountInfo => {\n if (!accountInfo) return null\n try {\n const rawData = this.extractRawData(accountInfo.data)\n return decoder.decode(rawData)\n } catch {\n return null\n }\n })\n } catch (error) {\n console.warn('Failed to fetch multiple accounts:', error)\n return addresses.map(() => null)\n }\n }\n\n /**\n * Get program accounts with filters\n */\n async getProgramAccounts<T>(\n decoderImportName: string,\n filters?: ({ dataSize: bigint } | { memcmp: { offset: bigint; bytes: string; encoding?: 'base58' | 'base64' } })[]\n ): Promise<{ address: Address; data: T }[]> {\n try {\n // Convert filters to the proper branded types for RPC client\n const convertedFilters = filters?.map(filter => {\n if ('dataSize' in filter) {\n return { dataSize: filter.dataSize }\n } else {\n const encoding = filter.memcmp.encoding ?? 'base58'\n if (encoding === 'base64') {\n return {\n memcmp: {\n offset: filter.memcmp.offset,\n bytes: filter.memcmp.bytes as Base64EncodedBytes,\n encoding: 'base64' as const\n }\n }\n } else {\n return {\n memcmp: {\n offset: filter.memcmp.offset,\n bytes: filter.memcmp.bytes as Base58EncodedBytes,\n encoding: 'base58' as const\n }\n }\n }\n }\n })\n\n const accounts = await this.rpcClient.getProgramAccounts(this.config.programId!, {\n commitment: this.config.commitment,\n filters: convertedFilters ?? []\n })\n\n // Dynamic import decoder\n const generated = await import('../generated/index.js')\n const decoderGetter = (generated as Record<string, unknown>)[decoderImportName] as (() => { decode: (data: Uint8Array | Buffer) => T })\n \n // Decoder existence guaranteed by dynamic import\n\n const decoder = decoderGetter()\n const decodedAccounts: { address: Address; data: T }[] = []\n\n for (const { pubkey, account } of accounts) {\n try {\n const rawData = this.extractRawData(account.data)\n const decodedData = decoder.decode(rawData)\n decodedAccounts.push({ address: pubkey, data: decodedData })\n } catch {\n // Skip accounts that fail to decode\n }\n }\n\n return decodedAccounts\n } catch (error) {\n console.error('Failed to get program accounts:', error)\n return []\n }\n }\n\n /**\n * Enable debug mode for next transaction\n */\n enableDebug(): this {\n this.debugMode = true\n return this\n }\n\n /**\n * Debug transaction - analyze without executing\n */\n async debug(\n instructionName: string,\n instructionGetters: (() => Promise<InstructionLike> | InstructionLike)[]\n ): Promise<TransactionAnalysis> {\n this.devTools.log(`Debugging ${instructionName}`)\n \n // Get all instructions and validate them\n const instructions = await Promise.all(\n instructionGetters.map(async getter => {\n const instruction = await Promise.resolve(getter())\n validateInstruction(instruction)\n return instruction\n })\n )\n \n // Analyze transaction\n const analysis = this.devTools.analyzeTransaction(instructions as unknown as IInstruction[])\n \n // Log formatted analysis\n console.log(this.devTools.formatTransaction(analysis))\n \n return analysis\n }\n\n /**\n * Get human-readable explanation of transaction\n */\n async explain(\n instructionName: string,\n instructionGetters: (() => Promise<InstructionLike> | InstructionLike)[]\n ): Promise<string> {\n const analysis = await this.debug(instructionName, instructionGetters)\n \n const lines = [\n `🔍 Transaction: ${instructionName}`,\n '',\n 'This transaction will:',\n ...analysis.instructions.map((instr, i) => ` ${i + 1}. ${instr.humanReadable}`),\n '',\n `Cost: ~${(Number(analysis.estimatedFee) / 1e9).toFixed(6)} SOL`,\n `Size: ${analysis.estimatedSize} bytes`,\n `Compute: ${analysis.estimatedComputeUnits.toLocaleString()} units`\n ]\n \n if (analysis.warnings.length > 0) {\n lines.push('', '⚠️ Warnings:')\n lines.push(...analysis.warnings.map(w => ` - ${w}`))\n }\n \n return lines.join('\\n')\n }\n\n /**\n * Estimate transaction cost\n */\n async estimateCost(\n instructionGetters: (() => Promise<InstructionLike> | InstructionLike)[]\n ): Promise<bigint> {\n try {\n const instructions = await Promise.all(\n instructionGetters.map(async getter => {\n const instruction = await Promise.resolve(getter())\n validateInstruction(instruction)\n return instruction\n })\n )\n\n const latestBlockhashResult = await this.rpcClient.getLatestBlockhash()\n const latestBlockhash = {\n blockhash: latestBlockhashResult.blockhash as Blockhash,\n lastValidBlockHeight: latestBlockhashResult.lastValidBlockHeight\n }\n \n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayer(this.config.defaultFeePayer!, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions(instructions as IInstruction[], tx)\n )\n\n const compiledMessage = compileTransactionMessage(transactionMessage)\n const encodedMessage = Buffer.from(compiledMessage as unknown as Uint8Array).toString('base64')\n \n const fee = await this.rpcClient.getFeeForMessage(encodedMessage as TransactionMessageBytesBase64)\n return BigInt(fee ?? 0)\n } catch {\n // Fallback estimate\n const baseFee = 5000n\n const perInstructionFee = 1000n\n return baseFee + (BigInt(instructionGetters.length) * perInstructionFee)\n }\n }\n\n // Private helper methods\n\n private async sendAndConfirm(\n signedTransaction: Readonly<{ messageBytes: TransactionMessageBytes; signatures: SignaturesMap; }>,\n skipPreflight: boolean,\n maxRetries = 30\n ): Promise<Signature> {\n const wireTransaction = getBase64EncodedWireTransaction(signedTransaction as Readonly<{ messageBytes: TransactionMessageBytes; signatures: SignaturesMap; }>)\n \n const signature = await this.rpcClient.sendTransaction(wireTransaction, {\n skipPreflight,\n preflightCommitment: this.config.commitment\n })\n\n console.log('🔍 Transaction sent, signature:', signature)\n console.log('🔍 Signature length:', signature.length)\n console.log('🔍 Signature type:', typeof signature)\n\n // Poll for confirmation with improved logic\n let confirmed = false\n let attempts = 0\n let currentDelay = 1000\n const maxConfirmationTime = 30000 // 30 seconds max\n\n const startTime = Date.now()\n\n while (!confirmed && attempts < maxRetries && (Date.now() - startTime) < maxConfirmationTime) {\n try {\n console.log(`🔍 Confirmation attempt ${attempts + 1}/${maxRetries}`)\n const statuses = await this.rpcClient.getSignatureStatuses([signature] as const)\n \n if (statuses[0]) {\n console.log('🔍 Status found:', statuses[0])\n if (statuses[0].err) {\n throw new Error(`Transaction failed: ${JSON.stringify(statuses[0].err, (_, v: unknown) => typeof v === 'bigint' ? v.toString() : v)}`)\n }\n \n const confirmationStatus = statuses[0].confirmationStatus\n if (confirmationStatus === this.config.commitment || \n (this.config.commitment === 'confirmed' && confirmationStatus === 'finalized')) {\n confirmed = true\n console.log('✅ Transaction confirmed via status check')\n break\n }\n } else {\n console.log('🔍 No status found, trying transaction details...')\n // Fallback: try to get transaction details directly\n try {\n // Try to import and create a direct RPC connection for transaction lookup\n const { createSolanaRpc } = await import('@solana/kit')\n const directRpc = createSolanaRpc(this.config.rpcEndpoint ?? 'https://api.devnet.solana.com')\n const transaction = await directRpc.getTransaction(signature, {\n commitment: this.config.commitment ?? 'confirmed',\n encoding: 'json',\n maxSupportedTransactionVersion: 0\n }).send()\n \n if (transaction && transaction.meta) {\n if (transaction.meta.err) {\n throw new Error(`Transaction failed: ${JSON.stringify(transaction.meta.err, (_, v: unknown) => typeof v === 'bigint' ? v.toString() : v)}`)\n }\n confirmed = true\n console.log('✅ Transaction confirmed via direct lookup')\n break\n }\n } catch {\n console.log('🔍 Transaction details not yet available')\n }\n }\n \n attempts++\n await new Promise(resolve => setTimeout(resolve, currentDelay))\n currentDelay = Math.min(currentDelay * 1.5, 5000)\n \n } catch (error) {\n if (error instanceof Error && error.message.includes('Transaction failed')) {\n throw error\n }\n console.log(`🔍 Confirmation attempt failed:`, (error as Error).message)\n attempts++\n await new Promise(resolve => setTimeout(resolve, currentDelay * 2))\n }\n }\n\n if (!confirmed) {\n // Before giving up, do one final check with direct transaction lookup\n console.log('🔍 Final confirmation attempt via transaction lookup...')\n try {\n const { createSolanaRpc } = await import('@solana/kit')\n const directRpc = createSolanaRpc(this.config.rpcEndpoint ?? 'https://api.devnet.solana.com')\n const transaction = await directRpc.getTransaction(signature, {\n commitment: this.config.commitment ?? 'confirmed',\n encoding: 'json',\n maxSupportedTransactionVersion: 0\n }).send()\n \n if (transaction && transaction.meta) {\n if (transaction.meta.err) {\n throw new Error(`Transaction failed: ${JSON.stringify(transaction.meta.err, (_, v: unknown) => typeof v === 'bigint' ? v.toString() : v)}`)\n }\n console.log('✅ Transaction confirmed on final check - returning success')\n return signature as Signature\n }\n } catch (finalError) {\n console.log('🔍 Final check failed:', (finalError as Error).message)\n }\n \n // Transaction was sent but confirmation timed out\n // This often happens on devnet - the transaction may still be successful\n console.log('⚠️ Transaction confirmation timed out, but transaction was sent')\n console.log(` Check status at: https://explorer.solana.com/tx/${signature}?cluster=${this.config.cluster || 'devnet'}`)\n \n // Return the signature anyway since the transaction was sent\n // The caller can check the transaction status manually if needed\n return signature as Signature\n }\n\n return signature as Signature\n }\n\n private async simulateInstruction(\n instruction: InstructionLike,\n signers: TransactionSigner[]\n ): Promise<unknown> {\n const latestBlockhashResult = await this.rpcClient.getLatestBlockhash()\n const latestBlockhash = {\n blockhash: latestBlockhashResult.blockhash as Blockhash,\n lastValidBlockHeight: latestBlockhashResult.lastValidBlockHeight\n }\n \n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayerSigner(signers[0], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions([instruction as IInstruction], tx)\n )\n\n const signedTransaction = await signTransactionMessageWithSigners(transactionMessage)\n const wireTransaction = getBase64EncodedWireTransaction(signedTransaction as Readonly<{ messageBytes: TransactionMessageBytes; signatures: SignaturesMap; }>)\n\n return this.rpcClient.simulateTransaction(wireTransaction, {\n commitment: this.config.commitment,\n replaceRecentBlockhash: true\n })\n }\n\n private async simulateBatch(\n instructions: IInstruction[],\n signers: TransactionSigner[]\n ): Promise<unknown> {\n const latestBlockhashResult = await this.rpcClient.getLatestBlockhash()\n const latestBlockhash = {\n blockhash: latestBlockhashResult.blockhash as Blockhash,\n lastValidBlockHeight: latestBlockhashResult.lastValidBlockHeight\n }\n \n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayerSigner(signers[0], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions(instructions, tx)\n )\n\n const signedTransaction = await signTransactionMessageWithSigners(transactionMessage)\n const wireTransaction = getBase64EncodedWireTransaction(signedTransaction as Readonly<{ messageBytes: TransactionMessageBytes; signatures: SignaturesMap; }>)\n\n return this.rpcClient.simulateTransaction(wireTransaction, {\n commitment: this.config.commitment,\n replaceRecentBlockhash: true\n })\n }\n\n private estimateTransactionSize(instructions: IInstruction[]): number {\n let totalSize = 64 // Base transaction overhead\n \n for (const instruction of instructions) {\n totalSize += 32 // Program ID\n totalSize += (instruction.accounts?.length ?? 0) * 32 // Account metas\n totalSize += (instruction.data as Uint8Array).length // Instruction data\n }\n \n return totalSize\n }\n\n private extractRawData(data: unknown): Uint8Array {\n if (Buffer.isBuffer(data) || data instanceof Uint8Array) {\n return new Uint8Array(data)\n }\n if (typeof data === 'object' && data !== null && 'data' in data) {\n return Buffer.from((data as { data: string }).data, 'base64')\n }\n if (typeof data === 'string') {\n return Buffer.from(data, 'base64')\n }\n throw new Error('Invalid account data format')\n }\n\n // =====================================================\n // H2A PROTOCOL INSTRUCTION METHODS\n // =====================================================\n\n /**\n * Create a communication session instruction\n */\n async createCommunicationSession(_params: {\n sessionId: bigint\n initiator: Address\n initiatorType: ParticipantType\n responder: Address\n responderType: ParticipantType\n sessionType: string\n metadata: string\n expiresAt: bigint\n }): Promise<InstructionLike> {\n // This would typically use generated instruction builders\n // For now, return a placeholder that the H2A module can use\n return {\n programAddress: this.config.programId!,\n accounts: [],\n data: new Uint8Array(0) // Placeholder - would contain serialized instruction data\n }\n }\n\n /**\n * Send a communication message instruction\n */\n async sendCommunicationMessage(_sessionAddress: Address, _params: {\n messageId: bigint\n senderType: unknown // ParticipantType\n content: string\n messageType: string\n attachments: string[]\n }): Promise<InstructionLike> {\n // This would typically use generated instruction builders\n // For now, return a placeholder that the H2A module can use\n return {\n programAddress: this.config.programId!,\n accounts: [],\n data: new Uint8Array(0) // Placeholder - would contain serialized instruction data\n }\n }\n\n /**\n * Update participant status instruction\n */\n async updateParticipantStatus(_params: {\n participant: Address\n participantType: unknown // ParticipantType\n servicesOffered: string[]\n availability: boolean\n reputationScore: number\n }): Promise<InstructionLike> {\n // This would typically use generated instruction builders\n // For now, return a placeholder that the H2A module can use\n return {\n programAddress: this.config.programId!,\n accounts: [],\n data: new Uint8Array(0) // Placeholder - would contain serialized instruction data\n }\n }\n}\n\n","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner, Instruction } from '@solana/kit'\n// Use string type for signature since @solana/rpc-types doesn't export Signature in v2\ntype Signature = string\n// Type alias for backward compatibility with @solana/kit v2\ntype IInstruction = Instruction\nimport type { GhostSpeakConfig } from '../types/index.js'\nimport { InstructionBuilder } from './InstructionBuilder.js'\nimport type { TransactionResult } from '../utils/transaction-urls.js'\n\n/**\n * Base class for all instruction modules using the unified InstructionBuilder.\n * This replaces the old BaseInstructions class with a much simpler pattern.\n */\nexport abstract class BaseModule {\n protected builder: InstructionBuilder\n protected config: GhostSpeakConfig\n private _debugMode = false\n\n constructor(config: GhostSpeakConfig) {\n this.config = config\n this.builder = new InstructionBuilder(config)\n }\n\n /**\n * Enable debug mode for next operation\n */\n debug(): this {\n this._debugMode = true\n this.builder.enableDebug()\n return this\n }\n\n /**\n * Execute a single instruction\n */\n protected async execute(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction,\n signers: TransactionSigner[]\n ): Promise<string> {\n return this.builder.execute(\n instructionName,\n instructionGetter,\n signers\n ) as Promise<string>\n }\n\n /**\n * Execute a single instruction with detailed result\n */\n protected async executeWithDetails(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction,\n signers: TransactionSigner[]\n ): Promise<TransactionResult> {\n return this.builder.execute(\n instructionName,\n instructionGetter,\n signers,\n { returnDetails: true }\n )\n }\n\n /**\n * Execute multiple instructions in a batch\n */\n protected async executeBatch(\n batchName: string,\n instructionGetters: (() => Promise<IInstruction> | IInstruction)[],\n signers: TransactionSigner[]\n ): Promise<Signature> {\n return this.builder.executeBatch(\n batchName,\n instructionGetters.map(getter => () => Promise.resolve(getter())),\n signers\n )\n }\n\n /**\n * Simulate an instruction\n */\n protected async simulate(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction,\n signers: TransactionSigner[]\n ): Promise<unknown> {\n return this.builder.execute(\n instructionName,\n () => Promise.resolve(instructionGetter()),\n signers,\n { simulate: true }\n )\n }\n\n /**\n * Simulate an instruction (public accessor)\n */\n public async simulateInstruction(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction,\n signers: TransactionSigner[]\n ): Promise<unknown> {\n return this.simulate(instructionName, instructionGetter, signers)\n }\n\n /**\n * Estimate transaction cost\n */\n protected async estimateCost(\n instructionGetters: (() => Promise<IInstruction> | IInstruction)[]\n ): Promise<bigint> {\n return this.builder.estimateCost(instructionGetters)\n }\n\n /**\n * Get cost estimation for an instruction\n */\n async getCost(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction\n ): Promise<bigint> {\n return this.builder.estimateCost([instructionGetter])\n }\n\n /**\n * Get human-readable explanation\n */\n async explain(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction\n ): Promise<string> {\n return this.builder.explain(instructionName, [instructionGetter])\n }\n\n /**\n * Debug analyze without executing\n */\n async analyze(\n instructionName: string,\n instructionGetter: () => Promise<IInstruction> | IInstruction\n ): Promise<unknown> {\n return this.builder.debug(instructionName, [instructionGetter])\n }\n\n /**\n * Get decoded account\n */\n protected async getAccount<T>(\n address: Address,\n decoderImportName: string\n ): Promise<T | null> {\n return this.builder.getAccount<T>(address, decoderImportName)\n }\n\n /**\n * Get multiple decoded accounts\n */\n protected async getAccounts<T>(\n addresses: Address[],\n decoderImportName: string\n ): Promise<(T | null)[]> {\n return this.builder.getAccounts<T>(addresses, decoderImportName)\n }\n\n /**\n * Get program accounts\n */\n protected async getProgramAccounts<T>(\n decoderImportName: string,\n filters?: ({ dataSize: bigint } | { memcmp: { offset: bigint; bytes: string; encoding?: 'base58' | 'base64' } })[]\n ): Promise<{ address: Address; data: T }[]> {\n return this.builder.getProgramAccounts<T>(decoderImportName, filters)\n }\n\n /**\n * Get program ID\n */\n protected get programId(): Address {\n return this.config.programId!\n }\n\n /**\n * Get program ID (public accessor)\n */\n public getProgramId(): Address {\n return this.config.programId!\n }\n\n /**\n * Get commitment level\n */\n protected get commitment() {\n return this.config.commitment ?? 'confirmed'\n }\n\n /**\n * Get commitment level (public accessor)\n */\n public getCommitment() {\n return this.config.commitment ?? 'confirmed'\n }\n}","/**\n * Utility functions for IPFS operations in GhostSpeak\n */\n\nimport './text-encoder-polyfill.js'\nimport type {\n IPFSConfig,\n IPFSContentMetadata,\n ContentStorageResult,\n IPFSUploadOptions,\n IPFSOperationResult\n} from '../types/ipfs-types.js'\nimport { IPFSClient } from './ipfs-client.js'\n\n/**\n * Default IPFS configuration for GhostSpeak\n */\nexport const DEFAULT_IPFS_CONFIG: IPFSConfig = {\n provider: {\n name: 'pinata',\n endpoint: 'https://api.pinata.cloud'\n },\n gateways: [\n 'https://gateway.pinata.cloud',\n 'https://ipfs.io',\n 'https://cloudflare-ipfs.com',\n 'https://gateway.ipfs.io'\n ],\n autoPinning: true,\n sizeThreshold: 800, // 800 bytes threshold to stay under Solana transaction limits\n maxRetries: 3,\n retryDelay: 1000,\n enableCache: true,\n cacheTTL: 300000 // 5 minutes\n}\n\n/**\n * IPFS utility class with convenience methods\n */\nexport class IPFSUtils {\n public client: IPFSClient\n\n constructor(config: IPFSConfig) {\n this.client = new IPFSClient(config)\n }\n\n /**\n * Store agent metadata with automatic IPFS/inline decision\n */\n async storeAgentMetadata(\n metadata: {\n name: string\n description: string\n capabilities: string[]\n serviceEndpoint: string\n agentId?: string\n [key: string]: unknown\n },\n options?: IPFSUploadOptions\n ): Promise<ContentStorageResult> {\n const metadataJson = JSON.stringify({\n ...metadata,\n createdAt: new Date().toISOString(),\n version: '1.0.0'\n })\n\n return this.client.storeContent(metadataJson, 'agent-metadata', {\n filename: `agent-${metadata.agentId ?? 'metadata'}.json`,\n metadata: {\n type: 'agent-metadata',\n agentId: metadata.agentId,\n name: metadata.name\n },\n contentType: 'application/json',\n ...options\n })\n }\n\n /**\n * Store channel message content with automatic IPFS/inline decision\n */\n async storeChannelMessage(\n message: {\n content: string\n messageType?: number\n attachments?: string[]\n channelId?: string\n sender?: string\n [key: string]: unknown\n },\n options?: IPFSUploadOptions\n ): Promise<ContentStorageResult> {\n const messageJson = JSON.stringify({\n ...message,\n timestamp: new Date().toISOString(),\n version: '1.0.0'\n })\n\n return this.client.storeContent(messageJson, 'channel-message', {\n filename: `message-${Date.now()}.json`,\n metadata: {\n type: 'channel-message',\n channelId: message.channelId,\n messageType: message.messageType ?? 0\n },\n contentType: 'application/json',\n ...options\n })\n }\n\n /**\n * Store file attachments on IPFS\n */\n async storeFileAttachment(\n fileContent: Uint8Array | string,\n filename: string,\n contentType: string,\n options?: IPFSUploadOptions\n ): Promise<ContentStorageResult> {\n const content = typeof fileContent === 'string' ? fileContent : new TextDecoder().decode(fileContent)\n \n return this.client.storeContent(content, 'file-attachment', {\n filename,\n contentType,\n metadata: {\n type: 'file-attachment',\n originalFilename: filename,\n mimeType: contentType\n },\n ...options\n })\n }\n\n /**\n * Retrieve and parse agent metadata\n */\n async retrieveAgentMetadata(uri: string): Promise<{\n name: string\n description: string\n capabilities: string[]\n serviceEndpoint: string\n agentId?: string\n createdAt?: string\n [key: string]: unknown\n }> {\n const content = await this.client.retrieveContent(uri)\n const parsed: unknown = JSON.parse(content)\n \n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('Retrieved agent metadata is not a valid object')\n }\n \n return parsed as {\n name: string\n description: string\n capabilities: string[]\n serviceEndpoint: string\n agentId?: string\n createdAt?: string\n [key: string]: unknown\n }\n }\n\n /**\n * Retrieve and parse channel message content\n */\n async retrieveChannelMessage(uri: string): Promise<{\n content: string\n messageType?: number\n attachments?: string[]\n timestamp?: string\n [key: string]: unknown\n }> {\n const content = await this.client.retrieveContent(uri)\n const parsed: unknown = JSON.parse(content)\n \n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('Retrieved channel message is not a valid object')\n }\n \n return parsed as {\n content: string\n messageType?: number\n attachments?: string[]\n timestamp?: string\n [key: string]: unknown\n }\n }\n\n /**\n * Batch upload multiple content items\n */\n async batchUpload(\n items: {\n content: string\n type: IPFSContentMetadata['type']\n filename?: string\n options?: IPFSUploadOptions\n }[]\n ): Promise<IPFSOperationResult<ContentStorageResult>[]> {\n const results = await Promise.allSettled(\n items.map(item => \n this.client.storeContent(item.content, item.type, {\n filename: item.filename,\n ...item.options\n })\n )\n )\n\n return results.map(result => {\n if (result.status === 'fulfilled') {\n return {\n success: true,\n data: result.value\n }\n } else {\n return {\n success: false,\n error: 'UPLOAD_FAILED' as const,\n message: result.reason instanceof Error ? result.reason.message : String(result.reason)\n }\n }\n })\n }\n\n /**\n * Pin existing content by hash\n */\n async pinContent(hash: string): Promise<IPFSOperationResult<boolean>> {\n const result = await this.client.pin(hash)\n return {\n ...result,\n data: result.success\n }\n }\n\n /**\n * Check if a URI uses IPFS storage\n */\n isIPFSUri(uri: string): boolean {\n return uri.startsWith('ipfs://')\n }\n\n /**\n * Extract IPFS hash from URI\n */\n extractIPFSHash(uri: string): string | null {\n if (!this.isIPFSUri(uri)) {\n return null\n }\n return uri.replace('ipfs://', '')\n }\n\n /**\n * Convert IPFS hash to gateway URLs\n */\n getGatewayUrls(hash: string, gateways?: string[]): string[] {\n const defaultGateways = gateways ?? DEFAULT_IPFS_CONFIG.gateways ?? []\n return defaultGateways.map(gateway => `${gateway}/ipfs/${hash}`)\n }\n\n /**\n * Validate IPFS hash format\n */\n isValidIPFSHash(hash: string): boolean {\n // Basic validation for IPFS hash (CIDv0 or CIDv1)\n if (hash.length < 44) return false\n \n // CIDv0: starts with Qm and is 46 characters\n if (hash.startsWith('Qm') && hash.length === 46) {\n return /^Qm[A-Za-z0-9]{44}$/.test(hash)\n }\n \n // CIDv1: more complex validation\n if (hash.length > 46) {\n return /^[A-Za-z0-9]+$/.test(hash)\n }\n \n return false\n }\n\n /**\n * Calculate content size to determine if IPFS should be used\n */\n shouldUseIPFS(content: string, threshold?: number): boolean {\n const size = new TextEncoder().encode(content).length\n const sizeThreshold = threshold ?? DEFAULT_IPFS_CONFIG.sizeThreshold ?? 800\n return size > sizeThreshold\n }\n\n /**\n * Compress content before IPFS upload using modern compression APIs\n */\n async compressContent(content: string): Promise<{ compressed: string; algorithm: string }> {\n try {\n // Use browser CompressionStream if available (Node.js 18+ and modern browsers)\n if (typeof CompressionStream !== 'undefined') {\n const compressedStream = new CompressionStream('gzip')\n const writer = compressedStream.writable.getWriter()\n const reader = compressedStream.readable.getReader()\n \n // Encode string to Uint8Array\n const encoder = new TextEncoder()\n const input = encoder.encode(content)\n \n // Start compression\n const writePromise = writer.write(input).then(() => writer.close())\n const chunks: Uint8Array[] = []\n \n // Read compressed chunks\n const readCompressed = async (): Promise<void> => {\n const result: { done: boolean; value?: Uint8Array } = await reader.read()\n const { done, value } = result\n if (!done && value) {\n chunks.push(value as Uint8Array)\n await readCompressed()\n }\n }\n \n await Promise.all([writePromise, readCompressed()])\n \n // Combine chunks and encode as base64\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const compressedData = new Uint8Array(totalLength)\n let offset = 0\n \n for (const chunk of chunks) {\n compressedData.set(chunk, offset)\n offset += chunk.length\n }\n \n // Convert to base64 for storage\n const compressed = Buffer.from(compressedData).toString('base64')\n \n return {\n compressed,\n algorithm: 'gzip'\n }\n } else {\n // Fallback to no compression in environments without support\n console.warn('Compression not available in this environment, storing uncompressed')\n return {\n compressed: content,\n algorithm: 'none'\n }\n }\n } catch (error) {\n console.warn('Compression failed, falling back to uncompressed:', error)\n return {\n compressed: content,\n algorithm: 'none'\n }\n }\n }\n\n /**\n * Decompress content after IPFS retrieval using modern decompression APIs\n */\n async decompressContent(compressed: string, algorithm: string): Promise<string> {\n if (algorithm === 'none') {\n return compressed\n }\n \n try {\n if (algorithm === 'gzip') {\n // Use browser DecompressionStream if available (Node.js 18+ and modern browsers)\n if (typeof DecompressionStream !== 'undefined') {\n const decompressedStream = new DecompressionStream('gzip')\n const writer = decompressedStream.writable.getWriter()\n const reader = decompressedStream.readable.getReader()\n \n // Decode base64 to Uint8Array\n const compressedData = Buffer.from(compressed, 'base64')\n \n // Start decompression\n const writePromise = writer.write(compressedData).then(() => writer.close())\n const chunks: Uint8Array[] = []\n \n // Read decompressed chunks\n const readDecompressed = async (): Promise<void> => {\n const result: { done: boolean; value?: Uint8Array } = await reader.read()\n const { done, value } = result\n if (!done && value) {\n chunks.push(value as Uint8Array)\n await readDecompressed()\n }\n }\n \n await Promise.all([writePromise, readDecompressed()])\n \n // Combine chunks and decode to string\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const decompressedData = new Uint8Array(totalLength)\n let offset = 0\n \n for (const chunk of chunks) {\n decompressedData.set(chunk, offset)\n offset += chunk.length\n }\n \n // Convert to string\n const decoder = new TextDecoder()\n return decoder.decode(decompressedData)\n \n } else {\n console.warn('Decompression not available in this environment, returning compressed data')\n return compressed\n }\n } else {\n console.warn(`Unknown compression algorithm: ${algorithm}`)\n return compressed\n }\n } catch (error) {\n console.error('Decompression failed, returning compressed data:', error)\n return compressed\n }\n }\n\n /**\n * Get client stats\n */\n getStats(): {\n cacheStats: { size: number; keys: string[] }\n config: IPFSConfig\n } {\n return {\n cacheStats: this.client.getCacheStats(),\n config: DEFAULT_IPFS_CONFIG\n }\n }\n\n /**\n * Clear client cache\n */\n clearCache(): void {\n this.client.clearCache()\n }\n}\n\n/**\n * Create an IPFS utility instance with configuration\n */\nexport function createIPFSUtils(config?: Partial<IPFSConfig>): IPFSUtils {\n const finalConfig: IPFSConfig = {\n ...DEFAULT_IPFS_CONFIG,\n ...config,\n provider: {\n ...DEFAULT_IPFS_CONFIG.provider,\n ...config?.provider\n }\n }\n \n return new IPFSUtils(finalConfig)\n}\n\n/**\n * Helper function to determine optimal storage method\n */\nexport function determineStorageMethod(\n content: string,\n options?: {\n sizeThreshold?: number\n forceIPFS?: boolean\n forceInline?: boolean\n }\n): 'inline' | 'ipfs' {\n if (options?.forceInline) return 'inline'\n if (options?.forceIPFS) return 'ipfs'\n \n const size = new TextEncoder().encode(content).length\n const threshold = options?.sizeThreshold ?? DEFAULT_IPFS_CONFIG.sizeThreshold ?? 800\n \n return size > threshold ? 'ipfs' : 'inline'\n}\n\n/**\n * Create metadata URI with automatic storage decision\n */\nexport async function createMetadataUri(\n metadata: Record<string, unknown>,\n ipfsUtils?: IPFSUtils,\n options?: {\n type?: IPFSContentMetadata['type']\n filename?: string\n forceIPFS?: boolean\n }\n): Promise<string> {\n const metadataJson = JSON.stringify(metadata)\n const storageMethod = determineStorageMethod(metadataJson, { \n forceIPFS: options?.forceIPFS \n })\n \n if (storageMethod === 'inline' || !ipfsUtils) {\n // Store as data URI\n const encoded = Buffer.from(metadataJson).toString('base64')\n return `data:application/json;base64,${encoded}`\n } else {\n // Store on IPFS\n const result = await ipfsUtils.client.storeContent(\n metadataJson, \n options?.type ?? 'custom',\n {\n filename: options?.filename,\n contentType: 'application/json'\n }\n )\n return result.uri\n }\n}","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport type { GhostSpeakConfig } from '../../types/index.js'\nimport type { IPFSConfig } from '../../types/ipfs-types.js'\nimport { BaseModule } from '../BaseModule.js'\nimport { createIPFSUtils } from '../../utils/ipfs-utils.js'\nimport { SYSTEM_PROGRAM_ADDRESS } from '../../constants/system-addresses.js'\nimport {\n getRegisterAgentInstructionAsync,\n getUpdateAgentInstruction,\n getVerifyAgentInstructionAsync,\n getDeactivateAgentInstruction,\n getActivateAgentInstruction,\n getRegisterAgentCompressedInstructionAsync,\n type Agent\n} from '../../generated/index.js'\n\n/**\n * Simplified agent management using unified instruction pattern\n */\nexport class AgentModule extends BaseModule {\n private ipfsUtils: ReturnType<typeof createIPFSUtils> | null = null\n\n constructor(config: GhostSpeakConfig & { ipfsConfig?: IPFSConfig }) {\n super(config)\n if (config.ipfsConfig) {\n this.ipfsUtils = createIPFSUtils(config.ipfsConfig)\n }\n }\n\n /**\n * Register a new agent\n */\n async register(signer: TransactionSigner, params: {\n agentType: number\n name: string\n description: string\n metadataUri: string\n agentId: string\n skipSimulation?: boolean\n }): Promise<string> {\n const registerGetter = async () => {\n const agentAccount = await this.deriveAgentPda(params.agentId, signer.address)\n const ix = await getRegisterAgentInstructionAsync({\n agentAccount,\n signer,\n systemProgram: this.systemProgramId,\n agentType: params.agentType,\n name: params.name,\n description: params.description,\n metadataUri: params.metadataUri,\n agentId: params.agentId\n })\n \n return ix;\n }\n\n const heapGetter = () => {\n // Request 64KB Heap (Index 1)\n // ComputeBudgetProgram ID: ComputeBudget111111111111111111111111111111\n const heapData = new Uint8Array(5);\n heapData[0] = 1; // RequestHeapFrame\n new DataView(heapData.buffer).setUint32(1, 256 * 1024, true); // 256KB (Safe margin)\n\n return {\n programAddress: 'ComputeBudget111111111111111111111111111111' as Address,\n accounts: [],\n data: heapData\n }\n }\n \n // Enable debug mode to get detailed transaction information\n this.debug()\n \n // If skipSimulation is true, call builder directly to bypass simulation\n if (params.skipSimulation) {\n console.log('🚀 SKIPPING SIMULATION - Sending transaction directly')\n return this.builder.executeBatch(\n 'registerAgent',\n [heapGetter, registerGetter],\n [signer] as unknown as TransactionSigner[],\n { simulate: false, skipPreflight: true }\n ) as Promise<string>\n }\n \n return this.builder.executeBatch(\n 'registerAgent',\n [heapGetter, registerGetter],\n [signer] as unknown as TransactionSigner[]\n ) as Promise<string>\n }\n\n /**\n * Register a compressed agent (5000x cheaper)\n */\n async registerCompressed(signer: TransactionSigner, params: {\n agentType: number\n name: string\n description: string\n metadataUri: string\n agentId: string\n merkleTree: Address\n treeConfig?: Address\n }): Promise<string> {\n const instructionGetter = async () => {\n // Derive treeConfig if not provided\n const treeConfig = params.treeConfig || await this.deriveTreeConfigPda(signer.address)\n \n const result = await getRegisterAgentCompressedInstructionAsync({\n merkleTree: params.merkleTree,\n treeAuthority: treeConfig, // Map to correct instruction field (it's treeAuthority in IDL?)\n signer,\n systemProgram: this.systemProgramId,\n compressionProgram: this.compressionProgramId,\n agentType: params.agentType,\n name: params.name,\n description: params.description,\n metadataUri: params.metadataUri,\n agentId: params.agentId,\n logWrapper: 'noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV' as Address // Explicitly provide Noop program\n })\n return result\n }\n \n return this.execute(\n 'registerAgentCompressed',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Update agent metadata\n */\n async update(signer: TransactionSigner, params: {\n agentAddress: Address\n metadataUri: string\n agentType: number\n agentId: string\n name?: string | null\n description?: string | null\n }): Promise<string> {\n const instructionGetter = () => {\n const result = getUpdateAgentInstruction({\n agentAccount: params.agentAddress,\n signer,\n metadataUri: params.metadataUri,\n agentType: params.agentType,\n agentId: params.agentId,\n name: params.name ?? null,\n description: params.description ?? null\n })\n return result\n }\n \n return this.execute(\n 'updateAgent',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Verify an agent\n */\n async verify(signer: TransactionSigner, params: {\n agentAddress: Address\n agentPubkey: Address\n serviceEndpoint: string\n supportedCapabilities: Array<number | bigint>\n verifiedAt: number | bigint\n }): Promise<string> {\n const instructionGetter = async () => {\n const result = await getVerifyAgentInstructionAsync({\n agent: params.agentAddress,\n verifier: signer,\n agentPubkey: params.agentPubkey,\n serviceEndpoint: params.serviceEndpoint,\n supportedCapabilities: params.supportedCapabilities,\n verifiedAt: params.verifiedAt\n })\n return result\n }\n \n return this.execute(\n 'verifyAgent',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Deactivate an agent\n */\n async deactivate(signer: TransactionSigner, params: {\n agentAddress: Address\n agentId: string\n }): Promise<string> {\n const instructionGetter = () => {\n const result = getDeactivateAgentInstruction({\n agentAccount: params.agentAddress,\n signer,\n agentId: params.agentId\n })\n return result\n }\n \n return this.execute(\n 'deactivateAgent',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Activate an agent\n */\n async activate(signer: TransactionSigner, params: {\n agentAddress: Address\n agentId: string\n }): Promise<string> {\n const instructionGetter = () => {\n const result = getActivateAgentInstruction({\n agentAccount: params.agentAddress,\n signer,\n agentId: params.agentId\n })\n return result\n }\n \n return this.execute(\n 'activateAgent',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Get agent account\n */\n async getAgentAccount(address: Address): Promise<Agent | null> {\n return super.getAccount<Agent>(address, 'getAgentDecoder')\n }\n\n /**\n * Get all agents\n */\n async getAllAgents(): Promise<{ address: Address; data: Agent }[]> {\n return this.getProgramAccounts<Agent>('getAgentDecoder')\n }\n\n /**\n * Get agents by type\n */\n async getAgentsByType(agentType: number): Promise<{ address: Address; data: Agent }[]> {\n const typeBytes = Buffer.alloc(1)\n typeBytes.writeUInt8(agentType, 0)\n \n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: typeBytes.toString('base64'),\n encoding: 'base64' as const\n }\n }]\n \n return this.getProgramAccounts<Agent>('getAgentDecoder', filters)\n }\n\n /**\n * Get user's agents\n */\n async getUserAgents(authority: Address): Promise<{ address: Address; data: Agent }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(9), // Skip discriminator + type\n bytes: authority,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<Agent>('getAgentDecoder', filters)\n }\n\n // Helper methods\n\n private async deriveAgentPda(agentId: string, owner: Address): Promise<Address> {\n // Use the standard PDA utility function that matches Rust implementation\n const { deriveAgentPdaOriginal } = await import('../../utils/pda.js')\n return deriveAgentPdaOriginal(this.programId, owner, agentId)\n }\n\n private async deriveUserRegistryPda(owner: Address): Promise<Address> {\n // Use the standard PDA utility function that matches Rust implementation\n const { deriveUserRegistryPda } = await import('../../utils/pda.js')\n return deriveUserRegistryPda(this.programId, owner)\n }\n\n private async deriveTreeConfigPda(owner: Address): Promise<Address> {\n const { getProgramDerivedAddress, getAddressEncoder } = await import('@solana/addresses')\n const addressEncoder = getAddressEncoder()\n const ownerBytes = addressEncoder.encode(owner)\n \n // seeds = [b\"agent_tree_config\", signer.key().as_ref()]\n const [pda] = await getProgramDerivedAddress({\n programAddress: this.programId,\n seeds: [\n new TextEncoder().encode('agent_tree_config'),\n ownerBytes\n ]\n })\n \n return pda\n }\n\n private get systemProgramId(): Address {\n return SYSTEM_PROGRAM_ADDRESS\n }\n\n private get compressionProgramId(): Address {\n return 'cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK' as Address\n }\n}","/**\n * GhostSpeak Protocol Constants\n * July 2025 Implementation\n */\n\nimport { address } from '@solana/addresses'\n\n/**\n * Program ID for GhostSpeak Marketplace on Solana\n * Deployed on devnet - December 2025\n */\n// ... (context if needed, but simple string replace is safer)\nexport const GHOSTSPEAK_PROGRAM_ID = address('GpvFxus2eecFKcqa2bhxXeRjpstPeCEJNX216TQCcNC9')\n\n/**\n * Network-specific configurations\n */\nexport const NETWORK_CONFIG = {\n devnet: {\n programId: 'GpvFxus2eecFKcqa2bhxXeRjpstPeCEJNX216TQCcNC9',\n rpcUrl: 'https://api.devnet.solana.com'\n },\n testnet: {\n programId: 'GpvFxus2eecFKcqa2bhxXeRjpstPeCEJNX216TQCcNC9',\n rpcUrl: 'https://api.testnet.solana.com'\n },\n mainnet: {\n programId: 'GpvFxus2eecFKcqa2bhxXeRjpstPeCEJNX216TQCcNC9',\n rpcUrl: 'https://api.mainnet-beta.solana.com'\n }\n} as const\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG = {\n network: 'devnet' as keyof typeof NETWORK_CONFIG,\n confirmations: 1,\n timeout: 30000,\n maxRetries: 3\n} as const","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { getProgramDerivedAddress, getAddressEncoder } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport { NATIVE_MINT_ADDRESS, TOKEN_2022_PROGRAM_ADDRESS, ASSOCIATED_TOKEN_PROGRAM_ADDRESS } from '../../constants/system-addresses.js'\nimport { GHOSTSPEAK_PROGRAM_ID } from '../../constants/ghostspeak.js'\nimport {\n getCreateEscrowInstructionAsync,\n getCreateEscrowWithSolInstructionAsync,\n getCompleteEscrowInstruction,\n getCancelEscrowInstruction,\n getDisputeEscrowInstruction,\n getProcessPartialRefundInstruction,\n type Escrow,\n type EscrowStatus\n} from '../../generated/index.js'\n\n// Regular Token program for SOL wrapping\nconst TOKEN_PROGRAM_ADDRESS = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as import('@solana/addresses').Address\nconst NATIVE_SOL_MINT = 'So11111111111111111111111111111111111111112' as import('@solana/addresses').Address\n\n/**\n * Derive escrow PDA from taskId using raw bytes (no length prefix)\n * Seeds: [b\"escrow\", taskId.as_bytes()]\n */\nasync function deriveEscrowPdaFromTaskId(programId: Address, taskId: string): Promise<Address> {\n const encoder = new TextEncoder()\n const [pda] = await getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n new Uint8Array([101, 115, 99, 114, 111, 119]), // \"escrow\"\n encoder.encode(taskId)\n ]\n })\n return pda\n}\n\n/**\n * Derive reentrancy guard PDA\n * Seeds: [b\"reentrancy_guard\"]\n */\nasync function deriveReentrancyGuardPda(programId: Address): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n new Uint8Array([114, 101, 101, 110, 116, 114, 97, 110, 99, 121, 95, 103, 117, 97, 114, 100]) // \"reentrancy_guard\"\n ]\n })\n return pda\n}\n\n/**\n * Derive ATA for Token2022\n */\nasync function deriveToken2022ATA(wallet: Address, mint: Address): Promise<Address> {\n const [ata] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n getAddressEncoder().encode(wallet),\n getAddressEncoder().encode(TOKEN_2022_PROGRAM_ADDRESS),\n getAddressEncoder().encode(mint)\n ]\n })\n return ata\n}\n\n/**\n * Derive ATA for regular Token program (for native SOL)\n */\nasync function deriveTokenATA(wallet: Address, mint: Address): Promise<Address> {\n const [ata] = await getProgramDerivedAddress({\n programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n seeds: [\n getAddressEncoder().encode(wallet),\n getAddressEncoder().encode(TOKEN_PROGRAM_ADDRESS),\n getAddressEncoder().encode(mint)\n ]\n })\n return ata\n}\n\n/**\n * Escrow management module with simplified API\n * \n * Supports Token2022 tokens including:\n * - Token2022 Native wSOL (9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP)\n * - USDC on Token2022\n * - Any other Token2022 SPL token\n */\nexport class EscrowModule extends BaseModule {\n /**\n * Create a new escrow\n * @param params.paymentToken - The Token2022 mint to use (defaults to Token2022 native wSOL)\n */\n async create(params: {\n signer: TransactionSigner\n amount: bigint\n buyer: Address\n seller: Address\n description: string\n paymentToken?: Address\n expiresInDays?: number\n milestones?: { amount: bigint; description: string }[]\n }): Promise<string> {\n const taskId = params.description\n const paymentToken = params.paymentToken ?? this.defaultPaymentToken\n const expiresAt = BigInt(Math.floor(Date.now() / 1000) + ((params.expiresInDays ?? 30) * 24 * 60 * 60))\n \n // Derive PDAs correctly (raw bytes, no length prefix)\n const escrowAddress = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n const clientTokenAccount = await deriveToken2022ATA(params.signer.address, paymentToken)\n const escrowTokenAccount = await deriveToken2022ATA(escrowAddress, paymentToken)\n \n return this.execute(\n 'createEscrow',\n () => getCreateEscrowInstructionAsync({\n escrow: escrowAddress,\n // reentrancyGuard auto-derived by generated instruction\n client: params.signer,\n agent: params.seller,\n paymentToken,\n clientTokenAccount,\n escrowTokenAccount,\n taskId,\n amount: params.amount,\n expiresAt,\n transferHook: null,\n isConfidential: false\n }),\n [params.signer]\n )\n }\n\n /**\n * Create an escrow with native SOL (auto-wraps to wSOL)\n * This is the easiest way to create an escrow - just send SOL!\n */\n async createWithSol(params: {\n signer: TransactionSigner\n amount: bigint\n seller: Address\n description: string\n expiresInDays?: number\n }): Promise<string> {\n const taskId = params.description\n const expiresAt = BigInt(Math.floor(Date.now() / 1000) + ((params.expiresInDays ?? 30) * 24 * 60 * 60))\n \n // Derive PDAs for native SOL (regular Token program)\n const escrowAddress = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n const clientWsolAccount = await deriveTokenATA(params.signer.address, NATIVE_SOL_MINT)\n const escrowWsolAccount = await deriveTokenATA(escrowAddress, NATIVE_SOL_MINT)\n \n return this.execute(\n 'createEscrowWithSol',\n () => getCreateEscrowWithSolInstructionAsync({\n escrow: escrowAddress,\n client: params.signer,\n agent: params.seller,\n clientWsolAccount,\n escrowWsolAccount,\n taskId,\n amount: params.amount,\n expiresAt,\n transferHook: null,\n isConfidential: false\n }),\n [params.signer]\n )\n }\n\n /**\n * Complete an escrow - releases funds to the agent\n * @param taskId - The original task description used to derive the escrow PDA\n */\n async complete(signer: TransactionSigner, taskId: string, paymentToken?: Address): Promise<string> {\n const mint = paymentToken ?? this.defaultPaymentToken\n const escrowAddress = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n const reentrancyGuard = await deriveReentrancyGuardPda(GHOSTSPEAK_PROGRAM_ID)\n const escrowTokenAccount = await deriveToken2022ATA(escrowAddress, mint)\n const agentTokenAccount = await deriveToken2022ATA(signer.address, mint)\n \n return this.execute(\n 'completeEscrow',\n () => getCompleteEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard,\n agent: signer.address,\n escrowTokenAccount,\n agentTokenAccount,\n authority: signer,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,\n resolutionNotes: 'Work completed successfully'\n }),\n [signer]\n )\n }\n\n /**\n * Cancel an escrow - refunds the client\n */\n async cancel(signer: TransactionSigner, taskId: string, params: { \n buyer: Address\n paymentToken?: Address\n reason?: string\n }): Promise<string> {\n const mint = params.paymentToken ?? this.defaultPaymentToken\n const escrowAddress = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n const reentrancyGuard = await deriveReentrancyGuardPda(GHOSTSPEAK_PROGRAM_ID)\n const escrowTokenAccount = await deriveToken2022ATA(escrowAddress, mint)\n const clientRefundAccount = await deriveToken2022ATA(params.buyer, mint)\n \n return this.execute(\n 'cancelEscrow',\n () => getCancelEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard,\n authority: signer,\n clientRefundAccount,\n paymentToken: mint,\n cancellationReason: params.reason ?? 'User cancelled',\n escrowTokenAccount,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS\n }),\n [signer]\n )\n }\n\n /**\n * Dispute an escrow\n */\n async dispute(signer: TransactionSigner, taskId: string, reason: string): Promise<string> {\n const escrowAddress = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n const reentrancyGuard = await deriveReentrancyGuardPda(GHOSTSPEAK_PROGRAM_ID)\n \n return this.execute(\n 'disputeEscrow',\n () => getDisputeEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard,\n authority: signer,\n disputeReason: reason\n }),\n [signer]\n )\n }\n\n /**\n * Process partial refund\n */\n async processPartialRefund(\n signer: TransactionSigner,\n taskId: string,\n refundAmount: bigint,\n totalAmount: bigint,\n clientAddress: Address,\n agentAddress: Address,\n paymentToken?: Address\n ): Promise<string> {\n const mint = paymentToken ?? this.defaultPaymentToken\n const escrowAddress = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n const reentrancyGuard = await deriveReentrancyGuardPda(GHOSTSPEAK_PROGRAM_ID)\n const escrowTokenAccount = await deriveToken2022ATA(escrowAddress, mint)\n const clientRefundAccount = await deriveToken2022ATA(clientAddress, mint)\n const agentPaymentAccount = await deriveToken2022ATA(agentAddress, mint)\n \n return this.execute(\n 'processPartialRefund',\n () => getProcessPartialRefundInstruction({\n escrow: escrowAddress,\n reentrancyGuard,\n escrowTokenAccount,\n clientRefundAccount,\n agentPaymentAccount,\n paymentToken: mint,\n authority: signer,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,\n clientRefundPercentage: Math.min(100, Math.max(0, Number((refundAmount * BigInt(100) / totalAmount).toString())))\n }),\n [signer]\n )\n }\n\n /**\n * Get escrow account\n */\n async getEscrowAccount(address: Address): Promise<Escrow | null> {\n return super.getAccount<Escrow>(address, 'getEscrowDecoder')\n }\n\n /**\n * Get escrow by taskId\n */\n async getEscrowByTaskId(taskId: string): Promise<Escrow | null> {\n const address = await deriveEscrowPdaFromTaskId(GHOSTSPEAK_PROGRAM_ID, taskId)\n return this.getEscrowAccount(address)\n }\n\n /**\n * Get all escrows\n */\n async getAllEscrows(): Promise<{ address: Address; data: Escrow }[]> {\n return this.getProgramAccounts<Escrow>('getEscrowDecoder')\n }\n\n /**\n * Get escrows by buyer\n */\n async getEscrowsByBuyer(buyer: Address): Promise<{ address: Address; data: Escrow }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: buyer as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<Escrow>('getEscrowDecoder', filters)\n }\n\n /**\n * Get escrows by seller\n */\n async getEscrowsBySeller(seller: Address): Promise<{ address: Address; data: Escrow }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(40), // Skip discriminator + buyer\n bytes: seller as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<Escrow>('getEscrowDecoder', filters)\n }\n\n /**\n * Get escrows by status\n */\n async getEscrowsByStatus(status: EscrowStatus): Promise<{ address: Address; data: Escrow }[]> {\n const escrows = await this.getAllEscrows()\n return escrows.filter(({ data }) => data.status === status)\n }\n\n // Helper methods\n\n /**\n * Default payment token - Token2022 native wSOL equivalent\n */\n private get defaultPaymentToken(): Address {\n return NATIVE_MINT_ADDRESS\n }\n}\n","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport { GHOSTSPEAK_PROGRAM_ID } from '../../constants/ghostspeak.js'\nimport {\n deriveChannelPda,\n deriveMessagePda\n} from '../../utils/pda.js'\nimport {\n getCreateEnhancedChannelInstructionAsync,\n getSendEnhancedMessageInstructionAsync,\n getJoinChannelInstruction,\n getLeaveChannelInstruction,\n getUpdateChannelSettingsInstruction,\n getAddMessageReactionInstruction,\n MessageType,\n type Channel,\n type Message,\n type ChannelType\n} from '../../generated/index.js'\n\n/**\n * Channel and messaging module with simplified API\n */\nexport class ChannelModule extends BaseModule {\n /**\n * Create a new channel\n */\n async create(params: {\n signer: TransactionSigner\n name: string\n description: string\n channelType: ChannelType\n isPrivate?: boolean\n maxMembers?: number\n }): Promise<string> {\n const channelAddress = await this.deriveChannelPda(params.name)\n \n return this.execute(\n 'createEnhancedChannel',\n () => getCreateEnhancedChannelInstructionAsync({\n channel: channelAddress,\n reentrancyGuard: this.systemProgramId,\n creator: params.signer,\n creatorAgent: params.signer.address,\n systemProgram: this.systemProgramId,\n channelId: params.name,\n participants: [params.signer.address],\n channelType: params.channelType,\n metadata: {\n name: params.name,\n description: params.description,\n avatarUrl: null,\n tags: [],\n settings: {\n allowFileSharing: true,\n allowExternalInvites: !params.isPrivate,\n messageRetentionDays: 30,\n maxMessageSize: 4096,\n requireEncryption: params.isPrivate ?? false,\n autoArchiveAfterDays: 365\n }\n }\n }),\n [params.signer]\n )\n }\n\n /**\n * Send a message to a channel\n */\n async sendMessage(params: {\n signer: TransactionSigner\n channelAddress: Address\n content: string\n messageType?: MessageType\n attachmentUri?: string\n replyTo?: Address\n }): Promise<string> {\n const messageAddress = await this.deriveMessagePda(params.channelAddress, Date.now())\n \n return this.execute(\n 'sendEnhancedMessage',\n () => getSendEnhancedMessageInstructionAsync({\n channel: params.channelAddress,\n message: messageAddress,\n reentrancyGuard: this.systemProgramId,\n sender: params.signer,\n systemProgram: this.systemProgramId,\n messageId: `msg_${Date.now()}`,\n content: params.content,\n messageType: params.messageType ?? MessageType.Text,\n metadata: {\n replyTo: params.replyTo ?? null,\n threadId: null,\n attachments: params.attachmentUri ? [{ fileType: 'application/octet-stream', fileSize: 0, fileHash: '', storageUrl: params.attachmentUri }] : [],\n mentions: [],\n reactions: []\n },\n isEncrypted: false\n }),\n [params.signer]\n )\n }\n\n /**\n * Join a channel\n */\n async join(signer: TransactionSigner, channelAddress: Address): Promise<string> {\n return this.execute(\n 'joinChannel',\n () => getJoinChannelInstruction({\n channel: channelAddress,\n reentrancyGuard: this.systemProgramId,\n user: signer,\n userAgent: signer.address\n }),\n [signer]\n )\n }\n\n /**\n * Leave a channel\n */\n async leave(signer: TransactionSigner, channelAddress: Address): Promise<string> {\n return this.execute(\n 'leaveChannel',\n () => getLeaveChannelInstruction({\n channel: channelAddress,\n reentrancyGuard: this.systemProgramId,\n user: signer\n }),\n [signer]\n )\n }\n\n /**\n * Update channel settings\n */\n async updateSettings(\n signer: TransactionSigner,\n channelAddress: Address,\n settings: {\n name?: string\n description?: string\n isPrivate?: boolean\n maxMembers?: number\n }\n ): Promise<string> {\n return this.execute(\n 'updateChannelSettings',\n () => getUpdateChannelSettingsInstruction({\n channel: channelAddress,\n reentrancyGuard: this.systemProgramId,\n authority: signer,\n newMetadata: {\n name: settings.name ?? null,\n description: settings.description ?? null,\n avatarUrl: null,\n tags: [],\n settings: {\n allowFileSharing: true,\n allowExternalInvites: !settings.isPrivate,\n messageRetentionDays: 30,\n maxMessageSize: settings.maxMembers ? Number(settings.maxMembers) : 4096,\n requireEncryption: settings.isPrivate ?? false,\n autoArchiveAfterDays: 365\n }\n }\n }),\n [signer]\n )\n }\n\n /**\n * Add reaction to a message\n */\n async addReaction(\n signer: TransactionSigner,\n messageAddress: Address,\n emoji: string\n ): Promise<string> {\n const channelAddress = await this.deriveChannelFromMessage(messageAddress)\n \n return this.execute(\n 'addMessageReaction',\n () => getAddMessageReactionInstruction({\n channel: channelAddress,\n message: messageAddress,\n reentrancyGuard: this.systemProgramId,\n user: signer,\n reaction: emoji\n }),\n [signer]\n )\n }\n\n /**\n * Get channel account\n */\n async getChannelAccount(address: Address): Promise<Channel | null> {\n return super.getAccount<Channel>(address, 'getChannelDecoder')\n }\n\n /**\n * Get message account\n */\n async getMessageAccount(address: Address): Promise<Message | null> {\n return super.getAccount<Message>(address, 'getMessageDecoder')\n }\n\n /**\n * Get all channels\n */\n async getAllChannels(): Promise<{ address: Address; data: Channel }[]> {\n return this.getProgramAccounts<Channel>('getChannelDecoder')\n }\n\n /**\n * Get public channels\n */\n async getPublicChannels(): Promise<{ address: Address; data: Channel }[]> {\n const channels = await this.getAllChannels()\n return channels.filter(({ data }) => !data.isPrivate)\n }\n\n /**\n * Get channels by creator\n */\n async getChannelsByCreator(creator: Address): Promise<{ address: Address; data: Channel }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: creator as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<Channel>('getChannelDecoder', filters)\n }\n\n /**\n * Get messages in channel\n */\n async getChannelMessages(channelAddress: Address): Promise<{ address: Address; data: Message }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: channelAddress as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<Message>('getMessageDecoder', filters)\n }\n\n // Helper methods\n\n private async deriveChannelPda(name: string): Promise<Address> {\n return await deriveChannelPda(GHOSTSPEAK_PROGRAM_ID, name)\n }\n\n private async deriveMessagePda(channel: Address, nonce: number): Promise<Address> {\n return await deriveMessagePda(GHOSTSPEAK_PROGRAM_ID, channel, nonce)\n }\n\n private async deriveChannelFromMessage(messageAddress: Address): Promise<Address> {\n // This would require reverse lookup or storing channel reference in message\n // For now, we'll return a placeholder that matches the expected pattern\n // In a real implementation, this would query the message account and get the channel field\n return messageAddress // Placeholder - would need actual implementation\n }\n\n private get systemProgramId(): Address {\n return '11111111111111111111111111111111' as Address\n }\n}","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport { NATIVE_MINT_ADDRESS } from '../../constants/system-addresses.js'\nimport { GHOSTSPEAK_PROGRAM_ID } from '../../constants/ghostspeak.js'\nimport {\n deriveJobPostingPda,\n deriveAuctionPda\n} from '../../utils/pda.js'\nimport {\n getCreateServiceListingInstructionAsync,\n getPurchaseServiceInstruction,\n getCreateJobPostingInstructionAsync,\n getApplyToJobInstructionAsync,\n getAcceptJobApplicationInstructionAsync,\n getCreateServiceAuctionInstructionAsync,\n getPlaceAuctionBidInstruction,\n getFinalizeAuctionInstruction,\n getUpdateAgentServiceInstruction,\n type ServiceListing,\n type JobPosting,\n type JobApplication,\n type AuctionMarketplace,\n type ServicePurchase,\n AuctionType,\n type DutchAuctionConfig\n} from '../../generated/index.js'\n\n// =====================================================\n// TYPE DEFINITIONS\n// =====================================================\n\n\n/**\n * Marketplace management module\n * \n * Provides high-level access to marketplace operations including:\n * - Service listings and purchases\n * - Job postings and applications \n * - Service auctions and bidding\n * - Marketplace queries and filtering\n */\nexport class MarketplaceModule extends BaseModule {\n \n // =====================================================\n // DIRECT INSTRUCTION ACCESS\n // These methods provide direct access to generated instructions\n // with minimal wrapping for maximum flexibility\n // =====================================================\n\n /**\n * Get create service listing instruction\n */\n getCreateServiceListingInstruction(params: {\n agent: Address\n creator: TransactionSigner\n title: string\n description: string\n price: bigint\n tokenMint: Address\n serviceType: string\n paymentToken: Address\n estimatedDelivery: number\n tags: string[]\n listingId: string\n }) {\n return getCreateServiceListingInstructionAsync(params)\n }\n\n /**\n * Get purchase service instruction\n */\n getPurchaseServiceInstruction(params: {\n serviceListing: Address\n servicePurchase: Address\n buyer: TransactionSigner\n listingId: number\n quantity: number\n requirements: string[]\n customInstructions: string\n deadline: number\n }) {\n return getPurchaseServiceInstruction(params)\n }\n\n /**\n * Get create job posting instruction\n */\n getCreateJobPostingInstruction(params: {\n jobPosting?: Address\n employer: TransactionSigner\n title: string\n description: string\n requirements: string[]\n budget: number | bigint\n deadline: number | bigint\n skillsNeeded: string[]\n budgetMin: number | bigint\n budgetMax: number | bigint\n paymentToken: Address\n jobType: string\n experienceLevel: string\n }) {\n return getCreateJobPostingInstructionAsync(params)\n }\n\n /**\n * Get apply to job instruction\n */\n getApplyToJobInstruction(params: {\n jobApplication?: Address\n jobPosting: Address\n agent: Address\n agentOwner: TransactionSigner\n coverLetter: string\n proposedPrice: number | bigint\n estimatedDuration: number\n proposedRate: number | bigint\n estimatedDelivery: number | bigint\n portfolioItems: string[]\n }) {\n return getApplyToJobInstructionAsync(params)\n }\n\n /**\n * Get accept job application instruction\n */\n getAcceptJobApplicationInstruction(params: {\n jobContract?: Address\n jobPosting: Address\n jobApplication: Address\n employer: TransactionSigner\n }) {\n return getAcceptJobApplicationInstructionAsync(params)\n }\n\n /**\n * Get create service auction instruction\n */\n getCreateServiceAuctionInstruction(params: {\n auction?: Address\n agent: Address\n userRegistry: Address\n creator: TransactionSigner\n systemProgram?: Address\n clock?: Address\n auctionType: AuctionType\n startingPrice: bigint\n reservePrice: bigint\n isReserveHidden: boolean\n currentBid: bigint\n currentBidder: Address | null\n auctionEndTime: bigint\n minimumBidIncrement: bigint\n totalBids: number\n dutchConfig: DutchAuctionConfig | null\n }) {\n return getCreateServiceAuctionInstructionAsync(params)\n }\n\n /**\n * Get place auction bid instruction\n */\n getPlaceAuctionBidInstruction(params: {\n auction: Address\n userRegistry: Address\n bidder: TransactionSigner\n systemProgram?: Address\n clock?: Address\n bidAmount: bigint\n }) {\n return getPlaceAuctionBidInstruction(params)\n }\n\n /**\n * Get finalize auction instruction\n */\n getFinalizeAuctionInstruction(params: {\n auction: Address\n authority: TransactionSigner\n clock?: Address\n }) {\n return getFinalizeAuctionInstruction(params)\n }\n\n /**\n * Get update agent service instruction\n */\n getUpdateAgentServiceInstruction(params: {\n agent: Address\n owner: TransactionSigner\n systemProgram?: Address\n agentPubkey: Address\n serviceEndpoint: string\n isActive: boolean\n lastUpdated: bigint\n metadataUri: string\n capabilities: string[]\n }) {\n return getUpdateAgentServiceInstruction(params)\n }\n\n // =====================================================\n // CONVENIENCE METHODS\n // These methods provide simplified access to common operations\n // =====================================================\n\n /**\n * Execute create service listing with convenience wrapper\n */\n async createServiceListing(params: {\n signer: TransactionSigner\n agentAddress: Address\n title: string\n description: string\n pricePerHour: bigint\n category: string\n capabilities: string[]\n }): Promise<string> {\n const instruction = await this.getCreateServiceListingInstruction({\n agent: params.agentAddress,\n creator: params.signer,\n title: params.title,\n description: params.description,\n price: params.pricePerHour,\n tokenMint: this.nativeMint,\n serviceType: params.category,\n paymentToken: this.nativeMint,\n estimatedDelivery: Date.now() + (7 * 24 * 60 * 60 * 1000), // 7 days\n tags: params.capabilities,\n listingId: `${params.agentAddress}_${params.title}`\n })\n\n return this.execute('createServiceListing', () => instruction, [params.signer])\n }\n\n /**\n * Execute create job posting with convenience wrapper\n */\n async createJobPosting(params: {\n signer: TransactionSigner\n title: string\n description: string\n budget: bigint\n duration: number\n requiredSkills: string[]\n category: string\n }): Promise<string> {\n const jobPostingAddress = await this.deriveJobPostingPda(params.signer.address, params.title)\n \n const instruction = await this.getCreateJobPostingInstruction({\n jobPosting: jobPostingAddress,\n employer: params.signer,\n title: params.title,\n description: params.description,\n requirements: [`Skills: ${params.requiredSkills.join(', ')}`],\n budget: params.budget,\n deadline: Date.now() + (params.duration * 60 * 60 * 1000),\n skillsNeeded: params.requiredSkills,\n budgetMin: params.budget,\n budgetMax: params.budget,\n paymentToken: this.nativeMint,\n jobType: params.category,\n experienceLevel: 'intermediate'\n })\n\n return this.execute('createJobPosting', () => instruction, [params.signer])\n }\n\n /**\n * Execute create service auction with convenience wrapper\n */\n async createServiceAuction(params: {\n signer: TransactionSigner\n serviceListingAddress: Address\n startingPrice: bigint\n reservePrice: bigint\n duration: number\n auctionType: 'english' | 'dutch'\n }): Promise<string> {\n const auctionAddress = await this.deriveAuctionPda(params.serviceListingAddress)\n \n const instruction = await this.getCreateServiceAuctionInstruction({\n auction: auctionAddress,\n agent: params.serviceListingAddress, // Placeholder mapping\n userRegistry: auctionAddress, // Placeholder mapping \n creator: params.signer,\n auctionType: params.auctionType === 'english' ? AuctionType.English : AuctionType.Dutch,\n startingPrice: params.startingPrice,\n reservePrice: params.reservePrice,\n isReserveHidden: false,\n currentBid: BigInt(0),\n currentBidder: null,\n auctionEndTime: BigInt(Date.now() + params.duration * 60 * 60 * 1000),\n minimumBidIncrement: BigInt(1000),\n totalBids: 0,\n dutchConfig: null\n })\n\n return this.execute('createServiceAuction', () => instruction, [params.signer])\n }\n\n // =====================================================\n // QUERY OPERATIONS\n // =====================================================\n\n /**\n * Get service listing account\n */\n async getServiceListing(address: Address): Promise<ServiceListing | null> {\n return super.getAccount<ServiceListing>(address, 'getServiceListingDecoder')\n }\n\n /**\n * Get job posting account\n */\n async getJobPosting(address: Address): Promise<JobPosting | null> {\n return super.getAccount<JobPosting>(address, 'getJobPostingDecoder')\n }\n\n /**\n * Get job application account\n */\n async getJobApplication(address: Address): Promise<JobApplication | null> {\n return super.getAccount<JobApplication>(address, 'getJobApplicationDecoder')\n }\n\n /**\n * Get auction account\n */\n async getAuction(address: Address): Promise<AuctionMarketplace | null> {\n return super.getAccount<AuctionMarketplace>(address, 'getAuctionMarketplaceDecoder')\n }\n\n /**\n * Get service purchase account\n */\n async getServicePurchase(address: Address): Promise<ServicePurchase | null> {\n return super.getAccount<ServicePurchase>(address, 'getServicePurchaseDecoder')\n }\n\n /**\n * Get all service listings\n */\n async getAllServiceListings(): Promise<{ address: Address; data: ServiceListing }[]> {\n return this.getProgramAccounts<ServiceListing>('getServiceListingDecoder')\n }\n\n /**\n * Get service listings by provider\n */\n async getServiceListingsByProvider(provider: Address): Promise<{ address: Address; data: ServiceListing }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: provider as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<ServiceListing>('getServiceListingDecoder', filters)\n }\n\n /**\n * Get all job postings\n */\n async getAllJobPostings(): Promise<{ address: Address; data: JobPosting }[]> {\n return this.getProgramAccounts<JobPosting>('getJobPostingDecoder')\n }\n\n /**\n * Get job postings by client\n */\n async getJobPostingsByClient(client: Address): Promise<{ address: Address; data: JobPosting }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: client as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<JobPosting>('getJobPostingDecoder', filters)\n }\n\n /**\n * Get applications for a job posting\n */\n async getJobApplications(jobPostingAddress: Address): Promise<{ address: Address; data: JobApplication }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: jobPostingAddress as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<JobApplication>('getJobApplicationDecoder', filters)\n }\n\n /**\n * Get all auctions\n */\n async getAllAuctions(): Promise<{ address: Address; data: AuctionMarketplace }[]> {\n return this.getProgramAccounts<AuctionMarketplace>('getAuctionMarketplaceDecoder')\n }\n\n /**\n * Get service listing by ID (alias for getServiceListing)\n */\n async getServiceById(address: Address): Promise<ServiceListing | null> {\n return this.getServiceListing(address)\n }\n\n /**\n * Execute purchase service with convenience wrapper\n */\n async purchase(signer: TransactionSigner, params: {\n listingId: string\n amount: bigint\n }): Promise<string> {\n // Parse listing address from listingId\n // In a real implementation, this would be a proper address derivation\n const serviceListing = params.listingId.split('_')[0] as Address\n const servicePurchase = params.listingId.split('_')[0] as Address // Placeholder\n\n const instruction = this.getPurchaseServiceInstruction({\n serviceListing,\n servicePurchase,\n buyer: signer,\n listingId: 0, // Placeholder - would be parsed from params\n quantity: Number(params.amount),\n requirements: [],\n customInstructions: '',\n deadline: Date.now() + (7 * 24 * 60 * 60 * 1000)\n })\n\n return this.execute('purchaseService', () => instruction, [signer])\n }\n\n // =====================================================\n // HELPER METHODS\n // =====================================================\n\n private async deriveJobPostingPda(client: Address, title: string): Promise<Address> {\n return await deriveJobPostingPda(GHOSTSPEAK_PROGRAM_ID, client, title)\n }\n\n private async deriveAuctionPda(serviceListing: Address): Promise<Address> {\n return await deriveAuctionPda(GHOSTSPEAK_PROGRAM_ID, serviceListing)\n }\n\n private get nativeMint(): Address {\n return NATIVE_MINT_ADDRESS\n }\n}","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport {\n getInitializeGovernanceProposalInstructionAsync,\n getCastVoteInstruction,\n getDelegateVoteInstruction,\n getExecuteProposalInstruction,\n getTallyVotesInstruction,\n type GovernanceProposal,\n VoteChoice\n} from '../../generated/index.js'\n\n// =====================================================\n// TYPE DEFINITIONS\n// =====================================================\n\nexport interface ProposalType {\n kind: 'ConfigChange' | 'Treasury' | 'Protocol' | 'Emergency'\n data?: Record<string, unknown>\n}\n\nexport interface ExecutionParams {\n instructions: string[]\n accounts: Address[]\n targetProgram: Address\n executeAfter?: bigint\n}\n\nexport interface DelegationScope {\n kind: 'All' | 'Proposal' | 'Category'\n value?: string | number\n}\n\nexport interface CreateMultisigParams {\n signers: Address[]\n threshold: number\n multisigId: bigint\n config: {\n requireSequentialSigning: boolean\n allowOwnerOffCurve: boolean\n }\n}\n\nexport interface CreateProposalParams {\n title: string\n description: string\n proposalType: ProposalType\n executionParams: ExecutionParams\n proposalId: bigint\n}\n\nexport interface VoteParams {\n proposalAddress: Address\n voteChoice: 'For' | 'Against' | 'Abstain'\n reasoning?: string\n}\n\n/**\n * Governance management module\n * \n * Provides high-level access to governance operations including:\n * - Proposal creation and management\n * - Voting and delegation\n * - Proposal execution\n * - Vote tallying and results\n */\nexport class GovernanceModule extends BaseModule {\n \n // =====================================================\n // DIRECT INSTRUCTION ACCESS\n // These methods provide direct access to generated instructions\n // with minimal wrapping for maximum flexibility\n // =====================================================\n\n /**\n * Get initialize governance proposal instruction\n */\n getInitializeGovernanceProposalInstruction(params: {\n proposal?: Address\n proposer: TransactionSigner\n title: string\n description: string\n proposalType: any // eslint-disable-line @typescript-eslint/no-explicit-any\n executionParams: any // eslint-disable-line @typescript-eslint/no-explicit-any\n proposalId: number | bigint\n }) {\n return getInitializeGovernanceProposalInstructionAsync(params)\n }\n\n /**\n * Get cast vote instruction\n */\n getCastVoteInstruction(params: {\n proposal: Address\n voter: TransactionSigner\n voterTokenAccount: Address\n delegateTokenAccount?: Address\n voteChoice: VoteChoice\n reasoning: string | null\n }) {\n return getCastVoteInstruction(params)\n }\n\n /**\n * Get delegate vote instruction\n */\n getDelegateVoteInstruction(params: {\n proposal?: Address\n delegator: TransactionSigner\n delegate: Address\n delegatorTokenAccount: Address\n proposalId: number | bigint\n scope: any // eslint-disable-line @typescript-eslint/no-explicit-any\n expiresAt: number | bigint | null\n }) {\n return getDelegateVoteInstruction(params)\n }\n\n /**\n * Get execute proposal instruction\n */\n getExecuteProposalInstruction(params: {\n proposal: Address\n executor: TransactionSigner\n targetProgram: Address\n }) {\n return getExecuteProposalInstruction(params)\n }\n\n /**\n * Get tally votes instruction\n */\n getTallyVotesInstruction(params: {\n proposal: Address\n authority: TransactionSigner\n }) {\n return getTallyVotesInstruction(params)\n }\n\n // =====================================================\n // CONVENIENCE METHODS\n // These methods provide simplified access to common operations\n // =====================================================\n\n /**\n * Create a new governance proposal\n */\n async createProposal(params: {\n signer: TransactionSigner\n title: string\n description: string\n proposalType: 'parameter_change' | 'upgrade' | 'treasury'\n votingDuration: number\n executionDelay?: number\n }): Promise<string> {\n const proposalAddress = this.deriveProposalPda(params.signer.address, params.title)\n \n const instruction = await this.getInitializeGovernanceProposalInstruction({\n proposal: proposalAddress,\n proposer: params.signer,\n title: params.title,\n description: params.description,\n proposalType: { kind: params.proposalType, data: {} },\n executionParams: {\n instructions: [],\n accounts: [],\n targetProgram: proposalAddress,\n executeAfter: BigInt(params.executionDelay ?? 0)\n },\n proposalId: BigInt(Date.now())\n })\n\n return this.execute('createProposal', () => instruction, [params.signer])\n }\n\n /**\n * Cast a vote on a proposal\n */\n async vote(params: {\n signer: TransactionSigner\n proposalAddress: Address\n choice: 'yes' | 'no' | 'abstain'\n reasoning?: string\n tokenAccount: Address\n }): Promise<string> {\n const voteChoice = this.mapVoteChoice(params.choice)\n \n const instruction = this.getCastVoteInstruction({\n proposal: params.proposalAddress,\n voter: params.signer,\n voterTokenAccount: params.tokenAccount,\n voteChoice,\n reasoning: params.reasoning ?? null\n })\n\n return this.execute('castVote', () => instruction, [params.signer])\n }\n\n /**\n * Delegate voting power to another address\n */\n async delegateVotingPower(params: {\n signer: TransactionSigner\n delegate: Address\n amount: bigint\n tokenAccount: Address\n }): Promise<string> {\n const instruction = this.getDelegateVoteInstruction({\n delegator: params.signer,\n delegate: params.delegate,\n delegatorTokenAccount: params.tokenAccount,\n proposalId: BigInt(0), // 0 for all proposals\n scope: { kind: 'All', value: undefined }, // Delegate for all proposals\n expiresAt: null\n })\n\n return this.execute('delegateVote', () => instruction, [params.signer])\n }\n\n /**\n * Execute a passed proposal\n */\n async executeProposal(params: {\n signer: TransactionSigner\n proposalAddress: Address\n proposalId: string\n }): Promise<string> {\n const instruction = this.getExecuteProposalInstruction({\n proposal: params.proposalAddress,\n executor: params.signer,\n targetProgram: this.getProgramId()\n })\n\n return this.execute('executeProposal', () => instruction, [params.signer])\n }\n\n /**\n * Tally votes for a proposal\n */\n async tallyVotes(params: {\n signer: TransactionSigner\n proposalAddress: Address\n }): Promise<string> {\n const instruction = this.getTallyVotesInstruction({\n proposal: params.proposalAddress,\n authority: params.signer\n })\n\n return this.execute('tallyVotes', () => instruction, [params.signer])\n }\n\n // =====================================================\n // QUERY OPERATIONS\n // =====================================================\n\n /**\n * Get governance proposal account\n */\n async getProposal(address: Address): Promise<GovernanceProposal | null> {\n return super.getAccount<GovernanceProposal>(address, 'getGovernanceProposalDecoder')\n }\n\n /**\n * Get all active proposals\n */\n async getActiveProposals(): Promise<{ address: Address; data: GovernanceProposal }[]> {\n // This would filter by status in a real implementation\n return this.getProgramAccounts<GovernanceProposal>('getGovernanceProposalDecoder')\n }\n\n /**\n * Get proposals by proposer\n */\n async getProposalsByProposer(proposer: Address): Promise<{ address: Address; data: GovernanceProposal }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: proposer as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<GovernanceProposal>('getGovernanceProposalDecoder', filters)\n }\n\n /**\n * Get proposals by status\n */\n async getProposalsByStatus(_status: 'draft' | 'voting' | 'succeeded' | 'defeated' | 'executed'): Promise<{ address: Address; data: GovernanceProposal }[]> {\n // This would need proper filtering based on proposal status field\n const allProposals = await this.getProgramAccounts<GovernanceProposal>('getGovernanceProposalDecoder')\n \n // Placeholder filtering - in real implementation would filter by actual status field\n return allProposals.filter(_proposal => {\n // Would check proposal.data.status === status\n // For now, return all proposals since filtering logic is not implemented\n return allProposals.length > 0\n })\n }\n\n // =====================================================\n // HELPER METHODS\n // =====================================================\n\n private deriveProposalPda(proposer: Address, title: string): Address {\n // Implementation would derive PDA using findProgramAddressSync\n return `proposal_${proposer}_${title}` as Address\n }\n\n private mapVoteChoice(choice: 'yes' | 'no' | 'abstain'): VoteChoice {\n switch (choice) {\n case 'yes':\n return VoteChoice.For\n case 'no':\n return VoteChoice.Against\n case 'abstain':\n return VoteChoice.Abstain\n default:\n throw new Error(`Invalid vote choice: ${choice}`)\n }\n }\n}","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner, ReadonlyUint8Array, Instruction } from '@solana/kit'\n// Type alias for backward compatibility with @solana/kit v2\ntype IInstruction = Instruction\nimport { generateKeyPairSigner } from '@solana/signers'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport {\n getCreateToken2022MintInstructionAsync,\n getInitializeConfidentialTransferMintInstructionAsync,\n getInitializeInterestBearingConfigInstructionAsync,\n getInitializeMintCloseAuthorityInstructionAsync,\n getInitializeDefaultAccountStateInstructionAsync,\n getApproveExtensionInstruction,\n type AccountState\n} from '../../generated/index.js'\n\n// =====================================================\n// TYPE DEFINITIONS\n// =====================================================\n\nexport interface Token2022MintData {\n mintAuthority: Address | null\n supply: bigint\n decimals: number\n isInitialized: boolean\n freezeAuthority: Address | null\n extensions?: Extension[]\n}\n\nexport interface Extension {\n extensionType: string\n data: Uint8Array\n}\n\nexport interface MintAccountResult {\n address: Address\n data: Token2022MintData\n}\n\nexport type InstructionFactory = () => Promise<IInstruction>\n\n/**\n * Token-2022 management module\n * \n * Provides high-level access to Token-2022 operations including:\n * - Mint creation with extensions\n * - Transfer fee configuration\n * - Confidential transfer setup\n * - Interest bearing configuration\n * - Default account state management\n */\nexport class Token2022Module extends BaseModule {\n \n // =====================================================\n // DIRECT INSTRUCTION ACCESS\n // These methods provide direct access to generated instructions\n // with minimal wrapping for maximum flexibility\n // =====================================================\n\n /**\n * Get create Token-2022 mint instruction\n */\n getCreateToken2022MintInstruction(params: {\n authority: TransactionSigner\n agent?: Address\n mint: TransactionSigner\n decimals: number\n freezeAuthority: Address | null\n enableTransferFee: boolean\n enableConfidentialTransfers: boolean\n enableInterestBearing: boolean\n // Optional config params\n transferFeeBasisPoints?: number | null\n maximumFee?: bigint | null\n transferFeeAuthority?: Address | null\n withdrawWithheldAuthority?: Address | null\n autoApproveNewAccounts?: boolean | null\n auditorElgamalPubkey?: ReadonlyUint8Array | null\n interestRate?: number | null\n rateAuthority?: Address | null\n closeAuthority?: Address | null\n defaultAccountState?: AccountState | null\n }) {\n return getCreateToken2022MintInstructionAsync({\n ...params,\n // Ensure defaults for optional fields if passed as undefined\n transferFeeBasisPoints: params.transferFeeBasisPoints ?? null,\n maximumFee: params.maximumFee ?? null,\n transferFeeAuthority: params.transferFeeAuthority ?? null,\n withdrawWithheldAuthority: params.withdrawWithheldAuthority ?? null,\n autoApproveNewAccounts: params.autoApproveNewAccounts ?? null,\n auditorElgamalPubkey: params.auditorElgamalPubkey ?? null,\n interestRate: params.interestRate ?? null,\n rateAuthority: params.rateAuthority ?? null,\n closeAuthority: params.closeAuthority ?? null,\n defaultAccountState: params.defaultAccountState ?? null\n })\n }\n\n\n /**\n * Get initialize confidential transfer mint instruction\n */\n getInitializeConfidentialTransferMintInstruction(params: {\n authority: TransactionSigner\n mint: Address\n autoApproveNewAccounts: boolean\n auditorElgamalPubkey: ReadonlyUint8Array | null\n }) {\n return getInitializeConfidentialTransferMintInstructionAsync(params)\n }\n\n /**\n * Get initialize interest bearing config instruction\n */\n getInitializeInterestBearingConfigInstruction(params: {\n mint: Address\n authority: TransactionSigner\n rate: number\n rateAuthority: Address\n }) {\n return getInitializeInterestBearingConfigInstructionAsync(params)\n }\n\n /**\n * Get initialize mint close authority instruction\n */\n getInitializeMintCloseAuthorityInstruction(params: {\n mint: Address\n authority: TransactionSigner\n closeAuthority: Address\n }) {\n return getInitializeMintCloseAuthorityInstructionAsync(params)\n }\n\n /**\n * Get initialize default account state instruction\n */\n getInitializeDefaultAccountStateInstruction(params: {\n mint: Address\n authority: TransactionSigner\n state: AccountState\n }) {\n return getInitializeDefaultAccountStateInstructionAsync(params)\n }\n\n /**\n * Get approve extension instruction\n */\n getApproveExtensionInstruction(params: {\n mint: Address\n authority: TransactionSigner\n extension: Address\n }) {\n return getApproveExtensionInstruction(params)\n }\n\n // =====================================================\n // CONVENIENCE METHODS\n // These methods provide simplified access to common operations\n // =====================================================\n\n /**\n * Create a basic Token-2022 mint\n */\n async createMint(params: {\n signer: TransactionSigner\n agentAddress: Address\n decimals: number\n freezeAuthority?: Address\n }): Promise<string> {\n const mintKeypair = await this.generateKeypair()\n \n const instruction = await this.getCreateToken2022MintInstruction({\n authority: params.signer,\n agent: params.agentAddress,\n mint: mintKeypair,\n decimals: params.decimals,\n freezeAuthority: params.freezeAuthority ?? null,\n enableTransferFee: false,\n enableConfidentialTransfers: false,\n enableInterestBearing: false\n })\n\n return this.execute('createToken2022Mint', () => instruction, [params.signer, mintKeypair])\n }\n\n async createMintWithTransferFees(params: {\n signer: TransactionSigner\n agentAddress: Address\n decimals: number\n transferFeeBasisPoints: number\n maxFee: bigint\n withdrawWithheldAuthority?: Address\n }): Promise<string> {\n const mintKeypair = await this.generateKeypair()\n \n const mintInstruction = await this.getCreateToken2022MintInstruction({\n authority: params.signer,\n agent: params.agentAddress,\n mint: mintKeypair,\n decimals: params.decimals,\n freezeAuthority: null,\n enableTransferFee: true,\n enableConfidentialTransfers: false,\n enableInterestBearing: false,\n // Transfer fee extension params\n transferFeeBasisPoints: params.transferFeeBasisPoints,\n maximumFee: params.maxFee,\n transferFeeAuthority: params.signer.address,\n withdrawWithheldAuthority: params.withdrawWithheldAuthority ?? null\n })\n\n return this.execute('createMintWithFees', () => mintInstruction, [params.signer, mintKeypair])\n }\n\n async createMintWithConfidentialTransfers(params: {\n signer: TransactionSigner\n agentAddress: Address\n decimals: number\n auditorElgamalPubkey?: ReadonlyUint8Array\n autoApproveNewAccounts?: boolean\n }): Promise<string> {\n const mintKeypair = await this.generateKeypair()\n \n const mintInstruction = await this.getCreateToken2022MintInstruction({\n authority: params.signer,\n agent: params.agentAddress,\n mint: mintKeypair,\n decimals: params.decimals,\n freezeAuthority: null,\n enableConfidentialTransfers: true,\n enableTransferFee: false,\n enableInterestBearing: false,\n // Confidential transfer params\n auditorElgamalPubkey: params.auditorElgamalPubkey ?? null,\n autoApproveNewAccounts: params.autoApproveNewAccounts ?? false\n })\n\n return this.execute('createMintWithConfidential', () => mintInstruction, [params.signer, mintKeypair])\n }\n\n async createMintWithInterestBearing(params: {\n signer: TransactionSigner\n agentAddress: Address\n decimals: number\n interestRate: number\n rateAuthority?: Address\n }): Promise<string> {\n const mintKeypair = await this.generateKeypair()\n \n const mintInstruction = await this.getCreateToken2022MintInstruction({\n authority: params.signer,\n agent: params.agentAddress,\n mint: mintKeypair,\n decimals: params.decimals,\n freezeAuthority: null,\n enableConfidentialTransfers: false,\n enableTransferFee: false,\n enableInterestBearing: true,\n // Interest bearing params\n interestRate: params.interestRate,\n rateAuthority: params.rateAuthority ?? params.signer.address\n })\n\n return this.execute('createMintWithInterest', () => mintInstruction, [params.signer, mintKeypair])\n }\n\n /**\n * Create a full-featured Token-2022 mint with all extensions\n */\n async createAdvancedMint(params: {\n signer: TransactionSigner\n agentAddress: Address\n decimals: number\n transferFeeBasisPoints: number\n maxFee: bigint\n interestRate: number\n autoApproveConfidential?: boolean\n defaultAccountState?: AccountState\n }): Promise<string> {\n const mintKeypair = await this.generateKeypair()\n \n const instructions = []\n \n // Create the mint with all extensions enabled and configured\n instructions.push(async () => this.getCreateToken2022MintInstruction({\n authority: params.signer,\n agent: params.agentAddress,\n mint: mintKeypair,\n decimals: params.decimals,\n freezeAuthority: params.signer.address,\n enableConfidentialTransfers: true,\n enableTransferFee: true,\n enableInterestBearing: true,\n // Transfer fee params\n transferFeeBasisPoints: params.transferFeeBasisPoints,\n maximumFee: params.maxFee,\n transferFeeAuthority: params.signer.address,\n withdrawWithheldAuthority: params.signer.address,\n // Confidential transfer params\n auditorElgamalPubkey: null,\n autoApproveNewAccounts: params.autoApproveConfidential ?? false,\n // Interest bearing params\n interestRate: params.interestRate,\n rateAuthority: params.signer.address\n }))\n\n // Initialize default account state if specified\n if (params.defaultAccountState) {\n instructions.push(async () => this.getInitializeDefaultAccountStateInstruction({\n mint: mintKeypair.address,\n authority: params.signer,\n state: params.defaultAccountState!\n }))\n }\n\n return this.executeMultiple('createAdvancedMint', instructions, [params.signer, mintKeypair])\n }\n\n // =====================================================\n // QUERY OPERATIONS\n // =====================================================\n\n /**\n * Get Token-2022 mint account\n */\n async getMint(address: Address): Promise<Token2022MintData | null> {\n return super.getAccount<Token2022MintData>(address, 'getMintDecoder')\n }\n\n /**\n * Get all Token-2022 mints created by this program\n */\n async getAllMints(): Promise<{ address: Address; data: Token2022MintData }[]> {\n return this.getProgramAccounts<Token2022MintData>('getMintDecoder')\n }\n\n /**\n * Get mints by authority\n */\n async getMintsByAuthority(authority: Address): Promise<{ address: Address; data: Token2022MintData }[]> {\n const filters = [{\n memcmp: {\n offset: BigInt(8), // Skip discriminator\n bytes: authority as string,\n encoding: 'base58' as const\n }\n }]\n \n return this.getProgramAccounts<Token2022MintData>('getMintDecoder', filters)\n }\n\n // =====================================================\n // HELPER METHODS\n // =====================================================\n\n private async generateKeypair(): Promise<TransactionSigner> {\n // Generate a real Ed25519 keypair using Solana's native implementation\n return generateKeyPairSigner()\n }\n\n private async executeMultiple(\n operation: string,\n instructionFactories: Array<() => Promise<IInstruction>>,\n signers: TransactionSigner[]\n ): Promise<string> {\n // This is a simplified implementation\n // In practice, you'd combine instructions into a single transaction\n if (instructionFactories.length === 0) {\n throw new Error('No instruction factories provided')\n }\n \n const instructions = []\n for (const factory of instructionFactories) {\n try {\n const instruction = await factory()\n instructions.push(instruction)\n } catch (error) {\n throw new Error(`Failed to create instruction: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n \n // For demonstration, execute the first instruction\n // Real implementation would combine all instructions\n const firstInstruction = instructions[0]\n if (!firstInstruction) {\n throw new Error('First instruction is undefined')\n }\n return this.execute(operation, () => firstInstruction, signers)\n }\n}"]}
|