{"version":3,"file":"createMint.cjs","sources":["../../../../../src/plugins/tokenModule/operations/createMint.ts"],"sourcesContent":["import { createInitializeMintInstruction, MINT_SIZE } from '@solana/spl-token';\nimport { Keypair, PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Mint } from '../models/Mint';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { Option } from '../../../utils/types';\nimport {\n  makeConfirmOptionsFinalizedOnMainnet,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  Signer,\n  useOperation,\n} from '../../../types';\nimport type { Convergence } from '../../../Convergence';\n\nconst Key = 'CreateMintOperation' as const;\n\n/**\n * Creates a new mint account.\n *\n * ```ts\n * const { mint } = await convergence.tokens().createMint();\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const createMintOperation = useOperation<CreateMintOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CreateMintOperation = Operation<\n  typeof Key,\n  CreateMintInput,\n  CreateMintOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CreateMintInput = {\n  /**\n   * The number of decimal points used to define token amounts.\n   *\n   * @defaultValue `0`\n   */\n  decimals?: number;\n\n  /**\n   * The address of the new mint account as a Signer.\n   *\n   * @defaultValue `Keypair.generate()`\n   */\n  mint?: Signer;\n\n  /**\n   * The address of the authority that is allowed\n   * to mint new tokens to token accounts.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  mintAuthority?: PublicKey;\n\n  /**\n   * The address of the authority that is allowed\n   * to freeze token accounts.\n   *\n   * @defaultValue Defaults to using the same value as the\n   * `mintAuthority` parameter.\n   */\n  freezeAuthority?: Option<PublicKey>;\n};\n\n/**\n * Create a new Mint account from the provided input\n * and returns the newly created `Mint` model.\n *\n * @group Operations\n * @category Outputs\n */\nexport type CreateMintOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  /** The mint account as a Signer. */\n  mintSigner: Signer;\n\n  /** The created mint account. */\n  mint: Mint;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const createMintOperationHandler: OperationHandler<CreateMintOperation> =\n  {\n    async handle(\n      operation: CreateMintOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<CreateMintOutput> {\n      const builder = await createMintBuilder(\n        convergence,\n        operation.input,\n        scope\n      );\n      scope.throwIfCanceled();\n\n      const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n        convergence,\n        scope.confirmOptions\n      );\n      const output = await builder.sendAndConfirm(convergence, confirmOptions);\n      scope.throwIfCanceled();\n\n      const mint = await convergence\n        .tokens()\n        .findMintByAddress({ address: output.mintSigner.publicKey }, scope);\n\n      return { ...output, mint };\n    },\n  };\n\n// -----------------\n// Builder\n// -----------------\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CreateMintBuilderParams = Omit<\n  CreateMintInput,\n  'confirmOptions'\n> & {\n  /** A key to distinguish the instruction that creates the account. */\n  createAccountInstructionKey?: string;\n\n  /** A key to distinguish the instruction that initializes the mint account. */\n  initializeMintInstructionKey?: string;\n};\n\n/**\n * @group Transaction Builders\n * @category Contexts\n */\nexport type CreateMintBuilderContext = Omit<\n  CreateMintOutput,\n  'response' | 'mint'\n>;\n\n/**\n * Creates a new mint account.\n *\n * ```ts\n * const transactionBuilder = await convergence.tokens().builders().createMint();\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const createMintBuilder = async (\n  convergence: Convergence,\n  params: CreateMintBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<CreateMintBuilderContext>> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    decimals = 0,\n    mint = Keypair.generate(),\n    mintAuthority = convergence.identity().publicKey,\n    freezeAuthority = mintAuthority,\n  } = params;\n\n  const tokenProgram = convergence.programs().getToken(programs);\n\n  return (\n    TransactionBuilder.make<CreateMintBuilderContext>()\n      .setFeePayer(payer)\n      .setContext({ mintSigner: mint })\n\n      // Create an empty account for the mint.\n      .add(\n        await convergence\n          .system()\n          .builders()\n          .createAccount(\n            {\n              newAccount: mint,\n              space: MINT_SIZE,\n              program: tokenProgram.address,\n              instructionKey:\n                params.createAccountInstructionKey ?? 'createAccount',\n            },\n            { payer, programs }\n          )\n      )\n\n      // Initialize the mint.\n      .add({\n        instruction: createInitializeMintInstruction(\n          mint.publicKey,\n          decimals,\n          mintAuthority,\n          freezeAuthority,\n          tokenProgram.address\n        ),\n        signers: [mint],\n        key: params.initializeMintInstructionKey ?? 'initializeMint',\n      })\n  );\n};\n"],"names":["Key","createMintOperation","useOperation","createMintOperationHandler","handle","operation","convergence","scope","_asyncToGenerator","_regeneratorRuntime","mark","_callee","builder","confirmOptions","output","mint","wrap","_callee$","_context","prev","next","createMintBuilder","input","sent","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","sendAndConfirm","tokens","findMintByAddress","address","mintSigner","publicKey","abrupt","_objectSpread","stop","_ref","_callee2","params","_params$createAccount","_params$initializeMin","options","programs","_options$payer","payer","_params$decimals","decimals","_params$mint","_params$mintAuthority","mintAuthority","_params$freezeAuthori","freezeAuthority","tokenProgram","_args2","arguments","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","Keypair","generate","identity","getToken","t0","TransactionBuilder","make","setFeePayer","setContext","system","builders","createAccount","newAccount","space","MINT_SIZE","program","instructionKey","createAccountInstructionKey","t1","add","call","instruction","createInitializeMintInstruction","signers","key","initializeMintInstructionKey","_x","_x2","apply"],"mappings":"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"}