{"version":3,"file":"update-payment-token.mjs","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,wBAAwB;AAC/D,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAK1C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACb,2BAAuB;AACxB,OAAO,EAAE,cAAc,EAAE,iCAA6B;AAEtD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAatE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAkC,EAClC,OAAkC;IAElC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;KAC1C;IAED,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,OAAO;QACP,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAW;QACvC,SAAS;QACT,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IAED,GAAG,CAAC,uBAAuB,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAE9D,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,YAAY,GAMb;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GACxB,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAEvD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE;QACrC,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEzE,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,iBAAiB;SAClC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC;SACpC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,UAAU,GAAG,iBAAiB;SACjC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;SACnC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,WAAW;QACX,YAAY;QACZ,UAAU;QACV,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC","sourcesContent":["import { createModuleLogger, type Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type { TransactionPayControllerMessenger } from '..';\nimport { projectLogger } from '../logger';\nimport type {\n  TransactionPaymentToken,\n  UpdateTransactionDataCallback,\n} from '../types';\nimport {\n  getTokenBalance,\n  getTokenFiatRate,\n  getTokenInfo,\n} from '../utils/token';\nimport { getTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'update-payment-token');\n\nexport type UpdatePaymentTokenRequest = {\n  transactionId: string;\n  tokenAddress: Hex;\n  chainId: Hex;\n};\n\nexport type UpdatePaymentTokenOptions = {\n  messenger: TransactionPayControllerMessenger;\n  updateTransactionData: UpdateTransactionDataCallback;\n};\n\n/**\n * Update the payment token for a specific transaction.\n *\n * @param request  - Request parameters.\n * @param options - Options bag.\n */\nexport function updatePaymentToken(\n  request: UpdatePaymentTokenRequest,\n  options: UpdatePaymentTokenOptions,\n) {\n  const { transactionId, tokenAddress, chainId } = request;\n  const { messenger, updateTransactionData } = options;\n\n  const transaction = getTransaction(transactionId, messenger);\n\n  if (!transaction) {\n    throw new Error('Transaction not found');\n  }\n\n  const paymentToken = getPaymentToken({\n    chainId,\n    from: transaction?.txParams.from as Hex,\n    messenger,\n    tokenAddress,\n  });\n\n  if (!paymentToken) {\n    throw new Error('Payment token not found');\n  }\n\n  log('Updated payment token', { transactionId, paymentToken });\n\n  updateTransactionData(transactionId, (data) => {\n    data.paymentToken = paymentToken;\n  });\n}\n\n/**\n * Generate the full payment token data from a token address and chain ID.\n *\n * @param request - The payment token request parameters.\n * @param request.chainId - The chain ID.\n * @param request.from - The address to get the token balance for.\n * @param request.messenger - The transaction pay controller messenger.\n * @param request.tokenAddress - The token address.\n * @returns The payment token or undefined if the token data could not be retrieved.\n */\nfunction getPaymentToken({\n  chainId,\n  from,\n  messenger,\n  tokenAddress,\n}: {\n  chainId: Hex;\n  from: Hex;\n  messenger: TransactionPayControllerMessenger;\n  tokenAddress: Hex;\n}): TransactionPaymentToken | undefined {\n  const { decimals, symbol } =\n    getTokenInfo(messenger, tokenAddress, chainId) ?? {};\n\n  if (decimals === undefined || !symbol) {\n    return undefined;\n  }\n\n  const tokenFiatRate = getTokenFiatRate(messenger, tokenAddress, chainId);\n\n  if (tokenFiatRate === undefined) {\n    return undefined;\n  }\n\n  const balance = getTokenBalance(messenger, from, chainId, tokenAddress);\n  const balanceRawValue = new BigNumber(balance);\n  const balanceHumanValue = new BigNumber(balance).shiftedBy(-decimals);\n  const balanceRaw = balanceRawValue.toFixed(0);\n  const balanceHuman = balanceHumanValue.toString(10);\n\n  const balanceFiat = balanceHumanValue\n    .multipliedBy(tokenFiatRate.fiatRate)\n    .toString(10);\n\n  const balanceUsd = balanceHumanValue\n    .multipliedBy(tokenFiatRate.usdRate)\n    .toString(10);\n\n  return {\n    address: tokenAddress,\n    balanceFiat,\n    balanceHuman,\n    balanceRaw,\n    balanceUsd,\n    chainId,\n    decimals,\n    symbol,\n  };\n}\n"]}