{"version":3,"file":"findTokenWithMintByMint.cjs","sources":["../../../../../src/plugins/tokenModule/operations/findTokenWithMintByMint.ts"],"sourcesContent":["import type { PublicKey } from '@solana/web3.js';\n\nimport { toMintAccount, toTokenAccount } from '../accounts';\nimport { TokenAndMintDoNotMatchError } from '../errors';\nimport { toMint } from '../models/Mint';\nimport { TokenWithMint, toTokenWithMint } from '../models/Token';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\n\nconst Key = 'FindTokenWithMintByMintOperation' as const;\n\n/**\n * Finds a token account and its associated mint account\n * by providing the mint address and either:\n * - the token address or\n * - the address of the token's owner.\n *\n * ```ts\n * const tokenWithMint = await convergence\n *   .tokens()\n *   .findTokenWithMintByMint({ mint, address: tokenAddress, type: \"token\" };\n *\n * const tokenWithMint = await convergence\n *   .tokens()\n *   .findTokenWithMintByMint({ mint, address: ownerAddress, type: \"owner\" };\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const findTokenWithMintByMintOperation =\n  useOperation<FindTokenWithMintByMintOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type FindTokenWithMintByMintOperation = Operation<\n  typeof Key,\n  FindTokenWithMintByMintInput,\n  TokenWithMint\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type FindTokenWithMintByMintInput = {\n  /** The address of the mint account. */\n  mint: PublicKey;\n\n  /**\n   * The address of the token account or its owner,\n   * distinguished by the `addressType`` parameter.\n   */\n  address: PublicKey;\n\n  /**\n   * Determines whether the `address` parameter is the token address\n   * or the address of its owner.\n   */\n  addressType: 'owner' | 'token';\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const findTokenWithMintByMintOperationHandler: OperationHandler<FindTokenWithMintByMintOperation> =\n  {\n    handle: async (\n      operation: FindTokenWithMintByMintOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<TokenWithMint> => {\n      const { commitment, programs } = scope;\n      const { mint, address, addressType } = operation.input;\n      const tokenAddress =\n        addressType === 'owner'\n          ? convergence.tokens().pdas().associatedTokenAccount({\n              mint,\n              owner: address,\n              programs,\n            })\n          : address;\n\n      const accounts = await convergence\n        .rpc()\n        .getMultipleAccounts([mint, tokenAddress], commitment);\n\n      const mintAccount = toMintAccount(accounts[0]);\n      const tokenAccount = toTokenAccount(accounts[1]);\n\n      if (!tokenAccount.data.mint.equals(mint)) {\n        throw new TokenAndMintDoNotMatchError(\n          tokenAddress,\n          tokenAccount.data.mint,\n          mint\n        );\n      }\n\n      return toTokenWithMint(tokenAccount, toMint(mintAccount));\n    },\n  };\n"],"names":["Key","findTokenWithMintByMintOperation","useOperation","findTokenWithMintByMintOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","commitment","programs","_operation$input","mint","address","addressType","tokenAddress","accounts","mintAccount","tokenAccount","wrap","_callee$","_context","prev","next","input","tokens","pdas","associatedTokenAccount","owner","rpc","getMultipleAccounts","sent","toMintAccount","toTokenAccount","data","equals","TokenAndMintDoNotMatchError","abrupt","toTokenWithMint","toMint","stop","_x","_x2","_x3","apply","arguments"],"mappings":"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"}