{"version":3,"file":"transformers.mjs","sourceRoot":"","sources":["../../src/config-registry-api-service/transformers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\nimport { RpcEndpointType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport type { NetworkConfig } from './abstract-config-registry-api-service';\n\ntype RpcEndpoint = NetworkConfiguration['rpcEndpoints'][number];\n\nexport type NetworkFilterOptions = {\n  isFeatured?: boolean;\n  isTestnet?: boolean;\n  isActive?: boolean;\n  isDeprecated?: boolean;\n  isDefault?: boolean;\n};\n\nexport type NetworkComparisonOptions = {\n  existingNetworks: Record<Hex, NetworkConfiguration>;\n};\n\nexport type TransformedNetworkResult = {\n  networksToAdd: NetworkConfiguration[];\n  existingChainIds: Hex[];\n};\n\n/**\n * @param chainId - The chain ID as a string.\n * @returns The chain ID as Hex, or null if invalid.\n */\nfunction toHexChainId(chainId: string): Hex | null {\n  if (!chainId || typeof chainId !== 'string') {\n    return null;\n  }\n\n  const trimmed = chainId.trim();\n\n  if (trimmed.startsWith('0x') || trimmed.startsWith('0X')) {\n    const hexValue = trimmed.toLowerCase();\n    if (!/^0x[0-9a-f]+$/iu.test(hexValue)) {\n      return null;\n    }\n    return hexValue as Hex;\n  }\n\n  const decimal = Number.parseInt(trimmed, 10);\n  if (Number.isNaN(decimal) || decimal < 0) {\n    return null;\n  }\n\n  return `0x${decimal.toString(16)}`;\n}\n\n/**\n * @param endpoint - The RPC endpoint from the API.\n * @returns The transformed RPC endpoint, or null if invalid.\n */\nfunction transformRpcEndpoint(\n  endpoint: NetworkConfig['rpcEndpoints'][0],\n): RpcEndpoint | null {\n  if (!endpoint || typeof endpoint !== 'object') {\n    return null;\n  }\n\n  const { url, type, networkClientId, failoverUrls } = endpoint;\n\n  if (!url || typeof url !== 'string') {\n    return null;\n  }\n\n  if (!type || typeof type !== 'string') {\n    return null;\n  }\n\n  if (!networkClientId || typeof networkClientId !== 'string') {\n    return null;\n  }\n\n  const baseEndpoint = {\n    networkClientId,\n    failoverUrls: Array.isArray(failoverUrls)\n      ? failoverUrls.filter(\n          (failoverUrl): failoverUrl is string =>\n            typeof failoverUrl === 'string',\n        )\n      : undefined,\n  };\n\n  if (type === 'infura') {\n    return {\n      ...baseEndpoint,\n      type: RpcEndpointType.Infura,\n      url: url as `https://${string}.infura.io/v3/{infuraProjectId}`,\n    } as RpcEndpoint;\n  }\n\n  if (type === 'custom') {\n    return {\n      ...baseEndpoint,\n      type: RpcEndpointType.Custom,\n      url,\n    } as RpcEndpoint;\n  }\n\n  return null;\n}\n\n/**\n * @param networkConfig - The network configuration from the API.\n * @returns The transformed network configuration, or null if invalid.\n */\nexport function transformNetworkConfig(\n  networkConfig: NetworkConfig,\n): NetworkConfiguration | null {\n  if (!networkConfig || typeof networkConfig !== 'object') {\n    return null;\n  }\n\n  const chainId = toHexChainId(networkConfig.chainId);\n  if (!chainId) {\n    return null;\n  }\n\n  const { name, nativeCurrency, rpcEndpoints, blockExplorerUrls } =\n    networkConfig;\n\n  if (!name || typeof name !== 'string') {\n    return null;\n  }\n\n  if (!nativeCurrency || typeof nativeCurrency !== 'string') {\n    return null;\n  }\n\n  if (!Array.isArray(rpcEndpoints) || rpcEndpoints.length === 0) {\n    return null;\n  }\n\n  // Transform endpoints and track original indices to filtered indices mapping\n  const transformedEndpoints: RpcEndpoint[] = [];\n  const originalToFilteredIndexMap = new Map<number, number>();\n\n  rpcEndpoints.forEach((endpoint, originalIndex) => {\n    const transformed = transformRpcEndpoint(endpoint);\n    if (transformed !== null) {\n      originalToFilteredIndexMap.set(\n        originalIndex,\n        transformedEndpoints.length,\n      );\n      transformedEndpoints.push(transformed);\n    }\n  });\n\n  if (transformedEndpoints.length === 0) {\n    return null;\n  }\n\n  // Adjust defaultRpcEndpointIndex to account for filtered endpoints\n  const originalDefaultRpcEndpointIndex =\n    networkConfig.defaultRpcEndpointIndex ?? 0;\n  const adjustedDefaultRpcEndpointIndex = originalToFilteredIndexMap.get(\n    originalDefaultRpcEndpointIndex,\n  );\n\n  if (adjustedDefaultRpcEndpointIndex === undefined) {\n    // The original default index pointed to an invalid endpoint\n    return null;\n  }\n\n  if (!Array.isArray(blockExplorerUrls)) {\n    return null;\n  }\n\n  // Filter block explorer URLs and track original indices to filtered indices mapping\n  const validBlockExplorerUrls: string[] = [];\n  const blockExplorerOriginalToFilteredIndexMap = new Map<number, number>();\n\n  blockExplorerUrls.forEach((blockExplorerUrl, originalIndex) => {\n    if (typeof blockExplorerUrl === 'string' && blockExplorerUrl.length > 0) {\n      blockExplorerOriginalToFilteredIndexMap.set(\n        originalIndex,\n        validBlockExplorerUrls.length,\n      );\n      validBlockExplorerUrls.push(blockExplorerUrl);\n    }\n  });\n\n  // Adjust defaultBlockExplorerUrlIndex to account for filtered URLs\n  const { defaultBlockExplorerUrlIndex } = networkConfig;\n  let adjustedDefaultBlockExplorerUrlIndex: number | undefined;\n\n  if (defaultBlockExplorerUrlIndex !== undefined) {\n    const adjusted = blockExplorerOriginalToFilteredIndexMap.get(\n      defaultBlockExplorerUrlIndex,\n    );\n\n    if (adjusted === undefined) {\n      // The original default index pointed to an invalid URL\n      return null;\n    }\n\n    adjustedDefaultBlockExplorerUrlIndex = adjusted;\n  } else if (validBlockExplorerUrls.length > 0) {\n    adjustedDefaultBlockExplorerUrlIndex = 0;\n  }\n\n  return {\n    chainId,\n    name,\n    nativeCurrency,\n    rpcEndpoints: transformedEndpoints,\n    blockExplorerUrls: validBlockExplorerUrls,\n    defaultRpcEndpointIndex: adjustedDefaultRpcEndpointIndex,\n    defaultBlockExplorerUrlIndex: adjustedDefaultBlockExplorerUrlIndex,\n    lastUpdatedAt: networkConfig.lastUpdatedAt,\n  };\n}\n\n/**\n * @param networks - Array of network configurations to filter.\n * @param options - Filter options.\n * @returns Filtered array of network configurations.\n */\nexport function filterNetworks(\n  networks: NetworkConfig[],\n  options: NetworkFilterOptions = {},\n): NetworkConfig[] {\n  if (!Array.isArray(networks)) {\n    return [];\n  }\n\n  return networks.filter((network) => {\n    if (!network || typeof network !== 'object') {\n      return false;\n    }\n\n    if (options.isFeatured !== undefined) {\n      if (network.isFeatured !== options.isFeatured) {\n        return false;\n      }\n    }\n\n    if (options.isTestnet !== undefined) {\n      if (network.isTestnet !== options.isTestnet) {\n        return false;\n      }\n    }\n\n    if (options.isActive !== undefined) {\n      if (network.isActive !== options.isActive) {\n        return false;\n      }\n    }\n\n    if (options.isDeprecated !== undefined) {\n      if (network.isDeprecated !== options.isDeprecated) {\n        return false;\n      }\n    }\n\n    if (options.isDefault !== undefined) {\n      if (network.isDefault !== options.isDefault) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n}\n\n/**\n * @param transformedNetworks - Array of transformed network configurations.\n * @param options - Comparison options.\n * @returns Result containing networks to add and existing chain IDs.\n */\nexport function compareWithExistingNetworks(\n  transformedNetworks: NetworkConfiguration[],\n  options: NetworkComparisonOptions,\n): TransformedNetworkResult {\n  if (!Array.isArray(transformedNetworks)) {\n    return {\n      networksToAdd: [],\n      existingChainIds: [],\n    };\n  }\n\n  const { existingNetworks } = options;\n\n  if (!existingNetworks || typeof existingNetworks !== 'object') {\n    return {\n      networksToAdd: transformedNetworks,\n      existingChainIds: [],\n    };\n  }\n\n  const existingChainIds = new Set<Hex>(Object.keys(existingNetworks) as Hex[]);\n  const networksToAdd: NetworkConfiguration[] = [];\n  const foundExistingChainIds: Hex[] = [];\n\n  for (const network of transformedNetworks) {\n    if (!network?.chainId) {\n      continue;\n    }\n\n    if (existingChainIds.has(network.chainId)) {\n      foundExistingChainIds.push(network.chainId);\n    } else {\n      networksToAdd.push(network);\n    }\n  }\n\n  return {\n    networksToAdd,\n    existingChainIds: foundExistingChainIds,\n  };\n}\n\n/**\n * @param networks - Array of network configurations from the API.\n * @param filterOptions - Options for filtering networks.\n * @param comparisonOptions - Options for comparing with existing networks.\n * @returns Result containing networks to add and existing chain IDs.\n */\nexport function processNetworkConfigs(\n  networks: NetworkConfig[],\n  filterOptions: NetworkFilterOptions = {},\n  comparisonOptions?: NetworkComparisonOptions,\n): TransformedNetworkResult {\n  if (!Array.isArray(networks) || networks.length === 0) {\n    return {\n      networksToAdd: [],\n      existingChainIds: [],\n    };\n  }\n\n  const filteredNetworks = filterNetworks(networks, filterOptions);\n\n  const transformedNetworks = filteredNetworks\n    .map(transformNetworkConfig)\n    .filter((network): network is NetworkConfiguration => network !== null);\n\n  if (comparisonOptions) {\n    return compareWithExistingNetworks(transformedNetworks, comparisonOptions);\n  }\n\n  return {\n    networksToAdd: transformedNetworks,\n    existingChainIds: [],\n  };\n}\n"]}