{"version":3,"file":"transfer.mjs","sources":["../../src/transfer/transfer.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { legacySendTransactionBridge } from '../transaction/legacy-bridge'\nimport { encodeTransactionNote, getSenderAddress } from '../transaction/transaction'\nimport { AlgorandClient } from '../types/algorand-client'\nimport { TestNetDispenserApiClient } from '../types/dispenser-client'\nimport { SendTransactionResult } from '../types/transaction'\nimport { AlgoRekeyParams, EnsureFundedParams, EnsureFundedReturnType, TransferAssetParams } from '../types/transfer'\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `algorand.account.ensureFunded()` / `algorand.account.ensureFundedFromEnvironment()`\n * / `algorand.account.ensureFundedFromTestNetDispenserApi()` instead\n *\n * Funds a given account using a funding source such that it has a certain amount of Algo free to spend (accounting for Algo locked in minimum balance requirement).\n *\n * https://dev.algorand.co/concepts/smart-contracts/costs-constraints#mbr\n *\n * @param funding The funding configuration of type `EnsureFundedParams`, including the account to fund, minimum spending balance, and optional parameters. If you set `useDispenserApi` to true, you must also set `ALGOKIT_DISPENSER_ACCESS_TOKEN` in your environment variables.\n * @param algod An instance of the Algodv2 client.\n * @param kmd An optional instance of the Kmd client.\n * @returns\n * - `EnsureFundedReturnType` if funds were transferred.\n * - `undefined` if no funds were needed.\n */\nexport async function ensureFunded<T extends EnsureFundedParams>(\n  funding: T,\n  algod: Algodv2,\n  kmd?: Kmd,\n): Promise<EnsureFundedReturnType | undefined> {\n  const algorand = AlgorandClient.fromClients({ algod, kmd })\n\n  if (funding.fundingSource instanceof TestNetDispenserApiClient) {\n    const result = await algorand.account.ensureFundedFromTestNetDispenserApi(\n      getSenderAddress(funding.accountToFund),\n      funding.fundingSource,\n      funding.minSpendingBalance,\n      {\n        minFundingIncrement: funding.minFundingIncrement,\n      },\n    )\n    if (!result) return undefined\n    return {\n      amount: Number(result.amountFunded.microAlgo),\n      transactionId: result.transactionId,\n    }\n  } else {\n    const sender = funding.fundingSource ?? (await algorand.account.dispenserFromEnvironment())\n    if (funding.fundingSource) {\n      algorand.setSignerFromAccount(funding.fundingSource)\n    }\n\n    const result = await algorand.account.ensureFunded(\n      getSenderAddress(funding.accountToFund),\n      getSenderAddress(sender),\n      funding.minSpendingBalance,\n      {\n        minFundingIncrement: funding.minFundingIncrement,\n        note: encodeTransactionNote(funding.note),\n        staticFee: funding.fee,\n        lease: funding.lease,\n        maxFee: funding.maxFee,\n        maxRoundsToWaitForConfirmation: funding.maxRoundsToWaitForConfirmation,\n        suppressLog: funding.suppressLog,\n      },\n    )\n\n    return result\n      ? {\n          amount: Number(result.amountFunded.microAlgo),\n          transactionId: result.txIds[0],\n        }\n      : undefined\n  }\n}\n\n/**\n * @deprecated Use `algorand.send.assetTransfer()` / `algorand.createTransaction.assetTransfer()` instead\n *\n * Transfer asset between two accounts.\n * @param transfer The transfer definition\n * @param algod An algod client\n * @returns The transaction object and optionally the confirmation if it was sent to the chain (`skipSending` is `false` or unset)\n *\n * @example Usage example\n * ```typescript\n * await algokit.transferAsset({ from, to, assetId, amount }, algod)\n * ```\n */\nexport async function transferAsset(transfer: TransferAssetParams, algod: Algodv2): Promise<SendTransactionResult> {\n  return legacySendTransactionBridge(\n    algod,\n    transfer.from,\n    transfer,\n    {\n      assetId: BigInt(transfer.assetId),\n      sender: getSenderAddress(transfer.from),\n      receiver: getSenderAddress(transfer.to),\n      clawbackTarget: transfer.clawbackFrom ? getSenderAddress(transfer.clawbackFrom) : undefined,\n      amount: BigInt(transfer.amount),\n      note: encodeTransactionNote(transfer.note),\n      lease: transfer.lease,\n    },\n    (c) => c.assetTransfer,\n    (c) => c.assetTransfer,\n  )\n}\n\n/**\n * @deprecated Use `algorand.account.rekeyAccount()` instead\n *\n * Rekey an account to a new address.\n *\n * **Note:** Please be careful with this function and be sure to read the [official rekey guidance](https://dev.algorand.co/concepts/accounts/rekeying).\n *\n * @param rekey The rekey definition\n * @param algod An algod client\n * @returns The transaction object and optionally the confirmation if it was sent to the chain (`skipSending` is `false` or unset)\n *\n * @example Usage example\n * ```typescript\n * await algokit.rekeyAccount({ from, rekeyTo }, algod)\n * ```\n */\nexport async function rekeyAccount(rekey: AlgoRekeyParams, algod: Algodv2): Promise<SendTransactionResult> {\n  return legacySendTransactionBridge(\n    algod,\n    rekey.from,\n    rekey,\n    {\n      sender: getSenderAddress(rekey.from),\n      receiver: getSenderAddress(rekey.from),\n      amount: (0).microAlgo(),\n      rekeyTo: typeof rekey.rekeyTo === 'string' ? rekey.rekeyTo : getSenderAddress(rekey.rekeyTo),\n      note: encodeTransactionNote(rekey.note),\n      lease: rekey.lease,\n    },\n    (c) => c.payment,\n    (c) => c.payment,\n  )\n}\n"],"names":[],"mappings":"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"}