{"version":3,"file":"asset.mjs","sources":["../src/asset.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { encodeTransactionNote, getSenderAddress } from './transaction'\nimport { legacySendTransactionBridge } from './transaction/legacy-bridge'\nimport { AlgorandClient } from './types/algorand-client'\nimport { AssetBulkOptInOutParams, AssetOptInParams, AssetOptOutParams, CreateAssetParams } from './types/asset'\nimport { AssetCreateParams, AssetOptInParams as NewAssetOptInParams, AssetOptOutParams as NewAssetOptOutParams } from './types/composer'\nimport { SendTransactionResult } from './types/transaction'\nimport Algodv2 = algosdk.Algodv2\n\n/**\n * @deprecated use `algorand.send.assetCreate()` / `algorand.createTransaction.assetCreate()` instead\n *\n * Create an Algorand Standard Asset (ASA).\n * @param create The asset creation 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.createAsset({ creator: account, total: 1, decimals: 0, name: 'My asset' }, algod)\n * ```\n */\nexport async function createAsset(\n  create: CreateAssetParams,\n  algod: Algodv2,\n): Promise<SendTransactionResult & { confirmation?: { assetIndex: number | bigint } }> {\n  const params: AssetCreateParams = {\n    sender: getSenderAddress(create.creator),\n    total: BigInt(create.total),\n    decimals: create.decimals,\n    assetName: create.name,\n    unitName: create.unit,\n    manager: create.manager ? getSenderAddress(create.manager) : undefined,\n    clawback: create.clawbackAccount ? getSenderAddress(create.clawbackAccount) : undefined,\n    freeze: create.freezeAccount ? getSenderAddress(create.freezeAccount) : undefined,\n    reserve: create.reserveAccount ? getSenderAddress(create.reserveAccount) : undefined,\n    defaultFrozen: create.frozenByDefault,\n    lease: create.lease,\n    metadataHash: create.metadataHash,\n    note: encodeTransactionNote(create.note),\n    url: create.url,\n  }\n\n  return (await legacySendTransactionBridge(\n    algod,\n    create.creator,\n    create,\n    params,\n    (client) => client.assetCreate,\n    (client) => client.assetCreate,\n  )) as SendTransactionResult & { confirmation: { assetIndex: number | bigint } }\n}\n\n/**\n * @deprecated use `algorand.send.assetOptIn()` / `algorand.createTransaction.assetOptIn()` instead\n *\n * Opt-in an account to an asset.\n * @param optIn The opt-in 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.assetOptIn({ account, assetId }, algod)\n * ```\n */\nexport async function assetOptIn(optIn: AssetOptInParams, algod: Algodv2): Promise<SendTransactionResult> {\n  const params: NewAssetOptInParams = {\n    assetId: BigInt(optIn.assetId),\n    sender: getSenderAddress(optIn.account),\n    note: encodeTransactionNote(optIn.note),\n    lease: optIn.lease,\n  }\n\n  return legacySendTransactionBridge(\n    algod,\n    optIn.account,\n    optIn,\n    params,\n    (c) => c.assetOptIn,\n    (c) => c.assetOptIn,\n  )\n}\n\n/**\n * @deprecated use `algorand.send.assetOptOut()` / `algorand.createTransaction.assetOptOut()` instead\n *\n * Opt-out an account from an asset.\n * @param optOut The opt-in 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.assetOptOut({ account, assetId, assetCreatorAddress }, algod)\n * ```\n */\nexport async function assetOptOut(optOut: AssetOptOutParams, algod: Algodv2): Promise<SendTransactionResult> {\n  const assetCreatorAddress = optOut.assetCreatorAddress ?? (await algod.getAssetByID(optOut.assetId).do()).params.creator\n\n  const params: NewAssetOptOutParams = {\n    assetId: BigInt(optOut.assetId),\n    creator: assetCreatorAddress,\n    sender: getSenderAddress(optOut.account),\n    note: encodeTransactionNote(optOut.note),\n    lease: optOut.lease,\n  }\n\n  return legacySendTransactionBridge(\n    algod,\n    optOut.account,\n    optOut,\n    params,\n    (c) => c.assetOptOut,\n    (c) => (params: NewAssetOptOutParams) => c.assetOptOut({ ...params, ensureZeroBalance: optOut.ensureZeroBalance ?? true }),\n  )\n}\n\n/**\n * @deprecated use `algorand.asset.bulkOptIn()` instead\n *\n * Opt in to a list of assets on the Algorand blockchain.\n *\n * @param optIn - The bulk opt-in request.\n * @param algod - An instance of the Algodv2 class from the `algosdk` library.\n * @returns A record object where the keys are the asset IDs and the values are the corresponding transaction IDs for successful opt-ins.\n * @throws If there is an error during the opt-in process.\n * @example algokit.bulkOptIn({ account: account, assetIds: [12345, 67890] }, algod)\n */\nexport async function assetBulkOptIn(optIn: AssetBulkOptInOutParams, algod: Algodv2): Promise<Record<number, string>> {\n  const result = await AlgorandClient.fromClients({ algod })\n    .setSignerFromAccount(optIn.account)\n    .asset.bulkOptIn(getSenderAddress(optIn.account), optIn.assetIds.map(BigInt), {\n      note: encodeTransactionNote(optIn.note),\n      maxFee: optIn.maxFee,\n      suppressLog: optIn.suppressLog,\n    })\n\n  const returnResult: Record<number, string> = {}\n  for (const r of result) {\n    returnResult[Number(r.assetId)] = r.transactionId\n  }\n  return returnResult\n}\n\n/**\n * @deprecated use `algorand.asset.bulkOptOut()` instead\n *\n * Opt out of multiple assets in Algorand blockchain.\n *\n * @param optOut The bulk opt-out request.\n * @param algod - An instance of the Algodv2 client used to interact with the Algorand blockchain.\n * @returns A record object containing asset IDs as keys and their corresponding transaction IDs as values.\n * @throws If there is an error during the opt-out process.\n * @example algokit.bulkOptOut({ account: account, assetIds: [12345, 67890] }, algod)\n */\nexport async function assetBulkOptOut(optOut: AssetBulkOptInOutParams, algod: Algodv2): Promise<Record<number, string>> {\n  const result = await AlgorandClient.fromClients({ algod })\n    .setSignerFromAccount(optOut.account)\n    .asset.bulkOptOut(getSenderAddress(optOut.account), optOut.assetIds.map(BigInt), {\n      ensureZeroBalance: optOut.validateBalances ?? true,\n      note: encodeTransactionNote(optOut.note),\n      maxFee: optOut.maxFee,\n      suppressLog: optOut.suppressLog,\n    })\n\n  const returnResult: Record<number, string> = {}\n  for (const r of result) {\n    returnResult[Number(r.assetId)] = r.transactionId\n  }\n  return returnResult\n}\n"],"names":[],"mappings":"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"}