@drift-labs/sdk 2.152.0-beta.1 → 2.152.0-beta.2
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 +1 -1
- package/lib/browser/swap/UnifiedSwapClient.d.ts +2 -1
- package/lib/browser/swap/UnifiedSwapClient.js +3 -5
- package/lib/browser/titan/titanClient.d.ts +3 -1
- package/lib/browser/titan/titanClient.js +44 -15
- package/lib/node/swap/UnifiedSwapClient.d.ts +2 -1
- package/lib/node/swap/UnifiedSwapClient.d.ts.map +1 -1
- package/lib/node/swap/UnifiedSwapClient.js +3 -5
- package/lib/node/titan/titanClient.d.ts +3 -1
- package/lib/node/titan/titanClient.d.ts.map +1 -1
- package/lib/node/titan/titanClient.js +44 -15
- package/package.json +1 -1
- package/src/swap/UnifiedSwapClient.ts +5 -5
- package/src/titan/titanClient.ts +48 -16
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.152.0-beta.
|
|
1
|
+
2.152.0-beta.2
|
|
@@ -60,11 +60,12 @@ export interface SwapTransactionResult {
|
|
|
60
60
|
export declare class UnifiedSwapClient {
|
|
61
61
|
private client;
|
|
62
62
|
private clientType;
|
|
63
|
-
constructor({ clientType, connection, authToken, url, }: {
|
|
63
|
+
constructor({ clientType, connection, authToken, url, proxyUrl, }: {
|
|
64
64
|
clientType: SwapClientType;
|
|
65
65
|
connection: Connection;
|
|
66
66
|
authToken?: string;
|
|
67
67
|
url?: string;
|
|
68
|
+
proxyUrl?: string;
|
|
68
69
|
});
|
|
69
70
|
/**
|
|
70
71
|
* Get a swap quote from the underlying client
|
|
@@ -6,7 +6,7 @@ const anchor_1 = require("@coral-xyz/anchor");
|
|
|
6
6
|
const jupiterClient_1 = require("../jupiter/jupiterClient");
|
|
7
7
|
const titanClient_1 = require("../titan/titanClient");
|
|
8
8
|
class UnifiedSwapClient {
|
|
9
|
-
constructor({ clientType, connection, authToken, url, }) {
|
|
9
|
+
constructor({ clientType, connection, authToken, url, proxyUrl, }) {
|
|
10
10
|
this.clientType = clientType;
|
|
11
11
|
if (clientType === 'jupiter') {
|
|
12
12
|
this.client = new jupiterClient_1.JupiterClient({
|
|
@@ -15,13 +15,11 @@ class UnifiedSwapClient {
|
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
else if (clientType === 'titan') {
|
|
18
|
-
if (!authToken) {
|
|
19
|
-
throw new Error('authToken is required for Titan client');
|
|
20
|
-
}
|
|
21
18
|
this.client = new titanClient_1.TitanClient({
|
|
22
19
|
connection,
|
|
23
|
-
authToken,
|
|
20
|
+
authToken: authToken || '', // Not needed when using proxy
|
|
24
21
|
url,
|
|
22
|
+
proxyUrl,
|
|
25
23
|
});
|
|
26
24
|
}
|
|
27
25
|
else {
|
|
@@ -29,10 +29,12 @@ export declare class TitanClient {
|
|
|
29
29
|
authToken: string;
|
|
30
30
|
url: string;
|
|
31
31
|
connection: Connection;
|
|
32
|
-
|
|
32
|
+
proxyUrl?: string;
|
|
33
|
+
constructor({ connection, authToken, url, proxyUrl, }: {
|
|
33
34
|
connection: Connection;
|
|
34
35
|
authToken: string;
|
|
35
36
|
url?: string;
|
|
37
|
+
proxyUrl?: string;
|
|
36
38
|
});
|
|
37
39
|
/**
|
|
38
40
|
* Get routes for a swap
|
|
@@ -10,10 +10,11 @@ var SwapMode;
|
|
|
10
10
|
})(SwapMode || (exports.SwapMode = SwapMode = {}));
|
|
11
11
|
const TITAN_API_URL = 'https://api.titan.exchange';
|
|
12
12
|
class TitanClient {
|
|
13
|
-
constructor({ connection, authToken, url, }) {
|
|
13
|
+
constructor({ connection, authToken, url, proxyUrl, }) {
|
|
14
14
|
this.connection = connection;
|
|
15
15
|
this.authToken = authToken;
|
|
16
16
|
this.url = url !== null && url !== void 0 ? url : TITAN_API_URL;
|
|
17
|
+
this.proxyUrl = proxyUrl;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Get routes for a swap
|
|
@@ -40,13 +41,27 @@ class TitanClient {
|
|
|
40
41
|
accountsLimitWritable: accountsLimitWritable.toString(),
|
|
41
42
|
}),
|
|
42
43
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
let response;
|
|
45
|
+
if (this.proxyUrl) {
|
|
46
|
+
// Use proxy route - send parameters in request body
|
|
47
|
+
response = await fetch(this.proxyUrl, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: {
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify(Object.fromEntries(params.entries())),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Direct request to Titan API
|
|
57
|
+
response = await fetch(`${this.url}/api/v1/quote/swap?${params.toString()}`, {
|
|
58
|
+
headers: {
|
|
59
|
+
Accept: 'application/vnd.msgpack',
|
|
60
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
61
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
50
65
|
if (!response.ok) {
|
|
51
66
|
throw new Error(`Titan API error: ${response.status} ${response.statusText}`);
|
|
52
67
|
}
|
|
@@ -112,13 +127,27 @@ class TitanClient {
|
|
|
112
127
|
accountsLimitWritable: accountsLimitWritable.toString(),
|
|
113
128
|
}),
|
|
114
129
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
let response;
|
|
131
|
+
if (this.proxyUrl) {
|
|
132
|
+
// Use proxy route - send parameters in request body
|
|
133
|
+
response = await fetch(this.proxyUrl, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
},
|
|
138
|
+
body: JSON.stringify(Object.fromEntries(params.entries())),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Direct request to Titan API
|
|
143
|
+
response = await fetch(`${this.url}/api/v1/quote/swap?${params.toString()}`, {
|
|
144
|
+
headers: {
|
|
145
|
+
Accept: 'application/vnd.msgpack',
|
|
146
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
147
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
122
151
|
if (!response.ok) {
|
|
123
152
|
if (response.status === 404) {
|
|
124
153
|
throw new Error('No routes available');
|
|
@@ -60,11 +60,12 @@ export interface SwapTransactionResult {
|
|
|
60
60
|
export declare class UnifiedSwapClient {
|
|
61
61
|
private client;
|
|
62
62
|
private clientType;
|
|
63
|
-
constructor({ clientType, connection, authToken, url, }: {
|
|
63
|
+
constructor({ clientType, connection, authToken, url, proxyUrl, }: {
|
|
64
64
|
clientType: SwapClientType;
|
|
65
65
|
connection: Connection;
|
|
66
66
|
authToken?: string;
|
|
67
67
|
url?: string;
|
|
68
|
+
proxyUrl?: string;
|
|
68
69
|
});
|
|
69
70
|
/**
|
|
70
71
|
* Get a swap quote from the underlying client
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnifiedSwapClient.d.ts","sourceRoot":"","sources":["../../../src/swap/UnifiedSwapClient.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EACN,aAAa,EAEb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,WAAW,EAGX,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAC9C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IAEpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAGrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,EAAE,CAAC;IACX,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,aAAa,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,YAAY,CAAC,EAAE,yBAAyB,EAAE,CAAC;CAC3C;AAED,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAiB;gBAEvB,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,GAAG,
|
|
1
|
+
{"version":3,"file":"UnifiedSwapClient.d.ts","sourceRoot":"","sources":["../../../src/swap/UnifiedSwapClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const anchor_1 = require("@coral-xyz/anchor");
|
|
|
6
6
|
const jupiterClient_1 = require("../jupiter/jupiterClient");
|
|
7
7
|
const titanClient_1 = require("../titan/titanClient");
|
|
8
8
|
class UnifiedSwapClient {
|
|
9
|
-
constructor({ clientType, connection, authToken, url, }) {
|
|
9
|
+
constructor({ clientType, connection, authToken, url, proxyUrl, }) {
|
|
10
10
|
this.clientType = clientType;
|
|
11
11
|
if (clientType === 'jupiter') {
|
|
12
12
|
this.client = new jupiterClient_1.JupiterClient({
|
|
@@ -15,13 +15,11 @@ class UnifiedSwapClient {
|
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
else if (clientType === 'titan') {
|
|
18
|
-
if (!authToken) {
|
|
19
|
-
throw new Error('authToken is required for Titan client');
|
|
20
|
-
}
|
|
21
18
|
this.client = new titanClient_1.TitanClient({
|
|
22
19
|
connection,
|
|
23
|
-
authToken,
|
|
20
|
+
authToken: authToken || '', // Not needed when using proxy
|
|
24
21
|
url,
|
|
22
|
+
proxyUrl,
|
|
25
23
|
});
|
|
26
24
|
}
|
|
27
25
|
else {
|
|
@@ -29,10 +29,12 @@ export declare class TitanClient {
|
|
|
29
29
|
authToken: string;
|
|
30
30
|
url: string;
|
|
31
31
|
connection: Connection;
|
|
32
|
-
|
|
32
|
+
proxyUrl?: string;
|
|
33
|
+
constructor({ connection, authToken, url, proxyUrl, }: {
|
|
33
34
|
connection: Connection;
|
|
34
35
|
authToken: string;
|
|
35
36
|
url?: string;
|
|
37
|
+
proxyUrl?: string;
|
|
36
38
|
});
|
|
37
39
|
/**
|
|
38
40
|
* Get routes for a swap
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titanClient.d.ts","sourceRoot":"","sources":["../../../src/titan/titanClient.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAGvC,oBAAY,QAAQ;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACrB;AA6DD,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,WAAW;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"titanClient.d.ts","sourceRoot":"","sources":["../../../src/titan/titanClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,11 @@ var SwapMode;
|
|
|
10
10
|
})(SwapMode || (exports.SwapMode = SwapMode = {}));
|
|
11
11
|
const TITAN_API_URL = 'https://api.titan.exchange';
|
|
12
12
|
class TitanClient {
|
|
13
|
-
constructor({ connection, authToken, url, }) {
|
|
13
|
+
constructor({ connection, authToken, url, proxyUrl, }) {
|
|
14
14
|
this.connection = connection;
|
|
15
15
|
this.authToken = authToken;
|
|
16
16
|
this.url = url !== null && url !== void 0 ? url : TITAN_API_URL;
|
|
17
|
+
this.proxyUrl = proxyUrl;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Get routes for a swap
|
|
@@ -40,13 +41,27 @@ class TitanClient {
|
|
|
40
41
|
accountsLimitWritable: accountsLimitWritable.toString(),
|
|
41
42
|
}),
|
|
42
43
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
let response;
|
|
45
|
+
if (this.proxyUrl) {
|
|
46
|
+
// Use proxy route - send parameters in request body
|
|
47
|
+
response = await fetch(this.proxyUrl, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: {
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify(Object.fromEntries(params.entries())),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Direct request to Titan API
|
|
57
|
+
response = await fetch(`${this.url}/api/v1/quote/swap?${params.toString()}`, {
|
|
58
|
+
headers: {
|
|
59
|
+
Accept: 'application/vnd.msgpack',
|
|
60
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
61
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
50
65
|
if (!response.ok) {
|
|
51
66
|
throw new Error(`Titan API error: ${response.status} ${response.statusText}`);
|
|
52
67
|
}
|
|
@@ -112,13 +127,27 @@ class TitanClient {
|
|
|
112
127
|
accountsLimitWritable: accountsLimitWritable.toString(),
|
|
113
128
|
}),
|
|
114
129
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
let response;
|
|
131
|
+
if (this.proxyUrl) {
|
|
132
|
+
// Use proxy route - send parameters in request body
|
|
133
|
+
response = await fetch(this.proxyUrl, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
},
|
|
138
|
+
body: JSON.stringify(Object.fromEntries(params.entries())),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Direct request to Titan API
|
|
143
|
+
response = await fetch(`${this.url}/api/v1/quote/swap?${params.toString()}`, {
|
|
144
|
+
headers: {
|
|
145
|
+
Accept: 'application/vnd.msgpack',
|
|
146
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
147
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
122
151
|
if (!response.ok) {
|
|
123
152
|
if (response.status === 404) {
|
|
124
153
|
throw new Error('No routes available');
|
package/package.json
CHANGED
|
@@ -82,11 +82,13 @@ export class UnifiedSwapClient {
|
|
|
82
82
|
connection,
|
|
83
83
|
authToken,
|
|
84
84
|
url,
|
|
85
|
+
proxyUrl,
|
|
85
86
|
}: {
|
|
86
87
|
clientType: SwapClientType;
|
|
87
88
|
connection: Connection;
|
|
88
|
-
authToken?: string; // Required for Titan, optional for Jupiter
|
|
89
|
+
authToken?: string; // Required for Titan when not using proxy, optional for Jupiter
|
|
89
90
|
url?: string; // Optional custom URL
|
|
91
|
+
proxyUrl?: string; // Optional proxy URL for Titan
|
|
90
92
|
}) {
|
|
91
93
|
this.clientType = clientType;
|
|
92
94
|
|
|
@@ -96,13 +98,11 @@ export class UnifiedSwapClient {
|
|
|
96
98
|
url,
|
|
97
99
|
});
|
|
98
100
|
} else if (clientType === 'titan') {
|
|
99
|
-
if (!authToken) {
|
|
100
|
-
throw new Error('authToken is required for Titan client');
|
|
101
|
-
}
|
|
102
101
|
this.client = new TitanClient({
|
|
103
102
|
connection,
|
|
104
|
-
authToken,
|
|
103
|
+
authToken: authToken || '', // Not needed when using proxy
|
|
105
104
|
url,
|
|
105
|
+
proxyUrl,
|
|
106
106
|
});
|
|
107
107
|
} else {
|
|
108
108
|
throw new Error(`Unsupported client type: ${clientType}`);
|
package/src/titan/titanClient.ts
CHANGED
|
@@ -93,19 +93,23 @@ export class TitanClient {
|
|
|
93
93
|
authToken: string;
|
|
94
94
|
url: string;
|
|
95
95
|
connection: Connection;
|
|
96
|
+
proxyUrl?: string;
|
|
96
97
|
|
|
97
98
|
constructor({
|
|
98
99
|
connection,
|
|
99
100
|
authToken,
|
|
100
101
|
url,
|
|
102
|
+
proxyUrl,
|
|
101
103
|
}: {
|
|
102
104
|
connection: Connection;
|
|
103
105
|
authToken: string;
|
|
104
106
|
url?: string;
|
|
107
|
+
proxyUrl?: string;
|
|
105
108
|
}) {
|
|
106
109
|
this.connection = connection;
|
|
107
110
|
this.authToken = authToken;
|
|
108
111
|
this.url = url ?? TITAN_API_URL;
|
|
112
|
+
this.proxyUrl = proxyUrl;
|
|
109
113
|
}
|
|
110
114
|
|
|
111
115
|
/**
|
|
@@ -157,16 +161,30 @@ export class TitanClient {
|
|
|
157
161
|
}),
|
|
158
162
|
});
|
|
159
163
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
164
|
+
let response: Response;
|
|
165
|
+
|
|
166
|
+
if (this.proxyUrl) {
|
|
167
|
+
// Use proxy route - send parameters in request body
|
|
168
|
+
response = await fetch(this.proxyUrl, {
|
|
169
|
+
method: 'POST',
|
|
163
170
|
headers: {
|
|
164
|
-
|
|
165
|
-
'Accept-Encoding': 'gzip, deflate, br',
|
|
166
|
-
Authorization: `Bearer ${this.authToken}`,
|
|
171
|
+
'Content-Type': 'application/json',
|
|
167
172
|
},
|
|
168
|
-
|
|
169
|
-
|
|
173
|
+
body: JSON.stringify(Object.fromEntries(params.entries())),
|
|
174
|
+
});
|
|
175
|
+
} else {
|
|
176
|
+
// Direct request to Titan API
|
|
177
|
+
response = await fetch(
|
|
178
|
+
`${this.url}/api/v1/quote/swap?${params.toString()}`,
|
|
179
|
+
{
|
|
180
|
+
headers: {
|
|
181
|
+
Accept: 'application/vnd.msgpack',
|
|
182
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
183
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
184
|
+
},
|
|
185
|
+
}
|
|
186
|
+
);
|
|
187
|
+
}
|
|
170
188
|
|
|
171
189
|
if (!response.ok) {
|
|
172
190
|
throw new Error(
|
|
@@ -268,16 +286,30 @@ export class TitanClient {
|
|
|
268
286
|
}),
|
|
269
287
|
});
|
|
270
288
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
289
|
+
let response: Response;
|
|
290
|
+
|
|
291
|
+
if (this.proxyUrl) {
|
|
292
|
+
// Use proxy route - send parameters in request body
|
|
293
|
+
response = await fetch(this.proxyUrl, {
|
|
294
|
+
method: 'POST',
|
|
274
295
|
headers: {
|
|
275
|
-
|
|
276
|
-
'Accept-Encoding': 'gzip, deflate, br',
|
|
277
|
-
Authorization: `Bearer ${this.authToken}`,
|
|
296
|
+
'Content-Type': 'application/json',
|
|
278
297
|
},
|
|
279
|
-
|
|
280
|
-
|
|
298
|
+
body: JSON.stringify(Object.fromEntries(params.entries())),
|
|
299
|
+
});
|
|
300
|
+
} else {
|
|
301
|
+
// Direct request to Titan API
|
|
302
|
+
response = await fetch(
|
|
303
|
+
`${this.url}/api/v1/quote/swap?${params.toString()}`,
|
|
304
|
+
{
|
|
305
|
+
headers: {
|
|
306
|
+
Accept: 'application/vnd.msgpack',
|
|
307
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
308
|
+
Authorization: `Bearer ${this.authToken}`,
|
|
309
|
+
},
|
|
310
|
+
}
|
|
311
|
+
);
|
|
312
|
+
}
|
|
281
313
|
|
|
282
314
|
if (!response.ok) {
|
|
283
315
|
if (response.status === 404) {
|