@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.
@@ -11,8 +11,36 @@ const toCurrency = (currencyDto) => ({
11
11
  decimals: Number(currencyDto.decimals),
12
12
  });
13
13
  const toTrade = (chainId, tradeDto) => {
14
- const inputCurrency = toCurrency(tradeDto.inputToken);
15
- const outputCurrency = toCurrency(tradeDto.outputToken);
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: tradeDto.amountUSD,
54
+ usdAmount,
27
55
  spent: {
28
56
  currency: inputCurrency,
29
- amount: (0, viem_1.formatUnits)(BigInt(tradeDto.inputAmount), inputCurrency.decimals),
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(tradeDto.outputAmount), outputCurrency.decimals),
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
- .map((addr) => `{inputToken: "${addr}"}, {outputToken: "${addr}"}`)
85
+ .flatMap((addr) => [
86
+ `{inputToken: "${addr}"}`,
87
+ `{outputToken: "${addr}"}`,
88
+ ])
57
89
  .join(', ');
58
- baseFilters.push(`{or: [${tokenFilterConditions}]}`);
90
+ takesFilters.push(`{or: [${tokenFilterConditions}]}`);
59
91
  }
60
- if (baseFilters.length === 0) {
61
- whereClause = '{}';
62
- }
63
- else if (baseFilters.length === 1) {
64
- whereClause = baseFilters[0];
65
- }
66
- else {
67
- whereClause = `{and: [${baseFilters.join(', ')}]}`;
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: ${whereClause}
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
- makerFills(
95
- where: ${whereClause}
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
- inputToken { id name symbol decimals }
110
- outputToken { id name symbol decimals }
111
- inputAmount
112
- outputAmount
113
- amountUSD
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 { data: { takes, makerFills }, } = await subgraph_1.Subgraph.get(chainId, 'getTradeHistory', query, {});
119
- const allTrades = [...takes, ...makerFills].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
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":"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"}
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
- const inputCurrency = toCurrency(tradeDto.inputToken);
12
- const outputCurrency = toCurrency(tradeDto.outputToken);
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: tradeDto.amountUSD,
61
+ usdAmount,
28
62
  spent: {
29
63
  currency: inputCurrency,
30
- amount: formatUnits(BigInt(tradeDto.inputAmount), inputCurrency.decimals),
64
+ amount: formatUnits(BigInt(inputAmount), inputCurrency.decimals),
31
65
  direction: 'out',
32
66
  },
33
67
  taken: {
34
68
  currency: outputCurrency,
35
- amount: formatUnits(BigInt(tradeDto.outputAmount), outputCurrency.decimals),
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 the where clause
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 token filter if provided
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
- .map((addr) => `{inputToken: "${addr}"}, {outputToken: "${addr}"}`)
101
+ .flatMap((addr) => [
102
+ `{inputToken: "${addr}"}`,
103
+ `{outputToken: "${addr}"}`,
104
+ ])
67
105
  .join(', ');
68
- // Combine base filters with token filter using 'and'
69
- baseFilters.push(`{or: [${tokenFilterConditions}]}`);
106
+ takesFilters.push(`{or: [${tokenFilterConditions}]}`);
70
107
  }
71
- // Build the final where clause
72
- if (baseFilters.length === 0) {
73
- whereClause = '{}';
74
- }
75
- else if (baseFilters.length === 1) {
76
- whereClause = baseFilters[0];
77
- }
78
- else {
79
- whereClause = `{and: [${baseFilters.join(', ')}]}`;
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
- // Query both takes and makerFills
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: ${whereClause}
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
- makerFills(
109
- where: ${whereClause}
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
- inputToken { id name symbol decimals }
124
- outputToken { id name symbol decimals }
125
- inputAmount
126
- outputAmount
127
- amountUSD
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 { data: { takes, makerFills }, } = await Subgraph.get(chainId, 'getTradeHistory', query, {});
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, ...makerFills].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":"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"}