@1stdex/first-sdk 1.0.64 → 1.0.66

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.
Files changed (40) hide show
  1. package/dist/cjs/constants/chain-configs/subgraph.js +2 -2
  2. package/dist/cjs/constants/chain-configs/subgraph.js.map +1 -1
  3. package/dist/cjs/entities/trade/apis/index.js +126 -0
  4. package/dist/cjs/entities/trade/apis/index.js.map +1 -0
  5. package/dist/cjs/entities/trade/types.js +3 -0
  6. package/dist/cjs/entities/trade/types.js.map +1 -0
  7. package/dist/cjs/types/index.js.map +1 -1
  8. package/dist/cjs/views/index.js +5 -1
  9. package/dist/cjs/views/index.js.map +1 -1
  10. package/dist/cjs/views/trade-history.js +13 -0
  11. package/dist/cjs/views/trade-history.js.map +1 -0
  12. package/dist/cjs/views/user-volume.js +15 -0
  13. package/dist/cjs/views/user-volume.js.map +1 -0
  14. package/dist/esm/constants/chain-configs/subgraph.js +2 -2
  15. package/dist/esm/constants/chain-configs/subgraph.js.map +1 -1
  16. package/dist/esm/entities/trade/apis/index.js +141 -0
  17. package/dist/esm/entities/trade/apis/index.js.map +1 -0
  18. package/dist/esm/entities/trade/types.js +2 -0
  19. package/dist/esm/entities/trade/types.js.map +1 -0
  20. package/dist/esm/types/index.js.map +1 -1
  21. package/dist/esm/views/index.js +2 -0
  22. package/dist/esm/views/index.js.map +1 -1
  23. package/dist/esm/views/trade-history.js +40 -0
  24. package/dist/esm/views/trade-history.js.map +1 -0
  25. package/dist/esm/views/user-volume.js +26 -0
  26. package/dist/esm/views/user-volume.js.map +1 -0
  27. package/dist/tsconfig.build.tsbuildinfo +1 -1
  28. package/dist/types/entities/trade/apis/index.d.ts +15 -0
  29. package/dist/types/entities/trade/apis/index.d.ts.map +1 -0
  30. package/dist/types/entities/trade/types.d.ts +18 -0
  31. package/dist/types/entities/trade/types.d.ts.map +1 -0
  32. package/dist/types/types/index.d.ts +1 -0
  33. package/dist/types/types/index.d.ts.map +1 -1
  34. package/dist/types/views/index.d.ts +2 -0
  35. package/dist/types/views/index.d.ts.map +1 -1
  36. package/dist/types/views/trade-history.d.ts +41 -0
  37. package/dist/types/views/trade-history.d.ts.map +1 -0
  38. package/dist/types/views/user-volume.d.ts +21 -0
  39. package/dist/types/views/user-volume.d.ts.map +1 -0
  40. package/package.json +1 -1
@@ -5,7 +5,7 @@ const axios_1 = require("axios");
5
5
  const chain_1 = require("./chain");
6
6
  exports.SUBGRAPH_URL = {
7
7
  [chain_1.CHAIN_IDS.BASE_SEPOLIA]: 'https://subgraph.satsuma-prod.com/f890d39dbfc0/spring--767127/1st-dex-base-sepolia/api',
8
- [chain_1.CHAIN_IDS.BASE]: 'https://subgraph.satsuma-prod.com/5d5a9de0d1cc/spring--767127/1st-dex-base-mainnet/api',
8
+ [chain_1.CHAIN_IDS.BASE]: 'https://subgraph.satsuma-prod.com/f890d39dbfc0/spring--767127/1st-dex-base-mainnet/version/130a014/api',
9
9
  [chain_1.CHAIN_IDS.ARBITRUM_SEPOLIA]: 'https://subgraph.satsuma-prod.com/f890d39dbfc0/spring--767127/1st-dex-arbitrum-sepolia/api',
10
10
  [chain_1.CHAIN_IDS.ANVIL]: 'http://localhost:8000/subgraphs/name/first-dex-subgraph',
11
11
  };
@@ -15,7 +15,7 @@ class Subgraph {
15
15
  throw new Error('Unsupported chain for subgraph');
16
16
  }
17
17
  const response = await axios_1.default.post(exports.SUBGRAPH_URL[chainId], { query, variables, operationName }, {
18
- timeout: 5000,
18
+ timeout: 10_000,
19
19
  });
