{
  "version": 3,
  "sources": ["../../../src/utils/validation/isContract.ts"],
  "sourcesContent": ["import { Address } from 'lib/sdkCore';\nimport {\n  ESDTTransferTypesEnum,\n  TypesOfSmartContractCallsEnum\n} from 'types/enums.types';\nimport { decodeBase64, isStringBase64 } from 'utils/decoders/base64Utils';\nimport { addressIsValid } from './addressIsValid';\nimport { isHexValidCharacters, isHexValidLength } from './hex';\n\nexport function isContract(\n  receiver: string,\n  sender?: string,\n  data = ''\n): boolean {\n  const isValid = addressIsValid(receiver);\n\n  if (!isValid) {\n    return false;\n  }\n\n  const isContractAddress = new Address(receiver).isSmartContract();\n\n  if (isContractAddress) {\n    return true;\n  }\n\n  const extractedAddress = getAddressFromDataField({ receiver, data });\n\n  if (!extractedAddress) {\n    return false;\n  }\n\n  const isExtractedAddressContractCall = new Address(\n    extractedAddress\n  ).isSmartContract();\n\n  return (\n    isExtractedAddressContractCall || isSelfESDTContract(receiver, sender, data)\n  );\n}\n\nexport function isSelfESDTContract(\n  receiver: string,\n  sender?: string,\n  data?: string\n) {\n  const parts = data?.split('@');\n  if (parts == null) {\n    return false;\n  }\n  const [type, ...restParts] = parts;\n  const isSelfTransaction =\n    sender != null && receiver != null && receiver === sender;\n  const isCorrectESDTType = Object.values(ESDTTransferTypesEnum).includes(\n    type as ESDTTransferTypesEnum\n  );\n  const areDataPartsValid = restParts.every(\n    (part) => isHexValidCharacters(part) && isHexValidLength(part)\n  );\n  return isSelfTransaction && isCorrectESDTType && areDataPartsValid;\n}\n\nexport function getAddressFromDataField({\n  receiver,\n  data\n}: {\n  receiver: string;\n  data: string;\n}) {\n  try {\n    if (!data) {\n      return receiver;\n    }\n    const parsedData = isStringBase64(data) ? decodeBase64(data) : data;\n\n    const addressIndex = getAddressIndex(parsedData);\n\n    const parts = parsedData.split('@');\n    return addressIndex > -1 ? parts[addressIndex] : receiver;\n  } catch (err) {\n    console.log(err);\n    return;\n  }\n}\n\nfunction getAddressIndex(data: string) {\n  if (data.includes(TypesOfSmartContractCallsEnum.MultiESDTNFTTransfer)) {\n    return 1;\n  }\n  if (data.includes(TypesOfSmartContractCallsEnum.ESDTNFTTransfer)) {\n    return 4;\n  }\n  return -1;\n}\n"],
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,EAAA,eAAAC,EAAA,uBAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAAwB,uBACxBC,EAGO,6BACPC,EAA6C,sCAC7CC,EAA+B,4BAC/BC,EAAuD,iBAEhD,SAASP,EACdQ,EACAC,EACAC,EAAO,GACE,CAGT,GAAI,IAFY,kBAAeF,CAAQ,EAGrC,MAAO,GAKT,GAF0B,IAAI,UAAQA,CAAQ,EAAE,gBAAgB,EAG9D,MAAO,GAGT,MAAMG,EAAmBZ,EAAwB,CAAE,SAAAS,EAAU,KAAAE,CAAK,CAAC,EAEnE,OAAKC,EAIkC,IAAI,UACzCA,CACF,EAAE,gBAAgB,GAGkBV,EAAmBO,EAAUC,EAAQC,CAAI,EARpE,EAUX,CAEO,SAAST,EACdO,EACAC,EACAC,EACA,CACA,MAAME,EAAQF,GAAM,MAAM,GAAG,EAC7B,GAAIE,GAAS,KACX,MAAO,GAET,KAAM,CAACC,EAAM,GAAGC,CAAS,EAAIF,EACvBG,EACJN,GAAU,MAAQD,GAAY,MAAQA,IAAaC,EAC/CO,EAAoB,OAAO,OAAO,uBAAqB,EAAE,SAC7DH,CACF,EACMI,EAAoBH,EAAU,MACjCI,MAAS,wBAAqBA,CAAI,MAAK,oBAAiBA,CAAI,CAC/D,EACA,OAAOH,GAAqBC,GAAqBC,CACnD,CAEO,SAASlB,EAAwB,CACtC,SAAAS,EACA,KAAAE,CACF,EAGG,CACD,GAAI,CACF,GAAI,CAACA,EACH,OAAOF,EAET,MAAMW,KAAa,kBAAeT,CAAI,KAAI,gBAAaA,CAAI,EAAIA,EAEzDU,EAAeC,EAAgBF,CAAU,EAEzCP,EAAQO,EAAW,MAAM,GAAG,EAClC,OAAOC,EAAe,GAAKR,EAAMQ,CAAY,EAAIZ,CACnD,OAASc,EAAK,CACZ,QAAQ,IAAIA,CAAG,EACf,MACF,CACF,CAEA,SAASD,EAAgBX,EAAc,CACrC,OAAIA,EAAK,SAAS,gCAA8B,oBAAoB,EAC3D,EAELA,EAAK,SAAS,gCAA8B,eAAe,EACtD,EAEF,EACT",
  "names": ["isContract_exports", "__export", "getAddressFromDataField", "isContract", "isSelfESDTContract", "__toCommonJS", "import_sdkCore", "import_enums", "import_base64Utils", "import_addressIsValid", "import_hex", "receiver", "sender", "data", "extractedAddress", "parts", "type", "restParts", "isSelfTransaction", "isCorrectESDTType", "areDataPartsValid", "part", "parsedData", "addressIndex", "getAddressIndex", "err"]
}
