{"version":3,"file":"approveTokenDelegateAuthority.cjs","sources":["../../../../../src/plugins/tokenModule/operations/approveTokenDelegateAuthority.ts"],"sourcesContent":["import { createApproveInstruction } from '@solana/spl-token';\nimport { PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Convergence } from '../../../Convergence';\nimport {\n  isSigner,\n  KeypairSigner,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  Signer,\n  SplTokenAmount,\n  token,\n  useOperation,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'ApproveTokenDelegateAuthorityOperation' as const;\n\n/**\n * Approves a delegate authority for a token account.\n *\n * ```ts\n * await convergence\n *   .tokens()\n *   .approveDelegateAuthority({\n *     delegateAuthority,\n *     mintAddress,\n *   };\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const approveTokenDelegateAuthorityOperation =\n  useOperation<ApproveTokenDelegateAuthorityOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type ApproveTokenDelegateAuthorityOperation = Operation<\n  typeof Key,\n  ApproveTokenDelegateAuthorityInput,\n  ApproveTokenDelegateAuthorityOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n * */\nexport type ApproveTokenDelegateAuthorityInput = {\n  /** The address of the mint account. */\n  mintAddress: PublicKey;\n\n  /** The address of the new delegate authority. */\n  delegateAuthority: PublicKey;\n\n  /**\n   * The maximum amount of tokens that can be manipulated\n   * by the new delegate authority.\n   *\n   * @defaultValue `token(1)`\n   */\n  amount?: SplTokenAmount;\n\n  /**\n   * The owner of the token account as a Signer.\n   *\n   * This may be provided as a PublicKey if and only if\n   * the `multiSigners` parameter is provided.\n   *\n   * @defaultValue `convergence.identity()`\n   */\n  owner?: Signer | 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 `owner` parameters.\n   */\n  tokenAddress?: PublicKey;\n\n  /**\n   * The signing accounts to use if the token owner is a multisig.\n   *\n   * @defaultValue `[]`\n   */\n  multiSigners?: KeypairSigner[];\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type ApproveTokenDelegateAuthorityOutput = {\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 approveTokenDelegateAuthorityOperationHandler: OperationHandler<ApproveTokenDelegateAuthorityOperation> =\n  {\n    handle: async (\n      operation: ApproveTokenDelegateAuthorityOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<ApproveTokenDelegateAuthorityOutput> => {\n      const builder = await approveTokenDelegateAuthorityBuilder(\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 ApproveTokenDelegateAuthorityBuilderParams = Omit<\n  ApproveTokenDelegateAuthorityInput,\n  'confirmOptions'\n> & {\n  /** A key to distinguish the instruction that approves the delegate authority. */\n  instructionKey?: string;\n};\n\n/**\n * Approves a delegate authority for a token account.\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .tokens()\n *   .builders()\n *   .approveDelegateAuthority({\n *     delegateAuthority,\n *     mintAddress,\n *   });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const approveTokenDelegateAuthorityBuilder = async (\n  convergence: Convergence,\n  params: ApproveTokenDelegateAuthorityBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    mintAddress,\n    delegateAuthority,\n    amount = token(1),\n    owner = convergence.identity(),\n    tokenAddress,\n    multiSigners = [],\n  } = params;\n\n  const [ownerPublicKey, signers] = isSigner(owner)\n    ? [owner.publicKey, [owner]]\n    : [owner, multiSigners];\n\n  const tokenProgram = convergence.programs().getToken(programs);\n  const tokenAddressOrAta =\n    tokenAddress ??\n    convergence.tokens().pdas().associatedTokenAccount({\n      mint: mintAddress,\n      owner: ownerPublicKey,\n      programs,\n    });\n\n  const txBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createApproveInstruction(\n        tokenAddressOrAta,\n        delegateAuthority,\n        ownerPublicKey,\n        amount.basisPoints.toNumber(),\n        multiSigners,\n        tokenProgram.address\n      ),\n      signers,\n      key: params.instructionKey ?? 'approveDelegateAuthority',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["Key","approveTokenDelegateAuthorityOperation","useOperation","approveTokenDelegateAuthorityOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builder","wrap","_callee$","_context","prev","next","approveTokenDelegateAuthorityBuilder","input","sent","abrupt","sendAndConfirm","confirmOptions","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","_params$instructionKe","options","programs","_options$payer","payer","mintAddress","delegateAuthority","_params$amount","amount","_params$owner","owner","tokenAddress","_params$multiSigners","multiSigners","_ref2","_ref3","ownerPublicKey","signers","tokenProgram","tokenAddressOrAta","txBuilder","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","token","identity","isSigner","publicKey","_slicedToArray","getToken","tokens","pdas","associatedTokenAccount","mint","TransactionBuilder","make","setFeePayer","add","instruction","createApproveInstruction","basisPoints","toNumber","address","key","instructionKey","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}