20
20
  if (response.status === 200) {
21
21
  return response.data;
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/constants/chain-configs/subgraph.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAE1B,mCAAoC;AAEvB,QAAA,YAAY,GAAqC;IAC5D,CAAC,iBAAS,CAAC,YAAY,CAAC,EACtB,wFAAwF;IAC1F,CAAC,iBAAS,CAAC,IAAI,CAAC,EACd,wFAAwF;IAC1F,CAAC,iBAAS,CAAC,gBAAgB,CAAC,EAC1B,4FAA4F;IAC9F,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,yDAAyD;CAC7E,CAAC;AAEF,MAAa,QAAQ;IACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CACrB,OAAkB,EAClB,aAAqB,EACrB,KAAa,EACb,SAAa;QAEb,IAAI,CAAC,oBAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,oBAAY,CAAC,OAAO,CAAC,EACrB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,EACnC;YACE,OAAO,EAAE,IAAI;SACd,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAE,QAAQ,CAAC,IAAY,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AAxBD,4BAwBC"}
1
+ {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/constants/chain-configs/subgraph.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAE1B,mCAAoC;AAEvB,QAAA,YAAY,GAAqC;IAC5D,CAAC,iBAAS,CAAC,YAAY,CAAC,EACtB,wFAAwF;IAC1F,CAAC,iBAAS,CAAC,IAAI,CAAC,EACd,wGAAwG;IAC1G,CAAC,iBAAS,CAAC,gBAAgB,CAAC,EAC1B,4FAA4F;IAC9F,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,yDAAyD;CAC7E,CAAC;AAEF,MAAa,QAAQ;IACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CACrB,OAAkB,EAClB,aAAqB,EACrB,KAAa,EACb,SAAa;QAEb,IAAI,CAAC,oBAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,oBAAY,CAAC,OAAO,CAAC,EACrB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,EACnC;YACE,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAE,QAAQ,CAAC,IAAY,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AAxBD,4BAwBC"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchTradeHistoryFromSubgraph = void 0;
4
+ const viem_1 = require("viem");
5
+ const subgraph_1 = require("../../../constants/chain-configs/subgraph");
6
+ const market_id_1 = require("../../market/utils/market-id");
7
+ const toCurrency = (currencyDto) => ({
8
+ address: (0, viem_1.getAddress)(currencyDto.id),
9
+ name: currencyDto.name,
10
+ symbol: currencyDto.symbol,
11
+ decimals: Number(currencyDto.decimals),
12
+ });
13
+ const toTrade = (chainId, tradeDto) => {
14
+ const inputCurrency = toCurrency(tradeDto.inputToken);
15
+ const outputCurrency = toCurrency(tradeDto.outputToken);
16
+ const quote = toCurrency(tradeDto.book.quote);
17
+ const base = toCurrency(tradeDto.book.base);
18
+ const { quoteTokenAddress } = (0, market_id_1.getMarketId)(chainId, [
19
+ base.address,
20
+ quote.address,
21
+ ]);
22
+ const isBuy = (0, viem_1.isAddressEqual)(inputCurrency.address, quoteTokenAddress);
23
+ return {
24
+ id: tradeDto.id,
25
+ type: isBuy ? 'buy' : 'sell',
26
+ usdAmount: tradeDto.amountUSD,
27
+ spent: {
28
+ currency: inputCurrency,
29
+ amount: (0, viem_1.formatUnits)(BigInt(tradeDto.inputAmount), inputCurrency.decimals),
30
+ direction: 'out',
31
+ },
32
+ taken: {
33
+ currency: outputCurrency,
34
+ amount: (0, viem_1.formatUnits)(BigInt(tradeDto.outputAmount), outputCurrency.decimals),
35
+ direction: 'in',
36
+ },
37
+ timestamp: Number(tradeDto.timestamp),
38
+ txHash: tradeDto.transaction.id,
39
+ };
40
+ };
41
+ async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
42
+ const limit = options?.limit || 50;
43
+ const cursor = options?.cursor;
44
+ let whereClause;
45
+ const baseFilters = [`{trader: "${userAddress.toLowerCase()}"}`];
46
+ if (cursor) {
47
+ baseFilters.push(`{timestamp_lt: "${cursor}"}`);
48
+ }
49
+ if (options?.tokenAddresses && options.tokenAddresses.length > 0) {
50
+ const lowercaseTokens = options.tokenAddresses.map((addr) => addr.toLowerCase());
51
+ const tokenFilterConditions = lowercaseTokens
52
+ .map((addr) => `{inputToken: "${addr}"}, {outputToken: "${addr}"}`)
53
+ .join(', ');
54
+ baseFilters.push(`{or: [${tokenFilterConditions}]}`);
55
+ whereClause = `{and: [${baseFilters.join(', ')}]}`;
56
+ }
57
+ else {
58
+ if (baseFilters.length > 1) {
59
+ whereClause = `{and: [${baseFilters.join(', ')}]}`;
60
+ }
61
+ else {
62
+ whereClause = baseFilters[0];
63
+ }
64
+ }
65
+ const fetchLimit = limit + 1;
66
+ const query = `
67
+ query getTradeHistory {
68
+ takes(
69
+ where: ${whereClause}
70
+ orderBy: timestamp
71
+ orderDirection: desc
72
+ first: ${fetchLimit}
73
+ ) {
74
+ id
75
+ timestamp
76
+ transaction { id }
77
+ book {
78
+ id
79
+ quote { id name symbol decimals }
80
+ base { id name symbol decimals }
81
+ }
82
+ inputToken { id name symbol decimals }
83
+ outputToken { id name symbol decimals }
84
+ inputAmount
85
+ outputAmount
86
+ amountUSD
87
+ type
88
+ }
89
+ makerFills(
90
+ where: ${whereClause}
91
+ orderBy: timestamp
92
+ orderDirection: desc
93
+ first: ${fetchLimit}
94
+ ) {
95
+ id
96
+ timestamp
97
+ transaction { id }
98
+ book {
99
+ id
100
+ quote { id name symbol decimals }
101
+ base { id name symbol decimals }
102
+ }
103
+ inputToken { id name symbol decimals }
104
+ outputToken { id name symbol decimals }
105
+ inputAmount
106
+ outputAmount
107
+ amountUSD
108
+ type
109
+ }
110
+ }
111
+ `;
112
+ const { data: { takes, makerFills }, } = await subgraph_1.Subgraph.get(chainId, 'getTradeHistory', query, {});
113
+ const allTrades = [...takes, ...makerFills].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
114
+ const hasNextPage = allTrades.length > limit;
115
+ const trades = allTrades.slice(0, limit);
116
+ const endCursor = trades.length > 0 ? trades[trades.length - 1].timestamp : null;
117
+ return {
118
+ trades: trades.map((trade) => toTrade(chainId, trade)),
119
+ pageInfo: {
120
+ hasNextPage,
121
+ endCursor,
122
+ },
123
+ };
124
+ }
125
+ exports.fetchTradeHistoryFromSubgraph = fetchTradeHistoryFromSubgraph;
126
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/entities/trade/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,0DAA6D;AAApD,kGAAA,SAAS,OAAA;AAgClB,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC7B,uCAAgB,CAAA;IAChB,0CAAmB,CAAA;IACnB,yCAAkB,CAAA;IAClB,yCAAkB,CAAA;IAClB,6CAAsB,CAAA;IACtB,4CAAqB,CAAA;IACrB,qCAAc,CAAA;IACd,sCAAe,CAAA;IACf,uCAAgB,CAAA;IAChB,sCAAe,CAAA;IACf,oCAAa,CAAA;IACb,qCAAc,CAAA;AAChB,CAAC,EAbW,mBAAmB,mCAAnB,mBAAmB,QAa9B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,0DAA6D;AAApD,kGAAA,SAAS,OAAA;AAiClB,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC7B,uCAAgB,CAAA;IAChB,0CAAmB,CAAA;IACnB,yCAAkB,CAAA;IAClB,yCAAkB,CAAA;IAClB,6CAAsB,CAAA;IACtB,4CAAqB,CAAA;IACrB,qCAAc,CAAA;IACd,sCAAe,CAAA;IACf,uCAAgB,CAAA;IAChB,sCAAe,CAAA;IACf,oCAAa,CAAA;IACb,qCAAc,CAAA;AAChB,CAAC,EAbW,mBAAmB,mCAAnB,mBAAmB,QAa9B"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOrderPositionValue = exports.getBookPositionValue = exports.getOrderSetupStatus = exports.needsVaultDeposit = exports.checkTokenAllowances = exports.getAllBalances = exports.getPortfolioBalance = exports.getTradingBalance = exports.getVault = exports.getReferralSummary = exports.getUserNativeVolume = exports.getTopUsersByNativeVolume = exports.getUserDailyVolumes = exports.getProtocolAnalytics = exports.getLatestPrice = exports.getDailyClosePriceMap = exports.getLatestPriceMap = exports.getStableCurrencies = exports.getCurrencies = exports.getContractAddresses = exports.getSubgraphBlock = exports.getSubgraphBlockNumber = exports.getSubgraphEndpoint = exports.getClaimableOrders = exports.getCancelableOrders = exports.getOpenOrders = exports.getOpenOrder = exports.getPriceNeighborhood = exports.getMakeOrderResult = exports.getLimitOrderResult = exports.parseMakeOrderIdsFromReceipt = exports.getQuoteToken = exports.getMarketSnapshot = exports.getMarketSnapshots = exports.getExpectedInput = exports.getExpectedOutput = exports.getLatestChartLog = exports.getChartLogs = exports.getMarket = void 0;
3
+ exports.getUserVolumeUSD = exports.getTradeHistory = exports.getOrderPositionValue = exports.getBookPositionValue = exports.getOrderSetupStatus = exports.needsVaultDeposit = exports.checkTokenAllowances = exports.getAllBalances = exports.getPortfolioBalance = exports.getTradingBalance = exports.getVault = exports.getReferralSummary = exports.getUserNativeVolume = exports.getTopUsersByNativeVolume = exports.getUserDailyVolumes = exports.getProtocolAnalytics = exports.getLatestPrice = exports.getDailyClosePriceMap = exports.getLatestPriceMap = exports.getStableCurrencies = exports.getCurrencies = exports.getContractAddresses = exports.getSubgraphBlock = exports.getSubgraphBlockNumber = exports.getSubgraphEndpoint = exports.getClaimableOrders = exports.getCancelableOrders = exports.getOpenOrders = exports.getOpenOrder = exports.getPriceNeighborhood = exports.getMakeOrderResult = exports.getLimitOrderResult = exports.parseMakeOrderIdsFromReceipt = exports.getQuoteToken = exports.getMarketSnapshot = exports.getMarketSnapshots = exports.getExpectedInput = exports.getExpectedOutput = exports.getLatestChartLog = exports.getChartLogs = exports.getMarket = void 0;
4
4
  var market_1 = require("./market");
5
5
  Object.defineProperty(exports, "getMarket", { enumerable: true, get: function () { return market_1.getMarket; } });
6
6
  Object.defineProperty(exports, "getChartLogs", { enumerable: true, get: function () { return market_1.getChartLogs; } });
@@ -52,4 +52,8 @@ var book_1 = require("./book");
52
52
  Object.defineProperty(exports, "getBookPositionValue", { enumerable: true, get: function () { return book_1.getBookPositionValue; } });
53
53
  var order_1 = require("./order");
54
54
  Object.defineProperty(exports, "getOrderPositionValue", { enumerable: true, get: function () { return order_1.getOrderPositionValue; } });
55
+ var trade_history_1 = require("./trade-history");
56
+ Object.defineProperty(exports, "getTradeHistory", { enumerable: true, get: function () { return trade_history_1.getTradeHistory; } });
57
+ var user_volume_1 = require("./user-volume");
58
+ Object.defineProperty(exports, "getUserVolumeUSD", { enumerable: true, get: function () { return user_volume_1.getUserVolumeUSD; } });
55
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/index.ts"],"names":[],"mappings":";;;AAAA,mCAYkB;AAXhB,mGAAA,SAAS,OAAA;AACT,sGAAA,YAAY,OAAA;AACZ,2GAAA,iBAAiB,OAAA;AACjB,2GAAA,iBAAiB,OAAA;AACjB,0GAAA,gBAAgB,OAAA;AAChB,4GAAA,kBAAkB,OAAA;AAClB,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AACb,sHAAA,4BAA4B,OAAA;AAC5B,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAGpB,+BAA8C;AAArC,4GAAA,oBAAoB,OAAA;AAC7B,2CAKsB;AAJpB,0GAAA,YAAY,OAAA;AACZ,2GAAA,aAAa,OAAA;AACb,iHAAA,mBAAmB,OAAA;AACnB,gHAAA,kBAAkB,OAAA;AAEpB,uCAIoB;AAHlB,+GAAA,mBAAmB,OAAA;AACnB,kHAAA,sBAAsB,OAAA;AACtB,4GAAA,gBAAgB,OAAA;AAElB,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAC7B,uCAMoB;AALlB,yGAAA,aAAa,OAAA;AACb,+GAAA,mBAAmB,OAAA;AACnB,6GAAA,iBAAiB,OAAA;AACjB,iHAAA,qBAAqB,OAAA;AACrB,0GAAA,cAAc,OAAA;AAEhB,yCAMqB;AALnB,iHAAA,oBAAoB,OAAA;AACpB,gHAAA,mBAAmB,OAAA;AACnB,sHAAA,yBAAyB,OAAA;AACzB,gHAAA,mBAAmB,OAAA;AACnB,+GAAA,kBAAkB,OAAA;AAEpB,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,qCAImB;AAHjB,4GAAA,iBAAiB,OAAA;AACjB,8GAAA,mBAAmB,OAAA;AACnB,yGAAA,cAAc,OAAA;AAEhB,iCAIiB;AAHf,6GAAA,oBAAoB,OAAA;AACpB,0GAAA,iBAAiB,OAAA;AACjB,4GAAA,mBAAmB,OAAA;AAErB,+BAA8C;AAArC,4GAAA,oBAAoB,OAAA;AAC7B,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/index.ts"],"names":[],"mappings":";;;AAAA,mCAYkB;AAXhB,mGAAA,SAAS,OAAA;AACT,sGAAA,YAAY,OAAA;AACZ,2GAAA,iBAAiB,OAAA;AACjB,2GAAA,iBAAiB,OAAA;AACjB,0GAAA,gBAAgB,OAAA;AAChB,4GAAA,kBAAkB,OAAA;AAClB,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AACb,sHAAA,4BAA4B,OAAA;AAC5B,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAGpB,+BAA8C;AAArC,4GAAA,oBAAoB,OAAA;AAC7B,2CAKsB;AAJpB,0GAAA,YAAY,OAAA;AACZ,2GAAA,aAAa,OAAA;AACb,iHAAA,mBAAmB,OAAA;AACnB,gHAAA,kBAAkB,OAAA;AAEpB,uCAIoB;AAHlB,+GAAA,mBAAmB,OAAA;AACnB,kHAAA,sBAAsB,OAAA;AACtB,4GAAA,gBAAgB,OAAA;AAElB,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAC7B,uCAMoB;AALlB,yGAAA,aAAa,OAAA;AACb,+GAAA,mBAAmB,OAAA;AACnB,6GAAA,iBAAiB,OAAA;AACjB,iHAAA,qBAAqB,OAAA;AACrB,0GAAA,cAAc,OAAA;AAEhB,yCAMqB;AALnB,iHAAA,oBAAoB,OAAA;AACpB,gHAAA,mBAAmB,OAAA;AACnB,sHAAA,yBAAyB,OAAA;AACzB,gHAAA,mBAAmB,OAAA;AACnB,+GAAA,kBAAkB,OAAA;AAEpB,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,qCAImB;AAHjB,4GAAA,iBAAiB,OAAA;AACjB,8GAAA,mBAAmB,OAAA;AACnB,yGAAA,cAAc,OAAA;AAEhB,iCAIiB;AAHf,6GAAA,oBAAoB,OAAA;AACpB,0GAAA,iBAAiB,OAAA;AACjB,4GAAA,mBAAmB,OAAA;AAErB,+BAA8C;AAArC,4GAAA,oBAAoB,OAAA;AAC7B,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA;AAC9B,iDAAkD;AAAzC,gHAAA,eAAe,OAAA;AACxB,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTradeHistory = void 0;
4
+ const apis_1 = require("../entities/trade/apis");
5
+ const getTradeHistory = async ({ chainId, userAddress, tokenAddresses, limit, cursor, }) => {
6
+ return (0, apis_1.fetchTradeHistoryFromSubgraph)(chainId, userAddress, {
7
+ tokenAddresses: tokenAddresses || [],
8
+ limit,
9
+ cursor,
10
+ });
11
+ };
12
+ exports.getTradeHistory = getTradeHistory;
13
+ //# sourceMappingURL=trade-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade-history.js","sourceRoot":"","sources":["../../../src/views/trade-history.ts"],"names":[],"mappings":";;;AAEA,iDAAuE;AAiChE,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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUserVolumeUSD = void 0;
4
+ const subgraph_1 = require("../constants/chain-configs/subgraph");
5
+ const getUserVolumeUSD = async ({ chainId, userAddress, }) => {
6
+ const { data: { user }, } = await subgraph_1.Subgraph.get(chainId, 'getUserVolume', 'query getUserVolume($userId: ID!) { user(id: $userId) { id volumeUSD nativeVolume firstSeenTimestamp firstSeenBlockNumber } }', {
7
+ userId: userAddress.toLowerCase(),
8
+ });
9
+ if (!user) {
10
+ return '0';
11
+ }
12
+ return user.volumeUSD;
13
+ };
14
+ exports.getUserVolumeUSD = getUserVolumeUSD;
15
+ //# sourceMappingURL=user-volume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-volume.js","sourceRoot":"","sources":["../../../src/views/user-volume.ts"],"names":[],"mappings":";;;AACA,kEAA+D;AAyBxD,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,OAAO,EACP,WAAW,GAIZ,EAAmB,EAAE;IACpB,MAAM,EACJ,IAAI,EAAE,EAAE,IAAI,EAAE,GACf,GAAG,MAAM,mBAAQ,CAAC,GAAG,CAGpB,OAAO,EACP,eAAe,EACf,+HAA+H,EAC/H;QACE,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE;KAClC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC;AACxB,CAAC,CAAC;AAzBW,QAAA,gBAAgB,oBAyB3B"}
@@ -2,7 +2,7 @@ import axios from 'axios';
2
2
  import { CHAIN_IDS } from './chain';
3
3
  export const SUBGRAPH_URL = {
4
4
  [CHAIN_IDS.BASE_SEPOLIA]: 'https://subgraph.satsuma-prod.com/f890d39dbfc0/spring--767127/1st-dex-base-sepolia/api',
5
- [CHAIN_IDS.BASE]: 'https://subgraph.satsuma-prod.com/5d5a9de0d1cc/spring--767127/1st-dex-base-mainnet/api',
5
+ [CHAIN_IDS.BASE]: 'https://subgraph.satsuma-prod.com/f890d39dbfc0/spring--767127/1st-dex-base-mainnet/version/130a014/api',
6
6
  [CHAIN_IDS.ARBITRUM_SEPOLIA]: 'https://subgraph.satsuma-prod.com/f890d39dbfc0/spring--767127/1st-dex-arbitrum-sepolia/api',
7
7
  [CHAIN_IDS.ANVIL]: 'http://localhost:8000/subgraphs/name/first-dex-subgraph',
8
8
  };
@@ -12,7 +12,7 @@ export class Subgraph {
12
12
  throw new Error('Unsupported chain for subgraph');
13
13
  }
14
14
  const response = await axios.post(SUBGRAPH_URL[chainId], { query, variables, operationName }, {
15
- timeout: 5000, // TODO: pass with option
15
+ timeout: 10_000, // TODO: pass with option
16
16
  });
17
17
  if (response.status === 200) {
18
18
  return response.data;
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/constants/chain-configs/subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAqC;IAC5D,CAAC,SAAS,CAAC,YAAY,CAAC,EACtB,wFAAwF;IAC1F,CAAC,SAAS,CAAC,IAAI,CAAC,EACd,wFAAwF;IAC1F,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAC1B,4FAA4F;IAC9F,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,yDAAyD;CAC7E,CAAC;AAEF,MAAM,OAAO,QAAQ;IACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CACrB,OAAkB,EAClB,aAAqB,EACrB,KAAa,EACb,SAAa;QAEb,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,YAAY,CAAC,OAAO,CAAC,EACrB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,EACnC;YACE,OAAO,EAAE,IAAI,EAAE,yBAAyB;SACzC,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAE,QAAQ,CAAC,IAAY,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/constants/chain-configs/subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAqC;IAC5D,CAAC,SAAS,CAAC,YAAY,CAAC,EACtB,wFAAwF;IAC1F,CAAC,SAAS,CAAC,IAAI,CAAC,EACd,wGAAwG;IAC1G,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAC1B,4FAA4F;IAC9F,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,yDAAyD;CAC7E,CAAC;AAEF,MAAM,OAAO,QAAQ;IACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CACrB,OAAkB,EAClB,aAAqB,EACrB,KAAa,EACb,SAAa;QAEb,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,YAAY,CAAC,OAAO,CAAC,EACrB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,EACnC;YACE,OAAO,EAAE,MAAM,EAAE,yBAAyB;SAC3C,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAE,QAAQ,CAAC,IAAY,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,141 @@
1
+ import { formatUnits, getAddress, isAddressEqual } from 'viem';
2
+ import { Subgraph } from '../../../constants/chain-configs/subgraph';
3
+ import { getMarketId } from '../../market/utils/market-id';
4
+ const toCurrency = (currencyDto) => ({
5
+ address: getAddress(currencyDto.id),
6
+ name: currencyDto.name,
7
+ symbol: currencyDto.symbol,
8
+ decimals: Number(currencyDto.decimals),
9
+ });
10
+ const toTrade = (chainId, tradeDto) => {
11
+ const inputCurrency = toCurrency(tradeDto.inputToken);
12
+ const outputCurrency = toCurrency(tradeDto.outputToken);
13
+ const quote = toCurrency(tradeDto.book.quote);
14
+ const base = toCurrency(tradeDto.book.base);
15
+ // Determine the market's quote token
16
+ const { quoteTokenAddress } = getMarketId(chainId, [
17
+ base.address,
18
+ quote.address,
19
+ ]);
20
+ // Determine if this is a buy or sell from the trader's perspective
21
+ // Buy: trader spends quote (USDC), receives base (token)
22
+ // Sell: trader spends base (token), receives quote (USDC)
23
+ const isBuy = isAddressEqual(inputCurrency.address, quoteTokenAddress);
24
+ return {
25
+ id: tradeDto.id,
26
+ type: isBuy ? 'buy' : 'sell',
27
+ usdAmount: tradeDto.amountUSD,
28
+ spent: {
29
+ currency: inputCurrency,
30
+ amount: formatUnits(BigInt(tradeDto.inputAmount), inputCurrency.decimals),
31
+ direction: 'out',
32
+ },
33
+ taken: {
34
+ currency: outputCurrency,
35
+ amount: formatUnits(BigInt(tradeDto.outputAmount), outputCurrency.decimals),
36
+ direction: 'in',
37
+ },
38
+ timestamp: Number(tradeDto.timestamp),
39
+ txHash: tradeDto.transaction.id,
40
+ };
41
+ };
42
+ /**
43
+ * Fetch trade history for a user from the subgraph
44
+ * @param chainId - chain id from {@link CHAIN_IDS}
45
+ * @param userAddress - The Ethereum address of the user
46
+ * @param options - Optional parameters for filtering and pagination
47
+ * @returns Trade history with pagination info
48
+ */
49
+ export async function fetchTradeHistoryFromSubgraph(chainId, userAddress, options) {
50
+ const limit = options?.limit || 50;
51
+ const cursor = options?.cursor;
52
+ // Build the where clause
53
+ let whereClause;
54
+ const baseFilters = [`{trader: "${userAddress.toLowerCase()}"}`];
55
+ if (cursor) {
56
+ baseFilters.push(`{timestamp_lt: "${cursor}"}`);
57
+ }
58
+ // Build token filter if provided
59
+ if (options?.tokenAddresses && options.tokenAddresses.length > 0) {
60
+ const lowercaseTokens = options.tokenAddresses.map((addr) => addr.toLowerCase());
61
+ const tokenFilterConditions = lowercaseTokens
62
+ .map((addr) => `{inputToken: "${addr}"}, {outputToken: "${addr}"}`)
63
+ .join(', ');
64
+ // Combine base filters with token filter using 'and'
65
+ baseFilters.push(`{or: [${tokenFilterConditions}]}`);
66
+ whereClause = `{and: [${baseFilters.join(', ')}]}`;
67
+ }
68
+ else {
69
+ // If no token filter, combine base filters with 'and' if multiple, or use single filter
70
+ if (baseFilters.length > 1) {
71
+ whereClause = `{and: [${baseFilters.join(', ')}]}`;
72
+ }
73
+ else {
74
+ whereClause = baseFilters[0];
75
+ }
76
+ }
77
+ // Query both takes and makerFills
78
+ // Note: We need to fetch more than limit to properly sort and paginate
79
+ const fetchLimit = limit + 1; // Fetch one extra to determine hasNextPage
80
+ const query = `
81
+ query getTradeHistory {
82
+ takes(
83
+ where: ${whereClause}
84
+ orderBy: timestamp
85
+ orderDirection: desc
86
+ first: ${fetchLimit}
87
+ ) {
88
+ id
89
+ timestamp
90
+ transaction { id }
91
+ book {
92
+ id
93
+ quote { id name symbol decimals }
94
+ base { id name symbol decimals }
95
+ }
96
+ inputToken { id name symbol decimals }
97
+ outputToken { id name symbol decimals }
98
+ inputAmount
99
+ outputAmount
100
+ amountUSD
101
+ type
102
+ }
103
+ makerFills(
104
+ where: ${whereClause}
105
+ orderBy: timestamp
106
+ orderDirection: desc
107
+ first: ${fetchLimit}
108
+ ) {
109
+ id
110
+ timestamp
111
+ transaction { id }
112
+ book {
113
+ id
114
+ quote { id name symbol decimals }
115
+ base { id name symbol decimals }
116
+ }
117
+ inputToken { id name symbol decimals }
118
+ outputToken { id name symbol decimals }
119
+ inputAmount
120
+ outputAmount
121
+ amountUSD
122
+ type
123
+ }
124
+ }
125
+ `;
126
+ const { data: { takes, makerFills }, } = await Subgraph.get(chainId, 'getTradeHistory', query, {});
127
+ // Combine and sort all trades by timestamp (most recent first)
128
+ const allTrades = [...takes, ...makerFills].sort((a, b) => Number(b.timestamp) - Number(a.timestamp));
129
+ // Apply pagination
130
+ const hasNextPage = allTrades.length > limit;
131
+ const trades = allTrades.slice(0, limit);
132
+ const endCursor = trades.length > 0 ? trades[trades.length - 1].timestamp : null;
133
+ return {
134
+ trades: trades.map((trade) => toTrade(chainId, trade)),
135
+ pageInfo: {
136
+ hasNextPage,
137
+ endCursor,
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/entities/trade/apis/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/entities/trade/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAgC7D,MAAM,CAAN,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC7B,uCAAgB,CAAA;IAChB,0CAAmB,CAAA;IACnB,yCAAkB,CAAA;IAClB,yCAAkB,CAAA;IAClB,6CAAsB,CAAA;IACtB,4CAAqB,CAAA;IACrB,qCAAc,CAAA;IACd,sCAAe,CAAA;IACf,uCAAgB,CAAA;IAChB,sCAAe,CAAA;IACf,oCAAa,CAAA;IACb,qCAAc,CAAA;AAChB,CAAC,EAbW,mBAAmB,KAAnB,mBAAmB,QAa9B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAiC7D,MAAM,CAAN,IAAY,mBAaX;AAbD,WAAY,mBAAmB;IAC7B,uCAAgB,CAAA;IAChB,0CAAmB,CAAA;IACnB,yCAAkB,CAAA;IAClB,yCAAkB,CAAA;IAClB,6CAAsB,CAAA;IACtB,4CAAqB,CAAA;IACrB,qCAAc,CAAA;IACd,sCAAe,CAAA;IACf,uCAAgB,CAAA;IAChB,sCAAe,CAAA;IACf,oCAAa,CAAA;IACb,qCAAc,CAAA;AAChB,CAAC,EAbW,mBAAmB,KAAnB,mBAAmB,QAa9B"}
@@ -10,4 +10,6 @@ export { getTradingBalance, getPortfolioBalance, getAllBalances, } from './balan
10
10
  export { checkTokenAllowances, needsVaultDeposit, getOrderSetupStatus, } from './setup';
11
11
  export { getBookPositionValue } from './book';
12
12
  export { getOrderPositionValue } from './order';
13
+ export { getTradeHistory } from './trade-history';
14
+ export { getUserVolumeUSD } from './user-volume';
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { fetchTradeHistoryFromSubgraph } from '../entities/trade/apis';
2
+ /**
3
+ * Retrieves trade history for the specified user on the given chain.
4
+ *
5
+ * @param {CHAIN_IDS} chainId The chain ID.
6
+ * @param {`0x${string}`} userAddress The Ethereum address of the user.
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
+ * @param {number} limit Optional. Maximum number of trades to return per page (default: 50).
9
+ * @param {string} cursor Optional. Pagination cursor (timestamp) to fetch trades older than this cursor.
10
+ * @returns {Promise<TradeHistoryResult>} Promise resolving to trade history with pagination metadata.
11
+ * @example
12
+ * import { getTradeHistory } from '@1stdex/first-sdk'
13
+ *
14
+ * const history = await getTradeHistory({
15
+ * chainId: 421614,
16
+ * userAddress: '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49'
17
+ * })
18
+ *
19
+ * // Fetch next page
20
+ * const nextPage = await getTradeHistory({
21
+ * chainId: 421614,
22
+ * userAddress: '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49',
23
+ * cursor: history.pageInfo.endCursor
24
+ * })
25
+ *
26
+ * // Filter by tokens
27
+ * const usdcTrades = await getTradeHistory({
28
+ * chainId: 421614,
29
+ * userAddress: '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49',
30
+ * tokenAddresses: ['0x036CbD53842c5426634e7929541eC2318f3dCF7e']
31
+ * })
32
+ */
33
+ export const getTradeHistory = async ({ chainId, userAddress, tokenAddresses, limit, cursor, }) => {
34
+ return fetchTradeHistoryFromSubgraph(chainId, userAddress, {
35
+ tokenAddresses: tokenAddresses || [],
36
+ limit,
37
+ cursor,
38
+ });
39
+ };
40
+ //# sourceMappingURL=trade-history.js.map
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;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"}
@@ -0,0 +1,26 @@
1
+ import { Subgraph } from '../constants/chain-configs/subgraph';
2
+ /**
3
+ * Retrieves the total volume in USD for a given user address.
4
+ *
5
+ * @param {CHAIN_IDS} chainId The chain ID.
6
+ * @param {`0x${string}`} userAddress The Ethereum address of the user.
7
+ * @returns {Promise<string>} Promise resolving to the user's total volume in USD.
8
+ * @example
9
+ * import { getUserVolumeUSD } from '@1stdex/first-sdk'
10
+ *
11
+ * const volumeUSD = await getUserVolumeUSD({
12
+ * chainId: 421614,
13
+ * userAddress: '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49'
14
+ * })
15
+ * console.log(`User volume: $${volumeUSD}`)
16
+ */
17
+ export const getUserVolumeUSD = async ({ chainId, userAddress, }) => {
18
+ const { data: { user }, } = await Subgraph.get(chainId, 'getUserVolume', 'query getUserVolume($userId: ID!) { user(id: $userId) { id volumeUSD nativeVolume firstSeenTimestamp firstSeenBlockNumber } }', {
19
+ userId: userAddress.toLowerCase(),
20
+ });
21
+ if (!user) {
22
+ return '0';
23
+ }
24
+ return user.volumeUSD;
25
+ };
26
+ //# sourceMappingURL=user-volume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-volume.js","sourceRoot":"","sources":["../../../src/views/user-volume.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAU/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,OAAO,EACP,WAAW,GAIZ,EAAmB,EAAE;IACpB,MAAM,EACJ,IAAI,EAAE,EAAE,IAAI,EAAE,GACf,GAAG,MAAM,QAAQ,CAAC,GAAG,CAGpB,OAAO,EACP,eAAe,EACf,+HAA+H,EAC/H;QACE,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE;KAClC,CACF,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC;AACxB,CAAC,CAAC"}