{"version":3,"file":"pumpfun.mjs","sources":["../../../src/pumpfun.ts"],"sourcesContent":["import {\n  Commitment,\n  Connection,\n  Finality,\n  Keypair,\n  PublicKey,\n  Transaction,\n} from \"@solana/web3.js\";\nimport { Program, Provider } from \"@coral-xyz/anchor\";\nimport { GlobalAccount } from \"./globalAccount.js\";\nimport {\n  CompleteEvent,\n  CreateEvent,\n  CreateTokenMetadata,\n  PriorityFee,\n  PumpFunEventHandlers,\n  PumpFunEventType,\n  SetParamsEvent,\n  TradeEvent,\n  TransactionResult,\n} from \"./types.js\";\nimport {\n  toCompleteEvent,\n  toCreateEvent,\n  toSetParamsEvent,\n  toTradeEvent,\n} from \"./events.js\";\nimport {\n  createAssociatedTokenAccountInstruction,\n  getAccount,\n  getAssociatedTokenAddress,\n} from \"@solana/spl-token\";\nimport { BondingCurveAccount } from \"./bondingCurveAccount.js\";\nimport { BN } from \"bn.js\";\nimport {\n  DEFAULT_COMMITMENT,\n  DEFAULT_FINALITY,\n  calculateWithSlippageBuy,\n  calculateWithSlippageSell,\n  sendTx,\n} from \"./util.js\";\nimport { PumpFun, IDL } from \"./IDL/index.js\";\nconst PROGRAM_ID = \"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P\";\nconst MPL_TOKEN_METADATA_PROGRAM_ID =\n  \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\";\n\nexport const GLOBAL_ACCOUNT_SEED = \"global\";\nexport const MINT_AUTHORITY_SEED = \"mint-authority\";\nexport const BONDING_CURVE_SEED = \"bonding-curve\";\nexport const METADATA_SEED = \"metadata\";\n\nexport const DEFAULT_DECIMALS = 6;\n\nexport class PumpFunSDK {\n  public program: Program<PumpFun>;\n  public connection: Connection;\n  constructor(provider?: Provider) {\n    this.program = new Program<PumpFun>(IDL as PumpFun, provider);\n    this.connection = this.program.provider.connection;\n  }\n\n  async createAndBuy(\n    creator: Keypair,\n    mint: Keypair,\n    createTokenMetadata: CreateTokenMetadata,\n    buyAmountSol: bigint,\n    slippageBasisPoints: bigint = 500n,\n    priorityFees?: PriorityFee,\n    commitment: Commitment = DEFAULT_COMMITMENT,\n    finality: Finality = DEFAULT_FINALITY\n  ): Promise<TransactionResult> {\n    let tokenMetadata = await this.createTokenMetadata(createTokenMetadata);\n\n    let createTx = await this.getCreateInstructions(\n      creator.publicKey,\n      createTokenMetadata.name,\n      createTokenMetadata.symbol,\n      tokenMetadata.metadataUri,\n      mint\n    );\n\n    let newTx = new Transaction().add(createTx);\n\n    if (buyAmountSol > 0) {\n      const globalAccount = await this.getGlobalAccount(commitment);\n      const buyAmount = globalAccount.getInitialBuyPrice(buyAmountSol);\n      const buyAmountWithSlippage = calculateWithSlippageBuy(\n        buyAmountSol,\n        slippageBasisPoints\n      );\n\n      const buyTx = await this.getBuyInstructions(\n        creator.publicKey,\n        mint.publicKey,\n        globalAccount.feeRecipient,\n        buyAmount,\n        buyAmountWithSlippage\n      );\n\n      newTx.add(buyTx);\n    }\n\n    let createResults = await sendTx(\n      this.connection,\n      newTx,\n      creator.publicKey,\n      [creator, mint],\n      priorityFees,\n      commitment,\n      finality\n    );\n    return createResults;\n  }\n\n  async buy(\n    buyer: Keypair,\n    mint: PublicKey,\n    buyAmountSol: bigint,\n    slippageBasisPoints: bigint = 500n,\n    priorityFees?: PriorityFee,\n    commitment: Commitment = DEFAULT_COMMITMENT,\n    finality: Finality = DEFAULT_FINALITY\n  ): Promise<TransactionResult> {\n    let buyTx = await this.getBuyInstructionsBySolAmount(\n      buyer.publicKey,\n      mint,\n      buyAmountSol,\n      slippageBasisPoints,\n      commitment\n    );\n\n    let buyResults = await sendTx(\n      this.connection,\n      buyTx,\n      buyer.publicKey,\n      [buyer],\n      priorityFees,\n      commitment,\n      finality\n    );\n    return buyResults;\n  }\n\n  async sell(\n    seller: Keypair,\n    mint: PublicKey,\n    sellTokenAmount: bigint,\n    slippageBasisPoints: bigint = 500n,\n    priorityFees?: PriorityFee,\n    commitment: Commitment = DEFAULT_COMMITMENT,\n    finality: Finality = DEFAULT_FINALITY\n  ): Promise<TransactionResult> {\n    let sellTx = await this.getSellInstructionsByTokenAmount(\n      seller.publicKey,\n      mint,\n      sellTokenAmount,\n      slippageBasisPoints,\n      commitment\n    );\n\n    let sellResults = await sendTx(\n      this.connection,\n      sellTx,\n      seller.publicKey,\n      [seller],\n      priorityFees,\n      commitment,\n      finality\n    );\n    return sellResults;\n  }\n\n  //create token instructions\n  async getCreateInstructions(\n    creator: PublicKey,\n    name: string,\n    symbol: string,\n    uri: string,\n    mint: Keypair\n  ) {\n    const mplTokenMetadata = new PublicKey(MPL_TOKEN_METADATA_PROGRAM_ID);\n\n    const [metadataPDA] = PublicKey.findProgramAddressSync(\n      [\n        Buffer.from(METADATA_SEED),\n        mplTokenMetadata.toBuffer(),\n        mint.publicKey.toBuffer(),\n      ],\n      mplTokenMetadata\n    );\n\n    return this.program.methods\n      .create(name, symbol, uri, creator)\n      .accounts({\n        mint: mint.publicKey,\n        user: creator,\n        program: this.program.programId,\n      })\n      .signers([mint])\n      .transaction();\n  }\n\n  async getBuyInstructionsBySolAmount(\n    buyer: PublicKey,\n    mint: PublicKey,\n    buyAmountSol: bigint,\n    slippageBasisPoints: bigint = 500n,\n    commitment: Commitment = DEFAULT_COMMITMENT\n  ) {\n    let bondingCurveAccount = await this.getBondingCurveAccount(\n      mint,\n      commitment\n    );\n    if (!bondingCurveAccount) {\n      throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\n    }\n\n    let buyAmount = bondingCurveAccount.getBuyPrice(buyAmountSol);\n    let buyAmountWithSlippage = calculateWithSlippageBuy(\n      buyAmountSol,\n      slippageBasisPoints\n    );\n\n    let globalAccount = await this.getGlobalAccount(commitment);\n\n    return await this.getBuyInstructions(\n      buyer,\n      mint,\n      globalAccount.feeRecipient,\n      buyAmount,\n      buyAmountWithSlippage\n    );\n  }\n\n  //buy\n  async getBuyInstructions(\n    buyer: PublicKey,\n    mint: PublicKey,\n    feeRecipient: PublicKey,\n    amount: bigint,\n    solAmount: bigint,\n    commitment: Commitment = DEFAULT_COMMITMENT\n  ) {\n    const associatedBondingCurve = await getAssociatedTokenAddress(\n      mint,\n      this.getBondingCurvePDA(mint),\n      true\n    );\n\n    const associatedUser = await getAssociatedTokenAddress(mint, buyer, false);\n\n    let transaction = new Transaction();\n\n    try {\n      await getAccount(this.connection, associatedUser, commitment);\n    } catch (e) {\n      transaction.add(\n        createAssociatedTokenAccountInstruction(\n          buyer,\n          associatedUser,\n          buyer,\n          mint\n        )\n      );\n    }\n\n    transaction.add(\n      await this.program.methods\n        .buy(new BN(amount.toString()), new BN(solAmount.toString()), false)\n        .accounts({\n          feeRecipient: feeRecipient,\n          mint: mint,\n          associatedUser: associatedUser,\n          user: buyer,\n          program: this.program.programId,\n        })\n        .transaction()\n    );\n\n    return transaction;\n  }\n\n  //sell\n  async getSellInstructionsByTokenAmount(\n    seller: PublicKey,\n    mint: PublicKey,\n    sellTokenAmount: bigint,\n    slippageBasisPoints: bigint = 500n,\n    commitment: Commitment = DEFAULT_COMMITMENT\n  ) {\n    let bondingCurveAccount = await this.getBondingCurveAccount(\n      mint,\n      commitment\n    );\n    if (!bondingCurveAccount) {\n      throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\n    }\n\n    let globalAccount = await this.getGlobalAccount(commitment);\n\n    let minSolOutput = bondingCurveAccount.getSellPrice(\n      sellTokenAmount,\n      globalAccount.feeBasisPoints\n    );\n\n    let sellAmountWithSlippage = calculateWithSlippageSell(\n      minSolOutput,\n      slippageBasisPoints\n    );\n\n    return await this.getSellInstructions(\n      seller,\n      mint,\n      globalAccount.feeRecipient,\n      sellTokenAmount,\n      sellAmountWithSlippage\n    );\n  }\n\n  async getSellInstructions(\n    seller: PublicKey,\n    mint: PublicKey,\n    feeRecipient: PublicKey,\n    amount: bigint,\n    minSolOutput: bigint\n  ) {\n    const associatedUser = await getAssociatedTokenAddress(mint, seller, false);\n\n    let transaction = new Transaction();\n\n    transaction.add(\n      await this.program.methods\n        .sell(new BN(amount.toString()), new BN(minSolOutput.toString()))\n        .accounts({\n          feeRecipient: feeRecipient,\n          mint: mint,\n          associatedUser: associatedUser,\n          user: seller,\n          program: this.program.programId,\n        })\n        .transaction()\n    );\n\n    return transaction;\n  }\n\n  async getBondingCurveAccount(\n    mint: PublicKey,\n    commitment: Commitment = DEFAULT_COMMITMENT\n  ) {\n    const tokenAccount = await this.connection.getAccountInfo(\n      this.getBondingCurvePDA(mint),\n      commitment\n    );\n    if (!tokenAccount) {\n      return null;\n    }\n    return BondingCurveAccount.fromBuffer(tokenAccount!.data);\n  }\n\n  async getGlobalAccount(commitment: Commitment = DEFAULT_COMMITMENT) {\n    const [globalAccountPDA] = PublicKey.findProgramAddressSync(\n      [Buffer.from(GLOBAL_ACCOUNT_SEED)],\n      new PublicKey(PROGRAM_ID)\n    );\n\n    const tokenAccount = await this.connection.getAccountInfo(\n      globalAccountPDA,\n      commitment\n    );\n\n    return GlobalAccount.fromBuffer(tokenAccount!.data);\n  }\n\n  getBondingCurvePDA(mint: PublicKey) {\n    return PublicKey.findProgramAddressSync(\n      [Buffer.from(BONDING_CURVE_SEED), mint.toBuffer()],\n      this.program.programId\n    )[0];\n  }\n\n  async createTokenMetadata(create: CreateTokenMetadata) {\n    // Validate file\n    if (!(create.file instanceof Blob)) {\n      throw new Error(\"File must be a Blob or File object\");\n    }\n\n    let formData = new FormData();\n    formData.append(\"file\", create.file, \"image.png\"); // Add filename\n    formData.append(\"name\", create.name);\n    formData.append(\"symbol\", create.symbol);\n    formData.append(\"description\", create.description);\n    formData.append(\"twitter\", create.twitter || \"\");\n    formData.append(\"telegram\", create.telegram || \"\");\n    formData.append(\"website\", create.website || \"\");\n    formData.append(\"showName\", \"true\");\n\n    try {\n      const request = await fetch(\"https://pump.fun/api/ipfs\", {\n        method: \"POST\",\n        headers: {\n          Accept: \"application/json\",\n        },\n        body: formData,\n        credentials: \"same-origin\",\n      });\n\n      if (request.status === 500) {\n        // Try to get more error details\n        const errorText = await request.text();\n        throw new Error(\n          `Server error (500): ${errorText || \"No error details available\"}`\n        );\n      }\n\n      if (!request.ok) {\n        throw new Error(`HTTP error! status: ${request.status}`);\n      }\n\n      const responseText = await request.text();\n      if (!responseText) {\n        throw new Error(\"Empty response received from server\");\n      }\n\n      try {\n        return JSON.parse(responseText);\n      } catch (e) {\n        throw new Error(`Invalid JSON response: ${responseText}`);\n      }\n    } catch (error) {\n      console.error(\"Error in createTokenMetadata:\", error);\n      throw error;\n    }\n  }\n  //EVENTS\n  addEventListener<T extends PumpFunEventType>(\n    eventType: T,\n    callback: (\n      event: PumpFunEventHandlers[T],\n      slot: number,\n      signature: string\n    ) => void\n  ) {\n    return this.program.addEventListener(\n      eventType,\n      (event: any, slot: number, signature: string) => {\n        let processedEvent;\n        switch (eventType) {\n          case \"createEvent\":\n            processedEvent = toCreateEvent(event as CreateEvent);\n            callback(\n              processedEvent as PumpFunEventHandlers[T],\n              slot,\n              signature\n            );\n            break;\n          case \"tradeEvent\":\n            processedEvent = toTradeEvent(event as TradeEvent);\n            callback(\n              processedEvent as PumpFunEventHandlers[T],\n              slot,\n              signature\n            );\n            break;\n          case \"completeEvent\":\n            processedEvent = toCompleteEvent(event as CompleteEvent);\n            callback(\n              processedEvent as PumpFunEventHandlers[T],\n              slot,\n              signature\n            );\n            break;\n          case \"setParamsEvent\":\n            processedEvent = toSetParamsEvent(event as SetParamsEvent);\n            callback(\n              processedEvent as PumpFunEventHandlers[T],\n              slot,\n              signature\n            );\n            break;\n          default:\n            console.error(\"Unhandled event type:\", eventType);\n        }\n      }\n    );\n  }\n\n  removeEventListener(eventId: number) {\n    this.program.removeEventListener(eventId);\n  }\n}\n"],"names":[],"mappings":"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"}