{"version":3,"file":"freezeTokens.cjs","sources":["../../../../../src/plugins/tokenModule/operations/freezeTokens.ts"],"sourcesContent":["import { createFreezeAccountInstruction } from '@solana/spl-token';\nimport { PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport type { Convergence } from '../../../Convergence';\nimport {\n  isSigner,\n  KeypairSigner,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  Signer,\n  useOperation,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'FreezeTokensOperation' as const;\n\n/**\n * Freezes a token account.\n *\n * ```ts\n * await convergence.tokens().freeze({ mintAddress, freezeAuthority });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const freezeTokensOperation = useOperation<FreezeTokensOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type FreezeTokensOperation = Operation<\n  typeof Key,\n  FreezeTokensInput,\n  FreezeTokensOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type FreezeTokensInput = {\n  /** The address of the mint account. */\n  mintAddress: PublicKey;\n\n  /**\n   * The freeze authority as a Signer.\n   *\n   * This may be provided as a PublicKey if and only if\n   * the `multiSigners` parameter is provided.\n   */\n  freezeAuthority: PublicKey | Signer;\n\n  /**\n   * The owner of the token account.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  tokenOwner?: PublicKey;\n\n  /**\n   * The address of the token account.\n   *\n   * @defaultValue Defaults to using the associated token account\n   * from the `mintAddress` and `tokenOwner` parameters.\n   */\n  tokenAddress?: PublicKey;\n\n  /**\n   * The signing accounts to use if the freeze authority is a multisig.\n   *\n   * @defaultValue `[]`\n   */\n  multiSigners?: KeypairSigner[];\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type FreezeTokensOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const freezeTokensOperationHandler: OperationHandler<FreezeTokensOperation> =\n  {\n    async handle(\n      operation: FreezeTokensOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<FreezeTokensOutput> {\n      const builder = await freezeTokensBuilder(\n        convergence,\n        operation.input,\n        scope\n      );\n      return builder.sendAndConfirm(convergence, scope.confirmOptions);\n    },\n  };\n\n// -----------------\n// Builder\n// -----------------\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type FreezeTokensBuilderParams = Omit<\n  FreezeTokensInput,\n  'confirmOptions'\n> & {\n  /** A key to distinguish the instruction that freezes the token account. */\n  instructionKey?: string;\n};\n\n/**\n * Freezes a token account.\n *\n * ```ts\n * const transactionBuilder = convergence.tokens().builders().freeze({ mintAddress, freezeAuthority });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const freezeTokensBuilder = async (\n  convergence: Convergence,\n  params: FreezeTokensBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    mintAddress,\n    tokenOwner = convergence.identity().publicKey,\n    tokenAddress,\n    multiSigners = [],\n    freezeAuthority,\n  } = params;\n\n  const [authorityPublicKey, signers] = isSigner(freezeAuthority)\n    ? [freezeAuthority.publicKey, [freezeAuthority]]\n    : [freezeAuthority, multiSigners];\n\n  const tokenProgram = convergence.programs().getToken(programs);\n  const tokenAddressOrAta =\n    tokenAddress ??\n    convergence.tokens().pdas().associatedTokenAccount({\n      mint: mintAddress,\n      owner: tokenOwner,\n      programs,\n    });\n\n  const txBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createFreezeAccountInstruction(\n        tokenAddressOrAta,\n        mintAddress,\n        authorityPublicKey,\n        multiSigners,\n        tokenProgram.address\n      ),\n      signers,\n      key: params.instructionKey ?? 'freezeTokens',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["Key","freezeTokensOperation","useOperation","freezeTokensOperationHandler","handle","operation","convergence","scope","_asyncToGenerator","_regeneratorRuntime","mark","_callee","builder","wrap","_callee$","_context","prev","next","freezeTokensBuilder","input","sent","abrupt","sendAndConfirm","confirmOptions","stop","_ref","_callee2","params","_params$instructionKe","options","programs","_options$payer","payer","mintAddress","_params$tokenOwner","tokenOwner","tokenAddress","_params$multiSigners","multiSigners","freezeAuthority","_ref2","_ref3","authorityPublicKey","signers","tokenProgram","tokenAddressOrAta","txBuilder","_args2","arguments","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","identity","publicKey","isSigner","_slicedToArray","getToken","tokens","pdas","associatedTokenAccount","mint","owner","TransactionBuilder","make","setFeePayer","add","instruction","createFreezeAccountInstruction","address","key","instructionKey","addComputeBudgetIxsIfNeeded","_x","_x2","apply"],"mappings":"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"}