@1stdex/first-sdk 1.0.65 → 1.0.67
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 +126 -0
- package/dist/cjs/entities/trade/apis/index.js.map +1 -0
- package/dist/cjs/entities/trade/types.js +3 -0
- package/dist/cjs/entities/trade/types.js.map +1 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/views/index.js +5 -1
- package/dist/cjs/views/index.js.map +1 -1
- package/dist/cjs/views/trade-history.js +13 -0
- package/dist/cjs/views/trade-history.js.map +1 -0
- package/dist/cjs/views/user-volume.js +15 -0
- package/dist/cjs/views/user-volume.js.map +1 -0
- package/dist/esm/entities/trade/apis/index.js +141 -0
- package/dist/esm/entities/trade/apis/index.js.map +1 -0
- package/dist/esm/entities/trade/types.js +2 -0
- package/dist/esm/entities/trade/types.js.map +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/views/index.js +2 -0
- package/dist/esm/views/index.js.map +1 -1
- package/dist/esm/views/trade-history.js +40 -0
- package/dist/esm/views/trade-history.js.map +1 -0
- package/dist/esm/views/user-volume.js +26 -0
- package/dist/esm/views/user-volume.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/entities/trade/apis/index.d.ts +15 -0
- package/dist/types/entities/trade/apis/index.d.ts.map +1 -0
- package/dist/types/entities/trade/types.d.ts +18 -0
- package/dist/types/entities/trade/types.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/views/index.d.ts +2 -0
- package/dist/types/views/index.d.ts.map +1 -1
- package/dist/types/views/trade-history.d.ts +41 -0
- package/dist/types/views/trade-history.d.ts.map +1 -0
- package/dist/types/views/user-volume.d.ts +21 -0
- package/dist/types/views/user-volume.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -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":";;;AAAA,+BAA+D;AAG/D,wEAAqE;AACrE,4DAA2D;AAwC3D,MAAM,UAAU,GAAG,CAAC,WAKnB,EAAY,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,IAAA,iBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,MAAM,EAAE,WAAW,CAAC,MAAM;IAC1B,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,OAAkB,EAAE,QAAkB,EAAS,EAAE;IAChE,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAG5C,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,uBAAW,EAAC,OAAO,EAAE;QACjD,IAAI,CAAC,OAAO;QACZ,KAAK,CAAC,OAAO;KACd,CAAC,CAAC;IAKH,MAAM,KAAK,GAAG,IAAA,qBAAc,EAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEvE,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;QAC5B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,KAAK,EAAE;YACL,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,IAAA,kBAAW,EAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC;YACzE,SAAS,EAAE,KAAc;SAC1B;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,IAAA,kBAAW,EACjB,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC7B,cAAc,CAAC,QAAQ,CACxB;YACD,SAAS,EAAE,IAAa;SACzB;QACD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAmB;KACjD,CAAC;AACJ,CAAC,CAAC;AASK,KAAK,UAAU,6BAA6B,CACjD,OAAkB,EAClB,WAA0B,EAC1B,OAIC;IAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAG/B,IAAI,WAAmB,CAAC;IAExB,MAAM,WAAW,GAAa,CAAC,aAAa,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE3E,IAAI,MAAM,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,mBAAmB,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;IAGD,IAAI,OAAO,EAAE,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1D,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;QACF,MAAM,qBAAqB,GAAG,eAAe;aAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,IAAI,sBAAsB,IAAI,IAAI,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAC;QAGd,WAAW,CAAC,IAAI,CAAC,SAAS,qBAAqB,IAAI,CAAC,CAAC;QACrD,WAAW,GAAG,UAAU,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrD,CAAC;SAAM,CAAC;QAEN,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,GAAG,UAAU,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAID,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAG;;;iBAGC,WAAW;;;iBAGX,UAAU;;;;;;;;;;;;;;;;;;iBAkBV,WAAW;;;iBAGX,UAAU;;;;;;;;;;;;;;;;;;GAkBxB,CAAC;IAEF,MAAM,EACJ,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAC5B,GAAG,MAAM,mBAAQ,CAAC,GAAG,CAEnB,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAG1C,MAAM,SAAS,GAAe,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAC1D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CACpD,CAAC;IAGF,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,QAAQ,EAAE;YACR,WAAW;YACX,SAAS;SACV;KACF,CAAC;AACJ,CAAC;AArHD,sEAqHC"}
|
|
@@ -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;
|
|
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"}
|
package/dist/cjs/views/index.js
CHANGED
|
@@ -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"}
|
|
@@ -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":"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;AAwC3D,MAAM,UAAU,GAAG,CAAC,WAKnB,EAAY,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,MAAM,EAAE,WAAW,CAAC,MAAM;IAC1B,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,OAAkB,EAAE,QAAkB,EAAS,EAAE;IAChE,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,qCAAqC;IACrC,MAAM,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE;QACjD,IAAI,CAAC,OAAO;QACZ,KAAK,CAAC,OAAO;KACd,CAAC,CAAC;IAEH,mEAAmE;IACnE,yDAAyD;IACzD,0DAA0D;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEvE,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;QAC5B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,KAAK,EAAE;YACL,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC;YACzE,SAAS,EAAE,KAAc;SAC1B;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,WAAW,CACjB,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC7B,cAAc,CAAC,QAAQ,CACxB;YACD,SAAS,EAAE,IAAa;SACzB;QACD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAmB;KACjD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAkB,EAClB,WAA0B,EAC1B,OAIC;IAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAE/B,yBAAyB;IACzB,IAAI,WAAmB,CAAC;IAExB,MAAM,WAAW,GAAa,CAAC,aAAa,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE3E,IAAI,MAAM,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,mBAAmB,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,EAAE,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1D,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;QACF,MAAM,qBAAqB,GAAG,eAAe;aAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,IAAI,sBAAsB,IAAI,IAAI,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,qDAAqD;QACrD,WAAW,CAAC,IAAI,CAAC,SAAS,qBAAqB,IAAI,CAAC,CAAC;QACrD,WAAW,GAAG,UAAU,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,wFAAwF;QACxF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,GAAG,UAAU,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,uEAAuE;IACvE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,2CAA2C;IAEzE,MAAM,KAAK,GAAG;;;iBAGC,WAAW;;;iBAGX,UAAU;;;;;;;;;;;;;;;;;;iBAkBV,WAAW;;;iBAGX,UAAU;;;;;;;;;;;;;;;;;;GAkBxB,CAAC;IAEF,MAAM,EACJ,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAC5B,GAAG,MAAM,QAAQ,CAAC,GAAG,CAEnB,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAE1C,+DAA+D;IAC/D,MAAM,SAAS,GAAe,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAC1D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CACpD,CAAC;IAEF,mBAAmB;IACnB,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,QAAQ,EAAE;YACR,WAAW;YACX,SAAS;SACV;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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;
|
|
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"}
|
package/dist/esm/views/index.js
CHANGED
|
@@ -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"}
|