@1stdex/first-sdk 1.0.76 → 1.0.78
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/cjs/entities/trade/apis/index.js +65 -21
- package/dist/cjs/entities/trade/apis/index.js.map +1 -1
- package/dist/cjs/views/trade-history.js.map +1 -1
- package/dist/esm/entities/trade/apis/index.js +75 -25
- package/dist/esm/entities/trade/apis/index.js.map +1 -1
- package/dist/esm/views/trade-history.js +7 -2
- package/dist/esm/views/trade-history.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/entities/trade/apis/index.d.ts +3 -3
- package/dist/types/entities/trade/apis/index.d.ts.map +1 -1
- package/dist/types/entities/trade/types.d.ts +2 -0
- package/dist/types/entities/trade/types.d.ts.map +1 -1
- package/dist/types/views/trade-history.d.ts +8 -3
- package/dist/types/views/trade-history.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -11,8 +11,36 @@ const toCurrency = (currencyDto) => ({
|
|
|
11
11
|
decimals: Number(currencyDto.decimals),
|
|
12
12
|
});
|
|
13
13
|
const toTrade = (chainId, tradeDto) => {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
let inputCurrency;
|
|
15
|
+
let outputCurrency;
|
|
16
|
+
let inputAmount;
|
|
17
|
+
let outputAmount;
|
|
18
|
+
let usdAmount;
|
|
19
|
+
if ('inputToken' in tradeDto) {
|
|
20
|
+
inputCurrency = toCurrency(tradeDto.inputToken);
|
|
21
|
+
outputCurrency = toCurrency(tradeDto.outputToken);
|
|
22
|
+
inputAmount = tradeDto.inputAmount;
|
|
23
|
+
outputAmount = tradeDto.outputAmount;
|
|
24
|
+
usdAmount = tradeDto.amountUSD;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const isBid = BigInt(tradeDto.tick) < 0n;
|
|
28
|
+
const quote = toCurrency(tradeDto.quote);
|
|
29
|
+
const base = toCurrency(tradeDto.base);
|
|
30
|
+
if (isBid) {
|
|
31
|
+
inputCurrency = quote;
|
|
32
|
+
outputCurrency = base;
|
|
33
|
+
inputAmount = tradeDto.claimedQuoteAmount;
|
|
34
|
+
outputAmount = tradeDto.claimedBaseAmount;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
inputCurrency = base;
|
|
38
|
+
outputCurrency = quote;
|
|
39
|
+
inputAmount = tradeDto.claimedBaseAmount;
|
|
40
|
+
outputAmount = tradeDto.claimedQuoteAmount;
|
|
41
|
+
}
|
|
42
|
+
usdAmount = tradeDto.claimedAmountUSD;
|
|
43
|
+
}
|
|
16
44
|
const quote = toCurrency(tradeDto.book.quote);
|
|
17
45
|
const base = toCurrency(tradeDto.book.base);
|
|
18
46
|
const { quoteTokenAddress } = (0, market_id_1.getMarketId)(chainId, [
|
|
@@ -23,26 +51,31 @@ const toTrade = (chainId, tradeDto) => {
|
|
|
23
51
|
return {
|
|
24
52
|
id: tradeDto.id,
|
|
25
53
|
type: isBuy ? 'buy' : 'sell',
|
|
26
|
-
usdAmount
|
|
54
|
+
usdAmount,
|
|
27
55
|
spent: {
|
|
28
56
|
currency: inputCurrency,
|
|
29
|
-
amount: (0, viem_1.formatUnits)(BigInt(
|
|
57
|
+
amount: (0, viem_1.formatUnits)(BigInt(inputAmount), inputCurrency.decimals),
|
|
30
58
|
direction: 'out',
|
|
31
59
|
},
|
|
32
60
|
taken: {
|
|
33
61
|
currency: outputCurrency,
|
|
34
|
-
amount: (0, viem_1.formatUnits)(BigInt(
|
|
62
|
+
amount: (0, viem_1.formatUnits)(BigInt(outputAmount), outputCurrency.decimals),
|
|
35
63
|
direction: 'in',
|
|
36
64
|
},
|
|
37
65
|
timestamp: Number(tradeDto.timestamp),
|
|
38
66
|
txHash: tradeDto.transaction.id,
|
|
67
|
+
logIndex: Number(tradeDto.logIndex),
|
|
68
|
+
bookId: tradeDto.book.id,
|
|
39
69
|
};
|
|
40
70
|
};
|
|
41
71
|
async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
42
72
|
const limit = options?.limit || 50;
|
|
43
73
|
const cursor = options?.cursor;
|
|
44
74
|
let whereClause;
|
|
45
|
-
const baseFilters = [
|
|
75
|
+
const baseFilters = [];
|
|
76
|
+
if (userAddress) {
|
|
77
|
+
baseFilters.push(`{trader: "${userAddress.toLowerCase()}"}`);
|
|
78
|
+
}
|
|
46
79
|
if (cursor) {
|
|
47
80
|
baseFilters.push(`{timestamp_lt: "${cursor}"}`);
|
|
48
81
|
}
|
|
@@ -52,15 +85,15 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
52
85
|
.map((addr) => `{inputToken: "${addr}"}, {outputToken: "${addr}"}`)
|
|
53
86
|
.join(', ');
|
|
54
87
|
baseFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
55
|
-
|
|
88
|
+
}
|
|
89
|
+
if (baseFilters.length === 0) {
|
|
90
|
+
whereClause = '{}';
|
|
91
|
+
}
|
|
92
|
+
else if (baseFilters.length === 1) {
|
|
93
|
+
whereClause = baseFilters[0];
|
|
56
94
|
}
|
|
57
95
|
else {
|
|
58
|
-
|
|
59
|
-
whereClause = `{and: [${baseFilters.join(', ')}]}`;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
whereClause = baseFilters[0];
|
|
63
|
-
}
|
|
96
|
+
whereClause = `{and: [${baseFilters.join(', ')}]}`;
|
|
64
97
|
}
|
|
65
98
|
const fetchLimit = limit + 1;
|
|
66
99
|
const query = `
|
|
@@ -73,6 +106,7 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
73
106
|
) {
|
|
74
107
|
id
|
|
75
108
|
timestamp
|
|
109
|
+
logIndex
|
|
76
110
|
transaction { id }
|
|
77
111
|
book {
|
|
78
112
|
id
|
|
@@ -86,7 +120,7 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
86
120
|
amountUSD
|
|
87
121
|
type
|
|
88
122
|
}
|
|
89
|
-
|
|
123
|
+
claims(
|
|
90
124
|
where: ${whereClause}
|
|
91
125
|
orderBy: timestamp
|
|
92
126
|
orderDirection: desc
|
|
@@ -94,23 +128,33 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
94
128
|
) {
|
|
95
129
|
id
|
|
96
130
|
timestamp
|
|
131
|
+
logIndex
|
|
97
132
|
transaction { id }
|
|
98
133
|
book {
|
|
99
134
|
id
|
|
100
135
|
quote { id name symbol decimals }
|
|
101
136
|
base { id name symbol decimals }
|
|
102
137
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
138
|
+
quote { id name symbol decimals }
|
|
139
|
+
base { id name symbol decimals }
|
|
140
|
+
trader
|
|
141
|
+
tick
|
|
142
|
+
claimedBaseAmount
|
|
143
|
+
claimedQuoteAmount
|
|
144
|
+
claimedAmountUSD
|
|
108
145
|
type
|
|
109
146
|
}
|
|
110
147
|
}
|
|
111
148
|
`;
|
|
112
|
-
const
|
|
113
|
-
|
|
149
|
+
const response = await subgraph_1.Subgraph.get(chainId, 'getTradeHistory', query, {});
|
|
150
|
+
if (response.errors) {
|
|
151
|
+
throw new Error(`Subgraph query failed: ${response.errors.map((e) => e.message).join(', ')}`);
|
|
152
|
+
}
|
|
153
|
+
if (!response.data) {
|
|
154
|
+
throw new Error('Subgraph returned no data');
|
|
155
|
+
}
|
|
156
|
+
const { takes, claims } = response.data;
|
|
157
|
+
const allTrades = [...takes, ...claims].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
|
|
114
158
|
const hasNextPage = allTrades.length > limit;
|
|
115
159
|
const trades = allTrades.slice(0, limit);
|
|
116
160
|
const endCursor = trades.length > 0 ? trades[trades.length - 1].timestamp : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":";;;AAAA,+BAA+D;AAG/D,wEAAqE;AACrE,4DAA2D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade-history.js","sourceRoot":"","sources":["../../../src/views/trade-history.ts"],"names":[],"mappings":";;;AAEA,iDAAuE;
|
|
1
|
+
{"version":3,"file":"trade-history.js","sourceRoot":"","sources":["../../../src/views/trade-history.ts"],"names":[],"mappings":";;;AAEA,iDAAuE;AAsChE,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,EACL,MAAM,GAOP,EAA+B,EAAE;IAChC,OAAO,IAAA,oCAA6B,EAAC,OAAO,EAAE,WAAW,EAAE;QACzD,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,KAAK;QACL,MAAM;KACP,CAAC,CAAC;AACL,CAAC,CAAC;AAlBW,QAAA,eAAe,mBAkB1B"}
|
|
@@ -8,8 +8,42 @@ const toCurrency = (currencyDto) => ({
|
|
|
8
8
|
decimals: Number(currencyDto.decimals),
|
|
9
9
|
});
|
|
10
10
|
const toTrade = (chainId, tradeDto) => {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
let inputCurrency;
|
|
12
|
+
let outputCurrency;
|
|
13
|
+
let inputAmount;
|
|
14
|
+
let outputAmount;
|
|
15
|
+
let usdAmount;
|
|
16
|
+
// Check if it's a Take or a Claim
|
|
17
|
+
if ('inputToken' in tradeDto) {
|
|
18
|
+
// Take entity
|
|
19
|
+
inputCurrency = toCurrency(tradeDto.inputToken);
|
|
20
|
+
outputCurrency = toCurrency(tradeDto.outputToken);
|
|
21
|
+
inputAmount = tradeDto.inputAmount;
|
|
22
|
+
outputAmount = tradeDto.outputAmount;
|
|
23
|
+
usdAmount = tradeDto.amountUSD;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Claim entity
|
|
27
|
+
// For claims: tick < 0 means bid (buy), tick >= 0 means ask (sell)
|
|
28
|
+
const isBid = BigInt(tradeDto.tick) < 0n;
|
|
29
|
+
const quote = toCurrency(tradeDto.quote);
|
|
30
|
+
const base = toCurrency(tradeDto.base);
|
|
31
|
+
if (isBid) {
|
|
32
|
+
// Bid order claim: spent quote, received base
|
|
33
|
+
inputCurrency = quote;
|
|
34
|
+
outputCurrency = base;
|
|
35
|
+
inputAmount = tradeDto.claimedQuoteAmount;
|
|
36
|
+
outputAmount = tradeDto.claimedBaseAmount;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Ask order claim: spent base, received quote
|
|
40
|
+
inputCurrency = base;
|
|
41
|
+
outputCurrency = quote;
|
|
42
|
+
inputAmount = tradeDto.claimedBaseAmount;
|
|
43
|
+
outputAmount = tradeDto.claimedQuoteAmount;
|
|
44
|
+
}
|
|
45
|
+
usdAmount = tradeDto.claimedAmountUSD;
|
|
46
|
+
}
|
|
13
47
|
const quote = toCurrency(tradeDto.book.quote);
|
|
14
48
|
const base = toCurrency(tradeDto.book.base);
|
|
15
49
|
// Determine the market's quote token
|
|
@@ -24,25 +58,27 @@ const toTrade = (chainId, tradeDto) => {
|
|
|
24
58
|
return {
|
|
25
59
|
id: tradeDto.id,
|
|
26
60
|
type: isBuy ? 'buy' : 'sell',
|
|
27
|
-
usdAmount
|
|
61
|
+
usdAmount,
|
|
28
62
|
spent: {
|
|
29
63
|
currency: inputCurrency,
|
|
30
|
-
amount: formatUnits(BigInt(
|
|
64
|
+
amount: formatUnits(BigInt(inputAmount), inputCurrency.decimals),
|
|
31
65
|
direction: 'out',
|
|
32
66
|
},
|
|
33
67
|
taken: {
|
|
34
68
|
currency: outputCurrency,
|
|
35
|
-
amount: formatUnits(BigInt(
|
|
69
|
+
amount: formatUnits(BigInt(outputAmount), outputCurrency.decimals),
|
|
36
70
|
direction: 'in',
|
|
37
71
|
},
|
|
38
72
|
timestamp: Number(tradeDto.timestamp),
|
|
39
73
|
txHash: tradeDto.transaction.id,
|
|
74
|
+
logIndex: Number(tradeDto.logIndex),
|
|
75
|
+
bookId: tradeDto.book.id,
|
|
40
76
|
};
|
|
41
77
|
};
|
|
42
78
|
/**
|
|
43
|
-
* Fetch trade history
|
|
79
|
+
* Fetch trade history from the subgraph
|
|
44
80
|
* @param chainId - chain id from {@link CHAIN_IDS}
|
|
45
|
-
* @param userAddress - The Ethereum address of the user
|
|
81
|
+
* @param userAddress - Optional. The Ethereum address of the user. If provided, only returns trades for this user.
|
|
46
82
|
* @param options - Optional parameters for filtering and pagination
|
|
47
83
|
* @returns Trade history with pagination info
|
|
48
84
|
*/
|
|
@@ -51,7 +87,10 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
51
87
|
const cursor = options?.cursor;
|
|
52
88
|
// Build the where clause
|
|
53
89
|
let whereClause;
|
|
54
|
-
const baseFilters = [
|
|
90
|
+
const baseFilters = [];
|
|
91
|
+
if (userAddress) {
|
|
92
|
+
baseFilters.push(`{trader: "${userAddress.toLowerCase()}"}`);
|
|
93
|
+
}
|
|
55
94
|
if (cursor) {
|
|
56
95
|
baseFilters.push(`{timestamp_lt: "${cursor}"}`);
|
|
57
96
|
}
|
|
@@ -63,18 +102,18 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
63
102
|
.join(', ');
|
|
64
103
|
// Combine base filters with token filter using 'and'
|
|
65
104
|
baseFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
66
|
-
|
|
105
|
+
}
|
|
106
|
+
// Build the final where clause
|
|
107
|
+
if (baseFilters.length === 0) {
|
|
108
|
+
whereClause = '{}';
|
|
109
|
+
}
|
|
110
|
+
else if (baseFilters.length === 1) {
|
|
111
|
+
whereClause = baseFilters[0];
|
|
67
112
|
}
|
|
68
113
|
else {
|
|
69
|
-
|
|
70
|
-
if (baseFilters.length > 1) {
|
|
71
|
-
whereClause = `{and: [${baseFilters.join(', ')}]}`;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
whereClause = baseFilters[0];
|
|
75
|
-
}
|
|
114
|
+
whereClause = `{and: [${baseFilters.join(', ')}]}`;
|
|
76
115
|
}
|
|
77
|
-
// Query both takes and
|
|
116
|
+
// Query both takes and claims
|
|
78
117
|
// Note: We need to fetch more than limit to properly sort and paginate
|
|
79
118
|
const fetchLimit = limit + 1; // Fetch one extra to determine hasNextPage
|
|
80
119
|
const query = `
|
|
@@ -87,6 +126,7 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
87
126
|
) {
|
|
88
127
|
id
|
|
89
128
|
timestamp
|
|
129
|
+
logIndex
|
|
90
130
|
transaction { id }
|
|
91
131
|
book {
|
|
92
132
|
id
|
|
@@ -100,7 +140,7 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
100
140
|
amountUSD
|
|
101
141
|
type
|
|
102
142
|
}
|
|
103
|
-
|
|
143
|
+
claims(
|
|
104
144
|
where: ${whereClause}
|
|
105
145
|
orderBy: timestamp
|
|
106
146
|
orderDirection: desc
|
|
@@ -108,24 +148,34 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
108
148
|
) {
|
|
109
149
|
id
|
|
110
150
|
timestamp
|
|
151
|
+
logIndex
|
|
111
152
|
transaction { id }
|
|
112
153
|
book {
|
|
113
154
|
id
|
|
114
155
|
quote { id name symbol decimals }
|
|
115
156
|
base { id name symbol decimals }
|
|
116
157
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
158
|
+
quote { id name symbol decimals }
|
|
159
|
+
base { id name symbol decimals }
|
|
160
|
+
trader
|
|
161
|
+
tick
|
|
162
|
+
claimedBaseAmount
|
|
163
|
+
claimedQuoteAmount
|
|
164
|
+
claimedAmountUSD
|
|
122
165
|
type
|
|
123
166
|
}
|
|
124
167
|
}
|
|
125
168
|
`;
|
|
126
|
-
const
|
|
169
|
+
const response = await Subgraph.get(chainId, 'getTradeHistory', query, {});
|
|
170
|
+
if (response.errors) {
|
|
171
|
+
throw new Error(`Subgraph query failed: ${response.errors.map((e) => e.message).join(', ')}`);
|
|
172
|
+
}
|
|
173
|
+
if (!response.data) {
|
|
174
|
+
throw new Error('Subgraph returned no data');
|
|
175
|
+
}
|
|
176
|
+
const { takes, claims } = response.data;
|
|
127
177
|
// Combine and sort all trades by timestamp (most recent first)
|
|
128
|
-
const allTrades = [...takes, ...
|
|
178
|
+
const allTrades = [...takes, ...claims].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
|
|
129
179
|
// Apply pagination
|
|
130
180
|
const hasNextPage = allTrades.length > limit;
|
|
131
181
|
const trades = allTrades.slice(0, limit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { fetchTradeHistoryFromSubgraph } from '../entities/trade/apis';
|
|
2
2
|
/**
|
|
3
|
-
* Retrieves trade history
|
|
3
|
+
* Retrieves trade history on the given chain.
|
|
4
4
|
*
|
|
5
5
|
* @param {CHAIN_IDS} chainId The chain ID.
|
|
6
|
-
* @param {`0x${string}`} userAddress The Ethereum address of the user.
|
|
6
|
+
* @param {`0x${string}`} userAddress Optional. The Ethereum address of the user. If provided, only returns trades for this user.
|
|
7
7
|
* @param {`0x${string}`[]} tokenAddresses Optional. Filter trades where any of these addresses is either input or output token. If empty array or undefined, no filtering is applied.
|
|
8
8
|
* @param {number} limit Optional. Maximum number of trades to return per page (default: 50).
|
|
9
9
|
* @param {string} cursor Optional. Pagination cursor (timestamp) to fetch trades older than this cursor.
|
|
@@ -29,6 +29,11 @@ import { fetchTradeHistoryFromSubgraph } from '../entities/trade/apis';
|
|
|
29
29
|
* userAddress: '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49',
|
|
30
30
|
* tokenAddresses: ['0x036CbD53842c5426634e7929541eC2318f3dCF7e']
|
|
31
31
|
* })
|
|
32
|
+
*
|
|
33
|
+
* // Get all trades (no user filter)
|
|
34
|
+
* const allTrades = await getTradeHistory({
|
|
35
|
+
* chainId: 421614
|
|
36
|
+
* })
|
|
32
37
|
*/
|
|
33
38
|
export const getTradeHistory = async ({ chainId, userAddress, tokenAddresses, limit, cursor, }) => {
|
|
34
39
|
return fetchTradeHistoryFromSubgraph(chainId, userAddress, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade-history.js","sourceRoot":"","sources":["../../../src/views/trade-history.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAEvE
|
|
1
|
+
{"version":3,"file":"trade-history.js","sourceRoot":"","sources":["../../../src/views/trade-history.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,EACL,MAAM,GAOP,EAA+B,EAAE;IAChC,OAAO,6BAA6B,CAAC,OAAO,EAAE,WAAW,EAAE;QACzD,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,KAAK;QACL,MAAM;KACP,CAAC,CAAC;AACL,CAAC,CAAC"}
|