UNPKG

pumpdotfun-repumped-sdk

Version:

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

96 lines (92 loc) 4.1 kB
'use strict'; var splToken = require('@solana/spl-token'); var web3_js = require('@solana/web3.js'); var pumpFun_consts = require('../pumpFun.consts.cjs'); var BondingCurveAccount = require('../BondingCurveAccount.cjs'); var globalAccount = require('../globalAccount.cjs'); 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 = pumpFun_consts.DEFAULT_COMMITMENT) { const associatedTokenAccount = await splToken.getAssociatedTokenAddress(mint, owner, false); try { await splToken.getAccount(this.sdk.connection, associatedTokenAccount, commitment); } catch (e) { transaction.add(splToken.createAssociatedTokenAccountInstruction(payer, associatedTokenAccount, owner, mint)); } return associatedTokenAccount; } async getBondingCurveAccount(mint, commitment = pumpFun_consts.DEFAULT_COMMITMENT) { const tokenAccount = await this.sdk.connection.getAccountInfo(this.sdk.pda.getBondingCurvePDA(mint), commitment); if (!tokenAccount) { return null; } return BondingCurveAccount.BondingCurveAccount.fromBuffer(tokenAccount.data); } async getGlobalAccount(commitment = pumpFun_consts.DEFAULT_COMMITMENT) { const globalAccountPDA = this.sdk.pda.getGlobalAccountPda(); const tokenAccount = await this.sdk.connection.getAccountInfo(globalAccountPDA, commitment); return globalAccount.GlobalAccount.fromBuffer(tokenAccount.data); } async getBondingCurveCreator(bondingCurvePDA, commitment = pumpFun_consts.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 web3_js.PublicKey(creatorBytes); } } exports.TokenModule = TokenModule; //# sourceMappingURL=TokenModule.cjs.map