{"version":3,"file":"createToken.mjs","sources":["../../../../../src/plugins/tokenModule/operations/createToken.ts"],"sourcesContent":["import {\n  ACCOUNT_SIZE,\n  createAssociatedTokenAccountInstruction,\n  createInitializeAccountInstruction,\n} from '@solana/spl-token';\nimport { PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Token } from '../models/Token';\nimport { ExpectedSignerError } from '../../../errors';\nimport type { Convergence } from '../../../Convergence';\nimport {\n  isSigner,\n  makeConfirmOptionsFinalizedOnMainnet,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  Signer,\n  toPublicKey,\n  useOperation,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\n\nconst Key = 'CreateTokenOperation' as const;\n\n/**\n * Creates a new token account.\n *\n * ```ts\n * const { token } = await convergence.tokens().createToken({ mint });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const createTokenOperation = useOperation<CreateTokenOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CreateTokenOperation = Operation<\n  typeof Key,\n  CreateTokenInput,\n  CreateTokenOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CreateTokenInput = {\n  /**\n   * The address of the mint account associated\n   * with the new token account.\n   */\n  mint: PublicKey;\n\n  /**\n   * The address of the owner of the new token account.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  owner?: PublicKey;\n\n  /**\n   * The token account as a Signer if we want to create\n   * a new token account with a specific address instead of\n   * creating a new associated token account.\n   *\n   * @defaultValue Defaults to creating a new associated token account\n   * using the `mint` and `owner` parameters.\n   */\n  token?: Signer;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CreateTokenOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  /** The newly created token account. */\n  token: Token;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const createTokenOperationHandler: OperationHandler<CreateTokenOperation> =\n  {\n    async handle(\n      operation: CreateTokenOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<CreateTokenOutput> {\n      const builder = await createTokenBuilder(\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 token = await convergence\n        .tokens()\n        .findTokenByAddress({ address: output.tokenAddress }, scope);\n\n      return { ...output, token };\n    },\n  };\n\n// -----------------\n// Builder\n// -----------------\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CreateTokenBuilderParams = Omit<\n  CreateTokenInput,\n  'confirmOptions'\n> & {\n  /** A key to distinguish the instruction that creates the associated token account. */\n  createAssociatedTokenAccountInstructionKey?: string;\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 token account. */\n  initializeTokenInstructionKey?: string;\n};\n\n/**\n * @group Transaction Builders\n * @category Contexts\n */\nexport type CreateTokenBuilderContext = {\n  /** The computed address of the token account to create. */\n  tokenAddress: PublicKey;\n};\n\n/**\n * Creates a new token account.\n *\n * ```ts\n * const transactionBuilder = await convergence.tokens().builders().createToken({ mint });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const createTokenBuilder = async (\n  convergence: Convergence,\n  params: CreateTokenBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<CreateTokenBuilderContext>> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { mint, owner = convergence.identity().publicKey, token } = params;\n\n  const tokenProgram = convergence.programs().getToken(programs);\n  const associatedTokenProgram = convergence\n    .programs()\n    .getAssociatedToken(programs);\n\n  const isAssociatedToken = token === undefined;\n  const builder =\n    TransactionBuilder.make<CreateTokenBuilderContext>().setFeePayer(payer);\n\n  if (isAssociatedToken) {\n    const associatedTokenAddress = convergence\n      .tokens()\n      .pdas()\n      .associatedTokenAccount({ mint, owner, programs });\n\n    return (\n      builder\n        .setContext({ tokenAddress: associatedTokenAddress })\n\n        // Create an associated token account.\n        .add({\n          instruction: createAssociatedTokenAccountInstruction(\n            payer.publicKey,\n            associatedTokenAddress,\n            owner,\n            mint,\n            tokenProgram.address,\n            associatedTokenProgram.address\n          ),\n          signers: [payer],\n          key:\n            params.createAssociatedTokenAccountInstructionKey ??\n            'createAssociatedTokenAccount',\n        })\n    );\n  }\n\n  return (\n    builder\n      .setFeePayer(payer)\n      .setContext({ tokenAddress: token.publicKey })\n\n      // Create an empty account for the Token.\n      .add(\n        await convergence\n          .system()\n          .builders()\n          .createAccount(\n            {\n              newAccount: token,\n              space: ACCOUNT_SIZE,\n              program: tokenProgram.address,\n              instructionKey:\n                params.createAccountInstructionKey ?? 'createAccount',\n            },\n            { payer, programs }\n          )\n      )\n\n      // Initialize the Token.\n      .add({\n        instruction: createInitializeAccountInstruction(\n          token.publicKey,\n          mint,\n          owner,\n          tokenProgram.address\n        ),\n        signers: [token],\n        key: params.initializeTokenInstructionKey ?? 'initializeToken',\n      })\n  );\n};\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CreateTokenIfMissingBuilderParams = Omit<\n  CreateTokenBuilderParams,\n  'token'\n> & {\n  /**\n   * The token account to create if it does not exist.\n   * Here, it may be passed as a PublicKey if and only\n   * if it already exists.\n   */\n  token?: PublicKey | Signer;\n\n  /**\n   * Whether or not the token account exists.\n   *\n   * @defaultValue `true`\n   */\n  tokenExists?: boolean;\n\n  /**\n   * The name of the token variable on the operation that uses\n   * this helper token builder.\n   *\n   * @defaultValue `\"token\"`\n   */\n  tokenVariable?: string;\n};\n\n/**\n * @group Transaction Builders\n * @category Constructors\n * @internal\n */\nexport const createTokenIfMissingBuilder = async (\n  convergence: Convergence,\n  params: CreateTokenIfMissingBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<CreateTokenBuilderContext>> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    mint,\n    owner = convergence.identity().publicKey,\n    token,\n    tokenExists = true,\n    tokenVariable = 'token',\n  } = params;\n\n  const destination =\n    token ??\n    convergence\n      .tokens()\n      .pdas()\n      .associatedTokenAccount({ mint, owner, programs });\n  const destinationAddress = toPublicKey(destination);\n  const builder = TransactionBuilder.make<CreateTokenBuilderContext>()\n    .setFeePayer(payer)\n    .setContext({ tokenAddress: destinationAddress });\n\n  if (tokenExists) {\n    return builder;\n  }\n\n  // When creating a token account, ensure it is passed as a Signer.\n  if (token && !isSigner(token)) {\n    throw new ExpectedSignerError(tokenVariable, 'PublicKey', {\n      problemSuffix:\n        `The provided \"${tokenVariable}\" account ` +\n        `at address [${destinationAddress}] does not exist. ` +\n        'Therefore, it needs to be created and passed as a Signer.',\n      solution:\n        `If you want to create the \"${tokenVariable}\" account, then please pass it as a Signer. ` +\n        'Alternatively, you can pass the owner account as a PublicKey instead to ' +\n        'use (or create) an associated token account.',\n    });\n  }\n\n  return builder.add(\n    await convergence\n      .tokens()\n      .builders()\n      .createToken(\n        {\n          ...params,\n          mint,\n          owner,\n          token,\n        },\n        { programs, payer }\n      )\n  );\n};\n"],"names":["Key","createTokenOperation","useOperation","createTokenOperationHandler","handle","operation","convergence","scope","_asyncToGenerator","_regeneratorRuntime","mark","_callee","builder","confirmOptions","output","token","wrap","_callee$","_context","prev","next","createTokenBuilder","input","sent","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","sendAndConfirm","tokens","findTokenByAddress","address","tokenAddress","abrupt","_objectSpread","stop","_ref","_callee2","params","_params$createAccount","_params$initializeTok","options","programs","_options$payer","payer","mint","_params$owner","owner","tokenProgram","associatedTokenProgram","isAssociatedToken","_params$createAssocia","associatedTokenAddress","_args2","arguments","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","identity","publicKey","getToken","getAssociatedToken","TransactionBuilder","make","setFeePayer","pdas","associatedTokenAccount","setContext","add","instruction","createAssociatedTokenAccountInstruction","signers","key","createAssociatedTokenAccountInstructionKey","t0","system","builders","createAccount","newAccount","space","ACCOUNT_SIZE","program","instructionKey","createAccountInstructionKey","t1","call","createInitializeAccountInstruction","initializeTokenInstructionKey","_x","_x2","apply","createTokenIfMissingBuilder","_ref2","_callee3","_options$payer2","_params$owner2","_params$tokenExists","tokenExists","_params$tokenVariable","tokenVariable","destination","destinationAddress","_args3","_callee3$","_context3","toPublicKey","isSigner","ExpectedSignerError","problemSuffix","concat","solution","createToken","_x3","_x4"],"mappings":"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"}