@drift-labs/sdk-browser 2.156.0-beta.3 → 2.156.0-beta.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 2.156.0-beta.3
1
+ 2.156.0-beta.4
@@ -209,15 +209,29 @@ export interface QuoteResponse {
209
209
  errorCode?: string;
210
210
  }
211
211
  export declare const RECOMMENDED_JUPITER_API_VERSION = "/v1";
212
- export declare const RECOMMENDED_JUPITER_API = "https://lite-api.jup.ag/swap";
212
+ /** @deprecated Use RECOMMENDED_JUPITER_API instead. lite-api.jup.ag requires migration to api.jup.ag with API key. */
213
+ export declare const LEGACY_JUPITER_API = "https://lite-api.jup.ag/swap";
214
+ export declare const RECOMMENDED_JUPITER_API = "https://api.jup.ag/swap";
213
215
  export declare class JupiterClient {
214
216
  url: string;
215
217
  connection: Connection;
216
218
  lookupTableCahce: Map<string, AddressLookupTableAccount>;
217
- constructor({ connection, url }: {
219
+ private apiKey?;
220
+ /**
221
+ * Create a Jupiter client
222
+ * @param connection - Solana connection
223
+ * @param url - Optional custom API URL. Defaults to https://api.jup.ag/swap
224
+ * @param apiKey - API key for Jupiter API. Required for api.jup.ag (free tier available at https://portal.jup.ag)
225
+ */
226
+ constructor({ connection, url, apiKey, }: {
218
227
  connection: Connection;
219
228
  url?: string;
229
+ apiKey?: string;
220
230
  });
231
+ /**
232
+ * Get the headers for API requests, including API key if configured
233
+ */
234
+ private getHeaders;
221
235
  /**
222
236
  * Get routes for a swap
223
237
  * @param inputMint the mint of the input token
@@ -3,16 +3,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.JupiterClient = exports.RECOMMENDED_JUPITER_API = exports.RECOMMENDED_JUPITER_API_VERSION = void 0;
6
+ exports.JupiterClient = exports.RECOMMENDED_JUPITER_API = exports.LEGACY_JUPITER_API = exports.RECOMMENDED_JUPITER_API_VERSION = void 0;
7
7
  const web3_js_1 = require("@solana/web3.js");
8
8
  const node_fetch_1 = __importDefault(require("node-fetch"));
9
9
  exports.RECOMMENDED_JUPITER_API_VERSION = '/v1';
10
- exports.RECOMMENDED_JUPITER_API = 'https://lite-api.jup.ag/swap';
10
+ /** @deprecated Use RECOMMENDED_JUPITER_API instead. lite-api.jup.ag requires migration to api.jup.ag with API key. */
11
+ exports.LEGACY_JUPITER_API = 'https://lite-api.jup.ag/swap';
12
+ exports.RECOMMENDED_JUPITER_API = 'https://api.jup.ag/swap';
11
13
  class JupiterClient {
12
- constructor({ connection, url }) {
14
+ /**
15
+ * Create a Jupiter client
16
+ * @param connection - Solana connection
17
+ * @param url - Optional custom API URL. Defaults to https://api.jup.ag/swap
18
+ * @param apiKey - API key for Jupiter API. Required for api.jup.ag (free tier available at https://portal.jup.ag)
19
+ */
20
+ constructor({ connection, url, apiKey, }) {
13
21
  this.lookupTableCahce = new Map();
14
22
  this.connection = connection;
15
23
  this.url = url !== null && url !== void 0 ? url : exports.RECOMMENDED_JUPITER_API;
24
+ this.apiKey = apiKey;
25
+ }
26
+ /**
27
+ * Get the headers for API requests, including API key if configured
28
+ */
29
+ getHeaders(contentType) {
30
+ const headers = {};
31
+ if (contentType) {
32
+ headers['Content-Type'] = contentType;
33
+ }
34
+ if (this.apiKey) {
35
+ headers['x-api-key'] = this.apiKey;
36
+ }
37
+ return headers;
16
38
  }
17
39
  /**
18
40
  * Get routes for a swap
@@ -43,10 +65,12 @@ class JupiterClient {
43
65
  if (swapMode === 'ExactOut') {
44
66
  params.delete('maxAccounts');
45
67
  }
46
- const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API
68
+ const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API || this.url === exports.LEGACY_JUPITER_API
47
69
  ? exports.RECOMMENDED_JUPITER_API_VERSION
48
70
  : '';
49
- const quote = await (await (0, node_fetch_1.default)(`${this.url}${apiVersionParam}/quote?${params.toString()}`)).json();
71
+ const headers = this.getHeaders();
72
+ const fetchOptions = Object.keys(headers).length > 0 ? { headers } : {};
73
+ const quote = await (await (0, node_fetch_1.default)(`${this.url}${apiVersionParam}/quote?${params.toString()}`, fetchOptions)).json();
50
74
  return quote;
51
75
  }
52
76
  /**
@@ -60,14 +84,12 @@ class JupiterClient {
60
84
  if (!quote) {
61
85
  throw new Error('Jupiter swap quote not provided. Please try again.');
62
86
  }
63
- const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API
87
+ const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API || this.url === exports.LEGACY_JUPITER_API
64
88
  ? exports.RECOMMENDED_JUPITER_API_VERSION
65
89
  : '';
66
90
  const resp = await (await (0, node_fetch_1.default)(`${this.url}${apiVersionParam}/swap`, {
67
91
  method: 'POST',
68
- headers: {
69
- 'Content-Type': 'application/json',
70
- },
92
+ headers: this.getHeaders('application/json'),
71
93
  body: JSON.stringify({
72
94
  quoteResponse: quote,
73
95
  userPublicKey,
@@ -60,6 +60,14 @@ export interface SwapTransactionResult {
60
60
  export declare class UnifiedSwapClient {
61
61
  private client;
62
62
  private clientType;
63
+ /**
64
+ * Create a unified swap client
65
+ * @param clientType - 'jupiter' or 'titan'
66
+ * @param connection - Solana connection
67
+ * @param authToken - For Titan: auth token (required when not using proxy). For Jupiter: API key (required for api.jup.ag, get free key at https://portal.jup.ag)
68
+ * @param url - Optional custom URL
69
+ * @param proxyUrl - Optional proxy URL for Titan
70
+ */
63
71
  constructor({ clientType, connection, authToken, url, proxyUrl, }: {
64
72
  clientType: SwapClientType;
65
73
  connection: Connection;
@@ -4,12 +4,21 @@ exports.UnifiedSwapClient = void 0;
4
4
  const jupiterClient_1 = require("../jupiter/jupiterClient");
5
5
  const titanClient_1 = require("../titan/titanClient");
6
6
  class UnifiedSwapClient {
7
+ /**
8
+ * Create a unified swap client
9
+ * @param clientType - 'jupiter' or 'titan'
10
+ * @param connection - Solana connection
11
+ * @param authToken - For Titan: auth token (required when not using proxy). For Jupiter: API key (required for api.jup.ag, get free key at https://portal.jup.ag)
12
+ * @param url - Optional custom URL
13
+ * @param proxyUrl - Optional proxy URL for Titan
14
+ */
7
15
  constructor({ clientType, connection, authToken, url, proxyUrl, }) {
8
16
  this.clientType = clientType;
9
17
  if (clientType === 'jupiter') {
10
18
  this.client = new jupiterClient_1.JupiterClient({
11
19
  connection,
12
20
  url,
21
+ apiKey: authToken,
13
22
  });
14
23
  }
15
24
  else if (clientType === 'titan') {
@@ -209,15 +209,29 @@ export interface QuoteResponse {
209
209
  errorCode?: string;
210
210
  }
211
211
  export declare const RECOMMENDED_JUPITER_API_VERSION = "/v1";
212
- export declare const RECOMMENDED_JUPITER_API = "https://lite-api.jup.ag/swap";
212
+ /** @deprecated Use RECOMMENDED_JUPITER_API instead. lite-api.jup.ag requires migration to api.jup.ag with API key. */
213
+ export declare const LEGACY_JUPITER_API = "https://lite-api.jup.ag/swap";
214
+ export declare const RECOMMENDED_JUPITER_API = "https://api.jup.ag/swap";
213
215
  export declare class JupiterClient {
214
216
  url: string;
215
217
  connection: Connection;
216
218
  lookupTableCahce: Map<string, AddressLookupTableAccount>;
217
- constructor({ connection, url }: {
219
+ private apiKey?;
220
+ /**
221
+ * Create a Jupiter client
222
+ * @param connection - Solana connection
223
+ * @param url - Optional custom API URL. Defaults to https://api.jup.ag/swap
224
+ * @param apiKey - API key for Jupiter API. Required for api.jup.ag (free tier available at https://portal.jup.ag)
225
+ */
226
+ constructor({ connection, url, apiKey, }: {
218
227
  connection: Connection;
219
228
  url?: string;
229
+ apiKey?: string;
220
230
  });
231
+ /**
232
+ * Get the headers for API requests, including API key if configured
233
+ */
234
+ private getHeaders;
221
235
  /**
222
236
  * Get routes for a swap
223
237
  * @param inputMint the mint of the input token
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterClient.d.ts","sourceRoot":"","sources":["../../../src/jupiter/jupiterClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jupiterClient.d.ts","sourceRoot":"","sources":["../../../src/jupiter/jupiterClient.ts"],"names":[],"mappings":"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"}
@@ -3,16 +3,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.JupiterClient = exports.RECOMMENDED_JUPITER_API = exports.RECOMMENDED_JUPITER_API_VERSION = void 0;
6
+ exports.JupiterClient = exports.RECOMMENDED_JUPITER_API = exports.LEGACY_JUPITER_API = exports.RECOMMENDED_JUPITER_API_VERSION = void 0;
7
7
  const web3_js_1 = require("@solana/web3.js");
8
8
  const node_fetch_1 = __importDefault(require("node-fetch"));
9
9
  exports.RECOMMENDED_JUPITER_API_VERSION = '/v1';
10
- exports.RECOMMENDED_JUPITER_API = 'https://lite-api.jup.ag/swap';
10
+ /** @deprecated Use RECOMMENDED_JUPITER_API instead. lite-api.jup.ag requires migration to api.jup.ag with API key. */
11
+ exports.LEGACY_JUPITER_API = 'https://lite-api.jup.ag/swap';
12
+ exports.RECOMMENDED_JUPITER_API = 'https://api.jup.ag/swap';
11
13
  class JupiterClient {
12
- constructor({ connection, url }) {
14
+ /**
15
+ * Create a Jupiter client
16
+ * @param connection - Solana connection
17
+ * @param url - Optional custom API URL. Defaults to https://api.jup.ag/swap
18
+ * @param apiKey - API key for Jupiter API. Required for api.jup.ag (free tier available at https://portal.jup.ag)
19
+ */
20
+ constructor({ connection, url, apiKey, }) {
13
21
  this.lookupTableCahce = new Map();
14
22
  this.connection = connection;
15
23
  this.url = url !== null && url !== void 0 ? url : exports.RECOMMENDED_JUPITER_API;
24
+ this.apiKey = apiKey;
25
+ }
26
+ /**
27
+ * Get the headers for API requests, including API key if configured
28
+ */
29
+ getHeaders(contentType) {
30
+ const headers = {};
31
+ if (contentType) {
32
+ headers['Content-Type'] = contentType;
33
+ }
34
+ if (this.apiKey) {
35
+ headers['x-api-key'] = this.apiKey;
36
+ }
37
+ return headers;
16
38
  }
17
39
  /**
18
40
  * Get routes for a swap
@@ -43,10 +65,12 @@ class JupiterClient {
43
65
  if (swapMode === 'ExactOut') {
44
66
  params.delete('maxAccounts');
45
67
  }
46
- const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API
68
+ const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API || this.url === exports.LEGACY_JUPITER_API
47
69
  ? exports.RECOMMENDED_JUPITER_API_VERSION
48
70
  : '';
49
- const quote = await (await (0, node_fetch_1.default)(`${this.url}${apiVersionParam}/quote?${params.toString()}`)).json();
71
+ const headers = this.getHeaders();
72
+ const fetchOptions = Object.keys(headers).length > 0 ? { headers } : {};
73
+ const quote = await (await (0, node_fetch_1.default)(`${this.url}${apiVersionParam}/quote?${params.toString()}`, fetchOptions)).json();
50
74
  return quote;
51
75
  }
52
76
  /**
@@ -60,14 +84,12 @@ class JupiterClient {
60
84
  if (!quote) {
61
85
  throw new Error('Jupiter swap quote not provided. Please try again.');
62
86
  }
63
- const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API
87
+ const apiVersionParam = this.url === exports.RECOMMENDED_JUPITER_API || this.url === exports.LEGACY_JUPITER_API
64
88
  ? exports.RECOMMENDED_JUPITER_API_VERSION
65
89
  : '';
66
90
  const resp = await (await (0, node_fetch_1.default)(`${this.url}${apiVersionParam}/swap`, {
67
91
  method: 'POST',
68
- headers: {
69
- 'Content-Type': 'application/json',
70
- },
92
+ headers: this.getHeaders('application/json'),
71
93
  body: JSON.stringify({
72
94
  quoteResponse: quote,
73
95
  userPublicKey,
@@ -60,6 +60,14 @@ export interface SwapTransactionResult {
60
60
  export declare class UnifiedSwapClient {
61
61
  private client;
62
62
  private clientType;
63
+ /**
64
+ * Create a unified swap client
65
+ * @param clientType - 'jupiter' or 'titan'
66
+ * @param connection - Solana connection
67
+ * @param authToken - For Titan: auth token (required when not using proxy). For Jupiter: API key (required for api.jup.ag, get free key at https://portal.jup.ag)
68
+ * @param url - Optional custom URL
69
+ * @param proxyUrl - Optional proxy URL for Titan
70
+ */
63
71
  constructor({ clientType, connection, authToken, url, proxyUrl, }: {
64
72
  clientType: SwapClientType;
65
73
  connection: Connection;
@@ -1 +1 @@
1
- {"version":3,"file":"UnifiedSwapClient.d.ts","sourceRoot":"","sources":["../../../src/swap/UnifiedSwapClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UnifiedSwapClient.d.ts","sourceRoot":"","sources":["../../../src/swap/UnifiedSwapClient.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,21 @@ exports.UnifiedSwapClient = void 0;
4
4
  const jupiterClient_1 = require("../jupiter/jupiterClient");
5
5
  const titanClient_1 = require("../titan/titanClient");
6
6
  class UnifiedSwapClient {
7
+ /**
8
+ * Create a unified swap client
9
+ * @param clientType - 'jupiter' or 'titan'
10
+ * @param connection - Solana connection
11
+ * @param authToken - For Titan: auth token (required when not using proxy). For Jupiter: API key (required for api.jup.ag, get free key at https://portal.jup.ag)
12
+ * @param url - Optional custom URL
13
+ * @param proxyUrl - Optional proxy URL for Titan
14
+ */
7
15
  constructor({ clientType, connection, authToken, url, proxyUrl, }) {
8
16
  this.clientType = clientType;
9
17
  if (clientType === 'jupiter') {
10
18
  this.client = new jupiterClient_1.JupiterClient({
11
19
  connection,
12
20
  url,
21
+ apiKey: authToken,
13
22
  });
14
23
  }
15
24
  else if (clientType === 'titan') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk-browser",
3
- "version": "2.156.0-beta.3",
3
+ "version": "2.156.0-beta.4",
4
4
  "main": "lib/node/index.js",
5
5
  "types": "lib/node/index.d.ts",
6
6
  "module": "./lib/browser/index.js",
@@ -224,16 +224,48 @@ export interface QuoteResponse {
224
224
  }
225
225
 
226
226
  export const RECOMMENDED_JUPITER_API_VERSION = '/v1';
227
- export const RECOMMENDED_JUPITER_API = 'https://lite-api.jup.ag/swap';
227
+ /** @deprecated Use RECOMMENDED_JUPITER_API instead. lite-api.jup.ag requires migration to api.jup.ag with API key. */
228
+ export const LEGACY_JUPITER_API = 'https://lite-api.jup.ag/swap';
229
+ export const RECOMMENDED_JUPITER_API = 'https://api.jup.ag/swap';
228
230
 
229
231
  export class JupiterClient {
230
232
  url: string;
231
233
  connection: Connection;
232
234
  lookupTableCahce = new Map<string, AddressLookupTableAccount>();
235
+ private apiKey?: string;
233
236
 
234
- constructor({ connection, url }: { connection: Connection; url?: string }) {
237
+ /**
238
+ * Create a Jupiter client
239
+ * @param connection - Solana connection
240
+ * @param url - Optional custom API URL. Defaults to https://api.jup.ag/swap
241
+ * @param apiKey - API key for Jupiter API. Required for api.jup.ag (free tier available at https://portal.jup.ag)
242
+ */
243
+ constructor({
244
+ connection,
245
+ url,
246
+ apiKey,
247
+ }: {
248
+ connection: Connection;
249
+ url?: string;
250
+ apiKey?: string;
251
+ }) {
235
252
  this.connection = connection;
236
253
  this.url = url ?? RECOMMENDED_JUPITER_API;
254
+ this.apiKey = apiKey;
255
+ }
256
+
257
+ /**
258
+ * Get the headers for API requests, including API key if configured
259
+ */
260
+ private getHeaders(contentType?: string): Record<string, string> {
261
+ const headers: Record<string, string> = {};
262
+ if (contentType) {
263
+ headers['Content-Type'] = contentType;
264
+ }
265
+ if (this.apiKey) {
266
+ headers['x-api-key'] = this.apiKey;
267
+ }
268
+ return headers;
237
269
  }
238
270
 
239
271
  /**
@@ -289,11 +321,17 @@ export class JupiterClient {
289
321
  params.delete('maxAccounts');
290
322
  }
291
323
  const apiVersionParam =
292
- this.url === RECOMMENDED_JUPITER_API
324
+ this.url === RECOMMENDED_JUPITER_API || this.url === LEGACY_JUPITER_API
293
325
  ? RECOMMENDED_JUPITER_API_VERSION
294
326
  : '';
327
+ const headers = this.getHeaders();
328
+ const fetchOptions: RequestInit =
329
+ Object.keys(headers).length > 0 ? { headers } : {};
295
330
  const quote = await (
296
- await fetch(`${this.url}${apiVersionParam}/quote?${params.toString()}`)
331
+ await fetch(
332
+ `${this.url}${apiVersionParam}/quote?${params.toString()}`,
333
+ fetchOptions
334
+ )
297
335
  ).json();
298
336
  return quote as QuoteResponse;
299
337
  }
@@ -318,15 +356,13 @@ export class JupiterClient {
318
356
  }
319
357
 
320
358
  const apiVersionParam =
321
- this.url === RECOMMENDED_JUPITER_API
359
+ this.url === RECOMMENDED_JUPITER_API || this.url === LEGACY_JUPITER_API
322
360
  ? RECOMMENDED_JUPITER_API_VERSION
323
361
  : '';
324
362
  const resp = await (
325
363
  await fetch(`${this.url}${apiVersionParam}/swap`, {
326
364
  method: 'POST',
327
- headers: {
328
- 'Content-Type': 'application/json',
329
- },
365
+ headers: this.getHeaders('application/json'),
330
366
  body: JSON.stringify({
331
367
  quoteResponse: quote,
332
368
  userPublicKey,
@@ -73,6 +73,14 @@ export class UnifiedSwapClient {
73
73
  private client: JupiterClient | TitanClient;
74
74
  private clientType: SwapClientType;
75
75
 
76
+ /**
77
+ * Create a unified swap client
78
+ * @param clientType - 'jupiter' or 'titan'
79
+ * @param connection - Solana connection
80
+ * @param authToken - For Titan: auth token (required when not using proxy). For Jupiter: API key (required for api.jup.ag, get free key at https://portal.jup.ag)
81
+ * @param url - Optional custom URL
82
+ * @param proxyUrl - Optional proxy URL for Titan
83
+ */
76
84
  constructor({
77
85
  clientType,
78
86
  connection,
@@ -82,7 +90,7 @@ export class UnifiedSwapClient {
82
90
  }: {
83
91
  clientType: SwapClientType;
84
92
  connection: Connection;
85
- authToken?: string; // Required for Titan when not using proxy, optional for Jupiter
93
+ authToken?: string; // For Titan: auth token. For Jupiter: API key (required for api.jup.ag)
86
94
  url?: string; // Optional custom URL
87
95
  proxyUrl?: string; // Optional proxy URL for Titan
88
96
  }) {
@@ -92,6 +100,7 @@ export class UnifiedSwapClient {
92
100
  this.client = new JupiterClient({
93
101
  connection,
94
102
  url,
103
+ apiKey: authToken,
95
104
  });
96
105
  } else if (clientType === 'titan') {
97
106
  this.client = new TitanClient({