{"version":3,"sources":["../src/runtime/executeReadonlyCall.ts"],"names":[],"mappings":";;;AAgCO,IAAM,0BAAA,GACX,CACE,SAAA,EACA,cAAA,KAMF,OAAO,cAAc,YAAA,EAAc,IAAA,EAAM,OAAA,GAAU,EAAC,KAAM;AACxD,EAAA,MAAM,kBAAA,GAAqB,SAAA,CAAU,YAAY,CAAA,CAAE,YAAY,CAAA;AAE/D,EAAA,IAAI,kBAAA,CAAmB,SAAS,UAAA,EAAY;AAC1C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,+BAAA,EAAkC,YAAY,CAAA,CAAA,EAAI,YAAY,CAAA,8BAAA;AAAA,KAChE;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAA,CAAM,GAAA;AAAA,IAAI,CAAC,QAChD,GAAA,CAAI,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC;AAAA,GAChC;AAEA,EAAA,MAAM,eAAA,GACJ,OAAA,CAAQ,eAAA,IAAmB,cAAA,CAAe,eAAA;AAC5C,EAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,IAAA,MAAM,IAAI,MAAM,CAAA,+CAAA,CAAiD,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,aAAA,GACJ,OAAA,CAAQ,aAAA,IACR,cAAA,CAAe,oBAAA,IACf,eAAA;AAEF,EAAA,MAAM,qBAAA,GACJ,OAAA,CAAQ,oBAAA,IACR,cAAA,CAAe,oBAAA,IACf,yBAAA;AAEF,EAAA,MAAM,MAAA,GAAS,MAAM,qBAAA,CAAsB;AAAA,IACzC,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA,EAAc,WAAA;AAAA,IACd,eAAA,EAAiB,eAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,OAAO,kBAAA,CAAmB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAChD","file":"chunk-O5OBVITA.mjs","sourcesContent":["import { fetchCallReadOnlyFunction } from \"@stacks/transactions\";\nimport type { StringOnly } from \"../utils/helpers\";\nimport type {\n  ContractBaseType,\n  ParameterObjOfDescriptor,\n  ReadonlyFunctionDescriptor,\n  ReturnTypeOfDescriptor,\n} from \"./contractBase\";\n\nexport type CallReadOnlyFunctionFn = typeof fetchCallReadOnlyFunction;\n\nexport type ExecuteReadonlyCallFn<Contracts extends ContractBaseType> = <\n  T extends StringOnly<keyof Contracts>,\n  F extends StringOnly<keyof Contracts[T]>,\n  Descriptor extends Contracts[T][F]\n>(\n  contractName: T,\n  functionName: F,\n  args: Descriptor extends ReadonlyFunctionDescriptor\n    ? ParameterObjOfDescriptor<Descriptor>\n    : never,\n  options?: {\n    deployerAddress?: string;\n    senderAddress?: string;\n    callReadOnlyFunction?: CallReadOnlyFunctionFn;\n  }\n) => Promise<\n  Descriptor extends ReadonlyFunctionDescriptor\n    ? ReturnTypeOfDescriptor<Descriptor>\n    : never\n>;\n\nexport const executeReadonlyCallFactory =\n  <T extends ContractBaseType>(\n    contracts: T,\n    factoryOptions: {\n      deployerAddress?: string;\n      defaultSenderAddress?: string;\n      callReadOnlyFunction?: CallReadOnlyFunctionFn;\n    }\n  ): ExecuteReadonlyCallFn<T> =>\n  async (contractName, functionName, args, options = {}) => {\n    const functionDescriptor = contracts[contractName][functionName];\n\n    if (functionDescriptor.mode !== \"readonly\") {\n      throw new Error(\n        `[executeReadonlyCall] function ${contractName}.${functionName} should be a readonly function`\n      );\n    }\n\n    const clarityArgs = functionDescriptor.input.map((arg) =>\n      arg.type.encode(args[arg.name])\n    );\n\n    const deployerAddress =\n      options.deployerAddress ?? factoryOptions.deployerAddress;\n    if (deployerAddress == null) {\n      throw new Error(`[executeReadonlyCall] deployer address required`);\n    }\n\n    const senderAddress =\n      options.senderAddress ??\n      factoryOptions.defaultSenderAddress ??\n      deployerAddress;\n\n    const _callReadOnlyFunction =\n      options.callReadOnlyFunction ??\n      factoryOptions.callReadOnlyFunction ??\n      fetchCallReadOnlyFunction;\n\n    const result = await _callReadOnlyFunction({\n      contractName,\n      functionName,\n      functionArgs: clarityArgs,\n      contractAddress: deployerAddress,\n      senderAddress,\n    });\n\n    return functionDescriptor.output.decode(result);\n  };\n"]}