{"version":3,"file":"TokenModule.cjs","sources":["../../../../src/modules/TokenModule.ts"],"sourcesContent":["import {\r\n  createAssociatedTokenAccountInstruction,\r\n  getAccount,\r\n  getAssociatedTokenAddress,\r\n} from \"@solana/spl-token\";\r\nimport { PublicKey, Transaction, Commitment } from \"@solana/web3.js\";\r\nimport { DEFAULT_COMMITMENT } from \"../pumpFun.consts.js\";\r\nimport { CreateTokenMetadata } from \"../pumpFun.types.js\";\r\nimport { PumpFunSDK } from \"../PumpFunSDK.js\";\r\nimport { BondingCurveAccount } from \"../BondingCurveAccount.js\";\r\nimport { GlobalAccount } from \"../globalAccount.js\";\r\n\r\nexport class TokenModule {\r\n  constructor(private sdk: PumpFunSDK) {}\r\n\r\n  async createTokenMetadata(create: CreateTokenMetadata) {\r\n    // Validate file\r\n    if (!(create.file instanceof Blob)) {\r\n      throw new Error(\"File must be a Blob or File object\");\r\n    }\r\n\r\n    let formData = new FormData();\r\n    formData.append(\"file\", create.file, \"image.png\"); // Add filename\r\n    formData.append(\"name\", create.name);\r\n    formData.append(\"symbol\", create.symbol);\r\n    formData.append(\"description\", create.description);\r\n    formData.append(\"twitter\", create.twitter || \"\");\r\n    formData.append(\"telegram\", create.telegram || \"\");\r\n    formData.append(\"website\", create.website || \"\");\r\n    formData.append(\"showName\", \"true\");\r\n\r\n    try {\r\n      const request = await fetch(\"https://pump.fun/api/ipfs\", {\r\n        method: \"POST\",\r\n        headers: {\r\n          Accept: \"application/json\",\r\n        },\r\n        body: formData,\r\n        credentials: \"same-origin\",\r\n      });\r\n\r\n      if (request.status === 500) {\r\n        // Try to get more error details\r\n        const errorText = await request.text();\r\n        throw new Error(\r\n          `Server error (500): ${errorText || \"No error details available\"}`\r\n        );\r\n      }\r\n\r\n      if (!request.ok) {\r\n        throw new Error(`HTTP error! status: ${request.status}`);\r\n      }\r\n\r\n      const responseText = await request.text();\r\n      if (!responseText) {\r\n        throw new Error(\"Empty response received from server\");\r\n      }\r\n\r\n      try {\r\n        return JSON.parse(responseText);\r\n      } catch (e) {\r\n        throw new Error(`Invalid JSON response: ${responseText}`);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error in createTokenMetadata:\", error);\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  async createAssociatedTokenAccountIfNeeded(\r\n    payer: PublicKey,\r\n    owner: PublicKey,\r\n    mint: PublicKey,\r\n    transaction: Transaction,\r\n    commitment: Commitment = DEFAULT_COMMITMENT\r\n  ): Promise<PublicKey> {\r\n    const associatedTokenAccount = await getAssociatedTokenAddress(\r\n      mint,\r\n      owner,\r\n      false\r\n    );\r\n\r\n    try {\r\n      await getAccount(this.sdk.connection, associatedTokenAccount, commitment);\r\n    } catch (e) {\r\n      transaction.add(\r\n        createAssociatedTokenAccountInstruction(\r\n          payer,\r\n          associatedTokenAccount,\r\n          owner,\r\n          mint\r\n        )\r\n      );\r\n    }\r\n\r\n    return associatedTokenAccount;\r\n  }\r\n\r\n  async getBondingCurveAccount(\r\n    mint: PublicKey,\r\n    commitment: Commitment = DEFAULT_COMMITMENT\r\n  ) {\r\n    const tokenAccount = await this.sdk.connection.getAccountInfo(\r\n      this.sdk.pda.getBondingCurvePDA(mint),\r\n      commitment\r\n    );\r\n    if (!tokenAccount) {\r\n      return null;\r\n    }\r\n    return BondingCurveAccount.fromBuffer(tokenAccount!.data);\r\n  }\r\n\r\n  async getGlobalAccount(commitment: Commitment = DEFAULT_COMMITMENT) {\r\n    const globalAccountPDA = this.sdk.pda.getGlobalAccountPda();\r\n\r\n    const tokenAccount = await this.sdk.connection.getAccountInfo(\r\n      globalAccountPDA,\r\n      commitment\r\n    );\r\n\r\n    return GlobalAccount.fromBuffer(tokenAccount!.data);\r\n  }\r\n\r\n  async getBondingCurveCreator(\r\n    bondingCurvePDA: PublicKey,\r\n    commitment: Commitment = DEFAULT_COMMITMENT\r\n  ): Promise<PublicKey> {\r\n    const bondingAccountInfo = await this.sdk.connection.getAccountInfo(\r\n      bondingCurvePDA,\r\n      commitment\r\n    );\r\n    if (!bondingAccountInfo) {\r\n      throw new Error(\"Bonding curve account not found\");\r\n    }\r\n\r\n    // Creator is at offset 49 (after 8 bytes discriminator, 5 u64 fields, and 1 byte boolean)\r\n    const creatorBytes = bondingAccountInfo.data.subarray(49, 49 + 32);\r\n    return new PublicKey(creatorBytes);\r\n  }\r\n}\r\n"],"names":["DEFAULT_COMMITMENT","getAssociatedTokenAddress","getAccount","createAssociatedTokenAccountInstruction","BondingCurveAccount","GlobalAccount","PublicKey"],"mappings":"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"}