{"version":3,"sources":["../src/runtime/decodeContractCallTransaction.ts"],"names":[],"mappings":";;;AA2BO,SAAS,6BAAA,CAGd,WACA,EAAA,EAC0C;AAC1C,EAAA,IAAI,EAAE,EAAA,CAAG,aAAA,CAAc,WAAA,IAAe,SAAA,CAAA,EAAY;AAChD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,oDAAA,EAAuD,EAAA,CAAG,aAAA,CAAc,WAAW,CAAA;AAAA,KACrF;AAAA,EACF;AACA,EAAA,MAAM,YAAA,GAAe,GAAG,aAAA,CAAc,WAAA;AAEtC,EAAA,IAAI,EAAE,EAAA,CAAG,aAAA,CAAc,aAAA,IAAiB,SAAA,CAAU,YAAY,CAAA,CAAA,EAAI;AAChE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,sDAAA,EAAyD,MAAA;AAAA,QACvD;AAAA,OACD,CAAA,CAAA,EAAI,EAAA,CAAG,aAAA,CAAc,aAAa,CAAA;AAAA,KACrC;AAAA,EACF;AACA,EAAA,MAAM,YAAA,GAAe,GAAG,aAAA,CACrB,aAAA;AAEH,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAG,sCAAA;AAAA,MACD,SAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEO,SAAS,sCAAA,CAKd,SAAA,EACA,cAAA,EACA,YAAA,EACA,EAAA,EAOQ;AACR,EAAA,MAAM,kBAAA,GAAqB,SAAA,CAAU,cAAc,CAAA,CACjD,YACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,mBAAmB,KAAA,CAAM,MAAA;AAAA,IACpC,CAAC,GAAA,EAAK,GAAA,EAAK,KAAA,MAAW;AAAA,MACpB,GAAG,GAAA;AAAA,MACH,CAAC,GAAA,CAAI,IAAI,GAAG,IAAI,IAAA,CAAK,MAAA;AAAA,QACnB,cAAc,EAAA,CAAG,aAAA,CAAc,aAAA,CAAe,KAAK,EAAG,GAAG;AAAA;AAC3D,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,MAAA,GAAS,mBAAmB,MAAA,CAAO,MAAA;AAAA,IACvC,aAAA,CAAc,EAAA,CAAG,SAAA,CAAU,GAAG;AAAA,GAChC;AAEA,EAAA,OAAO,EAAE,IAAA,EAAY,MAAA,EAAQ,GAAA,EAAK,EAAA,EAAG;AACvC","file":"chunk-PJSY4VXZ.mjs","sourcesContent":["import { ContractCallTransaction } from \"@stacks/stacks-blockchain-api-types\";\nimport { deserializeCV } from \"@stacks/transactions\";\nimport {\n  ContractBaseType,\n  OpenCallFunctionDescriptor,\n  ParameterObjOfDescriptor,\n  ReturnTypeOfDescriptor,\n} from \"./contractBase\";\n\nexport type ContractCallTransactionResultMap<\n  Contracts extends ContractBaseType\n> = {\n  [C in keyof Contracts]: {\n    [F in keyof Contracts[C]]: {\n      contractName: C;\n      functionName: F;\n      args: ParameterObjOfDescriptor<Contracts[C][F]>;\n      result: ReturnTypeOfDescriptor<Contracts[C][F]>;\n    };\n  };\n};\n\nexport type ContractCallTransactionResult<Contracts extends ContractBaseType> =\n  {\n    [K in keyof ContractCallTransactionResultMap<Contracts>]: ContractCallTransactionResultMap<Contracts>[K][keyof ContractCallTransactionResultMap<Contracts>[K]];\n  }[keyof ContractCallTransactionResultMap<Contracts>];\n\nexport function decodeContractCallTransaction<\n  Contracts extends ContractBaseType\n>(\n  contracts: Contracts,\n  tx: ContractCallTransaction\n): ContractCallTransactionResult<Contracts> {\n  if (!(tx.contract_call.contract_id in contracts)) {\n    throw new Error(\n      `[decodeContractCallTransaction] unknown contract id ${tx.contract_call.contract_id}`\n    );\n  }\n  const contractName = tx.contract_call.contract_id as keyof Contracts;\n\n  if (!(tx.contract_call.function_name in contracts[contractName])) {\n    throw new Error(\n      `[decodeContractCallTransaction] unknown function name ${String(\n        contractName\n      )}.${tx.contract_call.function_name}`\n    );\n  }\n  const functionName = tx.contract_call\n    .function_name as keyof Contracts[keyof Contracts];\n\n  return {\n    contractName,\n    functionName,\n    ...decodeSpecifiedContractCallTransaction(\n      contracts,\n      contractName,\n      functionName,\n      tx\n    ),\n  };\n}\n\nexport function decodeSpecifiedContractCallTransaction<\n  Contracts extends ContractBaseType,\n  T extends keyof Contracts,\n  F extends keyof Contracts[T]\n>(\n  contracts: Contracts,\n  contractOrType: T,\n  functionName: F,\n  tx: ContractCallTransaction\n): Contracts[T][F] extends OpenCallFunctionDescriptor\n  ? {\n      args: ParameterObjOfDescriptor<Contracts[T][F]>;\n      result: ReturnTypeOfDescriptor<Contracts[T][F]>;\n      raw: ContractCallTransaction;\n    }\n  : never {\n  const functionDescriptor = contracts[contractOrType][\n    functionName\n  ] as any as OpenCallFunctionDescriptor;\n\n  const args = functionDescriptor.input.reduce(\n    (acc, arg, index) => ({\n      ...acc,\n      [arg.name]: arg.type.decode(\n        deserializeCV(tx.contract_call.function_args![index]!.hex)\n      ),\n    }),\n    {} as Record<string, any>\n  );\n\n  const result = functionDescriptor.output.decode(\n    deserializeCV(tx.tx_result.hex)\n  );\n\n  return { args: args, result, raw: tx } as any;\n}\n"]}