@1stdex/first-sdk 1.0.77 → 1.0.79
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 +76 -26
- package/dist/cjs/entities/trade/apis/index.js.map +1 -1
- package/dist/esm/entities/trade/apis/index.js +86 -31
- package/dist/esm/entities/trade/apis/index.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/entities/trade/apis/index.d.ts.map +1 -1
- package/dist/types/entities/trade/types.d.ts +1 -0
- package/dist/types/entities/trade/types.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,26 @@ 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,
|
|
39
67
|
logIndex: Number(tradeDto.logIndex),
|
|
68
|
+
bookId: tradeDto.book.id,
|
|
40
69
|
};
|
|
41
70
|
};
|
|
42
71
|
async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
43
72
|
const limit = options?.limit || 50;
|
|
44
73
|
const cursor = options?.cursor;
|
|
45
|
-
let whereClause;
|
|
46
74
|
const baseFilters = [];
|
|
47
75
|
if (userAddress) {
|
|
48
76
|
baseFilters.push(`{trader: "${userAddress.toLowerCase()}"}`);
|
|
@@ -50,27 +78,40 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
50
78
|
if (cursor) {
|
|
51
79
|
baseFilters.push(`{timestamp_lt: "${cursor}"}`);
|
|
52
80
|
}
|
|
81
|
+
const takesFilters = [...baseFilters];
|
|
53
82
|
if (options?.tokenAddresses && options.tokenAddresses.length > 0) {
|
|
54
83
|
const lowercaseTokens = options.tokenAddresses.map((addr) => addr.toLowerCase());
|
|
55
84
|
const tokenFilterConditions = lowercaseTokens
|
|
56
|
-
.
|
|
85
|
+
.flatMap((addr) => [
|
|
86
|
+
`{inputToken: "${addr}"}`,
|
|
87
|
+
`{outputToken: "${addr}"}`,
|
|
88
|
+
])
|
|
57
89
|
.join(', ');
|
|
58
|
-
|
|
90
|
+
takesFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
59
91
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
92
|
+
const takesWhereClause = takesFilters.length === 0
|
|
93
|
+
? '{}'
|
|
94
|
+
: takesFilters.length === 1
|
|
95
|
+
? takesFilters[0]
|
|
96
|
+
: `{and: [${takesFilters.join(', ')}]}`;
|
|
97
|
+
const claimsFilters = [...baseFilters];
|
|
98
|
+
if (options?.tokenAddresses && options.tokenAddresses.length > 0) {
|
|
99
|
+
const lowercaseTokens = options.tokenAddresses.map((addr) => addr.toLowerCase());
|
|
100
|
+
const tokenFilterConditions = lowercaseTokens
|
|
101
|
+
.flatMap((addr) => [`{quote: "${addr}"}`, `{base: "${addr}"}`])
|
|
102
|
+
.join(', ');
|
|
103
|
+
claimsFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
68
104
|
}
|
|
105
|
+
const claimsWhereClause = claimsFilters.length === 0
|
|
106
|
+
? '{}'
|
|
107
|
+
: claimsFilters.length === 1
|
|
108
|
+
? claimsFilters[0]
|
|
109
|
+
: `{and: [${claimsFilters.join(', ')}]}`;
|
|
69
110
|
const fetchLimit = limit + 1;
|
|
70
111
|
const query = `
|
|
71
112
|
query getTradeHistory {
|
|
72
113
|
takes(
|
|
73
|
-
where: ${
|
|
114
|
+
where: ${takesWhereClause}
|
|
74
115
|
orderBy: timestamp
|
|
75
116
|
orderDirection: desc
|
|
76
117
|
first: ${fetchLimit}
|
|
@@ -91,8 +132,8 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
91
132
|
amountUSD
|
|
92
133
|
type
|
|
93
134
|
}
|
|
94
|
-
|
|
95
|
-
where: ${
|
|
135
|
+
claims(
|
|
136
|
+
where: ${claimsWhereClause}
|
|
96
137
|
orderBy: timestamp
|
|
97
138
|
orderDirection: desc
|
|
98
139
|
first: ${fetchLimit}
|
|
@@ -106,17 +147,26 @@ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
|
106
147
|
quote { id name symbol decimals }
|
|
107
148
|
base { id name symbol decimals }
|
|
108
149
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
150
|
+
quote { id name symbol decimals }
|
|
151
|
+
base { id name symbol decimals }
|
|
152
|
+
trader
|
|
153
|
+
tick
|
|
154
|
+
claimedBaseAmount
|
|
155
|
+
claimedQuoteAmount
|
|
156
|
+
claimedAmountUSD
|
|
114
157
|
type
|
|
115
158
|
}
|
|
116
159
|
}
|
|
117
160
|
`;
|
|
118
|
-
const
|
|
119
|
-
|
|
161
|
+
const response = await subgraph_1.Subgraph.get(chainId, 'getTradeHistory', query, {});
|
|
162
|
+
if (response.errors) {
|
|
163
|
+
throw new Error(`Subgraph query failed: ${response.errors.map((e) => e.message).join(', ')}`);
|
|
164
|
+
}
|
|
165
|
+
if (!response.data) {
|
|
166
|
+
throw new Error('Subgraph returned no data');
|
|
167
|
+
}
|
|
168
|
+
const { takes, claims } = response.data;
|
|
169
|
+
const allTrades = [...takes, ...claims].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
|
|
120
170
|
const hasNextPage = allTrades.length > limit;
|
|
121
171
|
const trades = allTrades.slice(0, limit);
|
|
122
172
|
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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"}
|
|
@@ -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,20 +58,21 @@ 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,
|
|
40
74
|
logIndex: Number(tradeDto.logIndex),
|
|
75
|
+
bookId: tradeDto.book.id,
|
|
41
76
|
};
|
|
42
77
|
};
|
|
43
78
|
/**
|
|
@@ -50,8 +85,7 @@ const toTrade = (chainId, tradeDto) => {
|
|
|
50
85
|
export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
|
|
51
86
|
const limit = options?.limit || 50;
|
|
52
87
|
const cursor = options?.cursor;
|
|
53
|
-
// Build
|
|
54
|
-
let whereClause;
|
|
88
|
+
// Build base filters (common to both takes and claims)
|
|
55
89
|
const baseFilters = [];
|
|
56
90
|
if (userAddress) {
|
|
57
91
|
baseFilters.push(`{trader: "${userAddress.toLowerCase()}"}`);
|
|
@@ -59,32 +93,44 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
59
93
|
if (cursor) {
|
|
60
94
|
baseFilters.push(`{timestamp_lt: "${cursor}"}`);
|
|
61
95
|
}
|
|
62
|
-
// Build
|
|
96
|
+
// Build where clause for takes
|
|
97
|
+
const takesFilters = [...baseFilters];
|
|
63
98
|
if (options?.tokenAddresses && options.tokenAddresses.length > 0) {
|
|
64
99
|
const lowercaseTokens = options.tokenAddresses.map((addr) => addr.toLowerCase());
|
|
65
100
|
const tokenFilterConditions = lowercaseTokens
|
|
66
|
-
.
|
|
101
|
+
.flatMap((addr) => [
|
|
102
|
+
`{inputToken: "${addr}"}`,
|
|
103
|
+
`{outputToken: "${addr}"}`,
|
|
104
|
+
])
|
|
67
105
|
.join(', ');
|
|
68
|
-
|
|
69
|
-
baseFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
106
|
+
takesFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
70
107
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
108
|
+
const takesWhereClause = takesFilters.length === 0
|
|
109
|
+
? '{}'
|
|
110
|
+
: takesFilters.length === 1
|
|
111
|
+
? takesFilters[0]
|
|
112
|
+
: `{and: [${takesFilters.join(', ')}]}`;
|
|
113
|
+
// Build where clause for claims (uses quote/base instead of inputToken/outputToken)
|
|
114
|
+
const claimsFilters = [...baseFilters];
|
|
115
|
+
if (options?.tokenAddresses && options.tokenAddresses.length > 0) {
|
|
116
|
+
const lowercaseTokens = options.tokenAddresses.map((addr) => addr.toLowerCase());
|
|
117
|
+
const tokenFilterConditions = lowercaseTokens
|
|
118
|
+
.flatMap((addr) => [`{quote: "${addr}"}`, `{base: "${addr}"}`])
|
|
119
|
+
.join(', ');
|
|
120
|
+
claimsFilters.push(`{or: [${tokenFilterConditions}]}`);
|
|
80
121
|
}
|
|
81
|
-
|
|
122
|
+
const claimsWhereClause = claimsFilters.length === 0
|
|
123
|
+
? '{}'
|
|
124
|
+
: claimsFilters.length === 1
|
|
125
|
+
? claimsFilters[0]
|
|
126
|
+
: `{and: [${claimsFilters.join(', ')}]}`;
|
|
127
|
+
// Query both takes and claims
|
|
82
128
|
// Note: We need to fetch more than limit to properly sort and paginate
|
|
83
129
|
const fetchLimit = limit + 1; // Fetch one extra to determine hasNextPage
|
|
84
130
|
const query = `
|
|
85
131
|
query getTradeHistory {
|
|
86
132
|
takes(
|
|
87
|
-
where: ${
|
|
133
|
+
where: ${takesWhereClause}
|
|
88
134
|
orderBy: timestamp
|
|
89
135
|
orderDirection: desc
|
|
90
136
|
first: ${fetchLimit}
|
|
@@ -105,8 +151,8 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
105
151
|
amountUSD
|
|
106
152
|
type
|
|
107
153
|
}
|
|
108
|
-
|
|
109
|
-
where: ${
|
|
154
|
+
claims(
|
|
155
|
+
where: ${claimsWhereClause}
|
|
110
156
|
orderBy: timestamp
|
|
111
157
|
orderDirection: desc
|
|
112
158
|
first: ${fetchLimit}
|
|
@@ -120,18 +166,27 @@ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, option
|
|
|
120
166
|
quote { id name symbol decimals }
|
|
121
167
|
base { id name symbol decimals }
|
|
122
168
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
169
|
+
quote { id name symbol decimals }
|
|
170
|
+
base { id name symbol decimals }
|
|
171
|
+
trader
|
|
172
|
+
tick
|
|
173
|
+
claimedBaseAmount
|
|
174
|
+
claimedQuoteAmount
|
|
175
|
+
claimedAmountUSD
|
|
128
176
|
type
|
|
129
177
|
}
|
|
130
178
|
}
|
|
131
179
|
`;
|
|
132
|
-
const
|
|
180
|
+
const response = await Subgraph.get(chainId, 'getTradeHistory', query, {});
|
|
181
|
+
if (response.errors) {
|
|
182
|
+
throw new Error(`Subgraph query failed: ${response.errors.map((e) => e.message).join(', ')}`);
|
|
183
|
+
}
|
|
184
|
+
if (!response.data) {
|
|
185
|
+
throw new Error('Subgraph returned no data');
|
|
186
|
+
}
|
|
187
|
+
const { takes, claims } = response.data;
|
|
133
188
|
// Combine and sort all trades by timestamp (most recent first)
|
|
134
|
-
const allTrades = [...takes, ...
|
|
189
|
+
const allTrades = [...takes, ...claims].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
|
|
135
190
|
// Apply pagination
|
|
136
191
|
const hasNextPage = allTrades.length > limit;
|
|
137
192
|
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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"}
|