@ghostspeak/sdk 2.0.0 โ 2.0.1
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/LICENSE +21 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/GhostSpeakClient-CyeZ6Tyb.d.ts +2061 -0
- package/dist/client.d.ts +4 -3
- package/dist/crypto.d.ts +2 -2
- package/dist/{feature-flags-CEaxXgQQ.d.ts โ feature-flags-3POmoO_Z.d.ts} +833 -1190
- package/dist/index.d.ts +206 -4543
- package/dist/ipfs-types-KJcvy9Qk.d.ts +553 -0
- package/dist/minimal/core-minimal.d.ts +2037 -82
- package/dist/utils.d.ts +4 -4
- package/package.json +5 -29
- package/dist/EscrowInstructions-4P3H6ETO.js +0 -2
- package/dist/EscrowInstructions-4P3H6ETO.js.map +0 -1
- package/dist/GhostSpeakClient-4SROinEf.d.ts +0 -503
- package/dist/accounts-IUZMPYVE.js +0 -2
- package/dist/accounts-IUZMPYVE.js.map +0 -1
- package/dist/agent-GZ2OES75.js +0 -2
- package/dist/agent-GZ2OES75.js.map +0 -1
- package/dist/auctionMarketplace-W4YM7HKU.js +0 -2
- package/dist/auctionMarketplace-W4YM7HKU.js.map +0 -1
- package/dist/chunk-2KOOI5BX.js +0 -2
- package/dist/chunk-2KOOI5BX.js.map +0 -1
- package/dist/chunk-32GWTXRJ.js +0 -3
- package/dist/chunk-32GWTXRJ.js.map +0 -1
- package/dist/chunk-B4WUFVLE.js +0 -2
- package/dist/chunk-B4WUFVLE.js.map +0 -1
- package/dist/chunk-C2OTQ5YS.js +0 -2
- package/dist/chunk-C2OTQ5YS.js.map +0 -1
- package/dist/chunk-CTC4ZJ26.js +0 -5
- package/dist/chunk-CTC4ZJ26.js.map +0 -1
- package/dist/chunk-DF7LLAMH.js +0 -2
- package/dist/chunk-DF7LLAMH.js.map +0 -1
- package/dist/chunk-DJ356OUX.js +0 -2
- package/dist/chunk-DJ356OUX.js.map +0 -1
- package/dist/chunk-DK5YDBXR.js +0 -2
- package/dist/chunk-DK5YDBXR.js.map +0 -1
- package/dist/chunk-DOTF5ECA.js +0 -4
- package/dist/chunk-DOTF5ECA.js.map +0 -1
- package/dist/chunk-FKEUXXZS.js +0 -30
- package/dist/chunk-FKEUXXZS.js.map +0 -1
- package/dist/chunk-GSHXEKBW.js +0 -2
- package/dist/chunk-GSHXEKBW.js.map +0 -1
- package/dist/chunk-IZDAEOLH.js +0 -2
- package/dist/chunk-IZDAEOLH.js.map +0 -1
- package/dist/chunk-JY554RGE.js +0 -3
- package/dist/chunk-JY554RGE.js.map +0 -1
- package/dist/chunk-KK3HV2RD.js +0 -3
- package/dist/chunk-KK3HV2RD.js.map +0 -1
- package/dist/chunk-PPOCDM6G.js +0 -2
- package/dist/chunk-PPOCDM6G.js.map +0 -1
- package/dist/chunk-PUI35LBF.js +0 -2
- package/dist/chunk-PUI35LBF.js.map +0 -1
- package/dist/chunk-Q34J6YDA.js +0 -11
- package/dist/chunk-Q34J6YDA.js.map +0 -1
- package/dist/chunk-QATBFZMM.js +0 -3
- package/dist/chunk-QATBFZMM.js.map +0 -1
- package/dist/chunk-QTKN3VZV.js +0 -2
- package/dist/chunk-QTKN3VZV.js.map +0 -1
- package/dist/chunk-RFBYMTTN.js +0 -2
- package/dist/chunk-RFBYMTTN.js.map +0 -1
- package/dist/chunk-RJJPOLCK.js +0 -22
- package/dist/chunk-RJJPOLCK.js.map +0 -1
- package/dist/chunk-RTWJTEND.js +0 -2
- package/dist/chunk-RTWJTEND.js.map +0 -1
- package/dist/chunk-SR3ZJCME.js +0 -2
- package/dist/chunk-SR3ZJCME.js.map +0 -1
- package/dist/chunk-TAWXH7KX.js +0 -2
- package/dist/chunk-TAWXH7KX.js.map +0 -1
- package/dist/client.js +0 -2
- package/dist/client.js.map +0 -1
- package/dist/confidential-transfer-manager-CGS3T5DG.js +0 -2
- package/dist/confidential-transfer-manager-CGS3T5DG.js.map +0 -1
- package/dist/crypto.js +0 -2
- package/dist/crypto.js.map +0 -1
- package/dist/elgamal-3ABOJSHC.js +0 -2
- package/dist/elgamal-3ABOJSHC.js.map +0 -1
- package/dist/enhanced-client-errors-W22U3LNH.js +0 -2
- package/dist/enhanced-client-errors-W22U3LNH.js.map +0 -1
- package/dist/errors.js +0 -2
- package/dist/errors.js.map +0 -1
- package/dist/generated-U3L4KUE4.js +0 -2
- package/dist/generated-U3L4KUE4.js.map +0 -1
- package/dist/ghostspeak_wasm-3KPNJTSS.js +0 -2
- package/dist/ghostspeak_wasm-3KPNJTSS.js.map +0 -1
- package/dist/index.js +0 -97
- package/dist/index.js.map +0 -1
- package/dist/ipfs-types-BlxtJ3q2.d.ts +0 -194
- package/dist/metafile-esm.json +0 -1
- package/dist/minimal/core-minimal.js +0 -12
- package/dist/minimal/core-minimal.js.map +0 -1
- package/dist/pda-2GUWRQ5G.js +0 -2
- package/dist/pda-2GUWRQ5G.js.map +0 -1
- package/dist/registerAgentCompressed-L6ACXD2Z.js +0 -2
- package/dist/registerAgentCompressed-L6ACXD2Z.js.map +0 -1
- package/dist/token-2022-rpc-SRHRFN5Y.js +0 -2
- package/dist/token-2022-rpc-SRHRFN5Y.js.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils.js +0 -2
- package/dist/utils.js.map +0 -1
- package/dist/zk-proof-builder-GXZ42QZA.js +0 -2
- package/dist/zk-proof-builder-GXZ42QZA.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/simple-rpc-client.ts","../src/client/instructions/BaseInstructions.ts","../src/client/instructions/EscrowInstructions.ts"],"names":["SimpleRpcClient","config","createSolanaRpc","createSolanaRpcSubscriptions","address","options","result","dataArray","base64Data","error","addresses","account","transaction","requestBody","data","signatures","message","programId","rpcOptions","programIdStr","response","accounts","item","accountInfo","BaseInstructions","factoryConfig","sendAndConfirmTransactionFactory","instructions","totalSize","instruction","signers","estimatedSize","i","rpcClient","latestBlockhash","transactionMessage","pipe","createTransactionMessage","tx","setTransactionMessageFeePayerSigner","setTransactionMessageLifetimeUsingBlockhash","appendTransactionMessageInstructions","signedTransaction","signTransactionMessageWithSigners","instr","idx","hexData","signature","wireTransaction","getBase64EncodedWireTransaction","transactionSignature","confirmed","attempts","maxAttempts","currentDelay","statuses","confirmationStatus","err","resolve","statusError","errorMessage","cluster","detectClusterFromEndpoint","transactionResult","createTransactionResult","logTransactionDetails","feePayer","setTransactionMessageFeePayer","compiledMessage","compileTransactionMessage","encodedMessage","fee","simulation","instructionBatches","index","decoderImportName","commitment","decoderGetter","decoder","rawData","filters","decodedAccounts","pubkey","decodedData","decodeError","decoderError","instructionGetter","signer","context","EscrowInstructions","params","defaultPaymentToken","tokenMint","tokenProgram","detectTokenProgram","isToken2022","isToken2022Mint","payerTokenAccount","providerTokenAccount","getAssociatedTokenAccount","deriveWorkOrderPda","workOrderAddress","title","description","requirements","metadataJson","metadata","e","getCreateWorkOrderInstruction","resolvedParams","findProgramDerivedAddress","escrowAddress","reentrancyGuard","clientTokenAccount","escrowTokenAccount","getCreateEscrowInstruction","workDeliveryAddress","getSubmitWorkDeliveryInstruction","escrowAccount","agentAccount","agentTokenAccount","getCompleteEscrowInstruction","clientRefundAccount","getCancelEscrowInstruction","getRefundExpiredEscrowInstruction","agentPaymentAccount","getProcessPartialRefundInstruction","getDisputeEscrowInstruction","amount","exampleFeeConfig","createTransferFeeConfig","feeCalculation","calculateTransferFee","paymentAddress","adjustedAmount","getProcessPaymentInstruction","participants","ataInfos","participant","ataInfo","EscrowStatus","recipientTokenAccount","getProcessEscrowPaymentInstruction","userAddress","workOrder","WorkOrderStatus","getVerifyWorkDeliveryInstruction","getRejectWorkDeliveryInstruction"],"mappings":"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","file":"chunk-QATBFZMM.js","sourcesContent":["/**\n * Simplified RPC Client for Core Functionality\n * July 2025 - Working Implementation\n */\n\nimport type { Address } from '@solana/addresses'\nimport { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit'\nimport type { Signature } from '@solana/kit'\nimport type {\n Commitment,\n AccountInfo,\n GetAccountInfoOptions,\n GetMultipleAccountsOptions\n} from '../types/rpc-types.js'\n\nexport interface SimpleRpcClientConfig {\n endpoint: string\n wsEndpoint?: string\n commitment?: Commitment\n}\n\n// RPC configuration interfaces\n// Note: These may be used for future WebSocket configuration\n\n/**\n * Simplified RPC client focusing on core functionality\n */\nexport class SimpleRpcClient {\n private rpc: ReturnType<typeof createSolanaRpc>\n private rpcSubscriptions?: ReturnType<typeof createSolanaRpcSubscriptions>\n private commitment: Commitment\n private endpoint: string\n\n constructor(config: SimpleRpcClientConfig) {\n this.endpoint = config.endpoint\n this.rpc = createSolanaRpc(config.endpoint)\n this.commitment = config.commitment ?? 'confirmed'\n \n if (config.wsEndpoint) {\n this.rpcSubscriptions = createSolanaRpcSubscriptions(config.wsEndpoint)\n }\n }\n\n /**\n * Get account information\n */\n async getAccountInfo(\n address: Address,\n options?: GetAccountInfoOptions\n ): Promise<AccountInfo | null> {\n try {\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 // Handle RPC data format: [base64_string, encoding_type]\n const dataArray = result.value.data as [string, string]\n const base64Data = Array.isArray(dataArray) ? dataArray[0] : dataArray as string\n \n return {\n executable: result.value.executable,\n lamports: result.value.lamports,\n owner: result.value.owner,\n rentEpoch: result.value.rentEpoch,\n data: Buffer.from(base64Data, 'base64'),\n space: result.value.space\n }\n } catch (error) {\n console.warn(`Failed to get account info for ${address}:`, error)\n return null\n }\n }\n\n /**\n * Get multiple accounts\n */\n async getMultipleAccounts(\n addresses: Address[],\n options?: GetMultipleAccountsOptions\n ): Promise<(AccountInfo | null)[]> {\n try {\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 } catch (error) {\n console.warn('Failed to get multiple accounts:', error)\n return addresses.map(() => null)\n }\n }\n\n /**\n * Get latest blockhash\n */\n async getLatestBlockhash() {\n const result = await this.rpc.getLatestBlockhash({ commitment: this.commitment }).send()\n return result.value\n }\n\n /**\n * Send transaction\n */\n async sendTransaction(\n transaction: string,\n options?: { skipPreflight?: boolean; preflightCommitment?: Commitment }\n ): Promise<string> {\n try {\n console.log('๐ Debug - Sending transaction to RPC:')\n console.log(` Transaction length: ${transaction.length}`)\n console.log(` First 50 chars: ${transaction.substring(0, 50)}...`)\n console.log(` Options: ${JSON.stringify(options)}`)\n \n // For Solana Web3.js v2, the sendTransaction method should work with base64\n // But we need to make sure we're calling it correctly\n \n // Try to send using the proper RPC format\n // The Solana JSON-RPC expects: sendTransaction(transaction, options)\n // where transaction is a base64-encoded string\n \n // Direct JSON-RPC call to bypass any library issues\n const requestBody = {\n jsonrpc: '2.0',\n id: Math.floor(Math.random() * 100000),\n method: 'sendTransaction',\n params: [\n transaction, // base64-encoded transaction\n {\n skipPreflight: options?.skipPreflight ?? false,\n preflightCommitment: options?.preflightCommitment ?? this.commitment,\n encoding: 'base64'\n }\n ]\n }\n \n console.log('๐ Debug - RPC request:')\n console.log(` Method: ${requestBody.method}`)\n console.log(` Transaction (first 50): ${transaction.substring(0, 50)}...`)\n console.log(` Params count: ${requestBody.params.length}`)\n \n const response = await globalThis.fetch(this.endpoint as string, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody)\n })\n \n const data = await response.json() as { error?: { message: string }; result?: unknown }\n \n if (data.error) {\n console.error('๐ด RPC error response:', data.error)\n throw new Error(`RPC Error: ${data.error.message}`)\n }\n \n return data.result as string\n } catch (error) {\n console.error('๐ด RPC sendTransaction error:', error)\n throw error\n }\n }\n\n /**\n * Get signature statuses\n */\n async getSignatureStatuses(signatures: Signature[]) {\n const result = await this.rpc.getSignatureStatuses(signatures).send()\n return result.value\n }\n\n /**\n * Simulate transaction\n */\n async simulateTransaction(\n transaction: string,\n options?: { commitment?: Commitment; replaceRecentBlockhash?: boolean }\n ) {\n return this.rpc.simulateTransaction(transaction as unknown as Parameters<typeof this.rpc.simulateTransaction>[0], {\n commitment: options?.commitment ?? this.commitment,\n replaceRecentBlockhash: options?.replaceRecentBlockhash ?? false,\n sigVerify: false,\n encoding: 'base64'\n }).send()\n }\n\n /**\n * Get fee for message\n */\n async getFeeForMessage(message: string): Promise<number> {\n const result = await this.rpc.getFeeForMessage(message as unknown as Parameters<typeof this.rpc.getFeeForMessage>[0]).send()\n return Number(result.value ?? 5000) // Fallback fee\n }\n\n /**\n * Get program accounts\n */\n async getProgramAccounts(\n programId: Address,\n options?: { filters?: unknown[]; commitment?: Commitment }\n ): Promise<{ pubkey: Address; account: AccountInfo }[]> {\n try {\n console.log(`Getting program accounts for program: ${programId}`)\n console.log(`Options: ${JSON.stringify(options)}`)\n \n const rpcOptions = {\n commitment: options?.commitment ?? this.commitment,\n encoding: 'base64' as const, // Always use base64 for large data\n ...(options?.filters && { filters: options.filters })\n }\n \n // Type-safe RPC request\n interface RpcRequest {\n jsonrpc: '2.0'\n id: number\n method: 'getProgramAccounts'\n params: [string, Record<string, unknown>]\n }\n \n interface RpcError {\n code: number\n message: string\n }\n \n interface RpcResponse {\n jsonrpc: '2.0'\n id: number\n result?: { pubkey: string; account: unknown }[]\n error?: RpcError\n }\n \n // Validate program ID is a valid base58 address\n const programIdStr = programId.toString()\n if (!programIdStr || programIdStr.includes('/') || programIdStr.length < 32) {\n throw new Error(`Invalid program ID format: ${programIdStr}. Expected base58 Solana address.`)\n }\n \n const requestBody: RpcRequest = {\n jsonrpc: '2.0',\n id: Math.floor(Math.random() * 100000),\n method: 'getProgramAccounts',\n params: [programIdStr, rpcOptions]\n }\n \n const response = await globalThis.fetch(this.endpoint as string, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody)\n })\n \n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n \n const data = await response.json() as RpcResponse\n \n if (data.error) {\n throw new Error(`RPC Error: ${data.error.message}`)\n }\n \n const accounts = data.result ?? []\n console.log(`Found ${accounts.length} program accounts`)\n \n return accounts.map((item) => {\n return {\n pubkey: item.pubkey as Address,\n account: this.parseAccountInfo(item.account)\n }\n })\n } catch (error) {\n console.error(`Failed to get program accounts:`, error)\n throw new Error(`Failed to get program accounts: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n private parseAccountInfo(accountInfo: unknown): AccountInfo {\n const account = accountInfo as Record<string, unknown>\n \n // Handle RPC data format: [base64_string, encoding_type]\n const dataArray = account.data as [string, string]\n const base64Data = Array.isArray(dataArray) ? dataArray[0] : dataArray as string\n \n return {\n executable: account.executable as boolean,\n lamports: BigInt(account.lamports as string | number) as unknown as AccountInfo['lamports'], // Cast to Lamports branded type\n owner: account.owner as Address,\n rentEpoch: account.rentEpoch as bigint,\n data: Buffer.from(base64Data, 'base64'),\n space: account.space as bigint\n }\n }\n}\n\n/**\n * Create simple RPC client\n */\nexport function createSimpleRpcClient(config: SimpleRpcClientConfig): SimpleRpcClient {\n return new SimpleRpcClient(config)\n}","import type { Address } from '@solana/addresses'\nimport type { \n IInstruction, \n TransactionSigner,\n TransactionMessage,\n Signature\n} from '@solana/kit'\nimport { \n pipe,\n createTransactionMessage,\n setTransactionMessageFeePayer,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n appendTransactionMessageInstructions,\n signTransactionMessageWithSigners,\n sendAndConfirmTransactionFactory,\n compileTransactionMessage,\n getBase64EncodedWireTransaction\n} from '@solana/kit'\nimport type { GhostSpeakConfig, ExtendedRpcApi, RpcSubscriptionApi } from '../../types/index.js'\nimport { \n createTransactionResult, \n logTransactionDetails, \n detectClusterFromEndpoint,\n type TransactionResult \n} from '../../utils/transaction-urls.js'\nimport { SimpleRpcClient } from '../../utils/simple-rpc-client.js'\nimport type { EncodedAccount } from '@solana/kit'\n\n// Simulation result interface matching Solana RPC response\ninterface SimulationResult {\n value: {\n err: unknown | null\n logs: string[] | null\n unitsConsumed?: bigint\n }\n}\n\n/**\n * Base class for all instruction modules using real 2025 Web3.js v2 transaction execution\n */\nexport abstract class BaseInstructions {\n protected config: GhostSpeakConfig\n private _sendAndConfirmTransaction: ReturnType<typeof sendAndConfirmTransactionFactory> | null = null\n private _rpcClient: SimpleRpcClient | null = null\n\n constructor(config: GhostSpeakConfig) {\n this.config = config\n }\n\n /**\n * Get the RPC client\n */\n protected get rpc(): ExtendedRpcApi {\n return this.config.rpc\n }\n\n /**\n * Get or create the Solana RPC client instance\n */\n protected getRpcClient(): SimpleRpcClient {\n this._rpcClient ??= new SimpleRpcClient({\n endpoint: this.config.rpcEndpoint ?? 'https://api.devnet.solana.com',\n wsEndpoint: this.config.rpcSubscriptions ? undefined : undefined, // WebSocket endpoint from config if available\n commitment: this.config.commitment ?? 'confirmed'\n })\n return this._rpcClient\n }\n\n /**\n * Get the RPC subscriptions client\n */\n protected get rpcSubscriptions(): RpcSubscriptionApi | undefined {\n return this.config.rpcSubscriptions\n }\n\n /**\n * Get the program ID\n */\n protected get programId(): Address {\n return this.config.programId!\n }\n\n /**\n * Get the commitment level\n */\n protected get commitment() {\n return this.config.commitment ?? 'confirmed'\n }\n\n /**\n * Get or create the send and confirm transaction function using factory pattern\n */\n private getSendAndConfirmTransaction() {\n if (!this._sendAndConfirmTransaction) {\n // Only pass rpcSubscriptions if they exist and are valid\n if (this.rpcSubscriptions) {\n const factoryConfig = { rpc: this.rpc, rpcSubscriptions: this.rpcSubscriptions }\n try {\n this._sendAndConfirmTransaction = sendAndConfirmTransactionFactory(factoryConfig)\n } catch {\n // Fallback to RPC-only mode if subscriptions fail \n this._sendAndConfirmTransaction = sendAndConfirmTransactionFactory({ \n rpc: this.rpc, \n rpcSubscriptions: this.rpcSubscriptions \n })\n }\n } else {\n // Use RPC-only mode when no subscriptions available\n this._sendAndConfirmTransaction = sendAndConfirmTransactionFactory({ \n rpc: this.rpc,\n rpcSubscriptions: null as never\n })\n }\n }\n return this._sendAndConfirmTransaction\n }\n\n /**\n * Calculate estimated transaction size for validation\n */\n protected 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?.length ?? 0 // Instruction data\n }\n \n return totalSize\n }\n\n /**\n * Send a transaction with instructions and signers using REAL Web3.js v2 patterns\n * Returns transaction result with verification URLs\n */\n protected async sendTransaction(\n instructions: IInstruction[],\n signers: TransactionSigner[]\n ): Promise<string> {\n // Check transaction size before sending\n const estimatedSize = this.estimateTransactionSize(instructions)\n if (estimatedSize > 1232) {\n console.warn(`โ ๏ธ Transaction size (${estimatedSize} bytes) may exceed Solana limit (1232 bytes)`)\n }\n \n return this.sendTransactionWithDetails(instructions, signers).then(result => result.signature as string)\n }\n\n /**\n * Send a transaction and return complete result with verification URLs\n */\n protected async sendTransactionWithDetails(\n instructions: IInstruction[],\n signers: TransactionSigner[]\n ): Promise<TransactionResult> {\n try {\n // Validate instructions\n for (let i = 0; i < instructions.length; i++) {\n const instruction = instructions[i]\n // instruction is guaranteed to be defined based on loop condition\n if (!instruction.programAddress) {\n throw new Error(`Instruction at index ${i} has no programAddress`)\n }\n if (!instruction.accounts) {\n throw new Error(`Instruction at index ${i} has no accounts array`)\n }\n if (!Array.isArray(instruction.accounts)) {\n throw new Error(`Instruction at index ${i} accounts is not an array`)\n }\n }\n \n // Step 1: Get latest blockhash using real RPC call\n const rpcClient = this.getRpcClient()\n const latestBlockhash = await rpcClient.getLatestBlockhash()\n\n // Step 2: Build transaction message using pipe pattern (2025 standard)\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 // Step 3: Sign transaction using 2025 pattern\n const signedTransaction = await signTransactionMessageWithSigners(transactionMessage)\n \n // Debug: Log instruction data\n console.log('๐ Debug - Instruction data:')\n instructions.forEach((instr, idx) => {\n console.log(` Instruction ${idx}: data length = ${instr.data?.length ?? 0} bytes`)\n if (instr.data) {\n // Log first 50 bytes of data in hex\n const hexData = Buffer.from(instr.data as Uint8Array).toString('hex').substring(0, 100)\n console.log(` Data (hex): ${hexData}...`)\n }\n })\n\n // Step 4: Send and confirm using factory pattern\n \n let result: unknown\n let signature: Signature\n \n // If no subscriptions available, use polling method with exponential backoff\n if (!this.rpcSubscriptions) {\n \n // Convert signed transaction to wire format\n const wireTransaction = getBase64EncodedWireTransaction(signedTransaction)\n \n // Debug: Log the wire transaction\n console.log('๐ Debug - Wire transaction:')\n console.log(` Base64 length: ${wireTransaction.length}`)\n console.log(` First 100 chars: ${wireTransaction.substring(0, 100)}`)\n \n // Send transaction first\n const transactionSignature = await rpcClient.sendTransaction(wireTransaction, {\n skipPreflight: false,\n preflightCommitment: this.commitment\n })\n \n // Poll for confirmation with exponential backoff and better error handling\n let confirmed = false\n let attempts = 0\n const maxAttempts = 30\n const baseDelay = 1000 // 1 second\n let currentDelay = baseDelay\n \n while (!confirmed && attempts < maxAttempts) {\n try {\n const statuses = await rpcClient.getSignatureStatuses([transactionSignature as Signature])\n \n if (statuses[0]) {\n const confirmationStatus = statuses[0].confirmationStatus\n const err = statuses[0].err\n \n // Check for transaction errors\n if (err) {\n throw new Error(`Transaction failed: ${JSON.stringify(err)}`)\n }\n \n // Check for confirmation\n if (confirmationStatus === this.commitment || \n (this.commitment === 'confirmed' && confirmationStatus === 'finalized')) {\n confirmed = true\n console.log('โ
Transaction confirmed!')\n break\n }\n }\n \n // Transaction still pending, wait with exponential backoff\n attempts++\n console.log(`โณ Waiting for confirmation... (${attempts}/${maxAttempts})`)\n await new Promise(resolve => setTimeout(resolve, currentDelay))\n \n // Exponential backoff with max delay of 5 seconds\n currentDelay = Math.min(currentDelay * 1.5, 5000)\n \n } catch (statusError: unknown) {\n // Handle RPC errors gracefully\n const errorMessage = statusError instanceof Error ? statusError.message : String(statusError)\n if (errorMessage.includes('Transaction failed')) {\n throw statusError // Re-throw transaction failures\n }\n \n attempts++\n console.warn(`โ ๏ธ Status check failed (${attempts}/${maxAttempts}): ${errorMessage}`)\n \n // Wait longer after RPC errors\n await new Promise(resolve => setTimeout(resolve, currentDelay * 2))\n }\n }\n \n if (!confirmed) {\n throw new Error(`Transaction confirmation timeout after ${maxAttempts} attempts. Signature: ${transactionSignature}`)\n }\n \n signature = transactionSignature as Signature\n } else {\n // Use subscriptions for faster confirmation\n const sendAndConfirmTransaction = this.getSendAndConfirmTransaction()\n result = await sendAndConfirmTransaction(signedTransaction, {\n commitment: this.commitment,\n skipPreflight: false\n })\n \n // Extract signature from the transaction or result safely\n if (result && typeof result === 'object' && 'signature' in result) {\n signature = result.signature as Signature\n } else {\n const signatures = Object.values(signedTransaction.signatures as unknown as Record<string, string>)\n if (signatures.length > 0 && typeof signatures[0] === 'string') {\n signature = signatures[0] as Signature\n } else {\n throw new Error('Unable to extract transaction signature')\n }\n }\n }\n \n // Detect cluster from RPC endpoint or config\n const cluster = this.config.cluster ?? \n (this.config.rpcEndpoint ? detectClusterFromEndpoint(this.config.rpcEndpoint) : 'devnet')\n \n // Create complete transaction result with verification URLs\n const transactionResult = createTransactionResult(\n signature as Signature,\n cluster,\n this.commitment\n )\n \n // Log transaction details with clickable URLs\n logTransactionDetails(transactionResult)\n \n return transactionResult\n } catch (error) {\n console.error('โ Transaction failed:', error)\n throw new Error(`Transaction failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n /**\n * Estimate transaction cost using REAL RPC calls\n */\n protected async estimateTransactionCost(\n instructions: IInstruction[],\n feePayer?: Address\n ): Promise<bigint> {\n try {\n console.log(`๐ฐ Estimating REAL cost for ${instructions.length} instructions`)\n \n // Get real blockhash for accurate fee estimation\n const rpcClient = this.getRpcClient()\n const latestBlockhash = await rpcClient.getLatestBlockhash()\n \n // Build transaction message for fee estimation\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayer(feePayer ?? this.config.defaultFeePayer!, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions(instructions, tx)\n )\n\n // Compile and encode message for fee calculation\n const compiledMessage = compileTransactionMessage(transactionMessage)\n const encodedMessage = Buffer.from(compiledMessage as unknown as Uint8Array).toString('base64')\n \n // Get real fee from RPC\n const fee = await rpcClient.getFeeForMessage(encodedMessage)\n \n console.log(`๐ณ Real estimated fee: ${fee} lamports`)\n return BigInt(fee)\n } catch (error) {\n console.warn('โ ๏ธ Real fee estimation failed, using fallback:', error)\n // Fallback to reasonable estimate if RPC fails\n const baseFee = 5000n\n const perInstructionFee = 1000n\n return baseFee + (BigInt(instructions.length) * perInstructionFee)\n }\n }\n\n /**\n * Simulate a transaction before sending using REAL RPC simulation\n */\n protected async simulateTransaction(\n instructions: IInstruction[],\n signers: TransactionSigner[]\n ): Promise<unknown> {\n try {\n console.log(`๐งช Running REAL simulation with ${instructions.length} instructions`)\n \n // Get real blockhash\n const rpcClient = this.getRpcClient()\n const latestBlockhash = await rpcClient.getLatestBlockhash()\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, tx)\n )\n\n // Sign for simulation\n const signedTransaction = await signTransactionMessageWithSigners(transactionMessage)\n \n // Convert to wire format for simulation\n const wireTransaction = getBase64EncodedWireTransaction(signedTransaction)\n\n // Run real simulation\n const simulation = await rpcClient.simulateTransaction(wireTransaction, {\n commitment: this.commitment,\n replaceRecentBlockhash: true\n })\n\n console.log(`โ
Real simulation completed:`)\n console.log(` Success: ${!(simulation as SimulationResult).value.err}`)\n console.log(` Compute units: ${(simulation as SimulationResult).value.unitsConsumed ?? 'N/A'}`)\n console.log(` Logs: ${(simulation as SimulationResult).value.logs?.length ?? 0} entries`)\n \n return simulation\n } catch (error) {\n console.error('โ Real simulation failed:', error)\n throw new Error(`Simulation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n /**\n * Send multiple transactions in sequence with real blockchain execution\n */\n protected async sendTransactionBatch(\n instructionBatches: IInstruction[][],\n signers: TransactionSigner[]\n ): Promise<string[]> {\n console.log(`๐ Sending REAL batch of ${instructionBatches.length} transactions`)\n const signatures: string[] = []\n \n for (let i = 0; i < instructionBatches.length; i++) {\n console.log(`๐ค Processing REAL transaction ${i + 1}/${instructionBatches.length}`)\n try {\n const signature = await this.sendTransaction(instructionBatches[i], signers)\n signatures.push(signature)\n console.log(`โ
Batch transaction ${i + 1} confirmed: ${signature}`)\n } catch (error) {\n console.error(`โ Batch transaction ${i + 1} failed:`, error)\n throw new Error(`Batch transaction ${i + 1} failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n \n console.log(`๐ REAL batch complete: ${signatures.length} transactions confirmed`)\n return signatures\n }\n\n /**\n * Build a transaction message without sending it (useful for advanced use cases)\n */\n protected async buildTransactionMessage(\n instructions: IInstruction[],\n feePayer: Address\n ): Promise<TransactionMessage> {\n console.log('๐๏ธ Building transaction message without sending...')\n \n const rpcClient = this.getRpcClient()\n const latestBlockhash = await rpcClient.getLatestBlockhash()\n \n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayer(feePayer, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions(instructions, tx)\n )\n \n console.log('โ
Transaction message built (not sent)')\n return transactionMessage\n }\n\n /**\n * Log instruction details for debugging\n */\n protected logInstructionDetails(instruction: IInstruction): void {\n console.log(`๐ Instruction Details:`)\n console.log(` Program: ${instruction.programAddress}`)\n console.log(` Accounts: ${instruction.accounts?.length ?? 0}`)\n console.log(` Data size: ${instruction.data?.length ?? 0} bytes`)\n if (instruction.accounts) {\n instruction.accounts.forEach((account, index) => {\n console.log(` Account ${index}: ${JSON.stringify(account)}`)\n })\n }\n }\n\n // =====================================================\n // COMMON ACCOUNT OPERATIONS (Reduces duplication across instruction modules)\n // =====================================================\n\n /**\n * Get and decode a single account using provided decoder\n * Centralizes the common pattern used across all instruction modules\n */\n protected async getDecodedAccount<T>(\n address: Address,\n decoderImportName: string,\n commitment = this.commitment\n ): Promise<T | null> {\n try {\n const generated = await import('../../generated/index.js')\n const decoderGetter = (generated as Record<string, unknown>)[decoderImportName] as (() => { decode: (data: Uint8Array | Buffer) => T }) | undefined\n \n if (!decoderGetter || typeof decoderGetter !== 'function') {\n console.warn(`Decoder ${decoderImportName} not found in generated decoders`)\n return null\n }\n \n const rpcClient = this.getRpcClient()\n const accountInfo = await rpcClient.getAccountInfo(address, { commitment })\n \n if (!accountInfo) return null\n \n // Decode the account data\n const decoder = decoderGetter()\n // Handle parsed data vs raw data\n const rawData = Buffer.isBuffer(accountInfo.data) || accountInfo.data instanceof Uint8Array\n ? accountInfo.data\n : Buffer.from((accountInfo.data as { data?: string }).data ?? accountInfo.data as unknown as string, 'base64')\n \n return decoder.decode(rawData)\n } catch (error) {\n // Check if this is a discriminator validation error that should be handled by safe decoding\n if (error instanceof Error && error.message.includes('expected 8 bytes, got')) {\n // Rethrow discriminator errors so they can be caught by safe decoding fallback\n throw error\n }\n \n console.warn(`Failed to fetch account ${address}:`, error)\n return null\n }\n }\n\n /**\n * Get and decode multiple accounts of the same type\n * Centralizes batch account fetching pattern\n */\n protected async getDecodedAccounts<T>(\n addresses: Address[],\n decoderImportName: string,\n commitment = this.commitment\n ): Promise<(T | null)[]> {\n try {\n const generated = await import('../../generated/index.js')\n const decoderGetter = (generated as Record<string, unknown>)[decoderImportName] as (() => { decode: (data: Uint8Array | Buffer) => T }) | undefined\n \n if (!decoderGetter || typeof decoderGetter !== 'function') {\n console.warn(`Decoder ${decoderImportName} not found in generated decoders`)\n return addresses.map(() => null)\n }\n \n const rpcClient = this.getRpcClient()\n const accounts = await rpcClient.getMultipleAccounts(addresses, { commitment })\n \n // Decode each account\n const decoder = decoderGetter()\n return accounts.map(accountInfo => {\n if (!accountInfo) return null\n try {\n // Handle parsed data vs raw data\n const rawData = Buffer.isBuffer(accountInfo.data) || accountInfo.data instanceof Uint8Array\n ? accountInfo.data\n : Buffer.from((accountInfo.data as { data?: string }).data ?? accountInfo.data as unknown as string, 'base64')\n \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 and decode program accounts with optional filters\n * Centralizes program account scanning pattern\n * NOTE: Temporarily simplified due to RPC client complexity\n */\n protected async getDecodedProgramAccounts<T>(\n decoderImportName: string,\n filters: unknown[] = [],\n commitment = this.commitment\n ): Promise<{ address: Address; data: T }[]> {\n try {\n console.log(`Getting program accounts with decoder: ${decoderImportName}`)\n console.log(`Filters: ${JSON.stringify(filters)}`)\n console.log(`Commitment: ${commitment}`)\n \n // Ensure RPC client is initialized\n const rpcClient = this.getRpcClient()\n \n // Get all program accounts from the blockchain\n const accounts = await rpcClient.getProgramAccounts(this.config.programId!, {\n commitment,\n filters: filters as { memcmp?: { offset: number; bytes: string } | { dataSize: number } }[]\n })\n \n console.log(`Found ${Array.isArray(accounts) ? accounts.length : 0} program accounts`)\n \n // Import the decoder and decode each account\n try {\n const generated = await import('../../generated/index.js')\n const decoderGetter = (generated as Record<string, unknown>)[decoderImportName] as (() => { decode: (data: Uint8Array | Buffer) => T }) | undefined\n \n if (!decoderGetter || typeof decoderGetter !== 'function') {\n console.warn(`Decoder ${decoderImportName} not found in generated decoders`)\n return []\n }\n \n const decoder = decoderGetter()\n const decodedAccounts: { address: Address; data: T }[] = []\n \n for (const { pubkey, account } of accounts) {\n try {\n // Handle parsed data vs raw data\n const rawData = Buffer.isBuffer(account.data) || account.data instanceof Uint8Array\n ? account.data\n : Buffer.from((account.data as { data?: string }).data ?? account.data as unknown as string, 'base64')\n \n const decodedData = decoder.decode(rawData)\n decodedAccounts.push({ address: pubkey, data: decodedData })\n } catch (decodeError) {\n console.warn(`Failed to decode account ${pubkey}:`, decodeError)\n // Skip accounts that fail to decode rather than failing the entire operation\n }\n }\n \n console.log(`Successfully decoded ${decodedAccounts.length}/${accounts.length} program accounts`)\n return decodedAccounts\n } catch (decoderError) {\n console.warn(`Failed to load decoder ${decoderImportName}:`, decoderError)\n return []\n }\n } catch (error) {\n console.error(`Failed to get program accounts:`, error)\n throw new Error(`Failed to get program accounts: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n /**\n * Execute a single instruction with standard error handling\n * Centralizes the common instruction execution pattern\n */\n protected async executeInstruction(\n instructionGetter: () => unknown,\n signer: TransactionSigner,\n context?: string\n ): Promise<string> {\n try {\n const instruction = instructionGetter()\n return await this.sendTransaction(\n [instruction as unknown as IInstruction], \n [signer]\n )\n } catch (error) {\n const operation = context ?? 'instruction execution'\n console.error(`โ Failed to execute ${operation}:`, error)\n throw error\n }\n }\n\n /**\n * Execute a single instruction and return detailed results\n * Centralizes the common pattern for detailed transaction results\n */\n protected async executeInstructionWithDetails(\n instructionGetter: () => unknown,\n signer: TransactionSigner,\n context?: string\n ): Promise<TransactionResult> {\n try {\n const instruction = instructionGetter()\n return await this.sendTransactionWithDetails(\n [instruction as unknown as IInstruction], \n [signer]\n )\n } catch (error) {\n const operation = context ?? 'instruction execution'\n console.error(`โ Failed to execute ${operation}:`, error)\n throw error\n }\n }\n\n /**\n * Get raw account data without decoding (for discriminator validation)\n */\n protected async getRawAccount(\n address: Address,\n commitment = this.commitment\n ): Promise<EncodedAccount | null> {\n try {\n const rpcClient = this.getRpcClient()\n const accountInfo = await rpcClient.getAccountInfo(address, { commitment })\n \n if (!accountInfo) {\n return null\n }\n \n // Convert account info to EncodedAccount format\n const data = Buffer.isBuffer(accountInfo.data) || accountInfo.data instanceof Uint8Array\n ? accountInfo.data\n : Buffer.from((accountInfo.data as { data?: string }).data ?? accountInfo.data as unknown as string, 'base64')\n \n return {\n exists: true,\n address,\n data: new Uint8Array(data),\n owner: accountInfo.owner,\nexecutable: accountInfo.executable,\nlamports: BigInt(accountInfo.lamports),\n programAddress: accountInfo.owner,\n space: data.length\n } as unknown as EncodedAccount\n } catch (error) {\n console.warn(`Failed to fetch raw account ${address}:`, error)\n return null\n }\n }\n\n /**\n * Get all program accounts without filtering (for recovery operations)\n */\n protected async getAllProgramAccounts(\n commitment = this.commitment\n ): Promise<EncodedAccount[]> {\n try {\n const rpcClient = this.getRpcClient()\n const accounts = await rpcClient.getProgramAccounts(this.config.programId!, {\n commitment\n })\n \n return accounts.map(({ pubkey, account }) => ({\n exists: true,\n address: pubkey,\n data: Buffer.isBuffer(account.data) || account.data instanceof Uint8Array\n ? new Uint8Array(account.data)\n : new Uint8Array(Buffer.from((account.data as { data?: string }).data ?? account.data as unknown as string, 'base64')),\n owner: account.owner,\nexecutable: account.executable,\nlamports: BigInt(account.lamports),\n programAddress: account.owner,\n space: Buffer.isBuffer(account.data) || account.data instanceof Uint8Array\n ? account.data.length\n : Buffer.from((account.data as { data?: string }).data ?? account.data as unknown as string, 'base64').length\n } as unknown as EncodedAccount))\n } catch (error) {\n console.error('Failed to get all program accounts:', error)\n return []\n }\n }\n}","import type { Address } from '@solana/addresses'\nimport { address } from '@solana/addresses'\nimport type { \n GhostSpeakConfig\n} from '../../types/index.js'\nimport {\n getCreateWorkOrderInstruction,\n getProcessPaymentInstruction,\n getSubmitWorkDeliveryInstruction,\n getVerifyWorkDeliveryInstruction,\n getRejectWorkDeliveryInstruction,\n getCancelEscrowInstruction,\n getRefundExpiredEscrowInstruction,\n getProcessPartialRefundInstruction,\n getCreateEscrowInstruction,\n getCompleteEscrowInstruction,\n getProcessEscrowPaymentInstruction,\n getDisputeEscrowInstruction,\n type WorkOrder,\n type WorkDelivery,\n type Deliverable,\n type Escrow\n} from '../../generated/index.js'\nimport { BaseInstructions } from './BaseInstructions.js'\nimport type {\n BaseCreationParams,\n BaseTokenParams,\n BaseTimeParams,\n BaseInstructionParams\n} from './BaseInterfaces.js'\nimport type { TransactionSigner } from '@solana/kit'\nimport {\n getAssociatedTokenAccount,\n detectTokenProgram,\n isToken2022Mint,\n type AssociatedTokenAccount\n} from '../../utils/token-utils.js'\nimport {\n calculateTransferFee,\n createTransferFeeConfig,\n type TransferFeeCalculation,\n type ConfidentialTransferProof\n} from '../../utils/token-2022-extensions.js'\n\n// Parameters for creating work orders (which handle escrow)\nexport interface CreateEscrowParams extends BaseCreationParams, BaseTokenParams, BaseTimeParams {\n orderId?: bigint\n provider: Address\n requirements?: string[]\n paymentToken?: Address\n}\n\n// Parameters for payment processing\nexport interface ProcessPaymentParams extends BaseInstructionParams, BaseTokenParams {\n workOrderAddress: Address\n providerAgent: Address\n payerTokenAccount?: Address\n providerTokenAccount?: Address\n tokenMint?: Address\n useConfidentialTransfer?: boolean\n /** Transfer fee configuration (for Token 2022) */\n expectTransferFees?: boolean\n /** Maximum slippage for transfer fees (basis points) */\n maxFeeSlippageBasisPoints?: number\n /** Confidential transfer proof (required if using confidential transfers) */\n confidentialProof?: ConfidentialTransferProof | null\n}\n\n// Parameters for work delivery submission\nexport interface SubmitDeliveryParams extends BaseInstructionParams {\n workOrderAddress: Address\n deliverables?: Deliverable[]\n ipfsHash?: string\n metadataUri?: string\n}\n\n// Parameters for dispute filing\nexport interface DisputeParams extends BaseInstructionParams {\n escrowAddress: Address\n reason: string\n}\n\n// Parameters for escrow cancellation\nexport interface CancelEscrowParams extends BaseInstructionParams {\n escrowAddress: Address\n cancellationReason: string\n paymentToken: Address\n}\n\n// Parameters for expired escrow refund\nexport interface RefundExpiredEscrowParams extends BaseInstructionParams {\n escrowAddress: Address\n paymentToken: Address\n}\n\n// Parameters for partial refund processing\nexport interface ProcessPartialRefundParams extends BaseInstructionParams {\n escrowAddress: Address\n clientRefundPercentage: number // 0-100\n paymentToken: Address\n}\n\n// Parameters for real escrow creation\nexport interface CreateRealEscrowParams extends BaseInstructionParams {\n taskId: string\n agent: Address\n amount: bigint\n expiresAt: bigint\n paymentToken: Address\n transferHook?: Address | null\n isConfidential?: boolean\n}\n\n// Parameters for completing escrow (agent marks work as done)\nexport interface CompleteEscrowParams extends BaseInstructionParams {\n escrowAddress: Address\n resolutionNotes?: string | null\n}\n\n// Parameters for processing escrow payment release\nexport interface ProcessEscrowPaymentParams extends BaseInstructionParams {\n escrowAddress: Address\n workOrder: Address\n paymentToken: Address\n}\n\n// Parameters for disputing escrow\nexport interface DisputeEscrowParams extends BaseInstructionParams {\n escrowAddress: Address\n disputeReason: string\n}\n\n/**\n * Instructions for escrow operations\n */\nexport class EscrowInstructions extends BaseInstructions {\n constructor(config: GhostSpeakConfig) {\n super(config)\n }\n\n /**\n * Resolve escrow creation parameters with smart defaults\n */\n private async _resolveCreateParams(\n params: CreateEscrowParams\n ): Promise<Required<CreateEscrowParams>> {\n // Get USDC token mint as default payment token\n const defaultPaymentToken = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' as Address // USDC on mainnet\n \n return {\n title: params.title,\n description: params.description,\n amount: params.amount,\n orderId: params.orderId ?? BigInt(Date.now()), // Use timestamp as order ID\n provider: params.provider,\n requirements: params.requirements ?? [],\n paymentToken: params.paymentToken ?? defaultPaymentToken,\ndeadline: params.deadline, // 30 days default\n signer: params.signer,\n tokenMint: params.tokenMint ?? defaultPaymentToken,\n createdAt: params.createdAt ?? BigInt(Math.floor(Date.now() / 1000))\n }\n }\n\n /**\n * Resolve payment processing parameters with smart defaults and proper ATA derivation\n */\n private async _resolvePaymentParams(\n params: ProcessPaymentParams\n ): Promise<Required<ProcessPaymentParams & {\n expectTransferFees: boolean\n maxFeeSlippageBasisPoints: number\n confidentialProof: ConfidentialTransferProof | null\n }>> {\n // Get USDC token mint as default\n const defaultTokenMint = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' as Address // USDC on mainnet\n const tokenMint = params.tokenMint ?? defaultTokenMint\n \n // Detect token program and derive proper ATAs\n const tokenProgram = await detectTokenProgram(tokenMint)\n const isToken2022 = await isToken2022Mint(tokenMint)\n \n console.log('๐ Token Analysis:')\n console.log(` Token mint: ${tokenMint}`)\n console.log(` Token program: ${tokenProgram}`)\n console.log(` Is Token 2022: ${isToken2022}`)\n \n // Derive proper Associated Token Accounts\n let payerTokenAccount: Address\n let providerTokenAccount: Address\n \n if (params.payerTokenAccount) {\n payerTokenAccount = params.payerTokenAccount\n } else {\n const payerAta = await getAssociatedTokenAccount(\n params.signer.address,\n tokenMint,\n tokenProgram\n )\n payerTokenAccount = payerAta.address\n console.log(` Derived payer ATA: ${payerTokenAccount}`)\n }\n \n if (params.providerTokenAccount) {\n providerTokenAccount = params.providerTokenAccount\n } else {\n const providerAta = await getAssociatedTokenAccount(\n params.providerAgent,\n tokenMint,\n tokenProgram\n )\n providerTokenAccount = providerAta.address\n console.log(` Derived provider ATA: ${providerTokenAccount}`)\n }\n \n console.log('๐ฐ Payment Resolution:')\n console.log(` Payer token account: ${payerTokenAccount}`)\n console.log(` Provider token account: ${providerTokenAccount}`)\n console.log(` Using confidential transfers: ${params.useConfidentialTransfer ?? false}`)\n \n return {\n workOrderAddress: params.workOrderAddress,\n providerAgent: params.providerAgent,\n payerTokenAccount,\n providerTokenAccount,\n tokenMint,\n amount: params.amount,\n useConfidentialTransfer: params.useConfidentialTransfer ?? false,\n expectTransferFees: params.expectTransferFees ?? isToken2022,\n maxFeeSlippageBasisPoints: params.maxFeeSlippageBasisPoints ?? 500, // 5% default slippage\n confidentialProof: params.confidentialProof ?? null,\n signer: params.signer\n }\n }\n\n /**\n * Resolve delivery submission parameters with smart defaults\n */\n private async _resolveDeliveryParams(\n params: SubmitDeliveryParams\n ): Promise<Required<SubmitDeliveryParams>> {\n return {\n workOrderAddress: params.workOrderAddress,\n deliverables: params.deliverables ?? [],\n ipfsHash: params.ipfsHash ?? '',\n metadataUri: params.metadataUri ?? `https://ghostspeak.io/delivery/${Date.now()}`,\n signer: params.signer\n }\n }\n\n /**\n * Create a work order (escrow with specific metadata)\n */\n async createWorkOrder(\n signer: TransactionSigner,\n params: {\n orderId: bigint\n provider: Address\n amount: bigint\n metadataUri: string\n deadline: number\n }\n ): Promise<string> {\n // Derive the work order PDA\n const { deriveWorkOrderPda } = await import('../../utils/pda.js')\n const workOrderAddress = await deriveWorkOrderPda(\n this.config.programId!,\n signer.address,\n params.orderId\n )\n \n // Parse metadata from URI\n let title = 'Work Order'\n let description = 'Work order task'\n const requirements: string[] = []\n \n if (params.metadataUri.startsWith('data:application/json;base64,')) {\n try {\n const base64Data = params.metadataUri.split(',')[1]\n const metadataJson = Buffer.from(base64Data, 'base64').toString()\n const metadata = JSON.parse(metadataJson) as {\n title?: string\n description?: string\n deliverables?: string[]\n }\n title = metadata.title ?? title\n description = metadata.description ?? description\n if (metadata.deliverables) {\n requirements.push(...metadata.deliverables)\n }\n } catch (e) {\n console.warn('Failed to parse metadata URI:', e)\n }\n }\n \n // Build the instruction\n const instruction = getCreateWorkOrderInstruction({\n workOrder: workOrderAddress,\n client: signer,\n orderId: params.orderId,\n provider: params.provider,\n title,\n description,\n requirements,\n paymentAmount: params.amount,\n paymentToken: address('So11111111111111111111111111111111111111112'), // SOL mint\n deadline: BigInt(params.deadline)\n })\n \n // Send the transaction\n await this.sendTransactionWithDetails(\n [instruction],\n [signer]\n )\n \n console.log(`โ
Work order created: ${workOrderAddress}`)\n return workOrderAddress.toString()\n }\n\n /**\n * Create a new escrow account via work order\n * @deprecated Use createEscrow() for real escrow creation with SPL token transfers\n */\n async create(\n params: CreateEscrowParams\n ): Promise<string> {\n // Resolve parameters with smart defaults\n const resolvedParams = await this._resolveCreateParams(params)\n \n // Derive the work order PDA using the correct seeds\n const { deriveWorkOrderPda } = await import('../../utils/pda.js')\n const workOrderAddress = await deriveWorkOrderPda(\n this.config.programId!,\n resolvedParams.signer.address,\n resolvedParams.orderId\n )\n \n // Build the instruction for creating a work order\n const instruction = getCreateWorkOrderInstruction({\n workOrder: workOrderAddress,\n client: resolvedParams.signer,\n orderId: resolvedParams.orderId,\n provider: resolvedParams.provider,\n title: resolvedParams.title,\n description: resolvedParams.description,\n requirements: resolvedParams.requirements,\n paymentAmount: resolvedParams.amount,\n paymentToken: resolvedParams.paymentToken,\n deadline: resolvedParams.deadline\n })\n \n // Send the transaction using the base class method\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [resolvedParams.signer]\n )\n \n // Log the transaction signature for debugging\n console.log(`โ
Escrow created with signature: ${result.signature}`)\n console.log(` Work order address: ${workOrderAddress.toString()}`)\n \n // Return the work order address instead of the transaction signature\n // This allows the caller to immediately fetch the account\n return workOrderAddress.toString()\n }\n\n /**\n * Create a new escrow account with real SPL token transfers\n */\n async createEscrow(\n params: CreateRealEscrowParams\n ): Promise<string> {\n console.log('๐ Creating real escrow with token custody:', params.taskId)\n \n // Derive the escrow PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [escrowAddress] = await findProgramDerivedAddress(\n ['escrow', params.taskId],\n this.programId\n )\n\n // Derive the reentrancy guard PDA\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n // Get token program and derive token accounts\n const tokenProgram = await detectTokenProgram(params.paymentToken)\n const isToken2022 = await isToken2022Mint(params.paymentToken)\n \n console.log('๐ฐ Escrow Creation Setup:')\n console.log(` Escrow address: ${escrowAddress}`)\n console.log(` Client: ${params.signer.address}`)\n console.log(` Agent: ${params.agent}`)\n console.log(` Amount: ${params.amount}`)\n console.log(` Token: ${params.paymentToken}`)\n console.log(` Token program: ${tokenProgram}`)\n console.log(` Is Token 2022: ${isToken2022}`)\n\n // Derive client token account\n const clientTokenAccount = await getAssociatedTokenAccount(\n params.signer.address,\n params.paymentToken,\n tokenProgram\n )\n\n // Derive escrow token account\n const escrowTokenAccount = await getAssociatedTokenAccount(\n escrowAddress,\n params.paymentToken,\n tokenProgram\n )\n\n console.log(` Client token account: ${clientTokenAccount.address}`)\n console.log(` Escrow token account: ${escrowTokenAccount.address}`)\n\n // Build the create escrow instruction\n const instruction = getCreateEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard,\n client: params.signer,\n agent: params.agent,\n clientTokenAccount: clientTokenAccount.address,\n escrowTokenAccount: escrowTokenAccount.address,\n paymentToken: params.paymentToken,\n tokenProgram,\n taskId: params.taskId,\n amount: params.amount,\n expiresAt: params.expiresAt,\n transferHook: params.transferHook ?? null,\n isConfidential: params.isConfidential ?? false\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Real escrow created with signature: ${result.signature}`)\n console.log(` Escrow address: ${escrowAddress}`)\n console.log(` Tokens locked: ${params.amount}`)\n \n return escrowAddress.toString()\n }\n\n /**\n * Release escrow funds by submitting work delivery\n * @deprecated Use completeEscrow() followed by processEscrowPayment() for real escrow operations\n */\n async release(\n workDeliveryAddress: Address,\n params: SubmitDeliveryParams\n ): Promise<string> {\n // Resolve parameters with smart defaults\n const resolvedParams = await this._resolveDeliveryParams(params)\n \n const instruction = getSubmitWorkDeliveryInstruction({\n workDelivery: workDeliveryAddress,\n workOrder: resolvedParams.workOrderAddress,\n provider: resolvedParams.signer,\n deliverables: resolvedParams.deliverables,\n ipfsHash: resolvedParams.ipfsHash,\n metadataUri: resolvedParams.metadataUri\n })\n \n const result = await this.sendTransactionWithDetails(\n [instruction],\n [resolvedParams.signer]\n )\n \n return result.signature\n }\n\n /**\n * Complete an escrow (agent marks work as done)\n * This prepares the escrow for payment release but does NOT transfer tokens\n */\n async completeEscrow(\n params: CompleteEscrowParams\n ): Promise<string> {\n console.log('โ๏ธ Completing escrow:', params.escrowAddress)\n \n // Get the escrow account to verify agent authority\n const escrowAccount = await this.getEscrowAccount(params.escrowAddress)\n if (!escrowAccount) {\n throw new Error(`Escrow account not found: ${params.escrowAddress}`)\n }\n\n // Verify the signer is the agent\n if (params.signer.address !== escrowAccount.agent) {\n throw new Error(`Only the agent can complete the escrow. Expected: ${escrowAccount.agent}, got: ${params.signer.address}`)\n }\n\n // Derive the reentrancy guard PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n // Get the agent account PDA (assuming it exists)\n const [agentAccount] = await findProgramDerivedAddress(\n ['agent', escrowAccount.agent],\n this.programId\n )\n\n // Get token program and derive token accounts\n const tokenProgram = await detectTokenProgram(escrowAccount.paymentToken)\n \n // Derive escrow and agent token accounts\n const escrowTokenAccount = await getAssociatedTokenAccount(\n params.escrowAddress,\n escrowAccount.paymentToken,\n tokenProgram\n )\n\n const agentTokenAccount = await getAssociatedTokenAccount(\n escrowAccount.agent,\n escrowAccount.paymentToken,\n tokenProgram\n )\n\n console.log('๐ Escrow Completion Setup:')\n console.log(` Escrow status: ${escrowAccount.status}`)\n console.log(` Agent: ${escrowAccount.agent}`)\n console.log(` Escrow token account: ${escrowTokenAccount.address}`)\n console.log(` Agent token account: ${agentTokenAccount.address}`)\n\n // Build the complete escrow instruction\n const instruction = getCompleteEscrowInstruction({\n escrow: params.escrowAddress,\n reentrancyGuard,\n agent: agentAccount,\n escrowTokenAccount: escrowTokenAccount.address,\n agentTokenAccount: agentTokenAccount.address,\n authority: params.signer,\n tokenProgram,\n resolutionNotes: params.resolutionNotes ?? null\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Escrow marked as completed: ${result.signature}`)\n console.log(` Ready for payment processing`)\n \n return result.signature\n }\n\n /**\n * Cancel escrow and refund to buyer\n */\n async cancel(\n params: CancelEscrowParams\n ): Promise<string> {\n console.log('๐ซ Cancelling escrow:', params.escrowAddress)\n \n // Get the Escrow account to access client and agent information\n const escrowAccount = await this.getEscrowAccount(params.escrowAddress)\n if (!escrowAccount) {\n throw new Error(`Escrow account not found: ${params.escrowAddress}`)\n }\n\n // Derive the reentrancy guard PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n // Get token program and derive token accounts\n const tokenProgram = await detectTokenProgram(params.paymentToken)\n const isToken2022 = await isToken2022Mint(params.paymentToken)\n console.log(` Token program: ${tokenProgram}, Is Token 2022: ${isToken2022}`)\n\n // Derive escrow token account\n const escrowTokenAccount = await getAssociatedTokenAccount(\n params.escrowAddress,\n params.paymentToken,\n tokenProgram\n )\n\n // Derive client refund account\n const clientRefundAccount = await getAssociatedTokenAccount(\n escrowAccount.client,\n params.paymentToken, \n tokenProgram\n )\n\n console.log('๐ฐ Token Account Setup:')\n console.log(` Escrow token account: ${escrowTokenAccount.address}`)\n console.log(` Client refund account: ${clientRefundAccount.address}`)\n\n // Build the cancel escrow instruction\n const instruction = getCancelEscrowInstruction({\n escrow: params.escrowAddress,\n reentrancyGuard,\n escrowTokenAccount: escrowTokenAccount.address,\n clientRefundAccount: clientRefundAccount.address,\n paymentToken: params.paymentToken,\n authority: params.signer,\n tokenProgram,\n cancellationReason: params.cancellationReason\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Escrow cancelled successfully: ${result.signature}`)\n return result.signature\n }\n\n /**\n * Refund an expired escrow back to the client\n */\n async refundExpired(\n params: RefundExpiredEscrowParams\n ): Promise<string> {\n console.log('โฐ Refunding expired escrow:', params.escrowAddress)\n \n // Get the escrow account to access task information\n const escrowAccount = await this.getEscrowAccount(params.escrowAddress)\n if (!escrowAccount) {\n throw new Error(`Escrow account not found: ${params.escrowAddress}`)\n }\n\n // Derive the reentrancy guard PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n // Get token program and derive token accounts\n const tokenProgram = await detectTokenProgram(params.paymentToken)\n \n // Derive escrow and client token accounts\n const escrowTokenAccount = await getAssociatedTokenAccount(\n params.escrowAddress,\n params.paymentToken,\n tokenProgram\n )\n\n const clientRefundAccount = await getAssociatedTokenAccount(\n escrowAccount.client,\n params.paymentToken,\n tokenProgram\n )\n\n console.log('๐ฐ Expired Refund Setup:')\n console.log(` Escrow token account: ${escrowTokenAccount.address}`)\n console.log(` Client refund account: ${clientRefundAccount.address}`)\n\n // Build the refund expired escrow instruction\n const instruction = getRefundExpiredEscrowInstruction({\n escrow: params.escrowAddress,\n reentrancyGuard,\n escrowTokenAccount: escrowTokenAccount.address,\n clientRefundAccount: clientRefundAccount.address,\n paymentToken: params.paymentToken,\n caller: params.signer,\n tokenProgram\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Expired escrow refund processed: ${result.signature}`)\n return result.signature\n }\n\n /**\n * Process a partial refund for disputed escrows (admin only)\n */\n async processPartialRefund(\n params: ProcessPartialRefundParams\n ): Promise<string> {\n console.log('โ๏ธ Processing partial refund for escrow:', params.escrowAddress)\n console.log(` Client refund percentage: ${params.clientRefundPercentage}%`)\n \n // Validate percentage\n if (params.clientRefundPercentage < 0 || params.clientRefundPercentage > 100) {\n throw new Error('Client refund percentage must be between 0 and 100')\n }\n\n // Get the escrow account to access client and agent information\n const escrowAccount = await this.getEscrowAccount(params.escrowAddress)\n if (!escrowAccount) {\n throw new Error(`Escrow account not found: ${params.escrowAddress}`)\n }\n\n // Derive the reentrancy guard PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n // Get token program and derive token accounts\n const tokenProgram = await detectTokenProgram(params.paymentToken)\n \n // Derive all required token accounts\n const escrowTokenAccount = await getAssociatedTokenAccount(\n params.escrowAddress,\n params.paymentToken,\n tokenProgram\n )\n\n const clientRefundAccount = await getAssociatedTokenAccount(\n escrowAccount.client,\n params.paymentToken,\n tokenProgram\n )\n\n const agentPaymentAccount = await getAssociatedTokenAccount(\n escrowAccount.agent,\n params.paymentToken,\n tokenProgram\n )\n\n console.log('๐ฐ Partial Refund Setup:')\n console.log(` Escrow token account: ${escrowTokenAccount.address}`)\n console.log(` Client refund account: ${clientRefundAccount.address}`)\n console.log(` Agent payment account: ${agentPaymentAccount.address}`)\n\n // Build the process partial refund instruction\n const instruction = getProcessPartialRefundInstruction({\n escrow: params.escrowAddress,\n reentrancyGuard,\n escrowTokenAccount: escrowTokenAccount.address,\n clientRefundAccount: clientRefundAccount.address,\n agentPaymentAccount: agentPaymentAccount.address,\n paymentToken: params.paymentToken,\n authority: params.signer,\n tokenProgram,\n clientRefundPercentage: params.clientRefundPercentage\n })\n\n // Send the transaction \n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Partial refund processed successfully: ${result.signature}`)\n return result.signature\n }\n\n /**\n * Dispute an escrow (requires arbitration)\n * @deprecated Use disputeEscrow() for real escrow dispute handling\n */\n async dispute(params: DisputeParams): Promise<string> {\n console.warn('โ ๏ธ Using deprecated dispute method. Please use disputeEscrow() instead.')\n return this.disputeEscrow({\n ...params,\n disputeReason: params.reason\n })\n }\n\n /**\n * Dispute an escrow with real dispute handling\n */\n async disputeEscrow(\n params: DisputeEscrowParams\n ): Promise<string> {\n console.log('โ๏ธ Disputing escrow:', params.escrowAddress)\n \n // Get the escrow account to verify authority\n const escrowAccount = await this.getEscrowAccount(params.escrowAddress)\n if (!escrowAccount) {\n throw new Error(`Escrow account not found: ${params.escrowAddress}`)\n }\n\n // Verify the signer is either client or agent\n if (params.signer.address !== escrowAccount.client && \n params.signer.address !== escrowAccount.agent) {\n throw new Error('Only the client or agent can dispute the escrow')\n }\n\n // Derive the reentrancy guard PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n console.log('๐ Dispute Setup:')\n console.log(` Escrow status: ${escrowAccount.status}`)\n console.log(` Disputant: ${params.signer.address}`)\n console.log(` Reason: ${params.disputeReason}`)\n\n // Build the dispute escrow instruction\n const instruction = getDisputeEscrowInstruction({\n escrow: params.escrowAddress,\n reentrancyGuard,\n authority: params.signer,\n disputeReason: params.disputeReason\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Escrow disputed successfully: ${result.signature}`)\n console.log(` Escrow is now frozen pending resolution`)\n \n return result.signature\n }\n\n /**\n * Calculate transfer fees for Token 2022 payments\n * \n * @param amount - Payment amount in token base units\n * @param tokenMint - Token mint address\n * @returns Promise<TransferFeeCalculation | null> - Fee calculation or null if no fees\n */\n async calculatePaymentFees(\n amount: bigint,\n tokenMint: Address\n ): Promise<TransferFeeCalculation | null> {\n try {\n // Check if this is a Token 2022 mint with transfer fees\n const isToken2022 = await isToken2022Mint(tokenMint)\n if (!isToken2022) {\n return null // No fees for SPL Token\n }\n\n // Get transfer fee configuration (this would need RPC implementation)\n // For now, using example fee configuration\n const exampleFeeConfig = createTransferFeeConfig({\n transferFeeBasisPoints: 250, // 2.5% fee\n maximumFee: 1000000n, // 1 token maximum fee\n transferFeeConfigAuthority: null,\n withdrawWithheldAuthority: null\n })\n\n console.log('๐ฐ Calculating Token 2022 transfer fees:')\n const feeCalculation = calculateTransferFee(amount, exampleFeeConfig)\n \n console.log(` Transfer amount: ${amount}`)\n console.log(` Fee amount: ${feeCalculation.feeAmount}`)\n console.log(` Net amount: ${feeCalculation.netAmount}`)\n console.log(` Fee rate: ${feeCalculation.feeBasisPoints / 100}%`)\n console.log(` Fee capped: ${feeCalculation.wasFeeCapped}`)\n\n return feeCalculation\n } catch (error) {\n console.error('Failed to calculate payment fees:', error)\n return null\n }\n }\n\n /**\n * Process payment with Token 2022 support including transfer fees\n * \n * @param paymentAddress - Payment account address\n * @param params - Payment parameters\n * @returns Promise<{ signature: string, feeCalculation?: TransferFeeCalculation }>\n */\n async processPaymentWithFees(\n paymentAddress: Address,\n params: ProcessPaymentParams\n ): Promise<{ signature: string, feeCalculation?: TransferFeeCalculation }> {\n // Resolve parameters with smart defaults and ATA derivation\n const resolvedParams = await this._resolvePaymentParams(params)\n \n // Calculate transfer fees if Token 2022\n const feeCalculation = await this.calculatePaymentFees(\n resolvedParams.amount,\n resolvedParams.tokenMint\n )\n \n // Adjust payment amount if fees are expected\n let adjustedAmount = resolvedParams.amount\n if (feeCalculation && resolvedParams.expectTransferFees) {\n // If fees are expected, the payer needs to send more to cover fees\n adjustedAmount = feeCalculation.transferAmount\n \n console.log('๐ Payment amount adjusted for fees:')\n console.log(` Requested net amount: ${resolvedParams.amount}`)\n console.log(` Total amount with fees: ${adjustedAmount}`)\n console.log(` Transfer fees: ${feeCalculation.feeAmount}`)\n }\n\n // Generate confidential transfer proof if needed\n if (resolvedParams.useConfidentialTransfer && !resolvedParams.confidentialProof) {\n console.log('๐ Generating confidential transfer proof...')\n // This would require ElGamal keypairs - placeholder for now\n // const proof = await generateConfidentialTransferProof(...)\n console.warn('Confidential transfer proof generation requires ElGamal keypairs')\n }\n\n const instruction = getProcessPaymentInstruction({\n payment: paymentAddress,\n workOrder: resolvedParams.workOrderAddress,\n providerAgent: resolvedParams.providerAgent,\n payer: resolvedParams.signer,\n payerTokenAccount: resolvedParams.payerTokenAccount,\n providerTokenAccount: resolvedParams.providerTokenAccount,\n tokenMint: resolvedParams.tokenMint,\n amount: adjustedAmount, // Use adjusted amount that includes fees\n useConfidentialTransfer: resolvedParams.useConfidentialTransfer\n })\n \n const result = await this.sendTransactionWithDetails(\n [instruction],\n [resolvedParams.signer]\n )\n \n return {\n signature: result.signature,\n feeCalculation: feeCalculation ?? undefined\n }\n }\n\n /**\n * Create Associated Token Accounts for escrow participants\n * \n * @param tokenMint - Token mint address\n * @param participants - Array of wallet addresses that need ATAs\n * @returns Promise<AssociatedTokenAccount[]> - Created ATA information\n */\n async createEscrowTokenAccounts(\n tokenMint: Address,\n participants: Address[]\n ): Promise<AssociatedTokenAccount[]> {\n console.log('๐ฆ Creating escrow token accounts...')\n \n const tokenProgram = await detectTokenProgram(tokenMint)\n const isToken2022 = await isToken2022Mint(tokenMint)\n \n console.log(` Token mint: ${tokenMint}`)\n console.log(` Token program: ${tokenProgram}`)\n console.log(` Is Token 2022: ${isToken2022}`)\n \n const ataInfos: AssociatedTokenAccount[] = []\n \n for (const participant of participants) {\n const ataInfo = await getAssociatedTokenAccount(\n participant,\n tokenMint,\n tokenProgram\n )\n \n ataInfos.push(ataInfo)\n console.log(` Created ATA for ${participant}: ${ataInfo.address}`)\n }\n \n return ataInfos\n }\n\n /**\n * Process escrow payment release - transfers tokens from escrow to agent\n * This should be called after completeEscrow() to actually release the funds\n */\n async processEscrowPayment(\n params: ProcessEscrowPaymentParams\n ): Promise<string> {\n console.log('๐ธ Processing escrow payment release:', params.escrowAddress)\n \n // Get the escrow account to verify it's completed\n const escrowAccount = await this.getEscrowAccount(params.escrowAddress)\n if (!escrowAccount) {\n throw new Error(`Escrow account not found: ${params.escrowAddress}`)\n }\n\n // Verify escrow is in completed state\n const { EscrowStatus } = await import('../../generated/index.js')\n if (escrowAccount.status !== EscrowStatus.Completed) {\n throw new Error(`Escrow must be completed before payment. Current status: ${escrowAccount.status}`)\n }\n\n // Derive the payment PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [paymentAddress] = await findProgramDerivedAddress(\n ['payment', params.escrowAddress],\n this.programId\n )\n\n // Derive the reentrancy guard PDA\n const [reentrancyGuard] = await findProgramDerivedAddress(\n ['reentrancy_guard'],\n this.programId\n )\n\n // Get token program and derive token accounts\n const tokenProgram = await detectTokenProgram(params.paymentToken)\n \n // Derive escrow token account\n const escrowTokenAccount = await getAssociatedTokenAccount(\n params.escrowAddress,\n params.paymentToken,\n tokenProgram\n )\n\n // Derive recipient (agent) token account\n const recipientTokenAccount = await getAssociatedTokenAccount(\n escrowAccount.agent,\n params.paymentToken,\n tokenProgram\n )\n\n console.log('๐ฐ Payment Processing Setup:')\n console.log(` Payment address: ${paymentAddress}`)\n console.log(` Escrow amount: ${escrowAccount.amount}`)\n console.log(` Recipient (agent): ${escrowAccount.agent}`)\n console.log(` Escrow token account: ${escrowTokenAccount.address}`)\n console.log(` Recipient token account: ${recipientTokenAccount.address}`)\n\n // Build the process payment instruction\n const instruction = getProcessEscrowPaymentInstruction({\n payment: paymentAddress,\n escrow: params.escrowAddress,\n reentrancyGuard,\n escrowTokenAccount: escrowTokenAccount.address,\n recipientTokenAccount: recipientTokenAccount.address,\n recipient: escrowAccount.agent,\n paymentToken: params.paymentToken,\n authority: params.signer,\n tokenProgram,\n workOrder: params.workOrder\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Escrow payment processed: ${result.signature}`)\n console.log(` Tokens transferred to agent: ${escrowAccount.amount}`)\n console.log(` Payment record created: ${paymentAddress}`)\n \n return result.signature\n }\n\n /**\n * Process payment through escrow (legacy method for backward compatibility)\n * @deprecated Use processEscrowPayment() for real escrow payment processing\n */\n async processPayment(\n paymentAddress: Address,\n params: ProcessPaymentParams\n ): Promise<string> {\n // Resolve parameters with smart defaults\n const resolvedParams = await this._resolvePaymentParams(params)\n \n const instruction = getProcessPaymentInstruction({\n payment: paymentAddress,\n workOrder: resolvedParams.workOrderAddress,\n providerAgent: resolvedParams.providerAgent,\n payer: resolvedParams.signer,\n payerTokenAccount: resolvedParams.payerTokenAccount,\n providerTokenAccount: resolvedParams.providerTokenAccount,\n tokenMint: resolvedParams.tokenMint,\n amount: resolvedParams.amount,\n useConfidentialTransfer: resolvedParams.useConfidentialTransfer\n })\n \n const result = await this.sendTransactionWithDetails(\n [instruction],\n [resolvedParams.signer]\n )\n \n return result.signature\n }\n\n /**\n * Get work order (escrow) account information using centralized pattern\n */\n async getAccount(workOrderAddress: Address): Promise<WorkOrder | null> {\n return this.getDecodedAccount<WorkOrder>(workOrderAddress, 'getWorkOrderDecoder')\n }\n\n /**\n * Get escrow account information using centralized pattern\n */\n async getEscrowAccount(escrowAddress: Address): Promise<Escrow | null> {\n return this.getDecodedAccount<Escrow>(escrowAddress, 'getEscrowDecoder')\n }\n\n /**\n * Get all escrows for a user using centralized pattern\n */\n async getEscrowsForUser(userAddress: Address): Promise<WorkOrder[]> {\n const accounts = await this.getDecodedProgramAccounts<WorkOrder>('getWorkOrderDecoder')\n \n // Filter work orders where user is either client or provider\n return accounts\n .map(({ data }) => data)\n .filter(workOrder => \n workOrder.client === userAddress || \n workOrder.provider === userAddress\n )\n }\n\n /**\n * Get all active escrows using centralized pattern\n */\n async getActiveEscrows(): Promise<WorkOrder[]> {\n const accounts = await this.getDecodedProgramAccounts<WorkOrder>('getWorkOrderDecoder')\n \n // Filter work orders that are active (not completed/cancelled)\n try {\n const { WorkOrderStatus } = await import('../../generated/index.js')\n return accounts\n .map(({ data }) => data)\n .filter(workOrder => \n workOrder.status === WorkOrderStatus.Open || \n workOrder.status === WorkOrderStatus.InProgress ||\n workOrder.status === WorkOrderStatus.Submitted\n )\n } catch (error) {\n console.warn('Failed to load WorkOrderStatus enum, returning all escrows:', error)\n return accounts.map(({ data }) => data)\n }\n }\n\n /**\n * Verify work delivery and approve payment release\n * Client uses this to verify that the delivered work meets requirements\n */\n async verifyWorkDelivery(params: {\n workOrderAddress: Address\n verificationNotes?: string\n signer: TransactionSigner\n }): Promise<string> {\n console.log('โ
Verifying work delivery:', params.workOrderAddress)\n \n // Get the work order account\n const workOrder = await this.getAccount(params.workOrderAddress)\n if (!workOrder) {\n throw new Error(`Work order not found: ${params.workOrderAddress}`)\n }\n\n // Verify the signer is the client\n if (params.signer.address !== workOrder.client) {\n throw new Error('Only the client can verify work delivery')\n }\n\n // Derive work delivery PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [workDeliveryAddress] = await findProgramDerivedAddress(\n ['work_delivery', params.workOrderAddress],\n this.programId\n )\n\n console.log('๐ Verification Setup:')\n console.log(` Work order status: ${workOrder.status}`)\n console.log(` Work delivery PDA: ${workDeliveryAddress}`)\n console.log(` Verification notes: ${params.verificationNotes ?? 'None'}`)\n\n // Build the verify work delivery instruction\n const instruction = getVerifyWorkDeliveryInstruction({\n workOrder: params.workOrderAddress,\n workDelivery: workDeliveryAddress,\n client: params.signer,\n verificationNotes: params.verificationNotes ?? null\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ
Work delivery verified successfully: ${result.signature}`)\n return result.signature\n }\n\n /**\n * Reject work delivery and request changes\n * Client uses this when delivered work doesn't meet requirements\n */\n async rejectWorkDelivery(params: {\n workOrderAddress: Address\n rejectionReason: string\n requestedChanges?: string[]\n signer: TransactionSigner\n }): Promise<string> {\n console.log('โ Rejecting work delivery:', params.workOrderAddress)\n \n // Get the work order account\n const workOrder = await this.getAccount(params.workOrderAddress)\n if (!workOrder) {\n throw new Error(`Work order not found: ${params.workOrderAddress}`)\n }\n\n // Verify the signer is the client\n if (params.signer.address !== workOrder.client) {\n throw new Error('Only the client can reject work delivery')\n }\n\n // Validate rejection reason\n if (!params.rejectionReason || params.rejectionReason.trim().length === 0) {\n throw new Error('Rejection reason is required')\n }\n\n // Derive work delivery PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [workDeliveryAddress] = await findProgramDerivedAddress(\n ['work_delivery', params.workOrderAddress],\n this.programId\n )\n\n console.log('๐ Rejection Setup:')\n console.log(` Work order status: ${workOrder.status}`)\n console.log(` Rejection reason: ${params.rejectionReason}`)\n console.log(` Requested changes: ${params.requestedChanges?.length ?? 0} items`)\n\n // Build the reject work delivery instruction\n const instruction = getRejectWorkDeliveryInstruction({\n workOrder: params.workOrderAddress,\n workDelivery: workDeliveryAddress,\n client: params.signer,\n rejectionReason: params.rejectionReason,\n requestedChanges: params.requestedChanges ?? null\n })\n\n // Send the transaction\n const result = await this.sendTransactionWithDetails(\n [instruction],\n [params.signer]\n )\n\n console.log(`โ Work delivery rejected: ${result.signature}`)\n return result.signature\n }\n\n /**\n * Get work delivery details for a work order\n */\n async getWorkDelivery(workOrderAddress: Address): Promise<WorkDelivery | null> {\n // Derive work delivery PDA\n const { findProgramDerivedAddress } = await import('../../utils/pda.js')\n const [workDeliveryAddress] = await findProgramDerivedAddress(\n ['work_delivery', workOrderAddress],\n this.programId\n )\n\n return this.getDecodedAccount<WorkDelivery>(workDeliveryAddress, 'getWorkDeliveryDecoder')\n }\n}"]}
|