@ghostspeak/sdk 2.0.7 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/{GhostSpeakClient-CWmGaM9Q.d.ts → GhostSpeakClient-qdLGyuDp.d.ts} +11 -7
- package/dist/{StakingModule-C5rzuOWb.d.ts → StakingModule-CPhp_ZY0.d.ts} +263 -343
- package/dist/{agent-5YLZ7DAC.js → agent-S42FIMR7.js} +3 -3
- package/dist/{agent-5YLZ7DAC.js.map → agent-S42FIMR7.js.map} +1 -1
- package/dist/browser-D1TpjbjZ.d.ts +234 -0
- package/dist/browser.d.ts +4 -64
- package/dist/browser.js +9 -9
- package/dist/{chunk-SFTSZ3LC.js → chunk-46QWY3MG.js} +3 -3
- package/dist/{chunk-SFTSZ3LC.js.map → chunk-46QWY3MG.js.map} +1 -1
- package/dist/{chunk-IHVDQ4YI.js → chunk-5QZVFUXB.js} +201 -256
- package/dist/chunk-5QZVFUXB.js.map +1 -0
- package/dist/{chunk-E3FD2CNY.js → chunk-5SS3OL4B.js} +20 -24
- package/dist/chunk-5SS3OL4B.js.map +1 -0
- package/dist/{chunk-SZGFSCNU.js → chunk-63A7F2YP.js} +504 -326
- package/dist/chunk-63A7F2YP.js.map +1 -0
- package/dist/{chunk-JV2SWONF.js → chunk-A7ALCVUI.js} +3 -3
- package/dist/{chunk-JV2SWONF.js.map → chunk-A7ALCVUI.js.map} +1 -1
- package/dist/{chunk-AL3HQN73.js → chunk-AWMGX3OX.js} +172 -112
- package/dist/chunk-AWMGX3OX.js.map +1 -0
- package/dist/{chunk-G7S6B6WB.js → chunk-EU6PHSM5.js} +7 -7
- package/dist/{chunk-G7S6B6WB.js.map → chunk-EU6PHSM5.js.map} +1 -1
- package/dist/{chunk-C5CDA3WX.js → chunk-HIDBANFS.js} +529 -4
- package/dist/chunk-HIDBANFS.js.map +1 -0
- package/dist/{chunk-S74EH3KD.js → chunk-IQM5RASO.js} +637 -25
- package/dist/chunk-IQM5RASO.js.map +1 -0
- package/dist/{chunk-KB6CKIUK.js → chunk-QLRWUHN2.js} +3 -3
- package/dist/{chunk-KB6CKIUK.js.map → chunk-QLRWUHN2.js.map} +1 -1
- package/dist/{chunk-BQDGRTVP.js → chunk-QWQTPTZ4.js} +39 -51
- package/dist/chunk-QWQTPTZ4.js.map +1 -0
- package/dist/client.d.ts +3 -4
- package/dist/client.js +10 -10
- package/dist/{createAgentAuthorization-ULG47ZJI.js → createAgentAuthorization-KGZNXZBT.js} +4 -4
- package/dist/{createAgentAuthorization-ULG47ZJI.js.map → createAgentAuthorization-KGZNXZBT.js.map} +1 -1
- package/dist/generated-QJREJQ2C.js +9 -0
- package/dist/{generated-EG5USUFG.js.map → generated-QJREJQ2C.js.map} +1 -1
- package/dist/index.d.ts +345 -236
- package/dist/index.js +372 -537
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/minimal/core-minimal.d.ts +266 -189
- package/dist/minimal/core-minimal.js +6 -6
- package/dist/minimal/core-minimal.js.map +1 -1
- package/dist/{revokeAuthorization-OK7E7OK3.js → revokeAuthorization-2ZRO6GUZ.js} +4 -4
- package/dist/{revokeAuthorization-OK7E7OK3.js.map → revokeAuthorization-2ZRO6GUZ.js.map} +1 -1
- package/dist/{signature-verification-DGxR4aYQ.d.ts → signature-verification-BDzoR1MG.d.ts} +0 -5
- package/dist/{updateReputationWithAuth-Y4ONEVSP.js → updateReputationWithAuth-PCEUOCFV.js} +4 -4
- package/dist/{updateReputationWithAuth-Y4ONEVSP.js.map → updateReputationWithAuth-PCEUOCFV.js.map} +1 -1
- package/dist/utils.d.ts +143 -2
- package/dist/utils.js +10 -10
- package/dist/utils.js.map +1 -1
- package/package.json +5 -3
- package/dist/chunk-AL3HQN73.js.map +0 -1
- package/dist/chunk-BQDGRTVP.js.map +0 -1
- package/dist/chunk-C5CDA3WX.js.map +0 -1
- package/dist/chunk-E3FD2CNY.js.map +0 -1
- package/dist/chunk-IHVDQ4YI.js.map +0 -1
- package/dist/chunk-S74EH3KD.js.map +0 -1
- package/dist/chunk-SZGFSCNU.js.map +0 -1
- package/dist/generated-EG5USUFG.js +0 -9
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/modules/indexer/X402TransactionIndexer.ts","../src/payai/PayAIWebhookHandler.ts","../src/payai/PayAIAgentSync.ts","../src/utils/test-ipfs-config.ts","../src/utils/ipfs-error-handling.ts","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/index.js","../src/utils/wallet-funding.ts","../src/utils/private-metadata.ts","../src/utils/feature-gate-detector.ts"],"names":["EventEmitter","process","styles","chalk","i","walletData","fs","lamports"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * GhostSpeak SDK - Production-Ready AI Agent Commerce Protocol\n * \n * Optimized for tree-shaking and minimal bundle size.\n * Import only what you need for the best performance.\n * \n * @packageDocumentation\n */\n\n// =====================================================\n// MAIN CLIENT EXPORT (Tree-shakeable)\n// =====================================================\n\n// Default export for convenience\nexport { default, sol, lamportsToSol } from './core/GhostSpeakClient.js'\n\n// Named export for explicit imports\nexport { GhostSpeakClient } from './core/GhostSpeakClient.js'\n\n// Re-export Solana kit functions for CLI\nexport { createSolanaRpc, createKeyPairSignerFromBytes, generateKeyPairSigner, address } from '@solana/kit'\n\n// =====================================================\n// CORE EXPORTS\n// =====================================================\n\n// Types\nexport * from './core/types.js'\n\n// Errors\nexport * from './core/errors.js'\n\n// Base classes (for advanced users)\nexport { BaseModule } from './core/BaseModule.js'\nexport { InstructionBuilder } from './core/InstructionBuilder.js'\nexport { RpcClient } from './core/rpc-client.js'\n\n// Cache and performance utilities\nexport { CacheManager, type CacheConfig } from './core/CacheManager.js'\nexport {\n batchGetAccounts,\n batchGetExistingAccounts,\n batchGetAndMap,\n batchGetAccountsWithRetry,\n createBatchFetcher,\n type BatchProgressCallback,\n type BatchFetchConfig\n} from './utils/batch-operations.js'\n\n// =====================================================\n// MODULE EXPORTS\n// =====================================================\n\n// Agent module\nexport { AgentModule } from './core/modules/AgentModule.js'\n\n// Authorization module - Trustless agent pre-authorization\nexport { AuthorizationModule } from './modules/authorization/index.js'\n\n// Escrow module\n\n\n// Channel module - REMOVED (use A2A for agent communication)\n\n// Marketplace module - REMOVED (use PayAI for discovery)\n\n// Governance module\nexport {\n GovernanceModule,\n type CreateProposalParams,\n type ProposalType,\n type ExecutionParams\n} from './modules/governance/index.js'\n\n// Multisig module\nexport { MultisigModule } from './modules/multisig/index.js'\n\n\n\n// Credential module\nexport {\n CredentialModule,\n CredentialKind,\n CredentialStatus,\n type W3CVerifiableCredential,\n type Credential,\n type CredentialTemplate\n} from './modules/credentials/CredentialModule.js'\n\n// DID module\nexport {\n DidModule,\n VerificationMethodType,\n VerificationRelationship,\n ServiceEndpointType,\n DidError,\n DidErrorClass,\n deriveDidDocumentPda,\n generateDidString,\n validateDidString,\n parseDidString,\n exportAsW3CDidDocument,\n createEd25519VerificationMethod,\n createServiceEndpoint,\n isDidActive,\n getMethodsForRelationship,\n canPerformAction,\n didDocumentToJson,\n getNetworkFromDid,\n getIdentifierFromDid,\n type DidDocument,\n type VerificationMethod,\n type ServiceEndpoint,\n type DidResolutionMetadata,\n type W3CDidDocument,\n type CreateDidDocumentParams,\n type UpdateDidDocumentParams,\n type DeactivateDidDocumentParams,\n type ResolveDidDocumentParams\n} from './modules/did/index.js'\n\n// Reputation module\nexport {\n ReputationModule,\n ReputationTier,\n BadgeType,\n REPUTATION_CONSTANTS,\n type ReputationData,\n type JobPerformance,\n type ReputationCalculationResult,\n type CategoryReputation,\n type PayAIReputationRecordInput,\n} from './modules/reputation/ReputationModule.js'\n\n// Reputation Tag Engine (Pillar 2: Granular Tags)\nexport { ReputationTagEngine } from './utils/reputation-tag-engine.js'\n\n// Indexer module - On-chain transaction polling for x402 payments\nexport {\n X402TransactionIndexer,\n type X402PaymentData,\n type SignatureInfo,\n type X402IndexerConfig,\n} from './modules/indexer/index.js'\n\n// Reputation tag types and enums\nexport {\n TagCategory,\n SkillTag,\n BehaviorTag,\n ComplianceTag,\n TAG_CONSTANTS,\n TagConfidenceLevel,\n DEFAULT_TAG_DECAY,\n type TagScore as TagScoreType,\n type TagCriteria,\n type TagEvaluation,\n type TagFilters,\n type TagUpdateRequest,\n type BulkTagUpdateRequest,\n type TagQueryResult,\n type TagDecayConfig,\n type ReputationMetrics as TagReputationMetrics,\n} from './types/reputation-tags.js'\n\n// Multi-Source Reputation Aggregator (Pillar 3: External Sources)\nexport {\n MultiSourceAggregator,\n type AggregatedReputation,\n type SourceScoreBreakdown,\n} from './modules/reputation/MultiSourceAggregator.js'\n\n// Reputation source adapters and types\nexport {\n ReputationSource,\n BaseReputationAdapter,\n type ReputationSourceAdapter,\n type ReputationSourceConfig,\n type SourceReputationData,\n} from './modules/reputation/adapters/ReputationSourceAdapter.js'\n\n// Privacy module\nexport {\n PrivacyModule,\n PrivacyMode,\n VisibilityLevel,\n ScoreRange,\n PrivacyPresets,\n PRIVACY_CONSTANTS,\n type MetricVisibility,\n type PrivacySettings,\n type PrivacyPreset,\n type VisibleReputation,\n type InitializePrivacyParams,\n type UpdatePrivacyModeParams,\n type SetMetricVisibilityParams,\n type GrantAccessParams,\n type RevokeAccessParams,\n type ApplyPresetParams,\n calculateVisibleScore,\n getReputationTier,\n getScoreRange,\n canViewerAccess,\n filterMetricsByVisibility,\n getDefaultMetricVisibility,\n validatePrivacySettings,\n getTierDisplayName,\n getRangeDisplayString,\n} from './modules/privacy/index.js'\n\nexport { \n UnifiedCredentialService, \n type UnifiedCredentialConfig,\n type IssuedCredentialResult\n} from './modules/credentials/UnifiedCredentialService.js'\n\nexport {\n CrossmintVCClient,\n type CrossmintClientOptions,\n type CredentialType as CrossmintCredentialType,\n type IssuedCredential as CrossmintIssuedCredential,\n GHOSTSPEAK_CREDENTIAL_TYPES\n} from './modules/credentials/CrossmintVCClient.js'\n\n// Work Order module removed - x402 payment protocol focus\n\n// H2A Communication module - removed (use A2A instructions for agent communication)\n\n// =====================================================\n// PROTOCOL EXPORTS (x402, A2A, H2A)\n// =====================================================\n\n// x402 Payment Protocol - Replaced by PayAI\n// See PayAI Integration section below\n// PaymentStreamingManager removed - use PayAI for payment flows\n\n// A2A (Agent-to-Agent) Protocol - REMOVED (messaging deprecated)\n\n// H2A (Human-to-Agent) Protocol - REMOVED (messaging deprecated)\n\n// =====================================================\n// PAYAI INTEGRATION (Recommended Payment Facilitator)\n// =====================================================\n\nexport {\n PayAIClient,\n createPayAIClient,\n payAIFetch,\n isPaymentRequired,\n extractPaymentRequirements,\n PayAIWebhookHandler,\n createPayAIWebhookHandler,\n generateTestWebhookSignature,\n createMockPayAIWebhook,\n // Agent Sync\n PayAIAgentSync,\n createPayAIAgentSync\n} from './payai/index.js'\n\nexport type {\n PayAIWebhookEventType,\n PayAIPaymentStatus,\n PayAINetwork,\n PayAIWebhookPayload,\n PayAIPaymentData,\n PayAIWebhookVerification,\n PayAIClientConfig,\n PayAIPaymentRequirement,\n PayAIPaymentResponse,\n PayAIReputationRecord,\n PayAIAgentRegistration,\n PayAIWebhookHandlerOptions,\n PayAIWebhookResult,\n // Agent Sync types\n PayAIAgentSyncConfig,\n AgentSyncResult,\n GhostSpeakAgentData\n} from './payai/index.js'\n\n// =====================================================\n// CRYPTO EXPORTS\n// =====================================================\n\n// Crypto exports with renamed TransferProof to avoid conflict\n// ZK proof exports removed - x402 payment protocol focus\nexport {\n generateKeypair,\n encrypt,\n decrypt,\n generateTransferProof,\n generateWithdrawProof,\n type ElGamalKeypair,\n type ElGamalCiphertext,\n type TransferProof as ElGamalTransferProof,\n type WithdrawProof,\n loadWasmModule,\n isWasmAvailable,\n type WasmModule,\n elgamal,\n wasmBridge\n} from './crypto/index.js'\n\n\n// Export TransactionSigner type from Solana kit\nexport type { TransactionSigner } from '@solana/kit'\n\n// =====================================================\n// GENERATED TYPES EXPORTS (for CLI)\n// =====================================================\n\n// Re-export essential enums and types for CLI usage\nexport { ProposalStatus } from './generated/types/proposalStatus.js'\n\n// Export discriminator validation and account migration utilities\nexport {\n safeDecodeAgent,\n validateAccountDiscriminator,\n createDiscriminatorErrorMessage,\n inspectAccountData,\n type DiscriminatorValidationResult,\n type AccountInspectionResult\n} from './utils/discriminator-validator.js'\n\nexport {\n createMigrationPlan,\n createMigrationReport,\n simulateMigration,\n getMigrationInstructions,\n extractLegacyData,\n type MigrationPlan,\n type MigrationResult,\n type LegacyAgentData\n} from './utils/account-migration.js'\n\nexport {\n runAccountDiagnostics,\n runBatchDiagnostics,\n diagnoseAccountFromChain,\n diagnoseBatchFromChain,\n exportDiagnosticReport,\n type DiagnosticReport,\n type BatchDiagnosticReport\n} from './utils/account-diagnostics.js'\n\n// Export all essential types and utilities\nexport type {\n GhostSpeakConfig,\n AgentWithAddress,\n AgentRegistrationData,\n AgentAccount,\n PricingModel,\n GhostSpeakError,\n RegisterAgentParams,\n RpcResponse,\n RpcAccountInfo,\n RpcProgramAccount,\n RpcProgramAccountsResponse,\n RpcAccountInfoResponse,\n RpcMultipleAccountsResponse,\n TransactionResponse,\n SimulatedTransactionResponse,\n SolanaRpcClient,\n EmergencyConfig,\n Commitment,\n RetryConfig,\n ExtendedRpcApi,\n RpcApi,\n RpcSubscriptionApi\n} from './types/index.js'\n\n// Export authorization types\nexport type {\n SolanaNetwork,\n ReputationAuthorization,\n AuthorizationMetadata,\n AuthorizationProof,\n AuthorizationInvalidReason,\n VerificationDetails,\n AuthorizationMessage,\n CreateAuthorizationParams,\n VerifyAuthorizationParams,\n AuthorizationUsage,\n AuthorizationStatus,\n AuthorizationWithStatus,\n BatchAuthorizationVerification,\n AuthorizationRevocation,\n AuthorizationFilter,\n} from './types/authorization/authorization-types.js'\n\nexport {\n deriveAgentPda,\n deriveUserRegistryPda,\n deriveAgentVerificationPda,\n findProgramDerivedAddress\n} from './utils/pda.js'\n\n// Export authorization signature utilities\nexport {\n createAuthorizationMessage,\n signAuthorizationMessage,\n verifyAuthorizationSignature,\n createSignedAuthorization,\n generateNonce,\n serializeAuthorization,\n deserializeAuthorization,\n getAuthorizationId,\n isAuthorizationExpired,\n isAuthorizationExhausted,\n validateAuthorizationNetwork,\n} from './utils/signature-verification.js'\n\n// Export enhanced error handling utilities\nexport {\n InstructionValidationError,\n isKnownInstruction,\n validateInstructionAccounts,\n createAccountMismatchError,\n getAccountRequirements,\n getRequiredSigners,\n getWritableAccounts,\n getPDAAccounts,\n enhanceErrorMessage,\n debugInstructionCall,\n getInstructionMapping,\n generateAccountValidationError,\n INSTRUCTION_MAPPINGS\n} from './utils/instruction-error-handler.js'\n\n// Export enhanced client error utilities\nexport {\n GhostSpeakSDKError,\n withEnhancedErrors,\n withEnhancedErrorsSync,\n enhanceTransactionError,\n logEnhancedError,\n createErrorContext,\n validatePreconditions,\n extractInstructionName\n} from './utils/enhanced-client-errors.js'\n\n// Export generated instruction functions and types with selective exports to avoid conflicts\nexport {\n // Instruction builders - these are the primary exports users need\n getRegisterAgentInstructionAsync,\n\n // ===== STAKING INSTRUCTIONS (GHOST Token Staking) =====\n getInitializeStakingConfigInstructionAsync,\n getStakeGhostInstructionAsync,\n getUnstakeGhostInstructionAsync,\n getSlashStakeInstructionAsync,\n\n // ===== GHOST PROTECT ESCROW INSTRUCTIONS (B2C Escrow) =====\n getCreateEscrowInstructionAsync,\n getSubmitDeliveryInstruction,\n getApproveDeliveryInstruction,\n getFileDisputeInstruction,\n getArbitrateDisputeInstruction,\n\n // ===== DID INSTRUCTIONS (W3C Decentralized Identifiers) =====\n getCreateDidDocumentInstructionAsync,\n getUpdateDidDocumentInstructionAsync,\n getDeactivateDidDocumentInstructionAsync,\n getResolveDidDocumentInstructionAsync,\n\n // ===== REPUTATION TAG INSTRUCTIONS =====\n getUpdateReputationTagsInstructionAsync,\n\n // ===== STAKING TYPES =====\n type SlashReason,\n type StakingAccount,\n type StakingConfig,\n type GhostStakedEvent,\n type GhostUnstakedEvent,\n type GhostSlashedEvent,\n\n // ===== GHOST PROTECT TYPES =====\n type ArbitratorDecision,\n type EscrowStatus,\n type GhostProtectEscrow,\n type EscrowCreatedEvent,\n type EscrowCompletedEvent,\n type DeliverySubmittedEvent,\n type DisputeFiledEvent,\n type DisputeResolvedEvent,\n\n // ===== REPUTATION TAG TYPES =====\n type TagScore,\n type ReputationTagsUpdatedEvent,\n type TagDecayAppliedEvent,\n\n // Other generated utilities\n GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS\n} from './generated/index.js'\n\n// Account decoders (exported specifically to avoid conflict with types)\nexport {\n getAgentDecoder,\n getStakingAccountDecoder,\n getStakingConfigDecoder,\n getGhostProtectEscrowDecoder,\n} from './generated/accounts/index.js'\n\n// Export program constants\nexport { GHOSTSPEAK_PROGRAM_ID } from './constants/index.js'\n\n// Export system addresses\nexport { \n NATIVE_MINT_ADDRESS,\n TOKEN_PROGRAM_ADDRESS,\n TOKEN_2022_PROGRAM_ADDRESS,\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS \n} from './constants/system-addresses.js'\n\n// Export Token 2022 utilities\nexport {\n deriveAssociatedTokenAddress,\n deriveSplTokenAssociatedTokenAddress,\n deriveToken2022AssociatedTokenAddress,\n getAssociatedTokenAccount,\n detectTokenProgram,\n isToken2022Mint,\n getTokenProgramType,\n getAllAssociatedTokenAddresses,\n validateAssociatedTokenAddress,\n getTokenProgramAddress,\n getTokenProgramFromAddress,\n formatTokenAmount,\n parseTokenAmount,\n TokenProgram,\n TokenExtension,\n // New Token-2022 extension detection functions\n hasTransferFeeExtension,\n hasConfidentialTransferExtension,\n hasInterestBearingExtension,\n // New Token-2022 configuration retrieval functions\n getTransferFeeConfig,\n getConfidentialTransferConfig,\n getInterestBearingConfig,\n type AssociatedTokenAccount,\n type TransferFeeConfig,\n type ConfidentialTransferConfig,\n type InterestBearingConfig\n} from './utils/token-utils.js'\n\n\n\n// Export governance helpers\nexport { deriveMultisigPda, deriveProposalPda } from './utils/governance-helpers.js'\n\n// Export IPFS functionality for large content storage\nexport type {\n IPFSConfig,\n IPFSProviderConfig,\n IPFSUploadOptions,\n IPFSUploadResult,\n IPFSRetrievalOptions,\n IPFSRetrievalResult,\n IPFSPinResult,\n IPFSOperationResult,\n IPFSContentMetadata,\n FlexibleContent,\n ContentStorageResult,\n IPFSError\n} from './types/ipfs-types.js'\n\nexport {\n IPFSClient\n} from './utils/ipfs-client.js'\n\nexport {\n IPFSUtils,\n createIPFSUtils,\n createMetadataUri,\n determineStorageMethod,\n DEFAULT_IPFS_CONFIG\n} from './utils/ipfs-utils.js'\n\nexport {\n TEST_IPFS_CONFIG,\n createTestIPFSConfig\n} from './utils/test-ipfs-config.js'\n\nexport {\n IPFSOperationError,\n CircuitBreaker,\n RetryHandler,\n FallbackHandler,\n IPFSErrorHandler,\n createIPFSErrorHandler,\n isIPFSError,\n withIPFSErrorHandling,\n DEFAULT_RETRY_CONFIG\n} from './utils/ipfs-error-handling.js'\n\n\n// Export wallet funding utilities\nexport {\n WalletFundingService,\n fundWallet,\n ensureMinimumBalance,\n defaultFundingService,\n type FundingStrategyOptions,\n type FundingResult\n} from './utils/wallet-funding.js'\n\n// Export privacy and encryption utilities\nexport {\n ClientEncryptionService,\n generateLocalPrivacyProof,\n verifyLocalPrivacyProof,\n type EncryptedData,\n type PrivateMetadata,\n type ClientEncryptionOptions\n} from './utils/client-encryption.js'\n\nexport {\n PrivateMetadataStorage,\n IPFSProvider,\n LocalStorageProvider,\n PrivateDataQuery,\n estimateStorageCost,\n createPrivacyManifest,\n type StorageProvider,\n type StoredPrivateData,\n type PrivateDataReference,\n type PrivacyManifest\n} from './utils/private-metadata.js'\n\n// Confidential transfer removed - x402 payment protocol focus\n// export {\n// ConfidentialTransferManager,\n// type ConfidentialAccount,\n// type ConfigureAccountParams,\n// type DepositParams,\n// type WithdrawParams,\n// type TransferParams\n// } from './utils/confidential-transfer-manager.js'\n\nexport {\n getFeatureFlags,\n isFeatureEnabled,\n FeatureFlagManager,\n type FeatureFlags\n} from './utils/feature-flags.js'\n\nexport {\n checkFeatureGate,\n clearFeatureGateCache,\n FEATURE_GATES,\n type FeatureStatus\n} from './utils/feature-gate-detector.js'\n\n// ZK proof builder removed - x402 payment protocol focus\n// export {\n// generateRangeProofWithCommitment,\n// generateTransferProofWithInstruction,\n// isZkProgramAvailable,\n// getZkProgramStatus,\n// ProofMode,\n// type ProofGenerationOptions,\n// type ProofGenerationResult\n// } from './utils/zk-proof-builder.js'\n\n// Migration utilities removed - ZK program post-mortem\n// All necessary functionality is available through the modern client implementation above","/**\n * X402 Transaction Indexer\n *\n * Polls Solana blockchain for x402 payment transactions to eliminate\n * webhook dependency and enable historical reputation backfilling.\n *\n * x402 payments are SPL token transfers (USDC) to PayAI facilitator addresses.\n * This indexer discovers these transfers and extracts payment metadata.\n *\n * @module modules/indexer\n */\n\nimport type { Address, Signature } from '@solana/kit'\nimport type { Rpc, GetSignaturesForAddressApi, GetTransactionApi } from '@solana/rpc'\n\n// =====================================================\n// TYPES\n// =====================================================\n\n/**\n * Parsed x402 payment data from on-chain transaction\n */\nexport interface X402PaymentData {\n /** Transaction signature (on-chain proof) */\n signature: string\n /** Merchant (agent) receiving payment */\n merchant: Address\n /** Payer sending payment */\n payer: Address\n /** Payment amount in token base units (e.g., micro-USDC) */\n amount: string\n /** Payment success status */\n success: boolean\n /** Block timestamp */\n timestamp: Date\n /** Solana network */\n network: 'solana' | 'solana-devnet'\n /** Response time in milliseconds (if available from memo) */\n responseTimeMs?: number\n /** Additional metadata from transaction memo */\n metadata?: Record<string, unknown>\n}\n\n/**\n * Transaction signature with metadata\n */\nexport interface SignatureInfo {\n signature: Signature\n slot: bigint\n blockTime: bigint | null\n err: unknown | null\n}\n\n/**\n * Indexer configuration\n */\nexport interface X402IndexerConfig {\n /** Solana RPC client */\n rpc: Rpc<GetSignaturesForAddressApi & GetTransactionApi>\n /** PayAI facilitator address to monitor */\n facilitatorAddress: Address\n /** Network identifier */\n network?: 'solana' | 'solana-devnet'\n /** Maximum transactions per poll */\n batchSize?: number\n}\n\n// =====================================================\n// X402 TRANSACTION INDEXER\n// =====================================================\n\n/**\n * X402 Transaction Indexer\n *\n * Discovers x402 payments by monitoring SPL token transfers\n * to PayAI facilitator addresses on Solana.\n *\n * @example\n * ```typescript\n * const indexer = new X402TransactionIndexer({\n * rpc: createSolanaRpc('https://api.devnet.solana.com'),\n * facilitatorAddress: address('PayAI...'),\n * network: 'solana-devnet',\n * })\n *\n * // Poll for new transactions\n * const payments = await indexer.pollTransactions()\n * ```\n */\nexport class X402TransactionIndexer {\n private readonly rpc: Rpc<GetSignaturesForAddressApi & GetTransactionApi>\n private readonly facilitatorAddress: Address\n private readonly network: 'solana' | 'solana-devnet'\n private readonly batchSize: number\n\n constructor(config: X402IndexerConfig) {\n this.rpc = config.rpc\n this.facilitatorAddress = config.facilitatorAddress\n this.network = config.network || 'solana'\n this.batchSize = config.batchSize || 100\n }\n\n // =====================================================\n // PUBLIC METHODS\n // =====================================================\n\n /**\n * Poll for new x402 transactions since last sync\n *\n * @param lastSignature - Last processed signature (for pagination)\n * @param limit - Maximum transactions to fetch\n * @returns Array of parsed x402 payment data\n */\n async pollTransactions(\n lastSignature?: Signature,\n limit?: number\n ): Promise<X402PaymentData[]> {\n try {\n // 1. Fetch transaction signatures for facilitator address\n const signatures = await this.getSignatures(lastSignature, limit)\n\n if (signatures.length === 0) {\n return []\n }\n\n console.log(`[X402 Indexer] Found ${signatures.length} new transactions`)\n\n // 2. Parse each transaction to extract x402 payment data\n const payments: X402PaymentData[] = []\n\n for (const sig of signatures) {\n try {\n const payment = await this.parseTransaction(sig.signature)\n\n if (payment) {\n payments.push(payment)\n }\n } catch (error) {\n console.error(`[X402 Indexer] Failed to parse transaction ${sig.signature}:`, error)\n // Continue processing other transactions\n }\n }\n\n console.log(`[X402 Indexer] Parsed ${payments.length} x402 payments`)\n\n return payments\n } catch (error) {\n console.error('[X402 Indexer] Failed to poll transactions:', error)\n throw error\n }\n }\n\n /**\n * Parse a specific transaction signature\n *\n * @param signature - Transaction signature to parse\n * @returns Parsed x402 payment data or null if not an x402 payment\n */\n async parseTransaction(sig: Signature | string): Promise<X402PaymentData | null> {\n try {\n // Fetch full transaction data\n const txSignature = (typeof sig === 'string' ? sig : sig) as Signature\n const response = await this.rpc\n .getTransaction(txSignature, {\n maxSupportedTransactionVersion: 0,\n encoding: 'jsonParsed',\n })\n .send()\n\n if (!response || !response.transaction) {\n return null\n }\n\n // Check if this is an x402 payment (SPL token transfer)\n const isX402 = this.isX402Payment(response)\n if (!isX402) {\n return null\n }\n\n // Extract payment data from transaction\n return this.extractPaymentData(response, typeof sig === 'string' ? sig : String(sig))\n } catch (error) {\n console.error(`[X402 Indexer] Failed to fetch transaction ${sig}:`, error)\n return null\n }\n }\n\n // =====================================================\n // PRIVATE METHODS\n // =====================================================\n\n /**\n * Fetch transaction signatures for the facilitator address\n */\n private async getSignatures(\n before?: Signature,\n limit?: number\n ): Promise<SignatureInfo[]> {\n try {\n const config: { limit: number; before?: Signature } = {\n limit: limit || this.batchSize,\n }\n\n if (before) {\n config.before = before\n }\n\n const response = await this.rpc\n .getSignaturesForAddress(this.facilitatorAddress, config)\n .send()\n\n return response.map((sig) => ({\n signature: sig.signature,\n slot: sig.slot,\n blockTime: sig.blockTime,\n err: sig.err ?? null,\n }))\n } catch (error) {\n console.error('[X402 Indexer] Failed to fetch signatures:', error)\n throw error\n }\n }\n\n /**\n * Check if transaction is an x402 payment\n *\n * x402 payments are characterized by:\n * - SPL token transfer (TokenProgram or Token2022Program)\n * - Transfer TO the facilitator address\n * - Optional memo instruction with payment metadata\n */\n private isX402Payment(transaction: any): boolean {\n try {\n const instructions = transaction.transaction?.message?.instructions || []\n\n // Look for SPL token transfer instruction\n const hasTokenTransfer = instructions.some((ix: any) => {\n // Check if this is a token program instruction\n const programId = ix.programId?.toString()\n const isTokenProgram =\n programId === 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' || // SPL Token\n programId === 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' // Token-2022\n\n if (!isTokenProgram) return false\n\n // Check if this is a transfer instruction\n const parsed = ix.parsed\n if (parsed?.type === 'transfer' || parsed?.type === 'transferChecked') {\n // Verify destination is the facilitator\n const destination = parsed.info?.destination\n return destination === this.facilitatorAddress.toString()\n }\n\n return false\n })\n\n return hasTokenTransfer\n } catch (error) {\n console.error('[X402 Indexer] Error checking if x402 payment:', error)\n return false\n }\n }\n\n /**\n * Extract payment data from transaction\n */\n private extractPaymentData(transaction: any, signature: string): X402PaymentData | null {\n try {\n const instructions = transaction.transaction?.message?.instructions || []\n\n // Find token transfer instruction\n const transferIx = instructions.find((ix: any) => {\n const parsed = ix.parsed\n return parsed?.type === 'transfer' || parsed?.type === 'transferChecked'\n })\n\n if (!transferIx) {\n return null\n }\n\n const transferInfo = transferIx.parsed.info\n\n // Extract basic payment data\n const merchant = transferInfo.destination as Address\n const payer = transferInfo.source as Address\n const amount = transferInfo.amount || transferInfo.tokenAmount?.amount || '0'\n const success = transaction.meta?.err === null\n\n // Extract timestamp from block time\n const blockTime = transaction.blockTime\n const timestamp = blockTime ? new Date(blockTime * 1000) : new Date()\n\n // Look for memo instruction (optional metadata)\n const memoIx = instructions.find((ix: any) =>\n ix.programId?.toString()?.includes('Memo')\n )\n\n let responseTimeMs: number | undefined\n let metadata: Record<string, unknown> | undefined\n\n if (memoIx && memoIx.data) {\n try {\n // Decode memo data\n const memoText = Buffer.from(memoIx.data, 'base64').toString('utf-8')\n const memoData = JSON.parse(memoText)\n\n responseTimeMs = memoData.responseTimeMs\n metadata = memoData\n } catch {\n // Memo is not JSON, ignore\n }\n }\n\n return {\n signature,\n merchant,\n payer,\n amount,\n success,\n timestamp,\n network: this.network,\n responseTimeMs,\n metadata,\n }\n } catch (error) {\n console.error('[X402 Indexer] Failed to extract payment data:', error)\n return null\n }\n }\n}\n","/**\n * PayAI Webhook Handler\n *\n * Handles incoming webhooks from PayAI facilitator for payment events.\n * Converts payment data to reputation records for GhostSpeak's\n * reputation system.\n *\n * @module payai/PayAIWebhookHandler\n * @see https://docs.payai.network/x402/introduction\n */\n\nimport { EventEmitter } from 'node:events'\nimport { createHmac, timingSafeEqual } from 'node:crypto'\nimport type { Address } from '@solana/addresses'\nimport type {\n PayAIWebhookPayload,\n PayAIWebhookHandlerOptions,\n PayAIWebhookResult,\n PayAIWebhookVerification,\n PayAIReputationRecord,\n PayAIPaymentData\n} from './PayAITypes.js'\nimport type { AuthorizationModule } from '../modules/authorization/AuthorizationModule.js'\n\n// =====================================================\n// CONSTANTS\n// =====================================================\n\n/** Default tolerance for webhook timestamp verification (5 minutes) */\nconst TIMESTAMP_TOLERANCE_MS = 5 * 60 * 1000\n\n/** PayAI webhook signature header name */\nconst SIGNATURE_HEADER = 'x-payai-signature'\n\n/** PayAI webhook timestamp header name */\nconst TIMESTAMP_HEADER = 'x-payai-timestamp'\n\n// =====================================================\n// WEBHOOK HANDLER CLASS\n// =====================================================\n\n/**\n * Events emitted by the webhook handler\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface _PayAIWebhookHandlerEvents {\n 'payment:verified': (data: PayAIPaymentData) => void\n 'payment:settled': (data: PayAIPaymentData) => void\n 'payment:failed': (data: PayAIPaymentData) => void\n 'reputation:recorded': (record: PayAIReputationRecord) => void\n 'error': (error: Error) => void\n}\n\n/**\n * PayAI Webhook Handler\n *\n * Processes incoming PayAI webhooks and converts payment events\n * to reputation records for the GhostSpeak reputation system.\n *\n * @example\n * ```typescript\n * const handler = new PayAIWebhookHandler({\n * webhookSecret: process.env.PAYAI_WEBHOOK_SECRET,\n * onRecordReputation: async (record) => {\n * await reputationModule.recordPayAIPayment(record);\n * }\n * });\n *\n * // In your API route\n * const result = await handler.handleWebhook(request);\n * ```\n */\nexport class PayAIWebhookHandler extends EventEmitter {\n private readonly options: PayAIWebhookHandlerOptions\n private readonly verifySignatures: boolean\n private readonly authorizationModule?: AuthorizationModule\n private readonly payAIFacilitatorAddress?: Address\n\n constructor(\n options: PayAIWebhookHandlerOptions = {},\n authorizationModule?: AuthorizationModule,\n payAIFacilitatorAddress?: Address\n ) {\n super()\n this.options = options\n this.verifySignatures = options.verifySignatures ?? process.env.NODE_ENV === 'production'\n this.authorizationModule = authorizationModule\n this.payAIFacilitatorAddress = payAIFacilitatorAddress\n }\n\n // =====================================================\n // PUBLIC METHODS\n // =====================================================\n\n /**\n * Handle an incoming webhook request\n *\n * @param request - The incoming HTTP request (must have headers and body)\n * @returns Processing result\n */\n async handleWebhook(request: {\n headers: Headers | Record<string, string | undefined>\n body: string | PayAIWebhookPayload\n }): Promise<PayAIWebhookResult> {\n try {\n // Parse body if string\n const payload = typeof request.body === 'string'\n ? JSON.parse(request.body) as PayAIWebhookPayload\n : request.body\n\n // Verify signature if enabled\n if (this.verifySignatures && this.options.webhookSecret) {\n const bodyStr = typeof request.body === 'string'\n ? request.body\n : JSON.stringify(request.body)\n\n const verification = await this.verifySignature(\n request.headers,\n bodyStr\n )\n\n if (!verification.valid) {\n return {\n success: false,\n error: verification.error ?? 'Invalid signature'\n }\n }\n }\n\n // Process the webhook based on event type\n return await this.processPayload(payload)\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.emit('error', new Error(`Webhook processing failed: ${errorMessage}`))\n\n return {\n success: false,\n error: errorMessage\n }\n }\n }\n\n /**\n * Verify webhook signature\n */\n async verifySignature(\n headers: Headers | Record<string, string | undefined>,\n body: string\n ): Promise<PayAIWebhookVerification> {\n const getHeader = (name: string): string | undefined => {\n if (headers instanceof Headers) {\n return headers.get(name) ?? undefined\n }\n return headers[name]\n }\n\n const signature = getHeader(SIGNATURE_HEADER)\n const timestamp = getHeader(TIMESTAMP_HEADER)\n\n if (!signature) {\n return { valid: false, error: 'Missing signature header' }\n }\n\n if (!timestamp) {\n return { valid: false, error: 'Missing timestamp header' }\n }\n\n // Verify timestamp is recent\n const timestampMs = parseInt(timestamp, 10)\n if (isNaN(timestampMs)) {\n return { valid: false, error: 'Invalid timestamp format' }\n }\n\n const now = Date.now()\n if (Math.abs(now - timestampMs) > TIMESTAMP_TOLERANCE_MS) {\n return { valid: false, error: 'Timestamp too old or too far in future' }\n }\n\n // Verify HMAC signature\n if (!this.options.webhookSecret) {\n return { valid: false, error: 'Webhook secret not configured' }\n }\n\n const expectedSignature = this.computeSignature(\n timestamp,\n body,\n this.options.webhookSecret\n )\n\n const signatureBuffer = Buffer.from(signature, 'hex')\n const expectedBuffer = Buffer.from(expectedSignature, 'hex')\n\n if (signatureBuffer.length !== expectedBuffer.length) {\n return { valid: false, error: 'Invalid signature' }\n }\n\n if (!timingSafeEqual(signatureBuffer, expectedBuffer)) {\n return { valid: false, error: 'Invalid signature' }\n }\n\n return { valid: true }\n }\n\n /**\n * Convert a PayAI payment to a reputation record\n */\n paymentToReputationRecord(data: PayAIPaymentData): PayAIReputationRecord {\n return {\n agentAddress: data.merchant as Address,\n paymentSignature: data.transactionSignature,\n amount: BigInt(data.amount),\n success: data.success ?? data.status === 'settled',\n responseTimeMs: data.responseTimeMs ?? 0,\n payerAddress: data.payer,\n timestamp: new Date(data.settledAt ?? data.verifiedAt ?? Date.now()),\n network: data.network\n }\n }\n\n // =====================================================\n // PRIVATE METHODS\n // =====================================================\n\n /**\n * Process a verified webhook payload\n */\n private async processPayload(payload: PayAIWebhookPayload): Promise<PayAIWebhookResult> {\n const { type, data } = payload\n\n // Emit event based on type\n switch (type) {\n case 'payment.verified':\n this.emit('payment:verified', data)\n await this.options.onPaymentVerified?.(data)\n break\n\n case 'payment.settled':\n this.emit('payment:settled', data)\n await this.options.onPaymentSettled?.(data)\n\n // Record to reputation on settlement\n if (this.options.onRecordReputation) {\n // Verify on-chain authorization if module is configured\n if (this.authorizationModule && this.payAIFacilitatorAddress) {\n const isAuthorized = await this.verifyOnChainAuthorization(data.merchant as Address)\n if (!isAuthorized) {\n return {\n success: false,\n eventType: type,\n paymentId: data.paymentId,\n error: 'Agent has not authorized PayAI facilitator to update reputation',\n reputationRecorded: false\n }\n }\n }\n\n const record = this.paymentToReputationRecord(data)\n await this.options.onRecordReputation(record)\n this.emit('reputation:recorded', record)\n\n return {\n success: true,\n eventType: type,\n paymentId: data.paymentId,\n reputationRecorded: true\n }\n }\n break\n\n case 'payment.failed':\n this.emit('payment:failed', data)\n await this.options.onPaymentFailed?.(data)\n\n // Record failed payment to reputation (negative signal)\n if (this.options.onRecordReputation) {\n const record = this.paymentToReputationRecord(data)\n record.success = false\n await this.options.onRecordReputation(record)\n this.emit('reputation:recorded', record)\n\n return {\n success: true,\n eventType: type,\n paymentId: data.paymentId,\n reputationRecorded: true\n }\n }\n break\n\n case 'payment.refunded':\n // Just emit, don't record to reputation\n break\n\n default:\n return {\n success: false,\n error: `Unknown event type: ${type}`\n }\n }\n\n return {\n success: true,\n eventType: type,\n paymentId: data.paymentId,\n reputationRecorded: false\n }\n }\n\n /**\n * Verify on-chain authorization for an agent\n *\n * Checks if the agent has pre-authorized the PayAI facilitator\n * to update their reputation on-chain.\n */\n private async verifyOnChainAuthorization(agentAddress: Address): Promise<boolean> {\n if (!this.authorizationModule || !this.payAIFacilitatorAddress) {\n // If authorization module is not configured, skip verification\n // (This maintains backwards compatibility)\n return true\n }\n\n try {\n // Fetch authorization from on-chain\n const authorization = await this.authorizationModule.fetchAuthorization(\n agentAddress,\n this.payAIFacilitatorAddress\n )\n\n if (!authorization) {\n return false\n }\n\n // Check if authorization is still valid\n const status = this.authorizationModule.getAuthorizationStatus(\n authorization,\n authorization.currentIndex\n )\n\n return status.isValid\n } catch (error) {\n // Log error but don't throw - authorization verification is optional\n console.error('Failed to verify on-chain authorization:', error)\n return false\n }\n }\n\n /**\n * Compute HMAC-SHA256 signature for a webhook payload\n */\n private computeSignature(timestamp: string, body: string, secret: string): string {\n const signedPayload = `${timestamp}.${body}`\n const hmac = createHmac('sha256', secret)\n hmac.update(signedPayload)\n return hmac.digest('hex')\n }\n}\n\n// =====================================================\n// FACTORY FUNCTION\n// =====================================================\n\n/**\n * Create a new PayAI webhook handler\n *\n * @param options - Handler configuration\n * @returns Configured webhook handler\n */\nexport function createPayAIWebhookHandler(\n options: PayAIWebhookHandlerOptions = {}\n): PayAIWebhookHandler {\n return new PayAIWebhookHandler(options)\n}\n\n// =====================================================\n// UTILITY FUNCTIONS\n// =====================================================\n\n/**\n * Generate a webhook signature for testing\n * (Useful for local development and testing)\n */\nexport function generateTestWebhookSignature(\n body: string,\n secret: string,\n timestamp?: number\n): { signature: string; timestamp: string } {\n const ts = (timestamp ?? Date.now()).toString()\n const signedPayload = `${ts}.${body}`\n const hmac = createHmac('sha256', secret)\n hmac.update(signedPayload)\n\n return {\n signature: hmac.digest('hex'),\n timestamp: ts\n }\n}\n\n/**\n * Create a mock PayAI webhook payload for testing\n */\nexport function createMockPayAIWebhook(\n overrides: Partial<PayAIPaymentData> = {}\n): PayAIWebhookPayload {\n return {\n id: `evt_${Date.now()}`,\n type: 'payment.settled',\n timestamp: new Date().toISOString(),\n data: {\n paymentId: `pay_${Date.now()}`,\n transactionSignature: `${Math.random().toString(36).slice(2)}${Math.random().toString(36).slice(2)}`,\n network: 'solana',\n payer: 'PayerWalletAddress111111111111111111111111',\n merchant: 'MerchantAgentAddress11111111111111111111',\n amount: '1000000', // 1 USDC\n asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n assetSymbol: 'USDC',\n status: 'settled',\n resource: 'https://api.example.com/ai/generate',\n responseTimeMs: 250,\n httpStatusCode: 200,\n success: true,\n settledAt: new Date().toISOString(),\n ...overrides\n }\n }\n}\n","/**\n * PayAI Agent Sync\n *\n * Utility for syncing GhostSpeak agents with PayAI marketplace.\n * Allows agents registered in GhostSpeak to be discovered via\n * PayAI's facilitator network.\n *\n * @module payai/PayAIAgentSync\n */\n\nimport { EventEmitter } from 'node:events'\nimport type { Address } from '@solana/addresses'\nimport type { PayAIAgentRegistration, PayAINetwork } from './PayAITypes.js'\n\n// =====================================================\n// CONSTANTS\n// =====================================================\n\n/** Default PayAI marketplace API URL */\nconst DEFAULT_MARKETPLACE_URL = 'https://marketplace.payai.network/api'\n\n// =====================================================\n// TYPES\n// =====================================================\n\n/**\n * Agent sync configuration\n */\nexport interface PayAIAgentSyncConfig {\n /** PayAI marketplace API URL */\n marketplaceUrl?: string\n\n /** API key for PayAI marketplace (if required) */\n apiKey?: string\n\n /** Network to register agents on */\n network?: PayAINetwork\n\n /** Request timeout in milliseconds */\n timeout?: number\n}\n\n/**\n * Agent sync result\n */\nexport interface AgentSyncResult {\n success: boolean\n agentId?: string\n marketplaceUrl?: string\n error?: string\n}\n\n/**\n * Agent data from GhostSpeak\n */\nexport interface GhostSpeakAgentData {\n /** Agent's Solana address */\n address: Address\n\n /** Agent name */\n name: string\n\n /** Agent description */\n description?: string\n\n /** Service capabilities/tags */\n capabilities: string[]\n\n /** x402-enabled service endpoint */\n serviceEndpoint: string\n\n /** Accepted payment tokens (e.g., USDC, SOL) */\n acceptedTokens: string[]\n\n /** Pricing in USDC (min, max) */\n pricing?: {\n minPrice: string\n maxPrice: string\n currency: string\n }\n\n /** Agent logo URL */\n logo?: string\n\n /** Agent website */\n website?: string\n\n /** Reputation score (0-10000) */\n reputationScore?: number\n}\n\n// =====================================================\n// AGENT SYNC CLASS\n// =====================================================\n\n/**\n * PayAI Agent Sync Manager\n *\n * Synchronizes GhostSpeak agents with PayAI marketplace for discovery.\n */\nexport class PayAIAgentSync extends EventEmitter {\n private readonly config: Required<Omit<PayAIAgentSyncConfig, 'apiKey'>> & { apiKey?: string }\n\n constructor(config: PayAIAgentSyncConfig = {}) {\n super()\n this.config = {\n marketplaceUrl: config.marketplaceUrl ?? DEFAULT_MARKETPLACE_URL,\n apiKey: config.apiKey,\n network: config.network ?? 'solana',\n timeout: config.timeout ?? 30000,\n }\n }\n\n // =====================================================\n // PUBLIC METHODS\n // =====================================================\n\n /**\n * Register a GhostSpeak agent with PayAI marketplace\n *\n * @param agent - Agent data from GhostSpeak\n * @returns Registration result\n */\n async registerAgent(agent: GhostSpeakAgentData): Promise<AgentSyncResult> {\n try {\n const registration = this.toPayAIRegistration(agent)\n\n const response = await this.makeRequest('/merchants/register', {\n method: 'POST',\n body: JSON.stringify(registration),\n })\n\n if (!response.ok) {\n const error = await response.text()\n return {\n success: false,\n error: `Registration failed: ${error}`,\n }\n }\n\n const data = await response.json() as { agentId: string; url: string }\n\n this.emit('agent:registered', {\n agentAddress: agent.address,\n agentId: data.agentId,\n })\n\n return {\n success: true,\n agentId: data.agentId,\n marketplaceUrl: data.url,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n return {\n success: false,\n error: errorMessage,\n }\n }\n }\n\n /**\n * Update an agent's registration on PayAI marketplace\n *\n * @param agentId - PayAI agent ID\n * @param agent - Updated agent data\n * @returns Update result\n */\n async updateAgent(agentId: string, agent: Partial<GhostSpeakAgentData>): Promise<AgentSyncResult> {\n try {\n const response = await this.makeRequest(`/merchants/${agentId}`, {\n method: 'PATCH',\n body: JSON.stringify(agent),\n })\n\n if (!response.ok) {\n const error = await response.text()\n return {\n success: false,\n error: `Update failed: ${error}`,\n }\n }\n\n this.emit('agent:updated', { agentId })\n\n return {\n success: true,\n agentId,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n return {\n success: false,\n error: errorMessage,\n }\n }\n }\n\n /**\n * Remove an agent from PayAI marketplace\n *\n * @param agentId - PayAI agent ID\n * @returns Removal result\n */\n async removeAgent(agentId: string): Promise<AgentSyncResult> {\n try {\n const response = await this.makeRequest(`/merchants/${agentId}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.text()\n return {\n success: false,\n error: `Removal failed: ${error}`,\n }\n }\n\n this.emit('agent:removed', { agentId })\n\n return {\n success: true,\n agentId,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n return {\n success: false,\n error: errorMessage,\n }\n }\n }\n\n /**\n * Check if an agent is registered on PayAI marketplace\n *\n * @param agentAddress - Agent's Solana address\n * @returns Whether agent is registered\n */\n async isAgentRegistered(agentAddress: Address): Promise<boolean> {\n try {\n const response = await this.makeRequest(\n `/merchants/check?address=${agentAddress}&network=${this.config.network}`\n )\n\n if (!response.ok) {\n return false\n }\n\n const data = await response.json() as { registered: boolean }\n return data.registered\n } catch {\n return false\n }\n }\n\n /**\n * Get agent's PayAI marketplace listing\n *\n * @param agentAddress - Agent's Solana address\n * @returns Agent listing or null\n */\n async getAgentListing(agentAddress: Address): Promise<PayAIAgentRegistration | null> {\n try {\n const response = await this.makeRequest(\n `/merchants/by-address?address=${agentAddress}&network=${this.config.network}`\n )\n\n if (!response.ok) {\n return null\n }\n\n return response.json() as Promise<PayAIAgentRegistration>\n } catch {\n return null\n }\n }\n\n /**\n * Sync reputation score to PayAI marketplace\n *\n * Updates the agent's reputation score on PayAI based on\n * GhostSpeak reputation calculations.\n *\n * @param agentId - PayAI agent ID\n * @param reputationScore - New reputation score (0-10000)\n * @returns Update result\n */\n async syncReputationScore(agentId: string, reputationScore: number): Promise<AgentSyncResult> {\n try {\n const response = await this.makeRequest(`/merchants/${agentId}/reputation`, {\n method: 'POST',\n body: JSON.stringify({\n score: reputationScore,\n source: 'ghostspeak',\n timestamp: Date.now(),\n }),\n })\n\n if (!response.ok) {\n const error = await response.text()\n return {\n success: false,\n error: `Reputation sync failed: ${error}`,\n }\n }\n\n this.emit('reputation:synced', { agentId, reputationScore })\n\n return {\n success: true,\n agentId,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n return {\n success: false,\n error: errorMessage,\n }\n }\n }\n\n // =====================================================\n // PRIVATE METHODS\n // =====================================================\n\n /**\n * Convert GhostSpeak agent data to PayAI registration format\n */\n private toPayAIRegistration(agent: GhostSpeakAgentData): PayAIAgentRegistration {\n return {\n agentAddress: agent.address,\n serviceEndpoint: agent.serviceEndpoint,\n capabilities: agent.capabilities,\n acceptedTokens: agent.acceptedTokens,\n pricing: agent.pricing,\n metadata: {\n name: agent.name,\n description: agent.description,\n logo: agent.logo,\n website: agent.website,\n },\n }\n }\n\n /**\n * Make an authenticated request to PayAI marketplace\n */\n private async makeRequest(\n path: string,\n options: RequestInit = {}\n ): Promise<Response> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Ghostspeak-Integration': '1.0',\n }\n\n if (this.config.apiKey) {\n headers['Authorization'] = `Bearer ${this.config.apiKey}`\n }\n\n try {\n const response = await fetch(`${this.config.marketplaceUrl}${path}`, {\n ...options,\n headers: {\n ...headers,\n ...options.headers as Record<string, string>,\n },\n signal: controller.signal,\n })\n\n return response\n } finally {\n clearTimeout(timeoutId)\n }\n }\n}\n\n// =====================================================\n// FACTORY FUNCTION\n// =====================================================\n\n/**\n * Create a PayAI agent sync manager\n *\n * @param config - Sync configuration\n * @returns Configured sync manager\n */\nexport function createPayAIAgentSync(config: PayAIAgentSyncConfig = {}): PayAIAgentSync {\n return new PayAIAgentSync(config)\n}\n","/**\n * Test IPFS configuration for beta testing and development\n */\n\nimport type { IPFSConfig } from '../types/ipfs-types.js'\n\n/**\n * Test IPFS configuration that uses the in-memory test provider\n * This configuration does not require any external services\n */\nexport const TEST_IPFS_CONFIG: IPFSConfig = {\n provider: {\n name: 'test',\n endpoint: 'http://localhost:8080' // Fake endpoint for testing\n },\n gateways: [\n 'http://localhost:8080',\n 'https://test.ipfs.io'\n ],\n autoPinning: true,\n sizeThreshold: 400, // Lower threshold for testing (400 bytes)\n maxRetries: 2,\n retryDelay: 500,\n enableCache: true,\n cacheTTL: 60000 // 1 minute for testing\n}\n\n/**\n * Create a test IPFS configuration with custom options\n */\nexport function createTestIPFSConfig(options?: Partial<IPFSConfig>): IPFSConfig {\n return {\n ...TEST_IPFS_CONFIG,\n ...options,\n provider: {\n ...TEST_IPFS_CONFIG.provider,\n ...(options?.provider ?? {})\n }\n }\n}","/**\n * Enhanced error handling and retry logic for IPFS operations in GhostSpeak\n */\n\nimport type { IPFSError, IPFSOperationResult } from '../types/ipfs-types.js'\n\n/**\n * IPFS-specific error class with enhanced context\n */\nexport class IPFSOperationError extends Error {\n constructor(\n public readonly type: IPFSError,\n message: string,\n public readonly provider?: string,\n public readonly retryCount?: number,\n public readonly originalError?: Error\n ) {\n super(message)\n this.name = 'IPFSOperationError'\n }\n}\n\n/**\n * Configuration for retry logic\n */\nexport interface RetryConfig {\n maxRetries: number\n baseDelay: number\n maxDelay: number\n backoffFactor: number\n retryableErrors: IPFSError[]\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n baseDelay: 1000,\n maxDelay: 30000,\n backoffFactor: 2,\n retryableErrors: [\n 'NETWORK_ERROR',\n 'TIMEOUT_ERROR',\n 'PROVIDER_ERROR'\n ]\n}\n\n/**\n * Circuit breaker for preventing cascading failures\n */\nexport class CircuitBreaker {\n private failures = 0\n private lastFailureTime = 0\n private state: 'CLOSED' | 'OPEN' | 'HALF_OPEN' = 'CLOSED'\n\n constructor(\n private readonly failureThreshold = 5,\n private readonly recoveryTime = 30000\n ) {}\n\n async execute<T>(operation: () => Promise<T>): Promise<T> {\n if (this.state === 'OPEN') {\n if (Date.now() - this.lastFailureTime > this.recoveryTime) {\n this.state = 'HALF_OPEN'\n } else {\n throw new Error('Circuit breaker is OPEN - too many failures')\n }\n }\n\n try {\n const result = await operation()\n this.onSuccess()\n return result\n } catch (error) {\n this.onFailure()\n throw error\n }\n }\n\n private onSuccess(): void {\n this.failures = 0\n this.state = 'CLOSED'\n }\n\n private onFailure(): void {\n this.failures++\n this.lastFailureTime = Date.now()\n \n if (this.failures >= this.failureThreshold) {\n this.state = 'OPEN'\n }\n }\n\n getState(): { state: string; failures: number; lastFailureTime: number } {\n return {\n state: this.state,\n failures: this.failures,\n lastFailureTime: this.lastFailureTime\n }\n }\n\n reset(): void {\n this.failures = 0\n this.lastFailureTime = 0\n this.state = 'CLOSED'\n }\n}\n\n/**\n * Enhanced retry utility with exponential backoff\n */\nexport class RetryHandler {\n private circuitBreaker: CircuitBreaker\n\n constructor(\n private readonly config: RetryConfig = DEFAULT_RETRY_CONFIG\n ) {\n this.circuitBreaker = new CircuitBreaker()\n }\n\n async execute<T>(\n operation: () => Promise<T>,\n context?: string\n ): Promise<T> {\n return this.circuitBreaker.execute(async () => {\n let lastError: Error\n \n for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {\n try {\n const result = await operation()\n \n if (attempt > 0) {\n console.log(`✅ Operation succeeded after ${attempt} retries${context ? ` (${context})` : ''}`)\n }\n \n return result\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error))\n \n if (attempt === this.config.maxRetries) {\n break // Don't delay on the last attempt\n }\n\n const shouldRetry = this.shouldRetry(lastError, attempt)\n if (!shouldRetry) {\n console.log(`❌ Error not retryable${context ? ` (${context})` : ''}:`, lastError.message)\n break\n }\n\n const delay = this.calculateDelay(attempt)\n console.log(`⏳ Retrying in ${delay}ms... (attempt ${attempt + 1}/${this.config.maxRetries}${context ? `, ${context}` : ''})`)\n \n await new Promise(resolve => setTimeout(resolve, delay))\n }\n }\n \n throw new IPFSOperationError(\n this.categorizeError(lastError!),\n `Operation failed after ${this.config.maxRetries + 1} attempts${context ? ` (${context})` : ''}: ${lastError!.message}`,\n undefined,\n this.config.maxRetries\n )\n })\n }\n\n private shouldRetry(error: Error, attempt: number): boolean {\n if (attempt >= this.config.maxRetries) {\n return false\n }\n\n const errorType = this.categorizeError(error)\n return this.config.retryableErrors.includes(errorType)\n }\n\n private calculateDelay(attempt: number): number {\n const exponentialDelay = this.config.baseDelay * Math.pow(this.config.backoffFactor, attempt)\n const jitter = Math.random() * 0.1 * exponentialDelay // Add 10% jitter\n return Math.min(exponentialDelay + jitter, this.config.maxDelay)\n }\n\n private categorizeError(error: Error): IPFSError {\n const message = error.message.toLowerCase()\n \nif (message.includes('timeout')) {\n return 'TIMEOUT_ERROR'\n }\n \nif (message.includes('network')) {\n return 'NETWORK_ERROR'\n }\n \nif (message.includes('unauthorized')) {\n return 'AUTHENTICATION_FAILED'\n }\n \nif (message.includes('quota')) {\n return 'QUOTA_EXCEEDED'\n }\n \n if (message.includes('invalid') && message.includes('hash')) {\n return 'INVALID_HASH'\n }\n \nif (message.includes('too large')) {\n return 'CONTENT_TOO_LARGE'\n }\n \n return 'PROVIDER_ERROR'\n }\n\n getStats(): {\n circuitBreakerState: ReturnType<CircuitBreaker['getState']>\n config: RetryConfig\n } {\n return {\n circuitBreakerState: this.circuitBreaker.getState(),\n config: this.config\n }\n }\n\n reset(): void {\n this.circuitBreaker.reset()\n }\n}\n\n/**\n * Fallback handler for graceful degradation\n */\nexport class FallbackHandler {\n private fallbackStrategies: Map<IPFSError, (error: IPFSOperationError) => Promise<unknown>> = new Map()\n\n constructor() {\n this.setupDefaultFallbacks()\n }\n\n private setupDefaultFallbacks(): void {\n // Fallback for upload failures - compress and retry inline storage\n this.fallbackStrategies.set('UPLOAD_FAILED', async (error) => {\n console.log('🔄 Upload failed, attempting inline storage fallback...')\n throw error // Let caller handle inline storage\n })\n\n // Fallback for retrieval failures - try alternative gateways\n this.fallbackStrategies.set('RETRIEVAL_FAILED', async (error) => {\n console.log('🔄 Retrieval failed, trying alternative gateways...')\n throw error // Let caller try alternative gateways\n })\n\n // Fallback for quota exceeded - suggest cleanup or alternative storage\n this.fallbackStrategies.set('QUOTA_EXCEEDED', async (error) => {\n console.warn('⚠️ IPFS quota exceeded - consider upgrading plan or cleaning up old content')\n throw error\n })\n }\n\n async handleError<T>(error: IPFSOperationError, fallbackValue?: T): Promise<T> {\n const strategy = this.fallbackStrategies.get(error.type)\n \n if (strategy) {\n try {\n const result = await strategy(error)\n return result as T\n } catch (_fallbackError) {\n console.warn('Fallback strategy also failed:', _fallbackError instanceof Error ? _fallbackError.message : String(_fallbackError))\n }\n }\n\n if (fallbackValue !== undefined) {\n console.log('Using provided fallback value')\n return fallbackValue\n }\n\n throw error\n }\n\n registerFallback<T>(errorType: IPFSError, strategy: (error: IPFSOperationError) => Promise<T>): void {\n this.fallbackStrategies.set(errorType, strategy)\n }\n}\n\n/**\n * Comprehensive error handler that combines retry logic with fallback strategies\n */\nexport class IPFSErrorHandler {\n private retryHandler: RetryHandler\n private fallbackHandler: FallbackHandler\n\n constructor(retryConfig?: Partial<RetryConfig>) {\n this.retryHandler = new RetryHandler({ ...DEFAULT_RETRY_CONFIG, ...retryConfig })\n this.fallbackHandler = new FallbackHandler()\n }\n\n async executeWithErrorHandling<T>(\n operation: () => Promise<IPFSOperationResult<T>>,\n context?: string,\n fallbackValue?: T\n ): Promise<IPFSOperationResult<T>> {\n try {\n const result = await this.retryHandler.execute(async () => {\n const opResult = await operation()\n \n if (!opResult.success && opResult.error) {\n throw new IPFSOperationError(\n opResult.error,\n opResult.message ?? `IPFS operation failed: ${opResult.error}`\n )\n }\n \n return opResult\n }, context)\n\n return result\n } catch (error) {\n const ipfsError = error instanceof IPFSOperationError \n ? error \n : new IPFSOperationError('PROVIDER_ERROR', error instanceof Error ? error.message : String(error))\n\n try {\n const fallbackResult = await this.fallbackHandler.handleError(ipfsError, fallbackValue)\n return {\n success: true,\n data: fallbackResult,\n message: 'Operation succeeded using fallback strategy'\n }\n } catch {\n return {\n success: false,\n error: ipfsError.type,\n message: ipfsError.message,\n duration: 0\n }\n }\n }\n }\n\n /**\n * Register a custom fallback strategy\n */\n registerFallback<T>(errorType: IPFSError, strategy: (error: IPFSOperationError) => Promise<T>): void {\n this.fallbackHandler.registerFallback(errorType, strategy)\n }\n\n /**\n * Get error handler statistics\n */\n getStats(): {\n retryStats: ReturnType<RetryHandler['getStats']>\n registeredFallbacks: IPFSError[]\n } {\n return {\n retryStats: this.retryHandler.getStats(),\n registeredFallbacks: Array.from(this.fallbackHandler['fallbackStrategies'].keys())\n }\n }\n\n /**\n * Reset all error handling state\n */\n reset(): void {\n this.retryHandler.reset()\n }\n}\n\n/**\n * Utility function to create a configured error handler\n */\nexport function createIPFSErrorHandler(config?: {\n retryConfig?: Partial<RetryConfig>\n customFallbacks?: {\n errorType: IPFSError\n strategy: (error: IPFSOperationError) => Promise<unknown>\n }[]\n}): IPFSErrorHandler {\n const handler = new IPFSErrorHandler(config?.retryConfig)\n \n if (config?.customFallbacks) {\n for (const { errorType, strategy } of config.customFallbacks) {\n handler.registerFallback(errorType, strategy)\n }\n }\n \n return handler\n}\n\n/**\n * Type guard to check if an error is an IPFS error\n */\nexport function isIPFSError(error: unknown): error is IPFSOperationError {\n return error instanceof IPFSOperationError\n}\n\n/**\n * Helper function to wrap any IPFS operation with error handling\n */\nexport async function withIPFSErrorHandling<T>(\n operation: () => Promise<T>,\n context?: string,\n errorHandler?: IPFSErrorHandler\n): Promise<IPFSOperationResult<T>> {\n const handler = errorHandler ?? new IPFSErrorHandler()\n \n return handler.executeWithErrorHandling(\n async () => {\n try {\n const result = await operation()\n return { success: true, data: result }\n } catch (error) {\n const ipfsError = error instanceof IPFSOperationError \n ? error.type \n : 'PROVIDER_ERROR' as IPFSError\n \n return {\n success: false,\n error: ipfsError,\n message: error instanceof Error ? error.message : String(error)\n }\n }\n },\n context\n )\n}","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","/**\n * Wallet Funding Utilities\n * \n * Provides robust wallet funding strategies that don't depend solely on unreliable devnet airdrops.\n * Supports multiple funding strategies with automatic fallback mechanisms.\n */\n\nimport type { \n Address, \n KeyPairSigner, \n Commitment\n} from '@solana/kit'\nimport { \n generateKeyPairSigner,\n createSolanaRpc,\n createKeyPairSignerFromBytes,\n pipe,\n createTransactionMessage,\n setTransactionMessageFeePayer,\n setTransactionMessageLifetimeUsingBlockhash,\n appendTransactionMessageInstructions,\n signTransactionMessageWithSigners,\n getBase64EncodedWireTransaction,\n lamports\n} from '@solana/kit'\nimport { getTransferSolInstruction } from '@solana-program/system'\nimport { promises as fs } from 'fs'\nimport chalk from 'chalk'\nimport bs58 from 'bs58'\n\n/**\n * Funding strategy options\n */\nexport interface FundingStrategyOptions {\n /** Target amount in lamports */\n amount: bigint\n /** Minimum amount required (if less, will try to top up) */\n minAmount?: bigint\n /** Maximum retries for airdrop */\n maxRetries?: number\n /** Delay between retries in ms */\n retryDelay?: number\n /** Use treasury wallet if available */\n useTreasury?: boolean\n /** Treasury wallet path or signer */\n treasuryWallet?: string | KeyPairSigner\n /** Additional funded wallets to try */\n fundedWallets?: (string | KeyPairSigner)[]\n /** Log funding attempts */\n verbose?: boolean\n}\n\n/**\n * Funding result\n */\nexport interface FundingResult {\n /** Whether funding was successful */\n success: boolean\n /** Final balance after funding */\n balance: bigint\n /** Funding method used */\n method: 'airdrop' | 'treasury' | 'funded-wallet' | 'existing'\n /** Number of attempts made */\n attempts: number\n /** Error if funding failed */\n error?: string\n /** Transaction signature if transfer was made */\n signature?: string\n}\n\n/**\n * Wallet funding utility with multiple strategies\n */\nexport class WalletFundingService {\n private rpc: ReturnType<typeof createSolanaRpc>\n private commitment: Commitment = 'confirmed'\n private isDevnetUrl: boolean\n\n constructor(rpcUrl: string, commitment: Commitment = 'confirmed') {\n // Check if this is a devnet URL\n this.isDevnetUrl = rpcUrl.includes('devnet')\n \n // Create RPC client\n this.rpc = createSolanaRpc(rpcUrl)\n \n this.commitment = commitment\n }\n\n /**\n * Fund a wallet using multiple strategies\n */\n async fundWallet(\n targetWallet: Address,\n options: FundingStrategyOptions\n ): Promise<FundingResult> {\n const {\n amount,\n minAmount = amount,\n maxRetries = 3,\n retryDelay = 2000,\n useTreasury = true,\n treasuryWallet,\n fundedWallets = [],\n verbose = false\n } = options\n\n const log = (message: string) => {\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] ${message}`))\n }\n }\n\n let attempts = 0\n\n try {\n // First check existing balance\n const currentBalance = await this.getBalance(targetWallet)\n log(`Current balance: ${this.formatSol(currentBalance)} SOL`)\n\n if (currentBalance >= minAmount) {\n log(`Wallet already has sufficient balance`)\n return {\n success: true,\n balance: currentBalance,\n method: 'existing',\n attempts: 0\n }\n }\n\n const needed = amount - currentBalance\n log(`Need to fund: ${this.formatSol(needed)} SOL`)\n\n // Strategy 1: Try devnet airdrop first\n if (this.isDevnetUrl && 'requestAirdrop' in this.rpc) {\n log(`Attempting devnet airdrop...`)\n const airdropResult = await this.tryAirdrop(\n targetWallet,\n needed,\n maxRetries,\n retryDelay,\n verbose\n )\n \n if (airdropResult.success) {\n const finalBalance = await this.getBalance(targetWallet)\n return {\n success: true,\n balance: finalBalance,\n method: 'airdrop',\n attempts: airdropResult.attempts,\n signature: airdropResult.signature\n }\n }\n \n attempts += airdropResult.attempts\n log(`Airdrop failed after ${airdropResult.attempts} attempts`)\n }\n\n // Strategy 2: Try treasury wallet\n if (useTreasury && treasuryWallet) {\n log(`Attempting treasury wallet funding...`)\n const treasuryResult = await this.tryTreasuryFunding(\n targetWallet,\n needed,\n treasuryWallet,\n verbose\n )\n \n if (treasuryResult.success) {\n const finalBalance = await this.getBalance(targetWallet)\n return {\n success: true,\n balance: finalBalance,\n method: 'treasury',\n attempts: attempts + 1,\n signature: treasuryResult.signature\n }\n }\n \n attempts++\n log(`Treasury funding failed: ${treasuryResult.error}`)\n }\n\n // Strategy 3: Try other funded wallets\n for (const fundedWallet of fundedWallets) {\n log(`Attempting funding from additional wallet...`)\n const fundedResult = await this.tryFundedWalletTransfer(\n targetWallet,\n needed,\n fundedWallet,\n verbose\n )\n \n if (fundedResult.success) {\n const finalBalance = await this.getBalance(targetWallet)\n return {\n success: true,\n balance: finalBalance,\n method: 'funded-wallet',\n attempts: attempts + 1,\n signature: fundedResult.signature\n }\n }\n \n attempts++\n log(`Funded wallet transfer failed: ${fundedResult.error}`)\n }\n\n // All strategies failed\n throw new Error('All funding strategies failed')\n\n } catch (error) {\n return {\n success: false,\n balance: await this.getBalance(targetWallet),\n method: 'airdrop',\n attempts,\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n\n /**\n * Try to fund using devnet airdrop with retries\n */\n private async tryAirdrop(\n targetWallet: Address,\n amount: bigint,\n maxRetries: number,\n retryDelay: number,\n verbose: boolean\n ): Promise<{ success: boolean; attempts: number; signature?: string; error?: string }> {\n // Type guard to ensure we have a devnet RPC\n if (!('requestAirdrop' in this.rpc)) {\n return {\n success: false,\n attempts: 0,\n error: 'Airdrop not available on this network'\n }\n }\n\n let attempts = 0\n\n for (let i = 0; i < maxRetries; i++) {\n attempts++\n \n try {\n const airdropResponse = await this.rpc\n .requestAirdrop(targetWallet, lamports(amount), { commitment: this.commitment })\n .send()\n \n // The response is the signature directly\n const signature = airdropResponse\n \n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Airdrop requested: ${signature}`))\n }\n\n // Get latest blockhash for confirmation\n await this.rpc.getLatestBlockhash().send()\n\n // Wait for confirmation using getSignatureStatuses\n let confirmed = false\n const maxAttempts = 30\n for (let i = 0; i < maxAttempts; i++) {\n const statusResponse = await this.rpc\n .getSignatureStatuses([signature])\n .send()\n \n const status = statusResponse.value[0]\n if (status && status.confirmationStatus === 'confirmed') {\n confirmed = true\n break\n }\n \n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n\n // Additional wait to ensure balance is updated\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n if (!confirmed) {\n throw new Error('Airdrop confirmation timeout')\n }\n\n return {\n success: true,\n attempts,\n signature\n }\n } catch (error) {\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Airdrop attempt ${attempts} failed: ${error}`))\n }\n \n if (i < maxRetries - 1) {\n await new Promise(resolve => setTimeout(resolve, retryDelay))\n }\n }\n }\n\n return {\n success: false,\n attempts,\n error: 'Max retries exceeded'\n }\n }\n\n /**\n * Try to fund from treasury wallet\n */\n private async tryTreasuryFunding(\n targetWallet: Address,\n amount: bigint,\n treasuryWallet: string | KeyPairSigner,\n verbose: boolean\n ): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n const treasurySigner = await this.loadWallet(treasuryWallet)\n const treasuryBalance = await this.getBalance(treasurySigner.address)\n\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Treasury balance: ${this.formatSol(treasuryBalance)} SOL`))\n }\n\n if (treasuryBalance < amount + BigInt(5000)) { // Keep 5000 lamports for fees\n return {\n success: false,\n error: 'Insufficient treasury balance'\n }\n }\n\n const signature = await this.transferSol(\n treasurySigner,\n targetWallet,\n amount,\n verbose\n )\n\n return {\n success: true,\n signature\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n\n /**\n * Try to fund from another funded wallet\n */\n private async tryFundedWalletTransfer(\n targetWallet: Address,\n amount: bigint,\n fundedWallet: string | KeyPairSigner,\n verbose: boolean\n ): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n const signer = await this.loadWallet(fundedWallet)\n const balance = await this.getBalance(signer.address)\n\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Funded wallet balance: ${this.formatSol(balance)} SOL`))\n }\n\n if (balance < amount + BigInt(5000)) { // Keep 5000 lamports for fees\n return {\n success: false,\n error: 'Insufficient wallet balance'\n }\n }\n\n const signature = await this.transferSol(\n signer,\n targetWallet,\n amount,\n verbose\n )\n\n return {\n success: true,\n signature\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n\n /**\n * Transfer SOL from one wallet to another\n */\n private async transferSol(\n from: KeyPairSigner,\n to: Address,\n amount: bigint,\n verbose: boolean\n ): Promise<string> {\n const { value: latestBlockhash } = await this.rpc.getLatestBlockhash().send()\n \n const transferInstruction = getTransferSolInstruction({\n source: from,\n destination: to,\n amount\n })\n\n const message = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayer(from.address, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions([transferInstruction], tx)\n )\n\n const signedTransaction = await signTransactionMessageWithSigners(message)\n const base64Transaction = getBase64EncodedWireTransaction(signedTransaction)\n \n const sendResult = await this.rpc\n .sendTransaction(base64Transaction, { \n skipPreflight: false,\n preflightCommitment: this.commitment,\n maxRetries: BigInt(5)\n })\n .send()\n \n // sendTransaction returns the signature directly\n const signature = sendResult\n\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Transfer sent: ${signature}`))\n }\n\n // Wait for confirmation using getSignatureStatuses\n let confirmed = false\n const maxAttempts = 30\n for (let i = 0; i < maxAttempts; i++) {\n const statusResponse = await this.rpc\n .getSignatureStatuses([signature])\n .send()\n \n const status = statusResponse.value[0]\n if (status && status.confirmationStatus === 'confirmed') {\n confirmed = true\n break\n }\n \n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n \n if (!confirmed) {\n throw new Error('Transaction confirmation timeout')\n }\n\n return signature\n }\n\n /**\n * Load wallet from path or return existing signer\n */\n private async loadWallet(walletSource: string | KeyPairSigner): Promise<KeyPairSigner> {\n if (typeof walletSource !== 'string') {\n return walletSource\n }\n\n // Check if it's an environment variable\n const envValue = process.env[walletSource]\n if (envValue) {\n // Try to parse as JSON array\n try {\n const walletData = JSON.parse(envValue) as number[]\n return await createKeyPairSignerFromBytes(new Uint8Array(walletData))\n } catch {\n // Try as base58 private key\n try {\n const privateKeyBytes = bs58.decode(envValue)\n // Solana private keys can be 32 bytes (seed) or 64 bytes (full keypair)\n if (privateKeyBytes.length === 32 || privateKeyBytes.length === 64) {\n return await createKeyPairSignerFromBytes(privateKeyBytes)\n }\n throw new Error('Invalid base58 private key length')\n } catch (error) {\n throw new Error(`Failed to load wallet from base58 key: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n\n // Load from file\n const walletData = JSON.parse(await fs.readFile(walletSource, 'utf-8')) as number[]\n return createKeyPairSignerFromBytes(new Uint8Array(walletData))\n }\n\n /**\n * Load wallet from base58 private key\n */\n static async loadWalletFromBase58(base58PrivateKey: string): Promise<KeyPairSigner> {\n try {\n const privateKeyBytes = bs58.decode(base58PrivateKey)\n // Solana private keys can be 32 bytes (seed) or 64 bytes (full keypair)\n if (privateKeyBytes.length === 32 || privateKeyBytes.length === 64) {\n return await createKeyPairSignerFromBytes(privateKeyBytes)\n }\n throw new Error(`Invalid private key length: ${privateKeyBytes.length} bytes. Expected 32 or 64 bytes.`)\n } catch (error) {\n if (error instanceof Error && error.message.includes('Invalid private key length')) {\n throw error\n }\n throw new Error(`Failed to decode base58 private key: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n /**\n * Get wallet balance\n */\n async getBalance(wallet: Address): Promise<bigint> {\n const response = await this.rpc\n .getBalance(wallet, { commitment: this.commitment })\n .send()\n return response.value\n }\n\n /**\n * Check if connected to devnet\n */\n private async isDevnet(): Promise<boolean> {\n try {\n const response = await this.rpc.getGenesisHash().send()\n // Devnet genesis hash - response is the hash string directly\n return await Promise.resolve(response === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG')\n } catch {\n return false\n }\n }\n\n /**\n * Format lamports as SOL\n */\n private formatSol(lamports: bigint): string {\n return (Number(lamports) / 1_000_000_000).toFixed(4)\n }\n\n /**\n * Create and fund multiple test wallets\n */\n async createAndFundTestWallets(\n count: number,\n amountPerWallet: bigint,\n options: Omit<FundingStrategyOptions, 'amount'>\n ): Promise<KeyPairSigner[]> {\n const wallets: KeyPairSigner[] = []\n\n console.log(chalk.cyan(`Creating and funding ${count} test wallets...`))\n\n for (let i = 0; i < count; i++) {\n const wallet = await generateKeyPairSigner()\n \n console.log(chalk.gray(`Wallet ${i + 1}: ${wallet.address}`))\n \n const result = await this.fundWallet(wallet.address, {\n ...options,\n amount: amountPerWallet\n })\n\n if (result.success) {\n wallets.push(wallet)\n console.log(chalk.green(`✅ Funded with ${this.formatSol(result.balance)} SOL via ${result.method}`))\n } else {\n console.log(chalk.red(`❌ Failed to fund: ${result.error}`))\n }\n }\n\n return wallets\n }\n\n /**\n * Ensure minimum balance for a wallet\n */\n async ensureMinimumBalance(\n wallet: Address,\n minBalance: bigint,\n options?: Partial<FundingStrategyOptions>\n ): Promise<FundingResult> {\n const currentBalance = await this.getBalance(wallet)\n \n if (currentBalance >= minBalance) {\n return {\n success: true,\n balance: currentBalance,\n method: 'existing',\n attempts: 0\n }\n }\n\n const needed = minBalance - currentBalance\n return this.fundWallet(wallet, {\n amount: needed,\n minAmount: minBalance,\n ...options\n })\n }\n}\n\n/**\n * Default funding service instance for devnet\n */\nexport const defaultFundingService = new WalletFundingService(\n process.env.GHOSTSPEAK_RPC_URL ?? 'https://api.devnet.solana.com'\n)\n\n/**\n * Quick helper to fund a wallet with default settings\n */\nexport async function fundWallet(\n wallet: Address,\n amountInSol: number,\n options?: Partial<FundingStrategyOptions>\n): Promise<FundingResult> {\n return defaultFundingService.fundWallet(wallet, {\n amount: BigInt(Math.floor(amountInSol * 1_000_000_000)),\n ...options\n })\n}\n\n/**\n * Quick helper to ensure minimum balance\n */\nexport async function ensureMinimumBalance(\n wallet: Address,\n minBalanceInSol: number,\n options?: Partial<FundingStrategyOptions>\n): Promise<FundingResult> {\n return defaultFundingService.ensureMinimumBalance(\n wallet,\n BigInt(Math.floor(minBalanceInSol * 1_000_000_000)),\n options\n )\n}","/**\n * Private Metadata Storage\n * \n * Handles off-chain storage of encrypted data with on-chain references.\n * Supports IPFS and other storage backends for private data while\n * maintaining on-chain integrity verification.\n */\n\nimport { sha256 } from '@noble/hashes/sha256'\nimport { bytesToHex, hexToBytes } from '@noble/curves/abstract/utils'\nimport type { Address } from '@solana/kit'\n\nimport {\n ClientEncryptionService,\n type EncryptedData,\n type PrivateMetadata\n} from './client-encryption.js'\n\nimport { getFeatureFlags } from './feature-flags.js'\n\n// =====================================================\n// TYPES\n// =====================================================\n\nexport interface StorageProvider {\n store(data: Uint8Array): Promise<string>\n retrieve(hash: string): Promise<Uint8Array>\n delete(hash: string): Promise<boolean>\n}\n\nexport interface StoredPrivateData {\n /** On-chain reference hash */\n onChainHash: Uint8Array\n \n /** Storage provider identifier */\n storageProvider: 'ipfs' | 'arweave' | 'custom'\n \n /** Storage location (IPFS hash, Arweave ID, etc) */\n storageLocation: string\n \n /** Encryption metadata */\n encryptionMetadata: {\n version: number\n publicKey: Uint8Array\n timestamp: number\n }\n \n /** Size of stored data */\n size: number\n \n /** Content type hint */\n contentType?: string\n}\n\nexport interface PrivateDataReference {\n /** Account storing the reference */\n account: Address\n \n /** Storage details */\n storage: StoredPrivateData\n \n /** Access control */\n accessControl: {\n owner: Address\n allowedReaders: Address[]\n expiresAt?: number\n }\n}\n\n// =====================================================\n// STORAGE PROVIDERS\n// =====================================================\n\n/**\n * Real IPFS storage provider using kubo-rpc-client (2025)\n * Connects to actual IPFS nodes for production use\n * \n * SECURITY NOTICE (Kluster MCP): \n * - All data stored is encrypted client-side before IPFS upload\n * - Use private IPFS networks for sensitive production data\n * - Implement proper key management and rotation policies\n * - Monitor for unauthorized access patterns\n */\nexport class IPFSProvider implements StorageProvider {\n private client: any\n private readonly isPrivateNetwork: boolean\n \n constructor(options?: { \n ipfsNodeUrl?: string; \n headers?: Record<string, string>;\n usePrivateNetwork?: boolean;\n }) {\n // Dynamic import to avoid bundling issues\n const createClient = require('kubo-rpc-client').create\n \n // Add null checks and validation for IPFS client options\n const ipfsNodeUrl = options?.ipfsNodeUrl || 'http://localhost:5001'\n const headers = options?.headers || {}\n this.isPrivateNetwork = options?.usePrivateNetwork || false\n \n // Validate IPFS node URL format\n try {\n new URL(ipfsNodeUrl)\n } catch (error) {\n throw new Error(`Invalid IPFS node URL provided: ${ipfsNodeUrl}`)\n }\n \n // Security validation for production use\n if (!this.isPrivateNetwork && ipfsNodeUrl.includes('localhost')) {\n console.warn('SECURITY WARNING: Using localhost IPFS node in production. Consider using a private IPFS network.')\n }\n \n // Validate headers object\n if (typeof headers !== 'object' || headers === null) {\n throw new Error('Headers must be a valid object')\n }\n \n this.client = createClient({\n url: ipfsNodeUrl,\n headers\n })\n \n if (!this.client) {\n throw new Error('Failed to create IPFS client - kubo-rpc-client returned null')\n }\n }\n \n async store(data: Uint8Array): Promise<string> {\n try {\n // Security check: Validate data size to prevent abuse\n if (data.length > 10 * 1024 * 1024) { // 10MB limit\n throw new Error('Data size exceeds maximum allowed limit (10MB)')\n }\n \n // Security check: Ensure data appears encrypted (basic validation)\n if (!this.isPrivateNetwork && this.isDataUnencrypted(data)) {\n console.warn('SECURITY WARNING: Data appears to be unencrypted. Ensure client-side encryption is applied.')\n }\n \n const result = await this.client.add(data, {\n pin: true, // Pin to ensure persistence\n cidVersion: 1 // Use CIDv1 for better compatibility\n })\n return result.cid.toString()\n } catch (error) {\n throw new Error(`Failed to store data to IPFS: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n \n /**\n * Basic heuristic to detect potentially unencrypted data\n * This is not foolproof but can catch obvious cases\n */\n private isDataUnencrypted(data: Uint8Array): boolean {\n // Check for common unencrypted patterns\n const text = new TextDecoder('utf-8', { fatal: false }).decode(data.slice(0, 100))\n const commonPatterns = ['{', '<', 'BEGIN', 'name', 'address', 'email', 'password']\n return commonPatterns.some(pattern => text.toLowerCase().includes(pattern.toLowerCase()))\n }\n \n async retrieve(hash: string): Promise<Uint8Array> {\n try {\n const chunks: Uint8Array[] = []\n for await (const chunk of this.client.cat(hash)) {\n chunks.push(chunk)\n }\n \n // Concatenate all chunks\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n \n return result\n } catch (error) {\n throw new Error(`Failed to retrieve data from IPFS: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n \n async delete(hash: string): Promise<boolean> {\n try {\n await this.client.pin.rm(hash)\n return true\n } catch (error) {\n // Pin removal might fail if not pinned - this is a non-critical error\n // Log as warning but don't throw since the data might not have been pinned\n console.warn(`IPFS unpin warning for ${hash}: ${error instanceof Error ? error.message : String(error)}`)\n return false // Return false to indicate pin removal didn't happen, but don't fail\n }\n }\n}\n\n/**\n * Local storage provider (for development)\n */\nexport class LocalStorageProvider implements StorageProvider {\n private prefix = 'ghostspeak_private_'\n \n async store(data: Uint8Array): Promise<string> {\n const hash = bytesToHex(sha256(data))\n globalThis.localStorage.setItem(this.prefix + hash, bytesToHex(data))\n return hash\n }\n \n async retrieve(hash: string): Promise<Uint8Array> {\n const hex = globalThis.localStorage.getItem(this.prefix + hash)\n if (hex) {\n return hexToBytes(hex)\n }\n throw new Error(`Data not found: ${hash}`)\n }\n \n async delete(hash: string): Promise<boolean> {\n globalThis.localStorage.removeItem(this.prefix + hash)\n return true\n }\n}\n\n// =====================================================\n// PRIVATE METADATA STORAGE SERVICE\n// =====================================================\n\nexport class PrivateMetadataStorage {\n private encryptionService: ClientEncryptionService\n private storageProvider: StorageProvider\n private featureFlags = getFeatureFlags()\n \n constructor(\n storageProvider?: StorageProvider,\n encryptionService?: ClientEncryptionService\n ) {\n this.storageProvider = storageProvider ?? new IPFSProvider()\n this.encryptionService = encryptionService ?? new ClientEncryptionService()\n }\n \n /**\n * Store private data off-chain with on-chain reference\n */\n async storePrivateData(\n data: Record<string, unknown>,\n publicMetadata: Record<string, unknown>,\n recipientPubkey: Uint8Array\n ): Promise<StoredPrivateData> {\n // Check if IPFS storage is enabled\n if (!this.featureFlags.isEnabled('ENABLE_IPFS_STORAGE')) {\n throw new Error('IPFS storage is not enabled')\n }\n \n // Create private metadata\n const privateMetadata = await this.encryptionService.createPrivateMetadata(\n data,\n publicMetadata,\n recipientPubkey\n )\n \n // Serialize for storage\n const serialized = this.serializePrivateMetadata(privateMetadata)\n \n // Store in IPFS (or other provider)\n const storageLocation = await this.storageProvider.store(serialized)\n \n // Create on-chain reference\n const onChainHash = this.createOnChainHash(privateMetadata, storageLocation)\n \n return {\n onChainHash,\n storageProvider: 'ipfs',\n storageLocation,\n encryptionMetadata: {\n version: privateMetadata.encrypted.version,\n publicKey: privateMetadata.encrypted.publicKey,\n timestamp: privateMetadata.encrypted.timestamp\n },\n size: serialized.length,\n contentType: 'application/json'\n }\n }\n \n /**\n * Retrieve private data from off-chain storage\n */\n async retrievePrivateData(\n reference: StoredPrivateData,\n secretKey: Uint8Array\n ): Promise<{\n privateData: Record<string, unknown>\n publicData: Record<string, unknown>\n }> {\n // Retrieve from storage\n const serialized = await this.storageProvider.retrieve(reference.storageLocation)\n \n // Verify integrity\n const expectedHash = this.createOnChainHash(\n this.deserializePrivateMetadata(serialized),\n reference.storageLocation\n )\n \n if (bytesToHex(expectedHash) !== bytesToHex(reference.onChainHash)) {\n throw new Error('Data integrity check failed')\n }\n \n // Deserialize\n const metadata = this.deserializePrivateMetadata(serialized)\n \n // Decrypt private data\n const decryptedBytes = await this.decryptPrivateData(\n metadata.encrypted,\n secretKey\n )\n \n const privateData = JSON.parse(new TextDecoder().decode(decryptedBytes)) as Record<string, unknown>\n \n return {\n privateData,\n publicData: metadata.public\n }\n }\n \n /**\n * Create a verifiable link between on-chain and off-chain data\n */\n createVerifiableLink(\n onChainData: Record<string, unknown>,\n offChainReference: StoredPrivateData\n ): Uint8Array {\n const combined = {\n onChain: onChainData,\n offChain: {\n hash: bytesToHex(offChainReference.onChainHash),\n location: offChainReference.storageLocation,\n provider: offChainReference.storageProvider\n },\n timestamp: Date.now()\n }\n \n return sha256(new TextEncoder().encode(JSON.stringify(combined)))\n }\n \n /**\n * Batch store multiple private data items\n */\n async batchStore(\n items: {\n data: Record<string, unknown>\n publicMetadata: Record<string, unknown>\n recipientPubkey: Uint8Array\n }[]\n ): Promise<StoredPrivateData[]> {\n const results: StoredPrivateData[] = []\n \n for (const item of items) {\n const stored = await this.storePrivateData(\n item.data,\n item.publicMetadata,\n item.recipientPubkey\n )\n results.push(stored)\n }\n \n return results\n }\n \n // =====================================================\n // PRIVATE METHODS\n // =====================================================\n \n private serializePrivateMetadata(metadata: PrivateMetadata): Uint8Array {\n const json = JSON.stringify({\n encrypted: {\n ciphertext: {\n commitment: bytesToHex(metadata.encrypted.ciphertext.commitment.commitment),\n handle: bytesToHex(metadata.encrypted.ciphertext.handle.handle)\n },\n publicKey: bytesToHex(metadata.encrypted.publicKey),\n commitment: bytesToHex(metadata.encrypted.commitment),\n timestamp: metadata.encrypted.timestamp,\n version: metadata.encrypted.version\n },\n public: metadata.public,\n storageHash: bytesToHex(metadata.storageHash),\n ipfsHash: metadata.ipfsHash\n })\n \n return new TextEncoder().encode(json)\n }\n \n private deserializePrivateMetadata(data: Uint8Array): PrivateMetadata {\n const json = JSON.parse(new TextDecoder().decode(data)) as {\n encrypted: {\n ciphertext: {\n commitment: string\n handle: string\n }\n publicKey: string\n commitment: string\n timestamp: number\n version: number\n }\n public: Record<string, unknown>\n storageHash: string\n ipfsHash?: string\n }\n \n return {\n encrypted: {\n ciphertext: {\n commitment: {\n commitment: hexToBytes(json.encrypted.ciphertext.commitment)\n },\n handle: {\n handle: hexToBytes(json.encrypted.ciphertext.handle)\n }\n },\n publicKey: hexToBytes(json.encrypted.publicKey),\n commitment: hexToBytes(json.encrypted.commitment),\n timestamp: json.encrypted.timestamp,\n version: json.encrypted.version\n },\n public: json.public,\n storageHash: hexToBytes(json.storageHash),\n ipfsHash: json.ipfsHash\n }\n }\n \n private createOnChainHash(\n metadata: PrivateMetadata,\n storageLocation: string\n ): Uint8Array {\n const data = {\n storageHash: bytesToHex(metadata.storageHash),\n storageLocation,\n commitment: bytesToHex(metadata.encrypted.commitment),\n timestamp: metadata.encrypted.timestamp\n }\n \n return sha256(new TextEncoder().encode(JSON.stringify(data)))\n }\n \n private async decryptPrivateData(\n encrypted: EncryptedData,\n secretKey: Uint8Array\n ): Promise<Uint8Array> {\n // Full decryption pending encryption service support\n // For now, decrypt the amount and serialize it\n // This is a limitation of current ElGamal implementation which only supports amounts\n const decryptedAmount = await this.encryptionService.decryptAmount(encrypted, secretKey)\n return new TextEncoder().encode(JSON.stringify({ amount: decryptedAmount.toString() }))\n }\n}\n\n// =====================================================\n// PRIVACY-PRESERVING QUERIES\n// =====================================================\n\n/**\n * Query builder for private data\n */\nexport class PrivateDataQuery {\n private conditions: {\n field: string\n operator: 'eq' | 'gt' | 'lt' | 'contains'\n value: unknown\n encrypted: boolean\n }[] = []\n \n where(field: string, operator: 'eq' | 'gt' | 'lt' | 'contains', value: unknown): this {\n this.conditions.push({ field, operator, value, encrypted: false })\n return this\n }\n \n whereEncrypted(field: string, commitment: Uint8Array): this {\n this.conditions.push({\n field,\n operator: 'eq',\n value: commitment,\n encrypted: true\n })\n return this\n }\n \n /**\n * Execute query against encrypted data\n * Note: This is limited compared to on-chain queries\n */\n async execute(\n storage: PrivateMetadataStorage,\n references: StoredPrivateData[]\n ): Promise<StoredPrivateData[]> {\n // For encrypted fields, we can only match by commitment\n // This is a privacy-preserving but limited query capability\n const results: StoredPrivateData[] = []\n \n for (const ref of references) {\n let matches = true\n \n for (const condition of this.conditions) {\n if (condition.encrypted) {\n // Can only check commitments for encrypted data\n // Real implementation would be more sophisticated\n if (condition.field === 'commitment') {\n const match = bytesToHex(ref.onChainHash) === bytesToHex(condition.value as Uint8Array)\n if (!match) {\n matches = false\n break\n }\n }\n }\n }\n \n if (matches) {\n results.push(ref)\n }\n }\n \n return results\n }\n}\n\n// =====================================================\n// UTILITIES\n// =====================================================\n\n/**\n * Calculate storage cost estimate\n */\nexport function estimateStorageCost(\n dataSize: number,\n provider: 'ipfs' | 'arweave'\n): {\n cost: bigint\n currency: string\n} {\n // Mock cost calculation\n // In production, this would query actual storage costs\n if (provider === 'ipfs') {\n return {\n cost: BigInt(Number(dataSize) * 1), // 1 lamport per byte\n currency: 'lamports'\n }\n } else {\n return {\n cost: BigInt(Number(dataSize) * 10), // 10 lamports per byte\n currency: 'lamports'\n }\n }\n}\n\n/**\n * Create a privacy manifest for transparency\n */\nexport interface PrivacyManifest {\n dataTypes: string[]\n encryptionMethod: 'elgamal' | 'aes256'\n storageLocation: 'ipfs' | 'arweave' | 'on-chain'\n retentionPeriod?: number\n accessControl: 'owner-only' | 'public-read' | 'permissioned'\n}\n\nexport function createPrivacyManifest(\n dataTypes: string[],\n options: Partial<PrivacyManifest> = {}\n): PrivacyManifest {\n return {\n dataTypes,\n encryptionMethod: options.encryptionMethod ?? 'elgamal',\n storageLocation: options.storageLocation ?? 'ipfs',\n retentionPeriod: options.retentionPeriod,\n accessControl: options.accessControl ?? 'owner-only'\n }\n}","/**\n * Feature Gate Detector\n * \n * Runtime detection of Solana feature gates to determine which native\n * programs and features are available on the current network.\n * \n * This module specifically tracks feature gates\n * and provides caching to minimize RPC calls.\n */\n\nimport { address } from '@solana/addresses'\nimport type { Address } from '@solana/kit'\nimport type { Rpc, GetAccountInfoApi } from '@solana/rpc'\n\n// =====================================================\n// CONSTANTS\n// =====================================================\n\n/**\n * Known feature gate addresses\n */\nexport const FEATURE_GATES = {\n /** Confidential transfers feature (placeholder) */\n CONFIDENTIAL_TRANSFERS: address('11111111111111111111111111111111'),\n \n /** Token-2022 program (placeholder) */\n TOKEN_2022: address('TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'),\n} as const\n\n/**\n * Cache configuration\n */\nconst CACHE_TTL_MS = 5 * 60 * 1000 // 5 minutes\nconst MAX_CACHE_ENTRIES = 100\n\n// =====================================================\n// TYPES\n// =====================================================\n\nexport interface FeatureStatus {\n /** Whether the feature is activated */\n activated: boolean\n \n /** When the status was last checked */\n lastChecked: number\n \n /** Optional activation slot if known */\n activationSlot?: bigint\n \n /** Error if status check failed */\n error?: string\n}\n\nexport interface FeatureGateCache {\n [featureId: string]: FeatureStatus\n}\n\n// =====================================================\n// CACHE IMPLEMENTATION\n// =====================================================\n\nclass FeatureGateCacheManager {\n private cache: FeatureGateCache = {}\n private cacheOrder: string[] = []\n \n /**\n * Get cached feature status\n */\n get(featureId: string): FeatureStatus | null {\n const cached = this.cache[featureId]\n // Cache found, continue\n \n // Check if cache is expired\n if (Date.now() - cached.lastChecked > CACHE_TTL_MS) {\n this.remove(featureId)\n return null\n }\n \n return cached\n }\n \n /**\n * Set feature status in cache\n */\n set(featureId: string, status: FeatureStatus): void {\n // Remove if already exists to update order\n this.remove(featureId)\n \n // Add to cache\n this.cache[featureId] = status\n this.cacheOrder.push(featureId)\n \n // Enforce max cache size\n if (this.cacheOrder.length > MAX_CACHE_ENTRIES) {\n const oldest = this.cacheOrder.shift()\n if (oldest) {\n delete this.cache[oldest]\n }\n }\n }\n \n /**\n * Remove from cache\n */\n remove(featureId: string): void {\n delete this.cache[featureId]\n this.cacheOrder = this.cacheOrder.filter(id => id !== featureId)\n }\n \n /**\n * Clear entire cache\n */\n clear(): void {\n this.cache = {}\n this.cacheOrder = []\n }\n}\n\n// Global cache instance\nconst featureCache = new FeatureGateCacheManager()\n\n// =====================================================\n// FEATURE DETECTION\n// =====================================================\n\n/**\n * Check if a feature gate is activated on the current network\n * \n * @param connection - Solana connection\n * @param featureGate - Feature gate public key to check\n * @returns Feature activation status\n */\nexport async function checkFeatureGate(\n rpc: Rpc<GetAccountInfoApi>,\n featureGate: Address\n): Promise<FeatureStatus> {\n const featureId = featureGate\n \n // Check cache first\n const cached = featureCache.get(featureId)\n if (cached) {\n return cached\n }\n \n try {\n // Check if the feature account exists\n const response = await rpc.getAccountInfo(featureGate, { encoding: 'base64' }).send()\n \n // Feature gates are special accounts - if they exist, the feature is active\n const accountInfo = response.value\n const activated = accountInfo !== null\n \n const status: FeatureStatus = {\n activated,\n lastChecked: Date.now(),\n }\n \n // If activated, try to get activation slot from account data\n if (accountInfo?.data) {\n try {\n // Decode base64 data\n const dataString = typeof accountInfo.data === 'string' ? accountInfo.data : accountInfo.data[0]\n const dataBuffer = Buffer.from(dataString, 'base64')\n \n // First 8 bytes of feature account data is the activation slot\n const activationSlot = BigInt(\n dataBuffer.readBigUInt64LE(0)\n )\n status.activationSlot = activationSlot\n } catch {\n // Ignore parsing errors\n }\n }\n \n // Cache the result\n featureCache.set(featureId, status)\n \n return status\n } catch (error) {\n // Cache error state to avoid repeated failures\n const errorStatus: FeatureStatus = {\n activated: false,\n lastChecked: Date.now(),\n error: error instanceof Error ? error.message : 'Unknown error',\n }\n \n featureCache.set(featureId, errorStatus)\n \n return errorStatus\n }\n}\n\n/**\n * Check multiple feature gates in parallel\n * \n * @param connection - Solana connection\n * @param featureGates - Array of feature gates to check\n * @returns Map of feature gate to status\n */\nexport async function checkMultipleFeatureGates(\n rpc: Rpc<GetAccountInfoApi>,\n featureGates: Address[]\n): Promise<Map<string, FeatureStatus>> {\n const results = await Promise.all(\n featureGates.map(gate => checkFeatureGate(rpc, gate))\n )\n \n const statusMap = new Map<string, FeatureStatus>()\n featureGates.forEach((gate, index) => {\n statusMap.set(gate, results[index])\n })\n \n return statusMap\n}\n\n/**\n * Monitor a feature gate for activation changes\n * \n * @param connection - Solana connection\n * @param featureGate - Feature gate to monitor\n * @param callback - Callback when status changes\n * @param intervalMs - Check interval (default 30 seconds)\n * @returns Function to stop monitoring\n */\nexport function monitorFeatureGate(\n rpc: Rpc<GetAccountInfoApi>,\n featureGate: Address,\n callback: (status: FeatureStatus) => void,\n intervalMs = 30_000\n): () => void {\n let lastStatus: FeatureStatus | null = null\n let intervalId: ReturnType<typeof setInterval> | null = null\n \n const check = async () => {\n try {\n const status = await checkFeatureGate(rpc, featureGate)\n \n // Check if status changed\n if (!lastStatus || lastStatus.activated !== status.activated) {\n callback(status)\n lastStatus = status\n }\n } catch (error) {\n console.error('Error monitoring feature gate:', error)\n }\n }\n \n // Initial check\n void check()\n \n // Set up interval\n intervalId = setInterval(check, intervalMs)\n \n // Return cleanup function\n return () => {\n if (intervalId) {\n clearInterval(intervalId)\n intervalId = null\n }\n }\n}\n\n// =====================================================\n// UTILITY FUNCTIONS\n// =====================================================\n\n/**\n * Clear the feature gate cache\n * Useful for testing or forcing fresh checks\n */\nexport function clearFeatureGateCache(): void {\n featureCache.clear()\n}\n\n/**\n * Convert feature gate public key to Address type\n */\nexport function featureGateToAddress(featureGate: Address): Address {\n return featureGate\n}\n\n// =====================================================\n// EXPORTS\n// =====================================================\n\nexport {\n FeatureGateCacheManager,\n featureCache as defaultFeatureCache,\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/api/ExternalIdResolver.ts","../src/modules/escrow/EscrowModule.ts","../src/index.ts","../src/modules/indexer/X402TransactionIndexer.ts","../src/utils/test-ipfs-config.ts","../src/utils/ipfs-error-handling.ts","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/index.js","../src/utils/wallet-funding.ts","../src/utils/private-metadata.ts","../src/utils/feature-gate-detector.ts"],"names":["process","styles","chalk","i","walletData","fs","lamports","address"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ExternalIdResolver - Cross-Platform Identity Lookup\n *\n * Resolves platform-specific IDs (PayAI, ElizaOS, etc.) to Ghost addresses\n * Uses GhostSpeak Public API for fast lookups\n */\n\nimport { address, type Address } from '@solana/addresses';\nimport type { GhostSpeakConfig } from '../../types/index.js';\nimport { GhostSpeakError } from '../../types/index.js';\nimport type {\n ApiGhost,\n ApiExternalIdLookup,\n ApiGhostScore,\n} from '../../types/api-types.js';\nimport {\n ExternalIdNotFoundError,\n GhostNotFoundError,\n} from '../../types/api-types.js';\n\nconst DEFAULT_API_URL = 'https://api.ghostspeak.ai';\nconst DEVNET_API_URL = 'https://api-devnet.ghostspeak.ai';\nconst LOCALNET_API_URL = 'http://localhost:3001';\n\nexport interface ApiResolverConfig {\n apiUrl?: string;\n cluster?: 'mainnet-beta' | 'devnet' | 'testnet' | 'localnet';\n}\n\nexport class ExternalIdResolver {\n private apiUrl: string;\n\n constructor(config?: ApiResolverConfig) {\n // Determine API URL based on cluster or use provided URL\n if (config?.apiUrl) {\n this.apiUrl = config.apiUrl;\n } else {\n const cluster = config?.cluster || 'devnet';\n this.apiUrl = cluster === 'mainnet-beta' ? DEFAULT_API_URL :\n cluster === 'localnet' ? LOCALNET_API_URL :\n DEVNET_API_URL;\n }\n }\n\n /**\n * Resolve external ID to Ghost address\n *\n * @example\n * const address = await resolver.resolve('payai', 'agent-123');\n */\n async resolve(platform: string, externalId: string): Promise<Address> {\n const result = await this.lookup(platform, externalId);\n return address(result.mapping.ghostAddress);\n }\n\n /**\n * Lookup external ID with full Ghost data\n *\n * @example\n * const { mapping, ghost } = await resolver.lookup('payai', 'agent-123');\n */\n async lookup(platform: string, externalId: string): Promise<ApiExternalIdLookup> {\n try {\n const response = await fetch(\n `${this.apiUrl}/ghosts/external/${encodeURIComponent(platform)}/${encodeURIComponent(externalId)}`\n );\n\n if (response.status === 404) {\n throw new ExternalIdNotFoundError(platform, externalId);\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({})) as any;\n throw new GhostSpeakError(\n error.message || 'Failed to lookup external ID',\n error.code || 'LOOKUP_FAILED'\n );\n }\n\n const data = await response.json() as ApiExternalIdLookup;\n return data;\n } catch (error) {\n if (error instanceof GhostSpeakError || error instanceof ExternalIdNotFoundError) throw error;\n throw new GhostSpeakError(\n 'Failed to lookup external ID',\n 'LOOKUP_FAILED'\n );\n }\n }\n\n /**\n * Get Ghost by Solana address via API\n *\n * Faster than on-chain lookup for read operations\n */\n async getGhost(ghostAddress: Address | string): Promise<ApiGhost> {\n try {\n const addrString = typeof ghostAddress === 'string'\n ? ghostAddress\n : ghostAddress as string;\n\n const response = await fetch(\n `${this.apiUrl}/ghosts/${encodeURIComponent(addrString)}`\n );\n\n if (response.status === 404) {\n throw new GhostNotFoundError(addrString);\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({})) as any;\n throw new GhostSpeakError(\n error.message || 'Failed to fetch Ghost',\n error.code || 'FETCH_FAILED'\n );\n }\n\n const ghost = await response.json() as ApiGhost;\n return ghost;\n } catch (error) {\n if (error instanceof GhostSpeakError || error instanceof GhostNotFoundError) throw error;\n throw new GhostSpeakError(\n 'Failed to fetch Ghost',\n 'FETCH_FAILED'\n );\n }\n }\n\n /**\n * Get Ghost Score via API\n */\n async getGhostScore(ghostAddress: Address | string): Promise<ApiGhostScore> {\n try {\n const addrString = typeof ghostAddress === 'string'\n ? ghostAddress\n : ghostAddress as string;\n\n const response = await fetch(\n `${this.apiUrl}/ghosts/${encodeURIComponent(addrString)}/score`\n );\n\n if (response.status === 404) {\n throw new GhostNotFoundError(addrString);\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({})) as any;\n throw new GhostSpeakError(\n error.message || 'Failed to fetch Ghost Score',\n error.code || 'FETCH_FAILED'\n );\n }\n\n const score = await response.json() as ApiGhostScore;\n return score;\n } catch (error) {\n if (error instanceof GhostSpeakError || error instanceof GhostNotFoundError) throw error;\n throw new GhostSpeakError(\n 'Failed to fetch Ghost Score',\n 'FETCH_FAILED'\n );\n }\n }\n\n /**\n * Get detailed reputation breakdown via API\n */\n async getGhostReputation(ghostAddress: Address | string): Promise<any> {\n try {\n const addrString = typeof ghostAddress === 'string'\n ? ghostAddress\n : ghostAddress as string;\n\n const response = await fetch(\n `${this.apiUrl}/ghosts/${encodeURIComponent(addrString)}/reputation`\n );\n\n if (response.status === 404) {\n throw new GhostNotFoundError(addrString);\n }\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({})) as any;\n throw new GhostSpeakError(\n error.message || 'Failed to fetch reputation',\n error.code || 'FETCH_FAILED'\n );\n }\n\n return await response.json();\n } catch (error) {\n if (error instanceof GhostSpeakError || error instanceof GhostNotFoundError) throw error;\n throw new GhostSpeakError(\n 'Failed to fetch reputation',\n 'FETCH_FAILED'\n );\n }\n }\n\n /**\n * Batch resolve multiple external IDs\n */\n async resolveBatch(\n identifiers: Array<{ platform: string; externalId: string }>\n ): Promise<Array<Address | null>> {\n const promises = identifiers.map(({ platform, externalId }) =>\n this.resolve(platform, externalId).catch(() => null)\n );\n return Promise.all(promises);\n }\n\n /**\n * Check if external ID exists\n */\n async exists(platform: string, externalId: string): Promise<boolean> {\n try {\n await this.resolve(platform, externalId);\n return true;\n } catch (error) {\n if (error instanceof ExternalIdNotFoundError) return false;\n throw error;\n }\n }\n\n /**\n * Get all external IDs for a Ghost\n *\n * Fetches Ghost data and returns external identifiers\n */\n async getExternalIds(ghostAddress: Address | string): Promise<Array<{\n platform: string;\n externalId: string;\n verified: boolean;\n verifiedAt: number;\n }>> {\n const ghost = await this.getGhost(ghostAddress);\n return ghost.externalIdentifiers;\n }\n\n /**\n * Search for Ghost by partial platform ID\n *\n * Note: This is a client-side filter, not server-side search\n * For production, implement server-side search endpoint\n */\n async searchByExternalId(\n platform: string,\n partialId: string\n ): Promise<ApiExternalIdLookup[]> {\n // TODO: Implement server-side search endpoint\n // For now, this is a placeholder\n throw new GhostSpeakError(\n 'Search not yet implemented',\n 'NOT_IMPLEMENTED'\n );\n }\n\n /**\n * Set custom API URL\n */\n setApiUrl(apiUrl: string): void {\n this.apiUrl = apiUrl;\n }\n\n /**\n * Get current API URL\n */\n getApiUrl(): string {\n return this.apiUrl;\n }\n\n /**\n * Check API health\n */\n async checkHealth(): Promise<{\n status: string;\n network: string;\n rpc: { connected: boolean; latency: number };\n }> {\n try {\n const response = await fetch(`${this.apiUrl}/health`);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n return await response.json() as {\n status: string;\n network: string;\n rpc: { connected: boolean; latency: number };\n };\n } catch (error) {\n throw new GhostSpeakError(\n 'Failed to check API health',\n 'HEALTH_CHECK_FAILED'\n );\n }\n }\n}\n","import type { Address } from '@solana/addresses'\nimport type { TransactionSigner } from '@solana/kit'\nimport { BaseModule } from '../../core/BaseModule.js'\nimport {\n getCreateEscrowInstructionAsync,\n getSubmitDeliveryInstruction,\n getApproveDeliveryInstruction,\n getFileDisputeInstruction,\n getArbitrateDisputeInstruction,\n type GhostProtectEscrow,\n type EscrowStatus,\n type ArbitratorDecision,\n} from '../../generated/index.js'\n\nexport interface CreateEscrowParams {\n /** Agent providing the service */\n agent: Address\n /** Client's token account for payment */\n clientTokenAccount: Address\n /** Vault to hold escrowed funds */\n escrowVault: Address\n /** Token mint (e.g., USDC, GHOST) */\n tokenMint: Address\n /** Client who is paying */\n client: TransactionSigner\n /** Unique escrow identifier */\n escrowId: bigint\n /** Amount to escrow */\n amount: bigint\n /** Description of the job/service */\n jobDescription: string\n /** Deadline timestamp (unix seconds) */\n deadline: bigint\n}\n\nexport interface SubmitDeliveryParams {\n /** Escrow account */\n escrow: Address\n /** Agent account address */\n agent: Address\n /** Agent owner signer */\n agentOwner: TransactionSigner\n /** Proof of work (IPFS hash, URL, etc.) */\n deliveryProof: string\n}\n\nexport interface ApproveDeliveryParams {\n /** Escrow account */\n escrow: Address\n /** Vault holding escrowed funds */\n escrowVault: Address\n /** Agent's token account to receive payment */\n agentTokenAccount: Address\n /** Client approving the delivery */\n client: TransactionSigner\n}\n\nexport interface FileDisputeParams {\n /** Escrow account */\n escrow: Address\n /** Client filing the dispute */\n client: TransactionSigner\n /** Reason for dispute */\n reason: string\n}\n\nexport interface ArbitrateDisputeParams {\n /** Escrow account */\n escrow: Address\n /** Vault holding escrowed funds */\n escrowVault: Address\n /** Client's token account (for refund) */\n clientTokenAccount: Address\n /** Agent's token account (for payment) */\n agentTokenAccount: Address\n /** Agent's staking account (for potential slashing) */\n agentStaking: Address\n /** Arbitrator making the decision */\n arbitrator: TransactionSigner\n /** Decision: FavorClient, FavorAgent, Split, or Invalid */\n decision: ArbitratorDecision\n}\n\nexport class EscrowModule extends BaseModule {\n /**\n * Create a new escrow for a service agreement\n *\n * @param params - Escrow creation parameters\n * @returns Transaction signature\n */\n async createEscrow(params: CreateEscrowParams): Promise<string> {\n const instruction = await getCreateEscrowInstructionAsync({\n agent: params.agent,\n clientTokenAccount: params.clientTokenAccount,\n escrowVault: params.escrowVault,\n tokenMint: params.tokenMint,\n client: params.client,\n escrowId: params.escrowId,\n amount: params.amount,\n jobDescription: params.jobDescription,\n deadline: params.deadline,\n }, { programAddress: this.programId })\n\n return this.execute('createEscrow', () => instruction, [params.client])\n }\n\n /**\n * Submit proof of delivery for an escrow\n *\n * @param params - Delivery submission parameters\n * @returns Transaction signature\n */\n async submitDelivery(params: SubmitDeliveryParams): Promise<string> {\n const instruction = getSubmitDeliveryInstruction({\n escrow: params.escrow,\n agent: params.agent,\n agentOwner: params.agentOwner,\n deliveryProof: params.deliveryProof,\n }, { programAddress: this.programId })\n\n return this.execute('submitDelivery', () => instruction, [params.agentOwner])\n }\n\n /**\n * Approve delivery and release funds to agent\n *\n * @param params - Approval parameters\n * @returns Transaction signature\n */\n async approveDelivery(params: ApproveDeliveryParams): Promise<string> {\n const instruction = getApproveDeliveryInstruction({\n escrow: params.escrow,\n escrowVault: params.escrowVault,\n agentTokenAccount: params.agentTokenAccount,\n client: params.client,\n }, { programAddress: this.programId })\n\n return this.execute('approveDelivery', () => instruction, [params.client])\n }\n\n /**\n * File a dispute for an escrow\n *\n * @param params - Dispute filing parameters\n * @returns Transaction signature\n */\n async fileDispute(params: FileDisputeParams): Promise<string> {\n const instruction = getFileDisputeInstruction({\n escrow: params.escrow,\n client: params.client,\n reason: params.reason,\n }, { programAddress: this.programId })\n\n return this.execute('fileDispute', () => instruction, [params.client])\n }\n\n /**\n * Arbitrate a disputed escrow\n *\n * @param params - Arbitration parameters\n * @returns Transaction signature\n */\n async arbitrateDispute(params: ArbitrateDisputeParams): Promise<string> {\n const instruction = getArbitrateDisputeInstruction({\n escrow: params.escrow,\n escrowVault: params.escrowVault,\n agentTokenAccount: params.agentTokenAccount,\n clientTokenAccount: params.clientTokenAccount,\n agentStaking: params.agentStaking,\n arbitrator: params.arbitrator,\n decision: params.decision,\n }, { programAddress: this.programId })\n\n return this.execute('arbitrateDispute', () => instruction, [params.arbitrator])\n }\n\n /**\n * Get escrow account data\n *\n * @param escrowAddress - The escrow account address\n * @returns Escrow data or null if not found\n */\n async getEscrow(escrowAddress: Address): Promise<GhostProtectEscrow | null> {\n try {\n return await this.getAccount<GhostProtectEscrow>(escrowAddress, 'getGhostProtectEscrowDecoder')\n } catch (error) {\n console.error('Error fetching escrow:', error)\n return null\n }\n }\n}\n\n// Re-export types for convenience\nexport type { GhostProtectEscrow, EscrowStatus, ArbitratorDecision }\n","/**\n * GhostSpeak SDK - Production-Ready AI Agent Commerce Protocol\n * \n * Optimized for tree-shaking and minimal bundle size.\n * Import only what you need for the best performance.\n * \n * @packageDocumentation\n */\n\n// =====================================================\n// MAIN CLIENT EXPORT (Tree-shakeable)\n// =====================================================\n\n// Default export for convenience\nexport { default, sol, lamportsToSol } from './core/GhostSpeakClient.js'\n\n// Named export for explicit imports\nexport { GhostSpeakClient } from './core/GhostSpeakClient.js'\n\n// Re-export Solana kit functions for CLI\nexport { createSolanaRpc, createKeyPairSignerFromBytes, generateKeyPairSigner, address } from '@solana/kit'\n\n// =====================================================\n// CORE EXPORTS\n// =====================================================\n\n// Types\nexport * from './core/types.js'\n\n// Errors\nexport * from './core/errors.js'\n\n// Base classes (for advanced users)\nexport { BaseModule } from './core/BaseModule.js'\nexport { InstructionBuilder } from './core/InstructionBuilder.js'\nexport { RpcClient } from './core/rpc-client.js'\n\n// Cache and performance utilities\nexport { CacheManager, type CacheConfig } from './core/CacheManager.js'\nexport {\n batchGetAccounts,\n batchGetExistingAccounts,\n batchGetAndMap,\n batchGetAccountsWithRetry,\n createBatchFetcher,\n type BatchProgressCallback,\n type BatchFetchConfig\n} from './utils/batch-operations.js'\n\n// =====================================================\n// MODULE EXPORTS\n// =====================================================\n\n// Agent module\nexport { AgentModule } from './core/modules/AgentModule.js'\n\n// Ghost module - Claim external agents\nexport {\n GhostModule,\n type ClaimGhostParams,\n type PreparedClaimResult,\n type Network\n} from './core/modules/GhostModule.js'\n\n// Authorization module - Trustless agent pre-authorization\nexport { AuthorizationModule } from './modules/authorization/index.js'\n\n// API module - REST API wrappers\nexport { ExternalIdResolver, type ApiResolverConfig } from './modules/api/index.js'\n\n// Staking module\nexport {\n StakingModule,\n type StakeParams,\n type UnstakeParams,\n type InitializeStakingConfigParams\n} from './modules/staking/StakingModule.js'\n\n// Escrow module (B2C protection via GhostProtect)\nexport {\n EscrowModule,\n type CreateEscrowParams,\n type SubmitDeliveryParams,\n type ApproveDeliveryParams,\n type FileDisputeParams,\n type ArbitrateDisputeParams,\n} from './modules/escrow/index.js'\n\n// Channel module - REMOVED (use A2A for agent communication)\n\n// Marketplace module - REMOVED (use facilitator discovery mechanisms)\n\n// Governance module\nexport {\n GovernanceModule,\n type CreateProposalParams,\n type ProposalType,\n type ExecutionParams\n} from './modules/governance/index.js'\n\n// Multisig module\nexport { MultisigModule } from './modules/multisig/index.js'\n\n\n\n// Credential module\nexport {\n CredentialModule,\n CredentialKind,\n CredentialStatus,\n type W3CVerifiableCredential,\n type Credential,\n type CredentialTemplate\n} from './modules/credentials/CredentialModule.js'\n\n// DID module\nexport {\n DidModule,\n VerificationMethodType,\n VerificationRelationship,\n ServiceEndpointType,\n DidError,\n DidErrorClass,\n deriveDidDocumentPda,\n generateDidString,\n validateDidString,\n parseDidString,\n exportAsW3CDidDocument,\n createEd25519VerificationMethod,\n createServiceEndpoint,\n isDidActive,\n getMethodsForRelationship,\n canPerformAction,\n didDocumentToJson,\n getNetworkFromDid,\n getIdentifierFromDid,\n type DidDocument,\n type VerificationMethod,\n type ServiceEndpoint,\n type DidResolutionMetadata,\n type W3CDidDocument,\n type CreateDidDocumentParams,\n type UpdateDidDocumentParams,\n type DeactivateDidDocumentParams,\n type ResolveDidDocumentParams\n} from './modules/did/index.js'\n\n// Reputation module\nexport {\n ReputationModule,\n ReputationTier,\n BadgeType,\n REPUTATION_CONSTANTS,\n type ReputationData,\n type JobPerformance,\n type ReputationCalculationResult,\n type CategoryReputation,\n type PayAIReputationRecordInput,\n} from './modules/reputation/ReputationModule.js'\n\n// SAS (Solana Attestation Service) module\nexport {\n SASAttestationHelper,\n SAS_PROGRAM_ID,\n ATTESTATION_SEED,\n CREDENTIAL_SEED,\n SCHEMA_SEED,\n type GhostSpeakCredentialConfig,\n type GhostOwnershipAttestationData,\n type AttestationPDAResult,\n type CreateAttestationConfig\n} from './modules/sas/index.js'\n\n// Reputation Tag Engine (Pillar 2: Granular Tags)\nexport { ReputationTagEngine } from './utils/reputation-tag-engine.js'\n\n// Indexer module - On-chain transaction polling for x402 payments\nexport {\n X402TransactionIndexer,\n type X402PaymentData,\n type SignatureInfo,\n type X402IndexerConfig,\n} from './modules/indexer/index.js'\n\n// Reputation tag types and enums\nexport {\n TagCategory,\n SkillTag,\n BehaviorTag,\n ComplianceTag,\n TAG_CONSTANTS,\n TagConfidenceLevel,\n DEFAULT_TAG_DECAY,\n type TagScore as TagScoreType,\n type TagCriteria,\n type TagEvaluation,\n type TagFilters,\n type TagUpdateRequest,\n type BulkTagUpdateRequest,\n type TagQueryResult,\n type TagDecayConfig,\n type ReputationMetrics as TagReputationMetrics,\n} from './types/reputation-tags.js'\n\n// Multi-Source Reputation Aggregator (Pillar 3: External Sources)\nexport {\n MultiSourceAggregator,\n type AggregatedReputation,\n type SourceScoreBreakdown,\n} from './modules/reputation/MultiSourceAggregator.js'\n\n// Reputation source adapters and types\nexport {\n ReputationSource,\n BaseReputationAdapter,\n type ReputationSourceAdapter,\n type ReputationSourceConfig,\n type SourceReputationData,\n} from './modules/reputation/adapters/ReputationSourceAdapter.js'\n\n// Privacy module\nexport {\n PrivacyModule,\n PrivacyMode,\n VisibilityLevel,\n ScoreRange,\n PrivacyPresets,\n PRIVACY_CONSTANTS,\n type MetricVisibility,\n type PrivacySettings,\n type PrivacyPreset,\n type VisibleReputation,\n type InitializePrivacyParams,\n type UpdatePrivacyModeParams,\n type SetMetricVisibilityParams,\n type GrantAccessParams,\n type RevokeAccessParams,\n type ApplyPresetParams,\n calculateVisibleScore,\n getReputationTier,\n getScoreRange,\n canViewerAccess,\n filterMetricsByVisibility,\n getDefaultMetricVisibility,\n validatePrivacySettings,\n getTierDisplayName,\n getRangeDisplayString,\n} from './modules/privacy/index.js'\n\nexport { \n UnifiedCredentialService, \n type UnifiedCredentialConfig,\n type IssuedCredentialResult\n} from './modules/credentials/UnifiedCredentialService.js'\n\nexport {\n CrossmintVCClient,\n type CrossmintClientOptions,\n type CredentialType as CrossmintCredentialType,\n type IssuedCredential as CrossmintIssuedCredential,\n GHOSTSPEAK_CREDENTIAL_TYPES\n} from './modules/credentials/CrossmintVCClient.js'\n\n// Work Order module removed - x402 payment protocol focus\n\n// H2A Communication module - removed (use A2A instructions for agent communication)\n\n// =====================================================\n// PROTOCOL EXPORTS (x402, A2A, H2A)\n// =====================================================\n\n// x402 Payment Protocol - Generic facilitator support\n// PaymentStreamingManager removed - use facilitator-specific integration\n\n// A2A (Agent-to-Agent) Protocol - REMOVED (messaging deprecated)\n\n// H2A (Human-to-Agent) Protocol - REMOVED (messaging deprecated)\n\n// =====================================================\n// CRYPTO EXPORTS\n// =====================================================\n\n// Crypto exports with renamed TransferProof to avoid conflict\n// ZK proof exports removed - x402 payment protocol focus\nexport {\n generateKeypair,\n encrypt,\n decrypt,\n generateTransferProof,\n generateWithdrawProof,\n type ElGamalKeypair,\n type ElGamalCiphertext,\n type TransferProof as ElGamalTransferProof,\n type WithdrawProof,\n loadWasmModule,\n isWasmAvailable,\n type WasmModule,\n elgamal,\n wasmBridge\n} from './crypto/index.js'\n\n\n// Export TransactionSigner type from Solana kit\nexport type { TransactionSigner } from '@solana/kit'\n\n// =====================================================\n// GENERATED TYPES EXPORTS (for CLI)\n// =====================================================\n\n// Re-export essential enums and types for CLI usage\nexport { ProposalStatus } from './generated/types/proposalStatus.js'\n\n// Export discriminator validation and account migration utilities\nexport {\n safeDecodeAgent,\n validateAccountDiscriminator,\n createDiscriminatorErrorMessage,\n inspectAccountData,\n type DiscriminatorValidationResult,\n type AccountInspectionResult\n} from './utils/discriminator-validator.js'\n\nexport {\n createMigrationPlan,\n createMigrationReport,\n simulateMigration,\n getMigrationInstructions,\n extractLegacyData,\n type MigrationPlan,\n type MigrationResult,\n type LegacyAgentData\n} from './utils/account-migration.js'\n\nexport {\n runAccountDiagnostics,\n runBatchDiagnostics,\n diagnoseAccountFromChain,\n diagnoseBatchFromChain,\n exportDiagnosticReport,\n type DiagnosticReport,\n type BatchDiagnosticReport\n} from './utils/account-diagnostics.js'\n\n// Export all essential types and utilities\nexport type {\n GhostSpeakConfig,\n AgentWithAddress,\n AgentRegistrationData,\n AgentAccount,\n PricingModel,\n GhostSpeakError,\n RegisterAgentParams,\n RpcResponse,\n RpcAccountInfo,\n RpcProgramAccount,\n RpcProgramAccountsResponse,\n RpcAccountInfoResponse,\n RpcMultipleAccountsResponse,\n TransactionResponse,\n SimulatedTransactionResponse,\n SolanaRpcClient,\n EmergencyConfig,\n Commitment,\n RetryConfig,\n ExtendedRpcApi,\n RpcApi,\n RpcSubscriptionApi\n} from './types/index.js'\n\n// Export authorization types\nexport type {\n SolanaNetwork,\n ReputationAuthorization,\n AuthorizationMetadata,\n AuthorizationProof,\n AuthorizationInvalidReason,\n VerificationDetails,\n AuthorizationMessage,\n CreateAuthorizationParams,\n VerifyAuthorizationParams,\n AuthorizationUsage,\n AuthorizationStatus,\n AuthorizationWithStatus,\n BatchAuthorizationVerification,\n AuthorizationRevocation,\n AuthorizationFilter,\n} from './types/authorization/authorization-types.js'\n\nexport {\n deriveAgentPda,\n deriveUserRegistryPda,\n deriveAgentVerificationPda,\n findProgramDerivedAddress\n} from './utils/pda.js'\n\n// Export authorization signature utilities\nexport {\n createAuthorizationMessage,\n signAuthorizationMessage,\n verifyAuthorizationSignature,\n createSignedAuthorization,\n generateNonce,\n serializeAuthorization,\n deserializeAuthorization,\n getAuthorizationId,\n isAuthorizationExpired,\n isAuthorizationExhausted,\n validateAuthorizationNetwork,\n} from './utils/signature-verification.js'\n\n// Export enhanced error handling utilities\nexport {\n InstructionValidationError,\n isKnownInstruction,\n validateInstructionAccounts,\n createAccountMismatchError,\n getAccountRequirements,\n getRequiredSigners,\n getWritableAccounts,\n getPDAAccounts,\n enhanceErrorMessage,\n debugInstructionCall,\n getInstructionMapping,\n generateAccountValidationError,\n INSTRUCTION_MAPPINGS\n} from './utils/instruction-error-handler.js'\n\n// Export enhanced client error utilities\nexport {\n GhostSpeakSDKError,\n withEnhancedErrors,\n withEnhancedErrorsSync,\n enhanceTransactionError,\n logEnhancedError,\n createErrorContext,\n validatePreconditions,\n extractInstructionName\n} from './utils/enhanced-client-errors.js'\n\n// Export generated instruction functions and types with selective exports to avoid conflicts\nexport {\n // Instruction builders - these are the primary exports users need\n getRegisterAgentInstructionAsync,\n\n // ===== GHOST INSTRUCTIONS (External Agent Claiming) =====\n getClaimGhostInstruction,\n\n // ===== STAKING INSTRUCTIONS (GHOST Token Staking) =====\n getInitializeStakingConfigInstructionAsync,\n getStakeGhostInstructionAsync,\n getUnstakeGhostInstructionAsync,\n getSlashStakeInstructionAsync,\n\n // ===== GHOST PROTECT ESCROW INSTRUCTIONS (B2C Escrow) =====\n getCreateEscrowInstructionAsync,\n getSubmitDeliveryInstruction,\n getApproveDeliveryInstruction,\n getFileDisputeInstruction,\n getArbitrateDisputeInstruction,\n\n // ===== DID INSTRUCTIONS (W3C Decentralized Identifiers) =====\n getCreateDidDocumentInstructionAsync,\n getUpdateDidDocumentInstructionAsync,\n getDeactivateDidDocumentInstructionAsync,\n getResolveDidDocumentInstructionAsync,\n\n // ===== REPUTATION TAG INSTRUCTIONS =====\n getUpdateReputationTagsInstructionAsync,\n\n // ===== STAKING TYPES =====\n type SlashReason,\n type StakingAccount,\n type StakingConfig,\n type GhostStakedEvent,\n type GhostUnstakedEvent,\n type GhostSlashedEvent,\n\n // ===== GHOST PROTECT TYPES =====\n type ArbitratorDecision,\n type EscrowStatus,\n type GhostProtectEscrow,\n type EscrowCreatedEvent,\n type EscrowCompletedEvent,\n type DeliverySubmittedEvent,\n type DisputeFiledEvent,\n type DisputeResolvedEvent,\n\n // ===== REPUTATION TAG TYPES =====\n type TagScore,\n type ReputationTagsUpdatedEvent,\n type TagDecayAppliedEvent,\n\n // Other generated utilities\n GHOSTSPEAK_MARKETPLACE_PROGRAM_ADDRESS\n} from './generated/index.js'\n\n// Account decoders (exported specifically to avoid conflict with types)\nexport {\n getAgentDecoder,\n decodeAgent,\n fetchAgent,\n fetchMaybeAgent,\n getStakingAccountDecoder,\n getStakingConfigDecoder,\n getGhostProtectEscrowDecoder,\n} from './generated/accounts/index.js'\n\n// Export program constants\nexport { GHOSTSPEAK_PROGRAM_ID } from './constants/index.js'\n\n// Export system addresses\nexport { \n NATIVE_MINT_ADDRESS,\n TOKEN_PROGRAM_ADDRESS,\n TOKEN_2022_PROGRAM_ADDRESS,\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS \n} from './constants/system-addresses.js'\n\n// Export Token 2022 utilities\nexport {\n deriveAssociatedTokenAddress,\n deriveSplTokenAssociatedTokenAddress,\n deriveToken2022AssociatedTokenAddress,\n getAssociatedTokenAccount,\n detectTokenProgram,\n isToken2022Mint,\n getTokenProgramType,\n getAllAssociatedTokenAddresses,\n validateAssociatedTokenAddress,\n getTokenProgramAddress,\n getTokenProgramFromAddress,\n formatTokenAmount,\n parseTokenAmount,\n TokenProgram,\n TokenExtension,\n // New Token-2022 extension detection functions\n hasTransferFeeExtension,\n hasConfidentialTransferExtension,\n hasInterestBearingExtension,\n // New Token-2022 configuration retrieval functions\n getTransferFeeConfig,\n getConfidentialTransferConfig,\n getInterestBearingConfig,\n type AssociatedTokenAccount,\n type TransferFeeConfig,\n type ConfidentialTransferConfig,\n type InterestBearingConfig\n} from './utils/token-utils.js'\n\n\n\n// Export governance helpers\nexport { deriveMultisigPda, deriveProposalPda } from './utils/governance-helpers.js'\n\n// Export IPFS functionality for large content storage\nexport type {\n IPFSConfig,\n IPFSProviderConfig,\n IPFSUploadOptions,\n IPFSUploadResult,\n IPFSRetrievalOptions,\n IPFSRetrievalResult,\n IPFSPinResult,\n IPFSOperationResult,\n IPFSContentMetadata,\n FlexibleContent,\n ContentStorageResult,\n IPFSError\n} from './types/ipfs-types.js'\n\nexport {\n IPFSClient\n} from './utils/ipfs-client.js'\n\nexport {\n IPFSUtils,\n createIPFSUtils,\n createMetadataUri,\n determineStorageMethod,\n DEFAULT_IPFS_CONFIG\n} from './utils/ipfs-utils.js'\n\nexport {\n TEST_IPFS_CONFIG,\n createTestIPFSConfig\n} from './utils/test-ipfs-config.js'\n\nexport {\n IPFSOperationError,\n CircuitBreaker,\n RetryHandler,\n FallbackHandler,\n IPFSErrorHandler,\n createIPFSErrorHandler,\n isIPFSError,\n withIPFSErrorHandling,\n DEFAULT_RETRY_CONFIG\n} from './utils/ipfs-error-handling.js'\n\n\n// Export wallet funding utilities\nexport {\n WalletFundingService,\n fundWallet,\n ensureMinimumBalance,\n defaultFundingService,\n type FundingStrategyOptions,\n type FundingResult\n} from './utils/wallet-funding.js'\n\n// Export privacy and encryption utilities\nexport {\n ClientEncryptionService,\n generateLocalPrivacyProof,\n verifyLocalPrivacyProof,\n type EncryptedData,\n type PrivateMetadata,\n type ClientEncryptionOptions\n} from './utils/client-encryption.js'\n\nexport {\n PrivateMetadataStorage,\n IPFSProvider,\n LocalStorageProvider,\n PrivateDataQuery,\n estimateStorageCost,\n createPrivacyManifest,\n type StorageProvider,\n type StoredPrivateData,\n type PrivateDataReference,\n type PrivacyManifest\n} from './utils/private-metadata.js'\n\n// Confidential transfer removed - x402 payment protocol focus\n// export {\n// ConfidentialTransferManager,\n// type ConfidentialAccount,\n// type ConfigureAccountParams,\n// type DepositParams,\n// type WithdrawParams,\n// type TransferParams\n// } from './utils/confidential-transfer-manager.js'\n\nexport {\n getFeatureFlags,\n isFeatureEnabled,\n FeatureFlagManager,\n type FeatureFlags\n} from './utils/feature-flags.js'\n\nexport {\n checkFeatureGate,\n clearFeatureGateCache,\n FEATURE_GATES,\n type FeatureStatus\n} from './utils/feature-gate-detector.js'\n\n// ZK proof builder removed - x402 payment protocol focus\n// export {\n// generateRangeProofWithCommitment,\n// generateTransferProofWithInstruction,\n// isZkProgramAvailable,\n// getZkProgramStatus,\n// ProofMode,\n// type ProofGenerationOptions,\n// type ProofGenerationResult\n// } from './utils/zk-proof-builder.js'\n\n// Migration utilities removed - ZK program post-mortem\n// All necessary functionality is available through the modern client implementation above","/**\n * X402 Transaction Indexer\n *\n * Polls Solana blockchain for x402 payment transactions to eliminate\n * webhook dependency and enable historical reputation backfilling.\n *\n * x402 payments are SPL token transfers (USDC) to PayAI facilitator addresses.\n * This indexer discovers these transfers and extracts payment metadata.\n *\n * @module modules/indexer\n */\n\nimport type { Address, Signature } from '@solana/kit'\nimport type { Rpc, GetSignaturesForAddressApi, GetTransactionApi } from '@solana/rpc'\n\n// =====================================================\n// TYPES\n// =====================================================\n\n/**\n * Parsed x402 payment data from on-chain transaction\n */\nexport interface X402PaymentData {\n /** Transaction signature (on-chain proof) */\n signature: string\n /** Merchant (agent) receiving payment */\n merchant: Address\n /** Payer sending payment */\n payer: Address\n /** Payment amount in token base units (e.g., micro-USDC) */\n amount: string\n /** Payment success status */\n success: boolean\n /** Block timestamp */\n timestamp: Date\n /** Solana network */\n network: 'solana' | 'solana-devnet'\n /** Response time in milliseconds (if available from memo) */\n responseTimeMs?: number\n /** Additional metadata from transaction memo */\n metadata?: Record<string, unknown>\n}\n\n/**\n * Transaction signature with metadata\n */\nexport interface SignatureInfo {\n signature: Signature\n slot: bigint\n blockTime: bigint | null\n err: unknown | null\n}\n\n/**\n * Indexer configuration\n */\nexport interface X402IndexerConfig {\n /** Solana RPC client */\n rpc: Rpc<GetSignaturesForAddressApi & GetTransactionApi>\n /** PayAI facilitator address to monitor */\n facilitatorAddress: Address\n /** Network identifier */\n network?: 'solana' | 'solana-devnet'\n /** Maximum transactions per poll */\n batchSize?: number\n}\n\n// =====================================================\n// X402 TRANSACTION INDEXER\n// =====================================================\n\n/**\n * X402 Transaction Indexer\n *\n * Discovers x402 payments by monitoring SPL token transfers\n * to PayAI facilitator addresses on Solana.\n *\n * @example\n * ```typescript\n * const indexer = new X402TransactionIndexer({\n * rpc: createSolanaRpc('https://api.devnet.solana.com'),\n * facilitatorAddress: address('PayAI...'),\n * network: 'solana-devnet',\n * })\n *\n * // Poll for new transactions\n * const payments = await indexer.pollTransactions()\n * ```\n */\nexport class X402TransactionIndexer {\n private readonly rpc: Rpc<GetSignaturesForAddressApi & GetTransactionApi>\n private readonly facilitatorAddress: Address\n private readonly network: 'solana' | 'solana-devnet'\n private readonly batchSize: number\n\n constructor(config: X402IndexerConfig) {\n this.rpc = config.rpc\n this.facilitatorAddress = config.facilitatorAddress\n this.network = config.network || 'solana'\n this.batchSize = config.batchSize || 100\n }\n\n // =====================================================\n // PUBLIC METHODS\n // =====================================================\n\n /**\n * Poll for new x402 transactions since last sync\n *\n * @param lastSignature - Last processed signature (for pagination)\n * @param limit - Maximum transactions to fetch\n * @returns Array of parsed x402 payment data\n */\n async pollTransactions(\n lastSignature?: Signature,\n limit?: number\n ): Promise<X402PaymentData[]> {\n try {\n // 1. Fetch transaction signatures for facilitator address\n const signatures = await this.getSignatures(lastSignature, limit)\n\n if (signatures.length === 0) {\n return []\n }\n\n console.log(`[X402 Indexer] Found ${signatures.length} new transactions`)\n\n // 2. Parse each transaction to extract x402 payment data\n const payments: X402PaymentData[] = []\n\n for (const sig of signatures) {\n try {\n const payment = await this.parseTransaction(sig.signature)\n\n if (payment) {\n payments.push(payment)\n }\n } catch (error) {\n console.error(`[X402 Indexer] Failed to parse transaction ${sig.signature}:`, error)\n // Continue processing other transactions\n }\n }\n\n console.log(`[X402 Indexer] Parsed ${payments.length} x402 payments`)\n\n return payments\n } catch (error) {\n console.error('[X402 Indexer] Failed to poll transactions:', error)\n throw error\n }\n }\n\n /**\n * Parse a specific transaction signature\n *\n * @param signature - Transaction signature to parse\n * @returns Parsed x402 payment data or null if not an x402 payment\n */\n async parseTransaction(sig: Signature | string): Promise<X402PaymentData | null> {\n try {\n // Fetch full transaction data\n const txSignature = (typeof sig === 'string' ? sig : sig) as Signature\n const response = await this.rpc\n .getTransaction(txSignature, {\n maxSupportedTransactionVersion: 0,\n encoding: 'jsonParsed',\n })\n .send()\n\n if (!response || !response.transaction) {\n return null\n }\n\n // Check if this is an x402 payment (SPL token transfer)\n const isX402 = this.isX402Payment(response)\n if (!isX402) {\n return null\n }\n\n // Extract payment data from transaction\n return this.extractPaymentData(response, typeof sig === 'string' ? sig : String(sig))\n } catch (error) {\n console.error(`[X402 Indexer] Failed to fetch transaction ${sig}:`, error)\n return null\n }\n }\n\n // =====================================================\n // PRIVATE METHODS\n // =====================================================\n\n /**\n * Fetch transaction signatures for the facilitator address\n */\n private async getSignatures(\n before?: Signature,\n limit?: number\n ): Promise<SignatureInfo[]> {\n try {\n const config: { limit: number; before?: Signature } = {\n limit: limit || this.batchSize,\n }\n\n if (before) {\n config.before = before\n }\n\n const response = await this.rpc\n .getSignaturesForAddress(this.facilitatorAddress, config)\n .send()\n\n return response.map((sig) => ({\n signature: sig.signature,\n slot: sig.slot,\n blockTime: sig.blockTime,\n err: sig.err ?? null,\n }))\n } catch (error) {\n console.error('[X402 Indexer] Failed to fetch signatures:', error)\n throw error\n }\n }\n\n /**\n * Check if transaction is an x402 payment\n *\n * x402 payments are characterized by:\n * - SPL token transfer (TokenProgram or Token2022Program) for USDC\n * - Native SOL transfer (System Program)\n * - Transfer TO the facilitator address\n * - Optional memo instruction with payment metadata\n *\n * Supports both devnet and mainnet for all payment types\n */\n private isX402Payment(transaction: any): boolean {\n try {\n const instructions = transaction.transaction?.message?.instructions || []\n\n // Look for SPL token transfer OR native SOL transfer\n const hasPaymentTransfer = instructions.some((ix: any) => {\n const programId = ix.programId?.toString()\n\n // Check for SPL token transfer (USDC on mainnet/devnet)\n const isTokenProgram =\n programId === 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' || // SPL Token\n programId === 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb' // Token-2022\n\n if (isTokenProgram) {\n const parsed = ix.parsed\n if (parsed?.type === 'transfer' || parsed?.type === 'transferChecked') {\n const destination = parsed.info?.destination\n return destination === this.facilitatorAddress.toString()\n }\n }\n\n // Check for native SOL transfer (devnet and mainnet)\n if (programId === '11111111111111111111111111111111') {\n const parsed = ix.parsed\n if (parsed?.type === 'transfer') {\n const destination = parsed.info?.destination\n return destination === this.facilitatorAddress.toString()\n }\n }\n\n return false\n })\n\n return hasPaymentTransfer\n } catch (error) {\n console.error('[X402 Indexer] Error checking if x402 payment:', error)\n return false\n }\n }\n\n /**\n * Extract payment data from transaction\n */\n private extractPaymentData(transaction: any, signature: string): X402PaymentData | null {\n try {\n const instructions = transaction.transaction?.message?.instructions || []\n\n // Find transfer instruction (token or system)\n const transferIx = instructions.find((ix: any) => {\n const parsed = ix.parsed\n const programId = ix.programId?.toString()\n\n // Token transfer\n if (parsed?.type === 'transfer' || parsed?.type === 'transferChecked') {\n return true\n }\n\n return false\n })\n\n if (!transferIx) {\n return null\n }\n\n const transferInfo = transferIx.parsed.info\n\n // Extract basic payment data\n const merchant = transferInfo.destination as Address\n const payer = transferInfo.source as Address\n\n // For token transfers, use tokenAmount; for SOL, use lamports\n const amount = transferInfo.amount || transferInfo.tokenAmount?.amount || transferInfo.lamports || '0'\n const success = transaction.meta?.err === null\n\n // Extract timestamp from block time\n const blockTime = transaction.blockTime\n const timestamp = blockTime ? new Date(blockTime * 1000) : new Date()\n\n // Look for memo instruction (optional metadata)\n const memoIx = instructions.find((ix: any) =>\n ix.programId?.toString()?.includes('Memo')\n )\n\n let responseTimeMs: number | undefined\n let metadata: Record<string, unknown> | undefined\n\n if (memoIx) {\n try {\n // Memo data can be in parsed field or data field\n let memoText: string\n if (memoIx.parsed) {\n memoText = memoIx.parsed\n } else if (memoIx.data) {\n memoText = Buffer.from(memoIx.data, 'base64').toString('utf-8')\n } else {\n memoText = ''\n }\n\n if (memoText) {\n const memoData = JSON.parse(memoText)\n responseTimeMs = memoData.responseTimeMs\n metadata = memoData\n }\n } catch {\n // Memo is not JSON, ignore\n }\n }\n\n return {\n signature,\n merchant,\n payer,\n amount,\n success,\n timestamp,\n network: this.network,\n responseTimeMs,\n metadata,\n }\n } catch (error) {\n console.error('[X402 Indexer] Failed to extract payment data:', error)\n return null\n }\n }\n}\n","/**\n * Test IPFS configuration for beta testing and development\n */\n\nimport type { IPFSConfig } from '../types/ipfs-types.js'\n\n/**\n * Test IPFS configuration that uses the in-memory test provider\n * This configuration does not require any external services\n */\nexport const TEST_IPFS_CONFIG: IPFSConfig = {\n provider: {\n name: 'test',\n endpoint: 'http://localhost:8080' // Fake endpoint for testing\n },\n gateways: [\n 'http://localhost:8080',\n 'https://test.ipfs.io'\n ],\n autoPinning: true,\n sizeThreshold: 400, // Lower threshold for testing (400 bytes)\n maxRetries: 2,\n retryDelay: 500,\n enableCache: true,\n cacheTTL: 60000 // 1 minute for testing\n}\n\n/**\n * Create a test IPFS configuration with custom options\n */\nexport function createTestIPFSConfig(options?: Partial<IPFSConfig>): IPFSConfig {\n return {\n ...TEST_IPFS_CONFIG,\n ...options,\n provider: {\n ...TEST_IPFS_CONFIG.provider,\n ...(options?.provider ?? {})\n }\n }\n}","/**\n * Enhanced error handling and retry logic for IPFS operations in GhostSpeak\n */\n\nimport type { IPFSError, IPFSOperationResult } from '../types/ipfs-types.js'\n\n/**\n * IPFS-specific error class with enhanced context\n */\nexport class IPFSOperationError extends Error {\n constructor(\n public readonly type: IPFSError,\n message: string,\n public readonly provider?: string,\n public readonly retryCount?: number,\n public readonly originalError?: Error\n ) {\n super(message)\n this.name = 'IPFSOperationError'\n }\n}\n\n/**\n * Configuration for retry logic\n */\nexport interface RetryConfig {\n maxRetries: number\n baseDelay: number\n maxDelay: number\n backoffFactor: number\n retryableErrors: IPFSError[]\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n baseDelay: 1000,\n maxDelay: 30000,\n backoffFactor: 2,\n retryableErrors: [\n 'NETWORK_ERROR',\n 'TIMEOUT_ERROR',\n 'PROVIDER_ERROR'\n ]\n}\n\n/**\n * Circuit breaker for preventing cascading failures\n */\nexport class CircuitBreaker {\n private failures = 0\n private lastFailureTime = 0\n private state: 'CLOSED' | 'OPEN' | 'HALF_OPEN' = 'CLOSED'\n\n constructor(\n private readonly failureThreshold = 5,\n private readonly recoveryTime = 30000\n ) {}\n\n async execute<T>(operation: () => Promise<T>): Promise<T> {\n if (this.state === 'OPEN') {\n if (Date.now() - this.lastFailureTime > this.recoveryTime) {\n this.state = 'HALF_OPEN'\n } else {\n throw new Error('Circuit breaker is OPEN - too many failures')\n }\n }\n\n try {\n const result = await operation()\n this.onSuccess()\n return result\n } catch (error) {\n this.onFailure()\n throw error\n }\n }\n\n private onSuccess(): void {\n this.failures = 0\n this.state = 'CLOSED'\n }\n\n private onFailure(): void {\n this.failures++\n this.lastFailureTime = Date.now()\n \n if (this.failures >= this.failureThreshold) {\n this.state = 'OPEN'\n }\n }\n\n getState(): { state: string; failures: number; lastFailureTime: number } {\n return {\n state: this.state,\n failures: this.failures,\n lastFailureTime: this.lastFailureTime\n }\n }\n\n reset(): void {\n this.failures = 0\n this.lastFailureTime = 0\n this.state = 'CLOSED'\n }\n}\n\n/**\n * Enhanced retry utility with exponential backoff\n */\nexport class RetryHandler {\n private circuitBreaker: CircuitBreaker\n\n constructor(\n private readonly config: RetryConfig = DEFAULT_RETRY_CONFIG\n ) {\n this.circuitBreaker = new CircuitBreaker()\n }\n\n async execute<T>(\n operation: () => Promise<T>,\n context?: string\n ): Promise<T> {\n return this.circuitBreaker.execute(async () => {\n let lastError: Error\n \n for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {\n try {\n const result = await operation()\n \n if (attempt > 0) {\n console.log(`✅ Operation succeeded after ${attempt} retries${context ? ` (${context})` : ''}`)\n }\n \n return result\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error))\n \n if (attempt === this.config.maxRetries) {\n break // Don't delay on the last attempt\n }\n\n const shouldRetry = this.shouldRetry(lastError, attempt)\n if (!shouldRetry) {\n console.log(`❌ Error not retryable${context ? ` (${context})` : ''}:`, lastError.message)\n break\n }\n\n const delay = this.calculateDelay(attempt)\n console.log(`⏳ Retrying in ${delay}ms... (attempt ${attempt + 1}/${this.config.maxRetries}${context ? `, ${context}` : ''})`)\n \n await new Promise(resolve => setTimeout(resolve, delay))\n }\n }\n \n throw new IPFSOperationError(\n this.categorizeError(lastError!),\n `Operation failed after ${this.config.maxRetries + 1} attempts${context ? ` (${context})` : ''}: ${lastError!.message}`,\n undefined,\n this.config.maxRetries\n )\n })\n }\n\n private shouldRetry(error: Error, attempt: number): boolean {\n if (attempt >= this.config.maxRetries) {\n return false\n }\n\n const errorType = this.categorizeError(error)\n return this.config.retryableErrors.includes(errorType)\n }\n\n private calculateDelay(attempt: number): number {\n const exponentialDelay = this.config.baseDelay * Math.pow(this.config.backoffFactor, attempt)\n const jitter = Math.random() * 0.1 * exponentialDelay // Add 10% jitter\n return Math.min(exponentialDelay + jitter, this.config.maxDelay)\n }\n\n private categorizeError(error: Error): IPFSError {\n const message = error.message.toLowerCase()\n \nif (message.includes('timeout')) {\n return 'TIMEOUT_ERROR'\n }\n \nif (message.includes('network')) {\n return 'NETWORK_ERROR'\n }\n \nif (message.includes('unauthorized')) {\n return 'AUTHENTICATION_FAILED'\n }\n \nif (message.includes('quota')) {\n return 'QUOTA_EXCEEDED'\n }\n \n if (message.includes('invalid') && message.includes('hash')) {\n return 'INVALID_HASH'\n }\n \nif (message.includes('too large')) {\n return 'CONTENT_TOO_LARGE'\n }\n \n return 'PROVIDER_ERROR'\n }\n\n getStats(): {\n circuitBreakerState: ReturnType<CircuitBreaker['getState']>\n config: RetryConfig\n } {\n return {\n circuitBreakerState: this.circuitBreaker.getState(),\n config: this.config\n }\n }\n\n reset(): void {\n this.circuitBreaker.reset()\n }\n}\n\n/**\n * Fallback handler for graceful degradation\n */\nexport class FallbackHandler {\n private fallbackStrategies: Map<IPFSError, (error: IPFSOperationError) => Promise<unknown>> = new Map()\n\n constructor() {\n this.setupDefaultFallbacks()\n }\n\n private setupDefaultFallbacks(): void {\n // Fallback for upload failures - compress and retry inline storage\n this.fallbackStrategies.set('UPLOAD_FAILED', async (error) => {\n console.log('🔄 Upload failed, attempting inline storage fallback...')\n throw error // Let caller handle inline storage\n })\n\n // Fallback for retrieval failures - try alternative gateways\n this.fallbackStrategies.set('RETRIEVAL_FAILED', async (error) => {\n console.log('🔄 Retrieval failed, trying alternative gateways...')\n throw error // Let caller try alternative gateways\n })\n\n // Fallback for quota exceeded - suggest cleanup or alternative storage\n this.fallbackStrategies.set('QUOTA_EXCEEDED', async (error) => {\n console.warn('⚠️ IPFS quota exceeded - consider upgrading plan or cleaning up old content')\n throw error\n })\n }\n\n async handleError<T>(error: IPFSOperationError, fallbackValue?: T): Promise<T> {\n const strategy = this.fallbackStrategies.get(error.type)\n \n if (strategy) {\n try {\n const result = await strategy(error)\n return result as T\n } catch (_fallbackError) {\n console.warn('Fallback strategy also failed:', _fallbackError instanceof Error ? _fallbackError.message : String(_fallbackError))\n }\n }\n\n if (fallbackValue !== undefined) {\n console.log('Using provided fallback value')\n return fallbackValue\n }\n\n throw error\n }\n\n registerFallback<T>(errorType: IPFSError, strategy: (error: IPFSOperationError) => Promise<T>): void {\n this.fallbackStrategies.set(errorType, strategy)\n }\n}\n\n/**\n * Comprehensive error handler that combines retry logic with fallback strategies\n */\nexport class IPFSErrorHandler {\n private retryHandler: RetryHandler\n private fallbackHandler: FallbackHandler\n\n constructor(retryConfig?: Partial<RetryConfig>) {\n this.retryHandler = new RetryHandler({ ...DEFAULT_RETRY_CONFIG, ...retryConfig })\n this.fallbackHandler = new FallbackHandler()\n }\n\n async executeWithErrorHandling<T>(\n operation: () => Promise<IPFSOperationResult<T>>,\n context?: string,\n fallbackValue?: T\n ): Promise<IPFSOperationResult<T>> {\n try {\n const result = await this.retryHandler.execute(async () => {\n const opResult = await operation()\n \n if (!opResult.success && opResult.error) {\n throw new IPFSOperationError(\n opResult.error,\n opResult.message ?? `IPFS operation failed: ${opResult.error}`\n )\n }\n \n return opResult\n }, context)\n\n return result\n } catch (error) {\n const ipfsError = error instanceof IPFSOperationError \n ? error \n : new IPFSOperationError('PROVIDER_ERROR', error instanceof Error ? error.message : String(error))\n\n try {\n const fallbackResult = await this.fallbackHandler.handleError(ipfsError, fallbackValue)\n return {\n success: true,\n data: fallbackResult,\n message: 'Operation succeeded using fallback strategy'\n }\n } catch {\n return {\n success: false,\n error: ipfsError.type,\n message: ipfsError.message,\n duration: 0\n }\n }\n }\n }\n\n /**\n * Register a custom fallback strategy\n */\n registerFallback<T>(errorType: IPFSError, strategy: (error: IPFSOperationError) => Promise<T>): void {\n this.fallbackHandler.registerFallback(errorType, strategy)\n }\n\n /**\n * Get error handler statistics\n */\n getStats(): {\n retryStats: ReturnType<RetryHandler['getStats']>\n registeredFallbacks: IPFSError[]\n } {\n return {\n retryStats: this.retryHandler.getStats(),\n registeredFallbacks: Array.from(this.fallbackHandler['fallbackStrategies'].keys())\n }\n }\n\n /**\n * Reset all error handling state\n */\n reset(): void {\n this.retryHandler.reset()\n }\n}\n\n/**\n * Utility function to create a configured error handler\n */\nexport function createIPFSErrorHandler(config?: {\n retryConfig?: Partial<RetryConfig>\n customFallbacks?: {\n errorType: IPFSError\n strategy: (error: IPFSOperationError) => Promise<unknown>\n }[]\n}): IPFSErrorHandler {\n const handler = new IPFSErrorHandler(config?.retryConfig)\n \n if (config?.customFallbacks) {\n for (const { errorType, strategy } of config.customFallbacks) {\n handler.registerFallback(errorType, strategy)\n }\n }\n \n return handler\n}\n\n/**\n * Type guard to check if an error is an IPFS error\n */\nexport function isIPFSError(error: unknown): error is IPFSOperationError {\n return error instanceof IPFSOperationError\n}\n\n/**\n * Helper function to wrap any IPFS operation with error handling\n */\nexport async function withIPFSErrorHandling<T>(\n operation: () => Promise<T>,\n context?: string,\n errorHandler?: IPFSErrorHandler\n): Promise<IPFSOperationResult<T>> {\n const handler = errorHandler ?? new IPFSErrorHandler()\n \n return handler.executeWithErrorHandling(\n async () => {\n try {\n const result = await operation()\n return { success: true, data: result }\n } catch (error) {\n const ipfsError = error instanceof IPFSOperationError \n ? error.type \n : 'PROVIDER_ERROR' as IPFSError\n \n return {\n success: false,\n error: ipfsError,\n message: error instanceof Error ? error.message : String(error)\n }\n }\n },\n context\n )\n}","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","/**\n * Wallet Funding Utilities\n * \n * Provides robust wallet funding strategies that don't depend solely on unreliable devnet airdrops.\n * Supports multiple funding strategies with automatic fallback mechanisms.\n */\n\nimport type { \n Address, \n KeyPairSigner, \n Commitment\n} from '@solana/kit'\nimport { \n generateKeyPairSigner,\n createSolanaRpc,\n createKeyPairSignerFromBytes,\n pipe,\n createTransactionMessage,\n setTransactionMessageFeePayer,\n setTransactionMessageLifetimeUsingBlockhash,\n appendTransactionMessageInstructions,\n signTransactionMessageWithSigners,\n getBase64EncodedWireTransaction,\n lamports\n} from '@solana/kit'\nimport { getTransferSolInstruction } from '@solana-program/system'\nimport { promises as fs } from 'fs'\nimport chalk from 'chalk'\nimport bs58 from 'bs58'\n\n/**\n * Funding strategy options\n */\nexport interface FundingStrategyOptions {\n /** Target amount in lamports */\n amount: bigint\n /** Minimum amount required (if less, will try to top up) */\n minAmount?: bigint\n /** Maximum retries for airdrop */\n maxRetries?: number\n /** Delay between retries in ms */\n retryDelay?: number\n /** Use treasury wallet if available */\n useTreasury?: boolean\n /** Treasury wallet path or signer */\n treasuryWallet?: string | KeyPairSigner\n /** Additional funded wallets to try */\n fundedWallets?: (string | KeyPairSigner)[]\n /** Log funding attempts */\n verbose?: boolean\n}\n\n/**\n * Funding result\n */\nexport interface FundingResult {\n /** Whether funding was successful */\n success: boolean\n /** Final balance after funding */\n balance: bigint\n /** Funding method used */\n method: 'airdrop' | 'treasury' | 'funded-wallet' | 'existing'\n /** Number of attempts made */\n attempts: number\n /** Error if funding failed */\n error?: string\n /** Transaction signature if transfer was made */\n signature?: string\n}\n\n/**\n * Wallet funding utility with multiple strategies\n */\nexport class WalletFundingService {\n private rpc: ReturnType<typeof createSolanaRpc>\n private commitment: Commitment = 'confirmed'\n private isDevnetUrl: boolean\n\n constructor(rpcUrl: string, commitment: Commitment = 'confirmed') {\n // Check if this is a devnet URL\n this.isDevnetUrl = rpcUrl.includes('devnet')\n \n // Create RPC client\n this.rpc = createSolanaRpc(rpcUrl)\n \n this.commitment = commitment\n }\n\n /**\n * Fund a wallet using multiple strategies\n */\n async fundWallet(\n targetWallet: Address,\n options: FundingStrategyOptions\n ): Promise<FundingResult> {\n const {\n amount,\n minAmount = amount,\n maxRetries = 3,\n retryDelay = 2000,\n useTreasury = true,\n treasuryWallet,\n fundedWallets = [],\n verbose = false\n } = options\n\n const log = (message: string) => {\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] ${message}`))\n }\n }\n\n let attempts = 0\n\n try {\n // First check existing balance\n const currentBalance = await this.getBalance(targetWallet)\n log(`Current balance: ${this.formatSol(currentBalance)} SOL`)\n\n if (currentBalance >= minAmount) {\n log(`Wallet already has sufficient balance`)\n return {\n success: true,\n balance: currentBalance,\n method: 'existing',\n attempts: 0\n }\n }\n\n const needed = amount - currentBalance\n log(`Need to fund: ${this.formatSol(needed)} SOL`)\n\n // Strategy 1: Try devnet airdrop first\n if (this.isDevnetUrl && 'requestAirdrop' in this.rpc) {\n log(`Attempting devnet airdrop...`)\n const airdropResult = await this.tryAirdrop(\n targetWallet,\n needed,\n maxRetries,\n retryDelay,\n verbose\n )\n \n if (airdropResult.success) {\n const finalBalance = await this.getBalance(targetWallet)\n return {\n success: true,\n balance: finalBalance,\n method: 'airdrop',\n attempts: airdropResult.attempts,\n signature: airdropResult.signature\n }\n }\n \n attempts += airdropResult.attempts\n log(`Airdrop failed after ${airdropResult.attempts} attempts`)\n }\n\n // Strategy 2: Try treasury wallet\n if (useTreasury && treasuryWallet) {\n log(`Attempting treasury wallet funding...`)\n const treasuryResult = await this.tryTreasuryFunding(\n targetWallet,\n needed,\n treasuryWallet,\n verbose\n )\n \n if (treasuryResult.success) {\n const finalBalance = await this.getBalance(targetWallet)\n return {\n success: true,\n balance: finalBalance,\n method: 'treasury',\n attempts: attempts + 1,\n signature: treasuryResult.signature\n }\n }\n \n attempts++\n log(`Treasury funding failed: ${treasuryResult.error}`)\n }\n\n // Strategy 3: Try other funded wallets\n for (const fundedWallet of fundedWallets) {\n log(`Attempting funding from additional wallet...`)\n const fundedResult = await this.tryFundedWalletTransfer(\n targetWallet,\n needed,\n fundedWallet,\n verbose\n )\n \n if (fundedResult.success) {\n const finalBalance = await this.getBalance(targetWallet)\n return {\n success: true,\n balance: finalBalance,\n method: 'funded-wallet',\n attempts: attempts + 1,\n signature: fundedResult.signature\n }\n }\n \n attempts++\n log(`Funded wallet transfer failed: ${fundedResult.error}`)\n }\n\n // All strategies failed\n throw new Error('All funding strategies failed')\n\n } catch (error) {\n return {\n success: false,\n balance: await this.getBalance(targetWallet),\n method: 'airdrop',\n attempts,\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n\n /**\n * Try to fund using devnet airdrop with retries\n */\n private async tryAirdrop(\n targetWallet: Address,\n amount: bigint,\n maxRetries: number,\n retryDelay: number,\n verbose: boolean\n ): Promise<{ success: boolean; attempts: number; signature?: string; error?: string }> {\n // Type guard to ensure we have a devnet RPC\n if (!('requestAirdrop' in this.rpc)) {\n return {\n success: false,\n attempts: 0,\n error: 'Airdrop not available on this network'\n }\n }\n\n let attempts = 0\n\n for (let i = 0; i < maxRetries; i++) {\n attempts++\n \n try {\n const airdropResponse = await this.rpc\n .requestAirdrop(targetWallet, lamports(amount), { commitment: this.commitment })\n .send()\n \n // The response is the signature directly\n const signature = airdropResponse\n \n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Airdrop requested: ${signature}`))\n }\n\n // Get latest blockhash for confirmation\n await this.rpc.getLatestBlockhash().send()\n\n // Wait for confirmation using getSignatureStatuses\n let confirmed = false\n const maxAttempts = 30\n for (let i = 0; i < maxAttempts; i++) {\n const statusResponse = await this.rpc\n .getSignatureStatuses([signature])\n .send()\n \n const status = statusResponse.value[0]\n if (status && status.confirmationStatus === 'confirmed') {\n confirmed = true\n break\n }\n \n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n\n // Additional wait to ensure balance is updated\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n if (!confirmed) {\n throw new Error('Airdrop confirmation timeout')\n }\n\n return {\n success: true,\n attempts,\n signature\n }\n } catch (error) {\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Airdrop attempt ${attempts} failed: ${error}`))\n }\n \n if (i < maxRetries - 1) {\n await new Promise(resolve => setTimeout(resolve, retryDelay))\n }\n }\n }\n\n return {\n success: false,\n attempts,\n error: 'Max retries exceeded'\n }\n }\n\n /**\n * Try to fund from treasury wallet\n */\n private async tryTreasuryFunding(\n targetWallet: Address,\n amount: bigint,\n treasuryWallet: string | KeyPairSigner,\n verbose: boolean\n ): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n const treasurySigner = await this.loadWallet(treasuryWallet)\n const treasuryBalance = await this.getBalance(treasurySigner.address)\n\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Treasury balance: ${this.formatSol(treasuryBalance)} SOL`))\n }\n\n if (treasuryBalance < amount + BigInt(5000)) { // Keep 5000 lamports for fees\n return {\n success: false,\n error: 'Insufficient treasury balance'\n }\n }\n\n const signature = await this.transferSol(\n treasurySigner,\n targetWallet,\n amount,\n verbose\n )\n\n return {\n success: true,\n signature\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n\n /**\n * Try to fund from another funded wallet\n */\n private async tryFundedWalletTransfer(\n targetWallet: Address,\n amount: bigint,\n fundedWallet: string | KeyPairSigner,\n verbose: boolean\n ): Promise<{ success: boolean; signature?: string; error?: string }> {\n try {\n const signer = await this.loadWallet(fundedWallet)\n const balance = await this.getBalance(signer.address)\n\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Funded wallet balance: ${this.formatSol(balance)} SOL`))\n }\n\n if (balance < amount + BigInt(5000)) { // Keep 5000 lamports for fees\n return {\n success: false,\n error: 'Insufficient wallet balance'\n }\n }\n\n const signature = await this.transferSol(\n signer,\n targetWallet,\n amount,\n verbose\n )\n\n return {\n success: true,\n signature\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error'\n }\n }\n }\n\n /**\n * Transfer SOL from one wallet to another\n */\n private async transferSol(\n from: KeyPairSigner,\n to: Address,\n amount: bigint,\n verbose: boolean\n ): Promise<string> {\n const { value: latestBlockhash } = await this.rpc.getLatestBlockhash().send()\n \n const transferInstruction = getTransferSolInstruction({\n source: from,\n destination: to,\n amount\n })\n\n const message = pipe(\n createTransactionMessage({ version: 0 }),\n tx => setTransactionMessageFeePayer(from.address, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n tx => appendTransactionMessageInstructions([transferInstruction], tx)\n )\n\n const signedTransaction = await signTransactionMessageWithSigners(message)\n const base64Transaction = getBase64EncodedWireTransaction(signedTransaction)\n \n const sendResult = await this.rpc\n .sendTransaction(base64Transaction, { \n skipPreflight: false,\n preflightCommitment: this.commitment,\n maxRetries: BigInt(5)\n })\n .send()\n \n // sendTransaction returns the signature directly\n const signature = sendResult\n\n if (verbose) {\n console.log(chalk.gray(`[WalletFunding] Transfer sent: ${signature}`))\n }\n\n // Wait for confirmation using getSignatureStatuses\n let confirmed = false\n const maxAttempts = 30\n for (let i = 0; i < maxAttempts; i++) {\n const statusResponse = await this.rpc\n .getSignatureStatuses([signature])\n .send()\n \n const status = statusResponse.value[0]\n if (status && status.confirmationStatus === 'confirmed') {\n confirmed = true\n break\n }\n \n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n \n if (!confirmed) {\n throw new Error('Transaction confirmation timeout')\n }\n\n return signature\n }\n\n /**\n * Load wallet from path or return existing signer\n */\n private async loadWallet(walletSource: string | KeyPairSigner): Promise<KeyPairSigner> {\n if (typeof walletSource !== 'string') {\n return walletSource\n }\n\n // Check if it's an environment variable\n const envValue = process.env[walletSource]\n if (envValue) {\n // Try to parse as JSON array\n try {\n const walletData = JSON.parse(envValue) as number[]\n return await createKeyPairSignerFromBytes(new Uint8Array(walletData))\n } catch {\n // Try as base58 private key\n try {\n const privateKeyBytes = bs58.decode(envValue)\n // Solana private keys can be 32 bytes (seed) or 64 bytes (full keypair)\n if (privateKeyBytes.length === 32 || privateKeyBytes.length === 64) {\n return await createKeyPairSignerFromBytes(privateKeyBytes)\n }\n throw new Error('Invalid base58 private key length')\n } catch (error) {\n throw new Error(`Failed to load wallet from base58 key: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n\n // Load from file\n const walletData = JSON.parse(await fs.readFile(walletSource, 'utf-8')) as number[]\n return createKeyPairSignerFromBytes(new Uint8Array(walletData))\n }\n\n /**\n * Load wallet from base58 private key\n */\n static async loadWalletFromBase58(base58PrivateKey: string): Promise<KeyPairSigner> {\n try {\n const privateKeyBytes = bs58.decode(base58PrivateKey)\n // Solana private keys can be 32 bytes (seed) or 64 bytes (full keypair)\n if (privateKeyBytes.length === 32 || privateKeyBytes.length === 64) {\n return await createKeyPairSignerFromBytes(privateKeyBytes)\n }\n throw new Error(`Invalid private key length: ${privateKeyBytes.length} bytes. Expected 32 or 64 bytes.`)\n } catch (error) {\n if (error instanceof Error && error.message.includes('Invalid private key length')) {\n throw error\n }\n throw new Error(`Failed to decode base58 private key: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n /**\n * Get wallet balance\n */\n async getBalance(wallet: Address): Promise<bigint> {\n const response = await this.rpc\n .getBalance(wallet, { commitment: this.commitment })\n .send()\n return response.value\n }\n\n /**\n * Check if connected to devnet\n */\n private async isDevnet(): Promise<boolean> {\n try {\n const response = await this.rpc.getGenesisHash().send()\n // Devnet genesis hash - response is the hash string directly\n return await Promise.resolve(response === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG')\n } catch {\n return false\n }\n }\n\n /**\n * Format lamports as SOL\n */\n private formatSol(lamports: bigint): string {\n return (Number(lamports) / 1_000_000_000).toFixed(4)\n }\n\n /**\n * Create and fund multiple test wallets\n */\n async createAndFundTestWallets(\n count: number,\n amountPerWallet: bigint,\n options: Omit<FundingStrategyOptions, 'amount'>\n ): Promise<KeyPairSigner[]> {\n const wallets: KeyPairSigner[] = []\n\n console.log(chalk.cyan(`Creating and funding ${count} test wallets...`))\n\n for (let i = 0; i < count; i++) {\n const wallet = await generateKeyPairSigner()\n \n console.log(chalk.gray(`Wallet ${i + 1}: ${wallet.address}`))\n \n const result = await this.fundWallet(wallet.address, {\n ...options,\n amount: amountPerWallet\n })\n\n if (result.success) {\n wallets.push(wallet)\n console.log(chalk.green(`✅ Funded with ${this.formatSol(result.balance)} SOL via ${result.method}`))\n } else {\n console.log(chalk.red(`❌ Failed to fund: ${result.error}`))\n }\n }\n\n return wallets\n }\n\n /**\n * Ensure minimum balance for a wallet\n */\n async ensureMinimumBalance(\n wallet: Address,\n minBalance: bigint,\n options?: Partial<FundingStrategyOptions>\n ): Promise<FundingResult> {\n const currentBalance = await this.getBalance(wallet)\n \n if (currentBalance >= minBalance) {\n return {\n success: true,\n balance: currentBalance,\n method: 'existing',\n attempts: 0\n }\n }\n\n const needed = minBalance - currentBalance\n return this.fundWallet(wallet, {\n amount: needed,\n minAmount: minBalance,\n ...options\n })\n }\n}\n\n/**\n * Default funding service instance for devnet\n */\nexport const defaultFundingService = new WalletFundingService(\n process.env.GHOSTSPEAK_RPC_URL ?? 'https://api.devnet.solana.com'\n)\n\n/**\n * Quick helper to fund a wallet with default settings\n */\nexport async function fundWallet(\n wallet: Address,\n amountInSol: number,\n options?: Partial<FundingStrategyOptions>\n): Promise<FundingResult> {\n return defaultFundingService.fundWallet(wallet, {\n amount: BigInt(Math.floor(amountInSol * 1_000_000_000)),\n ...options\n })\n}\n\n/**\n * Quick helper to ensure minimum balance\n */\nexport async function ensureMinimumBalance(\n wallet: Address,\n minBalanceInSol: number,\n options?: Partial<FundingStrategyOptions>\n): Promise<FundingResult> {\n return defaultFundingService.ensureMinimumBalance(\n wallet,\n BigInt(Math.floor(minBalanceInSol * 1_000_000_000)),\n options\n )\n}","/**\n * Private Metadata Storage\n * \n * Handles off-chain storage of encrypted data with on-chain references.\n * Supports IPFS and other storage backends for private data while\n * maintaining on-chain integrity verification.\n */\n\nimport { sha256 } from '@noble/hashes/sha256'\nimport { bytesToHex, hexToBytes } from '@noble/curves/abstract/utils'\nimport type { Address } from '@solana/kit'\n\nimport {\n ClientEncryptionService,\n type EncryptedData,\n type PrivateMetadata\n} from './client-encryption.js'\n\nimport { getFeatureFlags } from './feature-flags.js'\n\n// =====================================================\n// TYPES\n// =====================================================\n\nexport interface StorageProvider {\n store(data: Uint8Array): Promise<string>\n retrieve(hash: string): Promise<Uint8Array>\n delete(hash: string): Promise<boolean>\n}\n\nexport interface StoredPrivateData {\n /** On-chain reference hash */\n onChainHash: Uint8Array\n \n /** Storage provider identifier */\n storageProvider: 'ipfs' | 'arweave' | 'custom'\n \n /** Storage location (IPFS hash, Arweave ID, etc) */\n storageLocation: string\n \n /** Encryption metadata */\n encryptionMetadata: {\n version: number\n publicKey: Uint8Array\n timestamp: number\n }\n \n /** Size of stored data */\n size: number\n \n /** Content type hint */\n contentType?: string\n}\n\nexport interface PrivateDataReference {\n /** Account storing the reference */\n account: Address\n \n /** Storage details */\n storage: StoredPrivateData\n \n /** Access control */\n accessControl: {\n owner: Address\n allowedReaders: Address[]\n expiresAt?: number\n }\n}\n\n// =====================================================\n// STORAGE PROVIDERS\n// =====================================================\n\n/**\n * Real IPFS storage provider using kubo-rpc-client (2025)\n * Connects to actual IPFS nodes for production use\n * \n * SECURITY NOTICE (Kluster MCP): \n * - All data stored is encrypted client-side before IPFS upload\n * - Use private IPFS networks for sensitive production data\n * - Implement proper key management and rotation policies\n * - Monitor for unauthorized access patterns\n */\nexport class IPFSProvider implements StorageProvider {\n private client: any\n private readonly isPrivateNetwork: boolean\n \n constructor(options?: { \n ipfsNodeUrl?: string; \n headers?: Record<string, string>;\n usePrivateNetwork?: boolean;\n }) {\n // Dynamic import to avoid bundling issues\n const createClient = require('kubo-rpc-client').create\n \n // Add null checks and validation for IPFS client options\n const ipfsNodeUrl = options?.ipfsNodeUrl || 'http://localhost:5001'\n const headers = options?.headers || {}\n this.isPrivateNetwork = options?.usePrivateNetwork || false\n \n // Validate IPFS node URL format\n try {\n new URL(ipfsNodeUrl)\n } catch (error) {\n throw new Error(`Invalid IPFS node URL provided: ${ipfsNodeUrl}`)\n }\n \n // Security validation for production use\n if (!this.isPrivateNetwork && ipfsNodeUrl.includes('localhost')) {\n console.warn('SECURITY WARNING: Using localhost IPFS node in production. Consider using a private IPFS network.')\n }\n \n // Validate headers object\n if (typeof headers !== 'object' || headers === null) {\n throw new Error('Headers must be a valid object')\n }\n \n this.client = createClient({\n url: ipfsNodeUrl,\n headers\n })\n \n if (!this.client) {\n throw new Error('Failed to create IPFS client - kubo-rpc-client returned null')\n }\n }\n \n async store(data: Uint8Array): Promise<string> {\n try {\n // Security check: Validate data size to prevent abuse\n if (data.length > 10 * 1024 * 1024) { // 10MB limit\n throw new Error('Data size exceeds maximum allowed limit (10MB)')\n }\n \n // Security check: Ensure data appears encrypted (basic validation)\n if (!this.isPrivateNetwork && this.isDataUnencrypted(data)) {\n console.warn('SECURITY WARNING: Data appears to be unencrypted. Ensure client-side encryption is applied.')\n }\n \n const result = await this.client.add(data, {\n pin: true, // Pin to ensure persistence\n cidVersion: 1 // Use CIDv1 for better compatibility\n })\n return result.cid.toString()\n } catch (error) {\n throw new Error(`Failed to store data to IPFS: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n \n /**\n * Basic heuristic to detect potentially unencrypted data\n * This is not foolproof but can catch obvious cases\n */\n private isDataUnencrypted(data: Uint8Array): boolean {\n // Check for common unencrypted patterns\n const text = new TextDecoder('utf-8', { fatal: false }).decode(data.slice(0, 100))\n const commonPatterns = ['{', '<', 'BEGIN', 'name', 'address', 'email', 'password']\n return commonPatterns.some(pattern => text.toLowerCase().includes(pattern.toLowerCase()))\n }\n \n async retrieve(hash: string): Promise<Uint8Array> {\n try {\n const chunks: Uint8Array[] = []\n for await (const chunk of this.client.cat(hash)) {\n chunks.push(chunk)\n }\n \n // Concatenate all chunks\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n \n return result\n } catch (error) {\n throw new Error(`Failed to retrieve data from IPFS: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n \n async delete(hash: string): Promise<boolean> {\n try {\n await this.client.pin.rm(hash)\n return true\n } catch (error) {\n // Pin removal might fail if not pinned - this is a non-critical error\n // Log as warning but don't throw since the data might not have been pinned\n console.warn(`IPFS unpin warning for ${hash}: ${error instanceof Error ? error.message : String(error)}`)\n return false // Return false to indicate pin removal didn't happen, but don't fail\n }\n }\n}\n\n/**\n * Local storage provider (for development)\n */\nexport class LocalStorageProvider implements StorageProvider {\n private prefix = 'ghostspeak_private_'\n \n async store(data: Uint8Array): Promise<string> {\n const hash = bytesToHex(sha256(data))\n globalThis.localStorage.setItem(this.prefix + hash, bytesToHex(data))\n return hash\n }\n \n async retrieve(hash: string): Promise<Uint8Array> {\n const hex = globalThis.localStorage.getItem(this.prefix + hash)\n if (hex) {\n return hexToBytes(hex)\n }\n throw new Error(`Data not found: ${hash}`)\n }\n \n async delete(hash: string): Promise<boolean> {\n globalThis.localStorage.removeItem(this.prefix + hash)\n return true\n }\n}\n\n// =====================================================\n// PRIVATE METADATA STORAGE SERVICE\n// =====================================================\n\nexport class PrivateMetadataStorage {\n private encryptionService: ClientEncryptionService\n private storageProvider: StorageProvider\n private featureFlags = getFeatureFlags()\n \n constructor(\n storageProvider?: StorageProvider,\n encryptionService?: ClientEncryptionService\n ) {\n this.storageProvider = storageProvider ?? new IPFSProvider()\n this.encryptionService = encryptionService ?? new ClientEncryptionService()\n }\n \n /**\n * Store private data off-chain with on-chain reference\n */\n async storePrivateData(\n data: Record<string, unknown>,\n publicMetadata: Record<string, unknown>,\n recipientPubkey: Uint8Array\n ): Promise<StoredPrivateData> {\n // Check if IPFS storage is enabled\n if (!this.featureFlags.isEnabled('ENABLE_IPFS_STORAGE')) {\n throw new Error('IPFS storage is not enabled')\n }\n \n // Create private metadata\n const privateMetadata = await this.encryptionService.createPrivateMetadata(\n data,\n publicMetadata,\n recipientPubkey\n )\n \n // Serialize for storage\n const serialized = this.serializePrivateMetadata(privateMetadata)\n \n // Store in IPFS (or other provider)\n const storageLocation = await this.storageProvider.store(serialized)\n \n // Create on-chain reference\n const onChainHash = this.createOnChainHash(privateMetadata, storageLocation)\n \n return {\n onChainHash,\n storageProvider: 'ipfs',\n storageLocation,\n encryptionMetadata: {\n version: privateMetadata.encrypted.version,\n publicKey: privateMetadata.encrypted.publicKey,\n timestamp: privateMetadata.encrypted.timestamp\n },\n size: serialized.length,\n contentType: 'application/json'\n }\n }\n \n /**\n * Retrieve private data from off-chain storage\n */\n async retrievePrivateData(\n reference: StoredPrivateData,\n secretKey: Uint8Array\n ): Promise<{\n privateData: Record<string, unknown>\n publicData: Record<string, unknown>\n }> {\n // Retrieve from storage\n const serialized = await this.storageProvider.retrieve(reference.storageLocation)\n \n // Verify integrity\n const expectedHash = this.createOnChainHash(\n this.deserializePrivateMetadata(serialized),\n reference.storageLocation\n )\n \n if (bytesToHex(expectedHash) !== bytesToHex(reference.onChainHash)) {\n throw new Error('Data integrity check failed')\n }\n \n // Deserialize\n const metadata = this.deserializePrivateMetadata(serialized)\n \n // Decrypt private data\n const decryptedBytes = await this.decryptPrivateData(\n metadata.encrypted,\n secretKey\n )\n \n const privateData = JSON.parse(new TextDecoder().decode(decryptedBytes)) as Record<string, unknown>\n \n return {\n privateData,\n publicData: metadata.public\n }\n }\n \n /**\n * Create a verifiable link between on-chain and off-chain data\n */\n createVerifiableLink(\n onChainData: Record<string, unknown>,\n offChainReference: StoredPrivateData\n ): Uint8Array {\n const combined = {\n onChain: onChainData,\n offChain: {\n hash: bytesToHex(offChainReference.onChainHash),\n location: offChainReference.storageLocation,\n provider: offChainReference.storageProvider\n },\n timestamp: Date.now()\n }\n \n return sha256(new TextEncoder().encode(JSON.stringify(combined)))\n }\n \n /**\n * Batch store multiple private data items\n */\n async batchStore(\n items: {\n data: Record<string, unknown>\n publicMetadata: Record<string, unknown>\n recipientPubkey: Uint8Array\n }[]\n ): Promise<StoredPrivateData[]> {\n const results: StoredPrivateData[] = []\n \n for (const item of items) {\n const stored = await this.storePrivateData(\n item.data,\n item.publicMetadata,\n item.recipientPubkey\n )\n results.push(stored)\n }\n \n return results\n }\n \n // =====================================================\n // PRIVATE METHODS\n // =====================================================\n \n private serializePrivateMetadata(metadata: PrivateMetadata): Uint8Array {\n const json = JSON.stringify({\n encrypted: {\n ciphertext: {\n commitment: bytesToHex(metadata.encrypted.ciphertext.commitment.commitment),\n handle: bytesToHex(metadata.encrypted.ciphertext.handle.handle)\n },\n publicKey: bytesToHex(metadata.encrypted.publicKey),\n commitment: bytesToHex(metadata.encrypted.commitment),\n timestamp: metadata.encrypted.timestamp,\n version: metadata.encrypted.version\n },\n public: metadata.public,\n storageHash: bytesToHex(metadata.storageHash),\n ipfsHash: metadata.ipfsHash\n })\n \n return new TextEncoder().encode(json)\n }\n \n private deserializePrivateMetadata(data: Uint8Array): PrivateMetadata {\n const json = JSON.parse(new TextDecoder().decode(data)) as {\n encrypted: {\n ciphertext: {\n commitment: string\n handle: string\n }\n publicKey: string\n commitment: string\n timestamp: number\n version: number\n }\n public: Record<string, unknown>\n storageHash: string\n ipfsHash?: string\n }\n \n return {\n encrypted: {\n ciphertext: {\n commitment: {\n commitment: hexToBytes(json.encrypted.ciphertext.commitment)\n },\n handle: {\n handle: hexToBytes(json.encrypted.ciphertext.handle)\n }\n },\n publicKey: hexToBytes(json.encrypted.publicKey),\n commitment: hexToBytes(json.encrypted.commitment),\n timestamp: json.encrypted.timestamp,\n version: json.encrypted.version\n },\n public: json.public,\n storageHash: hexToBytes(json.storageHash),\n ipfsHash: json.ipfsHash\n }\n }\n \n private createOnChainHash(\n metadata: PrivateMetadata,\n storageLocation: string\n ): Uint8Array {\n const data = {\n storageHash: bytesToHex(metadata.storageHash),\n storageLocation,\n commitment: bytesToHex(metadata.encrypted.commitment),\n timestamp: metadata.encrypted.timestamp\n }\n \n return sha256(new TextEncoder().encode(JSON.stringify(data)))\n }\n \n private async decryptPrivateData(\n encrypted: EncryptedData,\n secretKey: Uint8Array\n ): Promise<Uint8Array> {\n // Full decryption pending encryption service support\n // For now, decrypt the amount and serialize it\n // This is a limitation of current ElGamal implementation which only supports amounts\n const decryptedAmount = await this.encryptionService.decryptAmount(encrypted, secretKey)\n return new TextEncoder().encode(JSON.stringify({ amount: decryptedAmount.toString() }))\n }\n}\n\n// =====================================================\n// PRIVACY-PRESERVING QUERIES\n// =====================================================\n\n/**\n * Query builder for private data\n */\nexport class PrivateDataQuery {\n private conditions: {\n field: string\n operator: 'eq' | 'gt' | 'lt' | 'contains'\n value: unknown\n encrypted: boolean\n }[] = []\n \n where(field: string, operator: 'eq' | 'gt' | 'lt' | 'contains', value: unknown): this {\n this.conditions.push({ field, operator, value, encrypted: false })\n return this\n }\n \n whereEncrypted(field: string, commitment: Uint8Array): this {\n this.conditions.push({\n field,\n operator: 'eq',\n value: commitment,\n encrypted: true\n })\n return this\n }\n \n /**\n * Execute query against encrypted data\n * Note: This is limited compared to on-chain queries\n */\n async execute(\n storage: PrivateMetadataStorage,\n references: StoredPrivateData[]\n ): Promise<StoredPrivateData[]> {\n // For encrypted fields, we can only match by commitment\n // This is a privacy-preserving but limited query capability\n const results: StoredPrivateData[] = []\n \n for (const ref of references) {\n let matches = true\n \n for (const condition of this.conditions) {\n if (condition.encrypted) {\n // Can only check commitments for encrypted data\n // Real implementation would be more sophisticated\n if (condition.field === 'commitment') {\n const match = bytesToHex(ref.onChainHash) === bytesToHex(condition.value as Uint8Array)\n if (!match) {\n matches = false\n break\n }\n }\n }\n }\n \n if (matches) {\n results.push(ref)\n }\n }\n \n return results\n }\n}\n\n// =====================================================\n// UTILITIES\n// =====================================================\n\n/**\n * Calculate storage cost estimate\n */\nexport function estimateStorageCost(\n dataSize: number,\n provider: 'ipfs' | 'arweave'\n): {\n cost: bigint\n currency: string\n} {\n // Mock cost calculation\n // In production, this would query actual storage costs\n if (provider === 'ipfs') {\n return {\n cost: BigInt(Number(dataSize) * 1), // 1 lamport per byte\n currency: 'lamports'\n }\n } else {\n return {\n cost: BigInt(Number(dataSize) * 10), // 10 lamports per byte\n currency: 'lamports'\n }\n }\n}\n\n/**\n * Create a privacy manifest for transparency\n */\nexport interface PrivacyManifest {\n dataTypes: string[]\n encryptionMethod: 'elgamal' | 'aes256'\n storageLocation: 'ipfs' | 'arweave' | 'on-chain'\n retentionPeriod?: number\n accessControl: 'owner-only' | 'public-read' | 'permissioned'\n}\n\nexport function createPrivacyManifest(\n dataTypes: string[],\n options: Partial<PrivacyManifest> = {}\n): PrivacyManifest {\n return {\n dataTypes,\n encryptionMethod: options.encryptionMethod ?? 'elgamal',\n storageLocation: options.storageLocation ?? 'ipfs',\n retentionPeriod: options.retentionPeriod,\n accessControl: options.accessControl ?? 'owner-only'\n }\n}","/**\n * Feature Gate Detector\n * \n * Runtime detection of Solana feature gates to determine which native\n * programs and features are available on the current network.\n * \n * This module specifically tracks feature gates\n * and provides caching to minimize RPC calls.\n */\n\nimport { address } from '@solana/addresses'\nimport type { Address } from '@solana/kit'\nimport type { Rpc, GetAccountInfoApi } from '@solana/rpc'\n\n// =====================================================\n// CONSTANTS\n// =====================================================\n\n/**\n * Known feature gate addresses\n */\nexport const FEATURE_GATES = {\n /** Confidential transfers feature (placeholder) */\n CONFIDENTIAL_TRANSFERS: address('11111111111111111111111111111111'),\n \n /** Token-2022 program (placeholder) */\n TOKEN_2022: address('TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'),\n} as const\n\n/**\n * Cache configuration\n */\nconst CACHE_TTL_MS = 5 * 60 * 1000 // 5 minutes\nconst MAX_CACHE_ENTRIES = 100\n\n// =====================================================\n// TYPES\n// =====================================================\n\nexport interface FeatureStatus {\n /** Whether the feature is activated */\n activated: boolean\n \n /** When the status was last checked */\n lastChecked: number\n \n /** Optional activation slot if known */\n activationSlot?: bigint\n \n /** Error if status check failed */\n error?: string\n}\n\nexport interface FeatureGateCache {\n [featureId: string]: FeatureStatus\n}\n\n// =====================================================\n// CACHE IMPLEMENTATION\n// =====================================================\n\nclass FeatureGateCacheManager {\n private cache: FeatureGateCache = {}\n private cacheOrder: string[] = []\n \n /**\n * Get cached feature status\n */\n get(featureId: string): FeatureStatus | null {\n const cached = this.cache[featureId]\n // Cache found, continue\n \n // Check if cache is expired\n if (Date.now() - cached.lastChecked > CACHE_TTL_MS) {\n this.remove(featureId)\n return null\n }\n \n return cached\n }\n \n /**\n * Set feature status in cache\n */\n set(featureId: string, status: FeatureStatus): void {\n // Remove if already exists to update order\n this.remove(featureId)\n \n // Add to cache\n this.cache[featureId] = status\n this.cacheOrder.push(featureId)\n \n // Enforce max cache size\n if (this.cacheOrder.length > MAX_CACHE_ENTRIES) {\n const oldest = this.cacheOrder.shift()\n if (oldest) {\n delete this.cache[oldest]\n }\n }\n }\n \n /**\n * Remove from cache\n */\n remove(featureId: string): void {\n delete this.cache[featureId]\n this.cacheOrder = this.cacheOrder.filter(id => id !== featureId)\n }\n \n /**\n * Clear entire cache\n */\n clear(): void {\n this.cache = {}\n this.cacheOrder = []\n }\n}\n\n// Global cache instance\nconst featureCache = new FeatureGateCacheManager()\n\n// =====================================================\n// FEATURE DETECTION\n// =====================================================\n\n/**\n * Check if a feature gate is activated on the current network\n * \n * @param connection - Solana connection\n * @param featureGate - Feature gate public key to check\n * @returns Feature activation status\n */\nexport async function checkFeatureGate(\n rpc: Rpc<GetAccountInfoApi>,\n featureGate: Address\n): Promise<FeatureStatus> {\n const featureId = featureGate\n \n // Check cache first\n const cached = featureCache.get(featureId)\n if (cached) {\n return cached\n }\n \n try {\n // Check if the feature account exists\n const response = await rpc.getAccountInfo(featureGate, { encoding: 'base64' }).send()\n \n // Feature gates are special accounts - if they exist, the feature is active\n const accountInfo = response.value\n const activated = accountInfo !== null\n \n const status: FeatureStatus = {\n activated,\n lastChecked: Date.now(),\n }\n \n // If activated, try to get activation slot from account data\n if (accountInfo?.data) {\n try {\n // Decode base64 data\n const dataString = typeof accountInfo.data === 'string' ? accountInfo.data : accountInfo.data[0]\n const dataBuffer = Buffer.from(dataString, 'base64')\n \n // First 8 bytes of feature account data is the activation slot\n const activationSlot = BigInt(\n dataBuffer.readBigUInt64LE(0)\n )\n status.activationSlot = activationSlot\n } catch {\n // Ignore parsing errors\n }\n }\n \n // Cache the result\n featureCache.set(featureId, status)\n \n return status\n } catch (error) {\n // Cache error state to avoid repeated failures\n const errorStatus: FeatureStatus = {\n activated: false,\n lastChecked: Date.now(),\n error: error instanceof Error ? error.message : 'Unknown error',\n }\n \n featureCache.set(featureId, errorStatus)\n \n return errorStatus\n }\n}\n\n/**\n * Check multiple feature gates in parallel\n * \n * @param connection - Solana connection\n * @param featureGates - Array of feature gates to check\n * @returns Map of feature gate to status\n */\nexport async function checkMultipleFeatureGates(\n rpc: Rpc<GetAccountInfoApi>,\n featureGates: Address[]\n): Promise<Map<string, FeatureStatus>> {\n const results = await Promise.all(\n featureGates.map(gate => checkFeatureGate(rpc, gate))\n )\n \n const statusMap = new Map<string, FeatureStatus>()\n featureGates.forEach((gate, index) => {\n statusMap.set(gate, results[index])\n })\n \n return statusMap\n}\n\n/**\n * Monitor a feature gate for activation changes\n * \n * @param connection - Solana connection\n * @param featureGate - Feature gate to monitor\n * @param callback - Callback when status changes\n * @param intervalMs - Check interval (default 30 seconds)\n * @returns Function to stop monitoring\n */\nexport function monitorFeatureGate(\n rpc: Rpc<GetAccountInfoApi>,\n featureGate: Address,\n callback: (status: FeatureStatus) => void,\n intervalMs = 30_000\n): () => void {\n let lastStatus: FeatureStatus | null = null\n let intervalId: ReturnType<typeof setInterval> | null = null\n \n const check = async () => {\n try {\n const status = await checkFeatureGate(rpc, featureGate)\n \n // Check if status changed\n if (!lastStatus || lastStatus.activated !== status.activated) {\n callback(status)\n lastStatus = status\n }\n } catch (error) {\n console.error('Error monitoring feature gate:', error)\n }\n }\n \n // Initial check\n void check()\n \n // Set up interval\n intervalId = setInterval(check, intervalMs)\n \n // Return cleanup function\n return () => {\n if (intervalId) {\n clearInterval(intervalId)\n intervalId = null\n }\n }\n}\n\n// =====================================================\n// UTILITY FUNCTIONS\n// =====================================================\n\n/**\n * Clear the feature gate cache\n * Useful for testing or forcing fresh checks\n */\nexport function clearFeatureGateCache(): void {\n featureCache.clear()\n}\n\n/**\n * Convert feature gate public key to Address type\n */\nexport function featureGateToAddress(featureGate: Address): Address {\n return featureGate\n}\n\n// =====================================================\n// EXPORTS\n// =====================================================\n\nexport {\n FeatureGateCacheManager,\n featureCache as defaultFeatureCache,\n}"]}
|