UNPKG

pumpdotfun-sdk-repumped

Version:

Pumpfun SDK — create, buy, sell tokens with support for Jito bundles and multiple relayer integrations. Rebuilt and fixed pumpdotfun-sdk.

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