{"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/contract/loader.ts","../src/validation/address.ts","../src/validation/eoa.ts","../src/validation/relayer.ts","../src/configuration/explorer.ts","../src/mapping/struct-fields.ts","../src/utils/type-detection.ts","../src/query/handler.ts","../src/transform/parsers/index.ts","../src/transform/parsers/generic-parser.ts","../src/transform/parsers/primitive-parser.ts","../src/transform/parsers/complex-parser.ts","../src/utils/safe-type-parser.ts","../src/utils/formatting.ts","../src/utils/input-parsing.ts","../src/transform/parsers/scval-converter.ts","../src/transform/parsers/struct-parser.ts","../src/transform/output-formatter.ts","../src/types/artifacts.ts","../src/utils/artifacts.ts","../src/query/view-checker.ts","../src/transaction/components/StellarRelayerOptions.tsx","../src/transaction/components/AdvancedInfo.tsx","../src/transaction/components/FeeConfiguration.tsx","../src/transaction/components/TransactionTiming.tsx","../src/transaction/components/useStellarRelayerOptions.ts","../src/transaction/relayer.ts","../src/wallet/connection.ts","../src/wallet/utils/stellarWalletImplementationManager.ts","../src/wallet/implementation/wallets-kit-implementation.ts","../src/wallet/stellar-wallets-kit/stellarUiKitManager.ts","../src/wallet/stellar-wallets-kit/config-generator.ts","../src/wallet/stellar-wallets-kit/export-service.ts","../src/wallet/stellar-wallets-kit/StellarWalletsKitConnectButton.tsx","../src/configuration/execution.ts","../src/configuration/rpc.ts","../src/mapping/constants.ts","../src/mapping/type-mapper.ts","../src/mapping/field-generator.ts","../src/mapping/enum-metadata.ts","../src/transaction/formatter.ts","../src/transaction/sender.ts","../src/transaction/eoa.ts","../src/wallet/components/StellarWalletUiRoot.tsx","../src/wallet/context/StellarWalletContext.ts","../src/wallet/context/useStellarWalletContext.ts","../src/wallet/hooks/useStellarAccount.ts","../src/wallet/hooks/useStellarConnect.ts","../src/wallet/hooks/useStellarDisconnect.ts","../src/wallet/hooks/facade-hooks.ts","../src/wallet/hooks/useUiKitConfig.ts","../src/wallet/components/connect/ConnectButton.tsx","../src/wallet/components/connect/ConnectorDialog.tsx","../src/wallet/components/account/AccountDisplay.tsx","../src/wallet/utils/filterWalletComponents.ts","../src/wallet/utils/uiKitService.ts","../src/wallet/services/configResolutionService.ts","../src/networks/mainnet.ts","../src/networks/testnet.ts","../src/networks/index.ts","../src/config.ts"],"sourcesContent":["// Re-export the main adapter class\nexport { StellarAdapter } from './adapter';\n\n// Re-export adapter-specific types\nexport type { StellarContractArtifacts } from './types/artifacts';\nexport { isStellarContractArtifacts } from './types/artifacts';\n\nexport {\n  stellarNetworks,\n  stellarMainnetNetworks,\n  stellarTestnetNetworks,\n  // Individual networks\n  stellarPublic,\n  stellarTestnet,\n} from './networks';\n\n// Export adapter configuration\nexport { stellarAdapterConfig } from './config';\n","import type React from 'react';\n\nimport type {\n  AvailableUiKit,\n  Connector,\n  ContractAdapter,\n  ContractFunction,\n  ContractSchema,\n  EcosystemReactUiProviderProps,\n  EcosystemSpecificReactHooks,\n  EcosystemWalletComponents,\n  ExecutionConfig,\n  ExecutionMethodDetail,\n  FieldType,\n  FormFieldType,\n  FunctionParameter,\n  NativeConfigLoader,\n  RelayerDetails,\n  RelayerDetailsRich,\n  StellarNetworkConfig,\n  TransactionStatusUpdate,\n  TxStatus,\n  UiKitConfiguration,\n  UserRpcProviderConfig,\n  WalletConnectionStatus,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { isStellarNetworkConfig } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n// Import functions from modules\nimport { loadStellarContract, loadStellarContractWithMetadata } from './contract/loader';\nimport { StellarRelayerOptions } from './transaction/components';\nimport { RelayerExecutionStrategy } from './transaction/relayer';\n\nimport {\n  getStellarExplorerAddressUrl,\n  getStellarExplorerTxUrl,\n  getStellarSupportedExecutionMethods,\n  testStellarRpcConnection,\n  validateStellarExecutionConfig,\n  validateStellarRpcEndpoint,\n} from './configuration';\nimport {\n  generateStellarDefaultField,\n  getStellarCompatibleFieldTypes,\n  mapStellarParameterTypeToFieldType,\n} from './mapping';\nimport {\n  getStellarWritableFunctions,\n  isStellarViewFunction,\n  queryStellarViewFunction,\n} from './query';\nimport { formatStellarTransactionData, signAndBroadcastStellarTransaction } from './transaction';\nimport { formatStellarFunctionResult } from './transform';\nimport { validateAndConvertStellarArtifacts } from './utils';\nimport { isValidAddress as isStellarValidAddress, type StellarAddressType } from './validation';\nimport {\n  connectStellarWallet,\n  disconnectStellarWallet,\n  generateStellarWalletsKitExportables,\n  getInitializedStellarWalletImplementation,\n  getResolvedWalletComponents,\n  getStellarAvailableConnectors,\n  getStellarWalletImplementation,\n  loadInitialConfigFromAppService,\n  resolveFullUiKitConfiguration,\n  stellarFacadeHooks,\n  stellarUiKitManager,\n  StellarWalletConnectionStatus,\n  StellarWalletUiRoot,\n  supportsStellarWalletConnection,\n} from './wallet';\n\n/**\n * Stellar-specific adapter implementation using explicit method delegation.\n *\n * NOTE: Contains placeholder implementations for most functionalities.\n */\nexport class StellarAdapter implements ContractAdapter {\n  readonly networkConfig: StellarNetworkConfig;\n  readonly initialAppServiceKitName: UiKitConfiguration['kitName'];\n\n  constructor(networkConfig: StellarNetworkConfig) {\n    if (!isStellarNetworkConfig(networkConfig)) {\n      throw new Error('StellarAdapter requires a valid Stellar network configuration.');\n    }\n    this.networkConfig = networkConfig;\n\n    // Set the network config in the wallet UI kit manager\n    stellarUiKitManager.setNetworkConfig(networkConfig);\n\n    // Initialize wallet implementation with network config\n    getStellarWalletImplementation(networkConfig).catch((error) => {\n      logger.error(\n        'StellarAdapter:constructor',\n        'Failed to initialize wallet implementation:',\n        error\n      );\n    });\n\n    // Determine the initial kitName from AppConfigService at the time of adapter construction.\n    // This provides a baseline kitName preference from the application's static/global configuration.\n    // It defaults to 'custom' if no specific kitName is found in AppConfigService.\n    const initialGlobalConfig = loadInitialConfigFromAppService();\n    this.initialAppServiceKitName =\n      (initialGlobalConfig.kitName as UiKitConfiguration['kitName']) || 'custom';\n\n    logger.info(\n      'StellarAdapter:constructor',\n      'Initial kitName from AppConfigService noted:',\n      this.initialAppServiceKitName\n    );\n\n    logger.info(\n      'StellarAdapter',\n      `Adapter initialized for network: ${networkConfig.name} (ID: ${networkConfig.id})`\n    );\n  }\n\n  // --- Contract Loading --- //\n  /**\n   * NOTE about artifact inputs (single input with auto-detection):\n   *\n   * The Builder renders the contract definition step using whatever fields the\n   * adapter returns here. EVM uses one optional ABI field; Midnight provides\n   * multiple fields. Stellar should use a single input approach with automatic\n   * content detection when we add manual-spec support:\n   *\n   * - Keep `contractAddress` (required)\n   * - Add optional `contractDefinition` (type: `code-editor`, language: `json`)\n   *   with file upload support for both JSON and Wasm binary content\n   *\n   * When this field is added:\n   * - Extend `validateAndConvertStellarArtifacts(...)` to accept\n   *   `{ contractAddress, contractDefinition? }`\n   * - In the loader, branch: if `contractDefinition` provided, auto-detect\n   *   content type (JSON vs Wasm using magic bytes `\\0asm`):\n   *   - For JSON: Parse and validate as Soroban spec, use `transformStellarSpecToSchema`\n   *   - For Wasm: Extract embedded spec from binary, parse locally (no RPC)\n   * - Set `source: 'manual'` with `contractDefinitionOriginal` to the raw\n   *   user-provided content. This ensures auto-save captures and restores the\n   *   manual contract definition exactly like the EVM/Midnight flows.\n   * - Provide clear UI hints about supported formats (JSON spec or Wasm binary).\n   */\n  public getContractDefinitionInputs(): FormFieldType[] {\n    return [\n      {\n        id: 'contractAddress',\n        name: 'contractAddress',\n        label: 'Contract ID',\n        type: 'blockchain-address',\n        validation: { required: true },\n        placeholder: 'C...',\n        helperText: 'Enter the Stellar contract ID (C...).',\n      },\n    ];\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async loadContract(source: string | Record<string, unknown>): Promise<ContractSchema> {\n    // Convert generic input to Stellar-specific artifacts\n    const artifacts = validateAndConvertStellarArtifacts(source);\n    const result = await loadStellarContract(artifacts, this.networkConfig);\n    return result.schema;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async loadContractWithMetadata(source: string | Record<string, unknown>): Promise<{\n    schema: ContractSchema;\n    source: 'fetched' | 'manual';\n    contractDefinitionOriginal?: string;\n    metadata?: {\n      fetchedFrom?: string;\n      contractName?: string;\n      fetchTimestamp?: Date;\n      definitionHash?: string;\n    };\n  }> {\n    try {\n      // Convert generic input to Stellar-specific artifacts\n      const artifacts = validateAndConvertStellarArtifacts(source);\n      const result = await loadStellarContractWithMetadata(artifacts, this.networkConfig);\n\n      return {\n        schema: result.schema,\n        source: result.source,\n        contractDefinitionOriginal: result.contractDefinitionOriginal,\n        metadata: result.metadata,\n      };\n    } catch (error) {\n      // Re-throw errors consistently with EVM adapter\n      throw error;\n    }\n  }\n\n  getWritableFunctions(contractSchema: ContractSchema): ContractSchema['functions'] {\n    return getStellarWritableFunctions(contractSchema);\n  }\n\n  // --- Type Mapping & Field Generation --- //\n  mapParameterTypeToFieldType(parameterType: string): FieldType {\n    return mapStellarParameterTypeToFieldType(parameterType);\n  }\n  getCompatibleFieldTypes(parameterType: string): FieldType[] {\n    return getStellarCompatibleFieldTypes(parameterType);\n  }\n  generateDefaultField<T extends FieldType = FieldType>(\n    parameter: FunctionParameter,\n    contractSchema?: ContractSchema\n  ): FormFieldType<T> {\n    return generateStellarDefaultField(parameter, contractSchema);\n  }\n\n  // --- Transaction Formatting & Execution --- //\n  public formatTransactionData(\n    contractSchema: ContractSchema,\n    functionId: string,\n    submittedInputs: Record<string, unknown>,\n    fields: FormFieldType[]\n  ): unknown {\n    return formatStellarTransactionData(contractSchema, functionId, submittedInputs, fields);\n  }\n  async signAndBroadcast(\n    transactionData: unknown,\n    executionConfig: ExecutionConfig,\n    onStatusChange: (status: TxStatus, details: TransactionStatusUpdate) => void,\n    runtimeApiKey?: string\n  ): Promise<{ txHash: string }> {\n    return signAndBroadcastStellarTransaction(\n      transactionData,\n      executionConfig,\n      this.networkConfig,\n      onStatusChange,\n      runtimeApiKey\n    );\n  }\n\n  // NOTE: waitForTransactionConfirmation? is optional in the interface.\n  // Since the imported function is currently undefined, we omit the method here.\n  // If implemented in ./transaction/sender.ts later, add the method back:\n  // async waitForTransactionConfirmation?(...) { ... }\n\n  // --- View Function Querying --- //\n  isViewFunction(functionDetails: ContractFunction): boolean {\n    return isStellarViewFunction(functionDetails);\n  }\n\n  // Implement queryViewFunction with the correct signature from ContractAdapter\n  async queryViewFunction(\n    contractAddress: string,\n    functionId: string,\n    params: unknown[] = [],\n    contractSchema?: ContractSchema\n  ): Promise<unknown> {\n    return queryStellarViewFunction(\n      contractAddress,\n      functionId,\n      this.networkConfig,\n      params,\n      contractSchema,\n      (address: string) => this.loadContract({ contractAddress: address })\n    );\n  }\n\n  formatFunctionResult(decodedValue: unknown, functionDetails: ContractFunction): string {\n    return formatStellarFunctionResult(decodedValue, functionDetails);\n  }\n\n  // --- Wallet Interaction --- //\n  supportsWalletConnection(): boolean {\n    return supportsStellarWalletConnection();\n  }\n  async getAvailableConnectors(): Promise<Connector[]> {\n    return getStellarAvailableConnectors();\n  }\n  async connectWallet(\n    connectorId: string\n  ): Promise<{ connected: boolean; address?: string; error?: string }> {\n    return connectStellarWallet(connectorId);\n  }\n  async disconnectWallet(): Promise<{ disconnected: boolean; error?: string }> {\n    return disconnectStellarWallet();\n  }\n  getWalletConnectionStatus(): StellarWalletConnectionStatus {\n    const impl = getInitializedStellarWalletImplementation();\n    if (!impl) {\n      return {\n        isConnected: false,\n        address: undefined,\n        chainId: stellarUiKitManager.getState().networkConfig?.id || 'stellar-testnet',\n      };\n    }\n\n    const stellarStatus = impl.getWalletConnectionStatus();\n\n    // Return the rich Stellar-specific status directly\n    return stellarStatus;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  onWalletConnectionChange(\n    callback: (\n      currentStatus: WalletConnectionStatus,\n      previousStatus: WalletConnectionStatus\n    ) => void\n  ): () => void {\n    const walletImplementation = getInitializedStellarWalletImplementation();\n    if (!walletImplementation) {\n      logger.warn(\n        'StellarAdapter:onWalletConnectionChange',\n        'Wallet implementation not ready. Subscription may not work.'\n      );\n      return () => {};\n    }\n\n    return walletImplementation.onWalletConnectionChange(\n      (currentImplStatus, previousImplStatus) => {\n        callback(currentImplStatus, previousImplStatus);\n      }\n    );\n  }\n\n  // --- Configuration & Metadata --- //\n  async getSupportedExecutionMethods(): Promise<ExecutionMethodDetail[]> {\n    return getStellarSupportedExecutionMethods();\n  }\n  async validateExecutionConfig(config: ExecutionConfig): Promise<true | string> {\n    const walletStatus = this.getWalletConnectionStatus();\n    return validateStellarExecutionConfig(config, walletStatus);\n  }\n\n  // Implement getExplorerUrl with the correct signature from ContractAdapter\n  getExplorerUrl(address: string): string | null {\n    return getStellarExplorerAddressUrl(address, this.networkConfig);\n  }\n\n  // Implement getExplorerTxUrl with the correct signature from ContractAdapter\n  getExplorerTxUrl?(txHash: string): string | null {\n    if (getStellarExplorerTxUrl) {\n      return getStellarExplorerTxUrl(txHash, this.networkConfig);\n    }\n    return null;\n  }\n\n  // --- Validation --- //\n  isValidAddress(address: string, addressType?: string): boolean {\n    return isStellarValidAddress(address, addressType as StellarAddressType);\n  }\n\n  public async getAvailableUiKits(): Promise<AvailableUiKit[]> {\n    return [\n      {\n        id: 'custom',\n        name: 'Stellar Wallets Kit Custom',\n        configFields: [],\n      },\n      {\n        id: 'stellar-wallets-kit',\n        name: 'Stellar Wallets Kit',\n        configFields: [],\n      },\n    ];\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async configureUiKit(\n    programmaticOverrides: Partial<UiKitConfiguration> = {},\n    options?: {\n      loadUiKitNativeConfig?: NativeConfigLoader;\n    }\n  ): Promise<void> {\n    const currentAppServiceConfig = loadInitialConfigFromAppService();\n\n    // Delegate the entire configuration resolution to the service function\n    const finalFullConfig = await resolveFullUiKitConfiguration(\n      programmaticOverrides,\n      this.initialAppServiceKitName,\n      currentAppServiceConfig,\n      options\n    );\n\n    // Configure the Stellar UI kit manager\n    await stellarUiKitManager.configure(finalFullConfig);\n    logger.info(\n      'StellarAdapter:configureUiKit',\n      'StellarUiKitManager configuration requested with final config:',\n      finalFullConfig\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async getExportableWalletConfigFiles(\n    uiKitConfig?: UiKitConfiguration\n  ): Promise<Record<string, string>> {\n    if (uiKitConfig?.kitName === 'stellar-wallets-kit') {\n      return generateStellarWalletsKitExportables(uiKitConfig);\n    }\n    return {};\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getEcosystemWalletComponents(): EcosystemWalletComponents | undefined {\n    const currentManagerState = stellarUiKitManager.getState();\n\n    // Only attempt to resolve components if the manager has a configuration set\n    if (!currentManagerState.currentFullUiKitConfig) {\n      logger.debug(\n        'StellarAdapter:getEcosystemWalletComponents',\n        'No UI kit configuration available in manager yet. Returning undefined components.'\n      );\n      return undefined;\n    }\n\n    // Use the service to resolve components based on the current UI kit configuration\n    const components = getResolvedWalletComponents(currentManagerState.currentFullUiKitConfig);\n    return components;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getEcosystemReactUiContextProvider():\n    | React.ComponentType<EcosystemReactUiProviderProps>\n    | undefined {\n    logger.info(\n      'StellarAdapter:getEcosystemReactUiContextProvider',\n      'Returning StellarWalletUiRoot.'\n    );\n    return StellarWalletUiRoot;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getEcosystemReactHooks(): EcosystemSpecificReactHooks | undefined {\n    // Always provide hooks for Stellar adapter regardless of UI kit\n    return stellarFacadeHooks;\n  }\n\n  public async getRelayers(serviceUrl: string, accessToken: string): Promise<RelayerDetails[]> {\n    const relayerStrategy = new RelayerExecutionStrategy();\n    try {\n      return await relayerStrategy.getStellarRelayers(serviceUrl, accessToken, this.networkConfig);\n    } catch (error) {\n      logger.error('StellarAdapter', 'Failed to fetch Stellar relayers:', error);\n      return Promise.resolve([]);\n    }\n  }\n\n  public async getRelayer(\n    serviceUrl: string,\n    accessToken: string,\n    relayerId: string\n  ): Promise<RelayerDetailsRich> {\n    const relayerStrategy = new RelayerExecutionStrategy();\n    try {\n      return await relayerStrategy.getStellarRelayer(\n        serviceUrl,\n        accessToken,\n        relayerId,\n        this.networkConfig\n      );\n    } catch (error) {\n      logger.error('StellarAdapter', 'Failed to fetch Stellar relayer details:', error);\n      return Promise.resolve({} as RelayerDetailsRich);\n    }\n  }\n\n  /**\n   * Returns a React component for configuring Stellar-specific relayer transaction options.\n   * @returns The Stellar relayer options component\n   */\n  public getRelayerOptionsComponent():\n    | React.ComponentType<{\n        options: Record<string, unknown>;\n        onChange: (options: Record<string, unknown>) => void;\n      }>\n    | undefined {\n    return StellarRelayerOptions;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async validateRpcEndpoint(rpcConfig: UserRpcProviderConfig): Promise<boolean> {\n    // TODO: Implement Stellar-specific RPC validation when needed\n    return validateStellarRpcEndpoint(rpcConfig);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async testRpcConnection(rpcConfig: UserRpcProviderConfig): Promise<{\n    success: boolean;\n    latency?: number;\n    error?: string;\n  }> {\n    // TODO: Implement Stellar-specific RPC validation when needed\n    return testStellarRpcConnection(rpcConfig);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getUiLabels(): Record<string, string> | undefined {\n    return {\n      relayerConfigTitle: 'Transaction Configuration',\n      relayerConfigActiveDesc: 'Customize transaction parameters for submission',\n      relayerConfigInactiveDesc: 'Using recommended transaction configuration for reliability',\n      relayerConfigPresetTitle: 'Recommended Preset Active',\n      relayerConfigPresetDesc: 'Transactions will use recommended parameters for quick inclusion',\n      relayerConfigCustomizeBtn: 'Customize Settings',\n      detailsTitle: 'Relayer Details',\n      network: 'Network',\n      relayerId: 'Relayer ID',\n      active: 'Active',\n      paused: 'Paused',\n      systemDisabled: 'System Disabled',\n      balance: 'Balance',\n      // For Stellar, sequence number is conceptually similar; adapters supply the value\n      nonce: 'Sequence',\n      pending: 'Pending Transactions',\n      lastTransaction: 'Last Transaction',\n    };\n  }\n}\n\n// Also export as default to ensure compatibility with various import styles\nexport default StellarAdapter;\n","import * as StellarSdk from '@stellar/stellar-sdk';\nimport { xdr } from '@stellar/stellar-sdk';\n\nimport type {\n  ContractFunction,\n  ContractSchema,\n  FunctionParameter,\n  StellarNetworkConfig,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { getStellarExplorerAddressUrl } from '../configuration/explorer';\nimport { extractStructFields, isStructType } from '../mapping/struct-fields';\nimport { checkStellarFunctionStateMutability } from '../query/handler';\nimport type { StellarContractArtifacts } from '../types/artifacts';\nimport { extractSorobanTypeFromScSpec } from '../utils/type-detection';\n\n/**\n * Load a Stellar contract using the official Stellar SDK approach\n * Based on the patterns from the official Stellar laboratory\n */\nexport async function loadStellarContractFromAddress(\n  contractAddress: string,\n  networkConfig: StellarNetworkConfig\n): Promise<ContractSchema> {\n  logger.info('loadStellarContractFromAddress', 'Loading contract:', {\n    contractAddress,\n    network: networkConfig.name,\n    rpcUrl: networkConfig.sorobanRpcUrl,\n    networkPassphrase: networkConfig.networkPassphrase,\n  });\n\n  try {\n    // Validate contract address\n    if (!StellarSdk.StrKey.isValidContract(contractAddress)) {\n      throw new Error(`Invalid contract address: ${contractAddress}`);\n    }\n\n    // Create contract client using the official Stellar SDK approach\n    // Laboratory note: some contracts may be missing Wasm/definition retrievable via RPC.\n    // In that case the SDK can throw an internal error like\n    // \"Cannot destructure property 'length'...\". Detect and surface an explicit error.\n    let contractClient: StellarSdk.contract.Client;\n    try {\n      contractClient = await StellarSdk.contract.Client.from({\n        contractId: contractAddress,\n        networkPassphrase: networkConfig.networkPassphrase,\n        rpcUrl: networkConfig.sorobanRpcUrl,\n      });\n    } catch (e) {\n      const message = (e as Error)?.message || String(e);\n      if (message.includes(\"Cannot destructure property 'length'\")) {\n        const friendly =\n          'Unable to fetch contract metadata from RPC. The contract appears to have no published Wasm/definition on this network.';\n        logger.error('loadStellarContractFromAddress', friendly);\n        throw new Error(`NO_WASM: ${friendly}`);\n      }\n      throw e;\n    }\n\n    logger.info('loadStellarContractFromAddress', 'Contract client created successfully');\n\n    // Get spec entries - try different approaches to access them\n    let specEntries: xdr.ScSpecEntry[] = [];\n    try {\n      // Access spec entries from the spec object\n\n      // Try to access spec entries through different possible properties/methods\n      if (contractClient.spec && typeof contractClient.spec === 'object') {\n        const spec = contractClient.spec as unknown as Record<string, unknown>;\n\n        // Try common property names\n        if (Array.isArray(spec.entries)) {\n          specEntries = spec.entries as xdr.ScSpecEntry[];\n        } else if (Array.isArray(spec._entries)) {\n          specEntries = spec._entries as xdr.ScSpecEntry[];\n        } else if (Array.isArray(spec.specEntries)) {\n          specEntries = spec.specEntries as xdr.ScSpecEntry[];\n        } else if (typeof spec.entries === 'function') {\n          // Maybe it's a method after all, but with different signature\n          try {\n            specEntries = (spec.entries as () => xdr.ScSpecEntry[])();\n          } catch (e) {\n            logger.warn('loadStellarContractFromAddress', 'entries() method failed:', e);\n          }\n        }\n\n        // Try the method directly on spec if it has the method\n        if (specEntries.length === 0 && typeof spec.entries === 'function') {\n          try {\n            specEntries = (spec.entries as () => xdr.ScSpecEntry[])();\n          } catch (e) {\n            logger.warn('loadStellarContractFromAddress', 'direct entries() method failed:', e);\n          }\n        }\n\n        logger.info('loadStellarContractFromAddress', `Found ${specEntries.length} spec entries`);\n      }\n    } catch (specError) {\n      logger.warn('loadStellarContractFromAddress', 'Could not extract spec entries:', specError);\n    }\n\n    // Extract functions using the official laboratory approach with spec entries for struct extraction\n    const functions = await extractFunctionsFromSpec(\n      contractClient.spec,\n      contractAddress,\n      specEntries,\n      networkConfig\n    );\n\n    logger.info(\n      'loadStellarContractFromAddress',\n      `Successfully extracted ${functions.length} functions`\n    );\n\n    return {\n      name: `Soroban Contract ${contractAddress.slice(0, 8)}...`,\n      ecosystem: 'stellar',\n      functions,\n      metadata: {\n        specEntries,\n      },\n    };\n  } catch (error) {\n    const msg = (error as Error)?.message || String(error);\n    // Preserve explicit NO_WASM error so downstream can surface it to the user\n    if (msg.startsWith('NO_WASM:')) {\n      logger.error('loadStellarContractFromAddress', msg);\n      throw new Error(msg);\n    }\n    logger.error('loadStellarContractFromAddress', 'Failed to load contract:', error);\n    throw new Error(`Failed to load contract: ${msg}`);\n  }\n}\n\n/**\n * Extract functions from contract spec using the official Stellar laboratory approach\n * with simulation-based state mutability detection\n */\nasync function extractFunctionsFromSpec(\n  spec: StellarSdk.contract.Spec,\n  contractAddress: string,\n  specEntries?: xdr.ScSpecEntry[],\n  networkConfig?: StellarNetworkConfig\n): Promise<ContractFunction[]> {\n  try {\n    // Get all functions using the official SDK method\n    const specFunctions = spec.funcs();\n\n    logger.info('extractFunctionsFromSpec', `Found ${specFunctions.length} functions in spec`);\n\n    return await Promise.all(\n      specFunctions.map(async (func, index) => {\n        try {\n          // Extract function name using the official SDK method\n          const functionName = func.name().toString();\n\n          logger.info('extractFunctionsFromSpec', `Processing function: ${functionName}`);\n\n          // Get function inputs and outputs using the official SDK methods\n          const inputs: FunctionParameter[] = func.inputs().map((input, inputIndex) => {\n            try {\n              const inputName = input.name().toString();\n              const inputType = extractSorobanTypeFromScSpec(input.type());\n\n              if (inputType === 'unknown') {\n                logger.warn(\n                  'extractFunctionsFromSpec',\n                  `Unknown type for parameter \"${inputName}\" in function \"${functionName}\"`\n                );\n              }\n\n              // Check if this is a struct type and extract components\n              let components: FunctionParameter[] | undefined;\n              if (specEntries && specEntries.length > 0 && isStructType(specEntries, inputType)) {\n                const structFields = extractStructFields(specEntries, inputType);\n                if (structFields && structFields.length > 0) {\n                  components = structFields;\n                  logger.debug(\n                    'extractFunctionsFromSpec',\n                    `Extracted ${structFields.length} fields for struct type \"${inputType}\": ${structFields.map((f) => `${f.name}:${f.type}`).join(', ')}`\n                  );\n                } else {\n                  logger.warn(\n                    'extractFunctionsFromSpec',\n                    `No fields extracted for struct \"${inputType}\"`\n                  );\n                }\n              }\n\n              return {\n                name: inputName || `param_${inputIndex}`,\n                type: inputType,\n                ...(components && { components }),\n              };\n            } catch (error) {\n              logger.warn(\n                'extractFunctionsFromSpec',\n                `Failed to parse input ${inputIndex}:`,\n                error\n              );\n              return {\n                name: `param_${inputIndex}`,\n                type: 'unknown',\n              };\n            }\n          });\n\n          const outputs: FunctionParameter[] = func.outputs().map((output, outputIndex) => {\n            try {\n              // Outputs are ScSpecTypeDef objects, they don't have names, only types\n              const outputType = extractSorobanTypeFromScSpec(output);\n\n              return {\n                name: `result_${outputIndex}`,\n                type: outputType,\n              };\n            } catch (error) {\n              logger.warn(\n                'extractFunctionsFromSpec',\n                `Failed to parse output ${outputIndex}:`,\n                error\n              );\n              return {\n                name: `result_${outputIndex}`,\n                type: 'unknown',\n              };\n            }\n          });\n\n          // Determine if function is read-only (view function) using simulation-based detection\n          // This follows the same approach as the official Stellar Laboratory\n          let modifiesState = true; // Default assumption for safety\n          let stateMutability: 'view' | 'pure' | 'nonpayable' = 'nonpayable';\n\n          if (networkConfig) {\n            try {\n              // Extract input types for simulation\n              const inputTypes = inputs.map((input) => input.type);\n\n              logger.debug(\n                'extractFunctionsFromSpec',\n                `Checking state mutability for ${functionName} with input types: ${inputTypes.join(', ')}`\n              );\n\n              // Use simulation-based state mutability detection\n              modifiesState = await checkStellarFunctionStateMutability(\n                contractAddress,\n                functionName,\n                networkConfig,\n                inputTypes\n              );\n\n              stateMutability = modifiesState ? 'nonpayable' : 'view';\n\n              logger.info(\n                'extractFunctionsFromSpec',\n                `Function ${functionName} state mutability determined:`,\n                { modifiesState, stateMutability }\n              );\n            } catch (error) {\n              logger.warn(\n                'extractFunctionsFromSpec',\n                `Failed to determine state mutability for ${functionName}, assuming it modifies state:`,\n                error\n              );\n              // Keep defaults: modifiesState = true, stateMutability = 'nonpayable'\n            }\n          } else {\n            logger.warn(\n              'extractFunctionsFromSpec',\n              `No network config provided for ${functionName}, assuming it modifies state`\n            );\n          }\n\n          // Generate a unique ID for the function\n          const functionId = `${functionName}_${inputs.map((i) => i.type).join('_')}`;\n\n          return {\n            id: functionId,\n            name: functionName,\n            displayName:\n              functionName.charAt(0).toUpperCase() + functionName.slice(1).replace(/_/g, ' '),\n            description: `Soroban function: ${functionName}`,\n            inputs,\n            outputs,\n            type: 'function',\n            modifiesState,\n            stateMutability,\n          };\n        } catch (error) {\n          logger.error('extractFunctionsFromSpec', `Failed to process function ${index}:`, error);\n\n          // Return a basic function entry for failed parsing\n          return {\n            id: `function_${index}`,\n            name: `function_${index}`,\n            displayName: `Function ${index}`,\n            description: `Failed to parse function ${index}: ${(error as Error).message}`,\n            inputs: [],\n            outputs: [],\n            type: 'function',\n            modifiesState: true,\n            stateMutability: 'nonpayable',\n          };\n        }\n      })\n    );\n  } catch (error) {\n    logger.error('extractFunctionsFromSpec', 'Failed to extract functions from spec:', error);\n    throw new Error(`Failed to extract functions: ${(error as Error).message}`);\n  }\n}\n\n/**\n * Enhanced result type for Stellar contract loading with metadata\n */\nexport interface StellarContractLoadResult {\n  schema: ContractSchema;\n  source: 'fetched' | 'manual';\n  contractDefinitionOriginal?: string;\n  metadata?: {\n    fetchedFrom?: string;\n    contractName?: string;\n    fetchTimestamp?: Date;\n    definitionHash?: string;\n  };\n}\n\n/**\n * Load Stellar contract with basic metadata\n */\nexport async function loadStellarContract(\n  artifacts: StellarContractArtifacts,\n  networkConfig: StellarNetworkConfig\n): Promise<StellarContractLoadResult> {\n  if (typeof artifacts.contractAddress !== 'string') {\n    throw new Error('A contract address must be provided.');\n  }\n\n  const schema = await loadStellarContractFromAddress(artifacts.contractAddress, networkConfig);\n\n  const schemaWithAddress = { ...schema, address: artifacts.contractAddress };\n\n  return {\n    schema: schemaWithAddress,\n    source: 'fetched',\n    contractDefinitionOriginal: JSON.stringify(schemaWithAddress),\n    metadata: {\n      fetchedFrom:\n        getStellarExplorerAddressUrl(artifacts.contractAddress, networkConfig) ||\n        networkConfig.sorobanRpcUrl,\n      contractName: schema.name,\n      fetchTimestamp: new Date(),\n    },\n  };\n}\n\n/**\n * Load Stellar contract with extended metadata\n */\nexport async function loadStellarContractWithMetadata(\n  artifacts: StellarContractArtifacts,\n  networkConfig: StellarNetworkConfig\n): Promise<StellarContractLoadResult> {\n  if (typeof artifacts.contractAddress !== 'string') {\n    throw new Error('A contract address must be provided.');\n  }\n\n  try {\n    const contractData = await loadStellarContractFromAddress(\n      artifacts.contractAddress,\n      networkConfig\n    );\n\n    const schema = {\n      ...contractData,\n      address: artifacts.contractAddress,\n    };\n\n    return {\n      schema,\n      source: 'fetched',\n      contractDefinitionOriginal: JSON.stringify(schema),\n      metadata: {\n        fetchedFrom:\n          getStellarExplorerAddressUrl(artifacts.contractAddress, networkConfig) ||\n          networkConfig.sorobanRpcUrl,\n        contractName: schema.name,\n        fetchTimestamp: new Date(),\n      },\n    };\n  } catch (error) {\n    // Check if this is a network/connection error\n    const errorMessage = (error as Error).message || '';\n    // Surface Laboratory-style explicit message if Wasm is missing\n    if (errorMessage.startsWith('NO_WASM:')) {\n      // Re-throw without swallowing details so UI can show this immediately\n      throw new Error(errorMessage.replace(/^NO_WASM:\\s*/, ''));\n    }\n    if (errorMessage.includes('Failed to load contract')) {\n      throw new Error(\n        `Contract at ${artifacts.contractAddress} could not be loaded from the network. ` +\n          `Please verify the contract ID is correct and the network is accessible.`\n      );\n    }\n\n    // Re-throw other errors\n    throw error;\n  }\n}\n\n/**\n * Integration points for manual contract definition input (future work):\n *\n * Single Input with Auto-Detection (simplified UX):\n *    - Add a new loader path: `loadStellarContractFromDefinition(definition, networkConfig)`\n *    - Auto-detect content type using magic bytes and structure:\n *      - Wasm binary: starts with magic bytes `[0x00, 0x61, 0x73, 0x6D]` (`\\0asm`)\n *      - JSON spec: valid JSON array with Soroban spec entry objects\n *    - For JSON: Parse and validate, use `transformStellarSpecToSchema()` to build schema\n *    - For Wasm: Extract embedded spec from binary locally (no RPC), then build schema\n *    - Return `{ schema, source: 'manual' }` with `contractDefinitionOriginal` set to\n *      the raw input (JSON string or Wasm binary) for auto-save restoration\n *\n * The builder UI provides a single input field (code editor with file upload support)\n * that accepts either format, eliminating user confusion about format selection.\n * The auto-save system will store the resulting schema and `contractDefinitionOriginal`\n * so the configuration restores seamlessly.\n */\n\n/**\n * Transform Stellar contract spec to our internal schema format.\n *\n * This function is intentionally minimal at the moment and primarily used by\n * tests. The production load path derives function metadata using the\n * Stellar SDK via `loadStellarContractFromAddress`/`extractFunctionsFromSpec`.\n * A full spec-to-schema converter (with robust type mapping for inputs/outputs\n * and state mutability inference) is planned under the upcoming\n * \"Type Mapping and Data Transformation\" work in\n * `.agent-os/specs/2025-08-20-stellar-adapter-integration/tasks.md`.\n */\nexport function transformStellarSpecToSchema(\n  contractSpec: Record<string, unknown>,\n  contractAddress: string,\n  ecosystem: 'stellar' = 'stellar'\n): ContractSchema {\n  logger.info('transformStellarSpecToSchema', 'Transforming Stellar spec to schema format');\n\n  const schema: ContractSchema = {\n    name: (contractSpec.name as string) || `Soroban Contract ${contractAddress.slice(0, 8)}...`,\n    ecosystem,\n    functions: (contractSpec.functions as ContractFunction[]) || [],\n  };\n\n  logger.info('transformStellarSpecToSchema', 'Generated schema:', {\n    name: schema.name,\n    ecosystem: schema.ecosystem,\n    functionCount: Array.isArray(schema.functions) ? schema.functions.length : 0,\n  });\n\n  return schema;\n}\n","import { StrKey } from '@stellar/stellar-sdk';\n\n/**\n * Stellar address types supported by the validation functions\n */\nexport type StellarAddressType =\n  | 'account' // G... - Ed25519 public keys (standard account addresses)\n  | 'contract' // C... - Contract addresses\n  | 'muxed' // M... - Muxed account addresses (for exchanges/sub-accounts)\n  | 'secret' // S... - Secret seeds (private keys)\n  | 'signed-payload' // P... - Signed payload addresses\n  | 'pre-auth-tx' // T... - Pre-authorized transaction hashes\n  | 'hash-x'; // X... - Hash-x condition addresses\n\n/**\n * Validate a standard Stellar account address (Ed25519 public key starting with 'G')\n * @param address The address to validate\n * @returns Whether the address is a valid account address\n */\nexport function isValidAccountAddress(address: string): boolean {\n  try {\n    return StrKey.isValidEd25519PublicKey(address);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Validate a Stellar contract address (starting with 'C')\n * @param address The address to validate\n * @returns Whether the address is a valid contract address\n */\nexport function isValidContractAddress(address: string): boolean {\n  try {\n    return StrKey.isValidContract(address);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Validate a Stellar muxed account address (starting with 'M')\n * @param address The address to validate\n * @returns Whether the address is a valid muxed account address\n */\nexport function isValidMuxedAddress(address: string): boolean {\n  try {\n    return StrKey.isValidMed25519PublicKey(address);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Validate a Stellar secret seed (private key starting with 'S')\n * @param seed The secret seed to validate\n * @returns Whether the seed is a valid secret seed\n */\nexport function isValidSecretSeed(seed: string): boolean {\n  try {\n    return StrKey.isValidEd25519SecretSeed(seed);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Validate a signed payload address (starting with 'P')\n * @param address The address to validate\n * @returns Whether the address is a valid signed payload address\n */\nexport function isValidSignedPayloadAddress(address: string): boolean {\n  try {\n    return StrKey.isValidSignedPayload(address);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Main validation function that supports all Stellar address types\n * @param address The address to validate\n * @param addressType Optional specific address type to validate\n * @returns Whether the address is valid for the specified or any supported type\n */\nexport function isValidAddress(address: string, addressType?: StellarAddressType): boolean {\n  if (!address || typeof address !== 'string') {\n    return false;\n  }\n\n  // If specific type is requested, validate only that type\n  if (addressType) {\n    switch (addressType) {\n      case 'account':\n        return isValidAccountAddress(address);\n      case 'contract':\n        return isValidContractAddress(address);\n      case 'muxed':\n        return isValidMuxedAddress(address);\n      case 'secret':\n        return isValidSecretSeed(address);\n      case 'signed-payload':\n        return isValidSignedPayloadAddress(address);\n      case 'pre-auth-tx':\n        try {\n          // Pre-auth transactions start with 'T' - validate by trying to decode\n          StrKey.decodePreAuthTx(address);\n          return true;\n        } catch {\n          return false;\n        }\n      case 'hash-x':\n        try {\n          // Hash-x conditions start with 'X' - validate by trying to decode\n          StrKey.decodeSha256Hash(address);\n          return true;\n        } catch {\n          return false;\n        }\n      default:\n        return false;\n    }\n  }\n\n  // If no specific type requested, validate against common address types\n  // (excluding secrets and special-purpose addresses for security)\n  try {\n    return (\n      StrKey.isValidEd25519PublicKey(address) || // G... - accounts (most common)\n      StrKey.isValidContract(address) || // C... - contracts\n      StrKey.isValidMed25519PublicKey(address) // M... - muxed accounts\n    );\n  } catch {\n    return false;\n  }\n}\n","import { EoaExecutionConfig } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { StellarWalletConnectionStatus } from '../wallet/types';\nimport { isValidAddress } from './address';\n\nconst SYSTEM_LOG_TAG = 'StellarEoaValidator';\n\nexport async function validateEoaConfig(\n  config: EoaExecutionConfig,\n  walletStatus: StellarWalletConnectionStatus\n): Promise<true | string> {\n  if (!config.allowAny) {\n    if (!config.specificAddress) {\n      return \"EOA execution selected, but no specific address was provided when 'allowAny' is false.\";\n    }\n    if (!isValidAddress(config.specificAddress)) {\n      return `Invalid specific Stellar address format: ${config.specificAddress}`;\n    }\n    if (walletStatus.isConnected && walletStatus.address) {\n      if (walletStatus.address !== config.specificAddress) {\n        return `Connected wallet address (${walletStatus.address}) does not match the required specific Stellar address (${config.specificAddress}). Please connect the correct wallet.`;\n      }\n    } else if (walletStatus.isConnected && !walletStatus.address) {\n      logger.warn(\n        SYSTEM_LOG_TAG,\n        'Wallet is connected but address is unavailable for Stellar EOA validation.'\n      );\n      return 'Connected wallet address is not available for validation against specific Stellar address.';\n    }\n  }\n  return true;\n}\n","import { RelayerExecutionConfig } from '@openzeppelin/contracts-ui-builder-types';\n\nexport async function validateRelayerConfig(\n  config: RelayerExecutionConfig\n): Promise<true | string> {\n  if (!config.serviceUrl) {\n    return 'Relayer execution selected, but no service URL was provided.';\n  }\n  if (!config.relayer?.relayerId) {\n    return 'Relayer execution selected, but no relayer was chosen from the list.';\n  }\n  return true;\n}\n","/*\n * Stellar Explorer Configuration\n *\n * DESIGN NOTE: This module provides minimal explorer functionality compared to EVM adapters.\n * Stellar explorers are used only for generating display URLs, unlike EVM where explorers\n * are critical infrastructure for ABI fetching. See comments below for detailed explanation.\n */\n\nimport { NetworkConfig } from '@openzeppelin/contracts-ui-builder-types';\nimport type { UserExplorerConfig } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { isValidContractAddress } from '../validation';\n\n/**\n * Gets a blockchain explorer URL for an address on Stellar.\n * Uses the explorerUrl from the network configuration.\n *\n * @param address The address to get the explorer URL for\n * @param networkConfig The network configuration object.\n * @returns A URL to view the address on the configured Stellar explorer, or null.\n */\nexport function getStellarExplorerAddressUrl(\n  address: string,\n  networkConfig: NetworkConfig\n): string | null {\n  if (!address || !networkConfig.explorerUrl) {\n    return null;\n  }\n  // Use /contract for Soroban contract IDs, otherwise /account\n  const baseUrl = networkConfig.explorerUrl.replace(/\\/+$/, '');\n  const path = isValidContractAddress(address) ? 'contract' : 'account';\n  return `${baseUrl}/${path}/${encodeURIComponent(address)}`;\n}\n\n/**\n * Gets a blockchain explorer URL for a transaction on Stellar.\n * Uses the explorerUrl from the network configuration.\n *\n * @param txHash - The hash of the transaction to get the explorer URL for\n * @param networkConfig The network configuration object.\n * @returns A URL to view the transaction on the configured Stellar explorer, or null.\n */\nexport function getStellarExplorerTxUrl(\n  txHash: string,\n  networkConfig: NetworkConfig\n): string | null {\n  if (!txHash || !networkConfig.explorerUrl) {\n    return null;\n  }\n  // Construct the URL, assuming a standard /tx/ path for Stellar explorers\n  const baseUrl = networkConfig.explorerUrl.replace(/\\/+$/, '');\n  return `${baseUrl}/tx/${encodeURIComponent(txHash)}`;\n}\n\n/**\n * Validates a Stellar explorer configuration.\n *\n * NOTE: This validation is minimal compared to EVM - only checks URL formats.\n * No API key validation or connection testing since Stellar explorers are\n * display-only (not used for contract ABI fetching like in EVM).\n */\nexport function validateStellarExplorerConfig(explorerConfig: UserExplorerConfig): boolean {\n  // Validate URLs if provided\n  if (explorerConfig.explorerUrl) {\n    try {\n      new URL(explorerConfig.explorerUrl);\n    } catch {\n      return false;\n    }\n  } else {\n    // explorerUrl is required\n    return false;\n  }\n\n  if (explorerConfig.apiUrl) {\n    try {\n      new URL(explorerConfig.apiUrl);\n    } catch {\n      return false;\n    }\n  }\n\n  // Basic API key validation (not empty)\n  if (explorerConfig.apiKey !== undefined && explorerConfig.apiKey.trim().length === 0) {\n    return false;\n  }\n\n  return true;\n}\n\n/*\n * NOTE: Unlike EVM adapters, Stellar does not implement explorer connection testing.\n *\n * DESIGN DECISION: Stellar explorers are used only for generating display URLs,\n * not for critical functionality like ABI fetching (which EVM requires).\n *\n * Key differences from EVM:\n * - EVM: Explorers provide essential APIs for contract ABI fetching\n * - Stellar: Explorers are display-only; contract loading uses Soroban RPC directly\n * - EVM: Multiple explorer providers with varying API formats requiring validation\n * - Stellar: Standardized ecosystem using Horizon API underneath\n *\n * Therefore, testing explorer \"connectivity\" would only verify website availability,\n * which provides no functional value and adds unnecessary complexity.\n */\n","import { xdr } from '@stellar/stellar-sdk';\n\nimport type { FunctionParameter } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n// Import the type extraction utility from the shared utils module\nimport { extractSorobanTypeFromScSpec } from '../utils/type-detection';\n\n/**\n * Extracts struct field definitions from Stellar contract spec entries\n *\n * @param entries Array of ScSpecEntry from contract spec\n * @param structName Name of the struct type to extract fields for\n * @returns Array of FunctionParameter representing struct fields, or null if not found\n */\nexport function extractStructFields(\n  entries: xdr.ScSpecEntry[],\n  structName: string\n): FunctionParameter[] | null {\n  try {\n    // Find the entry for the requested struct name\n    const entry = entries.find((e) => {\n      try {\n        return e.value().name().toString() === structName;\n      } catch {\n        return false;\n      }\n    });\n\n    if (!entry) {\n      return null;\n    }\n\n    const entryKind = entry.switch();\n\n    // Handle UDT Struct (like DemoStruct { id: u32, flag: bool, info: Symbol })\n    if (entryKind.value === xdr.ScSpecEntryKind.scSpecEntryUdtStructV0().value) {\n      const structUdt = entry.udtStructV0();\n      const fields = structUdt.fields();\n      const structFields: FunctionParameter[] = [];\n\n      for (const field of fields) {\n        const fieldName = field.name().toString();\n        const fieldType = extractSorobanTypeFromScSpec(field.type());\n\n        structFields.push({\n          name: fieldName,\n          type: fieldType,\n        });\n      }\n\n      return structFields;\n    }\n\n    return null;\n  } catch (error) {\n    logger.error(\n      'extractStructFields',\n      `Failed to extract struct fields for ${structName}:`,\n      error\n    );\n    return null;\n  }\n}\n\n/**\n * Determines if a given type name is a struct type in the contract spec\n *\n * @param entries Array of ScSpecEntry from contract spec\n * @param typeName Name of the type to check\n * @returns true if the type is a struct, false otherwise\n */\nexport function isStructType(entries: xdr.ScSpecEntry[], typeName: string): boolean {\n  try {\n    const entry = entries.find((e) => {\n      try {\n        const entryName = e.value().name().toString();\n        return entryName === typeName;\n      } catch {\n        return false;\n      }\n    });\n\n    if (!entry) {\n      return false;\n    }\n\n    const entryKind = entry.switch();\n    const isStruct = entryKind.value === xdr.ScSpecEntryKind.scSpecEntryUdtStructV0().value;\n\n    return isStruct;\n  } catch (error) {\n    logger.error('isStructType', `Failed to check if ${typeName} is struct:`, error);\n    return false;\n  }\n}\n","import * as StellarSdk from '@stellar/stellar-sdk';\n\nimport { isDevelopmentOrTestEnvironment, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n/**\n * Utility functions for detecting and analyzing Stellar/Soroban parameter types\n */\n\n/**\n * Extract human-readable Soroban type name from ScSpecTypeDef\n * Based on the Stellar SDK type system\n */\nexport function extractSorobanTypeFromScSpec(scSpecType: StellarSdk.xdr.ScSpecTypeDef): string {\n  try {\n    const typeSwitch = scSpecType.switch();\n\n    switch (typeSwitch) {\n      case StellarSdk.xdr.ScSpecType.scSpecTypeVal():\n        return 'Val';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeBool():\n        return 'Bool';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeVoid():\n        return 'Void';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeError():\n        return 'Error';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeU32():\n        return 'U32';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeI32():\n        return 'I32';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeU64():\n        return 'U64';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeI64():\n        return 'I64';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeTimepoint():\n        return 'Timepoint';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeDuration():\n        return 'Duration';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeU128():\n        return 'U128';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeI128():\n        return 'I128';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeU256():\n        return 'U256';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeI256():\n        return 'I256';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeBytes():\n        return 'Bytes';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeBytesN(): {\n        const bytesNType = scSpecType.bytesN();\n        const size = bytesNType.n();\n        return `BytesN<${size}>`;\n      }\n      case StellarSdk.xdr.ScSpecType.scSpecTypeString():\n        return 'ScString';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeSymbol():\n        return 'ScSymbol';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeVec(): {\n        const vecType = scSpecType.vec();\n        const elementType = extractSorobanTypeFromScSpec(vecType.elementType());\n        return `Vec<${elementType}>`;\n      }\n      case StellarSdk.xdr.ScSpecType.scSpecTypeMap(): {\n        const mapType = scSpecType.map();\n        const keyType = extractSorobanTypeFromScSpec(mapType.keyType());\n        const valueType = extractSorobanTypeFromScSpec(mapType.valueType());\n        return `Map<${keyType}, ${valueType}>`;\n      }\n      case StellarSdk.xdr.ScSpecType.scSpecTypeTuple(): {\n        const tupleType = scSpecType.tuple();\n        const valueTypes = tupleType.valueTypes();\n        const typeNames = valueTypes.map((t) => extractSorobanTypeFromScSpec(t));\n        return `Tuple<${typeNames.join(', ')}>`;\n      }\n      case StellarSdk.xdr.ScSpecType.scSpecTypeOption(): {\n        const optionType = scSpecType.option();\n        const valueType = extractSorobanTypeFromScSpec(optionType.valueType());\n        return `Option<${valueType}>`;\n      }\n      case StellarSdk.xdr.ScSpecType.scSpecTypeResult(): {\n        const resultType = scSpecType.result();\n        const okType = extractSorobanTypeFromScSpec(resultType.okType());\n        const errorType = extractSorobanTypeFromScSpec(resultType.errorType());\n        return `Result<${okType}, ${errorType}>`;\n      }\n      case StellarSdk.xdr.ScSpecType.scSpecTypeAddress():\n        return 'Address';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeMuxedAddress():\n        return 'MuxedAddress';\n      case StellarSdk.xdr.ScSpecType.scSpecTypeUdt(): {\n        const udtType = scSpecType.udt();\n        return udtType.name().toString();\n      }\n      default:\n        // COMPREHENSIVE TYPE MISS DETECTION\n        logger.error('extractSorobanTypeFromScSpec', `🚨 MISSING SCSPEC TYPE HANDLER 🚨`, {\n          typeSwitchValue: typeSwitch.value,\n          typeSwitchName: typeSwitch.name,\n          rawScSpecType: scSpecType,\n          message: 'This indicates a missing case in extractSorobanTypeFromScSpec switch statement',\n          actionRequired: 'Add support for this ScSpec type immediately',\n          sdkVersion: process.env.npm_package_dependencies_stellar_sdk || 'unknown',\n        });\n\n        // Create detailed error report for unknown types\n        const errorReport = {\n          type: 'MISSING_SCSPEC_TYPE',\n          scSpecType: typeSwitch.name,\n          value: typeSwitch.value,\n          timestamp: new Date().toISOString(),\n        };\n\n        // In development, throw an error to fail fast\n        if (isDevelopmentOrTestEnvironment()) {\n          throw new Error(\n            `Missing ScSpec type handler: ${typeSwitch.name} (value: ${typeSwitch.value}). Please add support for this type.`\n          );\n        }\n\n        // In production, log extensively but don't break\n        logger.error('STELLAR_ADAPTER_MISSING_TYPE', 'Missing ScSpec type handler:', errorReport);\n        return 'unknown';\n    }\n  } catch (error) {\n    logger.error('extractSorobanTypeFromScSpec', 'Failed to extract type:', error);\n    return 'unknown';\n  }\n}\n\n/**\n * Determines if a parameter type is likely an enum based on naming conventions\n * and common patterns in Stellar/Soroban contracts.\n *\n * @param parameterType The parameter type string to analyze\n * @returns true if the type appears to be an enum based on naming patterns\n */\nexport function isLikelyEnumType(parameterType: string): boolean {\n  // Direct enum name patterns\n  if (parameterType.includes('Enum') || parameterType.includes('enum')) {\n    return true;\n  }\n\n  // Common enum naming patterns in Stellar/Soroban\n  const enumPatterns = [\n    /^(Status|State|Type|Kind|Mode|Level|Priority|Category)$/i,\n    /^.*?(Status|State|Type|Kind|Mode|Level|Priority|Category)$/i,\n    /^(Token|Asset|Account|Contract|Network)Type$/i,\n  ];\n\n  // Only apply pattern matching if it's not a generic \"UnknownType\" or similar\n  if (\n    parameterType === 'UnknownType' ||\n    parameterType === 'CustomStruct' ||\n    parameterType === 'UserInfo'\n  ) {\n    return false;\n  }\n\n  return enumPatterns.some((pattern) => pattern.test(parameterType));\n}\n","import {\n  Account,\n  Address,\n  BASE_FEE,\n  Contract,\n  Keypair,\n  nativeToScVal,\n  rpc as StellarRpc,\n  TransactionBuilder,\n} from '@stellar/stellar-sdk';\n\nimport type {\n  ContractSchema,\n  FunctionParameter,\n  NetworkConfig,\n  StellarNetworkConfig,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger, userRpcConfigService } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { parseStellarInput } from '../transform';\nimport { formatStellarFunctionResult } from '../transform/output-formatter';\nimport { convertStellarTypeToScValType } from '../utils';\nimport { isStellarViewFunction } from './view-checker';\n\n/**\n * Private helper to get a Soroban RPC Server instance for view queries.\n * Prioritizes custom RPC configuration, then falls back to network default.\n */\nfunction getSorobanRpcServer(networkConfig: StellarNetworkConfig): StellarRpc.Server {\n  // Check if there's a custom RPC configuration\n  const customRpcConfig = userRpcConfigService.getUserRpcConfig(networkConfig.id);\n  const rpcUrl = customRpcConfig?.url || networkConfig.sorobanRpcUrl;\n\n  if (!rpcUrl) {\n    throw new Error(`No Soroban RPC URL available for network ${networkConfig.name}`);\n  }\n\n  logger.info(\n    'getSorobanRpcServer',\n    `Creating Soroban RPC server for ${networkConfig.name} using RPC: ${rpcUrl}`\n  );\n\n  // Allow HTTP for localhost development\n  const allowHttp = new URL(rpcUrl).hostname === 'localhost';\n\n  return new StellarRpc.Server(rpcUrl, {\n    allowHttp,\n  });\n}\n\n/**\n * Creates a dummy transaction to simulate a contract function call.\n * This is used for view functions that don't modify state.\n */\nasync function createSimulationTransaction(\n  contractAddress: string,\n  functionName: string,\n  args: unknown[],\n  paramTypes: string[],\n  networkConfig: StellarNetworkConfig\n): Promise<TransactionBuilder> {\n  try {\n    // Create a dummy source account for simulation\n    // We'll use a well-known testnet account for simulation\n    const dummyKeypair = Keypair.random();\n    const sourceAccount = new Account(dummyKeypair.publicKey(), '0');\n\n    // Create contract instance\n    const contract = new Contract(contractAddress);\n\n    // Convert args to ScVal with proper type hints\n    const scValArgs = args.map((arg, index) => {\n      const paramType = paramTypes[index];\n      if (!paramType) {\n        // Fallback to direct conversion if type info missing\n        return nativeToScVal(arg);\n      }\n\n      // Special cases that don't need type hints\n      if (paramType === 'Bool' || paramType === 'Bytes' || paramType.match(/^BytesN<\\d+>$/)) {\n        return nativeToScVal(arg);\n      }\n\n      // Use common utility for type conversion with hints\n      const typeHint = convertStellarTypeToScValType(paramType);\n      return nativeToScVal(arg, { type: typeHint });\n    });\n\n    // Build the transaction for simulation\n    const transaction = new TransactionBuilder(sourceAccount, {\n      fee: BASE_FEE,\n      networkPassphrase: networkConfig.networkPassphrase,\n    })\n      .addOperation(contract.call(functionName, ...scValArgs))\n      .setTimeout(30);\n\n    return transaction;\n  } catch (error) {\n    logger.error('createSimulationTransaction', 'Failed to create simulation transaction:', error);\n    throw new Error(`Failed to create simulation transaction: ${(error as Error).message}`);\n  }\n}\n\n/**\n * Determines if a Stellar contract function modifies state by simulating it\n * and checking for state changes.\n *\n * @param contractAddress Address of the contract.\n * @param functionName Name of the function to check.\n * @param networkConfig The specific network configuration.\n * @param inputTypes Parameter types for the function (empty array for parameterless functions).\n * @returns True if the function modifies state, false if it's read-only.\n */\nexport async function checkStellarFunctionStateMutability(\n  contractAddress: string,\n  functionName: string,\n  networkConfig: StellarNetworkConfig,\n  inputTypes: string[] = []\n): Promise<boolean> {\n  logger.info(\n    'checkStellarFunctionStateMutability',\n    `Checking state mutability for function: ${functionName} on ${contractAddress}`\n  );\n\n  try {\n    // --- Validate Contract Address --- //\n    try {\n      Address.fromString(contractAddress);\n    } catch {\n      throw new Error(`Invalid Stellar contract address provided: ${contractAddress}`);\n    }\n\n    // --- Get Soroban RPC Server --- //\n    const rpcServer = getSorobanRpcServer(networkConfig);\n\n    // --- Create dummy parameters for simulation --- //\n    // For state mutability detection, we can use dummy values since we only care about state changes\n    const dummyArgs = inputTypes.map((paramType) => {\n      // Create minimal dummy values for different types\n      switch (paramType) {\n        case 'Bool':\n          return false;\n        case 'I32':\n        case 'U32':\n        case 'I64':\n        case 'U64':\n        case 'I128':\n        case 'U128':\n        case 'I256':\n        case 'U256':\n          return 0;\n        case 'String':\n          return '';\n        case 'Bytes':\n          return Buffer.alloc(0);\n        case 'Address':\n          // Use the contract address as a dummy address\n          return contractAddress;\n        default:\n          // For complex types, use null which often gets converted to appropriate defaults\n          return null;\n      }\n    });\n\n    // --- Create Simulation Transaction --- //\n    const transactionBuilder = await createSimulationTransaction(\n      contractAddress,\n      functionName,\n      dummyArgs,\n      inputTypes,\n      networkConfig\n    );\n\n    const transaction = transactionBuilder.build();\n\n    logger.debug(\n      'checkStellarFunctionStateMutability',\n      `[Check ${functionName}] Simulating transaction for state mutability check`\n    );\n\n    // --- Simulate Transaction --- //\n    let simulationResult: StellarRpc.Api.SimulateTransactionResponse;\n    try {\n      simulationResult = await rpcServer.simulateTransaction(transaction);\n    } catch (simulationError) {\n      logger.warn(\n        'checkStellarFunctionStateMutability',\n        `[Check ${functionName}] Simulation failed, assuming function modifies state:`,\n        simulationError\n      );\n      // If simulation fails, err on the side of caution and assume it modifies state\n      return true;\n    }\n\n    // --- Process Simulation Result --- //\n    if (StellarRpc.Api.isSimulationError(simulationResult)) {\n      logger.warn(\n        'checkStellarFunctionStateMutability',\n        `[Check ${functionName}] Simulation error, assuming function modifies state:`,\n        simulationResult.error\n      );\n      // If there's a simulation error, assume it modifies state for safety\n      return true;\n    }\n\n    // --- Check State Changes (following Laboratory approach) --- //\n    const hasStateChanges =\n      simulationResult.stateChanges && simulationResult.stateChanges.length > 0;\n\n    logger.info(\n      'checkStellarFunctionStateMutability',\n      `[Check ${functionName}] State mutability check complete:`,\n      {\n        hasStateChanges,\n        stateChangesCount: simulationResult.stateChanges?.length || 0,\n        modifiesState: Boolean(hasStateChanges),\n      }\n    );\n\n    return Boolean(hasStateChanges);\n  } catch (error) {\n    logger.warn(\n      'checkStellarFunctionStateMutability',\n      `Failed to check state mutability for ${functionName}, assuming it modifies state:`,\n      error\n    );\n    // If anything goes wrong, assume the function modifies state as a safe default\n    return true;\n  }\n}\n\n/**\n * Core logic for querying a Stellar view function.\n *\n * @param contractAddress Address of the contract.\n * @param functionId ID of the function to query.\n * @param networkConfig The specific network configuration.\n * @param params Raw parameters for the function call.\n * @param contractSchema Optional pre-loaded contract schema.\n * @param loadContractFn Function reference to load contract schema if not provided.\n * @returns The decoded result of the view function call.\n */\nexport async function queryStellarViewFunction(\n  contractAddress: string,\n  functionId: string,\n  networkConfig: NetworkConfig,\n  params: unknown[] = [],\n  contractSchema?: ContractSchema,\n  loadContractFn?: (source: string) => Promise<ContractSchema>\n): Promise<unknown> {\n  logger.info(\n    'queryStellarViewFunction',\n    `Querying Stellar view function: ${functionId} on ${contractAddress} (${networkConfig.name})`,\n    { params }\n  );\n\n  if (networkConfig.ecosystem !== 'stellar') {\n    throw new Error('Invalid network configuration for Stellar query.');\n  }\n\n  const stellarConfig = networkConfig as StellarNetworkConfig;\n\n  try {\n    // --- Validate Contract Address --- //\n    try {\n      Address.fromString(contractAddress);\n    } catch {\n      throw new Error(`Invalid Stellar contract address provided: ${contractAddress}`);\n    }\n\n    // --- Get Soroban RPC Server --- //\n    const rpcServer = getSorobanRpcServer(stellarConfig);\n\n    // --- Get Schema & Function Details --- //\n    let schema = contractSchema;\n    if (!schema && loadContractFn) {\n      schema = await loadContractFn(contractAddress);\n    }\n    if (!schema) {\n      throw new Error(\n        `Contract schema not provided and loadContractFn not available for ${contractAddress}`\n      );\n    }\n\n    const functionDetails = schema.functions.find((fn) => fn.id === functionId);\n    if (!functionDetails) {\n      throw new Error(`Function with ID ${functionId} not found in contract schema.`);\n    }\n\n    if (!isStellarViewFunction(functionDetails)) {\n      throw new Error(`Function ${functionDetails.name} is not a view function.`);\n    }\n\n    // --- Parse Input Parameters --- //\n    const expectedInputs: readonly FunctionParameter[] = functionDetails.inputs;\n    if (params.length !== expectedInputs.length) {\n      throw new Error(\n        `Incorrect number of parameters provided for ${functionDetails.name}. Expected ${expectedInputs.length}, got ${params.length}.`\n      );\n    }\n\n    const args = expectedInputs.map((inputParam: FunctionParameter, index: number) => {\n      const rawValue = params[index];\n      return parseStellarInput(rawValue, inputParam.type);\n    });\n\n    logger.debug('queryStellarViewFunction', 'Parsed Args for contract call:', args);\n\n    // --- Create Simulation Transaction --- //\n    const paramTypes = expectedInputs.map((input) => input.type);\n    const transactionBuilder = await createSimulationTransaction(\n      contractAddress,\n      functionDetails.name,\n      args,\n      paramTypes,\n      stellarConfig\n    );\n\n    const transaction = transactionBuilder.build();\n\n    logger.debug(\n      'queryStellarViewFunction',\n      `[Query ${functionDetails.name}] Simulating transaction:`,\n      transaction.toXDR()\n    );\n\n    // --- Simulate Transaction --- //\n    let simulationResult: StellarRpc.Api.SimulateTransactionResponse;\n    try {\n      simulationResult = await rpcServer.simulateTransaction(transaction);\n    } catch (simulationError) {\n      logger.error(\n        'queryStellarViewFunction',\n        `[Query ${functionDetails.name}] Simulation failed:`,\n        simulationError\n      );\n      throw new Error(\n        `Soroban RPC simulation failed for ${functionDetails.name}: ${(simulationError as Error).message}`\n      );\n    }\n\n    // --- Process Simulation Result --- //\n    if (StellarRpc.Api.isSimulationError(simulationResult)) {\n      logger.error(\n        'queryStellarViewFunction',\n        `[Query ${functionDetails.name}] Simulation error:`,\n        simulationResult.error\n      );\n      throw new Error(`Contract simulation failed: ${simulationResult.error}`);\n    }\n\n    if (!simulationResult.result) {\n      throw new Error(`No result returned from contract simulation for ${functionDetails.name}`);\n    }\n\n    const rawResult = simulationResult.result.retval;\n    logger.debug(\n      'queryStellarViewFunction',\n      `[Query ${functionDetails.name}] Raw simulation result:`,\n      rawResult\n    );\n\n    // --- Format Result --- //\n    const formattedResult = formatStellarFunctionResult(rawResult, functionDetails);\n\n    logger.info(\n      'queryStellarViewFunction',\n      `[Query ${functionDetails.name}] Formatted result:`,\n      formattedResult\n    );\n\n    return formattedResult;\n  } catch (error) {\n    const errorMessage = `Failed to query Stellar view function ${functionId} on network ${networkConfig.name}: ${(error as Error).message}`;\n    logger.error('queryStellarViewFunction', errorMessage, {\n      contractAddress,\n      functionId,\n      params,\n      networkConfig,\n      error,\n    });\n    throw new Error(errorMessage);\n  }\n}\n","import { isEnumValue } from '@openzeppelin/contracts-ui-builder-types';\nimport { isPlainObject, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { isLikelyEnumType } from '../../utils/type-detection';\nimport { isGenericType, parseGeneric } from './generic-parser';\nimport { isPrimitiveType, parsePrimitive } from './primitive-parser';\n\n// Re-export types for backward compatibility\nexport type {\n  SorobanArgumentValue,\n  SorobanEnumValue,\n  SorobanMapEntry,\n  SorobanComplexValue,\n} from './types';\n\n// Re-export specific functions for backward compatibility\nexport { getScValsFromArgs } from './complex-parser';\nexport { valueToScVal } from './scval-converter';\n\nconst SYSTEM_LOG_TAG = 'StellarInputParser';\n\n/**\n * Parses form input values for Stellar/Soroban contracts.\n * Handles both simple UI form inputs and complex structures.\n *\n * @param value - The input value from the form\n * @param parameterType - The Stellar parameter type (e.g., 'Address', 'U128', 'Vec<U32>')\n * @returns The parsed value suitable for nativeToScVal conversion\n */\nexport function parseStellarInput(value: unknown, parameterType: string): unknown {\n  try {\n    // Handle null/undefined values\n    if (value === null || value === undefined) {\n      return null;\n    }\n\n    // Try primitive types first (most common)\n    if (isPrimitiveType(parameterType)) {\n      const result = parsePrimitive(value, parameterType);\n      if (result !== null) {\n        return result;\n      }\n    }\n\n    // Try generic types (Vec, Map, Option, Result)\n    if (isGenericType(parameterType)) {\n      const result = parseGeneric(value, parameterType, parseStellarInput);\n      // For generic types, we always return the result (including null for Option<T> with empty/null values)\n      return result;\n    }\n\n    // Handle remaining custom types and special cases\n    // Check if this is an enum type and transform from chain-agnostic to Soroban format\n    if (isEnumValue(value) && isLikelyEnumType(parameterType)) {\n      // Chain-agnostic enum format: { tag: \"VariantName\", values?: [...] }\n      // Return the chain-agnostic enum value as-is\n      // The Stellar-specific transformation will happen in valueToScVal\n      return value;\n    }\n\n    // Check if this is a struct type (object with primitive fields)\n    if (isPlainObject(value)) {\n      // For structs, we need to recursively process each field\n      // But since we don't have field type information here, we'll pass it through\n      // and handle the conversion in valueToScVal where we have access to contract schema\n      return value;\n    }\n\n    // For other types, try to return raw value with validation\n    if (typeof value === 'string' || typeof value === 'number') {\n      return value;\n    }\n\n    throw new Error(`Unsupported parameter type: ${parameterType} with value type ${typeof value}`);\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, 'Failed to parse Stellar input:', error);\n    throw error;\n  }\n}\n","import { isMapEntryArray } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nconst SYSTEM_LOG_TAG = 'GenericParser';\n\n/**\n * Parses a generic type string and extracts the base type and parameters\n * @param typeString - Type like \"Vec<U32>\", \"Map<U32,Address>\", \"Option<Vec<U32>>\"\n * @returns Object with baseType and parameters, or null if not generic\n */\nexport function parseGenericType(typeString: string): {\n  baseType: string;\n  parameters: string[];\n} | null {\n  const match = typeString.match(/^(\\w+)<(.*)>$/);\n  if (!match) return null;\n\n  const baseType = match[1];\n  const paramString = match[2];\n\n  // Handle nested generics by counting angle brackets\n  const parameters: string[] = [];\n  let current = '';\n  let depth = 0;\n  let i = 0;\n\n  while (i < paramString.length) {\n    const char = paramString[i];\n\n    if (char === '<') {\n      depth++;\n      current += char;\n    } else if (char === '>') {\n      depth--;\n      current += char;\n    } else if (char === ',' && depth === 0) {\n      parameters.push(current.trim());\n      current = '';\n    } else {\n      current += char;\n    }\n    i++;\n  }\n\n  if (current.trim()) {\n    parameters.push(current.trim());\n  }\n\n  return { baseType, parameters };\n}\n\n/**\n * Parses generic types like Vec<T>, Map<K,V>, and Option<T>.\n *\n * @param value - The input value from the form\n * @param parameterType - The generic parameter type (e.g., 'Vec<U32>', 'Map<Symbol,Bytes>')\n * @param parseInnerValue - Function to recursively parse inner values\n * @returns The parsed value suitable for further processing\n */\nexport function parseGeneric(\n  value: unknown,\n  parameterType: string,\n  parseInnerValue: (val: unknown, type: string) => unknown\n): unknown {\n  try {\n    const genericInfo = parseGenericType(parameterType);\n    if (!genericInfo) {\n      return null; // Not a generic type\n    }\n\n    const { baseType, parameters } = genericInfo;\n\n    switch (baseType) {\n      case 'Vec': {\n        // Handle Vec<T> types\n        if (!Array.isArray(value)) {\n          throw new Error(`Array expected for Vec type ${parameterType}, got ${typeof value}`);\n        }\n\n        const innerType = parameters[0];\n        if (!innerType) {\n          throw new Error(`Could not parse Vec inner type: ${parameterType}`);\n        }\n\n        return value.map((item) => parseInnerValue(item, innerType));\n      }\n\n      case 'Map': {\n        // Handle Map<K,V> types\n        if (!isMapEntryArray(value)) {\n          throw new Error(`Array of MapEntry objects expected for Map type, got ${typeof value}`);\n        }\n\n        if (parameters.length < 2) {\n          throw new Error(`Could not parse Map types: ${parameterType}`);\n        }\n\n        const mapKeyType = parameters[0];\n        const mapValueType = parameters[1];\n\n        // Convert MapEntry array to Stellar SDK expected format\n        return value.map((entry) => ({\n          0: {\n            value: entry.key,\n            type: mapKeyType,\n          },\n          1: {\n            value: entry.value,\n            type: mapValueType,\n          },\n        }));\n      }\n\n      case 'Option': {\n        // Handle Option<T> types - empty string should be treated as null\n        if (value === null || value === undefined || value === '') {\n          return null;\n        }\n\n        const innerType = parameters[0];\n        if (!innerType) {\n          throw new Error(`Could not parse Option inner type: ${parameterType}`);\n        }\n\n        return parseInnerValue(value, innerType);\n      }\n\n      case 'Result': {\n        // Handle Result<T,E> types (basic support)\n        if (parameters.length < 2) {\n          throw new Error(`Could not parse Result types: ${parameterType}`);\n        }\n\n        // Result types typically come as {ok: value} or {err: error}\n        if (typeof value === 'object' && value !== null) {\n          const resultObj = value as Record<string, unknown>;\n          if ('ok' in resultObj) {\n            return {\n              ok: parseInnerValue(resultObj.ok, parameters[0]),\n            };\n          } else if ('err' in resultObj) {\n            return {\n              err: parseInnerValue(resultObj.err, parameters[1]),\n            };\n          }\n        }\n\n        return value; // Pass through if not in expected format\n      }\n\n      default:\n        // Unknown generic type\n        logger.warn(SYSTEM_LOG_TAG, `Unknown generic type: ${baseType}`);\n        return null;\n    }\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, `Failed to parse generic type ${parameterType}:`, error);\n    throw error;\n  }\n}\n\n/**\n * Checks if the given parameter type is a generic type that can be handled by this parser.\n *\n * @param parameterType - The Stellar parameter type\n * @returns True if this is a generic type\n */\nexport function isGenericType(parameterType: string): boolean {\n  const genericInfo = parseGenericType(parameterType);\n  return genericInfo !== null && ['Vec', 'Map', 'Option', 'Result'].includes(genericInfo.baseType);\n}\n","import { Address } from '@stellar/stellar-sdk';\n\nimport {\n  detectBytesEncoding,\n  logger,\n  stringToBytes,\n} from '@openzeppelin/contracts-ui-builder-utils';\n\nconst SYSTEM_LOG_TAG = 'PrimitiveParser';\n\n/**\n * Parses primitive Stellar/Soroban types from form inputs.\n * Handles: Bool, Bytes, Address, ScString, ScSymbol, and numeric types (U32, U64, U128, U256, I32, I64, I128, I256).\n *\n * @param value - The input value from the form\n * @param parameterType - The Stellar parameter type\n * @returns The parsed primitive value\n */\nexport function parsePrimitive(value: unknown, parameterType: string): unknown {\n  try {\n    // Handle null/undefined values\n    if (value === null || value === undefined) {\n      return null;\n    }\n\n    switch (parameterType) {\n      // Boolean: convert string \"true\"/\"false\" to actual boolean\n      case 'Bool':\n        if (typeof value === 'boolean') {\n          return value;\n        }\n        if (typeof value === 'string') {\n          return value.toLowerCase() === 'true';\n        }\n        throw new Error(`Boolean parameter expected, got ${typeof value}`);\n\n      // Bytes: handle encoding detection\n      case 'Bytes':\n        if (typeof value === 'string') {\n          // Remove 0x prefix if present\n          const cleanValue = value.startsWith('0x') ? value.slice(2) : value;\n          const encoding = detectBytesEncoding(cleanValue);\n          return stringToBytes(cleanValue, encoding);\n        }\n        throw new Error(`Bytes parameter must be a string, got ${typeof value}`);\n\n      // DataUrl: handle base64 encoded data (similar to Bytes)\n      case 'DataUrl':\n        if (typeof value === 'string') {\n          // DataUrl is typically base64 encoded\n          const encoding = detectBytesEncoding(value);\n          return stringToBytes(value, encoding);\n        }\n        throw new Error(`DataUrl parameter must be a string, got ${typeof value}`);\n\n      // Address: validate format\n      case 'Address':\n        if (typeof value === 'string') {\n          try {\n            Address.fromString(value); // Validate format\n            return value; // Return raw string - nativeToScVal will handle conversion\n          } catch {\n            throw new Error(`Invalid Stellar address format: ${value}`);\n          }\n        }\n        throw new Error(`Address parameter must be a string, got ${typeof value}`);\n\n      // String types: return as-is\n      case 'ScString':\n      case 'ScSymbol':\n        if (typeof value === 'string') {\n          return value;\n        }\n        throw new Error(`String parameter expected, got ${typeof value}`);\n\n      default:\n        // Handle BytesN<size> patterns\n        if (/^BytesN<\\d+>$/.test(parameterType)) {\n          if (typeof value === 'string') {\n            const cleanValue = value.startsWith('0x') ? value.slice(2) : value;\n            const encoding = detectBytesEncoding(cleanValue);\n            return stringToBytes(cleanValue, encoding);\n          }\n          throw new Error(`Bytes parameter must be a string, got ${typeof value}`);\n        }\n\n        // Handle numeric types: U32, U64, U128, U256, I32, I64, I128, I256\n        if (/^[UI](32|64|128|256)$/.test(parameterType)) {\n          if (typeof value === 'string') {\n            // Validate it's a valid integer (no decimals, letters)\n            if (!/^-?\\d+$/.test(value.trim())) {\n              throw new Error(`Invalid number format for ${parameterType}: ${value}`);\n            }\n            return value; // Return raw string - let nativeToScVal handle conversion with type hints\n          }\n          if (typeof value === 'number') {\n            return value.toString(); // Convert to string for consistency\n          }\n          throw new Error(`Numeric parameter expected for ${parameterType}, got ${typeof value}`);\n        }\n\n        return null; // Not a primitive type - let other parsers handle it\n    }\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, `Failed to parse primitive ${parameterType}:`, error);\n    throw error;\n  }\n}\n\n/**\n * Checks if the given parameter type is a primitive type that can be handled by this parser.\n *\n * @param parameterType - The Stellar parameter type\n * @returns True if this is a primitive type\n */\nexport function isPrimitiveType(parameterType: string): boolean {\n  return (\n    parameterType === 'Bool' ||\n    parameterType === 'Bytes' ||\n    parameterType === 'DataUrl' ||\n    parameterType === 'Address' ||\n    parameterType === 'ScString' ||\n    parameterType === 'ScSymbol' ||\n    /^BytesN<\\d+>$/.test(parameterType) ||\n    /^[UI](32|64|128|256)$/.test(parameterType)\n  );\n}\n","import { nativeToScVal, xdr } from '@stellar/stellar-sdk';\n\nimport { detectBytesEncoding, stringToBytes } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { convertStellarTypeToScValType } from '../../utils/formatting';\nimport {\n  convertEnumToScVal,\n  convertObjectToMap,\n  convertObjectToScVal,\n  convertTupleToScVal,\n  getScValFromArg,\n  getScValFromPrimitive,\n  isComplexObjectArray,\n  isEnumArgumentSet,\n  isMapArray,\n  isObjectWithTypedValues,\n  isPrimitiveArgumentSet,\n  isPrimitiveArray,\n  isPrimitiveValue,\n  isTupleArray,\n} from '../../utils/input-parsing';\nimport type {\n  SorobanArgumentValue,\n  SorobanComplexValue,\n  SorobanEnumValue,\n  SorobanMapEntry,\n} from './types';\n\n/**\n * Advanced ScVal generation from complex Soroban arguments.\n * Handles Maps, Enums, Tuples, and nested structures.\n *\n * @param args - Complex argument structure from advanced UI forms\n * @param scVals - Accumulator for generated ScVals (used for recursion)\n * @returns Array of ScVals ready for contract invocation\n */\nexport function getScValsFromArgs(\n  args: Record<string, SorobanComplexValue> | SorobanComplexValue[],\n  scVals: xdr.ScVal[] = []\n): xdr.ScVal[] {\n  // Handle array input (multiple arguments)\n  if (Array.isArray(args)) {\n    return args.map((arg) => {\n      if (typeof arg === 'object' && 'value' in arg && 'type' in arg) {\n        return getScValFromPrimitive(arg as SorobanArgumentValue);\n      }\n      return getScValFromArg(arg, []);\n    });\n  }\n\n  // Handle primitive case - all values have type and value\n  if (isPrimitiveArgumentSet(args)) {\n    const primitiveScVals = Object.values(args).map((v) => {\n      return getScValFromPrimitive(v as SorobanArgumentValue);\n    });\n\n    return primitiveScVals;\n  }\n\n  // Handle enum case - values have tag or enum properties\n  if (isEnumArgumentSet(args)) {\n    const enumScVals = Object.values(args).map((v) => {\n      return convertEnumToScVal(v as SorobanEnumValue, scVals);\n    });\n\n    return enumScVals;\n  }\n\n  // Handle complex cases (maps, objects, arrays)\n  for (const argKey in args) {\n    const argValue = args[argKey];\n\n    if (Array.isArray(argValue)) {\n      // Map case - array of key-value pair objects\n      if (isMapArray(argValue)) {\n        const { mapVal, mapType } = convertObjectToMap(argValue as SorobanMapEntry[]);\n        const mapScVal = nativeToScVal(mapVal, { type: mapType });\n        scVals.push(mapScVal);\n        continue;\n      }\n\n      // Vector case #1: array of complex objects or tuples\n      if (isComplexObjectArray(argValue)) {\n        const arrayScVals = argValue.map((v) => {\n          // Use proper type guards to ensure safe casting\n          if (typeof v === 'object' && v !== null && ('tag' in v || 'enum' in v)) {\n            return convertEnumToScVal(v as SorobanEnumValue, scVals);\n          }\n          if (\n            typeof v === 'object' &&\n            v !== null &&\n            !Array.isArray(v) &&\n            !('0' in v) &&\n            !('1' in v)\n          ) {\n            return convertObjectToScVal(v as Record<string, SorobanArgumentValue>);\n          }\n          // Fallback for other types\n          return nativeToScVal(v);\n        });\n\n        const tupleScValsVec = xdr.ScVal.scvVec(arrayScVals);\n        scVals.push(tupleScValsVec);\n        continue;\n      }\n\n      // Vector case #2: array of primitives (homogeneous type)\n      if (isPrimitiveArray(argValue)) {\n        // TypeScript now knows argValue is SorobanArgumentValue[] thanks to type predicate\n        const arrayScVals = argValue.reduce((acc: unknown[], v) => {\n          const primitive = v as unknown as SorobanArgumentValue;\n          if (primitive.type === 'bool') {\n            acc.push(primitive.value === 'true' ? true : false);\n          } else if (primitive.type === 'bytes') {\n            const encoding = detectBytesEncoding(primitive.value as string);\n            acc.push(stringToBytes(primitive.value as string, encoding));\n          } else {\n            acc.push(primitive.value);\n          }\n          return acc;\n        }, []);\n\n        const firstItem = argValue[0];\n        const scValType = convertStellarTypeToScValType(firstItem.type);\n        const typeHint = Array.isArray(scValType) ? scValType[0] : scValType;\n        const scVal = nativeToScVal(arrayScVals, {\n          type: typeHint,\n        });\n\n        scVals.push(scVal);\n        continue;\n      }\n\n      // Tuple case - mixed types in array\n      if (isTupleArray(argValue)) {\n        // TypeScript now knows argValue is SorobanArgumentValue[] thanks to type predicate\n        const tupleScValsVec = convertTupleToScVal(argValue);\n        scVals.push(tupleScValsVec);\n        continue;\n      }\n    }\n\n    // Object case - structured data\n    if (isObjectWithTypedValues(argValue)) {\n      const convertedObj = convertObjectToScVal(argValue as Record<string, SorobanArgumentValue>);\n      scVals.push(convertedObj);\n      continue;\n    }\n\n    // Single primitive value\n    if (isPrimitiveValue(argValue)) {\n      scVals.push(getScValFromPrimitive(argValue as SorobanArgumentValue));\n    }\n  }\n\n  return scVals;\n}\n","/**\n * Safe type parsing utilities for Stellar generic types.\n *\n * This module provides secure, performant alternatives to regex-based parsing\n * to prevent ReDoS (Regular Expression Denial of Service) attacks when processing\n * Stellar contract parameter types like Vec<T>, Map<K,V>, and Option<T>.\n *\n * Uses iterative parsing instead of vulnerable regex patterns with greedy quantifiers.\n */\n\n/**\n * Configuration constants for safe parsing\n */\nconst PARSING_LIMITS = {\n  /** Maximum depth for nested generic types to prevent stack overflow */\n  MAX_NESTING_DEPTH: 10,\n  /** Maximum string length for type parsing to prevent DoS */\n  MAX_TYPE_STRING_LENGTH: 1000,\n} as const;\n\n/**\n * Result type for type extraction operations\n */\ntype ExtractionResult<T> = T | null;\n\n/**\n * Safely extracts the inner type from a Stellar Vec type.\n *\n * @param parameterType - The parameter type (e.g., 'Vec<U32>', 'Vec<Vec<Address>>')\n * @returns The inner type (e.g., 'U32', 'Vec<Address>') or null if not a Vec type\n *\n * @example\n * ```typescript\n * extractVecElementType('Vec<U32>') // → 'U32'\n * extractVecElementType('Vec<Vec<Address>>') // → 'Vec<Address>'\n * extractVecElementType('U32') // → null\n * ```\n */\nexport function extractVecElementType(parameterType: string): ExtractionResult<string> {\n  if (!isValidTypeString(parameterType) || !parameterType.startsWith('Vec<')) {\n    return null;\n  }\n\n  return extractGenericInnerType(parameterType, 'Vec');\n}\n\n/**\n * Safely extracts the key and value types from a Stellar Map type.\n *\n * @param parameterType - The parameter type (e.g., 'Map<Symbol, Bytes>', 'Map<U32, Vec<Address>>')\n * @returns An object with keyType and valueType, or null if not a Map type\n *\n * @example\n * ```typescript\n * extractMapTypes('Map<U32, Address>') // → { keyType: 'U32', valueType: 'Address' }\n * extractMapTypes('Map<Symbol, Vec<U32>>') // → { keyType: 'Symbol', valueType: 'Vec<U32>' }\n * extractMapTypes('U32') // → null\n * ```\n */\nexport function extractMapTypes(\n  parameterType: string\n): ExtractionResult<{ keyType: string; valueType: string }> {\n  if (!isValidTypeString(parameterType) || !parameterType.startsWith('Map<')) {\n    return null;\n  }\n\n  const innerContent = extractGenericInnerType(parameterType, 'Map');\n  if (!innerContent) {\n    return null;\n  }\n\n  // Find the top-level comma that separates key and value types\n  const commaIndex = findTopLevelComma(innerContent);\n  if (commaIndex === -1) {\n    return null;\n  }\n\n  const keyType = innerContent.slice(0, commaIndex).trim();\n  const valueType = innerContent.slice(commaIndex + 1).trim();\n\n  // Validate both types are non-empty and don't contain invalid characters\n  if (!keyType || !valueType || hasInvalidCharacters(keyType) || hasInvalidCharacters(valueType)) {\n    return null;\n  }\n\n  return { keyType, valueType };\n}\n\n/**\n * Safely extracts the inner type from a Stellar Option type.\n *\n * @param parameterType - The parameter type (e.g., 'Option<U32>', 'Option<Vec<Address>>')\n * @returns The inner type or null if not an Option type\n *\n * @example\n * ```typescript\n * extractOptionElementType('Option<U32>') // → 'U32'\n * extractOptionElementType('Option<Vec<Address>>') // → 'Vec<Address>'\n * extractOptionElementType('U32') // → null\n * ```\n */\nexport function extractOptionElementType(parameterType: string): ExtractionResult<string> {\n  if (!isValidTypeString(parameterType) || !parameterType.startsWith('Option<')) {\n    return null;\n  }\n\n  return extractGenericInnerType(parameterType, 'Option');\n}\n\n/**\n * Generic function to extract inner content from generic types.\n *\n * @param parameterType - The full parameter type\n * @param genericName - The generic type name (e.g., 'Vec', 'Map', 'Option')\n * @returns The inner content or null if extraction fails\n */\nfunction extractGenericInnerType(\n  parameterType: string,\n  genericName: string\n): ExtractionResult<string> {\n  const prefix = `${genericName}<`;\n\n  if (!parameterType.startsWith(prefix) || !parameterType.endsWith('>')) {\n    return null;\n  }\n\n  const innerContent = parameterType.slice(prefix.length, -1);\n\n  if (!innerContent || hasInvalidCharacters(innerContent)) {\n    return null;\n  }\n\n  // Validate that brackets are properly balanced\n  if (!isBalancedBrackets(innerContent)) {\n    return null;\n  }\n\n  return innerContent.trim();\n}\n\n/**\n * Finds the first top-level comma in a type string, ignoring commas inside nested brackets.\n *\n * @param content - The content to search in\n * @returns The index of the top-level comma, or -1 if not found\n *\n * @example\n * ```typescript\n * findTopLevelComma('U32, Address') // → 3\n * findTopLevelComma('Vec<U32, U64>, Address') // → 13 (after the first >)\n * ```\n */\nfunction findTopLevelComma(content: string): number {\n  let angleLevel = 0;\n\n  for (let i = 0; i < content.length; i++) {\n    const char = content[i];\n\n    switch (char) {\n      case '<':\n        angleLevel++;\n        break;\n      case '>':\n        angleLevel--;\n        if (angleLevel < 0) return -1; // Malformed input\n        break;\n      case ',':\n        if (angleLevel === 0) {\n          return i;\n        }\n        break;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Checks if brackets are properly balanced in a string and enforces nesting depth limits.\n *\n * @param content - The content to validate\n * @returns True if brackets are balanced and within depth limits, false otherwise\n */\nfunction isBalancedBrackets(content: string): boolean {\n  let angleLevel = 0;\n  let maxNesting = 0;\n\n  for (const char of content) {\n    switch (char) {\n      case '<':\n        angleLevel++;\n        maxNesting = Math.max(maxNesting, angleLevel);\n        // Enforce nesting depth limit\n        if (maxNesting > PARSING_LIMITS.MAX_NESTING_DEPTH) {\n          return false;\n        }\n        break;\n      case '>':\n        angleLevel--;\n        if (angleLevel < 0) return false;\n        break;\n    }\n  }\n\n  return angleLevel === 0;\n}\n\n/**\n * Validates that a type string is safe to process.\n *\n * @param typeString - The type string to validate\n * @returns True if the type string is safe to process\n */\nexport function isValidTypeString(typeString: string): boolean {\n  if (!typeString || typeof typeString !== 'string') {\n    return false;\n  }\n\n  // Length check to prevent DoS\n  if (typeString.length > PARSING_LIMITS.MAX_TYPE_STRING_LENGTH) {\n    return false;\n  }\n\n  // Check for invalid characters\n  if (hasInvalidCharacters(typeString)) {\n    return false;\n  }\n\n  // Validate bracket balance\n  return isBalancedBrackets(typeString);\n}\n\n/**\n * Checks if a string contains invalid characters for type names.\n *\n * @param str - The string to check\n * @returns True if the string contains invalid characters\n */\nfunction hasInvalidCharacters(str: string): boolean {\n  // No control characters or line breaks\n  if (/[\\x00-\\x1F\\x7F\\r\\n]/.test(str)) {\n    return true;\n  }\n\n  // Only allow alphanumeric, angle brackets, commas, underscores, and spaces\n  // Note: Parentheses are NOT allowed in Stellar type strings\n  return !/^[A-Za-z0-9<>,\\s_]+$/.test(str);\n}\n","import {\n  extractOptionElementType,\n  extractVecElementType,\n  isValidTypeString,\n} from './safe-type-parser';\n\n/**\n * Custom JSON stringifier that handles BigInt values by converting them to strings.\n * @param value The value to stringify.\n * @param space Adds indentation, white space, and line break characters to the return-value JSON text for readability.\n * @returns A JSON string representing the given value.\n */\nexport function stringifyWithBigInt(value: unknown, space?: number | string): string {\n  const replacer = (_key: string, val: unknown) => {\n    // Check if the value is a BigInt\n    if (typeof val === 'bigint') {\n      // Convert BigInt to string\n      return val.toString();\n    }\n    // Return the value unchanged for other types\n    return val;\n  };\n\n  return JSON.stringify(value, replacer, space);\n}\n\n/**\n * Check if a value is a serializable plain object suitable for blockchain output display.\n * Excludes arrays, dates, typed arrays, and objects with custom constructors.\n * @param value The value to check\n * @returns True if the value is a plain object that can be safely serialized\n */\nexport function isSerializableObject(value: unknown): boolean {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    !Array.isArray(value) &&\n    !(value instanceof Date) &&\n    !(value instanceof Uint8Array) &&\n    value.constructor === Object\n  );\n}\n\n/**\n * Converts Stellar spec types to ScVal type hints.\n * This mapping is used with nativeToScVal to ensure proper type conversion.\n *\n * @param stellarType - The Stellar parameter type (e.g., 'U32', 'Address', 'Bool')\n * @returns The corresponding ScVal type hint (e.g., 'u32', 'address', 'bool')\n *\n * @example\n * ```typescript\n * nativeToScVal(\"0\", { type: convertStellarTypeToScValType(\"U32\") }) // → ScU32\n * nativeToScVal(\"GDQP2...\", { type: convertStellarTypeToScValType(\"Address\") }) // → ScAddress\n * ```\n */\nexport function convertStellarTypeToScValType(stellarType: string): string | string[] {\n  // Input validation\n  if (!isValidTypeString(stellarType)) {\n    return stellarType.toLowerCase();\n  }\n\n  // Handle Vec types - return array type hint\n  if (stellarType.startsWith('Vec<')) {\n    const innerType = extractVecElementType(stellarType);\n    if (innerType) {\n      const innerScValType = convertStellarTypeToScValType(innerType);\n      // For Vec types, nativeToScVal expects the inner type as string\n      return Array.isArray(innerScValType) ? innerScValType[0] : innerScValType;\n    }\n  }\n\n  // Handle Map types - return undefined to signal special handling needed\n  if (stellarType.startsWith('Map<')) {\n    // Map types need special handling - can't use a simple type hint\n    return 'map-special';\n  }\n\n  // Handle Option types - return the inner type\n  if (stellarType.startsWith('Option<')) {\n    const innerType = extractOptionElementType(stellarType);\n    if (innerType) {\n      return convertStellarTypeToScValType(innerType);\n    }\n  }\n\n  switch (stellarType) {\n    case 'Address':\n      return 'address';\n    case 'U32':\n      return 'u32';\n    case 'U64':\n      return 'u64';\n    case 'U128':\n      return 'u128';\n    case 'U256':\n      return 'u256';\n    case 'I32':\n      return 'i32';\n    case 'I64':\n      return 'i64';\n    case 'I128':\n      return 'i128';\n    case 'I256':\n      return 'i256';\n    case 'ScString':\n      return 'string';\n    case 'ScSymbol':\n      return 'symbol';\n    case 'Bool':\n      return 'bool';\n    case 'Bytes':\n      return 'bytes';\n    case 'DataUrl':\n      return 'bytes';\n    default:\n      return stellarType.toLowerCase();\n  }\n}\n","import { nativeToScVal, xdr } from '@stellar/stellar-sdk';\n\nimport {\n  detectBytesEncoding,\n  logger,\n  stringToBytes,\n} from '@openzeppelin/contracts-ui-builder-utils';\n\n// Import types for internal use\nimport type {\n  SorobanArgumentValue,\n  SorobanComplexValue,\n  SorobanEnumValue,\n  SorobanMapEntry,\n} from '../transform/input-parser';\nimport { convertStellarTypeToScValType } from './formatting';\n\nconst SYSTEM_LOG_TAG = 'StellarInputParsingUtils';\n\n// Re-export types for convenience\nexport type {\n  SorobanArgumentValue,\n  SorobanEnumValue,\n  SorobanMapEntry,\n  SorobanComplexValue,\n} from '../transform/input-parser';\n\n// ================================\n// TYPE GUARDS AND UTILITIES\n// ================================\n\nexport function isPrimitiveArgumentSet(args: Record<string, SorobanComplexValue>): boolean {\n  return Object.values(args).every(\n    (v) => typeof v === 'object' && v !== null && 'type' in v && 'value' in v\n  );\n}\n\nexport function isEnumArgumentSet(args: Record<string, SorobanComplexValue>): boolean {\n  return Object.values(args).some(\n    (v) => typeof v === 'object' && v !== null && ('tag' in v || 'enum' in v)\n  );\n}\n\nexport function isMapArray(argValue: unknown[]): boolean {\n  try {\n    return (\n      Array.isArray(argValue) &&\n      argValue.every((obj: unknown) => {\n        if (typeof obj !== 'object' || obj === null) return false;\n\n        const keys = Object.keys(obj);\n        if (keys.length !== 2 || !keys.includes('0') || !keys.includes('1')) {\n          return false;\n        }\n\n        const keyEntry = (obj as Record<string, unknown>)['0'];\n        return (\n          typeof keyEntry === 'object' &&\n          keyEntry !== null &&\n          'value' in keyEntry &&\n          'type' in keyEntry\n        );\n      })\n    );\n  } catch {\n    return false;\n  }\n}\n\nexport function isComplexObjectArray(argValue: unknown[]): boolean {\n  return argValue.some(\n    (v) =>\n      typeof v === 'object' &&\n      v !== null &&\n      typeof Object.values(v as Record<string, unknown>)[0] === 'object'\n  );\n}\n\nexport function isPrimitiveArray(argValue: unknown[]): argValue is SorobanArgumentValue[] {\n  if (argValue.length === 0) return false;\n\n  // Check if all items are SorobanArgumentValue (not SorobanMapEntry)\n  const allArePrimitives = argValue.every(\n    (v) =>\n      typeof v === 'object' &&\n      v !== null &&\n      'value' in v &&\n      'type' in v &&\n      !('0' in v) && // Not a map entry\n      !('1' in v) // Not a map entry\n  );\n\n  if (!allArePrimitives) return false;\n\n  const firstItem = argValue[0] as SorobanArgumentValue;\n  return argValue.every((v) => {\n    const item = v as SorobanArgumentValue;\n    return item.type === firstItem.type;\n  });\n}\n\nexport function isTupleArray(argValue: unknown[]): argValue is SorobanArgumentValue[] {\n  return argValue.every(\n    (v: unknown) =>\n      typeof v === 'object' &&\n      v !== null &&\n      'type' in v &&\n      'value' in v &&\n      !('0' in v) && // Not a map entry\n      !('1' in v) // Not a map entry\n  );\n}\n\nexport function isObjectWithTypedValues(argValue: SorobanComplexValue): boolean {\n  return (\n    typeof argValue === 'object' &&\n    argValue !== null &&\n    !Array.isArray(argValue) &&\n    Object.values(argValue).every(\n      (v: unknown) => typeof v === 'object' && v !== null && 'type' in v && 'value' in v\n    )\n  );\n}\n\nexport function isPrimitiveValue(argValue: SorobanComplexValue): boolean {\n  return (\n    typeof argValue === 'object' && argValue !== null && 'type' in argValue && 'value' in argValue\n  );\n}\n\n// ================================\n// SCVAL CONVERSION UTILITIES\n// ================================\n\nexport function getScValFromPrimitive(v: SorobanArgumentValue): xdr.ScVal {\n  try {\n    if (v.type === 'bool') {\n      const boolValue = typeof v.value === 'boolean' ? v.value : v.value === 'true';\n      return nativeToScVal(boolValue);\n    }\n\n    if (v.type === 'bytes') {\n      const stringValue = v.value as string;\n      const encoding = detectBytesEncoding(stringValue);\n      return nativeToScVal(stringToBytes(stringValue, encoding));\n    }\n\n    // Use our improved type conversion utility\n    const typeHint = convertStellarTypeToScValType(v.type);\n    return nativeToScVal(v.value, { type: typeHint });\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, `Failed to convert primitive ${v.type}:`, error);\n    throw new Error(`Failed to convert primitive value of type ${v.type}: ${error}`);\n  }\n}\n\nexport function getScValFromArg(arg: SorobanComplexValue, scVals: xdr.ScVal[]): xdr.ScVal {\n  // Handle array of arrays with numeric objects (nested structures)\n  if (Array.isArray(arg) && arg.length > 0) {\n    const arrayScVals = arg.map((subArray) => {\n      if (Array.isArray(subArray) && isMapArray(subArray)) {\n        const { mapVal, mapType } = convertObjectToMap(subArray as SorobanMapEntry[]);\n\n        // Better map key-value pair handling\n        const items = Object.keys(mapVal);\n        if (items.length > 1) {\n          items.forEach((item) => {\n            const mapScVal = nativeToScVal(mapVal[item], {\n              type: mapType[item],\n            });\n            scVals.push(mapScVal);\n          });\n        }\n\n        return nativeToScVal(mapVal, { type: mapType });\n      }\n      return getScValFromArg(subArray as SorobanComplexValue, scVals);\n    });\n\n    return xdr.ScVal.scvVec(arrayScVals);\n  }\n\n  // For single values, handle based on type\n  if (typeof arg === 'object' && arg !== null && 'type' in arg && 'value' in arg) {\n    return getScValFromPrimitive(arg as SorobanArgumentValue);\n  }\n\n  // Fallback to nativeToScVal for simple values\n  return nativeToScVal(arg);\n}\n\nexport function convertEnumToScVal(obj: SorobanEnumValue, scVals?: xdr.ScVal[]): xdr.ScVal {\n  try {\n    // Integer variant - has enum property (keep as-is for integer enums)\n    if (obj.enum !== undefined) {\n      const enumScVal = nativeToScVal(obj.enum, { type: 'u32' });\n      return enumScVal;\n    }\n\n    if (!obj.tag) {\n      throw new Error('Enum object must have either \"tag\" or \"enum\" property');\n    }\n\n    // Use Vector format with Symbol for variant names (as per Soroban documentation)\n    // Unit variants: ScVec containing single ScSymbol\n    // Tuple variants: ScVec with ScSymbol + payload elements\n    const tagSymbol = nativeToScVal(obj.tag, { type: 'symbol' });\n\n    if (!obj.values || obj.values.length === 0) {\n      // Unit variant - ScVec containing single ScSymbol\n      const unitVec = xdr.ScVal.scvVec([tagSymbol]);\n      return unitVec;\n    }\n\n    // Tuple variant - ScVec with ScSymbol + payload elements\n    const valuesVal = obj.values.map((v) => getScValFromArg(v, scVals || []));\n    const tupleVec = xdr.ScVal.scvVec([tagSymbol, ...valuesVal]);\n    return tupleVec;\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, 'Failed to convert enum:', error);\n    throw new Error(`Failed to convert enum: ${error}`);\n  }\n}\n\nexport function convertValuesToScVals(\n  values: SorobanArgumentValue[],\n  scVals: xdr.ScVal[]\n): xdr.ScVal[] {\n  return values.map((v) => getScValFromArg(v, scVals));\n}\n\nexport function convertObjectToScVal(obj: Record<string, SorobanArgumentValue>): xdr.ScVal {\n  try {\n    const convertedValue: Record<string, unknown> = {};\n    const typeHints: Record<string, string | string[]> = {};\n\n    // Process each field in the object\n    for (const key in obj) {\n      const field = obj[key];\n\n      if (field.type === 'bool') {\n        convertedValue[key] =\n          typeof field.value === 'boolean' ? field.value : field.value === 'true';\n        typeHints[key] = ['symbol']; // Key is always symbol, value type varies\n      } else {\n        convertedValue[key] = field.value;\n        const fieldTypeHint = convertStellarTypeToScValType(field.type);\n        typeHints[key] = [\n          'symbol',\n          ...(Array.isArray(fieldTypeHint) ? fieldTypeHint : [fieldTypeHint]),\n        ];\n      }\n    }\n\n    return nativeToScVal(convertedValue, { type: typeHints });\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, 'Failed to convert object:', error);\n    throw new Error(`Failed to convert object to ScVal: ${error}`);\n  }\n}\n\nexport function convertObjectToMap(mapArray: SorobanMapEntry[]): {\n  mapVal: Record<string, unknown>;\n  mapType: Record<string, string | string[]>;\n} {\n  try {\n    const mapVal = mapArray.reduce((acc: Record<string, unknown>, pair) => {\n      const key = pair['0'].value as string;\n\n      if (Array.isArray(pair['1'])) {\n        // Handle nested array values\n        const valueScVal = getScValFromArg(pair['1'], []);\n        acc[key] = valueScVal;\n      } else {\n        // Handle primitive values\n        const value = pair['1'].value;\n        acc[key] = pair['1'].type === 'bool' ? value === 'true' : value;\n      }\n      return acc;\n    }, {});\n\n    const mapType = mapArray.reduce((acc: Record<string, string[]>, pair) => {\n      const key = pair['0'].value as string;\n      const keyTypeHint = convertStellarTypeToScValType(pair['0'].type);\n      const valueTypeHint = convertStellarTypeToScValType(pair['1'].type);\n      acc[key] = [\n        ...(Array.isArray(keyTypeHint) ? keyTypeHint : [keyTypeHint]),\n        ...(Array.isArray(valueTypeHint) ? valueTypeHint : [valueTypeHint]),\n      ];\n      return acc;\n    }, {});\n\n    return { mapVal, mapType };\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, 'Failed to convert map:', error);\n    throw new Error(`Failed to convert map: ${error}`);\n  }\n}\n\nexport function convertTupleToScVal(tupleArray: SorobanArgumentValue[]): xdr.ScVal {\n  try {\n    const tupleScVals = tupleArray.map((v) => {\n      if (v.type === 'bool') {\n        const boolValue = typeof v.value === 'boolean' ? v.value : v.value === 'true';\n        return nativeToScVal(boolValue);\n      }\n\n      if (v.type === 'bytes') {\n        const encoding = detectBytesEncoding(v.value as string);\n        return nativeToScVal(stringToBytes(v.value as string, encoding));\n      }\n\n      const typeHint = convertStellarTypeToScValType(v.type);\n      return nativeToScVal(v.value, { type: typeHint });\n    });\n\n    // JS SDK's nativeToScVal doesn't support mixed-type arrays, so use xdr.ScVal.scvVec\n    return xdr.ScVal.scvVec(tupleScVals);\n  } catch (error) {\n    logger.error(SYSTEM_LOG_TAG, 'Failed to convert tuple:', error);\n    throw new Error(`Failed to convert tuple: ${error}`);\n  }\n}\n","import { nativeToScVal, xdr } from '@stellar/stellar-sdk';\n\nimport { isEnumValue, type FunctionParameter } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { convertStellarTypeToScValType } from '../../utils/formatting';\nimport { convertEnumToScVal } from '../../utils/input-parsing';\nimport { parseGenericType } from './generic-parser';\nimport { parsePrimitive } from './primitive-parser';\nimport { convertStructToScVal, isStructType } from './struct-parser';\nimport type { SorobanEnumValue } from './types';\n\n/**\n * Converts a value to ScVal with comprehensive generic type support.\n * This should be used in the transaction execution instead of calling nativeToScVal directly.\n *\n * @param value - The parsed value from parseStellarInput\n * @param parameterType - The Stellar parameter type\n * @param paramSchema - Optional parameter schema with struct field definitions\n * @param parseInnerValue - Function to recursively parse inner values (defaults to parseStellarInput)\n * @returns ScVal ready for contract calls\n */\nexport function valueToScVal(\n  value: unknown,\n  parameterType: string,\n  paramSchema?: FunctionParameter,\n  parseInnerValue?: (val: unknown, type: string) => unknown\n): xdr.ScVal {\n  // Default parseInnerValue to a basic pass-through function if not provided\n  // This handles the common case where callers don't need recursive parsing\n  const parseValue = parseInnerValue || ((val: unknown) => val);\n  const genericInfo = parseGenericType(parameterType);\n\n  if (!genericInfo) {\n    // Check if this is an enum object (has 'tag' or 'enum' property)\n    if (isEnumValue(value) || (typeof value === 'object' && value !== null && 'enum' in value)) {\n      return convertEnumToScVal(value as SorobanEnumValue);\n    }\n\n    // Check if this is a struct type\n    if (isStructType(value, parameterType)) {\n      return convertStructToScVal(\n        value as Record<string, unknown>,\n        parameterType,\n        paramSchema,\n        parseValue\n      );\n    }\n\n    // Non-generic types - use existing logic\n    if (parameterType === 'Bool' || parameterType === 'Bytes') {\n      return nativeToScVal(value);\n    }\n    const scValType = convertStellarTypeToScValType(parameterType);\n    const typeHint = Array.isArray(scValType) ? scValType[0] : scValType;\n    return nativeToScVal(value, { type: typeHint });\n  }\n\n  const { baseType, parameters } = genericInfo;\n\n  switch (baseType) {\n    case 'Vec': {\n      // Handle Vec<T> types\n      const innerType = parameters[0];\n      if (Array.isArray(value)) {\n        const convertedElements = value.map((element) => valueToScVal(element, innerType));\n        return nativeToScVal(convertedElements);\n      }\n      return nativeToScVal(value);\n    }\n\n    case 'Map': {\n      // Handle Map<K,V> types in Stellar SDK format\n      if (Array.isArray(value)) {\n        // Expect Stellar SDK format: [{ 0: {value, type}, 1: {value, type} }, ...]\n        const convertedValue: Record<string, unknown> = {};\n        const typeHints: Record<string, string[]> = {};\n\n        value.forEach(\n          (entry: { 0: { value: string; type: string }; 1: { value: string; type: string } }) => {\n            if (\n              typeof entry !== 'object' ||\n              entry === null ||\n              !entry[0] ||\n              !entry[1] ||\n              typeof entry[0].value === 'undefined' ||\n              typeof entry[1].value === 'undefined'\n            ) {\n              throw new Error('Invalid Stellar SDK map format in valueToScVal');\n            }\n\n            // Process key and value through parsePrimitive for bytes conversion\n            // This ensures bytes strings are converted to Uint8Array before nativeToScVal\n            let processedKey: unknown = entry[0].value;\n            let processedValue: unknown = entry[1].value;\n\n            // Handle bytes conversion for keys\n            const keyPrimitive = parsePrimitive(entry[0].value, entry[0].type);\n            if (keyPrimitive !== null) {\n              processedKey = keyPrimitive;\n            }\n\n            // Handle bytes conversion for values\n            const valuePrimitive = parsePrimitive(entry[1].value, entry[1].type);\n            if (valuePrimitive !== null) {\n              processedValue = valuePrimitive;\n            }\n\n            // Use the processed key as the object key (convert to string if needed)\n            const keyString =\n              typeof processedKey === 'string' ? processedKey : String(processedKey);\n            convertedValue[keyString] = processedValue;\n\n            const keyScValType = convertStellarTypeToScValType(entry[0].type);\n            const valueScValType = convertStellarTypeToScValType(entry[1].type);\n            typeHints[keyString] = [\n              Array.isArray(keyScValType) ? keyScValType[0] : keyScValType,\n              Array.isArray(valueScValType) ? valueScValType[0] : valueScValType,\n            ];\n          }\n        );\n\n        return nativeToScVal(convertedValue, { type: typeHints });\n      }\n\n      return nativeToScVal(value);\n    }\n\n    case 'Option': {\n      // Handle Option<T> types\n      const innerType = parameters[0];\n\n      if (value === null || value === undefined) {\n        return nativeToScVal(null); // None variant\n      } else {\n        // Some variant - convert the inner value\n        return valueToScVal(value, innerType);\n      }\n    }\n\n    case 'Result': {\n      // Handle Result<T,E> types\n      const okType = parameters[0];\n      const errType = parameters[1];\n\n      // Result types typically come as {ok: value} or {err: error}\n      if (typeof value === 'object' && value !== null) {\n        const resultObj = value as Record<string, unknown>;\n        if ('ok' in resultObj) {\n          const okScVal = valueToScVal(resultObj.ok, okType);\n          return nativeToScVal({ ok: okScVal });\n        } else if ('err' in resultObj) {\n          const errScVal = valueToScVal(resultObj.err, errType);\n          return nativeToScVal({ err: errScVal });\n        }\n      }\n      return nativeToScVal(value);\n    }\n\n    default: {\n      // Unknown generic type - fallback to basic conversion\n      const scValType = convertStellarTypeToScValType(parameterType);\n      const typeHint = Array.isArray(scValType) ? scValType[0] : scValType;\n      return nativeToScVal(value, { type: typeHint });\n    }\n  }\n}\n","import { nativeToScVal, xdr } from '@stellar/stellar-sdk';\n\nimport type { FunctionParameter } from '@openzeppelin/contracts-ui-builder-types';\nimport { isPlainObject, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { convertStellarTypeToScValType } from '../../utils/formatting';\nimport { parseGenericType } from './generic-parser';\n\nconst SYSTEM_LOG_TAG = 'StructParser';\n\n/**\n * Determines if a field value needs parsing through parseStellarInput.\n * Returns false for already-processed values (like Uint8Array for bytes).\n */\nfunction needsParsing(value: unknown, fieldType: string): boolean {\n  // Skip parsing for already-processed Uint8Array values for bytes types\n  if ((fieldType === 'Bytes' || fieldType.startsWith('BytesN<')) && value instanceof Uint8Array) {\n    return false;\n  }\n\n  // For Vec types, check if it's already an array of properly typed values\n  if (fieldType.startsWith('Vec<')) {\n    if (!Array.isArray(value)) {\n      return true; // Needs parsing if not an array\n    }\n\n    // Extract inner type to check array elements\n    const innerTypeMatch = fieldType.match(/Vec<(.+)>$/);\n    if (innerTypeMatch) {\n      // If all elements are already properly typed, skip parsing\n      // For now, let's always parse Vec types to ensure validation\n      return true;\n    }\n  }\n\n  // For Map types, always parse to convert UI MapEntry format to Stellar SDK format\n  if (fieldType.startsWith('Map<')) {\n    return true; // Map data needs conversion from UI format to Stellar SDK format\n  }\n\n  // For primitive types, parse if value is string (form input)\n  if (typeof value === 'string') {\n    return true;\n  }\n\n  // For complex objects, they might need recursive parsing\n  if (isPlainObject(value)) {\n    return true;\n  }\n\n  // For other cases, skip parsing (assume already processed)\n  return false;\n}\n\n/**\n * Converts a struct object to ScVal using Laboratory pattern with schema-based type resolution.\n *\n * @param structObj - The plain object representing the struct\n * @param parameterType - The Stellar parameter type (for error messages)\n * @param paramSchema - Parameter schema with struct field definitions (required)\n * @param parseInnerValue - Function to recursively parse inner values\n * @returns ScVal ready for contract calls\n * @throws Error if schema information is missing for any field\n */\nexport function convertStructToScVal(\n  structObj: Record<string, unknown>,\n  parameterType: string,\n  paramSchema: FunctionParameter | undefined,\n  parseInnerValue: (val: unknown, type: string) => unknown\n): xdr.ScVal {\n  // Laboratory-style struct conversion with proper type hint handling\n\n  // Struct conversion using Laboratory pattern with schema-based type resolution\n  // See: laboratory/src/helpers/sorobanUtils.ts convertObjectToScVal\n  const convertedValue: Record<string, unknown> = {};\n  const typeHints: Record<string, unknown> = {};\n\n  // For structs with Vec/Map fields, ensure proper parsing but use nativeToScVal approach\n\n  // Laboratory pattern: preserve raw values, provide type hints as arrays\n  // Type hints format: [keyType, valueType] where keyType is always \"symbol\"\n  for (const [fieldName, fieldValue] of Object.entries(structObj)) {\n    // Use schema information for accurate type mapping\n    let fieldType: string | undefined;\n    if (paramSchema?.components) {\n      const fieldSchema = paramSchema.components.find(\n        (comp: FunctionParameter) => comp.name === fieldName\n      );\n      fieldType = fieldSchema?.type;\n    }\n\n    if (fieldType) {\n      // Parse the field value using the correct type to ensure validation and conversion\n      // Only parse if the value appears to be raw form input (strings/primitives)\n      // Skip parsing for already-processed values (like Uint8Array for bytes)\n      let parsedValue: unknown;\n\n      if (needsParsing(fieldValue, fieldType)) {\n        parsedValue = parseInnerValue(fieldValue, fieldType);\n      } else {\n        parsedValue = fieldValue;\n      }\n\n      // Handle Map fields specially - convert from SDK format to plain object with type hints\n      if (fieldType.startsWith('Map<') && Array.isArray(parsedValue)) {\n        // Extract key and value types\n        const mapTypeMatch = fieldType.match(/Map<(.+),\\s*(.+)>$/);\n        const mapKeyType = mapTypeMatch ? mapTypeMatch[1] : 'ScSymbol';\n        const mapValueType = mapTypeMatch ? mapTypeMatch[2] : 'Bytes';\n\n        // parsedValue is in Stellar SDK format: [{0: {value, type}, 1: {value, type}}, ...]\n        // Convert to plain object for nativeToScVal\n        const mapObject: Record<string, unknown> = {};\n        const mapTypeHints: Record<string, string[]> = {};\n\n        (\n          parsedValue as Array<{\n            0: { value: unknown; type: string };\n            1: { value: unknown; type: string };\n          }>\n        ).forEach((entry) => {\n          // Parse the key and value\n          const processedKey = parseInnerValue(entry[0].value, entry[0].type || mapKeyType);\n          const processedVal = parseInnerValue(entry[1].value, entry[1].type || mapValueType);\n\n          const keyString = typeof processedKey === 'string' ? processedKey : String(processedKey);\n          mapObject[keyString] = processedVal;\n\n          // Set type hints for each entry using the actual types\n          const keyScValType = convertStellarTypeToScValType(entry[0].type || mapKeyType);\n          const valueScValType = convertStellarTypeToScValType(entry[1].type || mapValueType);\n\n          // Laboratory pattern: [keyType, valueType] for each map entry\n          mapTypeHints[keyString] = [\n            Array.isArray(keyScValType)\n              ? keyScValType[0]\n              : keyScValType === 'map-special'\n                ? 'symbol'\n                : keyScValType,\n            Array.isArray(valueScValType)\n              ? valueScValType[0]\n              : valueScValType === 'map-special'\n                ? 'bytes'\n                : valueScValType,\n          ];\n        });\n\n        convertedValue[fieldName] = mapObject;\n        // Provide nested type hints for Map field (Laboratory pattern)\n        typeHints[fieldName] = ['symbol', mapTypeHints];\n      } else {\n        convertedValue[fieldName] = parsedValue;\n\n        // Use exact type from schema for non-Map fields\n        const scValType = convertStellarTypeToScValType(fieldType);\n        if (scValType !== 'map-special') {\n          typeHints[fieldName] = ['symbol', Array.isArray(scValType) ? scValType[0] : scValType];\n        }\n      }\n    } else {\n      // Schema is required for struct field type resolution\n      throw new Error(\n        `Missing schema information for struct field \"${fieldName}\" in struct type \"${parameterType}\". ` +\n          `Schema-based type resolution is required for accurate ScVal conversion.`\n      );\n    }\n  }\n\n  logger.debug(SYSTEM_LOG_TAG, 'convertStructToScVal final values:', {\n    parameterType,\n    convertedValue,\n    typeHints,\n  });\n\n  const scVal = nativeToScVal(convertedValue, { type: typeHints });\n  logger.debug(SYSTEM_LOG_TAG, 'convertStructToScVal generated ScVal:', {\n    parameterType,\n    scValType: scVal.switch().name,\n    scValValue: scVal.value(),\n  });\n\n  return scVal;\n}\n\n/**\n * Checks if the given value and type represent a struct that can be handled by this parser.\n *\n * @param value - The value to check\n * @param parameterType - The Stellar parameter type\n * @returns True if this is a struct type\n */\nexport function isStructType(value: unknown, parameterType: string): boolean {\n  // Check if this is a struct type (object that doesn't match enum pattern or generic pattern)\n  // Exclude special object types like Uint8Array, Date, etc.\n  if (!isPlainObject(value)) {\n    return false;\n  }\n\n  // Skip if it's a generic type\n  const genericInfo = parseGenericType(parameterType);\n  if (genericInfo) {\n    return false;\n  }\n\n  // Skip if it looks like an enum (has 'tag', 'enum', or 'values' properties)\n  const obj = value as Record<string, unknown>;\n  if ('tag' in obj || 'enum' in obj || 'values' in obj) {\n    return false;\n  }\n\n  // Check if it's a plain object with simple constructor\n  return (\n    !(value instanceof Uint8Array) &&\n    !(value instanceof Date) &&\n    typeof value.constructor === 'function' &&\n    value.constructor === Object\n  );\n}\n","import { scValToNative, xdr } from '@stellar/stellar-sdk';\n\nimport type { ContractFunction } from '@openzeppelin/contracts-ui-builder-types';\nimport { bytesToHex, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { isSerializableObject, stringifyWithBigInt } from '../utils';\n\n/**\n * Formats the result of a Stellar view function call into a user-friendly string.\n *\n * @param result The result value (can be ScVal, native JS value, or other types).\n * @param functionDetails The contract function details.\n * @returns A string representation suitable for display.\n */\nexport function formatStellarFunctionResult(\n  result: unknown,\n  functionDetails: ContractFunction\n): string {\n  if (!functionDetails.outputs || !Array.isArray(functionDetails.outputs)) {\n    logger.warn(\n      'formatStellarFunctionResult',\n      `Output definition missing or invalid for function ${functionDetails.name}.`\n    );\n    return '[Error: Output definition missing]';\n  }\n\n  try {\n    let valueToFormat: unknown;\n\n    // Handle null/undefined values\n    if (result === null || result === undefined) {\n      return '(null)';\n    }\n\n    // Check if result is an ScVal and convert to native JS value\n    if (isScVal(result)) {\n      try {\n        // Special handling for void ScVal\n        const scVal = result as xdr.ScVal;\n        if (scVal.switch().name === 'scvVoid') {\n          return '(void)';\n        }\n        valueToFormat = scValToNative(scVal);\n\n        // Convert Buffer to Uint8Array for cross-platform compatibility\n        // scValToNative may return Buffer objects in some environments\n        if (\n          valueToFormat &&\n          typeof valueToFormat === 'object' &&\n          'constructor' in valueToFormat &&\n          valueToFormat.constructor?.name === 'Buffer'\n        ) {\n          valueToFormat = new Uint8Array(valueToFormat as ArrayLike<number>);\n        }\n      } catch (error) {\n        logger.error('formatStellarFunctionResult', 'Failed to convert ScVal to native', {\n          functionName: functionDetails.name,\n          error,\n        });\n        return '[Error: Failed to decode ScVal]';\n      }\n    } else {\n      valueToFormat = result;\n    }\n\n    // Format based on type\n    if (typeof valueToFormat === 'bigint') {\n      return valueToFormat.toString();\n    } else if (typeof valueToFormat === 'string') {\n      return valueToFormat;\n    } else if (typeof valueToFormat === 'number') {\n      return valueToFormat.toString();\n    } else if (typeof valueToFormat === 'boolean') {\n      return String(valueToFormat);\n    } else if (valueToFormat instanceof Uint8Array) {\n      // Handle byte arrays - convert to hex string\n      return bytesToHex(valueToFormat, true);\n    } else if (Array.isArray(valueToFormat)) {\n      // Handle arrays/vectors\n      if (valueToFormat.length === 0) {\n        return '[]';\n      }\n      // Use compact formatting for simple arrays, pretty formatting for complex ones\n      if (\n        valueToFormat.every(\n          (item) =>\n            typeof item === 'string' ||\n            typeof item === 'number' ||\n            typeof item === 'boolean' ||\n            typeof item === 'bigint'\n        )\n      ) {\n        return stringifyWithBigInt(valueToFormat); // No spacing for simple arrays\n      }\n      return stringifyWithBigInt(valueToFormat, 2);\n    } else if (isSerializableObject(valueToFormat)) {\n      // Handle objects/maps/structs\n      if (Object.keys(valueToFormat as object).length === 0) {\n        return '{}';\n      }\n      return stringifyWithBigInt(valueToFormat, 2);\n    } else if (valueToFormat === null || valueToFormat === undefined) {\n      return '(null)';\n    } else {\n      // Handle any other type by stringifying\n      return stringifyWithBigInt(valueToFormat, 2);\n    }\n  } catch (error) {\n    const errorMessage = `Error formatting result for ${functionDetails.name}: ${(error as Error).message}`;\n    logger.error('formatStellarFunctionResult', errorMessage, {\n      functionName: functionDetails.name,\n      result,\n      error,\n    });\n    return `[${errorMessage}]`;\n  }\n}\n\n/**\n * Type guard to check if a value is an ScVal\n */\nfunction isScVal(value: unknown): boolean {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n\n  try {\n    // Use instanceof check for robust type detection\n    return typeof xdr !== 'undefined' && xdr.ScVal && value instanceof xdr.ScVal;\n  } catch {\n    return false;\n  }\n}\n","/**\n * Stellar-specific contract artifacts interface\n * Defines the structure of data needed to load Stellar contracts\n */\nexport interface StellarContractArtifacts {\n  /** The deployed contract ID (required, C...) */\n  contractAddress: string;\n}\n\n/**\n * Type guard to check if an object matches StellarContractArtifacts structure\n */\nexport function isStellarContractArtifacts(obj: unknown): obj is StellarContractArtifacts {\n  return (\n    typeof obj === 'object' &&\n    obj !== null &&\n    typeof (obj as Record<string, unknown>).contractAddress === 'string'\n  );\n}\n","/**\n * Utility functions for Stellar contract artifacts validation and conversion\n */\nimport type { StellarContractArtifacts } from '../types/artifacts';\nimport { isStellarContractArtifacts } from '../types/artifacts';\n\n/**\n * Validates and converts generic source input to StellarContractArtifacts\n *\n * @param source - Generic contract source (string address or artifacts object)\n * @returns Validated StellarContractArtifacts\n * @throws Error if the source is invalid\n */\nexport function validateAndConvertStellarArtifacts(\n  source: string | Record<string, unknown>\n): StellarContractArtifacts {\n  if (typeof source === 'string') {\n    // If source is a string, assume it's a contract address\n    return { contractAddress: source };\n  }\n\n  // Validate that the object has the required structure\n  if (!isStellarContractArtifacts(source)) {\n    throw new Error(\n      'Invalid contract artifacts provided. Expected an object with contractAddress property.'\n    );\n  }\n\n  return source;\n}\n","import type { ContractFunction, ContractSchema } from '@openzeppelin/contracts-ui-builder-types';\n\n/**\n * Determines if a function is a view/pure function (read-only) for Stellar contracts.\n * This function works with simulation-based state mutability detection results\n * from the contract loader, following the same approach as the official Stellar Laboratory.\n *\n * @param functionDetails The function details from the contract schema (with simulation-based mutability info).\n * @returns True if the function is read-only, false otherwise.\n */\nexport function isStellarViewFunction(functionDetails: ContractFunction): boolean {\n  // First check stateMutability if available (set by simulation-based detection)\n  if (functionDetails.stateMutability) {\n    return functionDetails.stateMutability === 'view' || functionDetails.stateMutability === 'pure';\n  }\n\n  // Fallback to modifiesState if stateMutability is not available\n  // (also set by simulation-based detection in the loader)\n  return !functionDetails.modifiesState;\n}\n\n/**\n * Get only the functions that modify state (writable functions) for Stellar contracts.\n * Uses simulation-based state mutability detection results to accurately filter functions.\n * @param contractSchema The contract schema to filter (with simulation-based mutability info).\n * @returns Array of writable functions\n */\nexport function getStellarWritableFunctions(\n  contractSchema: ContractSchema\n): ContractSchema['functions'] {\n  return contractSchema.functions.filter((func) => !isStellarViewFunction(func));\n}\n","import React from 'react';\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@openzeppelin/contracts-ui-builder-ui';\n\nimport { AdvancedInfo } from './AdvancedInfo';\nimport { FeeConfiguration } from './FeeConfiguration';\nimport { TransactionTiming } from './TransactionTiming';\nimport { useStellarRelayerOptions } from './useStellarRelayerOptions';\n\n/**\n * Stellar-specific relayer transaction options component.\n *\n * Provides configuration for Stellar transaction parameters:\n * - Basic: Simple max fee configuration with reasonable defaults\n * - Advanced: Full control over maxFee, validUntil, and feeBump options\n *\n * Stellar transactions have different parameters compared to EVM:\n * - maxFee: Maximum fee willing to pay (in stroops)\n * - validUntil: Transaction expiration time\n * - feeBump: Enable fee bump for stuck transactions\n */\nexport const StellarRelayerOptions: React.FC<{\n  options: Record<string, unknown>;\n  onChange: (options: Record<string, unknown>) => void;\n}> = ({ options, onChange }) => {\n  const [showAdvancedInfo, setShowAdvancedInfo] = React.useState(false);\n\n  const { control, configMode, handleModeChange } = useStellarRelayerOptions({\n    options,\n    onChange,\n  });\n\n  return (\n    <div className=\"space-y-4\">\n      <AdvancedInfo\n        showAdvancedInfo={showAdvancedInfo}\n        onToggle={() => setShowAdvancedInfo(!showAdvancedInfo)}\n      />\n\n      <Tabs value={configMode} onValueChange={handleModeChange}>\n        <TabsList className=\"grid w-full grid-cols-2\">\n          <TabsTrigger value=\"basic\">Basic</TabsTrigger>\n          <TabsTrigger value=\"advanced\">Advanced</TabsTrigger>\n        </TabsList>\n\n        <TabsContent value=\"basic\" className=\"space-y-4\">\n          <FeeConfiguration control={control} showBasicFeeOnly={true} />\n        </TabsContent>\n\n        <TabsContent value=\"advanced\" className=\"space-y-4\">\n          <div className=\"space-y-6\">\n            <FeeConfiguration control={control} showBasicFeeOnly={false} />\n\n            <TransactionTiming control={control} />\n          </div>\n        </TabsContent>\n      </Tabs>\n    </div>\n  );\n};\n","import { Info } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@openzeppelin/contracts-ui-builder-ui';\n\ninterface AdvancedInfoProps {\n  showAdvancedInfo: boolean;\n  onToggle: () => void;\n}\n\nexport const AdvancedInfo: React.FC<AdvancedInfoProps> = ({ showAdvancedInfo, onToggle }) => {\n  return (\n    <div className=\"space-y-2\">\n      <div className=\"flex items-center justify-between\">\n        <label className=\"text-base font-medium\">Stellar Transaction Configuration</label>\n        <Button variant=\"ghost\" size=\"sm\" onClick={onToggle} className=\"text-xs\" type=\"button\">\n          <Info className=\"h-3 w-3 mr-1\" />\n          Stellar Options\n        </Button>\n      </div>\n\n      {showAdvancedInfo && (\n        <div className=\"mt-3 rounded-lg bg-muted/30 p-4\">\n          <p className=\"text-sm text-muted-foreground leading-relaxed\">\n            Configure Stellar-specific transaction parameters: <strong>maxFee</strong> sets the\n            maximum fee in stroops you&apos;re willing to pay, <strong>validUntil</strong> sets\n            transaction expiration, and <strong>feeBump</strong> enables automatic fee increases for\n            stuck transactions.\n          </p>\n        </div>\n      )}\n    </div>\n  );\n};\n","import React from 'react';\nimport { Control } from 'react-hook-form';\n\nimport { BooleanField, NumberField } from '@openzeppelin/contracts-ui-builder-ui';\n\nimport type { StellarRelayerFormData } from './useStellarRelayerOptions';\n\ninterface FeeConfigurationProps {\n  control: Control<StellarRelayerFormData>;\n  showBasicFeeOnly: boolean;\n}\n\nexport const FeeConfiguration: React.FC<FeeConfigurationProps> = ({\n  control,\n  showBasicFeeOnly,\n}) => {\n  return (\n    <div className=\"space-y-4\">\n      <NumberField\n        id=\"maxFee\"\n        label=\"Maximum Fee (stroops)\"\n        name=\"transactionOptions.maxFee\"\n        control={control}\n        placeholder=\"e.g., 1000000 (0.1 XLM)\"\n        helperText=\"Maximum fee you're willing to pay in stroops (1 XLM = 10,000,000 stroops). Leave empty to use network defaults.\"\n        min={0}\n        step={1}\n      />\n\n      {!showBasicFeeOnly && (\n        <BooleanField\n          id=\"feeBump\"\n          label=\"Enable Fee Bump\"\n          name=\"transactionOptions.feeBump\"\n          control={control}\n          helperText=\"Automatically increase fee if transaction gets stuck in the network.\"\n        />\n      )}\n    </div>\n  );\n};\n","import React from 'react';\nimport { Control, Controller } from 'react-hook-form';\n\nimport { Button, DateTimeField } from '@openzeppelin/contracts-ui-builder-ui';\n\nimport type { StellarRelayerFormData } from './useStellarRelayerOptions';\n\ninterface TransactionTimingProps {\n  control: Control<StellarRelayerFormData>;\n}\n\nexport const TransactionTiming: React.FC<TransactionTimingProps> = ({ control }) => {\n  // Helper function to generate a datetime-local value for 1 hour from now\n  const getOneHourFromNow = () => {\n    const now = new Date();\n    now.setHours(now.getHours() + 1);\n    // Format for datetime-local input (YYYY-MM-DDTHH:mm)\n    return now.toISOString().slice(0, 16);\n  };\n\n  // Helper function to generate a datetime-local value for 24 hours from now\n  const getTwentyFourHoursFromNow = () => {\n    const now = new Date();\n    now.setHours(now.getHours() + 24);\n    return now.toISOString().slice(0, 16);\n  };\n\n  return (\n    <div className=\"space-y-4\">\n      <DateTimeField\n        id=\"validUntil\"\n        label=\"Transaction Expiration\"\n        name=\"transactionOptions.validUntil\"\n        control={control}\n        placeholder=\"YYYY-MM-DDTHH:mm\"\n        helperText=\"Set when this transaction should expire. Leave empty for no expiration limit.\"\n      />\n      <div className=\"flex gap-2 pt-1\">\n        <Controller\n          name=\"transactionOptions.validUntil\"\n          control={control}\n          render={({ field }) => (\n            <>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                size=\"sm\"\n                onClick={() => field.onChange(new Date(getOneHourFromNow()).toISOString())}\n                className=\"text-xs\"\n              >\n                +1 Hour\n              </Button>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                size=\"sm\"\n                onClick={() => field.onChange(new Date(getTwentyFourHoursFromNow()).toISOString())}\n                className=\"text-xs\"\n              >\n                +24 Hours\n              </Button>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                size=\"sm\"\n                onClick={() => field.onChange('')}\n                className=\"text-xs\"\n              >\n                Clear\n              </Button>\n            </>\n          )}\n        />\n      </div>\n    </div>\n  );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport type { StellarRelayerTransactionOptions } from '../relayer';\n\nexport interface StellarRelayerFormData {\n  transactionOptions: StellarRelayerTransactionOptions;\n}\n\ninterface UseStellarRelayerOptionsProps {\n  options: Record<string, unknown>;\n  onChange: (options: Record<string, unknown>) => void;\n}\n\nexport const useStellarRelayerOptions = ({ options, onChange }: UseStellarRelayerOptionsProps) => {\n  // Store the latest onChange callback in a ref to avoid dependency issues\n  const onChangeRef = useRef(onChange);\n  onChangeRef.current = onChange;\n\n  // Initialize form with options from parent (only on mount to prevent loops)\n  const initialOptions: StellarRelayerTransactionOptions = {\n    maxFee: options.maxFee as number | undefined,\n    validUntil: options.validUntil as string | undefined,\n    feeBump: options.feeBump as boolean | undefined,\n  };\n\n  const { control, setValue, watch } = useForm<StellarRelayerFormData>({\n    defaultValues: {\n      transactionOptions: initialOptions,\n    },\n  });\n\n  const formValues = watch('transactionOptions');\n  const isInitialMount = useRef(true);\n\n  // Track user's intended mode (separate from auto-detection)\n  const [userMode, setUserMode] = useState<'basic' | 'advanced'>(() => {\n    // Determine initial mode based on existing settings\n    const hasAdvancedSettings = Boolean(formValues.validUntil || formValues.feeBump);\n    return hasAdvancedSettings ? 'advanced' : 'basic';\n  });\n\n  const configMode = userMode;\n\n  // Handle initial mount - ensure any default values are communicated to parent\n  useEffect(() => {\n    if (isInitialMount.current) {\n      isInitialMount.current = false;\n      // No default values to set for Stellar (unlike EVM's Speed.FAST)\n      return;\n    }\n  }, []);\n\n  // Notify parent of changes after initial mount - watch specific fields\n  useEffect(() => {\n    if (isInitialMount.current) {\n      return;\n    }\n\n    const timeoutId = setTimeout(() => {\n      const newOptions: StellarRelayerTransactionOptions = {};\n\n      // Set maxFee if provided\n      if (formValues.maxFee !== undefined && formValues.maxFee !== null) {\n        newOptions.maxFee = formValues.maxFee;\n      }\n\n      // Set validUntil if provided (check for actual date string, not just truthy)\n      if (formValues.validUntil && formValues.validUntil.trim() !== '') {\n        newOptions.validUntil = formValues.validUntil;\n      }\n\n      // Set feeBump if enabled\n      if (formValues.feeBump !== undefined) {\n        newOptions.feeBump = formValues.feeBump;\n      }\n\n      // Soroban transactions do not support memos; do not propagate any\n\n      onChangeRef.current(newOptions as Record<string, unknown>);\n    }, 100);\n\n    return () => clearTimeout(timeoutId);\n  }, [formValues.maxFee, formValues.validUntil, formValues.feeBump]);\n\n  // Event handlers\n  const handleModeChange = (mode: string) => {\n    const newMode = mode as 'basic' | 'advanced';\n    setUserMode(newMode);\n\n    if (newMode === 'basic') {\n      // Reset advanced options when switching to basic mode\n      setValue('transactionOptions', {\n        ...formValues,\n        validUntil: undefined,\n        feeBump: undefined,\n      });\n    } else {\n      // When switching to advanced mode, keep existing values or set reasonable defaults\n      setValue('transactionOptions', {\n        ...formValues,\n        validUntil: formValues.validUntil || undefined,\n        feeBump: formValues.feeBump || false,\n      });\n    }\n  };\n\n  return {\n    control,\n    formValues,\n    configMode,\n    handleModeChange,\n  };\n};\n","import {\n  Account,\n  BASE_FEE,\n  Contract,\n  rpc as StellarRpc,\n  TransactionBuilder,\n  xdr,\n} from '@stellar/stellar-sdk';\n\nimport type {\n  ExecutionConfig,\n  RelayerDetails,\n  RelayerDetailsRich,\n  RelayerExecutionConfig,\n  StellarNetworkConfig,\n  TransactionStatusUpdate,\n  TxStatus,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\nimport {\n  Configuration,\n  RelayersApi,\n  type ApiResponseRelayerResponseData,\n  type ApiResponseRelayerStatusDataOneOf1,\n  type ScVal,\n  type StellarTransactionRequest,\n  type StellarTransactionResponse,\n} from '@openzeppelin/relayer-sdk';\n\nimport { valueToScVal } from '../transform/input-parser';\nimport { getStellarWalletConnectionStatus, signTransaction } from '../wallet/connection';\nimport { ExecutionStrategy } from './execution-strategy';\nimport type { StellarTransactionData } from './formatter';\n\n/**\n * Stellar-specific transaction options for the OpenZeppelin Relayer.\n * These options map directly to the StellarTransactionRequest parameters in the SDK.\n */\nexport interface StellarRelayerTransactionOptions {\n  // Basic options\n  maxFee?: number;\n\n  // Transaction expiration\n  validUntil?: string; // ISO 8601 date string\n\n  // Fee bump for stuck transactions\n  feeBump?: boolean;\n}\n\n/**\n * Implements the ExecutionStrategy for the OpenZeppelin Relayer for Stellar networks.\n * This strategy sends the transaction to the relayer service, which then handles\n * fee payment, signing, and broadcasting on Stellar/Soroban. It includes a polling\n * mechanism to wait for the transaction to be confirmed and return the final hash.\n */\nexport class RelayerExecutionStrategy implements ExecutionStrategy {\n  public async execute(\n    transactionData: StellarTransactionData,\n    executionConfig: ExecutionConfig,\n    networkConfig: StellarNetworkConfig,\n    onStatusChange: (status: TxStatus, details: TransactionStatusUpdate) => void,\n    runtimeApiKey?: string\n  ): Promise<{ txHash: string }> {\n    const relayerConfig = executionConfig as RelayerExecutionConfig;\n\n    if (!runtimeApiKey) {\n      throw new Error('API Key is required for Relayer execution.');\n    }\n\n    const { transactionId } = await this.sendTransactionViaRelayer(\n      transactionData,\n      relayerConfig,\n      networkConfig,\n      runtimeApiKey\n    );\n\n    onStatusChange('pendingRelayer', { transactionId });\n\n    const sdkConfig = new Configuration({\n      basePath: relayerConfig.serviceUrl,\n      accessToken: runtimeApiKey,\n    });\n\n    const txHash = await this.pollForTransactionHash(\n      relayerConfig.relayer.relayerId,\n      transactionId,\n      sdkConfig\n    );\n\n    return { txHash };\n  }\n\n  /**\n   * Fetches and filters relayers for Stellar networks from the OpenZeppelin Relayer service.\n   * This function handles pagination to retrieve all available relayers.\n   *\n   * @param serviceUrl The base URL of the relayer service.\n   * @param accessToken The session-based API key for authentication.\n   * @param networkConfig The Stellar network configuration to filter relayers by.\n   * @returns A promise that resolves to an array of compatible relayer details.\n   * @throws If the API call fails or returns an unsuccessful response.\n   */\n  public async getStellarRelayers(\n    serviceUrl: string,\n    accessToken: string,\n    networkConfig: StellarNetworkConfig\n  ): Promise<RelayerDetails[]> {\n    logger.info(\n      '[StellarRelayer] Getting relayers with access token',\n      accessToken.slice(0, 5).padEnd(accessToken.length, '*')\n    );\n    const sdkConfig = new Configuration({\n      basePath: serviceUrl,\n      accessToken,\n    });\n    const relayersApi = new RelayersApi(sdkConfig);\n\n    let allRelayers: ApiResponseRelayerResponseData[] = [];\n    let currentPage = 1;\n    let totalItems = 0;\n    let hasMore = true;\n\n    do {\n      const { data } = await relayersApi.listRelayers(currentPage, 100);\n\n      if (!data.success || !data.data) {\n        throw new Error(`Failed to fetch relayers on page ${currentPage}.`);\n      }\n\n      allRelayers = [...allRelayers, ...data.data];\n      totalItems = data.pagination?.total_items || 0;\n\n      if (allRelayers.length >= totalItems) {\n        hasMore = false;\n      } else {\n        currentPage++;\n      }\n    } while (hasMore);\n\n    return allRelayers\n      .filter(\n        (r: ApiResponseRelayerResponseData) =>\n          r.network_type === 'stellar' && networkConfig.id.includes(r.network)\n      )\n      .map((r: ApiResponseRelayerResponseData) => ({\n        relayerId: r.id,\n        name: r.name,\n        address: r.address || '',\n        network: r.network,\n        paused: r.paused || false,\n      }));\n  }\n\n  /**\n   * Fetches comprehensive information about a specific Stellar relayer including balance and status.\n   * This function combines multiple SDK API calls to provide rich relayer details.\n   *\n   * @param serviceUrl The base URL of the relayer service.\n   * @param accessToken The session-based API key for authentication.\n   * @param relayerId The unique identifier of the relayer.\n   * @param networkConfig The Stellar network configuration for context.\n   * @returns A promise that resolves to enhanced relayer details including balance and status.\n   * @throws If any API call fails or returns an unsuccessful response.\n   */\n  public async getStellarRelayer(\n    serviceUrl: string,\n    accessToken: string,\n    relayerId: string,\n    _networkConfig: StellarNetworkConfig\n  ): Promise<RelayerDetailsRich> {\n    logger.info('[StellarRelayer] Getting detailed relayer info', relayerId);\n\n    const sdkConfig = new Configuration({\n      basePath: serviceUrl,\n      accessToken,\n    });\n    const relayersApi = new RelayersApi(sdkConfig);\n\n    try {\n      // Fetch basic relayer details, balance, and status in parallel\n      const [relayerResponse, balanceResponse, statusResponse] = await Promise.all([\n        relayersApi.getRelayer(relayerId),\n        relayersApi.getRelayerBalance(relayerId).catch((err) => {\n          logger.warn('[StellarRelayer] Failed to fetch balance', err);\n          return null;\n        }),\n        relayersApi.getRelayerStatus(relayerId).catch((err) => {\n          logger.warn('[StellarRelayer] Failed to fetch status', err);\n          return null;\n        }),\n      ]);\n\n      if (!relayerResponse.data.success || !relayerResponse.data.data) {\n        throw new Error(`Failed to fetch relayer details for ID: ${relayerId}`);\n      }\n\n      const relayerData = relayerResponse.data.data;\n\n      // Build enhanced relayer details object\n      const enhancedDetails: RelayerDetailsRich = {\n        relayerId: relayerData.id,\n        name: relayerData.name,\n        address: relayerData.address || '',\n        network: relayerData.network,\n        paused: relayerData.paused || false,\n        systemDisabled: relayerData.system_disabled || false,\n      };\n\n      // Add balance if available (Stellar native balance in lumens)\n      if (balanceResponse?.data?.success && balanceResponse.data.data?.balance) {\n        try {\n          // Stellar balance is in stroops (1 XLM = 10,000,000 stroops)\n          const balanceInStroops = Number(balanceResponse.data.data.balance);\n          const balanceInXlm = balanceInStroops / 10000000;\n          enhancedDetails.balance = `${balanceInXlm.toFixed(7)} XLM`;\n        } catch (error) {\n          logger.warn('[StellarRelayer] Failed to format balance, using raw value', String(error));\n          enhancedDetails.balance = String(balanceResponse.data.data.balance);\n        }\n      }\n\n      // Add status details if available\n      if (statusResponse?.data?.success && statusResponse.data.data) {\n        const statusData = statusResponse.data.data;\n        if (statusData.network_type === 'stellar') {\n          // Type guard to ensure we have Stellar-specific fields\n          const stellarStatusData = statusData as ApiResponseRelayerStatusDataOneOf1;\n          if (\n            stellarStatusData.sequence_number !== undefined &&\n            stellarStatusData.sequence_number !== null\n          ) {\n            enhancedDetails.nonce = String(stellarStatusData.sequence_number);\n          }\n          if (stellarStatusData.pending_transactions_count !== undefined) {\n            enhancedDetails.pendingTransactionsCount = stellarStatusData.pending_transactions_count;\n          }\n          if (stellarStatusData.last_confirmed_transaction_timestamp) {\n            enhancedDetails.lastConfirmedTransactionTimestamp =\n              stellarStatusData.last_confirmed_transaction_timestamp;\n          }\n        }\n      }\n\n      logger.info(\n        '[StellarRelayer] Retrieved enhanced relayer details',\n        JSON.stringify(enhancedDetails)\n      );\n      return enhancedDetails;\n    } catch (error) {\n      logger.error(\n        '[StellarRelayer] Failed to get relayer details',\n        error instanceof Error ? error.message : String(error)\n      );\n      throw error;\n    }\n  }\n\n  /**\n   * Submits a Stellar transaction to the relayer service for asynchronous processing.\n   * @param transactionData The Stellar contract transaction data.\n   * @param executionConfig The relayer-specific execution configuration.\n   * @param networkConfig The Stellar network configuration.\n   * @param runtimeApiKey The user's session-only API key.\n   * @returns A promise that resolves to an object containing the transaction ID assigned by the relayer.\n   */\n  private async sendTransactionViaRelayer(\n    transactionData: StellarTransactionData,\n    executionConfig: RelayerExecutionConfig,\n    _networkConfig: StellarNetworkConfig,\n    runtimeApiKey: string\n  ): Promise<{ transactionId: string }> {\n    // Type-safe extraction of Stellar-specific options\n    const stellarOptions = executionConfig.transactionOptions as\n      | StellarRelayerTransactionOptions\n      | undefined;\n\n    // If fee bump is requested, use signed XDR mode per relayer docs\n    // Only valid when providing a signed transaction_xdr\n    let relayerTxRequest: StellarTransactionRequest;\n    if (stellarOptions?.feeBump) {\n      const signedInnerXdr = await this.buildSignedInnerTransactionXdr(\n        transactionData,\n        _networkConfig,\n        stellarOptions\n      );\n\n      relayerTxRequest = {\n        network: executionConfig.relayer.network,\n        transaction_xdr: signedInnerXdr,\n        fee_bump: true,\n        ...(stellarOptions?.maxFee !== undefined && { max_fee: stellarOptions.maxFee }),\n        ...(stellarOptions?.validUntil !== undefined && { valid_until: stellarOptions.validUntil }),\n      };\n    } else {\n      // Default operations-based mode\n      relayerTxRequest = {\n        network: executionConfig.relayer.network, // Use relayer's network (e.g., 'testnet', 'mainnet')\n        source_account: executionConfig.relayer.address, // Use relayer's address as source account\n        operations: [\n          {\n            type: 'invoke_contract',\n            contract_address: transactionData.contractAddress,\n            function_name: transactionData.functionName,\n            args: this.convertArgsToScVal(transactionData),\n            // No auth field needed - using source_account at top level\n          },\n        ],\n        // Include optional parameters if provided\n        ...(stellarOptions?.maxFee !== undefined && { max_fee: stellarOptions.maxFee }),\n        ...(stellarOptions?.validUntil !== undefined && { valid_until: stellarOptions.validUntil }),\n        // Note: fee_bump is not supported by the relayer service in operations mode\n        // Memos are not supported for Soroban contract operations\n      };\n    }\n\n    const sdkConfig = new Configuration({\n      basePath: executionConfig.serviceUrl,\n      accessToken: runtimeApiKey,\n    });\n    const relayersApi = new RelayersApi(sdkConfig);\n\n    const result = await relayersApi.sendTransaction(\n      executionConfig.relayer.relayerId,\n      relayerTxRequest\n    );\n\n    if (!result.data.success || !result.data.data?.id) {\n      throw new Error(`Relayer API failed to return a transaction ID. Error: ${result.data.error}`);\n    }\n\n    return { transactionId: result.data.data.id };\n  }\n\n  /**\n   * Converts Stellar transaction arguments to ScVal format for the relayer.\n   * Uses the same comprehensive conversion utility as the EOA execution strategy.\n   */\n  private convertArgsToScVal(transactionData: StellarTransactionData): ScVal[] {\n    // Use the same comprehensive conversion as EOA execution strategy\n    return transactionData.args.map((arg, index) => {\n      const argType = transactionData.argTypes[index];\n      const argSchema = transactionData.argSchema?.[index]; // Pass schema for struct field type resolution\n\n      const scVal = valueToScVal(arg, argType, argSchema);\n\n      // Convert Stellar SDK ScVal to relayer SDK ScVal format\n      return this.stellarScValToRelayerScVal(scVal);\n    });\n  }\n\n  /**\n   * Build and sign the inner transaction using the connected wallet.\n   * Returns the signed inner transaction XDR to be wrapped by the relayer as a fee bump.\n   */\n  private async buildSignedInnerTransactionXdr(\n    txData: StellarTransactionData,\n    stellarConfig: StellarNetworkConfig,\n    _options?: StellarRelayerTransactionOptions\n  ): Promise<string> {\n    const rpcServer = this.getSorobanRpcServer(stellarConfig);\n    const connectedAddress = this.getConnectedWalletAddress();\n\n    // Fetch sequence for the connected address\n    const accountResponse = await rpcServer.getAccount(connectedAddress);\n    const sourceAccount = new Account(connectedAddress, accountResponse.sequenceNumber());\n\n    // Build a contract invocation transaction\n    const contract = new Contract(txData.contractAddress);\n    const transactionBuilder = new TransactionBuilder(sourceAccount, {\n      fee: BASE_FEE,\n      networkPassphrase: stellarConfig.networkPassphrase,\n    });\n\n    const scValArgs = txData.args.map((arg, index) => {\n      const argType = txData.argTypes[index];\n      const argSchema = txData.argSchema?.[index];\n      return valueToScVal(arg, argType, argSchema);\n    });\n\n    transactionBuilder.addOperation(contract.call(txData.functionName, ...scValArgs));\n\n    // Note: Soroban contract transactions do not support memos; do not attach\n\n    // Timeout: keep short; relayer will wrap in fee bump and submit\n    transactionBuilder.setTimeout(30);\n\n    // Build → simulate → prepare\n    let transaction = transactionBuilder.build();\n\n    const simulation = await rpcServer.simulateTransaction(transaction);\n    if (StellarRpc.Api.isSimulationError(simulation)) {\n      throw new Error(`Transaction simulation failed: ${simulation.error}`);\n    }\n    transaction = await rpcServer.prepareTransaction(transaction);\n\n    // Sign with connected wallet\n    const signResult = await signTransaction(transaction.toXDR(), connectedAddress);\n    const signedTx = TransactionBuilder.fromXDR(\n      signResult.signedTxXdr,\n      stellarConfig.networkPassphrase\n    );\n\n    // Ensure we have a standard Transaction (not FeeBumpTransaction)\n    if ('memo' in signedTx && 'sequence' in signedTx) {\n      return signedTx.toXDR();\n    }\n    throw new Error('Unexpected transaction type returned from signing');\n  }\n\n  /**\n   * Get Soroban RPC Server instance with current configuration and user overrides.\n   */\n  private getSorobanRpcServer(networkConfig: StellarNetworkConfig): StellarRpc.Server {\n    // Allow HTTP for localhost development\n    const rpcUrl = networkConfig.sorobanRpcUrl;\n    if (!rpcUrl) {\n      throw new Error(`No Soroban RPC URL available for network ${networkConfig.name}`);\n    }\n    const allowHttp = new URL(rpcUrl).hostname === 'localhost';\n    return new StellarRpc.Server(rpcUrl, { allowHttp });\n  }\n\n  private getConnectedWalletAddress(): string {\n    const connectionStatus = getStellarWalletConnectionStatus();\n    if (!connectionStatus.isConnected || !connectionStatus.address) {\n      throw new Error('No connected wallet found. Please connect your Stellar wallet first.');\n    }\n    return connectionStatus.address;\n  }\n\n  /**\n   * Converts a Stellar SDK ScVal to the relayer SDK ScVal format.\n   * The relayer SDK uses a simplified ScVal representation compared to Stellar SDK's XDR types.\n   */\n  private stellarScValToRelayerScVal(stellarScVal: xdr.ScVal): ScVal {\n    const scValType = stellarScVal.switch();\n\n    switch (scValType.name) {\n      case 'scvBool':\n        return { bool: stellarScVal.b() };\n      case 'scvVoid':\n        return { bool: false }; // Fallback for void\n      case 'scvU32':\n        return { u32: stellarScVal.u32() };\n      case 'scvI32':\n        return { i32: stellarScVal.i32() };\n      case 'scvU64':\n        return { u64: stellarScVal.u64().toString() };\n      case 'scvI64':\n        return { i64: stellarScVal.i64().toString() };\n      case 'scvU128': {\n        const u128Parts = stellarScVal.u128();\n        return {\n          u128: {\n            hi: u128Parts.hi().toString(),\n            lo: u128Parts.lo().toString(),\n          },\n        };\n      }\n      case 'scvI128': {\n        const i128Parts = stellarScVal.i128();\n        return {\n          i128: {\n            hi: i128Parts.hi().toString(),\n            lo: i128Parts.lo().toString(),\n          },\n        };\n      }\n      case 'scvU256': {\n        const u256Parts = stellarScVal.u256();\n        return {\n          u256: {\n            hi_hi: u256Parts.hiHi().toString(),\n            hi_lo: u256Parts.hiLo().toString(),\n            lo_hi: u256Parts.loHi().toString(),\n            lo_lo: u256Parts.loLo().toString(),\n          },\n        };\n      }\n      case 'scvI256': {\n        const i256Parts = stellarScVal.i256();\n        return {\n          i256: {\n            hi_hi: i256Parts.hiHi().toString(),\n            hi_lo: i256Parts.hiLo().toString(),\n            lo_hi: i256Parts.loHi().toString(),\n            lo_lo: i256Parts.loLo().toString(),\n          },\n        };\n      }\n      case 'scvBytes':\n        return { bytes: stellarScVal.bytes().toString('hex') };\n      case 'scvString':\n        return { string: stellarScVal.str().toString() };\n      case 'scvSymbol':\n        return { symbol: stellarScVal.sym().toString() };\n      case 'scvVec':\n        return {\n          vec: stellarScVal.vec()?.map((val) => this.stellarScValToRelayerScVal(val)) || [],\n        };\n      case 'scvMap': {\n        const mapEntries = stellarScVal.map() || [];\n        return {\n          map: mapEntries.map((entry) => ({\n            key: this.stellarScValToRelayerScVal(entry.key()),\n            val: this.stellarScValToRelayerScVal(entry.val()),\n          })),\n        };\n      }\n      case 'scvAddress':\n        return { address: stellarScVal.address().toString() };\n      default:\n        // For any unhandled types, convert to string representation as fallback\n        return { string: stellarScVal.toString() };\n    }\n  }\n\n  /**\n   * Polls the relayer for a Stellar transaction's status until it is confirmed and has a hash, or fails.\n   * @param relayerId The ID of the relayer processing the transaction.\n   * @param transactionId The ID of the transaction to poll.\n   * @param sdkConfig The SDK configuration containing the necessary authentication.\n   * @returns A promise that resolves to the final transaction hash.\n   * @throws If the transaction fails or polling times out.\n   */\n  private async pollForTransactionHash(\n    relayerId: string,\n    transactionId: string,\n    sdkConfig: Configuration\n  ): Promise<string> {\n    const relayersApi = new RelayersApi(sdkConfig);\n    const POLLING_INTERVAL = 2000;\n    const POLLING_TIMEOUT = 300000; // 5 minutes in milliseconds\n    const startTime = Date.now();\n\n    while (Date.now() - startTime < POLLING_TIMEOUT) {\n      const { data } = await relayersApi.getTransactionById(relayerId, transactionId);\n\n      if (!data.success || !data.data) {\n        throw new Error(`Failed to get transaction status for ID: ${transactionId}`);\n      }\n\n      const txResponse = data.data as StellarTransactionResponse;\n\n      if (txResponse.status === 'mined' || txResponse.status === 'confirmed') {\n        if (!txResponse.hash) {\n          throw new Error(\n            `Transaction is confirmed but no hash was returned for ID: ${transactionId}`\n          );\n        }\n        return txResponse.hash;\n      }\n\n      if (\n        txResponse.status === 'failed' ||\n        txResponse.status === 'canceled' ||\n        txResponse.status === 'expired'\n      ) {\n        throw new Error(`Transaction ${txResponse.status}`);\n      }\n\n      // Continue polling for 'pending' or 'sent' statuses\n      await new Promise((resolve) => setTimeout(resolve, POLLING_INTERVAL));\n    }\n\n    throw new Error(`Polling for transaction hash timed out for ID: ${transactionId}`);\n  }\n}\n","import type { Connector } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport {\n  getInitializedStellarWalletImplementation,\n  getStellarWalletImplementation,\n} from './utils/stellarWalletImplementationManager';\n\nimport { stellarUiKitManager } from './stellar-wallets-kit';\nimport { StellarConnectionStatusListener } from './types';\n\n/**\n * Indicates if this adapter supports wallet connection\n * @returns Whether wallet connection is supported by this adapter\n */\nexport function supportsStellarWalletConnection(): boolean {\n  return true;\n}\n\n/**\n * Get available Stellar wallet connectors\n */\nexport async function getStellarAvailableConnectors(): Promise<Connector[]> {\n  const impl = await getStellarWalletImplementation();\n  return impl.getAvailableConnectors();\n}\n\n/**\n * Connect to a Stellar wallet\n * @param connectorId - The ID of the wallet to connect to\n */\nexport async function connectStellarWallet(\n  connectorId: string\n): Promise<{ connected: boolean; address?: string; error?: string }> {\n  const impl = await getStellarWalletImplementation();\n  return impl.connect(connectorId);\n}\n\n/**\n * Disconnect from the current Stellar wallet\n */\nexport async function disconnectStellarWallet(): Promise<{\n  disconnected: boolean;\n  error?: string;\n}> {\n  const impl = await getStellarWalletImplementation();\n  return impl.disconnect();\n}\n\n/**\n * Get the current wallet connection status\n * @inheritdoc\n */\nexport function getStellarWalletConnectionStatus(): {\n  isConnected: boolean;\n  address?: string;\n  chainId?: string;\n  walletId?: string;\n} {\n  const impl = getInitializedStellarWalletImplementation();\n  if (!impl) {\n    logger.warn(\n      'getStellarWalletConnectionStatus',\n      'Wallet implementation not ready. Returning default disconnected state.'\n    );\n    return {\n      isConnected: false,\n      address: undefined,\n      chainId: stellarUiKitManager.getState().networkConfig?.id || 'stellar-testnet',\n      walletId: undefined,\n    };\n  }\n\n  const status = impl.getWalletConnectionStatus();\n  return {\n    isConnected: status.isConnected,\n    address: status.address,\n    chainId: typeof status.chainId === 'number' ? status.chainId.toString() : status.chainId,\n    walletId: status.walletId,\n  };\n}\n\n/**\n * Update the cached Stellar wallet connection state.\n * Used by provider code that derives the address directly from the kit.\n */\nexport function setStellarConnectedAddress(address: string | null, walletId?: string | null): void {\n  const impl = getInitializedStellarWalletImplementation();\n  if (impl) {\n    impl.updateConnectionStatus(address, walletId);\n  } else {\n    logger.warn(\n      'setStellarConnectedAddress',\n      'Wallet implementation not ready. Cannot update connection status.'\n    );\n  }\n}\n\n// StellarConnectionStatusListener is now imported from the implementation file\n\n/**\n * Subscribe to Stellar wallet connection status changes\n * @param callback Function to call when connection status changes\n * @returns Unsubscribe function\n */\nexport function onStellarWalletConnectionChange(\n  callback: StellarConnectionStatusListener\n): () => void {\n  const impl = getInitializedStellarWalletImplementation();\n  if (!impl) {\n    logger.warn(\n      'onStellarWalletConnectionChange',\n      'Wallet implementation not ready. Returning no-op.'\n    );\n    return () => {};\n  }\n\n  // Convert from implementation status format to connection format\n  return impl.onWalletConnectionChange((currentImplStatus, prevImplStatus) => {\n    const currentStatus = {\n      isConnected: currentImplStatus.isConnected,\n      address: currentImplStatus.address,\n      chainId: currentImplStatus.chainId,\n      walletId: currentImplStatus.walletId,\n    };\n    const previousStatus = {\n      isConnected: prevImplStatus.isConnected,\n      address: prevImplStatus.address,\n      chainId: prevImplStatus.chainId,\n      walletId: prevImplStatus.walletId,\n    };\n\n    try {\n      callback(currentStatus, previousStatus);\n    } catch (error) {\n      logger.error('Error in Stellar connection status listener:', String(error));\n    }\n  });\n}\n\n/**\n * Sign a transaction using the connected wallet\n * @internal\n */\nexport async function signTransaction(\n  xdr: string,\n  address: string\n): Promise<{ signedTxXdr: string }> {\n  const impl = await getStellarWalletImplementation();\n  return impl.signTransaction(xdr, address);\n}\n","import type {\n  StellarNetworkConfig,\n  UiKitConfiguration,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { appConfigService, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { WalletsKitImplementation } from '../implementation/wallets-kit-implementation';\n\nlet walletImplementationInstance: WalletsKitImplementation | undefined;\nlet walletImplementationPromise: Promise<WalletsKitImplementation> | undefined;\n\nconst LOG_SYSTEM = 'StellarWalletImplementationManager';\n\n/**\n * Get or create the singleton instance of WalletsKitImplementation.\n * This function ensures that the initialization logic runs only once.\n *\n * @param networkConfig - Optional network configuration to use for initialization\n * @returns A Promise resolving to the WalletsKitImplementation singleton\n */\nexport async function getStellarWalletImplementation(\n  networkConfig?: StellarNetworkConfig\n): Promise<WalletsKitImplementation> {\n  if (walletImplementationInstance) {\n    // If network config is provided and different, update it\n    if (networkConfig) {\n      walletImplementationInstance.setNetworkConfig(networkConfig);\n    }\n    return walletImplementationInstance;\n  }\n\n  if (walletImplementationPromise) {\n    const instance = await walletImplementationPromise;\n    // If network config is provided and different, update it\n    if (networkConfig) {\n      instance.setNetworkConfig(networkConfig);\n    }\n    return instance;\n  }\n\n  walletImplementationPromise = (async () => {\n    try {\n      logger.info(LOG_SYSTEM, 'Initializing StellarWalletImplementation singleton (async)...');\n\n      // Get initial UI kit config from appConfigService\n      const initialUiKitConfig = appConfigService.getTypedNestedConfig<UiKitConfiguration>(\n        'walletui',\n        'config'\n      );\n\n      // Create instance with provided network config or undefined\n      const instance = new WalletsKitImplementation(networkConfig, initialUiKitConfig);\n\n      logger.info(LOG_SYSTEM, 'WalletsKitImplementation singleton created (async).');\n      walletImplementationInstance = instance;\n      return instance;\n    } catch (error) {\n      logger.error(LOG_SYSTEM, 'Failed to initialize WalletsKitImplementation (async):', error);\n\n      // Create fallback instance\n      const fallbackInstance = new WalletsKitImplementation(networkConfig);\n      walletImplementationInstance = fallbackInstance;\n      return fallbackInstance;\n    }\n  })();\n\n  return walletImplementationPromise;\n}\n\n/**\n * A synchronous getter for cases where the instance is known to be initialized.\n * Use with caution, prefer the async getter.\n *\n * This function is essential for cases where you need immediate access to the\n * wallet implementation and know it has already been initialized.\n *\n * @returns The initialized WalletsKitImplementation instance or undefined\n */\nexport function getInitializedStellarWalletImplementation(): WalletsKitImplementation | undefined {\n  if (!walletImplementationInstance) {\n    logger.warn(\n      LOG_SYSTEM,\n      'getInitializedStellarWalletImplementation called before instance was ready.'\n    );\n  }\n  return walletImplementationInstance;\n}\n\n/**\n * Updates the network configuration for the wallet implementation\n * This is useful when the network changes but the implementation instance should remain the same\n *\n * @param networkConfig - The new network configuration\n */\nexport function updateWalletImplementationNetworkConfig(networkConfig: StellarNetworkConfig): void {\n  logger.info(LOG_SYSTEM, 'Updating wallet implementation network config:', networkConfig.name);\n\n  if (walletImplementationInstance) {\n    walletImplementationInstance.setNetworkConfig(networkConfig);\n  } else {\n    logger.warn(\n      LOG_SYSTEM,\n      'Cannot update network config - wallet implementation not initialized yet'\n    );\n  }\n}\n\n/**\n * Resets the singleton instance (primarily for testing or cleanup)\n * Use with extreme caution in production code\n */\nexport function resetWalletImplementationInstance(): void {\n  logger.warn(LOG_SYSTEM, 'Resetting wallet implementation singleton instance');\n\n  if (walletImplementationInstance) {\n    walletImplementationInstance.cleanup();\n  }\n\n  walletImplementationInstance = undefined;\n  walletImplementationPromise = undefined;\n}\n","/**\n * Private Stellar wallet implementation for Stellar wallet connection\n *\n * This file contains the internal implementation of StellarWalletsKit for wallet connection.\n * It's encapsulated within the Stellar adapter and not exposed to the rest of the application.\n */\nimport {\n  allowAllModules,\n  ISupportedWallet,\n  StellarWalletsKit,\n  WalletNetwork,\n} from '@creit.tech/stellar-wallets-kit';\n\nimport type {\n  Connector,\n  StellarNetworkConfig,\n  UiKitConfiguration,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport type { StellarConnectionStatusListener, StellarWalletConnectionStatus } from '../types';\n\nconst LOG_SYSTEM = 'StellarWalletImplementation';\n\n/**\n * Class responsible for encapsulating StellarWalletsKit logic for wallet interactions.\n * This class should not be used directly by UI components. The StellarAdapter\n * exposes a standardized interface for wallet operations.\n * It manages StellarWalletsKit instances and provides methods for wallet actions.\n */\nexport class WalletsKitImplementation {\n  private defaultInstanceKit: StellarWalletsKit | null = null;\n  private activeStellarKit: StellarWalletsKit | null = null; // To be set by StellarUiKitManager\n  private unsubscribeFromStatusChanges?: () => void;\n  private initialized: boolean = false;\n  private networkConfig: StellarNetworkConfig | null = null;\n\n  // Internal state tracking for connection status\n  private currentAddress: string | null = null;\n  private currentWalletId: string | null = null;\n  private connectionStatusListeners = new Set<StellarConnectionStatusListener>();\n\n  /**\n   * Constructs the StellarWalletImplementation.\n   * Configuration for StellarWalletsKit is deferred until actually needed or set externally.\n   * @param networkConfig - Stellar network configuration\n   * @param initialUiKitConfig - Optional initial UI kit configuration, primarily for logging the anticipated kit.\n   */\n  constructor(networkConfig?: StellarNetworkConfig, initialUiKitConfig?: UiKitConfiguration) {\n    this.networkConfig = networkConfig || null;\n    logger.info(\n      LOG_SYSTEM,\n      'Constructor called. Initial anticipated kitName:',\n      initialUiKitConfig?.kitName,\n      'Network:',\n      networkConfig?.name\n    );\n    this.initialized = true;\n    logger.info(\n      LOG_SYSTEM,\n      'StellarWalletImplementation instance initialized (StellarWalletsKit config creation deferred).'\n    );\n    // No kit created here by default anymore.\n  }\n\n  /**\n   * Sets the network configuration for the wallet implementation\n   * @param config - The Stellar network configuration\n   */\n  public setNetworkConfig(config: StellarNetworkConfig): void {\n    logger.info(LOG_SYSTEM, 'Network config updated:', config.name);\n    this.networkConfig = config;\n\n    // If we have active kits, they might need to be recreated with new network\n    // For now, just log - the kit manager will handle reconfiguration\n    if (this.activeStellarKit || this.defaultInstanceKit) {\n      logger.info(LOG_SYSTEM, 'Active kits detected - may need reconfiguration for new network');\n    }\n  }\n\n  /**\n   * Sets the externally determined, currently active StellarWalletsKit instance.\n   * This is typically called by StellarUiKitManager after it has resolved the appropriate\n   * kit for the selected UI kit mode.\n   * @param kit - The StellarWalletsKit object to set as active, or null to clear it.\n   */\n  public setActiveStellarKit(kit: StellarWalletsKit | null): void {\n    logger.info(\n      LOG_SYSTEM,\n      'setActiveStellarKit called with kit:',\n      kit ? 'Valid StellarWalletsKit' : 'Null'\n    );\n    this.activeStellarKit = kit;\n\n    // If there was an existing direct subscription, it might need to be updated\n    if (this.unsubscribeFromStatusChanges) {\n      logger.info(LOG_SYSTEM, 'Re-establishing connection status monitoring with new kit');\n      // The connection status will be managed internally\n    }\n  }\n\n  /**\n   * Creates a default StellarWalletsKit instance when no active kit is available.\n   * This ensures wallet functionality works even without explicit UI kit configuration.\n   * @returns A default StellarWalletsKit instance\n   */\n  private createDefaultKit(): StellarWalletsKit {\n    logger.info(LOG_SYSTEM, 'Creating default StellarWalletsKit instance');\n\n    const network = this.getWalletNetwork();\n    const kit = new StellarWalletsKit({\n      network,\n      selectedWalletId: undefined,\n      modules: allowAllModules(),\n    });\n\n    logger.info(LOG_SYSTEM, 'Default StellarWalletsKit instance created');\n    return kit;\n  }\n\n  /**\n   * Gets the appropriate WalletNetwork enum value based on network configuration\n   */\n  private getWalletNetwork(): WalletNetwork {\n    if (!this.networkConfig) {\n      logger.warn(LOG_SYSTEM, 'No network config available, defaulting to TESTNET');\n      return WalletNetwork.TESTNET;\n    }\n    return this.networkConfig.type === 'mainnet' ? WalletNetwork.PUBLIC : WalletNetwork.TESTNET;\n  }\n\n  /**\n   * Gets the kit to use for operations (active or default)\n   */\n  private getKitToUse(): StellarWalletsKit {\n    const kit =\n      this.activeStellarKit ||\n      this.defaultInstanceKit ||\n      (this.defaultInstanceKit = this.createDefaultKit());\n    return kit;\n  }\n\n  /**\n   * Gets available wallet connectors from StellarWalletsKit\n   * @returns Promise resolving to array of available connectors\n   */\n  public async getAvailableConnectors(): Promise<Connector[]> {\n    if (!this.initialized) {\n      logger.warn(LOG_SYSTEM, 'getAvailableConnectors called before initialization');\n      return [];\n    }\n\n    try {\n      const kit = this.getKitToUse();\n      const wallets = await kit.getSupportedWallets();\n\n      const connectors: Connector[] = wallets.map((wallet: ISupportedWallet) => ({\n        id: wallet.id,\n        name: wallet.name,\n        icon: wallet.icon,\n        installed: wallet.isAvailable,\n        type: (wallet.type as string) || 'browser',\n      }));\n\n      logger.info(LOG_SYSTEM, `Found ${connectors.length} available wallet connectors`);\n      return connectors;\n    } catch (error) {\n      logger.error(LOG_SYSTEM, 'Failed to get available connectors:', error);\n      return [];\n    }\n  }\n\n  /**\n   * Connects to a wallet using the specified connector ID\n   * @param connectorId - The ID of the wallet connector to use\n   * @returns Promise resolving to connection result\n   */\n  public async connect(connectorId: string): Promise<{\n    connected: boolean;\n    address?: string;\n    chainId?: string;\n    error?: string;\n  }> {\n    if (!this.initialized) {\n      return { connected: false, error: 'Wallet implementation not initialized' };\n    }\n\n    try {\n      const prevStatus = this.getWalletConnectionStatus();\n      const kit = this.getKitToUse();\n\n      logger.info(LOG_SYSTEM, `Attempting to connect to wallet: ${connectorId}`);\n\n      // Set the selected wallet\n      kit.setWallet(connectorId);\n\n      // Get the address from the wallet\n      const result = await kit.getAddress();\n\n      if (result.address) {\n        this.currentAddress = result.address;\n        this.currentWalletId = connectorId;\n\n        // Notify listeners of the connection change\n        const newStatus = this.getWalletConnectionStatus();\n        this.notifyConnectionListeners(newStatus, prevStatus);\n\n        logger.info(\n          LOG_SYSTEM,\n          `Successfully connected to wallet: ${connectorId}, address: ${result.address}`\n        );\n\n        return {\n          connected: true,\n          address: result.address,\n          chainId: this.networkConfig?.id,\n        };\n      } else {\n        return {\n          connected: false,\n          error: 'Failed to get address from wallet',\n        };\n      }\n    } catch (error) {\n      logger.error(LOG_SYSTEM, `Failed to connect to wallet ${connectorId}:`, error);\n      return {\n        connected: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Disconnects from the currently connected wallet\n   * @returns Promise resolving to disconnection result\n   */\n  public async disconnect(): Promise<{ disconnected: boolean; error?: string }> {\n    if (!this.initialized) {\n      return { disconnected: false, error: 'Wallet implementation not initialized' };\n    }\n\n    try {\n      const prevStatus = this.getWalletConnectionStatus();\n\n      logger.info(LOG_SYSTEM, 'Disconnecting wallet');\n\n      // Clear the current connection state\n      this.currentAddress = null;\n      this.currentWalletId = null;\n\n      // Notify listeners of the disconnection\n      const newStatus = this.getWalletConnectionStatus();\n      this.notifyConnectionListeners(newStatus, prevStatus);\n\n      // For Stellar Wallets Kit, we just clear our internal state\n      // The kit doesn't have a specific disconnect method\n\n      logger.info(LOG_SYSTEM, 'Successfully disconnected wallet');\n      return { disconnected: true };\n    } catch (error) {\n      logger.error(LOG_SYSTEM, 'Failed to disconnect wallet:', error);\n      return {\n        disconnected: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the current wallet connection status\n   * @returns The current connection status\n   */\n  public getWalletConnectionStatus(): StellarWalletConnectionStatus {\n    const isConnected = this.currentAddress !== null;\n    const chainId = this.networkConfig?.id || 'stellar-testnet';\n\n    return {\n      isConnected,\n      isConnecting: false, // We don't track intermediate connecting state yet\n      isDisconnected: !isConnected,\n      isReconnecting: false,\n      status: isConnected ? 'connected' : 'disconnected',\n      address: this.currentAddress || undefined,\n      walletId: this.currentWalletId || undefined,\n      chainId,\n    };\n  }\n\n  /**\n   * Subscribes to wallet connection status changes\n   * @param callback - Function to call when connection status changes\n   * @returns A function to unsubscribe from the changes\n   */\n  public onWalletConnectionChange(callback: StellarConnectionStatusListener): () => void {\n    if (!this.initialized) {\n      logger.warn(LOG_SYSTEM, 'onWalletConnectionChange called before initialization. No-op.');\n      return () => {};\n    }\n\n    this.connectionStatusListeners.add(callback);\n    logger.info(LOG_SYSTEM, 'Connection status listener added');\n\n    // Return unsubscribe function\n    return () => {\n      this.connectionStatusListeners.delete(callback);\n      logger.debug(LOG_SYSTEM, 'Connection status listener removed');\n    };\n  }\n\n  /**\n   * Manually updates the cached connection address and wallet ID\n   * This is used when the connection status is determined externally\n   * @param address - The wallet address or null\n   * @param walletId - The wallet ID or null\n   */\n  public updateConnectionStatus(address: string | null, walletId?: string | null): void {\n    const prevStatus = this.getWalletConnectionStatus();\n\n    this.currentAddress = address;\n    this.currentWalletId = walletId ?? null;\n\n    const newStatus = this.getWalletConnectionStatus();\n    this.notifyConnectionListeners(newStatus, prevStatus);\n  }\n\n  /**\n   * Gets the active StellarWalletsKit instance for advanced operations\n   * @returns The active kit or null if not available\n   */\n  public getActiveKit(): StellarWalletsKit | null {\n    return this.activeStellarKit || this.defaultInstanceKit;\n  }\n\n  /**\n   * Signs a transaction using the connected wallet\n   * @param xdr - The transaction XDR to sign\n   * @param address - The account address\n   * @returns Promise resolving to signed transaction\n   */\n  public async signTransaction(xdr: string, address: string): Promise<{ signedTxXdr: string }> {\n    if (!this.initialized) {\n      throw new Error('Wallet implementation not initialized');\n    }\n\n    const kit = this.getKitToUse();\n    const networkPassphrase = this.getWalletNetwork();\n\n    logger.info(LOG_SYSTEM, 'Signing transaction with wallet');\n\n    return await kit.signTransaction(xdr, {\n      address,\n      networkPassphrase,\n    });\n  }\n\n  /**\n   * Notifies all connection listeners of status changes\n   */\n  private notifyConnectionListeners(\n    currentStatus: StellarWalletConnectionStatus,\n    previousStatus: StellarWalletConnectionStatus\n  ): void {\n    this.connectionStatusListeners.forEach((listener) => {\n      try {\n        listener(currentStatus, previousStatus);\n      } catch (error) {\n        logger.error(LOG_SYSTEM, 'Error in connection status listener:', String(error));\n      }\n    });\n  }\n\n  /**\n   * Cleanup resources when implementation is no longer needed\n   */\n  public cleanup(): void {\n    if (this.unsubscribeFromStatusChanges) {\n      this.unsubscribeFromStatusChanges();\n      this.unsubscribeFromStatusChanges = undefined;\n    }\n    this.connectionStatusListeners.clear();\n    logger.info(LOG_SYSTEM, 'Cleanup completed');\n  }\n}\n","import { allowAllModules, StellarWalletsKit, WalletNetwork } from '@creit.tech/stellar-wallets-kit';\n\nimport type {\n  StellarNetworkConfig,\n  UiKitConfiguration,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nexport interface StellarUiKitManagerState {\n  isConfigured: boolean;\n  isInitializing: boolean;\n  hasConfigError: boolean;\n  error: Error | null;\n  lastConfigError: Error | null;\n  currentFullUiKitConfig: UiKitConfiguration | null;\n  stellarKitProvider: StellarWalletsKit | null;\n  kitProviderComponent: React.ComponentType<{ children: React.ReactNode }> | null;\n  isKitAssetsLoaded: boolean;\n  networkConfig: StellarNetworkConfig | null;\n}\n\nconst getInitialState = (): StellarUiKitManagerState => ({\n  isConfigured: false,\n  isInitializing: false,\n  hasConfigError: false,\n  error: null,\n  lastConfigError: null,\n  currentFullUiKitConfig: null,\n  stellarKitProvider: null,\n  kitProviderComponent: null,\n  isKitAssetsLoaded: false,\n  networkConfig: null,\n});\n\nlet state: StellarUiKitManagerState = getInitialState();\n\ninterface StellarUiKitManagerListener {\n  (state: StellarUiKitManagerState): void;\n}\n\nconst listeners: Set<StellarUiKitManagerListener> = new Set();\n\nfunction notifyListeners() {\n  listeners.forEach((listener) => listener(state));\n}\n\nfunction subscribe(listener: StellarUiKitManagerListener): () => void {\n  listeners.add(listener);\n\n  // Call the listener immediately with the current state\n  listener(state);\n\n  // Return unsubscribe function\n  return () => {\n    listeners.delete(listener);\n  };\n}\n\nfunction getState(): StellarUiKitManagerState {\n  return state;\n}\n\nfunction setNetworkConfig(config: StellarNetworkConfig): void {\n  state = {\n    ...state,\n    networkConfig: config,\n  };\n  notifyListeners();\n}\n\nfunction getWalletNetwork(networkConfig: StellarNetworkConfig | null): WalletNetwork {\n  if (!networkConfig) {\n    logger.warn('StellarUiKitManager', 'No network config available, defaulting to TESTNET');\n    return WalletNetwork.TESTNET;\n  }\n\n  return networkConfig.type === 'mainnet' ? WalletNetwork.PUBLIC : WalletNetwork.TESTNET;\n}\n\nasync function configure(newFullUiKitConfig: UiKitConfiguration): Promise<void> {\n  logger.info(\n    'StellarUiKitManager:configure',\n    'Configuring UI kit. New config:',\n    newFullUiKitConfig\n  );\n\n  const oldKitName = state.currentFullUiKitConfig?.kitName;\n  const newKitName = newFullUiKitConfig.kitName;\n  const kitChanged = oldKitName !== newKitName;\n\n  state = {\n    ...state,\n    isInitializing: true,\n    error: null,\n    currentFullUiKitConfig: newFullUiKitConfig,\n    kitProviderComponent: kitChanged ? null : state.kitProviderComponent,\n    isKitAssetsLoaded: kitChanged ? false : state.isKitAssetsLoaded,\n  };\n  notifyListeners();\n\n  try {\n    const walletNetwork = getWalletNetwork(state.networkConfig);\n\n    if (newKitName === 'stellar-wallets-kit') {\n      // Initialize the Stellar Wallets Kit with its built-in UI components\n      const kit = new StellarWalletsKit({\n        network: walletNetwork,\n        selectedWalletId: undefined,\n        modules: allowAllModules(), // Use all available wallet modules\n      });\n\n      state.stellarKitProvider = kit;\n      // Stellar Wallets Kit provides its own modal UI that can be opened with kit.openModal()\n      // We don't need to provide custom components when using the built-in UI\n      state.kitProviderComponent = null;\n      state.isKitAssetsLoaded = true;\n      state.error = null;\n      logger.info(\n        'StellarUiKitManager:configure',\n        'Stellar Wallets Kit configured with built-in UI and all wallet modules'\n      );\n    } else if (newKitName === 'custom' || !newKitName) {\n      // Initialize the Stellar Wallets Kit for custom UI mode\n      const kit = new StellarWalletsKit({\n        network: walletNetwork,\n        selectedWalletId: undefined,\n        modules: allowAllModules(),\n      });\n\n      state.stellarKitProvider = kit;\n      state.kitProviderComponent = null;\n      state.isKitAssetsLoaded = true;\n      state.error = null;\n      logger.info(\n        'StellarUiKitManager:configure',\n        'Stellar Wallets Kit configured for custom UI components'\n      );\n    } else if (newKitName === 'none') {\n      // No wallet UI kit\n      state.stellarKitProvider = null;\n      state.kitProviderComponent = null;\n      state.isKitAssetsLoaded = false;\n      state.error = null;\n      logger.info('StellarUiKitManager:configure', 'UI kit set to \"none\", no wallet UI provided');\n    } else {\n      throw new Error(`Unknown UI kit name: ${newKitName}`);\n    }\n\n    state = {\n      ...state,\n      isConfigured: true,\n      isInitializing: false,\n      hasConfigError: false,\n      error: null,\n    };\n    notifyListeners();\n  } catch (error) {\n    logger.error('StellarUiKitManager:configure', 'Failed to configure UI kit:', error);\n    state = {\n      ...state,\n      isInitializing: false,\n      hasConfigError: true,\n      error: error instanceof Error ? error : new Error('Failed to configure UI kit'),\n      lastConfigError: error instanceof Error ? error : new Error('Failed to configure UI kit'),\n      isConfigured: false,\n    };\n    notifyListeners();\n    throw error;\n  }\n}\n\nexport const stellarUiKitManager = {\n  configure,\n  getState,\n  subscribe,\n  setNetworkConfig,\n};\n","import type { UiKitConfiguration } from '@openzeppelin/contracts-ui-builder-types';\n\n/**\n * Generates the content for a `stellar-wallets-kit.config.ts` file for an exported project.\n * This creates a configuration wrapper that can be used to initialize the Stellar Wallets Kit.\n *\n * @param userConfig - The user-provided configuration from the builder app.\n * @returns A string containing the formatted TypeScript code for the config file.\n */\nexport function generateStellarWalletsKitConfigFile(\n  userConfig: UiKitConfiguration['kitConfig']\n): string {\n  const config = (userConfig || {}) as Record<string, unknown>;\n\n  // Extract user-provided configuration options\n  const appName = (config.appName as string) || 'My Stellar App';\n  const network = (config.network as string) || 'TESTNET';\n  const walletConnectProjectId = (config.walletConnectProjectId as string) || '';\n  const modalTitle = (config.modalTitle as string) || `Connect to ${appName}`;\n  const buttonText = (config.buttonText as string) || 'Connect Wallet';\n\n  const fileContent = `// Stellar Wallets Kit configuration for your exported application\n// This file is used ONLY in the exported app, not in the builder app preview\n\nimport { \n  StellarWalletsKit, \n  WalletNetwork, \n  allowAllModules,\n  WalletConnectModule,\n  WalletConnectAllowedMethods\n} from '@creit.tech/stellar-wallets-kit';\n\n/**\n * Stellar Wallets Kit configuration wrapper\n * \n * The kit supports multiple wallets including:\n * - Freighter\n * - xBull  \n * - Ledger\n * - Trezor\n * - WalletConnect\n * - And more...\n */\nexport const stellarWalletsKitConfig = {\n  // App information\n  appName: '${appName}',\n  \n  // Network configuration (TESTNET or PUBLIC/MAINNET)\n  network: WalletNetwork.${network === 'MAINNET' || network === 'PUBLIC' ? 'PUBLIC' : 'TESTNET'},\n  \n  // UI customization\n  buttonText: '${buttonText}',\n  modalTitle: '${modalTitle}',\n  \n  // WalletConnect configuration\n  ${walletConnectProjectId ? `walletConnectProjectId: '${walletConnectProjectId}',` : \"// walletConnectProjectId: 'YOUR_PROJECT_ID', // Get yours at https://cloud.walletconnect.com\"}\n};\n\n/**\n * Creates and configures a StellarWalletsKit instance\n * @returns Configured StellarWalletsKit instance\n */\nexport function createStellarWalletsKit(): StellarWalletsKit {\n  const modules = [\n    ...allowAllModules(),\n    ${\n      walletConnectProjectId\n        ? `\n    // WalletConnect module with custom configuration\n    new WalletConnectModule({\n      url: window.location.origin,\n      projectId: stellarWalletsKitConfig.walletConnectProjectId,\n      method: WalletConnectAllowedMethods.SIGN,\n      description: stellarWalletsKitConfig.appName,\n      name: stellarWalletsKitConfig.appName,\n      icons: [],\n      network: stellarWalletsKitConfig.network,\n    }),`\n        : ''\n    }\n  ];\n\n  return new StellarWalletsKit({\n    network: stellarWalletsKitConfig.network,\n    modules,\n  });\n}\n\nexport default stellarWalletsKitConfig;`;\n\n  return fileContent;\n}\n","import type { UiKitConfiguration } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { generateStellarWalletsKitConfigFile } from './config-generator';\n\n/**\n * Generates the specific configuration file for Stellar Wallets Kit during project export.\n *\n * @param uiKitConfig The full UI kit configuration object from the builder.\n * @returns A record containing the file path and its generated content.\n */\nexport function generateStellarWalletsKitExportables(\n  uiKitConfig: UiKitConfiguration\n): Record<string, string> {\n  const filePath = 'src/config/wallet/stellar-wallets-kit.config.ts';\n  const content =\n    uiKitConfig.customCode || generateStellarWalletsKitConfigFile(uiKitConfig.kitConfig);\n\n  return { [filePath]: content };\n}\n","import { useEffect, useRef } from 'react';\n\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { stellarUiKitManager } from './stellarUiKitManager';\n\n/**\n * Creates a Stellar Wallets Kit ConnectButton component.\n * This renders the kit's native button UI which includes built-in connected state,\n * copy address functionality, and disconnect options.\n *\n * @returns A React component that uses Stellar Wallets Kit's native button\n */\nexport function StellarWalletsKitConnectButton() {\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const state = stellarUiKitManager.getState();\n    const kit = state.stellarKitProvider;\n\n    if (!kit || !containerRef.current) {\n      logger.error(\n        'StellarWalletsKitConnectButton',\n        'Kit not initialized or container not available'\n      );\n      return;\n    }\n\n    // Create the native button provided by Stellar Wallets Kit\n    kit.createButton({\n      container: containerRef.current,\n      onConnect: ({ address }) => {\n        logger.info('StellarWalletsKitConnectButton', `Connected to address: ${address}`);\n      },\n      onDisconnect: () => {\n        logger.info('StellarWalletsKitConnectButton', 'Disconnected');\n      },\n      buttonText: 'Connect Wallet',\n    });\n\n    // Cleanup: remove the button when component unmounts\n    return () => {\n      if (typeof kit.removeButton === 'function') {\n        try {\n          kit.removeButton();\n        } catch (error) {\n          logger.warn('StellarWalletsKitConnectButton', 'Error removing button:', error);\n        }\n      } else {\n        logger.warn(\n          'StellarWalletsKitConnectButton',\n          'removeButton method not available on kit instance'\n        );\n      }\n    };\n  }, []);\n\n  return <div ref={containerRef} className=\"stellar-native-button\" />;\n}\n","import type {\n  EoaExecutionConfig,\n  ExecutionConfig,\n  ExecutionMethodDetail,\n  MultisigExecutionConfig,\n  RelayerExecutionConfig,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { validateEoaConfig, validateRelayerConfig } from '../validation';\nimport { StellarWalletConnectionStatus } from '../wallet/types';\n\nconst SYSTEM_LOG_TAG = 'adapter-stellar-execution-config';\n\n/**\n * Returns details for execution methods supported by the Stellar adapter.\n */\nexport async function getStellarSupportedExecutionMethods(): Promise<ExecutionMethodDetail[]> {\n  logger.warn(\n    'adapter-stellar-execution-config',\n    'getStellarSupportedExecutionMethods is using placeholder implementation.'\n  );\n  // TODO: Implement actual supported methods for Stellar (e.g., EOA, Relayer).\n  return Promise.resolve([\n    {\n      type: 'eoa',\n      name: 'EOA (External Account)',\n      description: 'Execute using a standard Stellar account address.',\n    },\n    {\n      type: 'relayer',\n      name: 'OpenZeppelin Relayer',\n      description: 'Execute via a OpenZeppelin open source transaction relayer service.',\n      disabled: false,\n    },\n    {\n      type: 'multisig',\n      name: 'Stellar Multisig', // Example for future\n      description: 'Execute via a Stellar multisignature configuration.',\n      disabled: true,\n    },\n  ]);\n}\n\n/**\n * Validates Multisig execution configuration (placeholder).\n */\nasync function _validateMultisigConfig(\n  _config: MultisigExecutionConfig,\n  _walletStatus: StellarWalletConnectionStatus\n): Promise<true | string> {\n  logger.info(SYSTEM_LOG_TAG, 'Multisig execution config validation: Not yet fully implemented.');\n  // TODO: Add validation for Stellar multisig configuration, required signers, etc.\n  return true; // Placeholder\n}\n\n/**\n * Validates the complete execution configuration object against the\n * requirements and capabilities of the Stellar adapter.\n */\nexport async function validateStellarExecutionConfig(\n  config: ExecutionConfig,\n  walletStatus: StellarWalletConnectionStatus\n): Promise<true | string> {\n  logger.info(SYSTEM_LOG_TAG, 'Validating Stellar execution config:', { config, walletStatus });\n\n  switch (config.method) {\n    case 'eoa':\n      return validateEoaConfig(config as EoaExecutionConfig, walletStatus);\n    case 'relayer':\n      return validateRelayerConfig(config as RelayerExecutionConfig);\n    case 'multisig':\n      return _validateMultisigConfig(config as MultisigExecutionConfig, walletStatus);\n    default: {\n      const unknownMethod = (config as ExecutionConfig).method;\n      logger.warn(\n        SYSTEM_LOG_TAG,\n        `Unsupported execution method type encountered: ${unknownMethod}`\n      );\n      return `Unsupported execution method type: ${unknownMethod}`;\n    }\n  }\n}\n","import type {\n  StellarNetworkConfig,\n  UserRpcProviderConfig,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport {\n  appConfigService,\n  isValidUrl,\n  logger,\n  userRpcConfigService,\n} from '@openzeppelin/contracts-ui-builder-utils';\n\n/**\n * Builds a complete RPC URL from a user RPC provider configuration.\n * For Stellar (Soroban), this just returns the URL as-is since\n * users are providing complete RPC URLs including any API keys.\n *\n * @param config The user RPC provider configuration\n * @returns The RPC URL\n */\nexport function buildRpcUrl(config: UserRpcProviderConfig): string {\n  return config.url;\n}\n\n/**\n * Resolves the RPC URL for a given Stellar network configuration.\n * Priority order:\n * 1. User-provided RPC configuration (from UserRpcConfigService)\n * 2. RPC URL override from AppConfigService\n * 3. Default sorobanRpcUrl from the network configuration\n *\n * @param networkConfig - The Stellar network configuration.\n * @returns The resolved RPC URL string.\n * @throws If no RPC URL can be resolved (neither user config, override, nor default is present and valid).\n */\nexport function resolveRpcUrl(networkConfig: StellarNetworkConfig): string {\n  const logSystem = 'StellarRpcResolver';\n  const networkId = networkConfig.id;\n\n  // First priority: Check user-provided RPC configuration\n  const userRpcConfig = userRpcConfigService.getUserRpcConfig(networkId);\n  if (userRpcConfig) {\n    const userRpcUrl = buildRpcUrl(userRpcConfig);\n    if (isValidUrl(userRpcUrl)) {\n      logger.info(\n        logSystem,\n        `Using user-configured Soroban RPC URL for network ${networkId}: ${userRpcConfig.name || 'Custom'}`\n      );\n      return userRpcUrl;\n    } else {\n      logger.warn(\n        logSystem,\n        `User-configured Soroban RPC URL for ${networkId} is invalid: ${userRpcUrl}. Falling back.`\n      );\n    }\n  }\n\n  // Second priority: Check AppConfigService for an override\n  const rpcOverrideSetting = appConfigService.getRpcEndpointOverride(networkId);\n  let rpcUrlFromOverride: string | undefined;\n\n  if (typeof rpcOverrideSetting === 'string') {\n    rpcUrlFromOverride = rpcOverrideSetting;\n  } else if (typeof rpcOverrideSetting === 'object' && rpcOverrideSetting) {\n    // Check if it's a UserRpcProviderConfig\n    if ('url' in rpcOverrideSetting && 'isCustom' in rpcOverrideSetting) {\n      const userConfig = rpcOverrideSetting as UserRpcProviderConfig;\n      rpcUrlFromOverride = buildRpcUrl(userConfig);\n    } else if ('http' in rpcOverrideSetting) {\n      // It's an RpcEndpointConfig\n      rpcUrlFromOverride = rpcOverrideSetting.http;\n    }\n  }\n\n  if (rpcUrlFromOverride) {\n    logger.info(\n      logSystem,\n      `Using overridden Soroban RPC URL for network ${networkId}: ${rpcUrlFromOverride}`\n    );\n    if (isValidUrl(rpcUrlFromOverride)) {\n      return rpcUrlFromOverride;\n    } else {\n      logger.warn(\n        logSystem,\n        `Overridden Soroban RPC URL for ${networkId} is invalid: ${rpcUrlFromOverride}. Falling back.`\n      );\n    }\n  }\n\n  // Third priority: Fallback to the sorobanRpcUrl in the networkConfig\n  if (networkConfig.sorobanRpcUrl && isValidUrl(networkConfig.sorobanRpcUrl)) {\n    logger.debug(\n      logSystem,\n      `Using default Soroban RPC URL for network ${networkId}: ${networkConfig.sorobanRpcUrl}`\n    );\n    return networkConfig.sorobanRpcUrl;\n  }\n\n  logger.error(\n    logSystem,\n    `No valid Soroban RPC URL could be resolved for network ${networkId}. Checked user config, override, and networkConfig.sorobanRpcUrl.`\n  );\n  throw new Error(\n    `No valid Soroban RPC URL configured for network ${networkConfig.name} (ID: ${networkId}).`\n  );\n}\n\n/**\n * Validates an RPC endpoint configuration for Stellar networks.\n * @param rpcConfig - The RPC provider configuration to validate\n * @returns True if the configuration is valid, false otherwise\n */\nexport function validateStellarRpcEndpoint(rpcConfig: UserRpcProviderConfig): boolean {\n  try {\n    // Check if it's a valid URL (our validator already ensures HTTP/HTTPS)\n    if (!isValidUrl(rpcConfig.url)) {\n      logger.error('validateStellarRpcEndpoint', `Invalid RPC URL format: ${rpcConfig.url}`);\n      return false;\n    }\n\n    // Additional Stellar-specific validation could be added here\n    // For example, checking if the URL follows known provider patterns\n\n    return true;\n  } catch (error) {\n    logger.error('validateStellarRpcEndpoint', 'Error validating RPC endpoint:', error);\n    return false;\n  }\n}\n\n/**\n * Tests the connection to a Stellar (Soroban) RPC endpoint with a timeout.\n * Uses the Soroban RPC getHealth method to test connectivity.\n * @param rpcConfig - The RPC provider configuration to test\n * @param timeoutMs - Timeout in milliseconds (default: 5000ms)\n * @returns Connection test results including success status, latency, and any errors\n */\nexport async function testStellarRpcConnection(\n  rpcConfig: UserRpcProviderConfig,\n  timeoutMs: number = 5000\n): Promise<{\n  success: boolean;\n  latency?: number;\n  error?: string;\n}> {\n  if (!rpcConfig.url) {\n    return { success: false, error: 'Soroban RPC URL is required' };\n  }\n\n  // Create an AbortController for timeout\n  const controller = new AbortController();\n  const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n  try {\n    const startTime = Date.now();\n\n    // Use fetch to make a JSON-RPC call to test the connection\n    // Using getHealth method which is standard for Soroban RPC endpoints\n    const response = await fetch(rpcConfig.url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        jsonrpc: '2.0',\n        id: 1,\n        method: 'getHealth',\n      }),\n      signal: controller.signal,\n    });\n\n    if (!response.ok) {\n      return { success: false, error: `HTTP error: ${response.status}` };\n    }\n\n    const data = await response.json();\n    const latency = Date.now() - startTime;\n\n    // Check for JSON-RPC error\n    if (data.error) {\n      return {\n        success: false,\n        error: `Soroban RPC error: ${data.error.message || 'Unknown RPC error'}`,\n      };\n    }\n\n    // For Soroban RPC getHealth, a successful response should contain result\n    if (!data.result) {\n      // Try fallback method - getLatestLedger\n      return await testWithFallbackMethod(rpcConfig, controller.signal, startTime);\n    }\n\n    // Check if the health status indicates the service is healthy\n    const healthStatus = data.result.status;\n    if (healthStatus && healthStatus !== 'healthy') {\n      return {\n        success: false,\n        error: `Soroban RPC service unhealthy: ${healthStatus}`,\n        latency,\n      };\n    }\n\n    return { success: true, latency };\n  } catch (error) {\n    logger.error('testStellarRpcConnection', 'Connection test failed:', error);\n\n    // Check if the error was due to timeout\n    if (error instanceof Error && error.name === 'AbortError') {\n      return {\n        success: false,\n        error: `Connection timeout after ${timeoutMs}ms`,\n      };\n    }\n\n    // Try fallback method if primary test failed\n    try {\n      return await testWithFallbackMethod(rpcConfig, controller.signal, Date.now());\n    } catch {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : 'Connection failed',\n      };\n    }\n  } finally {\n    // Clear the timeout\n    clearTimeout(timeoutId);\n  }\n}\n\n/**\n * Fallback method to test Soroban RPC connection using getLatestLedger.\n * This is used when getHealth is not available or fails.\n */\nasync function testWithFallbackMethod(\n  rpcConfig: UserRpcProviderConfig,\n  signal: AbortSignal,\n  startTime: number\n): Promise<{\n  success: boolean;\n  latency?: number;\n  error?: string;\n}> {\n  const response = await fetch(rpcConfig.url, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({\n      jsonrpc: '2.0',\n      id: 1,\n      method: 'getLatestLedger',\n    }),\n    signal,\n  });\n\n  if (!response.ok) {\n    return { success: false, error: `HTTP error: ${response.status}` };\n  }\n\n  const data = await response.json();\n  const latency = Date.now() - startTime;\n\n  if (data.error) {\n    return {\n      success: false,\n      error: `Soroban RPC error: ${data.error.message || 'Unknown RPC error'}`,\n    };\n  }\n\n  // If we get a valid response with ledger info, the connection is working\n  if (data.result && data.result.sequence) {\n    return { success: true, latency };\n  }\n\n  return {\n    success: false,\n    error: 'Unexpected response format from Soroban RPC endpoint',\n  };\n}\n","import type { FieldType } from '@openzeppelin/contracts-ui-builder-types';\n\n/**\n * Stellar/Soroban-specific type mapping to default form field types.\n * Based on Soroban type system: https://developers.stellar.org/docs/learn/fundamentals/contract-development/types\n */\nexport const STELLAR_TYPE_TO_FIELD_TYPE: Record<string, FieldType> = {\n  // Address types\n  Address: 'blockchain-address',\n  MuxedAddress: 'blockchain-address',\n\n  // String types\n  ScString: 'text',\n  ScSymbol: 'text',\n\n  // Numeric types - unsigned integers\n  U32: 'number',\n  U64: 'number',\n  U128: 'number',\n  U256: 'number',\n\n  // Numeric types - signed integers\n  I32: 'number',\n  I64: 'number',\n  I128: 'number',\n  I256: 'number',\n\n  // Boolean type\n  Bool: 'checkbox',\n\n  // Byte types\n  Bytes: 'bytes',\n  DataUrl: 'bytes',\n\n  // Collection types\n  Vec: 'array',\n  Map: 'map',\n\n  // Complex types\n  Tuple: 'object',\n  Enum: 'select',\n\n  // Instance types (for compatibility)\n  Instance: 'object',\n};\n","import type { FieldType } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { isLikelyEnumType } from '../utils/type-detection';\nimport { STELLAR_TYPE_TO_FIELD_TYPE } from './constants';\n\n/**\n * Map a Stellar-specific parameter type to a default form field type.\n * @param parameterType The Stellar parameter type (e.g., 'U128', 'Address', 'Vec<U32>')\n * @returns The appropriate default form field type (e.g., 'number', 'blockchain-address', 'array')\n */\nexport function mapStellarParameterTypeToFieldType(parameterType: string): FieldType {\n  // Check if this is a Vec of custom/complex types (e.g., Vec<CustomStruct>)\n  const vecComplexMatch = parameterType.match(/^Vec<([^>]+)>$/);\n  if (vecComplexMatch) {\n    const innerType = vecComplexMatch[1];\n    // If inner type is not a primitive, treat as array of objects\n    if (!STELLAR_TYPE_TO_FIELD_TYPE[innerType]) {\n      return 'array-object';\n    }\n    return 'array';\n  }\n\n  // Check if this is a simple Vec type\n  if (parameterType === 'Vec' || parameterType.startsWith('Vec<')) {\n    return 'array';\n  }\n\n  // Check if this is a Map type\n  if (parameterType === 'Map' || parameterType.startsWith('Map<')) {\n    return 'map' as FieldType;\n  }\n\n  // Extract base type for generic types (e.g., Option<U32> -> U32)\n  const genericMatch = parameterType.match(/^(\\w+)<(.+)>$/);\n  if (genericMatch) {\n    const baseType = genericMatch[1];\n    // For Option and Result types, use the inner type\n    if (baseType === 'Option' || baseType === 'Result') {\n      const innerType = genericMatch[2];\n      return mapStellarParameterTypeToFieldType(innerType);\n    }\n  }\n\n  // Map known Stellar/Soroban types to appropriate field types\n  const mappedType = STELLAR_TYPE_TO_FIELD_TYPE[parameterType];\n  if (mappedType) {\n    return mappedType;\n  }\n\n  // Handle BytesN types (fixed-size byte arrays like BytesN<32> for hashes)\n  if (parameterType.startsWith('BytesN<')) {\n    return 'textarea'; // Users input as hex strings\n  }\n\n  // Handle custom types (structs, enums) - default to object unless it's clearly an enum\n  if (isLikelyEnumType(parameterType)) {\n    return 'select';\n  }\n\n  // Check if this looks like a custom struct (capitalized name and not a known primitive)\n  if (parameterType[0] && parameterType[0] === parameterType[0].toUpperCase()) {\n    // Check if it's not a known Stellar primitive type that starts with uppercase\n    const knownUppercaseTypes = [\n      'U32',\n      'U64',\n      'U128',\n      'U256',\n      'I32',\n      'I64',\n      'I128',\n      'I256',\n      'Bool',\n      'Bytes',\n    ];\n    if (\n      !knownUppercaseTypes.includes(parameterType) &&\n      !parameterType.startsWith('Vec') &&\n      !parameterType.startsWith('Map') &&\n      !parameterType.includes('Unknown')\n    ) {\n      // Don't treat Unknown* as structs\n      return 'object';\n    }\n  }\n\n  // Final fallback to text for truly unknown types\n  return 'text';\n}\n\n/**\n * Get field types compatible with a specific parameter type.\n * @param parameterType The Stellar parameter type.\n * @returns Array of compatible form field types.\n */\nexport function getStellarCompatibleFieldTypes(parameterType: string): FieldType[] {\n  // Handle Vec of complex types\n  const vecComplexMatch = parameterType.match(/^Vec<([^>]+)>$/);\n  if (vecComplexMatch) {\n    const innerType = vecComplexMatch[1];\n    if (!STELLAR_TYPE_TO_FIELD_TYPE[innerType]) {\n      return ['array-object', 'textarea', 'text'];\n    }\n    return ['array', 'textarea', 'text'];\n  }\n\n  // Handle Vec types - allow array field or fallback to textarea/text\n  if (parameterType === 'Vec' || parameterType.startsWith('Vec<')) {\n    return ['array', 'textarea', 'text'];\n  }\n\n  // Handle Map types\n  if (parameterType === 'Map' || parameterType.startsWith('Map<')) {\n    return ['map' as FieldType, 'textarea', 'text'];\n  }\n\n  // Handle generic types\n  const genericMatch = parameterType.match(/^(\\w+)<(.+)>$/);\n  if (genericMatch) {\n    const baseType = genericMatch[1];\n    if (baseType === 'Option' || baseType === 'Result') {\n      const innerType = genericMatch[2];\n      return getStellarCompatibleFieldTypes(innerType);\n    }\n  }\n\n  // Define compatibility map for known types\n  const compatibilityMap: Record<string, FieldType[]> = {\n    Address: ['blockchain-address', 'text'],\n\n    // Unsigned integers\n    U32: ['number', 'amount', 'text'],\n    U64: ['number', 'amount', 'text'],\n    U128: ['number', 'amount', 'text'],\n    U256: ['number', 'amount', 'text'],\n\n    // Signed integers\n    I32: ['number', 'amount', 'text'],\n    I64: ['number', 'amount', 'text'],\n    I128: ['number', 'amount', 'text'],\n    I256: ['number', 'amount', 'text'],\n\n    // Boolean\n    Bool: ['checkbox', 'select', 'radio', 'text'],\n\n    // String types\n    ScString: ['text', 'textarea', 'email', 'password'],\n    ScSymbol: ['text', 'textarea'],\n\n    // Byte types\n    Bytes: ['bytes', 'textarea', 'text'],\n    DataUrl: ['bytes', 'textarea', 'text'],\n    // BytesN types like BytesN<32> for hashes\n    'BytesN<32>': ['bytes', 'textarea', 'text'],\n\n    // Complex types\n    Tuple: ['object', 'textarea', 'text'],\n    Instance: ['object', 'textarea', 'text'],\n  };\n\n  // Check if we have a specific compatibility mapping\n  const compatibleTypes = compatibilityMap[parameterType];\n  if (compatibleTypes) {\n    return compatibleTypes;\n  }\n\n  // Handle enums\n  if (isLikelyEnumType(parameterType)) {\n    return ['enum', 'select', 'radio', 'text'];\n  }\n\n  // Handle custom types (assumed to be structs)\n  if (parameterType[0] && parameterType[0] === parameterType[0].toUpperCase()) {\n    // Check if it's not a known Stellar primitive type that starts with uppercase\n    const knownUppercaseTypes = [\n      'U32',\n      'U64',\n      'U128',\n      'U256',\n      'I32',\n      'I64',\n      'I128',\n      'I256',\n      'Bool',\n      'Bytes',\n    ];\n    if (\n      !knownUppercaseTypes.includes(parameterType) &&\n      !parameterType.startsWith('Vec') &&\n      !parameterType.startsWith('Map') &&\n      !parameterType.includes('Unknown')\n    ) {\n      // Don't treat Unknown* as structs\n      return ['object', 'textarea', 'text'];\n    }\n  }\n\n  // Default fallback for truly unknown types\n  return ['text'];\n}\n","import { xdr } from '@stellar/stellar-sdk';\nimport { startCase } from 'lodash';\n\nimport type {\n  ContractSchema,\n  FieldType,\n  FieldValidation,\n  FieldValue,\n  FormFieldType,\n  FunctionParameter,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { getDefaultValueForType, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { extractMapTypes, extractVecElementType } from '../utils/safe-type-parser';\nimport { isLikelyEnumType } from '../utils/type-detection';\nimport { extractEnumVariants, isEnumType, type EnumMetadata } from './enum-metadata';\nimport { mapStellarParameterTypeToFieldType } from './type-mapper';\n\n/**\n * Get default validation rules for a parameter type.\n * Only includes serializable validation rules - no custom functions.\n */\nfunction getDefaultValidationForType(): FieldValidation {\n  return { required: true };\n}\n\n/**\n * Generate default field configuration for a Stellar function parameter.\n */\nexport function generateStellarDefaultField<T extends FieldType = FieldType>(\n  parameter: FunctionParameter,\n  contractSchema?: ContractSchema\n): FormFieldType<T> {\n  // Extract spec entries from contract schema metadata if available\n  const specEntries = contractSchema?.metadata?.specEntries as xdr.ScSpecEntry[] | undefined;\n  const fieldType = mapStellarParameterTypeToFieldType(parameter.type) as T;\n\n  // Debug logging for unmapped types\n  if (parameter.type === 'unknown') {\n    logger.warn(\n      'adapter-stellar',\n      `[generateStellarDefaultField] Parameter \"${parameter.name}\" has type \"unknown\"`\n    );\n  }\n\n  let enumMetadata: EnumMetadata | null = null;\n  let finalFieldType = fieldType;\n  let options: { label: string; value: string }[] | undefined;\n\n  // Check if this parameter is an enum type and extract metadata\n  if (isLikelyEnumType(parameter.type)) {\n    if (specEntries && isEnumType(specEntries, parameter.type)) {\n      // We have spec entries, extract full metadata\n      enumMetadata = extractEnumVariants(specEntries, parameter.type);\n      if (enumMetadata) {\n        if (enumMetadata.isUnitOnly) {\n          // Unit-only enums can use select/radio with options\n          finalFieldType = 'select' as T;\n          options = enumMetadata.variants.map((variant) => ({\n            label: variant.name,\n            value: variant.type === 'integer' ? variant.value!.toString() : variant.name,\n          }));\n        } else {\n          // Tagged enums with payloads use the composite enum field\n          finalFieldType = 'enum' as T;\n        }\n      }\n    } else {\n      // No spec entries available, but type looks like enum - use enum field as fallback\n      finalFieldType = 'enum' as T;\n      // Create minimal enum metadata for fallback\n      enumMetadata = {\n        name: parameter.type,\n        variants: [], // Empty variants will trigger fallback UI\n        isUnitOnly: false,\n      };\n    }\n  }\n\n  const baseField: FormFieldType<T> = {\n    id: `field-${Math.random().toString(36).substring(2, 9)}`,\n    name: parameter.name || parameter.type, // Use type if name missing\n    label: startCase(parameter.displayName || parameter.name || parameter.type),\n    type: finalFieldType,\n    placeholder: enumMetadata\n      ? `Select ${parameter.displayName || parameter.name || parameter.type}`\n      : `Enter ${parameter.displayName || parameter.name || parameter.type}`,\n    helperText: parameter.description || '',\n    defaultValue: getDefaultValueForType(finalFieldType) as FieldValue<T>,\n    validation: getDefaultValidationForType(),\n    width: 'full',\n    options,\n  };\n\n  // For array types, provide element type information\n  if (fieldType === 'array') {\n    const elementType = extractVecElementType(parameter.type);\n    if (elementType) {\n      const elementFieldType = mapStellarParameterTypeToFieldType(elementType);\n\n      // Add array-specific properties\n      const arrayField = {\n        ...baseField,\n        elementType: elementFieldType,\n        elementFieldConfig: {\n          type: elementFieldType,\n          validation: { required: true },\n          placeholder: `Enter ${elementType}`,\n        },\n      };\n      return arrayField;\n    }\n  }\n\n  // For map types, provide key and value type information\n  if (fieldType === ('map' as FieldType)) {\n    const mapTypes = extractMapTypes(parameter.type);\n    if (mapTypes) {\n      const keyFieldType = mapStellarParameterTypeToFieldType(mapTypes.keyType);\n      const valueFieldType = mapStellarParameterTypeToFieldType(mapTypes.valueType);\n\n      // Add map-specific properties\n      const mapField = {\n        ...baseField,\n        mapMetadata: {\n          keyType: keyFieldType,\n          valueType: valueFieldType,\n          keyFieldConfig: {\n            type: keyFieldType,\n            validation: { required: true },\n            placeholder: `Enter ${mapTypes.keyType}`,\n            originalParameterType: mapTypes.keyType,\n          },\n          valueFieldConfig: {\n            type: valueFieldType,\n            validation: { required: true },\n            placeholder: `Enter ${mapTypes.valueType}`,\n            originalParameterType: mapTypes.valueType,\n          },\n        },\n        validation: {\n          ...getDefaultValidationForType(),\n          min: 0,\n          // No max limit - users can add as many map entries as needed\n        },\n      };\n      return mapField;\n    }\n  }\n\n  // Preserve components for object and array-object types\n  if (parameter.components && (fieldType === 'object' || fieldType === 'array-object')) {\n    const result = {\n      ...baseField,\n      components: parameter.components,\n    };\n    return result;\n  }\n\n  // Add enum metadata if available\n  if (enumMetadata) {\n    const result = {\n      ...baseField,\n      enumMetadata,\n    };\n    return result;\n  }\n\n  return baseField;\n}\n","import { xdr } from '@stellar/stellar-sdk';\n\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n// Import the type extraction utility from the shared utils module\nimport { extractSorobanTypeFromScSpec } from '../utils/type-detection';\n\n/**\n * Represents a single enum variant with its type and optional payload information\n */\nexport interface EnumVariant {\n  /** Name of the variant (e.g., 'One', 'Two', 'Three') */\n  name: string;\n  /** Type of variant: 'void' for unit variants, 'tuple' for variants with payload, 'integer' for numeric enums */\n  type: 'void' | 'tuple' | 'integer';\n  /** For tuple variants: array of payload type names (e.g., ['U32', 'ScString']) */\n  payloadTypes?: string[];\n  /** For integer variants: the numeric value */\n  value?: number;\n}\n\n/**\n * Metadata about an enum extracted from Stellar contract spec\n */\nexport interface EnumMetadata {\n  /** Name of the enum type */\n  name: string;\n  /** Array of variants in the enum */\n  variants: EnumVariant[];\n  /** True if all variants are unit variants (no payloads), suitable for simple select/radio */\n  isUnitOnly: boolean;\n}\n\n/**\n * Extracts enum variant metadata from Stellar contract spec entries\n *\n * @param entries Array of ScSpecEntry from contract spec\n * @param enumName Name of the enum type to extract variants for\n * @returns EnumMetadata if found, null if not found or not an enum\n */\nexport function extractEnumVariants(\n  entries: xdr.ScSpecEntry[],\n  enumName: string\n): EnumMetadata | null {\n  try {\n    // Find the entry for the requested enum name\n    const entry = entries.find((e) => {\n      try {\n        return e.value().name().toString() === enumName;\n      } catch {\n        return false;\n      }\n    });\n\n    if (!entry) {\n      return null;\n    }\n\n    const entryKind = entry.switch();\n\n    // Handle UDT Union (tagged union enum like DemoEnum { One, Two(u32), Three(String) })\n    if (entryKind.value === xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0().value) {\n      const unionUdt = entry.udtUnionV0();\n      const cases = unionUdt.cases();\n      const variants: EnumVariant[] = [];\n      let isUnitOnly = true;\n\n      for (const caseEntry of cases) {\n        const caseKind = caseEntry.switch();\n\n        if (caseKind.value === xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value) {\n          // Void case (unit variant)\n          const voidCase = caseEntry.voidCase();\n          variants.push({\n            name: voidCase.name().toString(),\n            type: 'void',\n          });\n        } else if (\n          caseKind.value === xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value\n        ) {\n          // Tuple case (variant with payload)\n          const tupleCase = caseEntry.tupleCase();\n          const payloadTypes = tupleCase\n            .type()\n            .map((typeDef) => extractSorobanTypeFromScSpec(typeDef));\n\n          variants.push({\n            name: tupleCase.name().toString(),\n            type: 'tuple',\n            payloadTypes,\n          });\n          isUnitOnly = false;\n        }\n      }\n\n      return {\n        name: enumName,\n        variants,\n        isUnitOnly,\n      };\n    }\n\n    // Handle UDT Enum (integer enum like Priority { Low = 0, Medium = 1, High = 2 })\n    if (entryKind.value === xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0().value) {\n      const enumUdt = entry.udtEnumV0();\n      const cases = enumUdt.cases();\n      const variants: EnumVariant[] = [];\n\n      for (const caseEntry of cases) {\n        variants.push({\n          name: caseEntry.name().toString(),\n          type: 'integer',\n          value: caseEntry.value(),\n        });\n      }\n\n      return {\n        name: enumName,\n        variants,\n        isUnitOnly: true, // Integer enums are considered unit-only for UI purposes\n      };\n    }\n\n    return null;\n  } catch (error) {\n    logger.error('extractEnumVariants', `Failed to extract enum variants for ${enumName}:`, error);\n    return null;\n  }\n}\n\n/**\n * Checks if a parameter type name refers to a user-defined enum/union type\n * by looking for it in the contract spec entries\n *\n * @param entries Array of ScSpecEntry from contract spec\n * @param typeName Name of the type to check\n * @returns true if the type is a UDT enum or union\n */\nexport function isEnumType(entries: xdr.ScSpecEntry[], typeName: string): boolean {\n  try {\n    const entry = entries.find((e) => {\n      try {\n        const entryName = e.value().name().toString();\n        return entryName === typeName;\n      } catch {\n        return false;\n      }\n    });\n\n    if (!entry) {\n      return false;\n    }\n\n    const entryKind = entry.switch();\n    const isEnum =\n      entryKind.value === xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0().value ||\n      entryKind.value === xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0().value;\n\n    return isEnum;\n  } catch (error) {\n    logger.error('isEnumType', `Failed to check if ${typeName} is enum:`, error);\n    return false;\n  }\n}\n","import { Address, xdr } from '@stellar/stellar-sdk';\n\nimport type {\n  ContractSchema,\n  EnumValue,\n  FormFieldType,\n  FunctionParameter,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { isEnumValue } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { extractEnumVariants, isEnumType } from '../mapping/enum-metadata';\nimport { parseStellarInput } from '../transform';\n\n/**\n * Stellar transaction data structure that will be passed to signAndBroadcast\n */\nexport interface StellarTransactionData {\n  contractAddress: string;\n  functionName: string;\n  args: unknown[];\n  argTypes: string[]; // Parameter types for nativeToScVal type hints\n  argSchema?: FunctionParameter[]; // Full parameter schema with struct field info\n  transactionOptions: Record<string, unknown>;\n}\n\n/**\n * Formats transaction data for Stellar chains based on parsed inputs.\n *\n * @param contractSchema The contract schema.\n * @param functionId The ID of the function being called.\n * @param submittedInputs The raw data submitted from the form.\n * @param fields The fields of the form schema.\n * @returns The formatted data payload suitable for signAndBroadcast.\n */\nexport function formatStellarTransactionData(\n  contractSchema: ContractSchema,\n  functionId: string,\n  submittedInputs: Record<string, unknown>,\n  fields: FormFieldType[]\n): StellarTransactionData {\n  logger.info(\n    'formatStellarTransactionData',\n    `Formatting Stellar transaction data for function: ${functionId}`\n  );\n\n  // --- Step 1: Determine Argument Order --- //\n  const functionDetails = contractSchema.functions.find((fn) => fn.id === functionId);\n  if (!functionDetails) {\n    throw new Error(`Function definition for ${functionId} not found in provided contract schema.`);\n  }\n  const expectedArgs = functionDetails.inputs;\n\n  // --- Step 2: Iterate and Select Values --- //\n\n  const orderedRawValues: unknown[] = [];\n  for (const expectedArg of expectedArgs) {\n    const fieldConfig = fields.find((field: FormFieldType) => field.name === expectedArg.name);\n    if (!fieldConfig) {\n      throw new Error(`Configuration missing for argument: ${expectedArg.name} in provided fields`);\n    }\n    let value: unknown;\n    if (fieldConfig.isHardcoded) {\n      // FIX: If hardcoded value is undefined but we have submitted input, use submitted input instead\n      // This handles cases where fields were incorrectly saved with undefined hardcoded values\n      if (fieldConfig.hardcodedValue === undefined && fieldConfig.name in submittedInputs) {\n        logger.warn(\n          'formatStellarTransactionData',\n          `Field '${fieldConfig.name}' is hardcoded with undefined value but has submitted input. Using submitted input instead.`\n        );\n        value = submittedInputs[fieldConfig.name];\n      } else {\n        value = fieldConfig.hardcodedValue;\n      }\n    } else if (fieldConfig.isHidden) {\n      throw new Error(`Field '${fieldConfig.name}' cannot be hidden without being hardcoded.`);\n    } else {\n      if (!(fieldConfig.name in submittedInputs)) {\n        throw new Error(`Missing submitted input for required field: ${fieldConfig.name}`);\n      }\n      value = submittedInputs[fieldConfig.name];\n    }\n    orderedRawValues.push(value);\n  }\n\n  // --- Step 3: Parse/Transform Values using the imported parser --- //\n  const transformedArgs = expectedArgs.map((param, index) => {\n    let valueToParse = orderedRawValues[index];\n\n    // Handle enum values - process payload types using enum metadata\n    if (isEnumValue(valueToParse)) {\n      const specEntries = contractSchema.metadata?.specEntries as xdr.ScSpecEntry[] | undefined;\n      if (specEntries && isEnumType(specEntries, param.type)) {\n        const enumMetadata = extractEnumVariants(specEntries, param.type);\n        const enumValue = valueToParse as EnumValue;\n        if (enumMetadata && enumValue.values) {\n          // Find the variant metadata for the selected tag\n          const selectedVariant = enumMetadata.variants.find((v) => v.name === enumValue.tag);\n          if (selectedVariant && selectedVariant.payloadTypes) {\n            // Process each payload value according to its expected type\n            const processedValues = enumValue.values.map(\n              (rawValue: unknown, payloadIndex: number) => {\n                const expectedType = selectedVariant.payloadTypes![payloadIndex];\n                if (expectedType) {\n                  // Use parseStellarInput to convert the raw value to the proper type\n                  const processedValue = parseStellarInput(rawValue, expectedType);\n                  // Create SorobanArgumentValue structure for getScValFromArg\n                  return {\n                    type: expectedType,\n                    value: processedValue,\n                  };\n                }\n                return rawValue;\n              }\n            );\n            // Return the enum with processed payload values\n            valueToParse = { ...enumValue, values: processedValues };\n          }\n        }\n      }\n    }\n\n    // Handle array parameters - if the value is already an array and the type expects it,\n    // we can pass it directly. The Stellar input parser will handle the conversion.\n    if (\n      typeof param.type === 'string' &&\n      param.type.startsWith('Vec<') &&\n      Array.isArray(valueToParse)\n    ) {\n      // For Vec types, pass array as-is to parseStellarInput\n      return parseStellarInput(valueToParse, param.type);\n    }\n\n    return parseStellarInput(valueToParse, param.type);\n  });\n\n  // --- Step 4: Validate Contract Address --- //\n  if (!contractSchema.address) {\n    throw new Error('Contract address is missing or invalid in the provided schema.');\n  }\n\n  try {\n    Address.fromString(contractSchema.address);\n  } catch {\n    throw new Error('Contract address is missing or invalid in the provided schema.');\n  }\n\n  // --- Step 5: Prepare Return Object --- //\n  const stellarTransactionData: StellarTransactionData = {\n    contractAddress: contractSchema.address,\n    functionName: functionDetails.name,\n    args: transformedArgs,\n    argTypes: functionDetails.inputs.map((param) => param.type), // Include parameter types for ScVal conversion\n    argSchema: functionDetails.inputs, // Include full parameter schema with struct field definitions\n    transactionOptions: {\n      // Add any Stellar-specific transaction options here\n      // For example: fee, timeout, memo, etc.\n    },\n  };\n\n  logger.debug(\n    'formatStellarTransactionData',\n    'Formatted transaction data:',\n    stellarTransactionData\n  );\n\n  return stellarTransactionData;\n}\n","import { rpc as StellarRpc } from '@stellar/stellar-sdk';\n\nimport type {\n  ExecutionConfig,\n  StellarNetworkConfig,\n  TransactionStatusUpdate,\n  TxStatus,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger, userRpcConfigService } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { EoaExecutionStrategy } from './eoa';\nimport { ExecutionStrategy } from './execution-strategy';\nimport type { StellarTransactionData } from './formatter';\nimport { RelayerExecutionStrategy } from './relayer';\n\nconst SYSTEM_LOG_TAG = 'adapter-stellar';\n\n// --- Helper Functions ---\n\n/**\n * Get Soroban RPC Server instance with proper configuration\n */\nfunction getSorobanRpcServer(networkConfig: StellarNetworkConfig): StellarRpc.Server {\n  const customRpcConfig = userRpcConfigService.getUserRpcConfig(networkConfig.id);\n  const rpcUrl = customRpcConfig?.url || networkConfig.sorobanRpcUrl;\n\n  if (!rpcUrl) {\n    throw new Error(`No Soroban RPC URL available for network ${networkConfig.name}`);\n  }\n\n  // Allow HTTP for localhost development\n  const allowHttp = new URL(rpcUrl).hostname === 'localhost';\n\n  return new StellarRpc.Server(rpcUrl, {\n    allowHttp,\n  });\n}\n\n/**\n * Sign and broadcast a Stellar transaction using the strategy pattern.\n * This follows the same architecture as the EVM adapter.\n *\n * @param transactionData - The formatted transaction data from formatStellarTransactionData\n * @param executionConfig - Execution configuration specifying method (eoa, relayer, etc.)\n * @param networkConfig - Stellar network configuration\n * @param onStatusChange - Callback for status updates\n * @param runtimeApiKey - Optional session-only API key for methods like Relayer\n * @returns Promise resolving to the transaction hash\n */\nexport async function signAndBroadcastStellarTransaction(\n  transactionData: unknown,\n  executionConfig: ExecutionConfig,\n  networkConfig: StellarNetworkConfig,\n  onStatusChange?: (status: TxStatus, details: TransactionStatusUpdate) => void,\n  runtimeApiKey?: string\n): Promise<{ txHash: string }> {\n  logger.info(\n    SYSTEM_LOG_TAG,\n    'Stellar signAndBroadcast called with executionConfig:',\n    executionConfig\n  );\n\n  // Validate network config\n  if (!networkConfig || networkConfig.ecosystem !== 'stellar') {\n    throw new Error('Invalid Stellar network configuration provided.');\n  }\n\n  const txData = transactionData as StellarTransactionData;\n  let strategy: ExecutionStrategy;\n\n  // Select execution strategy based on method\n  switch (executionConfig.method) {\n    case 'eoa':\n      strategy = new EoaExecutionStrategy();\n      break;\n    case 'relayer':\n      strategy = new RelayerExecutionStrategy();\n      break;\n    case 'multisig':\n      // TODO: Implement MultisigExecutionStrategy when Stellar multisig support is added\n      throw new Error('Multisig execution method not yet implemented for Stellar.');\n    default: {\n      const exhaustiveCheck: never = executionConfig;\n      logger.error(SYSTEM_LOG_TAG, `Unsupported execution method encountered: ${exhaustiveCheck}`);\n      throw new Error(`Unsupported execution method: ${exhaustiveCheck}`);\n    }\n  }\n\n  return strategy.execute(\n    txData,\n    executionConfig,\n    networkConfig,\n    onStatusChange || (() => {}),\n    runtimeApiKey\n  );\n}\n\n/**\n * Waits for a transaction to be confirmed on the blockchain.\n *\n * @param txHash - The hash of the transaction to wait for.\n * @param networkConfig - The network configuration.\n * @returns A promise resolving to the final status and receipt/error.\n */\nexport async function waitForStellarTransactionConfirmation(\n  txHash: string,\n  networkConfig: StellarNetworkConfig\n): Promise<{\n  status: 'success' | 'error';\n  receipt?: unknown;\n  error?: Error;\n}> {\n  try {\n    const rpcServer = getSorobanRpcServer(networkConfig);\n    const MAX_ATTEMPTS = 20; // More attempts for confirmation\n    let attempts = 0;\n\n    while (attempts++ < MAX_ATTEMPTS) {\n      try {\n        const txResponse = await rpcServer.getTransaction(txHash);\n\n        switch (txResponse.status) {\n          case 'SUCCESS':\n            return {\n              status: 'success',\n              receipt: txResponse,\n            };\n          case 'FAILED':\n            return {\n              status: 'error',\n              error: new Error(`Transaction failed: ${JSON.stringify(txResponse.resultXdr)}`),\n            };\n          case 'NOT_FOUND':\n            // Continue waiting\n            break;\n          default:\n          // Continue waiting for other statuses\n        }\n\n        await new Promise((resolve) => setTimeout(resolve, 1000));\n      } catch (error) {\n        logger.error('waitForStellarTransactionConfirmation', `Attempt ${attempts} failed:`, error);\n      }\n    }\n\n    return {\n      status: 'error',\n      error: new Error('Transaction confirmation timeout'),\n    };\n  } catch (error) {\n    return {\n      status: 'error',\n      error: error as Error,\n    };\n  }\n}\n","import {\n  Account,\n  BASE_FEE,\n  Contract,\n  rpc as StellarRpc,\n  TransactionBuilder,\n} from '@stellar/stellar-sdk';\n\nimport type {\n  ExecutionConfig,\n  StellarNetworkConfig,\n  TransactionStatusUpdate,\n  TxStatus,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger, userRpcConfigService } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { valueToScVal } from '../transform/input-parser';\nimport { getStellarWalletConnectionStatus, signTransaction } from '../wallet/connection';\nimport { ExecutionStrategy } from './execution-strategy';\nimport type { StellarTransactionData } from './formatter';\n\nconst SYSTEM_LOG_TAG = 'EoaExecutionStrategy';\n\n/**\n * Get Soroban RPC Server instance with proper configuration\n */\nfunction getSorobanRpcServer(networkConfig: StellarNetworkConfig): StellarRpc.Server {\n  const customRpcConfig = userRpcConfigService.getUserRpcConfig(networkConfig.id);\n  const rpcUrl = customRpcConfig?.url || networkConfig.sorobanRpcUrl;\n\n  if (!rpcUrl) {\n    throw new Error(`No Soroban RPC URL available for network ${networkConfig.name}`);\n  }\n\n  // Allow HTTP for localhost development\n  const allowHttp = new URL(rpcUrl).hostname === 'localhost';\n\n  return new StellarRpc.Server(rpcUrl, {\n    allowHttp,\n  });\n}\n\n/**\n * Implements the ExecutionStrategy for a standard Externally Owned Account (EOA).\n * This strategy involves signing and broadcasting a transaction directly from the user's\n * connected Stellar wallet, which is the most common way of interacting with Stellar/Soroban contracts.\n */\nexport class EoaExecutionStrategy implements ExecutionStrategy {\n  public async execute(\n    transactionData: StellarTransactionData,\n    executionConfig: ExecutionConfig,\n    networkConfig: StellarNetworkConfig,\n    onStatusChange: (status: TxStatus, details: TransactionStatusUpdate) => void,\n    // runtimeApiKey is unused in EOA strategy but required by the interface\n    _runtimeApiKey?: string\n  ): Promise<{ txHash: string }> {\n    logger.info(SYSTEM_LOG_TAG, 'Using Stellar EOA execution strategy');\n\n    // Validate execution config is for EOA\n    if (executionConfig.method !== 'eoa') {\n      throw new Error(`Expected EOA execution config, got: ${executionConfig.method}`);\n    }\n\n    return this.executeEoaTransaction(transactionData, networkConfig, onStatusChange);\n  }\n\n  private async executeEoaTransaction(\n    txData: StellarTransactionData,\n    stellarConfig: StellarNetworkConfig,\n    onStatusChange: (status: TxStatus, details: TransactionStatusUpdate) => void\n  ): Promise<{ txHash: string }> {\n    try {\n      // --- Step 1: Get RPC Server and Connected Wallet Address --- //\n      const rpcServer = getSorobanRpcServer(stellarConfig);\n      const connectedAddress = this.getConnectedWalletAddress();\n\n      logger.info(SYSTEM_LOG_TAG, `Connected address: ${connectedAddress}`);\n\n      // --- Step 2: Get Account Details --- //\n      let sourceAccount: Account;\n      try {\n        const accountResponse = await rpcServer.getAccount(connectedAddress);\n        sourceAccount = new Account(connectedAddress, accountResponse.sequenceNumber());\n      } catch (error) {\n        throw new Error(`Failed to load account details: ${(error as Error).message}`);\n      }\n\n      // --- Step 3: Build Transaction --- //\n      const contract = new Contract(txData.contractAddress);\n\n      const transactionBuilder = new TransactionBuilder(sourceAccount, {\n        fee: BASE_FEE,\n        networkPassphrase: stellarConfig.networkPassphrase,\n      });\n\n      // Add the contract call operation (convert args to ScVal with comprehensive type support)\n      const scValArgs = txData.args.map((arg, index) => {\n        const argType = txData.argTypes[index];\n        const argSchema = txData.argSchema?.[index]; // Pass schema for struct field type resolution\n\n        return valueToScVal(arg, argType, argSchema);\n      });\n\n      transactionBuilder.addOperation(contract.call(txData.functionName, ...scValArgs));\n\n      // Set timeout (default 30 seconds)\n      transactionBuilder.setTimeout(30);\n\n      let transaction = transactionBuilder.build();\n\n      // --- Step 4: Simulate Transaction First --- //\n      try {\n        const simulation = await rpcServer.simulateTransaction(transaction);\n\n        if (StellarRpc.Api.isSimulationError(simulation)) {\n          throw new Error(`Transaction simulation failed: ${simulation.error}`);\n        }\n\n        // Prepare the transaction with simulation results\n        transaction = await rpcServer.prepareTransaction(transaction);\n      } catch (error) {\n        throw new Error(`Transaction simulation/preparation failed: ${(error as Error).message}`);\n      }\n\n      onStatusChange('pendingSignature', {});\n\n      // --- Step 5: Sign Transaction --- //\n      try {\n        const signResult = await signTransaction(transaction.toXDR(), connectedAddress);\n        const signedTx = TransactionBuilder.fromXDR(\n          signResult.signedTxXdr,\n          stellarConfig.networkPassphrase\n        );\n\n        // Type guard to ensure we have a regular Transaction, not a FeeBumpTransaction\n        if ('memo' in signedTx && 'sequence' in signedTx) {\n          transaction = signedTx;\n        } else {\n          throw new Error('Unexpected transaction type returned from signing');\n        }\n      } catch (error) {\n        if ((error as Error).message.includes('User declined')) {\n          throw new Error('Transaction was rejected by user');\n        }\n        throw new Error(`Failed to sign transaction: ${(error as Error).message}`);\n      }\n\n      onStatusChange('pendingConfirmation', {});\n\n      // --- Step 6: Send Transaction --- //\n      let sendResult: StellarRpc.Api.SendTransactionResponse;\n      try {\n        sendResult = await rpcServer.sendTransaction(transaction);\n      } catch (error) {\n        throw new Error(`Failed to broadcast transaction: ${(error as Error).message}`);\n      }\n\n      if (sendResult.status !== 'PENDING') {\n        throw new Error(`Transaction failed to submit: ${sendResult.status}`);\n      }\n\n      const txHash = sendResult.hash;\n      logger.info(SYSTEM_LOG_TAG, `Transaction submitted successfully: ${txHash}`);\n\n      // Status remains 'pendingConfirmation' during confirmation wait\n\n      // --- Step 7: Wait for Confirmation --- //\n      try {\n        let txResponse;\n        const MAX_ATTEMPTS = 10;\n        let attempts = 0;\n\n        while (attempts++ < MAX_ATTEMPTS && txResponse?.status !== 'SUCCESS') {\n          await new Promise((resolve) => setTimeout(resolve, 1000));\n          txResponse = await rpcServer.getTransaction(txHash);\n\n          switch (txResponse.status) {\n            case 'FAILED':\n              throw new Error(`Transaction failed: ${JSON.stringify(txResponse.resultXdr)}`);\n            case 'NOT_FOUND':\n              continue;\n            case 'SUCCESS':\n              break;\n            default:\n            // Continue waiting\n          }\n        }\n\n        if (attempts >= MAX_ATTEMPTS || txResponse?.status !== 'SUCCESS') {\n          logger.warn(SYSTEM_LOG_TAG, `Transaction confirmation timeout for ${txHash}`);\n          // Don't throw error, just return the hash - transaction might still succeed\n        }\n      } catch (confirmError) {\n        // Log the error but don't fail the transaction - it was already submitted\n        logger.error(SYSTEM_LOG_TAG, 'Error waiting for confirmation:', confirmError);\n      }\n\n      onStatusChange('success', {\n        txHash,\n      });\n\n      return { txHash };\n    } catch (error) {\n      const errorMessage = `Failed to execute Stellar EOA transaction: ${(error as Error).message}`;\n      logger.error(SYSTEM_LOG_TAG, errorMessage, error);\n\n      onStatusChange('error', {});\n\n      throw new Error(errorMessage);\n    }\n  }\n\n  private getConnectedWalletAddress(): string {\n    const connectionStatus = getStellarWalletConnectionStatus();\n\n    if (!connectionStatus.isConnected || !connectionStatus.address) {\n      throw new Error('No connected wallet found. Please connect your Stellar wallet first.');\n    }\n\n    return connectionStatus.address;\n  }\n}\n","import type { ISupportedWallet } from '@creit.tech/stellar-wallets-kit';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\n\nimport type { UiKitConfiguration } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport {\n  connectStellarWallet,\n  disconnectStellarWallet,\n  getStellarAvailableConnectors,\n  getStellarWalletConnectionStatus,\n  onStellarWalletConnectionChange,\n} from '../connection';\nimport {\n  StellarWalletContext,\n  type StellarWalletContextType,\n} from '../context/StellarWalletContext';\nimport { stellarUiKitManager, type StellarUiKitManagerState } from '../stellar-wallets-kit';\n\n/**\n * Props for the StellarWalletUiRoot provider\n */\ninterface StellarWalletUiRootProps {\n  children: ReactNode;\n  /** UI kit configuration */\n  uiKitConfig?: UiKitConfiguration;\n}\n\n/**\n * Stellar wallet UI root provider component\n * This component manages the wallet connection state and provides it to child components\n */\nexport function StellarWalletUiRoot({ children, uiKitConfig }: StellarWalletUiRootProps) {\n  // UI Kit manager state\n  const [uiKitManagerState, setUiKitManagerState] = useState<StellarUiKitManagerState>(\n    stellarUiKitManager.getState()\n  );\n\n  // Connection state\n  const [address, setAddress] = useState<string | null>(null);\n  const [isConnecting, setIsConnecting] = useState(false);\n  const [availableWallets, setAvailableWallets] = useState<ISupportedWallet[]>([]);\n\n  // Initialize UI kit on mount\n  useEffect(() => {\n    // Only configure if a specific UI kit config is provided or if not already configured\n    const currentState = stellarUiKitManager.getState();\n\n    if (uiKitConfig || !currentState.currentFullUiKitConfig) {\n      const configToUse = uiKitConfig || { kitName: 'custom' as const, kitConfig: {} };\n\n      logger.debug('StellarWalletUiRoot', 'Configuring UI kit with:', configToUse);\n\n      stellarUiKitManager.configure(configToUse).catch((error) => {\n        logger.error('Failed to configure Stellar UI kit:', error);\n      });\n    }\n  }, [uiKitConfig]);\n\n  // Subscribe to UI kit state changes\n  useEffect(() => {\n    const unsubscribe = stellarUiKitManager.subscribe(() => {\n      setUiKitManagerState(stellarUiKitManager.getState());\n    });\n\n    return unsubscribe;\n  }, []);\n\n  // Event-driven connection status updates\n  useEffect(() => {\n    const unsubscribeFromConnectionChanges = onStellarWalletConnectionChange(\n      (currentStatus, _previousStatus) => {\n        setAddress(currentStatus.address || null);\n        logger.debug(\n          'StellarWalletUiRoot',\n          `Connection status changed: ${currentStatus.isConnected ? 'connected' : 'disconnected'}`,\n          currentStatus.address\n        );\n      }\n    );\n\n    // Initial update to sync current state\n    const initialStatus = getStellarWalletConnectionStatus();\n    setAddress(initialStatus.address || null);\n\n    return () => {\n      unsubscribeFromConnectionChanges();\n    };\n  }, [address]);\n\n  // Load available wallets\n  useEffect(() => {\n    const loadWallets = async () => {\n      try {\n        const connectors = await getStellarAvailableConnectors();\n        setAvailableWallets(connectors as unknown as ISupportedWallet[]);\n      } catch (error) {\n        logger.error('Failed to load available wallets:', String(error));\n      }\n    };\n\n    if (!uiKitManagerState.isInitializing && uiKitManagerState.stellarKitProvider) {\n      loadWallets();\n    }\n  }, [uiKitManagerState.isInitializing, uiKitManagerState.stellarKitProvider]);\n\n  /**\n   * Connect to a wallet\n   */\n  const connect = useCallback(async (walletId: string) => {\n    setIsConnecting(true);\n\n    try {\n      const result = await connectStellarWallet(walletId);\n\n      if (result.connected && result.address) {\n        setAddress(result.address);\n      } else {\n        throw new Error(result.error || 'Failed to connect wallet');\n      }\n    } catch (error) {\n      logger.error('Failed to connect:', String(error));\n      throw error;\n    } finally {\n      setIsConnecting(false);\n    }\n  }, []);\n\n  /**\n   * Disconnect from the current wallet\n   */\n  const disconnect = useCallback(async () => {\n    try {\n      const result = await disconnectStellarWallet();\n\n      if (result.disconnected) {\n        setAddress(null);\n      } else {\n        throw new Error(result.error || 'Failed to disconnect wallet');\n      }\n    } catch (error) {\n      logger.error('Failed to disconnect:', String(error));\n      throw error;\n    }\n  }, []);\n\n  const contextValue: StellarWalletContextType = {\n    address,\n    isConnected: address !== null,\n    isConnecting,\n    availableWallets,\n    connect,\n    disconnect,\n    uiKitManagerState,\n    kit: uiKitManagerState.stellarKitProvider,\n  };\n\n  return (\n    <StellarWalletContext.Provider value={contextValue}>{children}</StellarWalletContext.Provider>\n  );\n}\n","import type { ISupportedWallet, StellarWalletsKit } from '@creit.tech/stellar-wallets-kit';\nimport { createContext } from 'react';\n\nimport type { StellarUiKitManagerState } from '../stellar-wallets-kit';\n\n/**\n * Stellar wallet context type\n */\nexport interface StellarWalletContextType {\n  // Connection state\n  address: string | null;\n  isConnected: boolean;\n  isConnecting: boolean;\n\n  // Available wallets\n  availableWallets: ISupportedWallet[];\n\n  // Connection methods\n  connect: (walletId: string) => Promise<void>;\n  disconnect: () => Promise<void>;\n\n  // UI Kit manager state\n  uiKitManagerState: StellarUiKitManagerState;\n\n  // Kit instance (for advanced usage)\n  kit: StellarWalletsKit | null;\n}\n\n/**\n * Create the context with undefined default value\n */\nexport const StellarWalletContext = createContext<StellarWalletContextType | undefined>(undefined);\n","import { useContext } from 'react';\n\nimport { StellarWalletContext, type StellarWalletContextType } from './StellarWalletContext';\n\n/**\n * Hook to use the Stellar wallet context\n * @throws Error if used outside of StellarWalletUiRoot\n */\nexport function useStellarWalletContext(): StellarWalletContextType {\n  const context = useContext(StellarWalletContext);\n\n  if (context === undefined) {\n    throw new Error('useStellarWalletContext must be used within a StellarWalletUiRoot');\n  }\n\n  return context;\n}\n","import { useStellarWalletContext } from '../context';\n\n/**\n * Account information returned by the hook\n */\nexport interface StellarAccountInfo {\n  /** The connected wallet address */\n  address: string | null;\n  /** Whether a wallet is currently connected */\n  isConnected: boolean;\n  /** Whether a connection is in progress */\n  isConnecting: boolean;\n}\n\n/**\n * Hook to get the current Stellar account information\n * @returns Account information including address and connection status\n */\nexport function useStellarAccount(): StellarAccountInfo {\n  const { address, isConnected, isConnecting } = useStellarWalletContext();\n\n  return {\n    address,\n    isConnected,\n    isConnecting,\n  };\n}\n","import type { ISupportedWallet } from '@creit.tech/stellar-wallets-kit';\nimport { useCallback, useState } from 'react';\n\nimport type { Connector } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { useStellarWalletContext } from '../context';\n\n/**\n * Connect hook return type - matches what react-core expects\n */\nexport interface StellarConnectReturnType {\n  connect: (args: { connector: Connector }) => Promise<void>;\n  connectors: Connector[];\n  isLoading: boolean;\n  isPending: boolean;\n  error: Error | null;\n}\n\n/**\n * Hook to get the wallet connect function and status\n * @returns An object with connect function and connection status\n */\nexport function useStellarConnect(): StellarConnectReturnType {\n  const { connect, isConnecting, availableWallets } = useStellarWalletContext();\n  const [error, setError] = useState<Error | null>(null);\n\n  const connectFunction = useCallback(\n    async ({ connector }: { connector: Connector }) => {\n      try {\n        // Clear any previous errors\n        setError(null);\n        await connect(connector.id);\n      } catch (err) {\n        // Store the error for access by the consumer\n        const connectError = err instanceof Error ? err : new Error(String(err));\n        setError(connectError);\n        // Re-throw to maintain the same behavior for error handling in UI components\n        throw connectError;\n      }\n    },\n    [connect]\n  );\n\n  // Convert ISupportedWallet[] to Connector[]\n  const connectors: Connector[] = availableWallets.map((wallet: ISupportedWallet) => ({\n    id: wallet.id,\n    name: wallet.name,\n    icon: wallet.icon,\n    installed: wallet.isAvailable,\n    type: (wallet.type as string) || 'browser',\n  }));\n\n  return {\n    connect: connectFunction,\n    connectors,\n    isLoading: isConnecting,\n    isPending: isConnecting,\n    error,\n  };\n}\n","import { useCallback, useState } from 'react';\n\nimport { useStellarWalletContext } from '../context';\n\n/**\n * Disconnect hook return type - matches what react-core expects\n */\nexport interface StellarDisconnectReturnType {\n  disconnect: () => Promise<void>;\n  isLoading: boolean;\n  isPending: boolean;\n  error: Error | null;\n}\n\n/**\n * Hook to get the wallet disconnect function and status\n * @returns An object with disconnect function and disconnection status\n */\nexport function useStellarDisconnect(): StellarDisconnectReturnType {\n  const { disconnect } = useStellarWalletContext();\n  const [isDisconnecting, setIsDisconnecting] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n\n  const disconnectFunction = useCallback(async () => {\n    try {\n      // Clear any previous errors\n      setError(null);\n      setIsDisconnecting(true);\n      await disconnect();\n    } catch (err) {\n      // Store the error for access by the consumer\n      const disconnectError = err instanceof Error ? err : new Error(String(err));\n      setError(disconnectError);\n      // Re-throw to maintain the same behavior for error handling in UI components\n      throw disconnectError;\n    } finally {\n      setIsDisconnecting(false);\n    }\n  }, [disconnect]);\n\n  return {\n    disconnect: disconnectFunction,\n    isLoading: isDisconnecting,\n    isPending: isDisconnecting,\n    error,\n  };\n}\n","import type { EcosystemSpecificReactHooks } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { useStellarAccount } from './useStellarAccount';\nimport { useStellarConnect } from './useStellarConnect';\nimport { useStellarDisconnect } from './useStellarDisconnect';\n\n/**\n * Stellar-specific facade hooks following the EcosystemSpecificReactHooks interface\n * These hooks provide a standardized interface for wallet operations in the Stellar ecosystem\n */\nexport const stellarFacadeHooks: EcosystemSpecificReactHooks = {\n  // Account management\n  useAccount: useStellarAccount,\n\n  // Connection management\n  useConnect: useStellarConnect,\n  useDisconnect: useStellarDisconnect,\n\n  // Stellar doesn't have the same network switching capabilities as EVM\n  // These are included for interface compatibility but may not be fully functional\n  useSwitchChain: () => ({ switchChain: undefined }),\n  useChainId: () => 'stellar',\n  useChains: () => [],\n\n  // Transaction and signing hooks - to be implemented as needed\n  useBalance: () => ({ data: undefined, isLoading: false }),\n  useSendTransaction: () => ({ sendTransaction: undefined }),\n  useWaitForTransactionReceipt: () => ({ data: undefined }),\n  useSignMessage: () => ({ signMessage: undefined }),\n  useSignTypedData: () => ({ signTypedData: undefined }),\n};\n","import type { UiKitConfiguration } from '@openzeppelin/contracts-ui-builder-types';\nimport { appConfigService, logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n/**\n * Default configuration when no specific configuration is provided\n */\nconst defaultConfig: UiKitConfiguration = {\n  kitName: 'custom', // Default to using our custom implementation for Stellar\n  kitConfig: {},\n};\n\n/**\n * Loads the initial UI kit configuration from the AppConfigService\n * @returns The UI kit configuration from app.config.local.json or defaults\n */\nexport function loadInitialConfigFromAppService(): UiKitConfiguration {\n  logger.debug(\n    'stellar:useUiKitConfig',\n    'Attempting to load initial config from AppConfigService...'\n  );\n  const configObj = appConfigService.getWalletUIConfig<UiKitConfiguration>('stellar');\n\n  if (configObj && configObj.kitName) {\n    logger.info(\n      'stellar:useUiKitConfig',\n      `Loaded initial config from AppConfigService: kitName=${configObj.kitName}`,\n      configObj.kitConfig\n    );\n    // Merge with defaults to ensure all base keys are present if AppConfigService only provides partial config\n    return {\n      kitName: configObj.kitName,\n      kitConfig: { ...defaultConfig.kitConfig, ...(configObj.kitConfig || {}) },\n    };\n  }\n  logger.debug(\n    'stellar:useUiKitConfig',\n    'No initial config found in AppConfigService, using module default.'\n  );\n  return { ...defaultConfig };\n}\n","import { Loader2, Wallet } from 'lucide-react';\nimport React, { useEffect, useState } from 'react';\n\nimport type { BaseComponentProps } from '@openzeppelin/contracts-ui-builder-types';\nimport { Button } from '@openzeppelin/contracts-ui-builder-ui';\nimport { cn } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { useStellarAccount } from '../../hooks';\nimport { ConnectorDialog } from './ConnectorDialog';\n\n/**\n * A button that allows users to connect their wallet.\n * Opens a dialog to select from available connectors.\n * @param hideWhenConnected - Whether to hide the button when wallet is connected (default: true)\n */\nexport interface ConnectButtonProps extends BaseComponentProps {\n  hideWhenConnected?: boolean;\n}\n\nexport const CustomConnectButton: React.FC<ConnectButtonProps> = ({\n  className,\n  hideWhenConnected = true,\n}) => {\n  const [dialogOpen, setDialogOpen] = useState(false);\n  const { isConnected, isConnecting } = useStellarAccount();\n\n  // Local state to indicate the button has been clicked and dialog is open, awaiting user selection\n  const [isManuallyInitiated, setIsManuallyInitiated] = useState(false);\n\n  useEffect(() => {\n    if (isConnected && hideWhenConnected) {\n      setDialogOpen(false);\n      setIsManuallyInitiated(false); // Reset if dialog closes due to connection\n    }\n  }, [isConnected, hideWhenConnected]);\n\n  // If dialog is closed, reset manual initiation state\n  useEffect(() => {\n    if (!dialogOpen) {\n      setIsManuallyInitiated(false);\n    }\n  }, [dialogOpen]);\n\n  // If wallet reports it's connecting, we no longer need our manual pending state\n  useEffect(() => {\n    if (isConnecting) {\n      setIsManuallyInitiated(false);\n    }\n  }, [isConnecting]);\n\n  const handleConnectClick = () => {\n    if (!isConnected) {\n      setIsManuallyInitiated(true); // User clicked, show pending on button\n      setDialogOpen(true);\n    }\n  };\n\n  if (isConnected && hideWhenConnected) {\n    return null;\n  }\n\n  // Button shows loading if either hook reports connecting OR if user just clicked to open dialog\n  const showButtonLoading = isConnecting || isManuallyInitiated;\n\n  return (\n    <div className={cn('flex items-center', className)}>\n      <Button\n        onClick={handleConnectClick}\n        disabled={showButtonLoading || isConnected}\n        variant=\"outline\"\n        size=\"sm\"\n        className=\"h-8 px-2 text-xs\"\n        title={isConnected ? 'Connected' : 'Connect Wallet'}\n      >\n        {showButtonLoading ? (\n          <Loader2 className=\"size-3.5 animate-spin mr-1\" />\n        ) : (\n          <Wallet className=\"size-3.5 mr-1\" />\n        )}\n        {showButtonLoading ? 'Connecting...' : 'Connect Wallet'}\n      </Button>\n\n      <ConnectorDialog\n        open={dialogOpen}\n        onOpenChange={(open) => {\n          setDialogOpen(open);\n          // If dialog is closed manually by user before selection, reset manual initiation\n          if (!open) {\n            setIsManuallyInitiated(false);\n          }\n        }}\n      />\n    </div>\n  );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport type { Connector } from '@openzeppelin/contracts-ui-builder-types';\nimport {\n  Button,\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTitle,\n} from '@openzeppelin/contracts-ui-builder-ui';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { getStellarAvailableConnectors } from '../../connection';\nimport { useStellarAccount, useStellarConnect } from '../../hooks';\n\n/**\n * Dialog component for selecting a wallet connector\n */\ninterface ConnectorDialogProps {\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n}\n\nexport const ConnectorDialog: React.FC<ConnectorDialogProps> = ({ open, onOpenChange }) => {\n  const { connect } = useStellarConnect();\n  const { isConnected, isConnecting } = useStellarAccount();\n  const [connectingId, setConnectingId] = useState<string | null>(null);\n  const [error, setError] = useState<string | null>(null);\n  const [connectors, setConnectors] = useState<Connector[]>([]);\n  const [loadingConnectors, setLoadingConnectors] = useState(true);\n\n  // Load available connectors\n  useEffect(() => {\n    const loadConnectors = async () => {\n      try {\n        const availableConnectors = await getStellarAvailableConnectors();\n        setConnectors(availableConnectors);\n      } catch (err) {\n        logger.error('Failed to load Stellar connectors:', String(err));\n        setError('Failed to load available wallets');\n      } finally {\n        setLoadingConnectors(false);\n      }\n    };\n\n    if (open) {\n      loadConnectors();\n    }\n  }, [open]);\n\n  // Track connection attempts for dialog closure\n  useEffect(() => {\n    // If we're connected and there was a connection attempt, close the dialog\n    if (isConnected && connectingId) {\n      onOpenChange(false);\n      setConnectingId(null);\n      setError(null);\n    }\n  }, [isConnected, connectingId, onOpenChange]);\n\n  // If connect function itself is not available\n  if (!connect) {\n    return (\n      <Dialog open={open} onOpenChange={onOpenChange}>\n        <DialogContent className=\"sm:max-w-[425px]\">\n          <DialogHeader>\n            <DialogTitle>Error</DialogTitle>\n          </DialogHeader>\n          <p>Wallet connection function is not available.</p>\n        </DialogContent>\n      </Dialog>\n    );\n  }\n\n  const handleConnectorSelect = async (selectedConnector: Connector) => {\n    setConnectingId(selectedConnector.id);\n    setError(null);\n\n    try {\n      await connect({ connector: selectedConnector });\n    } catch (err) {\n      setError(err instanceof Error ? err.message : 'Failed to connect');\n      setConnectingId(null);\n    }\n  };\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[425px]\">\n        <DialogHeader>\n          <DialogTitle>Connect Wallet</DialogTitle>\n          <DialogDescription>\n            Select a wallet provider to connect with this application.\n          </DialogDescription>\n        </DialogHeader>\n\n        <div className=\"grid gap-4 py-4\">\n          {loadingConnectors ? (\n            <p className=\"text-center text-muted-foreground\">Loading available wallets...</p>\n          ) : connectors.length === 0 ? (\n            <p className=\"text-center text-muted-foreground\">No wallet connectors available.</p>\n          ) : (\n            connectors.map((connector: Connector) => (\n              <Button\n                key={connector.id}\n                onClick={() => handleConnectorSelect(connector)}\n                disabled={isConnecting && connectingId === connector.id}\n                variant=\"outline\"\n                className=\"flex justify-between items-center w-full py-6\"\n              >\n                <span>{connector.name}</span>\n                {isConnecting && connectingId === connector.id && (\n                  <span className=\"ml-2 text-xs\">Connecting...</span>\n                )}\n              </Button>\n            ))\n          )}\n        </div>\n\n        {error && <p className=\"text-sm text-red-500 mt-1\">{error}</p>}\n      </DialogContent>\n    </Dialog>\n  );\n};\n","import { LogOut } from 'lucide-react';\nimport React from 'react';\n\nimport type { BaseComponentProps } from '@openzeppelin/contracts-ui-builder-types';\nimport { Button } from '@openzeppelin/contracts-ui-builder-ui';\nimport { cn, truncateMiddle } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { useStellarAccount, useStellarDisconnect } from '../../hooks';\n\n/**\n * A component that displays the connected account address.\n * Also includes a disconnect button.\n */\nexport const CustomAccountDisplay: React.FC<BaseComponentProps> = ({ className }) => {\n  const { isConnected, address } = useStellarAccount();\n  const { disconnect } = useStellarDisconnect();\n\n  if (!isConnected || !address || !disconnect) {\n    return null;\n  }\n\n  return (\n    <div className={cn('flex items-center gap-2', className)}>\n      <div className=\"flex flex-col\">\n        <span className=\"text-xs font-medium\">{truncateMiddle(address, 4, 4)}</span>\n        <span className=\"text-[9px] text-muted-foreground -mt-0.5\">Stellar Account</span>\n      </div>\n      <Button\n        onClick={() => disconnect()}\n        variant=\"ghost\"\n        size=\"icon\"\n        className=\"size-6 p-0\"\n        title=\"Disconnect wallet\"\n      >\n        <LogOut className=\"size-3.5\" />\n      </Button>\n    </div>\n  );\n};\n","import type {\n  EcosystemWalletComponents,\n  UiKitConfiguration,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { ECOSYSTEM_WALLET_COMPONENT_KEYS } from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n/**\n * Filters a set of wallet components based on an exclusion list.\n *\n * @param allPossibleComponents - An object containing all potential components for a kit.\n * @param exclusions - An array of component keys to exclude.\n * @param kitName - The name of the kit being filtered (for logging purposes).\n * @returns The filtered EcosystemWalletComponents object, or undefined if all components are excluded.\n */\nexport function filterWalletComponents(\n  allPossibleComponents: EcosystemWalletComponents,\n  exclusions: Array<keyof EcosystemWalletComponents>,\n  kitName: string = 'custom' // Default to custom for logging context\n): EcosystemWalletComponents | undefined {\n  logger.debug(\n    'filterWalletComponents',\n    `Filtering components for kit: ${kitName}. Exclusions: ${exclusions.join(', ')}.`\n  );\n  if (!allPossibleComponents || Object.keys(allPossibleComponents).length === 0) {\n    logger.debug('filterWalletComponents', `No components provided to filter for kit: ${kitName}.`);\n    return undefined;\n  }\n\n  if (exclusions.length === 0) {\n    logger.debug(\n      'filterWalletComponents',\n      `Providing all components for kit: ${kitName}.`,\n      allPossibleComponents\n    );\n    return allPossibleComponents;\n  }\n\n  const filteredComponents: Partial<EcosystemWalletComponents> = {};\n  let componentCount = 0;\n  for (const key in allPossibleComponents) {\n    const componentKey = key as keyof EcosystemWalletComponents;\n    if (!exclusions.includes(componentKey)) {\n      if (allPossibleComponents[componentKey]) {\n        // Ensure the component actually exists before adding\n        filteredComponents[componentKey] = allPossibleComponents[componentKey];\n        componentCount++;\n      }\n    }\n  }\n\n  if (componentCount > 0) {\n    logger.debug(\n      'filterWalletComponents',\n      `Providing filtered components for kit: ${kitName} after exclusions (${exclusions.join(', ')}).`,\n      filteredComponents\n    );\n    return filteredComponents as EcosystemWalletComponents;\n  }\n\n  logger.debug('filterWalletComponents', `All components were excluded for kit: ${kitName}.`);\n  return undefined;\n}\n\n/**\n * Extracts the component exclusion list from a UI kit configuration object.\n *\n * @param kitConfig - The `kitConfig` object from `UiKitConfiguration`.\n * @returns An array of component keys to exclude, or an empty array if none are specified or config is invalid.\n */\nexport function getComponentExclusionsFromConfig(\n  kitConfig: UiKitConfiguration['kitConfig']\n): Array<keyof EcosystemWalletComponents> {\n  if (kitConfig && typeof kitConfig === 'object' && 'components' in kitConfig) {\n    const componentsCfg = kitConfig.components;\n    if (\n      componentsCfg &&\n      typeof componentsCfg === 'object' &&\n      'exclude' in componentsCfg &&\n      Array.isArray(componentsCfg.exclude)\n    ) {\n      // Ensure all elements are valid keys of EcosystemWalletComponents\n      // This provides a bit more type safety at runtime if the config comes from an untyped source\n      return componentsCfg.exclude.filter(\n        (key): key is keyof EcosystemWalletComponents =>\n          typeof key === 'string' &&\n          (ECOSYSTEM_WALLET_COMPONENT_KEYS as readonly string[]).includes(key)\n      ) as Array<keyof EcosystemWalletComponents>;\n    }\n  }\n  return [];\n}\n","import type {\n  EcosystemWalletComponents,\n  UiKitConfiguration,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\nimport { CustomAccountDisplay, CustomConnectButton } from '../components';\nimport { StellarWalletsKitConnectButton } from '../stellar-wallets-kit';\nimport { filterWalletComponents, getComponentExclusionsFromConfig } from './filterWalletComponents';\n\n/**\n * Determines the final set of wallet components to be provided by the Stellar adapter\n * based on the UI kit configuration.\n *\n * @param uiKitConfiguration - The UiKitConfiguration from the adapter instance.\n * @returns The EcosystemWalletComponents object or undefined.\n */\nexport function getResolvedWalletComponents(\n  uiKitConfiguration: UiKitConfiguration\n): EcosystemWalletComponents | undefined {\n  logger.debug(\n    'stellar:uiKitService:getResolvedWalletComponents',\n    'Received uiKitConfiguration:',\n    JSON.stringify(uiKitConfiguration)\n  );\n\n  const currentKitName = uiKitConfiguration.kitName || 'custom';\n\n  if (currentKitName === 'none') {\n    logger.info(\n      'stellar:uiKitService',\n      'UI Kit set to \"none\" for getResolvedWalletComponents, not providing wallet components.'\n    );\n    return undefined;\n  }\n\n  const exclusions = getComponentExclusionsFromConfig(uiKitConfiguration.kitConfig);\n  logger.debug(\n    'stellar:uiKitService',\n    `Extracted component exclusions for ${currentKitName}: ${exclusions.join(', ') || 'none'}.`\n  );\n\n  // For 'custom' kit, we provide our custom components\n  if (currentKitName === 'custom') {\n    const allCustomComponents: EcosystemWalletComponents = {\n      ConnectButton: CustomConnectButton,\n      AccountDisplay: CustomAccountDisplay,\n      // NetworkSwitcher is not included as Stellar doesn't support network switching\n    };\n\n    logger.info(\n      'stellar:uiKitService',\n      `Providing custom Stellar wallet components for kit: ${currentKitName}`\n    );\n\n    return filterWalletComponents(allCustomComponents, exclusions, currentKitName);\n  }\n\n  // For 'stellar-wallets-kit', use the kit's native button with built-in UI\n  if (currentKitName === 'stellar-wallets-kit') {\n    const stellarKitComponents: EcosystemWalletComponents = {\n      ConnectButton: StellarWalletsKitConnectButton,\n      // The kit's native button handles account display internally\n      AccountDisplay: undefined,\n    };\n\n    logger.info('stellar:uiKitService', 'Using Stellar Wallets Kit native button');\n\n    return stellarKitComponents;\n  }\n\n  logger.warn(\n    'stellar:uiKitService',\n    `UI Kit \"${currentKitName}\" for getResolvedWalletComponents not explicitly supported. No components provided.`\n  );\n  return undefined;\n}\n","import type {\n  NativeConfigLoader,\n  UiKitConfiguration,\n} from '@openzeppelin/contracts-ui-builder-types';\nimport { logger } from '@openzeppelin/contracts-ui-builder-utils';\n\n/**\n * Resolves the final, complete UiKitConfiguration for Stellar by merging various sources.\n *\n * Note: Unlike the EVM adapter, Stellar has limited UI kit options, so this is simpler.\n * We don't currently support loading native TypeScript config files for Stellar.\n *\n * @param programmaticOverrides - Overrides passed directly to the configureUiKit call.\n * @param initialAppServiceKitName - The kitName noted from AppConfigService when the adapter instance was constructed.\n * @param currentAppServiceConfig - The full UiKitConfiguration from AppConfigService, re-fetched at the time of the call.\n * @param options - Options, including the callback to load user's native config file (currently unused for Stellar).\n * @returns A Promise resolving to the final UiKitConfiguration.\n */\nexport async function resolveFullUiKitConfiguration(\n  programmaticOverrides: Partial<UiKitConfiguration>,\n  initialAppServiceKitName: UiKitConfiguration['kitName'],\n  currentAppServiceConfig: UiKitConfiguration,\n  options?: {\n    loadUiKitNativeConfig?: NativeConfigLoader;\n  }\n): Promise<UiKitConfiguration> {\n  logger.debug(\n    'stellar:configResolutionService:resolveFullUiKitConfiguration',\n    'Starting resolution with:',\n    {\n      programmaticOverrides,\n      initialAppServiceKitName,\n      currentAppServiceConfig,\n      hasLoadNativeCallback: !!options?.loadUiKitNativeConfig,\n    }\n  );\n\n  // Note: We currently don't support loading native TypeScript config files for Stellar\n  // This could be added in the future if needed\n  if (options?.loadUiKitNativeConfig) {\n    logger.debug(\n      'stellar:configResolutionService',\n      'Native config loader provided but not currently supported for Stellar adapter'\n    );\n  }\n\n  const effectiveKitName: UiKitConfiguration['kitName'] =\n    programmaticOverrides.kitName ||\n    currentAppServiceConfig.kitName ||\n    initialAppServiceKitName ||\n    'custom';\n\n  const finalFullConfig: UiKitConfiguration = {\n    kitName: effectiveKitName,\n    kitConfig: {\n      ...(currentAppServiceConfig.kitConfig || {}),\n      ...(programmaticOverrides.kitConfig || {}),\n    },\n  };\n\n  logger.debug(\n    'stellar:configResolutionService:resolveFullUiKitConfiguration',\n    'Resolved finalFullConfig:',\n    finalFullConfig\n  );\n\n  return finalFullConfig;\n}\n","import { StellarNetworkConfig } from '@openzeppelin/contracts-ui-builder-types';\n\n// Stellar Public Network (Mainnet)\nexport const stellarPublic: StellarNetworkConfig = {\n  id: 'stellar-public',\n  exportConstName: 'stellarPublic',\n  name: 'Stellar',\n  ecosystem: 'stellar',\n  network: 'stellar',\n  type: 'mainnet',\n  isTestnet: false,\n  horizonUrl: 'https://horizon.stellar.org',\n  sorobanRpcUrl: 'https://mainnet.sorobanrpc.com',\n  networkPassphrase: 'Public Global Stellar Network ; September 2015',\n  explorerUrl: 'https://stellar.expert/explorer/public',\n  icon: 'stellar',\n};\n","import { StellarNetworkConfig } from '@openzeppelin/contracts-ui-builder-types';\n\n// Stellar Testnet\nexport const stellarTestnet: StellarNetworkConfig = {\n  id: 'stellar-testnet',\n  exportConstName: 'stellarTestnet',\n  name: 'Stellar Testnet',\n  ecosystem: 'stellar',\n  network: 'stellar',\n  type: 'testnet',\n  isTestnet: true,\n  horizonUrl: 'https://horizon-testnet.stellar.org',\n  sorobanRpcUrl: 'https://soroban-testnet.stellar.org',\n  networkPassphrase: 'Test SDF Network ; September 2015',\n  explorerUrl: 'https://stellar.expert/explorer/testnet',\n  icon: 'stellar',\n};\n","import { StellarNetworkConfig } from '@openzeppelin/contracts-ui-builder-types';\n\nimport { stellarPublic } from './mainnet';\nimport { stellarTestnet } from './testnet';\n\n// All mainnet networks\nexport const stellarMainnetNetworks: StellarNetworkConfig[] = [stellarPublic];\n\n// All testnet networks\nexport const stellarTestnetNetworks: StellarNetworkConfig[] = [stellarTestnet];\n\n// All Stellar networks\nexport const stellarNetworks: StellarNetworkConfig[] = [\n  ...stellarMainnetNetworks,\n  ...stellarTestnetNetworks,\n];\n\n// Export individual networks as well\nexport { stellarPublic, stellarTestnet };\n","/**\n * Configuration for the Stellar adapter\n *\n * This file defines the dependencies required by the Stellar adapter\n * when generating exported projects. It follows the AdapterConfig\n * interface to provide a structured approach to dependency management.\n */\nimport type { AdapterConfig } from '@openzeppelin/contracts-ui-builder-types';\n\nexport const stellarAdapterConfig: AdapterConfig = {\n  /**\n   * Dependencies required by the Stellar adapter\n   * These will be included in exported projects that use this adapter\n   */\n  dependencies: {\n    // Runtime dependencies\n    runtime: {\n      // Core Stellar libraries\n      '@stellar/stellar-sdk': '^14.1.1',\n\n      // Wallet connection and integration\n      '@creit.tech/stellar-wallets-kit': '^1.9.5',\n\n      // OpenZeppelin Relayer integration (optional, for gasless transactions)\n      '@openzeppelin/relayer-sdk': '1.1.0',\n\n      // React integration for wallet components\n      react: '^19.0.0',\n      'react-dom': '^19.0.0',\n    },\n\n    // Development dependencies\n    dev: {\n      '@types/react': '^19.0.0',\n      '@types/react-dom': '^19.0.0',\n    },\n  },\n};\n"],"mappings":"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","names":["import_contracts_ui_builder_types","import_contracts_ui_builder_utils","StellarSdk","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_utils","import_contracts_ui_builder_types","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","SYSTEM_LOG_TAG","import_stellar_sdk","import_contracts_ui_builder_utils","SYSTEM_LOG_TAG","import_stellar_sdk","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_utils","SYSTEM_LOG_TAG","SYSTEM_LOG_TAG","SYSTEM_LOG_TAG","import_stellar_sdk","import_contracts_ui_builder_types","import_stellar_sdk","import_contracts_ui_builder_utils","SYSTEM_LOG_TAG","isStructType","isStructType","SYSTEM_LOG_TAG","import_stellar_sdk","import_contracts_ui_builder_utils","StellarRpc","contract","import_react","import_contracts_ui_builder_ui","import_contracts_ui_builder_ui","import_jsx_runtime","import_contracts_ui_builder_ui","import_jsx_runtime","import_react_hook_form","import_jsx_runtime","React","import_stellar_sdk","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","xdr","LOG_SYSTEM","import_stellar_wallets_kit","import_contracts_ui_builder_utils","import_react","import_contracts_ui_builder_utils","import_jsx_runtime","state","xdr","contract","StellarRpc","import_contracts_ui_builder_utils","SYSTEM_LOG_TAG","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_types","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_utils","import_stellar_sdk","import_contracts_ui_builder_utils","SYSTEM_LOG_TAG","getSorobanRpcServer","StellarRpc","contract","SYSTEM_LOG_TAG","SYSTEM_LOG_TAG","import_react","import_contracts_ui_builder_utils","import_react","import_jsx_runtime","import_react","import_react","import_react","import_contracts_ui_builder_utils","import_lucide_react","import_react","import_contracts_ui_builder_ui","import_contracts_ui_builder_utils","import_react","import_contracts_ui_builder_ui","import_contracts_ui_builder_utils","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_contracts_ui_builder_ui","import_contracts_ui_builder_utils","import_jsx_runtime","import_contracts_ui_builder_types","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils","import_contracts_ui_builder_utils"]}