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
JavaScript
;
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