{"version":3,"file":"multi-chain-accounts.mjs","sourceRoot":"","sources":["../../src/multi-chain-accounts-service/multi-chain-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mCAAmC;AAUzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAEhF,MAAM,cAAc,GAAG,CACrB,OAAe,EACf,WAAoC,EACpC,EAAE;IACF,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,0BAA0B,gBAAgB,OAAO,WAAW,CAChE,CAAC;IAEF,IAAI,WAAW,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,WAAsC,EAAE,EAAE;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,0BAA0B,2BAA2B,CAAC,CAAC;IAE9E,IAAI,WAAW,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,WAAW,EAAE,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,kBAAkB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,0BAA0B,uBAAuB,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAiC,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAe,EACf,OAAgC,EAChC,QAAgC,EAChC,QAAiB;IAEjB,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,EAAE;QAClC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;KACpC,CAAC,CAAC;IAEH,MAAM,OAAO,GAA2B;QACtC,0BAA0B,EAAE,YAAY,QAAQ,EAAE;KACnD,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,aAAa,GAAG,UAAU,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAwB,MAAM,WAAW,CAAC,GAAG,EAAE;QAC3D,OAAO;KACR,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAyE,EACzE,QAAgC,EAChC,QAAiB;IAEjB,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE;QACnD,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;KACpC,CAAC,CAAC;IAEH,MAAM,OAAO,GAA2B;QACtC,0BAA0B,EAAE,YAAY,QAAQ,EAAE;KACnD,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,aAAa,GAAG,UAAU,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAwB,MAAM,WAAW,CAAC,GAAG,EAAE;QAC3D,OAAO;KACR,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport type { CaipAccountAddress } from '@metamask/utils';\n\nimport type {\n  GetBalancesQueryParams,\n  GetBalancesQueryParamsV4,\n  GetBalancesResponse,\n  GetSupportedNetworksResponse,\n} from './types';\n\nexport const MULTICHAIN_ACCOUNTS_DOMAIN = 'https://accounts.api.cx.metamask.io';\n\nconst getBalancesUrl = (\n  address: string,\n  queryParams?: GetBalancesQueryParams,\n) => {\n  const url = new URL(\n    `${MULTICHAIN_ACCOUNTS_DOMAIN}/v2/accounts/${address}/balances`,\n  );\n\n  if (queryParams?.networks !== undefined) {\n    url.searchParams.append('networks', queryParams.networks);\n  }\n\n  return url;\n};\n\nconst getBalancesUrlV4 = (queryParams?: GetBalancesQueryParamsV4) => {\n  const url = new URL(`${MULTICHAIN_ACCOUNTS_DOMAIN}/v4/multiaccount/balances`);\n\n  if (queryParams?.networks !== undefined) {\n    url.searchParams.append('networks', queryParams.networks);\n  }\n\n  if (queryParams?.accountAddresses !== undefined) {\n    url.searchParams.append('accountAddresses', queryParams.accountAddresses);\n  }\n\n  return url;\n};\n\n/**\n * Fetches Supported Networks.\n *\n * @returns supported networks (decimal)\n */\nexport async function fetchSupportedNetworks(): Promise<number[]> {\n  const url = new URL(`${MULTICHAIN_ACCOUNTS_DOMAIN}/v1/supportedNetworks`);\n  const response: GetSupportedNetworksResponse = await handleFetch(url);\n  return response.fullSupport;\n}\n\n/**\n * Fetches Balances for multiple networks.\n *\n * @param address - address to fetch balances from\n * @param options - params to pass down for a more refined search\n * @param options.networks - the networks (in decimal) that you want to filter by\n * @param platform - indicates whether the platform is extension or mobile\n * @param jwtToken - JWT token for authentication\n * @returns a Balances Response\n */\nexport async function fetchMultiChainBalances(\n  address: string,\n  options: { networks?: number[] },\n  platform: 'extension' | 'mobile',\n  jwtToken?: string,\n) {\n  const url = getBalancesUrl(address, {\n    networks: options?.networks?.join(),\n  });\n\n  const headers: Record<string, string> = {\n    'x-metamask-clientproduct': `metamask-${platform}`,\n  };\n\n  if (jwtToken) {\n    headers.Authorization = `Bearer ${jwtToken}`;\n  }\n\n  const response: GetBalancesResponse = await handleFetch(url, {\n    headers,\n  });\n  return response;\n}\n\n/**\n * Fetches Balances for multiple networks.\n *\n * @param options - params to pass down for a more refined search\n * @param options.accountAddresses - the account addresses that you want to filter by\n * @param options.networks - the networks (in decimal) that you want to filter by\n * @param platform - indicates whether the platform is extension or mobile\n * @param jwtToken - JWT token for authentication\n * @returns a Balances Response\n */\nexport async function fetchMultiChainBalancesV4(\n  options: { accountAddresses?: CaipAccountAddress[]; networks?: number[] },\n  platform: 'extension' | 'mobile',\n  jwtToken?: string,\n) {\n  const url = getBalancesUrlV4({\n    accountAddresses: options?.accountAddresses?.join(),\n    networks: options?.networks?.join(),\n  });\n\n  const headers: Record<string, string> = {\n    'x-metamask-clientproduct': `metamask-${platform}`,\n  };\n\n  if (jwtToken) {\n    headers.Authorization = `Bearer ${jwtToken}`;\n  }\n\n  const response: GetBalancesResponse = await handleFetch(url, {\n    headers,\n  });\n  return response;\n}\n"]}