@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
package/dist/chunk-C2OTQ5YS.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {address}from'@solana/addresses';var t=address("ZkE1Gama1Proof11111111111111111111111111111");var i={CIPHERTEXT:64,COMMITMENT:32,VALIDITY_PROOF:96,EQUALITY_PROOF:192,RANGE_PROOF_MIN:128,RANGE_PROOF_BULLETPROOF:674,MAX_PROOF_DATA:1232};export{t as a,i as b};//# sourceMappingURL=chunk-C2OTQ5YS.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-C2OTQ5YS.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/zk-proof-program.ts"],"names":["ZK_ELGAMAL_PROOF_PROGRAM_ADDRESS","address","PROOF_SIZES"],"mappings":"wCAmBO,IAAMA,CAAAA,CAAmCC,QAAQ,6CAA6C,EAuI9F,IAAMC,CAAAA,CAAc,CAEzB,UAAA,CAAY,GAGZ,UAAA,CAAY,EAAA,CAGZ,cAAA,CAAgB,EAAA,CAGhB,cAAA,CAAgB,GAAA,CAGhB,gBAAiB,GAAA,CAGjB,uBAAA,CAAyB,GAAA,CAGzB,cAAA,CAAgB,IAClB","file":"chunk-C2OTQ5YS.js","sourcesContent":["/**\n * Solana ZK ElGamal Proof Program Constants\n * \n * Constants and types for interacting with Solana's native ZK ElGamal Proof Program.\n * This program is used for verifying zero-knowledge proofs in confidential transfers.\n * \n * Program ID: ZkE1Gama1Proof11111111111111111111111111111\n * \n * Note: As of June 2025, the ZK ElGamal proof program has been temporarily\n * disabled on mainnet due to security vulnerabilities. This implementation\n * prepares for its re-enablement after audits are completed.\n */\n\nimport { address } from '@solana/addresses'\n\n/**\n * ZK ElGamal Proof Program Address\n * This is Solana's native program for verifying ElGamal-based zero-knowledge proofs\n */\nexport const ZK_ELGAMAL_PROOF_PROGRAM_ADDRESS = address('ZkE1Gama1Proof11111111111111111111111111111')\n\n/**\n * Proof instruction discriminators for the ZK ElGamal Proof Program\n * These discriminators identify different proof verification instructions\n */\nexport enum ProofInstruction {\n /** Verify a transfer proof (range + validity proofs) */\n VerifyTransfer = 0,\n \n /** Verify a withdraw proof */\n VerifyWithdraw = 1,\n \n /** Verify a range proof only */\n VerifyRangeProof = 2,\n \n /** Verify a validity proof only */\n VerifyValidityProof = 3,\n \n /** Verify an equality proof */\n VerifyEqualityProof = 4,\n \n /** Verify a transfer with fee proof */\n VerifyTransferWithFee = 5,\n \n /** Verify a batch of range proofs */\n VerifyBatchedRangeProof = 6,\n \n /** Verify a batch of validity proofs */\n VerifyBatchedValidityProof = 7,\n \n /** Close proof context account */\n CloseContextState = 8,\n}\n\n/**\n * Proof data structure for transfer verification\n */\nexport interface TransferProofData {\n /** The encrypted transfer amount (ElGamal ciphertext) */\n encryptedTransferAmount: Uint8Array // 64 bytes\n \n /** Source account's new encrypted balance commitment */\n newSourceCommitment: Uint8Array // 32 bytes\n \n /** Equality proof for source balance */\n equalityProof: Uint8Array // 192 bytes\n \n /** Validity proof for the transfer */\n validityProof: Uint8Array // 96 bytes\n \n /** Range proof for the transfer amount and remaining balance */\n rangeProof: Uint8Array // Variable size (typically 674+ bytes for bulletproofs)\n}\n\n/**\n * Proof data structure for withdraw verification\n */\nexport interface WithdrawProofData {\n /** The encrypted withdraw amount */\n encryptedWithdrawAmount: Uint8Array // 64 bytes\n \n /** New source balance commitment after withdrawal */\n newSourceCommitment: Uint8Array // 32 bytes\n \n /** Equality proof for balance update */\n equalityProof: Uint8Array // 192 bytes\n \n /** Range proof for remaining balance */\n rangeProof: Uint8Array // Variable size\n}\n\n/**\n * Proof data structure for transfer with fee\n */\nexport interface TransferWithFeeProofData {\n /** Transfer proof data */\n transferProof: TransferProofData\n \n /** Fee amount encryption */\n encryptedFeeAmount: Uint8Array // 64 bytes\n \n /** Fee commitment */\n feeCommitment: Uint8Array // 32 bytes\n \n /** Fee validity proof */\n feeValidityProof: Uint8Array // 96 bytes\n}\n\n/**\n * Context for batched proof verification\n */\nexport interface BatchProofContext {\n /** Number of proofs in the batch */\n proofCount: number\n \n /** Maximum proofs per batch (system limit) */\n maxProofsPerBatch: number\n \n /** Current batch index */\n batchIndex: number\n}\n\n/**\n * Error codes returned by the ZK ElGamal Proof Program\n */\nexport enum ZkProofError {\n /** Invalid proof format or size */\n InvalidProofFormat = 0,\n \n /** Proof verification failed */\n ProofVerificationFailed = 1,\n \n /** Invalid public inputs */\n InvalidPublicInputs = 2,\n \n /** Proof context mismatch */\n ProofContextMismatch = 3,\n \n /** Batch size exceeded */\n BatchSizeExceeded = 4,\n \n /** Invalid instruction data */\n InvalidInstructionData = 5,\n \n /** Account not initialized */\n AccountNotInitialized = 6,\n \n /** Unauthorized signer */\n UnauthorizedSigner = 7,\n}\n\n/**\n * Maximum sizes for different proof types\n */\nexport const PROOF_SIZES = {\n /** ElGamal ciphertext size */\n CIPHERTEXT: 64,\n \n /** Pedersen commitment size */\n COMMITMENT: 32,\n \n /** Validity proof size */\n VALIDITY_PROOF: 96,\n \n /** Equality proof size */\n EQUALITY_PROOF: 192,\n \n /** Minimum range proof size (simplified) */\n RANGE_PROOF_MIN: 128,\n \n /** Typical bulletproof size for 64-bit range */\n RANGE_PROOF_BULLETPROOF: 674,\n \n /** Maximum proof data size for a single instruction */\n MAX_PROOF_DATA: 1232, // Solana transaction size limit consideration\n} as const\n\n/**\n * Proof verification compute unit costs (approximate)\n */\nexport const PROOF_COMPUTE_UNITS = {\n /** Base cost for proof instruction */\n BASE: 5000,\n \n /** Validity proof verification */\n VALIDITY: 10000,\n \n /** Equality proof verification */\n EQUALITY: 15000,\n \n /** Range proof verification (bulletproof) */\n RANGE_BULLETPROOF: 100000,\n \n /** Simplified range proof verification */\n RANGE_SIMPLIFIED: 20000,\n \n /** Batch overhead per proof */\n BATCH_OVERHEAD: 2000,\n} as const\n\n/**\n * Helper to calculate total compute units for a proof verification\n */\nexport function calculateProofComputeUnits(\n proofType: ProofInstruction,\n isBulletproof = true,\n batchSize = 1\n): number {\n let units = PROOF_COMPUTE_UNITS.BASE\n \n switch (proofType) {\n case ProofInstruction.VerifyTransfer:\n units += PROOF_COMPUTE_UNITS.VALIDITY\n units += PROOF_COMPUTE_UNITS.EQUALITY\n units += isBulletproof ? PROOF_COMPUTE_UNITS.RANGE_BULLETPROOF : PROOF_COMPUTE_UNITS.RANGE_SIMPLIFIED\n break\n \n case ProofInstruction.VerifyWithdraw:\n units += PROOF_COMPUTE_UNITS.EQUALITY\n units += isBulletproof ? PROOF_COMPUTE_UNITS.RANGE_BULLETPROOF : PROOF_COMPUTE_UNITS.RANGE_SIMPLIFIED\n break\n \n case ProofInstruction.VerifyRangeProof:\n units += isBulletproof ? PROOF_COMPUTE_UNITS.RANGE_BULLETPROOF : PROOF_COMPUTE_UNITS.RANGE_SIMPLIFIED\n break\n \n case ProofInstruction.VerifyValidityProof:\n units += PROOF_COMPUTE_UNITS.VALIDITY\n break\n \n case ProofInstruction.VerifyEqualityProof:\n units += PROOF_COMPUTE_UNITS.EQUALITY\n break\n \n case ProofInstruction.VerifyBatchedRangeProof:\n case ProofInstruction.VerifyBatchedValidityProof:\n units += PROOF_COMPUTE_UNITS.BATCH_OVERHEAD * batchSize\n if (proofType === ProofInstruction.VerifyBatchedRangeProof) {\n units += (isBulletproof ? PROOF_COMPUTE_UNITS.RANGE_BULLETPROOF : PROOF_COMPUTE_UNITS.RANGE_SIMPLIFIED) * batchSize\n } else {\n units += PROOF_COMPUTE_UNITS.VALIDITY * batchSize\n }\n break\n }\n \n return units\n}\n\n/**\n * Export all constants as a single object for convenience\n */\nexport const ZK_PROOF_CONSTANTS = {\n programAddress: ZK_ELGAMAL_PROOF_PROGRAM_ADDRESS,\n instructions: ProofInstruction,\n errors: ZkProofError,\n sizes: PROOF_SIZES,\n computeUnits: PROOF_COMPUTE_UNITS,\n} as const"]}
|
package/dist/chunk-CTC4ZJ26.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import {b}from'./chunk-DOTF5ECA.js';import {c}from'./chunk-KK3HV2RD.js';import {$i,Uk,_l,ud,A as A$1,Ob,Oa,za,Kd,wi,Gb,Tj,ph,xh,Fl,I}from'./chunk-QTKN3VZV.js';import {t,s}from'./chunk-FKEUXXZS.js';import {n,a}from'./chunk-TAWXH7KX.js';import {createSolanaRpc,createSolanaRpcSubscriptions,lamports,pipe,createTransactionMessage,setTransactionMessageFeePayerSigner,setTransactionMessageLifetimeUsingBlockhash,appendTransactionMessageInstructions,signTransactionMessageWithSigners,setTransactionMessageFeePayer,compileTransactionMessage,getBase64EncodedWireTransaction}from'@solana/kit';var A=class{rpc;rpcSubscriptions;commitment;endpoint;maxRetries;retryDelay;timeout;constructor(e){this.endpoint=e.endpoint,this.rpc=createSolanaRpc(e.endpoint),this.commitment=e.commitment??"confirmed",this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3,this.timeout=e.timeout??6e4,e.wsEndpoint&&(this.rpcSubscriptions=createSolanaRpcSubscriptions(e.wsEndpoint));}async getAccountInfo(e,t){return this.withRetry(async()=>{let s=await this.rpc.getAccountInfo(e,{commitment:t?.commitment??this.commitment,encoding:"base64"}).send();return s.value?this.parseAccountInfo(s.value):null})}async getMultipleAccounts(e,t){return this.withRetry(async()=>(await this.rpc.getMultipleAccounts(e,{commitment:t?.commitment??this.commitment,encoding:"base64"}).send()).value.map(n=>n?this.parseAccountInfo(n):null))}async getProgramAccounts(e,t){return this.withRetry(async()=>(await this.rpc.getProgramAccounts(e,{commitment:t?.commitment??this.commitment,encoding:"base64",filters:t?.filters}).send()).map(n=>{let i=n;return {pubkey:i.pubkey,account:this.parseAccountInfo(i.account)}}))}blockhashCache=null;async getLatestBlockhash(){let e=Date.now();if(this.blockhashCache&&e-this.blockhashCache.timestamp<1e3)return this.blockhashCache.value;let t=await this.withRetry(async()=>{let s=await this.rpc.getLatestBlockhash({commitment:this.commitment}).send();return {blockhash:s.value.blockhash,lastValidBlockHeight:BigInt(s.value.lastValidBlockHeight)}});return this.blockhashCache={value:t,timestamp:e},t}async sendTransaction(e,t){return this.withRetry(async()=>await this.rpc.sendTransaction(e,{encoding:"base64",skipPreflight:t?.skipPreflight??false,preflightCommitment:t?.preflightCommitment??this.commitment,maxRetries:t?.maxRetries?BigInt(t.maxRetries):void 0}).send())}async getSignatureStatuses(e){return this.withRetry(async()=>(await this.rpc.getSignatureStatuses(e).send()).value.map(s=>{if(!s)return null;let n=s;return {slot:n.slot,confirmations:n.confirmations,err:n.err,confirmationStatus:n.confirmationStatus}}))}async simulateTransaction(e,t){return this.withRetry(async()=>{let s=await this.rpc.simulateTransaction(e,{encoding:"base64",commitment:t?.commitment??this.commitment,replaceRecentBlockhash:t?.replaceRecentBlockhash??false}).send();return {err:s.value.err,logs:s.value.logs??[],unitsConsumed:s.value.unitsConsumed?BigInt(s.value.unitsConsumed):void 0,returnData:s.value.returnData}})}async getFeeForMessage(e){return this.withRetry(async()=>{let t=await this.rpc.getFeeForMessage(e,{commitment:this.commitment}).send();return t.value?BigInt(t.value):null})}async isHealthy(){try{return await this.rpc.getHealth().send(),!0}catch{return false}}async getVersion(){return await this.rpc.getVersion().send()}async subscribeToAccount(e,t){if(!this.rpcSubscriptions)throw new Error("WebSocket endpoint not configured");console.warn("Account subscription is not fully implemented in this version");let s=setInterval(async()=>{try{let n=await this.getAccountInfo(e);t(n);}catch(n){console.error("Subscription polling error:",n);}},5e3);return ()=>{clearInterval(s);}}async withRetry(e,t=this.maxRetries){let s;for(let n=0;n<=t;n++)try{return await e()}catch(i){s=i,n<t&&await new Promise(r=>setTimeout(r,this.retryDelay*Math.pow(2,n)));}throw s}parseAccountInfo(e){let t=e,s=t.data,n=Array.isArray(s)?s[0]:s;return {executable:t.executable,lamports:typeof t.lamports=="number"?lamports(BigInt(t.lamports)):t.lamports,owner:t.owner,rentEpoch:t.rentEpoch!==void 0?typeof t.rentEpoch=="number"?BigInt(t.rentEpoch):t.rentEpoch:0n,data:Buffer.from(n,"base64"),space:t.space?typeof t.space=="number"?BigInt(t.space):t.space:void 0}}};var v=class d{static instance=null;rpcClient;config;isDevelopment;logs=[];timings=new Map;constructor(e){this.config=e,this.rpcClient=new A({endpoint:e.rpcEndpoint??"https://api.devnet.solana.com",commitment:e.commitment}),this.isDevelopment=process.env.NODE_ENV==="development"||e.cluster==="localnet"||false;}static getInstance(e){if(!d.instance&&e&&(d.instance=new d(e)),!d.instance)throw new Error("DevTools not initialized. Call with config first.");return d.instance}enableDevMode(){this.isDevelopment=true,console.log("\u{1F6E0}\uFE0F GhostSpeak Development Mode Enabled"),console.log(" - Transaction simulation before sending"),console.log(" - Cost estimates for all operations"),console.log(" - Enhanced error messages"),console.log(" - Performance timing");}isDevMode(){return this.isDevelopment}analyzeTransaction(e){let t=new Set,s=new Set,n=new Set,i=[],r=64,u=e.map((l,p)=>{r+=32,r+=(l.accounts?.length??0)*32,r+=l.data?.length??0;let m=(l.accounts??[]).map(c=>{let h=c.role.toString().includes("writable"),f=c.role.toString().includes("signer");return h?t.add(c.address):s.add(c.address),f&&n.add(c.address),{address:c.address,isWritable:h,isSigner:f,role:c.role}}),g=this.getInstructionDescription(l,p);return {index:p,programId:l.programAddress,accountCount:m.length,dataSize:l.data?.length??0,humanReadable:g,accounts:m}}),a=this.estimateComputeUnits(e),o=this.estimateFee(a,e.length);return r>1232&&i.push(`Transaction size (${r} bytes) exceeds limit (1232 bytes)`),n.size===0&&i.push("No signers found in transaction"),a>1400000n&&i.push(`High compute usage: ${a} units`),{instructions:u,totalAccounts:t.size+s.size,signerCount:n.size,writableAccounts:Array.from(t),readonlyAccounts:Array.from(s),estimatedSize:r,estimatedComputeUnits:a,estimatedFee:o,warnings:i}}getInstructionDescription(e,t){let s=e.programAddress;return s===this.config.programId?this.decodeGhostSpeakInstruction(e):s==="11111111111111111111111111111111"?"System Program: Transfer or Create Account":s==="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"?"Token Program: Token Operation":s==="TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"?"Token-2022 Program: Advanced Token Operation":"Unknown Instruction"}decodeGhostSpeakInstruction(e){if(!e.data||e.data.length<8)return "GhostSpeak: Unknown Instruction";let t=Array.from(e.data.slice(0,8)).map(n=>n.toString(16).padStart(2,"0")).join("");return `GhostSpeak: ${{a8c5e109d3d1b8d5:"Register Agent",b7f3c8e0a2d4e9f1:"Create Escrow",c4d2f7a9b8e1c3f5:"Send Message",d9e8f2b5c1a7e4f8:"Create Channel"}[t]??"Custom Instruction"}`}estimateComputeUnits(e){let t=0n;for(let s of e)t+=200n,t+=BigInt((s.accounts?.length??0)*150),t+=BigInt((s.data?.length??0)*10),s.programAddress===this.config.programId&&(t+=5000n);return t}estimateFee(e,t){let s=5000n,n=e*5n/1000000n,i=BigInt(t*1e3);return s+n+i}log(e,t){if(!this.isDevelopment)return;let n=`[${new Date().toISOString()}] ${e}`;this.logs.push(n),console.log(`\u{1F50D} ${n}`),t&&console.log(" Data:",t);}startTiming(e){if(!this.isDevelopment)return;let t=typeof performance<"u"?performance.now():Date.now();this.timings.set(e,t);}endTiming(e){if(!this.isDevelopment)return;let t=this.timings.get(e);if(!t)return;let n=(typeof performance<"u"?performance.now():Date.now())-t;this.log(`${e} took ${n.toFixed(2)}ms`),this.timings.delete(e);}formatTransaction(e){let t=["\u{1F4CB} Transaction Analysis","\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550",`Instructions: ${e.instructions.length}`,`Total Accounts: ${e.totalAccounts}`,`Signers: ${e.signerCount}`,`Estimated Size: ${e.estimatedSize} bytes`,`Estimated Compute Units: ${e.estimatedComputeUnits.toLocaleString()}`,`Estimated Fee: ${(Number(e.estimatedFee)/1e9).toFixed(6)} SOL`,""];t.push("Instructions:");for(let s of e.instructions)t.push(` ${s.index+1}. ${s.humanReadable}`),t.push(` Program: ${s.programId.slice(0,8)}...`),t.push(` Accounts: ${s.accountCount}, Data: ${s.dataSize} bytes`);if(e.warnings.length>0){t.push(""),t.push("\u26A0\uFE0F Warnings:");for(let s of e.warnings)t.push(` - ${s}`);}return t.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),t.join(`
|
|
2
|
-
`)}exportLogs(){return [...this.logs]}clearLogs(){this.logs=[],this.timings.clear();}};function C(d){if(!d.programAddress)throw new Error("Invalid instruction format")}var E=class{rpcClient;config;devTools;debugMode=false;constructor(e){this.config=e,this.rpcClient=new A({endpoint:e.rpcEndpoint??"https://api.devnet.solana.com",wsEndpoint:e.wsEndpoint,commitment:e.commitment??"confirmed"}),this.devTools=v.getInstance(e);}async execute(e,t$1,s$1,n){let i=t("execute",e,s$1.map(r=>({address:r.address,name:"signer"})),{programId:this.config.programId});try{this.devTools.isDevMode()&&this.devTools.startTiming(e);let r=await Promise.resolve(t$1());if(C(r),this.debugMode||this.devTools.isDevMode()){let g=this.devTools.analyzeTransaction([r]);console.log(this.devTools.formatTransaction(g)),this.debugMode=!1;}if(n?.simulate)return await this.simulateInstruction(r,s$1);let u=await this.rpcClient.getLatestBlockhash(),a={blockhash:u.blockhash,lastValidBlockHeight:u.lastValidBlockHeight},o=pipe(createTransactionMessage({version:0}),g=>setTransactionMessageFeePayerSigner(s$1[0],g),g=>setTransactionMessageLifetimeUsingBlockhash(a,g),g=>appendTransactionMessageInstructions([r],g)),l=await signTransactionMessageWithSigners(o),p=await this.sendAndConfirm(l,n?.skipPreflight??!1,n?.maxRetries??30);if(typeof p!="string")throw new Error("Transaction signature is not a string");let m=p;if(n?.returnDetails){let g=this.config.cluster??"devnet",c=b(m,g,this.config.commitment??"confirmed");return this.devTools.isDevMode()&&this.devTools.endTiming(e),c}return this.devTools.isDevMode()&&this.devTools.endTiming(e),m}catch(r){throw s(r,i),r}}async executeBatch(e,t$1,s$1,n){let i=t("executeBatch",e,s$1.map(r=>({address:r.address,name:"signer"})),{programId:this.config.programId,instructionCount:t$1.length});try{let r=await Promise.all(t$1.map(async(c,h)=>{let f=await Promise.resolve(c());try{return C(f),f}catch(ue){throw new Error(`Instruction ${h} in ${e}: ${ue.message}`)}})),u=this.estimateTransactionSize(r);if(u>1232)throw new Error(`Transaction too large: ${u} bytes (max: 1232)`);if(n?.simulate)return await this.simulateBatch(r,s$1);let a=await this.rpcClient.getLatestBlockhash(),o={blockhash:a.blockhash,lastValidBlockHeight:a.lastValidBlockHeight},l=pipe(createTransactionMessage({version:0}),c=>setTransactionMessageFeePayerSigner(s$1[0],c),c=>setTransactionMessageLifetimeUsingBlockhash(o,c),c=>appendTransactionMessageInstructions(r,c)),p=await signTransactionMessageWithSigners(l),m=await this.sendAndConfirm(p,n?.skipPreflight??!1);if(typeof m!="string")throw new Error("Transaction signature is not a string");let g=m;if(n?.returnDetails){let c=this.config.cluster??"devnet",h=b(g,c,this.config.commitment??"confirmed");return this.devTools.isDevMode()&&this.devTools.endTiming(e),h}return this.devTools.isDevMode()&&this.devTools.endTiming(e),g}catch(r){throw s(r,i),r}}async getAccount(e,t){try{let s=await this.rpcClient.getAccountInfo(e,{commitment:this.config.commitment});if(!s)return null;let i=(await import('./generated-U3L4KUE4.js'))[t],r=i(),u=this.extractRawData(s.data);return r.decode(u)}catch(s){return console.warn(`Failed to fetch account ${e}:`,s),null}}async getAccounts(e,t){try{let s=await this.rpcClient.getMultipleAccounts(e,{commitment:this.config.commitment}),i=(await import('./generated-U3L4KUE4.js'))[t],r=i();return s.map(u=>{if(!u)return null;try{let a=this.extractRawData(u.data);return r.decode(a)}catch{return null}})}catch(s){return console.warn("Failed to fetch multiple accounts:",s),e.map(()=>null)}}async getProgramAccounts(e,t){try{let s=t?.map(o=>"dataSize"in o?{dataSize:o.dataSize}:(o.memcmp.encoding??"base58")==="base64"?{memcmp:{offset:o.memcmp.offset,bytes:o.memcmp.bytes,encoding:"base64"}}:{memcmp:{offset:o.memcmp.offset,bytes:o.memcmp.bytes,encoding:"base58"}}),n=await this.rpcClient.getProgramAccounts(this.config.programId,{commitment:this.config.commitment,filters:s??[]}),r=(await import('./generated-U3L4KUE4.js'))[e],u=r(),a=[];for(let{pubkey:o,account:l}of n)try{let p=this.extractRawData(l.data),m=u.decode(p);a.push({address:o,data:m});}catch{}return a}catch(s){return console.error("Failed to get program accounts:",s),[]}}enableDebug(){return this.debugMode=true,this}async debug(e,t){this.devTools.log(`Debugging ${e}`);let s=await Promise.all(t.map(async i=>{let r=await Promise.resolve(i());return C(r),r})),n=this.devTools.analyzeTransaction(s);return console.log(this.devTools.formatTransaction(n)),n}async explain(e,t){let s=await this.debug(e,t),n=[`\u{1F50D} Transaction: ${e}`,"","This transaction will:",...s.instructions.map((i,r)=>` ${r+1}. ${i.humanReadable}`),"",`Cost: ~${(Number(s.estimatedFee)/1e9).toFixed(6)} SOL`,`Size: ${s.estimatedSize} bytes`,`Compute: ${s.estimatedComputeUnits.toLocaleString()} units`];return s.warnings.length>0&&(n.push("","\u26A0\uFE0F Warnings:"),n.push(...s.warnings.map(i=>` - ${i}`))),n.join(`
|
|
3
|
-
`)}async estimateCost(e){try{let t=await Promise.all(e.map(async o=>{let l=await Promise.resolve(o());return C(l),l})),s=await this.rpcClient.getLatestBlockhash(),n={blockhash:s.blockhash,lastValidBlockHeight:s.lastValidBlockHeight},i=pipe(createTransactionMessage({version:0}),o=>setTransactionMessageFeePayer(this.config.defaultFeePayer,o),o=>setTransactionMessageLifetimeUsingBlockhash(n,o),o=>appendTransactionMessageInstructions(t,o)),r=compileTransactionMessage(i),u=Buffer.from(r).toString("base64"),a=await this.rpcClient.getFeeForMessage(u);return BigInt(a??0)}catch{return 5000n+BigInt(e.length)*1000n}}async sendAndConfirm(e,t,s=30){let n=getBase64EncodedWireTransaction(e),i=await this.rpcClient.sendTransaction(n,{skipPreflight:t,preflightCommitment:this.config.commitment}),r=false,u=0,a=1e3;for(;!r&&u<s;)try{let o=await this.rpcClient.getSignatureStatuses([i]);if(o[0]){if(o[0].err)throw new Error(`Transaction failed: ${JSON.stringify(o[0].err)}`);let l=o[0].confirmationStatus;if(l===this.config.commitment||this.config.commitment==="confirmed"&&l==="finalized"){r=!0;break}}u++,await new Promise(l=>setTimeout(l,a)),a=Math.min(a*1.5,5e3);}catch(o){if(o instanceof Error&&o.message.includes("Transaction failed"))throw o;u++,await new Promise(l=>setTimeout(l,a*2));}if(!r)throw new Error(`Transaction timeout after ${s} attempts. Signature: ${i}`);return i}async simulateInstruction(e,t){let s=await this.rpcClient.getLatestBlockhash(),n={blockhash:s.blockhash,lastValidBlockHeight:s.lastValidBlockHeight},i=pipe(createTransactionMessage({version:0}),a=>setTransactionMessageFeePayerSigner(t[0],a),a=>setTransactionMessageLifetimeUsingBlockhash(n,a),a=>appendTransactionMessageInstructions([e],a)),r=await signTransactionMessageWithSigners(i),u=getBase64EncodedWireTransaction(r);return this.rpcClient.simulateTransaction(u,{commitment:this.config.commitment,replaceRecentBlockhash:true})}async simulateBatch(e,t){let s=await this.rpcClient.getLatestBlockhash(),n={blockhash:s.blockhash,lastValidBlockHeight:s.lastValidBlockHeight},i=pipe(createTransactionMessage({version:0}),a=>setTransactionMessageFeePayerSigner(t[0],a),a=>setTransactionMessageLifetimeUsingBlockhash(n,a),a=>appendTransactionMessageInstructions(e,a)),r=await signTransactionMessageWithSigners(i),u=getBase64EncodedWireTransaction(r);return this.rpcClient.simulateTransaction(u,{commitment:this.config.commitment,replaceRecentBlockhash:true})}estimateTransactionSize(e){let t=64;for(let s of e)t+=32,t+=(s.accounts?.length??0)*32,t+=s.data.length;return t}extractRawData(e){if(Buffer.isBuffer(e)||e instanceof Uint8Array)return new Uint8Array(e);if(typeof e=="object"&&e!==null&&"data"in e)return Buffer.from(e.data,"base64");if(typeof e=="string")return Buffer.from(e,"base64");throw new Error("Invalid account data format")}};var y=class{builder;config;_debugMode=false;constructor(e){this.config=e,this.builder=new E(e);}debug(){return this._debugMode=true,this.builder.enableDebug(),this}async execute(e,t,s){return this.builder.execute(e,t,s)}async executeWithDetails(e,t,s){return this.builder.execute(e,t,s,{returnDetails:true})}async executeBatch(e,t,s){return this.builder.executeBatch(e,t.map(n=>()=>Promise.resolve(n())),s)}async simulate(e,t,s){return this.builder.execute(e,()=>Promise.resolve(t()),s,{simulate:true})}async simulateInstruction(e,t,s){return this.simulate(e,t,s)}async estimateCost(e){return this.builder.estimateCost(e)}async getCost(e,t){return this.builder.estimateCost([t])}async explain(e,t){return this.builder.explain(e,[t])}async analyze(e,t){return this.builder.debug(e,[t])}async getAccount(e,t){return this.builder.getAccount(e,t)}async getAccounts(e,t){return this.builder.getAccounts(e,t)}async getProgramAccounts(e,t){return this.builder.getProgramAccounts(e,t)}get programId(){return this.config.programId}getProgramId(){return this.config.programId}get commitment(){return this.config.commitment??"confirmed"}getCommitment(){return this.config.commitment??"confirmed"}};var w={provider:{name:"pinata",endpoint:"https://api.pinata.cloud"},gateways:["https://gateway.pinata.cloud","https://ipfs.io","https://cloudflare-ipfs.com","https://gateway.ipfs.io"],autoPinning:true,sizeThreshold:800,maxRetries:3,retryDelay:1e3,enableCache:true,cacheTTL:3e5},G=class{client;constructor(e){this.client=new c(e);}async storeAgentMetadata(e,t){let s=JSON.stringify({...e,createdAt:new Date().toISOString(),version:"1.0.0"});return this.client.storeContent(s,"agent-metadata",{filename:`agent-${e.agentId??"metadata"}.json`,metadata:{type:"agent-metadata",agentId:e.agentId,name:e.name},contentType:"application/json",...t})}async storeChannelMessage(e,t){let s=JSON.stringify({...e,timestamp:new Date().toISOString(),version:"1.0.0"});return this.client.storeContent(s,"channel-message",{filename:`message-${Date.now()}.json`,metadata:{type:"channel-message",channelId:e.channelId,messageType:e.messageType??0},contentType:"application/json",...t})}async storeFileAttachment(e,t,s,n){let i=typeof e=="string"?e:new TextDecoder().decode(e);return this.client.storeContent(i,"file-attachment",{filename:t,contentType:s,metadata:{type:"file-attachment",originalFilename:t,mimeType:s},...n})}async retrieveAgentMetadata(e){let t=await this.client.retrieveContent(e),s=JSON.parse(t);if(typeof s!="object"||s===null)throw new Error("Retrieved agent metadata is not a valid object");return s}async retrieveChannelMessage(e){let t=await this.client.retrieveContent(e),s=JSON.parse(t);if(typeof s!="object"||s===null)throw new Error("Retrieved channel message is not a valid object");return s}async batchUpload(e){return (await Promise.allSettled(e.map(s=>this.client.storeContent(s.content,s.type,{filename:s.filename,...s.options})))).map(s=>s.status==="fulfilled"?{success:true,data:s.value}:{success:false,error:"UPLOAD_FAILED",message:s.reason instanceof Error?s.reason.message:String(s.reason)})}async pinContent(e){let t=await this.client.pin(e);return {...t,data:t.success}}isIPFSUri(e){return e.startsWith("ipfs://")}extractIPFSHash(e){return this.isIPFSUri(e)?e.replace("ipfs://",""):null}getGatewayUrls(e,t){return (t??w.gateways??[]).map(n=>`${n}/ipfs/${e}`)}isValidIPFSHash(e){return e.length<44?false:e.startsWith("Qm")&&e.length===46?/^Qm[A-Za-z0-9]{44}$/.test(e):e.length>46?/^[A-Za-z0-9]+$/.test(e):false}shouldUseIPFS(e,t){let s=new TextEncoder().encode(e).length,n=t??w.sizeThreshold??800;return s>n}async compressContent(e){try{if(typeof CompressionStream<"u"){let t=new CompressionStream("gzip"),s=t.writable.getWriter(),n=t.readable.getReader(),r=new TextEncoder().encode(e),u=s.write(r).then(()=>s.close()),a=[],o=async()=>{let c=await n.read(),{done:h,value:f}=c;!h&&f&&(a.push(f),await o());};await Promise.all([u,o()]);let l=a.reduce((c,h)=>c+h.length,0),p=new Uint8Array(l),m=0;for(let c of a)p.set(c,m),m+=c.length;return {compressed:Buffer.from(p).toString("base64"),algorithm:"gzip"}}else return console.warn("Compression not available in this environment, storing uncompressed"),{compressed:e,algorithm:"none"}}catch(t){return console.warn("Compression failed, falling back to uncompressed:",t),{compressed:e,algorithm:"none"}}}async decompressContent(e,t){if(t==="none")return e;try{if(t==="gzip")if(typeof DecompressionStream<"u"){let s=new DecompressionStream("gzip"),n=s.writable.getWriter(),i=s.readable.getReader(),r=Buffer.from(e,"base64"),u=n.write(r).then(()=>n.close()),a=[],o=async()=>{let c=await i.read(),{done:h,value:f}=c;!h&&f&&(a.push(f),await o());};await Promise.all([u,o()]);let l=a.reduce((c,h)=>c+h.length,0),p=new Uint8Array(l),m=0;for(let c of a)p.set(c,m),m+=c.length;return new TextDecoder().decode(p)}else return console.warn("Decompression not available in this environment, returning compressed data"),e;else return console.warn(`Unknown compression algorithm: ${t}`),e}catch(s){return console.error("Decompression failed, returning compressed data:",s),e}}getStats(){return {cacheStats:this.client.getCacheStats(),config:w}}clearCache(){this.client.clearCache();}};function de(d){let e={...w,...d,provider:{...w.provider,...d?.provider}};return new G(e)}function fe(d,e){if(e?.forceInline)return "inline";if(e?.forceIPFS)return "ipfs";let t=new TextEncoder().encode(d).length,s=e?.sizeThreshold??w.sizeThreshold??800;return t>s?"ipfs":"inline"}async function Me(d,e,t){let s=JSON.stringify(d);return fe(s,{forceIPFS:t?.forceIPFS})==="inline"||!e?`data:application/json;base64,${Buffer.from(s).toString("base64")}`:(await e.client.storeContent(s,t?.type??"custom",{filename:t?.filename,contentType:"application/json"})).uri}var x=class extends y{ipfsUtils=null;constructor(e){super(e),e.ipfsConfig&&(this.ipfsUtils=de(e.ipfsConfig));}async register(e,t){let s=()=>$i({agentAccount:this.deriveAgentPda(t.agentId),signer:e,systemProgram:this.systemProgramId,agentType:t.agentType,metadataUri:t.metadataUri,agentId:t.agentId});return this.execute("registerAgent",s,[e])}async registerCompressed(e,t){let s=()=>n({merkleTree:t.merkleTree,signer:e,systemProgram:this.systemProgramId,compressionProgram:this.compressionProgramId,agentType:t.agentType,metadataUri:t.metadataUri,agentId:t.agentId});return this.execute("registerAgentCompressed",s,[e])}async update(e,t){let s=()=>Uk({agentAccount:t.agentAddress,signer:e,metadataUri:t.metadataUri,agentType:t.agentType,agentId:t.agentId});return this.execute("updateAgent",s,[e])}async verify(e,t){let s=()=>_l({agent:t.agentAddress,verifier:e,agentPubkey:t.agentPubkey,serviceEndpoint:t.serviceEndpoint,supportedCapabilities:t.supportedCapabilities,verifiedAt:t.verifiedAt});return this.execute("verifyAgent",s,[e])}async deactivate(e,t){let s=()=>ud({agentAccount:t.agentAddress,signer:e,agentId:t.agentId});return this.execute("deactivateAgent",s,[e])}async activate(e,t){let s=()=>A$1({agentAccount:t.agentAddress,signer:e,agentId:t.agentId});return this.execute("activateAgent",s,[e])}async getAgentAccount(e){return super.getAccount(e,"getAgentDecoder")}async getAllAgents(){return this.getProgramAccounts("getAgentDecoder")}async getAgentsByType(e){let t=Buffer.alloc(1);t.writeUInt8(e,0);let s=[{memcmp:{offset:8n,bytes:t.toString("base64"),encoding:"base64"}}];return this.getProgramAccounts("getAgentDecoder",s)}async getUserAgents(e){let t=[{memcmp:{offset:9n,bytes:e,encoding:"base58"}}];return this.getProgramAccounts("getAgentDecoder",t)}deriveAgentPda(e){return "agent_pda_address"}get systemProgramId(){return "11111111111111111111111111111111"}get compressionProgramId(){return "cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK"}};var B=class extends y{async create(e){let t=this.deriveEscrowPda(e.buyer,e.seller,Date.now());return this.execute("createEscrow",()=>Ob({escrow:t,reentrancyGuard:this.systemProgramId,client:e.signer,agent:e.seller,paymentToken:this.nativeMint,clientTokenAccount:this.deriveTokenAccount(e.buyer),escrowTokenAccount:this.deriveTokenAccount(t),tokenProgram:this.tokenProgramId,associatedTokenProgram:this.associatedTokenProgramId,systemProgram:this.systemProgramId,taskId:e.description,amount:e.amount,expiresAt:Date.now()+720*60*60*1e3,transferHook:null,isConfidential:false}),[e.signer])}async complete(e,t){return this.execute("completeEscrow",()=>Oa({escrow:t,reentrancyGuard:this.systemProgramId,agent:e.address,escrowTokenAccount:this.deriveTokenAccount(t),agentTokenAccount:this.deriveTokenAccount(e.address),authority:e,tokenProgram:this.tokenProgramId,resolutionNotes:"Work completed successfully"}),[e])}async cancel(e,t,s){return this.execute("cancelEscrow",()=>za({escrow:t,reentrancyGuard:this.systemProgramId,authority:e,clientRefundAccount:this.deriveTokenAccount(s.buyer),paymentToken:this.nativeMint,cancellationReason:"User cancelled",escrowTokenAccount:this.deriveTokenAccount(t),tokenProgram:this.tokenProgramId}),[e])}async dispute(e,t,s){return this.execute("disputeEscrow",()=>Kd({escrow:t,reentrancyGuard:this.systemProgramId,authority:e,disputeReason:s}),[e])}async processPartialRefund(e,t,s,n){return this.execute("processPartialRefund",()=>wi({escrow:t,reentrancyGuard:this.systemProgramId,escrowTokenAccount:this.deriveTokenAccount(t),clientRefundAccount:this.deriveTokenAccount(t),agentPaymentAccount:this.deriveTokenAccount(e.address),paymentToken:this.nativeMint,authority:e,tokenProgram:this.tokenProgramId,clientRefundPercentage:Math.min(100,Math.max(0,Number((s*100n/n).toString())))}),[e])}async getEscrowAccount(e){return super.getAccount(e,"getEscrowDecoder")}async getAllEscrows(){return this.getProgramAccounts("getEscrowDecoder")}async getEscrowsByBuyer(e){let t=[{memcmp:{offset:8n,bytes:e,encoding:"base58"}}];return this.getProgramAccounts("getEscrowDecoder",t)}async getEscrowsBySeller(e){let t=[{memcmp:{offset:40n,bytes:e,encoding:"base58"}}];return this.getProgramAccounts("getEscrowDecoder",t)}async getEscrowsByStatus(e){return (await this.getAllEscrows()).filter(({data:s})=>s.status===e)}deriveEscrowPda(e,t,s){return `escrow_${e}_${t}_${s}`}deriveTokenAccount(e){return `token_${e}`}get nativeMint(){return "So11111111111111111111111111111111111111112"}get tokenProgramId(){return "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}get associatedTokenProgramId(){return "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"}get systemProgramId(){return "11111111111111111111111111111111"}};var M=class extends y{async create(e){let t=this.deriveChannelPda(e.name);return this.execute("createEnhancedChannel",()=>Gb({channel:t,reentrancyGuard:this.systemProgramId,creator:e.signer,creatorAgent:e.signer.address,systemProgram:this.systemProgramId,channelId:e.name,participants:[e.signer.address],channelType:e.channelType,metadata:{name:e.name,description:e.description,avatarUrl:null,tags:[],settings:{allowFileSharing:true,allowExternalInvites:!e.isPrivate,messageRetentionDays:30,maxMessageSize:4096,requireEncryption:e.isPrivate??false,autoArchiveAfterDays:365}}}),[e.signer])}async sendMessage(e){let t=this.deriveMessagePda(e.channelAddress,Date.now());return this.execute("sendEnhancedMessage",()=>Tj({channel:e.channelAddress,message:t,reentrancyGuard:this.systemProgramId,sender:e.signer,systemProgram:this.systemProgramId,messageId:`msg_${Date.now()}`,content:e.content,messageType:e.messageType??0,metadata:{replyTo:e.replyTo??null,threadId:null,attachments:e.attachmentUri?[{fileType:"application/octet-stream",fileSize:0,fileHash:"",storageUrl:e.attachmentUri}]:[],mentions:[],reactions:[]},isEncrypted:false}),[e.signer])}async join(e,t){return this.execute("joinChannel",()=>ph({channel:t,reentrancyGuard:this.systemProgramId,user:e,userAgent:e.address}),[e])}async leave(e,t){return this.execute("leaveChannel",()=>xh({channel:t,reentrancyGuard:this.systemProgramId,user:e}),[e])}async updateSettings(e,t,s){return this.execute("updateChannelSettings",()=>Fl({channel:t,reentrancyGuard:this.systemProgramId,authority:e,newMetadata:{name:s.name??null,description:s.description??null,avatarUrl:null,tags:[],settings:{allowFileSharing:true,allowExternalInvites:!s.isPrivate,messageRetentionDays:30,maxMessageSize:s.maxMembers?Number(s.maxMembers):4096,requireEncryption:s.isPrivate??false,autoArchiveAfterDays:365}}}),[e])}async addReaction(e,t,s){return this.execute("addMessageReaction",()=>I({channel:this.deriveChannelFromMessage(t),message:t,reentrancyGuard:this.systemProgramId,user:e,reaction:s}),[e])}async getChannelAccount(e){return super.getAccount(e,"getChannelDecoder")}async getMessageAccount(e){return super.getAccount(e,"getMessageDecoder")}async getAllChannels(){return this.getProgramAccounts("getChannelDecoder")}async getPublicChannels(){return (await this.getAllChannels()).filter(({data:t})=>!t.isPrivate)}async getChannelsByCreator(e){let t=[{memcmp:{offset:8n,bytes:e,encoding:"base58"}}];return this.getProgramAccounts("getChannelDecoder",t)}async getChannelMessages(e){let t=[{memcmp:{offset:8n,bytes:e,encoding:"base58"}}];return this.getProgramAccounts("getMessageDecoder",t)}deriveChannelPda(e){return `channel_${e}`}deriveMessagePda(e,t){return `message_${e}_${t}`}deriveChannelFromMessage(e){return `channel_from_${e}`}get systemProgramId(){return "11111111111111111111111111111111"}};var $=class{config;constructor(e){this.config={programId:a,commitment:"confirmed",cluster:"devnet",rpcEndpoint:e?.rpcEndpoint??this.getDefaultRpcEndpoint(e?.cluster??"devnet"),...e,rpc:e?.rpc??{}};}agent(){return new z(this.config)}escrow(){return new L(this.config)}channel(){return new O(this.config)}marketplace(){return new _(this.config)}governance(){return new j(this.config)}token2022(){return new V(this.config)}enableDevMode(){return console.log("\u{1F6E0}\uFE0F Development mode enabled"),console.log(" - Transaction simulation before sending"),console.log(" - Cost estimates for all operations"),console.log(" - Enhanced error messages"),this.config={...this.config},this}useNetwork(e){return this.config.cluster=e,this.config.rpcEndpoint=this.getDefaultRpcEndpoint(e),this}useRpc(e,t){return this.config.rpcEndpoint=e,this.config.wsEndpoint=t,this}getDefaultRpcEndpoint(e){switch(e){case "mainnet-beta":return "https://api.mainnet-beta.solana.com";case "devnet":return "https://api.devnet.solana.com";case "testnet":return "https://api.testnet.solana.com";case "localnet":return "http://localhost:8899";default:return "https://api.devnet.solana.com"}}},z=class{module;params={};constructor(e){this.module=new x(e);}create(e){return this.params={...this.params,agentType:0,metadataUri:JSON.stringify(e),agentId:e.name.toLowerCase().replace(/\s+/g,"-")},this}withType(e){return this.params.agentType=e,this}withIPFS(){return this.params.forceIPFS=true,this}compressed(){return this.params.compressed=true,this}debug(){return this.module.debug(),this}validateParams(){if(!this.params.signer)throw new Error("Agent builder requires a signer. Call with signer first.");if(!this.params.metadataUri)throw new Error("Agent builder requires metadata. Call create() first.");if(!this.params.agentId)throw new Error("Agent builder requires agent ID. Call create() first.");this.params.agentType??=0;}async getCost(){return this.validateParams(),this.module.getCost("registerAgent",()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array}))}async simulate(){let e=()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array});return this.validateParams(),this.module.simulateInstruction("registerAgent",e,[this.params.signer])}async explain(){return this.validateParams(),this.module.explain("registerAgent",()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array}))}async execute(){this.validateParams(),this.params.compressed&&console.log("Creating compressed agent (5000x cheaper)...");let e=await this.module.register(this.params.signer,{agentType:this.params.agentType,metadataUri:this.params.metadataUri,agentId:this.params.agentId});return {address:this.deriveAgentAddress(this.params.agentId),signature:e}}deriveAgentAddress(e){return `agent_${e}`}},L=class{module;params={};constructor(e){this.module=new B(e);}between(e,t){return this.params.buyer=e,this.params.seller=t,this}amount(e){return this.params.amount=e,this}description(e){return this.params.description=e,this}withMilestones(e){return this.params.milestones=e,this}debug(){return this.module.debug(),this}validateParams(){if(!this.params.buyer)throw new Error("Escrow builder requires buyer address. Call between() first.");if(!this.params.seller)throw new Error("Escrow builder requires seller address. Call between() first.");if(!this.params.amount)throw new Error("Escrow builder requires amount. Call amount() first.");if(!this.params.signer)throw new Error("Escrow builder requires signer.")}async getCost(){return this.module.getCost("createEscrow",()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array}))}async explain(){return this.module.explain("createEscrow",()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array}))}async execute(){this.validateParams();let e=await this.module.create({signer:this.params.signer,amount:this.params.amount,buyer:this.params.buyer,seller:this.params.seller,description:this.params.description??"",milestones:this.params.milestones});return {address:this.deriveEscrowAddress(),signature:e}}deriveEscrowAddress(){return `escrow_${this.params.buyer}_${this.params.seller}`}},O=class{module;params={};constructor(e){this.module=new M(e);}create(e){return this.params.name=e,this.params.channelType=2,this}description(e){return this.params.description=e,this}private(){return this.params.isPrivate=true,this.params.channelType=3,this}maxMembers(e){return this.params.maxMembers=e,this}debug(){return this.module.debug(),this}validateParams(){if(!this.params.name)throw new Error("Channel builder requires name. Call create() first.");if(!this.params.signer)throw new Error("Channel builder requires signer.")}async getCost(){return this.module.getCost("createChannel",()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array}))}async explain(){return this.module.explain("createChannel",()=>({programAddress:this.module.getProgramId(),accounts:[],data:new Uint8Array}))}async execute(){this.validateParams();let e=await this.module.create({signer:this.params.signer,name:this.params.name,description:this.params.description??"",channelType:this.params.channelType??2,isPrivate:this.params.isPrivate,maxMembers:this.params.maxMembers});return {address:this.deriveChannelAddress(),signature:e}}deriveChannelAddress(){return `channel_${this.params.name}`}},_=class{constructor(e){this.config=e;}},j=class{constructor(e){this.config=e;}},V=class{constructor(e){this.config=e;}};function Ke(d){return BigInt(Math.floor(d*1e9))}function Xe(d){return Number(d)/1e9}var Ze=$;
|
|
4
|
-
export{A as a,E as b,y as c,w as d,G as e,de as f,fe as g,Me as h,x as i,B as j,M as k,$ as l,Ke as m,Xe as n,Ze as o};//# sourceMappingURL=chunk-CTC4ZJ26.js.map
|
|
5
|
-
//# sourceMappingURL=chunk-CTC4ZJ26.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/rpc-client.ts","../src/core/DevTools.ts","../src/core/InstructionBuilder.ts","../src/core/BaseModule.ts","../src/utils/ipfs-utils.ts","../src/core/modules/AgentModule.ts","../src/modules/escrow/EscrowModule.ts","../src/modules/channels/ChannelModule.ts","../src/core/GhostSpeakClient.ts"],"names":["RpcClient","config","createSolanaRpc","createSolanaRpcSubscriptions","address","options","result","addresses","account","programId","item","typedItem","now","response","transaction","signatures","status","typedStatus","encodedMessage","callback","intervalId","accountInfo","error","operation","retries","lastError","i","resolve","rawAccount","dataArray","base64Data","lamports","DevTools","_DevTools","instructions","writableAccounts","readonlyAccounts","signers","warnings","totalSize","instructionAnalyses","instr","index","accounts","acc","isWritable","isSigner","humanReadable","estimatedComputeUnits","estimatedFee","instruction","_index","discriminator","b","totalUnits","computeUnits","instructionCount","baseFee","computeFee","priorityFee","message","data","logEntry","label","perfNow","start","duration","analysis","lines","warning","validateInstruction","InstructionBuilder","instructionName","instructionGetter","context","createErrorContext","s","latestBlockhashResult","latestBlockhash","transactionMessage","pipe","createTransactionMessage","tx","setTransactionMessageFeePayerSigner","setTransactionMessageLifetimeUsingBlockhash","appendTransactionMessageInstructions","signedTransaction","signTransactionMessageWithSigners","signatureResult","signature","cluster","createTransactionResult","logEnhancedError","batchName","instructionGetters","getter","estimatedSize","decoderImportName","decoderGetter","decoder","rawData","filters","convertedFilters","filter","decodedAccounts","pubkey","decodedData","w","setTransactionMessageFeePayer","compiledMessage","compileTransactionMessage","fee","skipPreflight","maxRetries","wireTransaction","getBase64EncodedWireTransaction","confirmed","attempts","currentDelay","statuses","confirmationStatus","BaseModule","DEFAULT_IPFS_CONFIG","IPFSUtils","IPFSClient","metadata","metadataJson","messageJson","fileContent","filename","contentType","content","uri","parsed","items","hash","gateways","gateway","threshold","size","sizeThreshold","compressedStream","writer","reader","input","writePromise","chunks","readCompressed","done","value","totalLength","sum","chunk","compressedData","offset","compressed","algorithm","decompressedStream","readDecompressed","decompressedData","createIPFSUtils","finalConfig","determineStorageMethod","createMetadataUri","ipfsUtils","AgentModule","signer","params","getRegisterAgentInstructionAsync","getRegisterAgentCompressedInstructionAsync","getUpdateAgentInstruction","getVerifyAgentInstructionAsync","getDeactivateAgentInstruction","getActivateAgentInstruction","agentType","typeBytes","authority","_agentId","EscrowModule","escrowAddress","getCreateEscrowInstructionAsync","getCompleteEscrowInstruction","getCancelEscrowInstruction","reason","getDisputeEscrowInstruction","refundAmount","totalAmount","getProcessPartialRefundInstruction","buyer","seller","nonce","owner","ChannelModule","channelAddress","getCreateEnhancedChannelInstructionAsync","messageAddress","getSendEnhancedMessageInstructionAsync","getJoinChannelInstruction","getLeaveChannelInstruction","settings","getUpdateChannelSettingsInstruction","emoji","getAddMessageReactionInstruction","creator","name","channel","GhostSpeak","GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS","AgentBuilder","EscrowBuilder","ChannelBuilder","MarketplaceBuilder","GovernanceBuilder","Token2022Builder","endpoint","wsEndpoint","agentId","desc","milestones","max","sol","amount","lamportsToSol","GhostSpeakClient_default"],"mappings":"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","file":"chunk-CTC4ZJ26.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) : 0n,\n data: Buffer.from(base64Data, 'base64'),\n space: account.space ? (typeof account.space === 'number' ? BigInt(account.space) : account.space) : undefined\n }\n }\n}","/**\n * Developer Tools for GhostSpeak SDK\n * \n * Provides debugging, inspection, and development utilities\n */\n\nimport type { IInstruction, AccountRole } from '@solana/kit'\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 // Check if the role has 'signer' in its name\n const isSigner = acc.role.toString().includes('signer')\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 > 1_400_000n) {\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 = 0n\n \n for (const instr of instructions) {\n // Base cost per instruction\n totalUnits += 200n\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 += 5000n\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 = 5000n\n \n // Compute unit fee: ~0.000005 SOL per 1M units\n const computeFee = (computeUnits * 5n) / 1_000_000n\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 { IInstruction, TransactionSigner, Blockhash, Base64EncodedBytes, Base58EncodedBytes, TransactionMessageBytesBase64, TransactionMessageBytes, SignaturesMap, Signature } from '@solana/kit'\nimport type { GhostSpeakConfig } 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 // Poll for confirmation\n let confirmed = false\n let attempts = 0\n let currentDelay = 1000\n\n while (!confirmed && attempts < maxRetries) {\n try {\n const statuses = await this.rpcClient.getSignatureStatuses([signature] as const)\n \n if (statuses[0]) {\n if (statuses[0].err) {\n throw new Error(`Transaction failed: ${JSON.stringify(statuses[0].err)}`)\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 break\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 attempts++\n await new Promise(resolve => setTimeout(resolve, currentDelay * 2))\n }\n }\n\n if (!confirmed) {\n throw new Error(`Transaction timeout after ${maxRetries} attempts. Signature: ${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","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\n// Use string type for signature since @solana/rpc-types doesn't export Signature in v2\ntype Signature = string\nimport type { GhostSpeakConfig } from '../types/index.js'\nimport { InstructionBuilder } from './InstructionBuilder.js'\nimport type { TransactionResult } from '../utils/transaction-urls.js'\nimport type { IInstruction } from '@solana/instructions'\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 {\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 metadataUri: string\n agentId: string\n }): Promise<string> {\n const instructionGetter = () => {\n const result = getRegisterAgentInstructionAsync({\n agentAccount: this.deriveAgentPda(params.agentId),\n signer,\n systemProgram: this.systemProgramId,\n agentType: params.agentType,\n metadataUri: params.metadataUri,\n agentId: params.agentId\n })\n return result\n }\n \n return this.execute(\n 'registerAgent',\n instructionGetter,\n [signer] as unknown as TransactionSigner[]\n )\n }\n\n /**\n * Register a compressed agent (5000x cheaper)\n */\n async registerCompressed(signer: TransactionSigner, params: {\n agentType: number\n metadataUri: string\n agentId: string\n merkleTree: Address\n treeConfig: Address\n }): Promise<string> {\n const instructionGetter = () => {\n const result = getRegisterAgentCompressedInstructionAsync({\n merkleTree: params.merkleTree,\n signer,\n systemProgram: this.systemProgramId,\n compressionProgram: this.compressionProgramId,\n agentType: params.agentType,\n metadataUri: params.metadataUri,\n agentId: params.agentId\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 }): 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 })\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 = () => {\n const result = 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: 8n, // 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: 9n, // 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 deriveAgentPda(_agentId: string): Address {\n // Implementation would derive PDA\n // This is a placeholder - actual implementation would use findProgramAddressSync\n return 'agent_pda_address' as Address\n }\n\n private get systemProgramId(): Address {\n return '11111111111111111111111111111111' as Address\n }\n\n private get compressionProgramId(): Address {\n return 'cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK' as Address\n }\n}","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport {\n getCreateEscrowInstructionAsync,\n getCompleteEscrowInstruction,\n getCancelEscrowInstruction,\n getDisputeEscrowInstruction,\n getProcessPartialRefundInstruction,\n type Escrow,\n type EscrowStatus\n} from '../../generated/index.js'\n\n/**\n * Escrow management module with simplified API\n */\nexport class EscrowModule extends BaseModule {\n /**\n * Create a new escrow\n */\n async create(params: {\n signer: TransactionSigner\n amount: bigint\n buyer: Address\n seller: Address\n description: string\n milestones?: { amount: bigint; description: string }[]\n }): Promise<string> {\n const escrowAddress = this.deriveEscrowPda(params.buyer, params.seller, Date.now())\n \n return this.execute(\n 'createEscrow',\n () => getCreateEscrowInstructionAsync({\n escrow: escrowAddress,\n reentrancyGuard: this.systemProgramId,\n client: params.signer,\n agent: params.seller,\n paymentToken: this.nativeMint,\n clientTokenAccount: this.deriveTokenAccount(params.buyer),\n escrowTokenAccount: this.deriveTokenAccount(escrowAddress),\n tokenProgram: this.tokenProgramId,\n associatedTokenProgram: this.associatedTokenProgramId,\n systemProgram: this.systemProgramId,\n taskId: params.description,\n amount: params.amount,\n expiresAt: Date.now() + (30 * 24 * 60 * 60 * 1000), // 30 days from now\n transferHook: null,\n isConfidential: false\n }),\n [params.signer]\n )\n }\n\n /**\n * Complete an escrow\n */\n async complete(signer: TransactionSigner, escrowAddress: Address): Promise<string> {\n return this.execute(\n 'completeEscrow',\n () => getCompleteEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard: this.systemProgramId,\n agent: signer.address,\n escrowTokenAccount: this.deriveTokenAccount(escrowAddress),\n agentTokenAccount: this.deriveTokenAccount(signer.address),\n authority: signer,\n tokenProgram: this.tokenProgramId,\n resolutionNotes: 'Work completed successfully'\n }),\n [signer]\n )\n }\n\n /**\n * Cancel an escrow\n */\n async cancel(signer: TransactionSigner, escrowAddress: Address, params: { buyer: Address }): Promise<string> {\n return this.execute(\n 'cancelEscrow',\n () => getCancelEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard: this.systemProgramId,\n authority: signer,\n clientRefundAccount: this.deriveTokenAccount(params.buyer),\n paymentToken: this.nativeMint,\n cancellationReason: 'User cancelled',\n escrowTokenAccount: this.deriveTokenAccount(escrowAddress),\n tokenProgram: this.tokenProgramId\n }),\n [signer]\n )\n }\n\n /**\n * Dispute an escrow\n */\n async dispute(signer: TransactionSigner, escrowAddress: Address, reason: string): Promise<string> {\n return this.execute(\n 'disputeEscrow',\n () => getDisputeEscrowInstruction({\n escrow: escrowAddress,\n reentrancyGuard: this.systemProgramId,\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 escrowAddress: Address,\n refundAmount: bigint,\n totalAmount: bigint\n ): Promise<string> {\n return this.execute(\n 'processPartialRefund',\n () => getProcessPartialRefundInstruction({\n escrow: escrowAddress,\n reentrancyGuard: this.systemProgramId,\n escrowTokenAccount: this.deriveTokenAccount(escrowAddress),\n clientRefundAccount: this.deriveTokenAccount(escrowAddress),\n agentPaymentAccount: this.deriveTokenAccount(signer.address),\n paymentToken: this.nativeMint,\n authority: signer,\n tokenProgram: this.tokenProgramId,\n clientRefundPercentage: Math.min(100, Math.max(0, Number((refundAmount * 100n / 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 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: 8n, // 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: 40n, // 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 private deriveEscrowPda(buyer: Address, seller: Address, nonce: number): Address {\n // Implementation would derive PDA\n return `escrow_${buyer}_${seller}_${nonce}` as Address\n }\n\n private deriveTokenAccount(owner: Address): Address {\n // Implementation would derive associated token account\n return `token_${owner}` as Address\n }\n\n private get nativeMint(): Address {\n return 'So11111111111111111111111111111111111111112' as Address\n }\n\n private get tokenProgramId(): Address {\n return 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address\n }\n\n private get associatedTokenProgramId(): Address {\n return 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address\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 {\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 = 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 = 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 return this.execute(\n 'addMessageReaction',\n () => getAddMessageReactionInstruction({\n channel: this.deriveChannelFromMessage(messageAddress),\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: 8n, // 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: 8n, // 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 deriveChannelPda(name: string): Address {\n // Implementation would derive PDA\n return `channel_${name}` as Address\n }\n\n private deriveMessagePda(channel: Address, nonce: number): Address {\n // Implementation would derive PDA\n return `message_${channel}_${nonce}` as Address\n }\n\n private deriveChannelFromMessage(messageAddress: Address): Address {\n // Implementation would derive channel from message\n return `channel_from_${messageAddress}` as Address\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 type { GhostSpeakConfig } from '../types/index.js'\nimport { GHOSTSPEAK_PROGRAM_ID } from '../types/index.js'\nimport { AgentModule } from './modules/AgentModule.js'\nimport { EscrowModule } from '../modules/escrow/EscrowModule.js'\nimport { ChannelModule } from '../modules/channels/ChannelModule.js'\nimport { ChannelType } from '../generated/types/channelType.js'\n\n/**\n * Main GhostSpeak client with fluent API design\n * \n * Example usage:\n * ```typescript\n * const ghostspeak = new GhostSpeak()\n * \n * // Create an agent\n * const agent = await ghostspeak\n * .agent()\n * .create({ name: \"My Agent\", capabilities: [\"coding\"] })\n * .compressed()\n * .execute()\n * \n * // Create an escrow\n * const escrow = await ghostspeak\n * .escrow()\n * .between(buyer, seller)\n * .amount(sol(10))\n * .withMilestones([...])\n * .execute()\n * ```\n */\nexport class GhostSpeak {\n private config: GhostSpeakConfig\n \n constructor(config?: Partial<GhostSpeakConfig>) {\n // Zero-config setup with smart defaults\n this.config = {\n programId: GHOSTSPEAK_PROGRAM_ID,\n commitment: 'confirmed',\n cluster: 'devnet',\n rpcEndpoint: config?.rpcEndpoint ?? this.getDefaultRpcEndpoint(config?.cluster ?? 'devnet'),\n ...config,\n rpc: config?.rpc ?? {} as GhostSpeakConfig['rpc']\n }\n }\n\n /**\n * Agent operations\n */\n agent(): AgentBuilder {\n return new AgentBuilder(this.config)\n }\n\n /**\n * Escrow operations\n */\n escrow(): EscrowBuilder {\n return new EscrowBuilder(this.config)\n }\n\n /**\n * Channel operations\n */\n channel(): ChannelBuilder {\n return new ChannelBuilder(this.config)\n }\n\n /**\n * Marketplace operations\n */\n marketplace(): MarketplaceBuilder {\n return new MarketplaceBuilder(this.config)\n }\n\n /**\n * Governance operations\n */\n governance(): GovernanceBuilder {\n return new GovernanceBuilder(this.config)\n }\n\n /**\n * Token-2022 operations\n */\n token2022(): Token2022Builder {\n return new Token2022Builder(this.config)\n }\n\n /**\n * Enable development mode features\n */\n enableDevMode(): this {\n console.log('🛠️ 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 \n this.config = {\n ...this.config,\n // Add dev mode flags\n }\n \n return this\n }\n\n /**\n * Configure network\n */\n useNetwork(cluster: 'mainnet-beta' | 'devnet' | 'testnet' | 'localnet'): this {\n this.config.cluster = cluster\n this.config.rpcEndpoint = this.getDefaultRpcEndpoint(cluster)\n return this\n }\n\n /**\n * Configure custom RPC\n */\n useRpc(endpoint: string, wsEndpoint?: string): this {\n this.config.rpcEndpoint = endpoint\n this.config.wsEndpoint = wsEndpoint\n return this\n }\n\n /**\n * Get default RPC endpoint for cluster\n */\n private getDefaultRpcEndpoint(cluster: string): string {\n switch (cluster) {\n case 'mainnet-beta':\n return 'https://api.mainnet-beta.solana.com'\n case 'devnet':\n return 'https://api.devnet.solana.com'\n case 'testnet':\n return 'https://api.testnet.solana.com'\n case 'localnet':\n return 'http://localhost:8899'\n default:\n return 'https://api.devnet.solana.com'\n }\n }\n}\n\n// =====================================================\n// FLUENT BUILDERS\n// =====================================================\n\n/**\n * Agent builder parameters interface\n */\ninterface AgentBuilderParams {\n agentType?: number\n metadataUri?: string\n agentId?: string\n compressed?: boolean\n forceIPFS?: boolean\n signer?: TransactionSigner\n}\n\n/**\n * Agent builder for fluent API\n */\nclass AgentBuilder {\n private module: AgentModule\n private params: AgentBuilderParams = {}\n\n constructor(config: GhostSpeakConfig) {\n this.module = new AgentModule(config)\n }\n\n create(params: { name: string; capabilities: string[] }): this {\n this.params = {\n ...this.params,\n agentType: 0, // Default type\n metadataUri: JSON.stringify(params),\n agentId: params.name.toLowerCase().replace(/\\s+/g, '-')\n }\n return this\n }\n\n withType(agentType: number): this {\n this.params.agentType = agentType\n return this\n }\n\n withIPFS(): this {\n this.params.forceIPFS = true\n return this\n }\n\n compressed(): this {\n this.params.compressed = true\n return this\n }\n\n debug(): this {\n this.module.debug()\n return this\n }\n\n private validateParams(): void {\n if (!this.params.signer) {\n throw new Error('Agent builder requires a signer. Call with signer first.')\n }\n if (!this.params.metadataUri) {\n throw new Error('Agent builder requires metadata. Call create() first.')\n }\n if (!this.params.agentId) {\n throw new Error('Agent builder requires agent ID. Call create() first.')\n }\n this.params.agentType ??= 0 // Default type\n }\n\n async getCost(): Promise<bigint> {\n this.validateParams()\n return this.module.getCost('registerAgent', () => ({\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async simulate(): Promise<unknown> {\n const instruction = () => ({\n // Placeholder for actual instruction generation\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n })\n this.validateParams()\n return this.module.simulateInstruction('registerAgent', instruction, [this.params.signer!])\n }\n\n async explain(): Promise<string> {\n this.validateParams()\n return this.module.explain('registerAgent', () => ({\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async execute(): Promise<{ address: Address; signature: string }> {\n this.validateParams()\n \n if (this.params.compressed) {\n // Implementation would handle compressed agent creation\n console.log('Creating compressed agent (5000x cheaper)...')\n }\n \n const signature = await this.module.register(this.params.signer!, {\n agentType: this.params.agentType!,\n metadataUri: this.params.metadataUri!,\n agentId: this.params.agentId!\n })\n const address = this.deriveAgentAddress(this.params.agentId!)\n \n return { address, signature }\n }\n\n private deriveAgentAddress(agentId: string): Address {\n // Placeholder - would use real PDA derivation\n return `agent_${agentId}` as Address\n }\n}\n\n/**\n * Escrow builder parameters interface\n */\ninterface EscrowBuilderParams {\n buyer?: Address\n seller?: Address\n amount?: bigint\n description?: string\n milestones?: Array<{ amount: bigint; description: string }>\n signer?: TransactionSigner\n}\n\n/**\n * Escrow builder for fluent API\n */\nclass EscrowBuilder {\n private module: EscrowModule\n private params: EscrowBuilderParams = {}\n\n constructor(config: GhostSpeakConfig) {\n this.module = new EscrowModule(config)\n }\n\n between(buyer: Address, seller: Address): this {\n this.params.buyer = buyer\n this.params.seller = seller\n return this\n }\n\n amount(lamports: bigint): this {\n this.params.amount = lamports\n return this\n }\n\n description(desc: string): this {\n this.params.description = desc\n return this\n }\n\n withMilestones(milestones: Array<{ amount: bigint; description: string }>): this {\n this.params.milestones = milestones\n return this\n }\n\n debug(): this {\n this.module.debug()\n return this\n }\n\n private validateParams(): void {\n if (!this.params.buyer) {\n throw new Error('Escrow builder requires buyer address. Call between() first.')\n }\n if (!this.params.seller) {\n throw new Error('Escrow builder requires seller address. Call between() first.')\n }\n if (!this.params.amount) {\n throw new Error('Escrow builder requires amount. Call amount() first.')\n }\n if (!this.params.signer) {\n throw new Error('Escrow builder requires signer.')\n }\n }\n\n async getCost(): Promise<bigint> {\n return this.module.getCost('createEscrow', () => ({\n // Placeholder for actual instruction\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async explain(): Promise<string> {\n return this.module.explain('createEscrow', () => ({\n // Placeholder for actual instruction\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async execute(): Promise<{ address: Address; signature: string }> {\n this.validateParams()\n \n const signature = await this.module.create({\n signer: this.params.signer!,\n amount: this.params.amount!,\n buyer: this.params.buyer!,\n seller: this.params.seller!,\n description: this.params.description ?? '',\n milestones: this.params.milestones\n })\n const address = this.deriveEscrowAddress()\n \n return { address, signature }\n }\n\n private deriveEscrowAddress(): Address {\n // Placeholder - would use real PDA derivation\n return `escrow_${this.params.buyer}_${this.params.seller}` as Address\n }\n}\n\n/**\n * Channel builder parameters interface\n */\ninterface ChannelBuilderParams {\n name?: string\n description?: string\n channelType?: ChannelType\n isPrivate?: boolean\n maxMembers?: number\n signer?: TransactionSigner\n}\n\n/**\n * Channel builder for fluent API\n */\nclass ChannelBuilder {\n private module: ChannelModule\n private params: ChannelBuilderParams = {}\n\n constructor(config: GhostSpeakConfig) {\n this.module = new ChannelModule(config)\n }\n\n create(name: string): this {\n this.params.name = name\n this.params.channelType = ChannelType.Public\n return this\n }\n\n description(desc: string): this {\n this.params.description = desc\n return this\n }\n\n private(): this {\n this.params.isPrivate = true\n this.params.channelType = ChannelType.Private\n return this\n }\n\n maxMembers(max: number): this {\n this.params.maxMembers = max\n return this\n }\n\n debug(): this {\n this.module.debug()\n return this\n }\n\n private validateParams(): void {\n if (!this.params.name) {\n throw new Error('Channel builder requires name. Call create() first.')\n }\n if (!this.params.signer) {\n throw new Error('Channel builder requires signer.')\n }\n }\n\n async getCost(): Promise<bigint> {\n return this.module.getCost('createChannel', () => ({\n // Placeholder for actual instruction\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async explain(): Promise<string> {\n return this.module.explain('createChannel', () => ({\n // Placeholder for actual instruction\n programAddress: this.module.getProgramId(),\n accounts: [],\n data: new Uint8Array()\n }))\n }\n\n async execute(): Promise<{ address: Address; signature: string }> {\n this.validateParams()\n \n const signature = await this.module.create({\n signer: this.params.signer!,\n name: this.params.name!,\n description: this.params.description ?? '',\n channelType: this.params.channelType ?? ChannelType.Public,\n isPrivate: this.params.isPrivate,\n maxMembers: this.params.maxMembers\n })\n const address = this.deriveChannelAddress()\n \n return { address, signature }\n }\n\n private deriveChannelAddress(): Address {\n // Placeholder - would use real PDA derivation\n return `channel_${this.params.name}` as Address\n }\n}\n\n// Placeholder builders for other modules\nclass MarketplaceBuilder {\n constructor(private config: GhostSpeakConfig) {}\n}\n\nclass GovernanceBuilder {\n constructor(private config: GhostSpeakConfig) {}\n}\n\nclass Token2022Builder {\n constructor(private config: GhostSpeakConfig) {}\n}\n\n// =====================================================\n// CONVENIENCE FUNCTIONS\n// =====================================================\n\n/**\n * Convert SOL to lamports\n */\nexport function sol(amount: number): bigint {\n return BigInt(Math.floor(amount * 1_000_000_000))\n}\n\n/**\n * Convert lamports to SOL\n */\nexport function lamportsToSol(lamports: bigint): number {\n return Number(lamports) / 1_000_000_000\n}\n\n// Named export for explicit imports\nexport { GhostSpeak as GhostSpeakClient }\n\n// Default export for easy importing\nexport default GhostSpeak"]}
|