@openpump/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,428 @@
1
+ // src/errors.ts
2
+ var OpenPumpError = class extends Error {
3
+ constructor(code, message, status, details) {
4
+ super(message);
5
+ this.code = code;
6
+ this.status = status;
7
+ this.details = details;
8
+ Object.setPrototypeOf(this, new.target.prototype);
9
+ }
10
+ name = "OpenPumpError";
11
+ };
12
+ var AuthenticationError = class extends OpenPumpError {
13
+ name = "AuthenticationError";
14
+ constructor(code, message, status, details) {
15
+ super(code, message, status, details);
16
+ Object.setPrototypeOf(this, new.target.prototype);
17
+ }
18
+ };
19
+ var RateLimitError = class extends OpenPumpError {
20
+ name = "RateLimitError";
21
+ constructor(code, message, status, details) {
22
+ super(code, message, status, details);
23
+ Object.setPrototypeOf(this, new.target.prototype);
24
+ }
25
+ };
26
+ var ValidationError = class extends OpenPumpError {
27
+ name = "ValidationError";
28
+ constructor(code, message, status, details) {
29
+ super(code, message, status, details);
30
+ Object.setPrototypeOf(this, new.target.prototype);
31
+ }
32
+ };
33
+ var NotFoundError = class extends OpenPumpError {
34
+ name = "NotFoundError";
35
+ constructor(code, message, status, details) {
36
+ super(code, message, status, details);
37
+ Object.setPrototypeOf(this, new.target.prototype);
38
+ }
39
+ };
40
+ var InsufficientFundsError = class extends OpenPumpError {
41
+ name = "InsufficientFundsError";
42
+ constructor(code, message, status, details) {
43
+ super(code, message, status, details);
44
+ Object.setPrototypeOf(this, new.target.prototype);
45
+ }
46
+ };
47
+ var TransactionError = class extends OpenPumpError {
48
+ name = "TransactionError";
49
+ constructor(code, message, status, details) {
50
+ super(code, message, status, details);
51
+ Object.setPrototypeOf(this, new.target.prototype);
52
+ }
53
+ };
54
+
55
+ // src/http.ts
56
+ var HttpClient = class {
57
+ _apiKey;
58
+ _baseUrl;
59
+ _timeout;
60
+ constructor(config) {
61
+ this._apiKey = config.apiKey;
62
+ this._baseUrl = config.baseUrl.replace(/\/+$/, "");
63
+ this._timeout = config.timeout;
64
+ }
65
+ async get(path, query) {
66
+ let url = `${this._baseUrl}${path}`;
67
+ if (query && Object.keys(query).length > 0) {
68
+ const params = new URLSearchParams(query);
69
+ url += `?${params.toString()}`;
70
+ }
71
+ const response = await fetch(url, {
72
+ headers: this._headers(),
73
+ signal: AbortSignal.timeout(this._timeout)
74
+ });
75
+ return this._handleResponse(response);
76
+ }
77
+ async post(path, body) {
78
+ const init = {
79
+ method: "POST",
80
+ headers: {
81
+ ...this._headers(),
82
+ "Content-Type": "application/json"
83
+ },
84
+ signal: AbortSignal.timeout(this._timeout)
85
+ };
86
+ if (body !== void 0) {
87
+ init.body = JSON.stringify(body);
88
+ }
89
+ const response = await fetch(`${this._baseUrl}${path}`, init);
90
+ return this._handleResponse(response);
91
+ }
92
+ async patch(path, body) {
93
+ const response = await fetch(`${this._baseUrl}${path}`, {
94
+ method: "PATCH",
95
+ headers: {
96
+ ...this._headers(),
97
+ "Content-Type": "application/json"
98
+ },
99
+ body: JSON.stringify(body),
100
+ signal: AbortSignal.timeout(this._timeout)
101
+ });
102
+ return this._handleResponse(response);
103
+ }
104
+ async delete(path) {
105
+ const response = await fetch(`${this._baseUrl}${path}`, {
106
+ method: "DELETE",
107
+ headers: this._headers(),
108
+ signal: AbortSignal.timeout(this._timeout)
109
+ });
110
+ return this._handleResponse(response);
111
+ }
112
+ _headers() {
113
+ return { Authorization: `Bearer ${this._apiKey}` };
114
+ }
115
+ async _handleResponse(response) {
116
+ if (!response.ok) {
117
+ await this._throwApiError(response);
118
+ }
119
+ const json = await response.json();
120
+ if (json !== null && typeof json === "object" && "data" in json) {
121
+ return json["data"];
122
+ }
123
+ return json;
124
+ }
125
+ async _throwApiError(response) {
126
+ let body = {};
127
+ try {
128
+ body = await response.json();
129
+ } catch {
130
+ }
131
+ const code = body.code ?? body.error ?? "UNKNOWN_ERROR";
132
+ const message = body.message ?? response.statusText;
133
+ const details = body.details;
134
+ switch (response.status) {
135
+ case 401: {
136
+ throw new AuthenticationError(code, message, 401, details);
137
+ }
138
+ case 404: {
139
+ throw new NotFoundError(code, message, 404, details);
140
+ }
141
+ case 422: {
142
+ throw new ValidationError(code, message, 422, details);
143
+ }
144
+ case 429: {
145
+ throw new RateLimitError(code, message, 429, details);
146
+ }
147
+ default: {
148
+ throw new OpenPumpError(code, message, response.status, details);
149
+ }
150
+ }
151
+ }
152
+ };
153
+
154
+ // src/resources/wallets.ts
155
+ var Wallets = class {
156
+ constructor(_http) {
157
+ this._http = _http;
158
+ }
159
+ /** List all active wallets for the authenticated user. */
160
+ async list() {
161
+ return this._http.get("/api/wallets");
162
+ }
163
+ /** Create a new wallet with an optional label. */
164
+ async create(options) {
165
+ return this._http.post("/api/wallets", options ?? {});
166
+ }
167
+ /** Get a single wallet by ID. */
168
+ async get(walletId) {
169
+ return this._http.get(`/api/wallets/${walletId}`);
170
+ }
171
+ /** Get SOL + token balances for a wallet. */
172
+ async getBalance(walletId) {
173
+ return this._http.get(`/api/wallets/${walletId}/balance`);
174
+ }
175
+ /** Get deposit address and SOL minimums for a wallet. */
176
+ async getDepositInstructions(walletId) {
177
+ return this._http.get(`/api/wallets/${walletId}/deposit-instructions`);
178
+ }
179
+ /** Force a live RPC balance refresh, bypassing the 30s cache. */
180
+ async refreshBalance(walletId) {
181
+ return this._http.post(`/api/wallets/${walletId}/refresh-balance`);
182
+ }
183
+ /**
184
+ * Execute an on-chain SOL or SPL token transfer.
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * const result = await op.wallets.transfer('wallet-id', {
189
+ * toAddress: 'recipient-public-key',
190
+ * amountLamports: '100000000',
191
+ * });
192
+ * console.log(result.signature);
193
+ * ```
194
+ */
195
+ async transfer(walletId, options) {
196
+ return this._http.post(`/api/wallets/${walletId}/transfer`, options);
197
+ }
198
+ /** Get paginated transfer history for a wallet. */
199
+ async getTransactions(walletId, options) {
200
+ const query = {};
201
+ if (options?.type !== void 0) query["type"] = options.type;
202
+ if (options?.limit !== void 0) query["limit"] = String(options.limit);
203
+ if (options?.offset !== void 0) query["offset"] = String(options.offset);
204
+ return this._http.get(`/api/wallets/${walletId}/transactions`, query);
205
+ }
206
+ };
207
+
208
+ // src/resources/tokens.ts
209
+ var Tokens = class {
210
+ constructor(_http) {
211
+ this._http = _http;
212
+ }
213
+ /** List tokens created by the authenticated user. */
214
+ async list() {
215
+ return this._http.get("/api/tokens");
216
+ }
217
+ /**
218
+ * Create a new PumpFun token with IPFS metadata upload.
219
+ *
220
+ * @example
221
+ * ```ts
222
+ * const token = await op.tokens.create({
223
+ * name: 'My Token',
224
+ * symbol: 'MTK',
225
+ * description: 'A cool token',
226
+ * imageBase64: 'base64-encoded-image...',
227
+ * imageType: 'image/png',
228
+ * });
229
+ * console.log(token.mint);
230
+ * ```
231
+ */
232
+ async create(options) {
233
+ return this._http.post("/api/tokens/create", options);
234
+ }
235
+ /** Get market info for a token (mainnet only, returns null on devnet). */
236
+ async getMarketInfo(mint) {
237
+ return this._http.get(`/api/tokens/${mint}/market-info`);
238
+ }
239
+ /** Get bonding curve state including price, market cap, and graduation progress. */
240
+ async getCurveState(mint) {
241
+ return this._http.get(`/api/tokens/${mint}/curve-state`);
242
+ }
243
+ };
244
+
245
+ // src/resources/trading.ts
246
+ var Trading = class {
247
+ constructor(_http) {
248
+ this._http = _http;
249
+ }
250
+ /**
251
+ * Get a price quote for buying or selling a token.
252
+ *
253
+ * @example
254
+ * ```ts
255
+ * const quote = await op.trading.getQuote('So11...', {
256
+ * action: 'buy',
257
+ * solAmount: '1000000000',
258
+ * });
259
+ * console.log(quote.expectedTokens);
260
+ * ```
261
+ */
262
+ async getQuote(mint, options) {
263
+ const query = { action: options.action };
264
+ if (options.solAmount !== void 0) query["solAmount"] = options.solAmount;
265
+ if (options.tokenAmount !== void 0) query["tokenAmount"] = options.tokenAmount;
266
+ return this._http.get(`/api/tokens/${mint}/quote`, query);
267
+ }
268
+ /** Get the SOL cost to buy a specific number of tokens (inverse quote). */
269
+ async getQuoteBuyCost(mint, options) {
270
+ return this._http.get(`/api/tokens/${mint}/quote-buy-cost`, {
271
+ tokenAmount: options.tokenAmount
272
+ });
273
+ }
274
+ /** Execute a buy transaction for a token. */
275
+ async buy(mint, options) {
276
+ return this._http.post(`/api/tokens/${mint}/buy`, options);
277
+ }
278
+ /** Execute a sell transaction for a token. */
279
+ async sell(mint, options) {
280
+ return this._http.post(`/api/tokens/${mint}/sell`, options);
281
+ }
282
+ /** Multi-wallet sell packed into Jito bundles. */
283
+ async bundleSell(mint, options) {
284
+ return this._http.post(`/api/tokens/${mint}/bundle-sell`, options);
285
+ }
286
+ };
287
+
288
+ // src/resources/jobs.ts
289
+ var Jobs = class {
290
+ constructor(_http) {
291
+ this._http = _http;
292
+ }
293
+ /** Get the current status of a job. */
294
+ async get(jobId) {
295
+ return this._http.get(`/api/jobs/${jobId}`);
296
+ }
297
+ /**
298
+ * Poll a job until it completes or the timeout is reached.
299
+ *
300
+ * @param jobId - The job ID to poll.
301
+ * @param options - Polling configuration.
302
+ * @returns The final job status (completed).
303
+ * @throws {Error} If the job fails or the timeout is reached.
304
+ *
305
+ * @example
306
+ * ```ts
307
+ * const launch = await op.bundles.launch({ ... });
308
+ * const result = await op.jobs.poll(launch.jobId, {
309
+ * intervalMs: 2000,
310
+ * timeoutMs: 60000,
311
+ * onProgress: (s) => console.log(`Progress: ${s.progress}%`),
312
+ * });
313
+ * ```
314
+ */
315
+ async poll(jobId, options) {
316
+ const intervalMs = options?.intervalMs ?? 1e3;
317
+ const timeoutMs = options?.timeoutMs ?? 3e4;
318
+ const signal = options?.signal;
319
+ const onProgress = options?.onProgress;
320
+ const deadline = Date.now() + timeoutMs;
321
+ while (Date.now() < deadline) {
322
+ if (signal?.aborted) {
323
+ throw new Error("Job polling aborted");
324
+ }
325
+ const status = await this.get(jobId);
326
+ onProgress?.(status);
327
+ if (status.status === "completed") {
328
+ return status;
329
+ }
330
+ if (status.status === "failed") {
331
+ throw new Error(status.error ?? `Job ${jobId} failed`);
332
+ }
333
+ await new Promise((resolve, reject) => {
334
+ const timer = setTimeout(resolve, intervalMs);
335
+ signal?.addEventListener(
336
+ "abort",
337
+ () => {
338
+ clearTimeout(timer);
339
+ reject(new Error("Job polling aborted"));
340
+ },
341
+ { once: true }
342
+ );
343
+ });
344
+ }
345
+ throw new Error(`Job ${jobId} polling timed out after ${timeoutMs}ms`);
346
+ }
347
+ };
348
+
349
+ // src/resources/creator-fees.ts
350
+ var CreatorFees = class {
351
+ constructor(_http) {
352
+ this._http = _http;
353
+ }
354
+ /** Get accumulated creator fees for a given creator address. */
355
+ async getAccumulatedFees(address) {
356
+ return this._http.get("/api/creator-fees", { address });
357
+ }
358
+ /** Claim accumulated creator fees for a wallet you own. */
359
+ async claim(creatorAddress) {
360
+ return this._http.post("/api/creator-fees/claim", { creatorAddress });
361
+ }
362
+ };
363
+
364
+ // src/resources/bundles.ts
365
+ var Bundles = class {
366
+ constructor(_http) {
367
+ this._http = _http;
368
+ }
369
+ /**
370
+ * Launch a coordinated token creation + multi-wallet bundle buy.
371
+ * Returns a job ID for polling.
372
+ *
373
+ * @example
374
+ * ```ts
375
+ * const { jobId } = await op.bundles.launch({
376
+ * devWalletId: 'wallet-1',
377
+ * buyWalletIds: ['wallet-2', 'wallet-3'],
378
+ * name: 'My Token',
379
+ * symbol: 'MTK',
380
+ * imageBase64: '...',
381
+ * imageType: 'image/png',
382
+ * walletBuyAmounts: ['500000000', '500000000'],
383
+ * });
384
+ * const result = await op.jobs.poll(jobId);
385
+ * ```
386
+ */
387
+ async launch(options) {
388
+ return this._http.post("/api/tokens/bundle-launch", options);
389
+ }
390
+ };
391
+
392
+ // src/client.ts
393
+ var OpenPump = class {
394
+ wallets;
395
+ tokens;
396
+ trading;
397
+ jobs;
398
+ creatorFees;
399
+ bundles;
400
+ _http;
401
+ constructor(config) {
402
+ if (!config.apiKey) {
403
+ throw new Error("apiKey is required");
404
+ }
405
+ this._http = new HttpClient({
406
+ apiKey: config.apiKey,
407
+ baseUrl: config.baseUrl ?? "https://api.openpump.io",
408
+ timeout: config.timeout ?? 3e4
409
+ });
410
+ this.wallets = new Wallets(this._http);
411
+ this.tokens = new Tokens(this._http);
412
+ this.trading = new Trading(this._http);
413
+ this.jobs = new Jobs(this._http);
414
+ this.creatorFees = new CreatorFees(this._http);
415
+ this.bundles = new Bundles(this._http);
416
+ }
417
+ };
418
+ export {
419
+ AuthenticationError,
420
+ InsufficientFundsError,
421
+ NotFoundError,
422
+ OpenPump,
423
+ OpenPumpError,
424
+ RateLimitError,
425
+ TransactionError,
426
+ ValidationError
427
+ };
428
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/wallets.ts","../src/resources/tokens.ts","../src/resources/trading.ts","../src/resources/jobs.ts","../src/resources/creator-fees.ts","../src/resources/bundles.ts","../src/client.ts"],"sourcesContent":["/**\n * Base error class for all OpenPump SDK errors.\n * All API errors are converted to typed exceptions.\n */\nexport class OpenPumpError extends Error {\n override readonly name: string = 'OpenPumpError';\n\n constructor(\n public readonly code: string,\n message: string,\n public readonly status: number,\n public readonly details?: unknown,\n ) {\n super(message);\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when the API key is invalid or missing (HTTP 401). */\nexport class AuthenticationError extends OpenPumpError {\n override readonly name = 'AuthenticationError';\n\n constructor(code: string, message: string, status: number, details?: unknown) {\n super(code, message, status, details);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when the rate limit is exceeded (HTTP 429). */\nexport class RateLimitError extends OpenPumpError {\n override readonly name = 'RateLimitError';\n\n constructor(code: string, message: string, status: number, details?: unknown) {\n super(code, message, status, details);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when request validation fails (HTTP 422). */\nexport class ValidationError extends OpenPumpError {\n override readonly name = 'ValidationError';\n\n constructor(code: string, message: string, status: number, details?: unknown) {\n super(code, message, status, details);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when the requested resource is not found (HTTP 404). */\nexport class NotFoundError extends OpenPumpError {\n override readonly name = 'NotFoundError';\n\n constructor(code: string, message: string, status: number, details?: unknown) {\n super(code, message, status, details);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when the wallet has insufficient SOL or tokens for an operation. */\nexport class InsufficientFundsError extends OpenPumpError {\n override readonly name = 'InsufficientFundsError';\n\n constructor(code: string, message: string, status: number, details?: unknown) {\n super(code, message, status, details);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when an on-chain transaction fails (signature error, simulation failure, etc.). */\nexport class TransactionError extends OpenPumpError {\n override readonly name = 'TransactionError';\n\n constructor(code: string, message: string, status: number, details?: unknown) {\n super(code, message, status, details);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import {\n OpenPumpError,\n AuthenticationError,\n RateLimitError,\n ValidationError,\n NotFoundError,\n} from './errors.js';\n\nexport interface HttpClientConfig {\n apiKey: string;\n baseUrl: string;\n timeout: number;\n}\n\nexport class HttpClient {\n private readonly _apiKey: string;\n private readonly _baseUrl: string;\n private readonly _timeout: number;\n\n constructor(config: HttpClientConfig) {\n this._apiKey = config.apiKey;\n // Strip trailing slash to normalise base URL\n this._baseUrl = config.baseUrl.replace(/\\/+$/, '');\n this._timeout = config.timeout;\n }\n\n async get<T>(path: string, query?: Record<string, string>): Promise<T> {\n let url = `${this._baseUrl}${path}`;\n if (query && Object.keys(query).length > 0) {\n const params = new URLSearchParams(query);\n url += `?${params.toString()}`;\n }\n const response = await fetch(url, {\n headers: this._headers(),\n signal: AbortSignal.timeout(this._timeout),\n });\n return this._handleResponse<T>(response);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n const init: RequestInit = {\n method: 'POST',\n headers: {\n ...this._headers(),\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(this._timeout),\n };\n if (body !== undefined) {\n init.body = JSON.stringify(body);\n }\n const response = await fetch(`${this._baseUrl}${path}`, init);\n return this._handleResponse<T>(response);\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${this._baseUrl}${path}`, {\n method: 'PATCH',\n headers: {\n ...this._headers(),\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(this._timeout),\n });\n return this._handleResponse<T>(response);\n }\n\n async delete<T>(path: string): Promise<T> {\n const response = await fetch(`${this._baseUrl}${path}`, {\n method: 'DELETE',\n headers: this._headers(),\n signal: AbortSignal.timeout(this._timeout),\n });\n return this._handleResponse<T>(response);\n }\n\n private _headers(): Record<string, string> {\n return { Authorization: `Bearer ${this._apiKey}` };\n }\n\n private async _handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n await this._throwApiError(response);\n }\n const json = (await response.json()) as Record<string, unknown>;\n // API wraps responses in { data: T } -- unwrap if present\n if (json !== null && typeof json === 'object' && 'data' in json) {\n return json['data'] as T;\n }\n return json as T;\n }\n\n private async _throwApiError(response: Response): Promise<never> {\n let body: { error?: string; code?: string; message?: string; details?: unknown } = {};\n try {\n body = (await response.json()) as typeof body;\n } catch {\n // Non-JSON error body -- use status text\n }\n\n const code = body.code ?? body.error ?? 'UNKNOWN_ERROR';\n const message = body.message ?? response.statusText;\n const details = body.details;\n\n switch (response.status) {\n case 401: {\n throw new AuthenticationError(code, message, 401, details);\n }\n case 404: {\n throw new NotFoundError(code, message, 404, details);\n }\n case 422: {\n throw new ValidationError(code, message, 422, details);\n }\n case 429: {\n throw new RateLimitError(code, message, 429, details);\n }\n default: {\n throw new OpenPumpError(code, message, response.status, details);\n }\n }\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface CreateWalletOptions {\n label?: string;\n}\n\nexport interface WalletInfo {\n id: string;\n publicKey: string;\n walletIndex: number;\n label: string;\n createdAt: string;\n}\n\nexport interface WalletBalance {\n nativeSol: { lamports: string; sol: string };\n tokens: Array<{\n mint: string;\n symbol: string | null;\n amount: string;\n decimals: number;\n uiAmount: number;\n }>;\n}\n\nexport interface DepositInstructions {\n depositAddress: string;\n minimums: { tokenCreation: string; bundleBuy: string; standardBuy: string };\n instructions: string[];\n disclaimer: string;\n network: string;\n}\n\nexport interface TransferOptions {\n toAddress: string;\n amountLamports: string;\n mint?: string | null;\n memo?: string;\n priorityFeeMicroLamports?: number;\n}\n\nexport interface TransferResult {\n signature: string;\n amountLamports: string;\n fee: string;\n}\n\nexport interface TransactionListOptions {\n type?: 'buy' | 'sell' | 'transfer';\n limit?: number;\n offset?: number;\n}\n\nexport interface TransactionListResult {\n transactions: Array<Record<string, unknown>>;\n total: number;\n limit: number;\n offset: number;\n}\n\nexport class Wallets {\n constructor(private readonly _http: HttpClient) {}\n\n /** List all active wallets for the authenticated user. */\n async list(): Promise<WalletInfo[]> {\n return this._http.get<WalletInfo[]>('/api/wallets');\n }\n\n /** Create a new wallet with an optional label. */\n async create(options?: CreateWalletOptions): Promise<WalletInfo> {\n return this._http.post<WalletInfo>('/api/wallets', options ?? {});\n }\n\n /** Get a single wallet by ID. */\n async get(walletId: string): Promise<WalletInfo> {\n return this._http.get<WalletInfo>(`/api/wallets/${walletId}`);\n }\n\n /** Get SOL + token balances for a wallet. */\n async getBalance(walletId: string): Promise<WalletBalance> {\n return this._http.get<WalletBalance>(`/api/wallets/${walletId}/balance`);\n }\n\n /** Get deposit address and SOL minimums for a wallet. */\n async getDepositInstructions(walletId: string): Promise<DepositInstructions> {\n return this._http.get<DepositInstructions>(`/api/wallets/${walletId}/deposit-instructions`);\n }\n\n /** Force a live RPC balance refresh, bypassing the 30s cache. */\n async refreshBalance(walletId: string): Promise<WalletBalance> {\n return this._http.post<WalletBalance>(`/api/wallets/${walletId}/refresh-balance`);\n }\n\n /**\n * Execute an on-chain SOL or SPL token transfer.\n *\n * @example\n * ```ts\n * const result = await op.wallets.transfer('wallet-id', {\n * toAddress: 'recipient-public-key',\n * amountLamports: '100000000',\n * });\n * console.log(result.signature);\n * ```\n */\n async transfer(walletId: string, options: TransferOptions): Promise<TransferResult> {\n return this._http.post<TransferResult>(`/api/wallets/${walletId}/transfer`, options);\n }\n\n /** Get paginated transfer history for a wallet. */\n async getTransactions(\n walletId: string,\n options?: TransactionListOptions,\n ): Promise<TransactionListResult> {\n const query: Record<string, string> = {};\n if (options?.type !== undefined) query['type'] = options.type;\n if (options?.limit !== undefined) query['limit'] = String(options.limit);\n if (options?.offset !== undefined) query['offset'] = String(options.offset);\n return this._http.get<TransactionListResult>(`/api/wallets/${walletId}/transactions`, query);\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface CreateTokenOptions {\n walletIndex?: number;\n name: string;\n symbol: string;\n description: string;\n imageBase64: string;\n imageType: 'image/png' | 'image/jpeg' | 'image/jpg' | 'image/gif' | 'image/webp';\n initialBuyAmountSol?: number;\n twitter?: string;\n telegram?: string;\n website?: string;\n}\n\nexport interface CreateTokenResult {\n tokenId: string;\n mint: string;\n signature: string;\n metadataUri: string;\n bondingCurveAccount: string;\n}\n\nexport interface TokenListItem {\n id: string;\n mintAddress: string;\n name: string;\n symbol: string;\n graduationStatus: string;\n metadataUri: string;\n creatorAddress: string;\n createdAt: string;\n}\n\nexport interface CurveState {\n mint: string;\n virtualTokenReserves: string;\n virtualSolReserves: string;\n realTokenReserves: string;\n realSolReserves: string;\n tokenTotalSupply: string;\n complete: boolean;\n isMayhemMode: boolean;\n currentPriceSOL: number;\n marketCapSOL: number;\n graduationPercent: number;\n}\n\nexport class Tokens {\n constructor(private readonly _http: HttpClient) {}\n\n /** List tokens created by the authenticated user. */\n async list(): Promise<TokenListItem[]> {\n return this._http.get<TokenListItem[]>('/api/tokens');\n }\n\n /**\n * Create a new PumpFun token with IPFS metadata upload.\n *\n * @example\n * ```ts\n * const token = await op.tokens.create({\n * name: 'My Token',\n * symbol: 'MTK',\n * description: 'A cool token',\n * imageBase64: 'base64-encoded-image...',\n * imageType: 'image/png',\n * });\n * console.log(token.mint);\n * ```\n */\n async create(options: CreateTokenOptions): Promise<CreateTokenResult> {\n return this._http.post<CreateTokenResult>('/api/tokens/create', options);\n }\n\n /** Get market info for a token (mainnet only, returns null on devnet). */\n async getMarketInfo(mint: string): Promise<Record<string, unknown> | null> {\n return this._http.get<Record<string, unknown> | null>(`/api/tokens/${mint}/market-info`);\n }\n\n /** Get bonding curve state including price, market cap, and graduation progress. */\n async getCurveState(mint: string): Promise<CurveState> {\n return this._http.get<CurveState>(`/api/tokens/${mint}/curve-state`);\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport type PriorityLevel = 'economy' | 'normal' | 'fast' | 'turbo';\n\nexport interface QuoteOptions {\n action: 'buy' | 'sell';\n solAmount?: string;\n tokenAmount?: string;\n}\n\nexport interface QuoteResult {\n route: 'bonding_curve' | 'pumpswap';\n expectedTokens?: string;\n expectedSol?: string;\n priceImpact: number;\n fee: number;\n disclaimer: string;\n}\n\nexport interface QuoteBuyCostOptions {\n tokenAmount: string;\n}\n\nexport interface QuoteBuyCostResult {\n solCostLamports: string;\n route: 'bonding_curve' | 'pumpswap';\n disclaimer: string;\n}\n\nexport interface BuyOptions {\n walletId: string;\n amountLamports: string;\n slippageBps?: number;\n priorityLevel?: PriorityLevel;\n}\n\nexport interface BuyResult {\n signature: string;\n estimatedTokenAmount: string;\n solSpent: string;\n route: 'bonding_curve' | 'pumpswap';\n disclaimer: string;\n}\n\nexport interface SellOptions {\n walletId: string;\n tokenAmount: string;\n slippageBps?: number;\n priorityLevel?: PriorityLevel;\n}\n\nexport interface SellResult {\n signature: string;\n estimatedSolReceived: string;\n tokensSold: string;\n route: 'bonding_curve' | 'pumpswap';\n disclaimer: string;\n}\n\nexport interface BundleSellEntry {\n walletId: string;\n tokenAmount: string;\n}\n\nexport interface BundleSellOptions {\n walletSells: BundleSellEntry[];\n tipWalletId?: string;\n tipLamports?: number;\n slippageBps?: number;\n priorityLevel?: PriorityLevel;\n}\n\nexport interface BundleSellResult {\n bundleResults: Array<{\n bundleId: string;\n status: 'Landed' | 'Failed' | 'Timeout';\n signatures?: string[];\n walletsIncluded: string[];\n }>;\n warnings: Array<{ walletId: string; reason: string }>;\n}\n\nexport class Trading {\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Get a price quote for buying or selling a token.\n *\n * @example\n * ```ts\n * const quote = await op.trading.getQuote('So11...', {\n * action: 'buy',\n * solAmount: '1000000000',\n * });\n * console.log(quote.expectedTokens);\n * ```\n */\n async getQuote(mint: string, options: QuoteOptions): Promise<QuoteResult> {\n const query: Record<string, string> = { action: options.action };\n if (options.solAmount !== undefined) query['solAmount'] = options.solAmount;\n if (options.tokenAmount !== undefined) query['tokenAmount'] = options.tokenAmount;\n return this._http.get<QuoteResult>(`/api/tokens/${mint}/quote`, query);\n }\n\n /** Get the SOL cost to buy a specific number of tokens (inverse quote). */\n async getQuoteBuyCost(\n mint: string,\n options: QuoteBuyCostOptions,\n ): Promise<QuoteBuyCostResult> {\n return this._http.get<QuoteBuyCostResult>(`/api/tokens/${mint}/quote-buy-cost`, {\n tokenAmount: options.tokenAmount,\n });\n }\n\n /** Execute a buy transaction for a token. */\n async buy(mint: string, options: BuyOptions): Promise<BuyResult> {\n return this._http.post<BuyResult>(`/api/tokens/${mint}/buy`, options);\n }\n\n /** Execute a sell transaction for a token. */\n async sell(mint: string, options: SellOptions): Promise<SellResult> {\n return this._http.post<SellResult>(`/api/tokens/${mint}/sell`, options);\n }\n\n /** Multi-wallet sell packed into Jito bundles. */\n async bundleSell(mint: string, options: BundleSellOptions): Promise<BundleSellResult> {\n return this._http.post<BundleSellResult>(`/api/tokens/${mint}/bundle-sell`, options);\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface JobStatus {\n jobId: string;\n status: 'waiting' | 'active' | 'completed' | 'failed';\n progress: number;\n result?: {\n bundleStatuses: Array<{\n bundleId: string;\n status: 'Pending' | 'Landed' | 'Failed' | 'Timeout';\n signatures?: string[];\n }>;\n };\n warnings?: Array<{ walletId: string; reason: string }>;\n error?: string;\n}\n\nexport interface PollOptions {\n /** Polling interval in milliseconds. Default: 1000 */\n intervalMs?: number;\n /** Maximum time to wait in milliseconds. Default: 30000 */\n timeoutMs?: number;\n /** AbortSignal for cancellation. */\n signal?: AbortSignal;\n /** Callback invoked on each poll with current status. */\n onProgress?: (status: JobStatus) => void;\n}\n\nexport class Jobs {\n constructor(private readonly _http: HttpClient) {}\n\n /** Get the current status of a job. */\n async get(jobId: string): Promise<JobStatus> {\n return this._http.get<JobStatus>(`/api/jobs/${jobId}`);\n }\n\n /**\n * Poll a job until it completes or the timeout is reached.\n *\n * @param jobId - The job ID to poll.\n * @param options - Polling configuration.\n * @returns The final job status (completed).\n * @throws {Error} If the job fails or the timeout is reached.\n *\n * @example\n * ```ts\n * const launch = await op.bundles.launch({ ... });\n * const result = await op.jobs.poll(launch.jobId, {\n * intervalMs: 2000,\n * timeoutMs: 60000,\n * onProgress: (s) => console.log(`Progress: ${s.progress}%`),\n * });\n * ```\n */\n async poll(jobId: string, options?: PollOptions): Promise<JobStatus> {\n const intervalMs = options?.intervalMs ?? 1000;\n const timeoutMs = options?.timeoutMs ?? 30_000;\n const signal = options?.signal;\n const onProgress = options?.onProgress;\n\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n if (signal?.aborted) {\n throw new Error('Job polling aborted');\n }\n\n const status = await this.get(jobId);\n onProgress?.(status);\n\n if (status.status === 'completed') {\n return status;\n }\n\n if (status.status === 'failed') {\n throw new Error(status.error ?? `Job ${jobId} failed`);\n }\n\n // Wait before next poll\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, intervalMs);\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n reject(new Error('Job polling aborted'));\n },\n { once: true },\n );\n });\n }\n\n throw new Error(`Job ${jobId} polling timed out after ${timeoutMs}ms`);\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface AccumulatedFees {\n creatorAddress: string;\n accumulatedLamports: string;\n accumulatedSOL: number;\n creatorVaultAddress: string;\n}\n\nexport interface ClaimFeesResult {\n signature: string;\n amountClaimed: string;\n amountClaimedSOL: number;\n}\n\nexport class CreatorFees {\n constructor(private readonly _http: HttpClient) {}\n\n /** Get accumulated creator fees for a given creator address. */\n async getAccumulatedFees(address: string): Promise<AccumulatedFees> {\n return this._http.get<AccumulatedFees>('/api/creator-fees', { address });\n }\n\n /** Claim accumulated creator fees for a wallet you own. */\n async claim(creatorAddress: string): Promise<ClaimFeesResult> {\n return this._http.post<ClaimFeesResult>('/api/creator-fees/claim', { creatorAddress });\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface BundleLaunchOptions {\n devWalletId: string;\n buyWalletIds: string[];\n name: string;\n symbol: string;\n description?: string;\n imageBase64: string;\n imageType: 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp';\n devBuyAmountLamports?: string;\n walletBuyAmounts: string[];\n tipLamports?: number;\n twitter?: string;\n telegram?: string;\n website?: string;\n}\n\nexport interface BundleLaunchResult {\n jobId: string;\n}\n\nexport class Bundles {\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Launch a coordinated token creation + multi-wallet bundle buy.\n * Returns a job ID for polling.\n *\n * @example\n * ```ts\n * const { jobId } = await op.bundles.launch({\n * devWalletId: 'wallet-1',\n * buyWalletIds: ['wallet-2', 'wallet-3'],\n * name: 'My Token',\n * symbol: 'MTK',\n * imageBase64: '...',\n * imageType: 'image/png',\n * walletBuyAmounts: ['500000000', '500000000'],\n * });\n * const result = await op.jobs.poll(jobId);\n * ```\n */\n async launch(options: BundleLaunchOptions): Promise<BundleLaunchResult> {\n return this._http.post<BundleLaunchResult>('/api/tokens/bundle-launch', options);\n }\n}\n","import { HttpClient } from './http.js';\nimport { Wallets } from './resources/wallets.js';\nimport { Tokens } from './resources/tokens.js';\nimport { Trading } from './resources/trading.js';\nimport { Jobs } from './resources/jobs.js';\nimport { CreatorFees } from './resources/creator-fees.js';\nimport { Bundles } from './resources/bundles.js';\n\nexport interface OpenPumpConfig {\n /** API key (op_sk_live_...) */\n apiKey: string;\n /** Base URL of the OpenPump API. Defaults to https://api.openpump.io */\n baseUrl?: string;\n /** Request timeout in milliseconds. Defaults to 30_000 */\n timeout?: number;\n}\n\n/**\n * OpenPump SDK client with resource-namespaced API methods.\n *\n * @example\n * ```ts\n * import { OpenPump } from '@openpump/sdk';\n *\n * const op = new OpenPump({ apiKey: 'op_sk_live_...' });\n *\n * // List wallets\n * const wallets = await op.wallets.list();\n *\n * // Create a token\n * const token = await op.tokens.create({ ... });\n *\n * // Buy tokens\n * const trade = await op.trading.buy('mint-address', { ... });\n *\n * // Poll a bundle launch job\n * const job = await op.jobs.poll('job-id', { timeoutMs: 60_000 });\n * ```\n */\nexport class OpenPump {\n readonly wallets: Wallets;\n readonly tokens: Tokens;\n readonly trading: Trading;\n readonly jobs: Jobs;\n readonly creatorFees: CreatorFees;\n readonly bundles: Bundles;\n\n private readonly _http: HttpClient;\n\n constructor(config: OpenPumpConfig) {\n if (!config.apiKey) {\n throw new Error('apiKey is required');\n }\n\n this._http = new HttpClient({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? 'https://api.openpump.io',\n timeout: config.timeout ?? 30_000,\n });\n\n this.wallets = new Wallets(this._http);\n this.tokens = new Tokens(this._http);\n this.trading = new Trading(this._http);\n this.jobs = new Jobs(this._http);\n this.creatorFees = new CreatorFees(this._http);\n this.bundles = new Bundles(this._http);\n }\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@openpump/sdk",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "TypeScript SDK for the OpenPump API",
7
+ "license": "ISC",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/openpump/openpump.git",
14
+ "directory": "packages/sdk"
15
+ },
16
+ "exports": {
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
26
+ }
27
+ },
28
+ "main": "./dist/index.cjs",
29
+ "module": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "files": [
32
+ "dist",
33
+ "README.md"
34
+ ],
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
38
+ "sideEffects": false,
39
+ "scripts": {
40
+ "build": "tsup",
41
+ "typecheck": "tsc --noEmit",
42
+ "test": "vitest run",
43
+ "test:watch": "vitest"
44
+ },
45
+ "devDependencies": {
46
+ "@openpump/typescript-config": "workspace:*",
47
+ "@types/node": "^20.0.0",
48
+ "tsup": "^8.0.0",
49
+ "typescript": "^5.3.0",
50
+ "vitest": "^2.0.0"
51
+ }
52
+ }