{"version":3,"file":"properties.cjs","sourceRoot":"","sources":["../../../src/utils/metrics/properties.ts"],"names":[],"mappings":";;;AAEA,uDAAyE;AACzE,2CAAsC;AAQtC,2CAAwC;AACxC,0CAAmE;AACnE,4DAG4B;AAC5B,+CAA8C;AASjC,QAAA,yBAAyB,GAElC;IACF,eAAe,EAAE,cAAc;IAC/B,gBAAgB,EAAE,mBAAmB;IACrC,UAAU,EAAE,cAAc;IAC1B,WAAW,EAAE,mBAAmB;IAChC,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEW,QAAA,2BAA2B,GAOpC;IACF,eAAe,EAAE,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,CACnD,UAAU;QACR,CAAC,CAAC,IAAA,wCAAsB,EAAC,eAAe,IAAI,EAAE,EAAE,UAAU,CAAC;QAC3D,CAAC,CAAC,SAAS;IACf,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,EAAE,CACtD,WAAW;QACT,CAAC,CAAC,IAAA,wCAAsB,EAAC,gBAAgB,IAAI,EAAE,EAAE,WAAW,CAAC;QAC7D,CAAC,CAAC,SAAS;IACf,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,CAAC,CAAC,IAAA,qCAAmB,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;IAC1D,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAC/B,WAAW,CAAC,CAAC,CAAC,IAAA,qCAAmB,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;IAC5D,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;CACrE,CAAC;AAEK,MAAM,WAAW,GAAG,CACzB,UAA8C,EAC9C,WAAgD,EAChD,EAAE;IACF,IAAI,UAAU,IAAI,CAAC,IAAA,qBAAY,EAAC,UAAU,EAAE,WAAW,IAAI,UAAU,CAAC,EAAE,CAAC;QACvE,OAAO,2BAAe,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,OAAO,2BAAe,CAAC,UAAU,CAAC;AACpC,CAAC,CAAC;AARW,QAAA,WAAW,eAQtB;AAEK,MAAM,oBAAoB,GAAG,CAClC,YAA0C,EAC1C,EAAE;IACF,OAAO,IAAA,mBAAW,EAAC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AACxE,CAAC,CAAC;AAJW,QAAA,oBAAoB,wBAI/B;AAEK,MAAM,mBAAmB,GAAG,CAAC,EAClC,QAAQ,EACR,OAAO,GACmC,EAAyB,EAAE,CACrE,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAJjB,QAAA,mBAAmB,uBAIF;AAE9B;;;;;;;;;;;;GAYG;AACI,MAAM,gBAAgB,GAAG,CAC9B,EACE,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,GACa,EAC/B,4BAA2C,EAC8B,EAAE;IAC3E,qHAAqH;IACrH,wGAAwG;IACxG,MAAM,cAAc,GAAG,IAAA,qCAAmB,EAAC,UAAU,IAAI,eAAO,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO;QACL,eAAe,EAAE,cAAc;QAC/B,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAA,qCAAmB,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;QAC3E,oBAAoB,EAAE,eAAe;YACnC,CAAC,CAAC,CAAC,IAAA,wCAAsB,EAAC,eAAe,EAAE,cAAc,CAAC;gBACxD,IAAA,iCAAwB,EAAC,cAAc,CAAC,EAAE,OAAO;gBACjD,IAAI,CAAC;YACP,CAAC,CAAC,CAAC,IAAA,iCAAwB,EAAC,cAAc,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;QAC/D,yBAAyB,EAAE,gBAAgB;YACzC,CAAC,CAAC,CAAC,IAAA,wCAAsB,EACrB,gBAAgB,EAChB,WAAW,IAAI,cAAc,CAC9B,IAAI,IAAI,CAAC;YACZ,CAAC,CAAC,IAAI;QACR,+BAA+B,EAAE,4BAA4B;KAC9D,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,gBAAgB,oBA4B3B;AAEK,MAAM,sBAAsB,GAAG,CACpC,eAAiF,EAC5D,EAAE;IACvB,sFAAsF;IACtF,QAAQ,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,2BAA2B;YAC9B,OAAO,aAAa,CAAC;QACvB,KAAK,kBAAkB;YACrB,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC;AAEK,MAAM,gBAAgB,GAAG,CAC9B,eAAiF,EACjF,EAAE;IACF,OAAO,IAAA,8BAAsB,EAAC,eAAe,CAAC,KAAK,IAAI,CAAC;AAC1D,CAAC,CAAC;AAJW,QAAA,gBAAgB,oBAI3B;AAEF;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,CAAC,QAAyC,EAAE,EAAE;IAC5E,OAAO,QAAQ,KAAK,wCAA+B,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAChF,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEK,MAAM,2BAA2B,GAAG,CACzC,WAAqD,EACrD,WAA2B,EAAE,EAC7B,gBAAyB,IAAI,EAC7B,gBAA2D,EAC3D,gBAAyB,EACzB,wBAAyC,EACzC,EAAE;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAA,2BAAmB,EAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,OAAO;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC;QACtD,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC;QAC/D,mBAAmB,EAAE,WAAW,EAAE,gCAAgC;YAChE,CAAC,CAAC,WAAW,CAAC,gCAAgC,GAAG,EAAE;YACnD,CAAC,CAAC,CAAC;QACL,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QAChE,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/D,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;QACzC,mBAAmB,EAAE,gBAAgB;YACnC,CAAC,CAAC,IAAA,2BAAmB,EAAC,gBAAgB,CAAC,KAAK,CAAC;YAC7C,CAAC,CAAC,QAAQ;QACZ,QAAQ;QACR,mBAAmB,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7D,wBAAwB,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI;QACrE,QAAQ;QACR,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,CAAC;QACpE,GAAG,CAAC,wBAAwB,KAAK,SAAS,IAAI;YAC5C,4BAA4B,EAAE,wBAAwB;SACvD,CAAC;QACF,UAAU,EAAE,WAAW,EAAE,SAAS,IAAI,iBAAS,CAAC,mBAAmB;KACpE,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,2BAA2B,+BAgCtC","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\n\nimport { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../../constants/bridge';\nimport { ChainId } from '../../types';\nimport type {\n  GenericQuoteRequest,\n  QuoteMetadata,\n  QuoteRequest,\n  QuoteResponseV1,\n  TxData,\n} from '../../types';\nimport { FeatureId } from '../../types';\nimport { getNativeAssetForChainId, isCrossChain } from '../bridge';\nimport {\n  formatAddressToAssetId,\n  formatChainIdToCaip,\n} from '../caip-formatters';\nimport { MetricsSwapType } from './constants';\nimport type {\n  AccountHardwareType,\n  InputKeys,\n  InputValues,\n  QuoteWarning,\n  RequestParams,\n} from './types';\n\nexport const toInputChangedPropertyKey: Partial<\n  Record<keyof QuoteRequest, InputKeys>\n> = {\n  srcTokenAddress: 'token_source',\n  destTokenAddress: 'token_destination',\n  srcChainId: 'chain_source',\n  destChainId: 'chain_destination',\n  slippage: 'slippage',\n};\n\nexport const toInputChangedPropertyValue: Partial<\n  Record<\n    keyof typeof toInputChangedPropertyKey,\n    (\n      input_value: Partial<GenericQuoteRequest>,\n    ) => InputValues[keyof InputValues] | undefined\n  >\n> = {\n  srcTokenAddress: ({ srcTokenAddress, srcChainId }) =>\n    srcChainId\n      ? formatAddressToAssetId(srcTokenAddress ?? '', srcChainId)\n      : undefined,\n  destTokenAddress: ({ destTokenAddress, destChainId }) =>\n    destChainId\n      ? formatAddressToAssetId(destTokenAddress ?? '', destChainId)\n      : undefined,\n  srcChainId: ({ srcChainId }) =>\n    srcChainId ? formatChainIdToCaip(srcChainId) : undefined,\n  destChainId: ({ destChainId }) =>\n    destChainId ? formatChainIdToCaip(destChainId) : undefined,\n  slippage: ({ slippage }) => (slippage ? Number(slippage) : slippage),\n};\n\nexport const getSwapType = (\n  srcChainId?: GenericQuoteRequest['srcChainId'],\n  destChainId?: GenericQuoteRequest['destChainId'],\n) => {\n  if (srcChainId && !isCrossChain(srcChainId, destChainId ?? srcChainId)) {\n    return MetricsSwapType.SINGLE;\n  }\n  return MetricsSwapType.CROSSCHAIN;\n};\n\nexport const getSwapTypeFromQuote = (\n  quoteRequest: Partial<GenericQuoteRequest>,\n) => {\n  return getSwapType(quoteRequest.srcChainId, quoteRequest.destChainId);\n};\n\nexport const formatProviderLabel = ({\n  bridgeId,\n  bridges,\n}: QuoteResponseV1<TxData | string>['quote']): `${string}_${string}` =>\n  `${bridgeId}_${bridges[0]}`;\n\n/**\n * @param quoteRequest - The current quote request used to derive chain and token identity fields.\n * @param quoteRequest.srcChainId - Source chain id of the quote request.\n * @param quoteRequest.destChainId - Destination chain id of the quote request.\n * @param quoteRequest.srcTokenAddress - Source token address of the quote request.\n * @param quoteRequest.destTokenAddress - Destination token address of the quote request.\n * @param tokenSecurityTypeDestination - The security classification of the destination token,\n * supplied by the client (e.g. from token security/scanning data). Pass `null` when no\n * security data is available for the selected destination token.\n * @returns The analytics request params derived from the quote request. Token symbols are\n * omitted because the quote request only stores addresses; use\n * {@link getQuotesReceivedProperties} when building a `QuotesReceived` payload.\n */\nexport const getRequestParams = (\n  {\n    srcChainId,\n    destChainId,\n    srcTokenAddress,\n    destTokenAddress,\n  }: Partial<GenericQuoteRequest>,\n  tokenSecurityTypeDestination: string | null,\n): Omit<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> => {\n  // Fallback to ETH if srcChainId is not defined. This is ok since the clients default to Ethereum as the source chain\n  // This also doesn't happen at runtime since the quote request is validated before metrics are published\n  const srcChainIdCaip = formatChainIdToCaip(srcChainId ?? ChainId.ETH);\n  return {\n    chain_id_source: srcChainIdCaip,\n    chain_id_destination: destChainId ? formatChainIdToCaip(destChainId) : null,\n    token_address_source: srcTokenAddress\n      ? (formatAddressToAssetId(srcTokenAddress, srcChainIdCaip) ??\n        getNativeAssetForChainId(srcChainIdCaip)?.assetId ??\n        null)\n      : (getNativeAssetForChainId(srcChainIdCaip)?.assetId ?? null),\n    token_address_destination: destTokenAddress\n      ? (formatAddressToAssetId(\n          destTokenAddress,\n          destChainId ?? srcChainIdCaip,\n        ) ?? null)\n      : null,\n    token_security_type_destination: tokenSecurityTypeDestination,\n  };\n};\n\nexport const getAccountHardwareType = (\n  selectedAccount?: AccountsControllerState['internalAccounts']['accounts'][string],\n): AccountHardwareType => {\n  // Unified bridge analytics only support the schema enum values for hardware accounts.\n  switch (selectedAccount?.metadata?.keyring.type) {\n    case 'Ledger Hardware':\n      return 'Ledger';\n    case 'Trezor Hardware':\n      return 'Trezor';\n    case 'QR Hardware Wallet Device':\n      return 'QR Hardware';\n    case 'Lattice Hardware':\n      return 'Lattice';\n    default:\n      return null;\n  }\n};\n\nexport const isHardwareWallet = (\n  selectedAccount?: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n  return getAccountHardwareType(selectedAccount) !== null;\n};\n\n/**\n * @param slippage - The slippage percentage\n * @returns Whether the default slippage was overridden by the user\n *\n * @deprecated This function should not be used. Use {@link selectDefaultSlippagePercentage} instead.\n */\nexport const isCustomSlippage = (slippage: GenericQuoteRequest['slippage']) => {\n  return slippage !== DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0]?.slippage;\n};\n\nexport const getQuotesReceivedProperties = (\n  activeQuote: null | (QuoteResponseV1 & QuoteMetadata),\n  warnings: QuoteWarning[] = [],\n  isSubmittable: boolean = true,\n  recommendedQuote?: null | (QuoteResponseV1 & QuoteMetadata),\n  usdBalanceSource?: number,\n  hasSufficientGasForQuote?: boolean | null,\n) => {\n  const provider = activeQuote ? formatProviderLabel(activeQuote.quote) : '_';\n  return {\n    can_submit: isSubmittable,\n    gas_included: Boolean(activeQuote?.quote?.gasIncluded),\n    gas_included_7702: Boolean(activeQuote?.quote?.gasIncluded7702),\n    quoted_time_minutes: activeQuote?.estimatedProcessingTimeInSeconds\n      ? activeQuote.estimatedProcessingTimeInSeconds / 60\n      : 0,\n    usd_quoted_gas: Number(activeQuote?.gasFee?.effective?.usd ?? 0),\n    usd_quoted_return: Number(activeQuote?.toTokenAmount?.usd ?? 0),\n    usd_balance_source: usdBalanceSource ?? 0,\n    best_quote_provider: recommendedQuote\n      ? formatProviderLabel(recommendedQuote.quote)\n      : provider,\n    provider,\n    token_symbol_source: activeQuote?.quote.srcAsset.symbol ?? '',\n    token_symbol_destination: activeQuote?.quote.destAsset.symbol ?? null,\n    warnings,\n    price_impact: Number(activeQuote?.quote.priceData?.priceImpact ?? 0),\n    ...(hasSufficientGasForQuote !== undefined && {\n      has_sufficient_gas_for_quote: hasSufficientGasForQuote,\n    }),\n    feature_id: activeQuote?.featureId ?? FeatureId.UNIFIED_SWAP_BRIDGE,\n  };\n};\n"]}