@missionsquad/mcp-defillama 1.0.0 → 1.2.0

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.
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Date/time helpers.
3
+ *
4
+ * Tools accept and return human-readable 12-hour datetime strings, e.g.
5
+ * "06/15/2024 03:30:00 PM" (UTC assumed)
6
+ * "06/15/2024 03:30 PM America/New_York"
7
+ * "06/15/2024 03:30 PM +05:30"
8
+ *
9
+ * Input is always converted to UTC before being sent to DefiLlama (which works
10
+ * in UNIX seconds). Output UNIX timestamps are rendered back to UTC strings.
11
+ */
12
+ import { DateTime } from "luxon";
13
+ /** The canonical output format, e.g. "06/01/2026 04:37:45 PM UTC". */
14
+ const OUTPUT_FORMAT = "MM/dd/yyyy hh:mm:ss a 'UTC'";
15
+ /** Accepted input formats, tried in order (all interpreted in the given zone). */
16
+ const INPUT_FORMATS = [
17
+ "M/d/yyyy h:mm:ss a",
18
+ "M/d/yyyy h:mm a",
19
+ "M/d/yyyy h a",
20
+ "M/d/yyyy",
21
+ "yyyy-MM-dd h:mm:ss a",
22
+ "yyyy-MM-dd h:mm a",
23
+ "yyyy-MM-dd HH:mm:ss",
24
+ "yyyy-MM-dd HH:mm",
25
+ "yyyy-MM-dd",
26
+ ];
27
+ /** Matches a trailing timezone token: IANA name, numeric offset, or UTC/GMT/Z. */
28
+ const TZ_SUFFIX = /\s+([A-Za-z]+\/[A-Za-z0-9_+-]+|[+-]\d{2}:?\d{2}|Z|UTC|GMT)\s*$/;
29
+ const EXAMPLE = `e.g. "06/15/2024 03:30:00 PM" (UTC assumed), "06/15/2024 03:30 PM America/New_York", or "06/15/2024 03:30 PM +05:30"`;
30
+ /** Normalize a timezone token into something luxon understands. */
31
+ function normalizeZone(token) {
32
+ const upper = token.toUpperCase();
33
+ if (upper === "Z" || upper === "UTC" || upper === "GMT") {
34
+ return "utc";
35
+ }
36
+ // Numeric offset like "+05:30" / "-0800" -> luxon "UTC+05:30".
37
+ if (/^[+-]\d{2}:?\d{2}$/.test(token)) {
38
+ const sign = token[0];
39
+ const digits = token.slice(1).replace(":", "");
40
+ return `UTC${sign}${digits.slice(0, 2)}:${digits.slice(2)}`;
41
+ }
42
+ // Otherwise assume an IANA zone name (validated by luxon below).
43
+ return token;
44
+ }
45
+ /**
46
+ * Parse a human datetime string (or UNIX seconds) into UTC UNIX seconds.
47
+ * Numbers and all-digit strings are treated as UNIX seconds and passed through.
48
+ */
49
+ export function parseDateTimeToUnix(input) {
50
+ if (typeof input === "number") {
51
+ if (!Number.isFinite(input)) {
52
+ throw new Error(`Invalid timestamp: ${input}`);
53
+ }
54
+ return Math.floor(input);
55
+ }
56
+ const raw = String(input).trim();
57
+ if (raw === "") {
58
+ throw new Error("Timestamp is required");
59
+ }
60
+ if (/^\d+$/.test(raw)) {
61
+ return parseInt(raw, 10);
62
+ }
63
+ let zone = "utc";
64
+ let dateStr = raw;
65
+ const tzMatch = raw.match(TZ_SUFFIX);
66
+ if (tzMatch) {
67
+ zone = normalizeZone(tzMatch[1]);
68
+ dateStr = raw.slice(0, raw.length - tzMatch[0].length).trim();
69
+ }
70
+ for (const format of INPUT_FORMATS) {
71
+ const dt = DateTime.fromFormat(dateStr, format, { zone });
72
+ if (dt.isValid) {
73
+ return Math.floor(dt.toUTC().toSeconds());
74
+ }
75
+ }
76
+ // Fall back to ISO 8601 (which may carry its own offset).
77
+ const iso = DateTime.fromISO(raw, { zone: "utc", setZone: true });
78
+ if (iso.isValid) {
79
+ return Math.floor(iso.toUTC().toSeconds());
80
+ }
81
+ throw new Error(`Invalid date/time "${raw}". Expected a 12-hour datetime, ${EXAMPLE}.`);
82
+ }
83
+ /** Render a UNIX timestamp (seconds, or milliseconds if large) as a UTC string. */
84
+ export function formatUnixToDateTime(value) {
85
+ let seconds = value;
86
+ if (Math.abs(value) >= 1e12) {
87
+ seconds = Math.floor(value / 1000); // value was in milliseconds
88
+ }
89
+ const dt = DateTime.fromSeconds(seconds, { zone: "utc" });
90
+ return dt.isValid ? dt.toFormat(OUTPUT_FORMAT) : String(value);
91
+ }
92
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/handlers/datetime.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,33 @@
1
1
  import { ToolResultSchema } from "../types.js";
2
- import { GetProtocolsInput, GetProtocolTvlInput, GetChainTvlInput, GetTokenPricesInput, GetHistoricalPricesInput, GetStablecoinsInput, GetStablecoinDataInput } from "./defillama.types.js";
2
+ import { GetProtocolsInput, GetProtocolTvlInput, GetHistoricalChainTvlInput, GetChainTvlInput, GetCurrentProtocolTvlInput, GetChainsInput, GetTokenPricesInput, GetHistoricalPricesInput, GetBatchHistoricalPricesInput, GetPriceChartInput, GetPricePercentageChangeInput, GetFirstPricesInput, GetBlockInput, GetStablecoinsInput, GetStablecoinChartsAllInput, GetStablecoinChartsChainInput, GetStablecoinDataInput, GetStablecoinChainsInput, GetStablecoinPricesInput, GetPoolsInput, GetPoolChartInput, GetDexsOverviewInput, GetDexsOverviewByChainInput, GetDexSummaryInput, GetOptionsOverviewInput, GetOptionsOverviewByChainInput, GetOptionSummaryInput, GetOpenInterestOverviewInput, GetFeesOverviewInput, GetFeesOverviewByChainInput, GetFeeSummaryInput } from "./defillama.types.js";
3
3
  export declare const getProtocolsHandler: (input: GetProtocolsInput) => Promise<ToolResultSchema>;
4
4
  export declare const getProtocolTvlHandler: (input: GetProtocolTvlInput) => Promise<ToolResultSchema>;
5
+ export declare const getHistoricalChainTvlHandler: (input: GetHistoricalChainTvlInput) => Promise<ToolResultSchema>;
5
6
  export declare const getChainTvlHandler: (input: GetChainTvlInput) => Promise<ToolResultSchema>;
7
+ export declare const getCurrentProtocolTvlHandler: (input: GetCurrentProtocolTvlInput) => Promise<ToolResultSchema>;
8
+ export declare const getChainsHandler: (input: GetChainsInput) => Promise<ToolResultSchema>;
6
9
  export declare const getTokenPricesHandler: (input: GetTokenPricesInput) => Promise<ToolResultSchema>;
7
10
  export declare const getHistoricalPricesHandler: (input: GetHistoricalPricesInput) => Promise<ToolResultSchema>;
11
+ export declare const getBatchHistoricalPricesHandler: (input: GetBatchHistoricalPricesInput) => Promise<ToolResultSchema>;
12
+ export declare const getPriceChartHandler: (input: GetPriceChartInput) => Promise<ToolResultSchema>;
13
+ export declare const getPricePercentageChangeHandler: (input: GetPricePercentageChangeInput) => Promise<ToolResultSchema>;
14
+ export declare const getFirstPricesHandler: (input: GetFirstPricesInput) => Promise<ToolResultSchema>;
15
+ export declare const getBlockHandler: (input: GetBlockInput) => Promise<ToolResultSchema>;
8
16
  export declare const getStablecoinsHandler: (input: GetStablecoinsInput) => Promise<ToolResultSchema>;
17
+ export declare const getStablecoinChartsAllHandler: (input: GetStablecoinChartsAllInput) => Promise<ToolResultSchema>;
18
+ export declare const getStablecoinChartsChainHandler: (input: GetStablecoinChartsChainInput) => Promise<ToolResultSchema>;
9
19
  export declare const getStablecoinDataHandler: (input: GetStablecoinDataInput) => Promise<ToolResultSchema>;
20
+ export declare const getStablecoinChainsHandler: (input: GetStablecoinChainsInput) => Promise<ToolResultSchema>;
21
+ export declare const getStablecoinPricesHandler: (input: GetStablecoinPricesInput) => Promise<ToolResultSchema>;
22
+ export declare const getPoolsHandler: (input: GetPoolsInput) => Promise<ToolResultSchema>;
23
+ export declare const getPoolChartHandler: (input: GetPoolChartInput) => Promise<ToolResultSchema>;
24
+ export declare const getDexsOverviewHandler: (input: GetDexsOverviewInput) => Promise<ToolResultSchema>;
25
+ export declare const getDexsOverviewByChainHandler: (input: GetDexsOverviewByChainInput) => Promise<ToolResultSchema>;
26
+ export declare const getDexSummaryHandler: (input: GetDexSummaryInput) => Promise<ToolResultSchema>;
27
+ export declare const getOptionsOverviewHandler: (input: GetOptionsOverviewInput) => Promise<ToolResultSchema>;
28
+ export declare const getOptionsOverviewByChainHandler: (input: GetOptionsOverviewByChainInput) => Promise<ToolResultSchema>;
29
+ export declare const getOptionSummaryHandler: (input: GetOptionSummaryInput) => Promise<ToolResultSchema>;
30
+ export declare const getOpenInterestOverviewHandler: (input: GetOpenInterestOverviewInput) => Promise<ToolResultSchema>;
31
+ export declare const getFeesOverviewHandler: (input: GetFeesOverviewInput) => Promise<ToolResultSchema>;
32
+ export declare const getFeesOverviewByChainHandler: (input: GetFeesOverviewByChainInput) => Promise<ToolResultSchema>;
33
+ export declare const getFeeSummaryHandler: (input: GetFeeSummaryInput) => Promise<ToolResultSchema>;
@@ -1,68 +1,344 @@
1
- import { createErrorResponse, createSuccessResponse } from "./utils.js";
1
+ import { createErrorResponse, jsonResponse } from "./utils.js";
2
+ import { parseDateTimeToUnix } from "./datetime.js";
3
+ import { humanizeDates, compactProtocols, compactProtocolTvl, compactSeries, compactChains, compactPools, compactStablecoins, compactStablecoinData, compactStablecoinChains, compactOverview, } from "./transform.js";
2
4
  import { getDefiLlamaClient } from "../clients/defillama.factory.js";
3
5
  // Get the appropriate client (real or mock) based on TEST_MODE
4
6
  const defiLlamaClient = getDefiLlamaClient();
7
+ const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
8
+ /** Pull the compaction controls out of a handler input. */
9
+ const compactOpts = (input = {}) => ({
10
+ full: input.full,
11
+ points: input.points,
12
+ limit: input.limit,
13
+ includeTokens: input.includeTokens,
14
+ });
15
+ /**
16
+ * Build the query for the DEX/options/fees overview & summary endpoints.
17
+ * Charts are excluded by default (huge); pass `full: true` or the explicit
18
+ * exclude flags to change that.
19
+ */
20
+ const overviewQuery = (input = {}) => {
21
+ const defaultExclude = !input.full;
22
+ return {
23
+ excludeTotalDataChart: input.excludeTotalDataChart ?? defaultExclude,
24
+ excludeTotalDataChartBreakdown: input.excludeTotalDataChartBreakdown ?? defaultExclude,
25
+ dataType: input.dataType,
26
+ };
27
+ };
28
+ // ---------------------------------------------------------------------------
29
+ // TVL
30
+ // ---------------------------------------------------------------------------
5
31
  export const getProtocolsHandler = async (input) => {
6
32
  try {
7
- const protocolsData = await defiLlamaClient.getProtocols();
8
- return createSuccessResponse(`Protocols: ${JSON.stringify(protocolsData, null, 2)}`);
33
+ const data = await defiLlamaClient.getProtocols();
34
+ return jsonResponse(humanizeDates(compactProtocols(data, compactOpts(input))));
9
35
  }
10
36
  catch (error) {
11
- return createErrorResponse(`Error getting protocols: ${error instanceof Error ? error.message : String(error)}`);
37
+ return createErrorResponse(`Error getting protocols: ${errorMessage(error)}`);
12
38
  }
13
39
  };
14
40
  export const getProtocolTvlHandler = async (input) => {
15
41
  try {
16
- const protocolData = await defiLlamaClient.getProtocolTvl(input.protocol);
17
- return createSuccessResponse(`Protocol TVL: ${JSON.stringify(protocolData, null, 2)}`);
42
+ const data = await defiLlamaClient.getProtocolTvl(input.protocol);
43
+ return jsonResponse(humanizeDates(compactProtocolTvl(data, compactOpts(input))));
44
+ }
45
+ catch (error) {
46
+ return createErrorResponse(`Error getting protocol TVL: ${errorMessage(error)}`);
47
+ }
48
+ };
49
+ export const getHistoricalChainTvlHandler = async (input) => {
50
+ try {
51
+ const data = await defiLlamaClient.getHistoricalChainTvl();
52
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
18
53
  }
19
54
  catch (error) {
20
- return createErrorResponse(`Error getting protocol TVL: ${error instanceof Error ? error.message : String(error)}`);
55
+ return createErrorResponse(`Error getting historical chain TVL: ${errorMessage(error)}`);
21
56
  }
22
57
  };
23
58
  export const getChainTvlHandler = async (input) => {
24
59
  try {
25
- const chainData = await defiLlamaClient.getChainTvl(input.chain);
26
- return createSuccessResponse(`Chain TVL: ${JSON.stringify(chainData, null, 2)}`);
60
+ const data = await defiLlamaClient.getChainTvl(input.chain);
61
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
62
+ }
63
+ catch (error) {
64
+ return createErrorResponse(`Error getting chain TVL: ${errorMessage(error)}`);
65
+ }
66
+ };
67
+ export const getCurrentProtocolTvlHandler = async (input) => {
68
+ try {
69
+ const data = await defiLlamaClient.getCurrentProtocolTvl(input.protocol);
70
+ return jsonResponse(humanizeDates(data));
71
+ }
72
+ catch (error) {
73
+ return createErrorResponse(`Error getting current protocol TVL: ${errorMessage(error)}`);
74
+ }
75
+ };
76
+ export const getChainsHandler = async (input) => {
77
+ try {
78
+ const data = await defiLlamaClient.getChains();
79
+ return jsonResponse(humanizeDates(compactChains(data, compactOpts(input))));
27
80
  }
28
81
  catch (error) {
29
- return createErrorResponse(`Error getting chain TVL: ${error instanceof Error ? error.message : String(error)}`);
82
+ return createErrorResponse(`Error getting chains: ${errorMessage(error)}`);
30
83
  }
31
84
  };
85
+ // ---------------------------------------------------------------------------
86
+ // Coins / Prices
87
+ // ---------------------------------------------------------------------------
32
88
  export const getTokenPricesHandler = async (input) => {
33
89
  try {
34
- const pricesData = await defiLlamaClient.getTokenPrices(input.coins);
35
- return createSuccessResponse(`Token prices: ${JSON.stringify(pricesData, null, 2)}`);
90
+ const data = await defiLlamaClient.getTokenPrices(input.coins);
91
+ return jsonResponse(humanizeDates(data));
36
92
  }
37
93
  catch (error) {
38
- return createErrorResponse(`Error getting token prices: ${error instanceof Error ? error.message : String(error)}`);
94
+ return createErrorResponse(`Error getting token prices: ${errorMessage(error)}`);
39
95
  }
40
96
  };
41
97
  export const getHistoricalPricesHandler = async (input) => {
42
98
  try {
43
- const historicalData = await defiLlamaClient.getHistoricalPrices(input.coins, input.timestamp);
44
- return createSuccessResponse(`Historical prices: ${JSON.stringify(historicalData, null, 2)}`);
99
+ const timestamp = parseDateTimeToUnix(input.timestamp);
100
+ const data = await defiLlamaClient.getHistoricalPrices(input.coins, timestamp);
101
+ return jsonResponse(humanizeDates(data));
102
+ }
103
+ catch (error) {
104
+ return createErrorResponse(`Error getting historical prices: ${errorMessage(error)}`);
105
+ }
106
+ };
107
+ export const getBatchHistoricalPricesHandler = async (input) => {
108
+ try {
109
+ const coins = {};
110
+ for (const [coin, times] of Object.entries(input.coins ?? {})) {
111
+ coins[coin] = (times ?? []).map(parseDateTimeToUnix);
112
+ }
113
+ const data = await defiLlamaClient.getBatchHistoricalPrices(coins, input.searchWidth);
114
+ return jsonResponse(humanizeDates(data));
115
+ }
116
+ catch (error) {
117
+ return createErrorResponse(`Error getting batch historical prices: ${errorMessage(error)}`);
118
+ }
119
+ };
120
+ export const getPriceChartHandler = async (input) => {
121
+ try {
122
+ const data = await defiLlamaClient.getPriceChart(input.coins, {
123
+ start: input.start !== undefined ? parseDateTimeToUnix(input.start) : undefined,
124
+ end: input.end !== undefined ? parseDateTimeToUnix(input.end) : undefined,
125
+ span: input.span,
126
+ period: input.period,
127
+ searchWidth: input.searchWidth,
128
+ });
129
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
130
+ }
131
+ catch (error) {
132
+ return createErrorResponse(`Error getting price chart: ${errorMessage(error)}`);
133
+ }
134
+ };
135
+ export const getPricePercentageChangeHandler = async (input) => {
136
+ try {
137
+ const data = await defiLlamaClient.getPricePercentageChange(input.coins, {
138
+ timestamp: input.timestamp !== undefined ? parseDateTimeToUnix(input.timestamp) : undefined,
139
+ lookForward: input.lookForward,
140
+ period: input.period,
141
+ });
142
+ return jsonResponse(humanizeDates(data));
45
143
  }
46
144
  catch (error) {
47
- return createErrorResponse(`Error getting historical prices: ${error instanceof Error ? error.message : String(error)}`);
145
+ return createErrorResponse(`Error getting price percentage change: ${errorMessage(error)}`);
48
146
  }
49
147
  };
148
+ export const getFirstPricesHandler = async (input) => {
149
+ try {
150
+ const data = await defiLlamaClient.getFirstPrices(input.coins);
151
+ return jsonResponse(humanizeDates(data));
152
+ }
153
+ catch (error) {
154
+ return createErrorResponse(`Error getting first prices: ${errorMessage(error)}`);
155
+ }
156
+ };
157
+ export const getBlockHandler = async (input) => {
158
+ try {
159
+ const timestamp = parseDateTimeToUnix(input.timestamp);
160
+ const data = await defiLlamaClient.getBlock(input.chain, timestamp);
161
+ return jsonResponse(humanizeDates(data));
162
+ }
163
+ catch (error) {
164
+ return createErrorResponse(`Error getting block: ${errorMessage(error)}`);
165
+ }
166
+ };
167
+ // ---------------------------------------------------------------------------
168
+ // Stablecoins
169
+ // ---------------------------------------------------------------------------
50
170
  export const getStablecoinsHandler = async (input) => {
51
171
  try {
52
- const stablecoinsData = await defiLlamaClient.getStablecoins();
53
- return createSuccessResponse(`Stablecoins: ${JSON.stringify(stablecoinsData, null, 2)}`);
172
+ const data = await defiLlamaClient.getStablecoins(input?.includePrices);
173
+ return jsonResponse(humanizeDates(compactStablecoins(data, compactOpts(input))));
174
+ }
175
+ catch (error) {
176
+ return createErrorResponse(`Error getting stablecoins: ${errorMessage(error)}`);
177
+ }
178
+ };
179
+ export const getStablecoinChartsAllHandler = async (input) => {
180
+ try {
181
+ const data = await defiLlamaClient.getStablecoinChartsAll(input?.stablecoin);
182
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
54
183
  }
55
184
  catch (error) {
56
- return createErrorResponse(`Error getting stablecoins: ${error instanceof Error ? error.message : String(error)}`);
185
+ return createErrorResponse(`Error getting stablecoin charts: ${errorMessage(error)}`);
186
+ }
187
+ };
188
+ export const getStablecoinChartsChainHandler = async (input) => {
189
+ try {
190
+ const data = await defiLlamaClient.getStablecoinChartsChain(input.chain, input.stablecoin);
191
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
192
+ }
193
+ catch (error) {
194
+ return createErrorResponse(`Error getting stablecoin charts for chain: ${errorMessage(error)}`);
57
195
  }
58
196
  };
59
197
  export const getStablecoinDataHandler = async (input) => {
60
198
  try {
61
- const stablecoinData = await defiLlamaClient.getStablecoinData(input.asset);
62
- return createSuccessResponse(`Stablecoin data: ${JSON.stringify(stablecoinData, null, 2)}`);
199
+ const data = await defiLlamaClient.getStablecoinData(input.asset);
200
+ return jsonResponse(humanizeDates(compactStablecoinData(data, compactOpts(input))));
201
+ }
202
+ catch (error) {
203
+ return createErrorResponse(`Error getting stablecoin data: ${errorMessage(error)}`);
204
+ }
205
+ };
206
+ export const getStablecoinChainsHandler = async (input) => {
207
+ try {
208
+ const data = await defiLlamaClient.getStablecoinChains();
209
+ return jsonResponse(humanizeDates(compactStablecoinChains(data, compactOpts(input))));
210
+ }
211
+ catch (error) {
212
+ return createErrorResponse(`Error getting stablecoin chains: ${errorMessage(error)}`);
213
+ }
214
+ };
215
+ export const getStablecoinPricesHandler = async (input) => {
216
+ try {
217
+ const data = await defiLlamaClient.getStablecoinPrices();
218
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
219
+ }
220
+ catch (error) {
221
+ return createErrorResponse(`Error getting stablecoin prices: ${errorMessage(error)}`);
222
+ }
223
+ };
224
+ // ---------------------------------------------------------------------------
225
+ // Yields / APY
226
+ // ---------------------------------------------------------------------------
227
+ export const getPoolsHandler = async (input) => {
228
+ try {
229
+ const data = await defiLlamaClient.getPools();
230
+ return jsonResponse(humanizeDates(compactPools(data, compactOpts(input))));
231
+ }
232
+ catch (error) {
233
+ return createErrorResponse(`Error getting pools: ${errorMessage(error)}`);
234
+ }
235
+ };
236
+ export const getPoolChartHandler = async (input) => {
237
+ try {
238
+ const data = await defiLlamaClient.getPoolChart(input.pool);
239
+ return jsonResponse(humanizeDates(compactSeries(data, compactOpts(input))));
240
+ }
241
+ catch (error) {
242
+ return createErrorResponse(`Error getting pool chart: ${errorMessage(error)}`);
243
+ }
244
+ };
245
+ // ---------------------------------------------------------------------------
246
+ // DEX / Options volume
247
+ // ---------------------------------------------------------------------------
248
+ export const getDexsOverviewHandler = async (input) => {
249
+ try {
250
+ const data = await defiLlamaClient.getDexsOverview(overviewQuery(input));
251
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
252
+ }
253
+ catch (error) {
254
+ return createErrorResponse(`Error getting DEXs overview: ${errorMessage(error)}`);
255
+ }
256
+ };
257
+ export const getDexsOverviewByChainHandler = async (input) => {
258
+ try {
259
+ const data = await defiLlamaClient.getDexsOverviewByChain(input.chain, overviewQuery(input));
260
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
261
+ }
262
+ catch (error) {
263
+ return createErrorResponse(`Error getting DEXs overview for chain: ${errorMessage(error)}`);
264
+ }
265
+ };
266
+ export const getDexSummaryHandler = async (input) => {
267
+ try {
268
+ const data = await defiLlamaClient.getDexSummary(input.protocol, overviewQuery(input));
269
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
270
+ }
271
+ catch (error) {
272
+ return createErrorResponse(`Error getting DEX summary: ${errorMessage(error)}`);
273
+ }
274
+ };
275
+ export const getOptionsOverviewHandler = async (input) => {
276
+ try {
277
+ const data = await defiLlamaClient.getOptionsOverview(overviewQuery(input));
278
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
279
+ }
280
+ catch (error) {
281
+ return createErrorResponse(`Error getting options overview: ${errorMessage(error)}`);
282
+ }
283
+ };
284
+ export const getOptionsOverviewByChainHandler = async (input) => {
285
+ try {
286
+ const data = await defiLlamaClient.getOptionsOverviewByChain(input.chain, overviewQuery(input));
287
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
288
+ }
289
+ catch (error) {
290
+ return createErrorResponse(`Error getting options overview for chain: ${errorMessage(error)}`);
291
+ }
292
+ };
293
+ export const getOptionSummaryHandler = async (input) => {
294
+ try {
295
+ const data = await defiLlamaClient.getOptionSummary(input.protocol, overviewQuery(input));
296
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
297
+ }
298
+ catch (error) {
299
+ return createErrorResponse(`Error getting options summary: ${errorMessage(error)}`);
300
+ }
301
+ };
302
+ // ---------------------------------------------------------------------------
303
+ // Perps / Open interest
304
+ // ---------------------------------------------------------------------------
305
+ export const getOpenInterestOverviewHandler = async (input) => {
306
+ try {
307
+ const data = await defiLlamaClient.getOpenInterestOverview(overviewQuery(input));
308
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
309
+ }
310
+ catch (error) {
311
+ return createErrorResponse(`Error getting open interest overview: ${errorMessage(error)}`);
312
+ }
313
+ };
314
+ // ---------------------------------------------------------------------------
315
+ // Fees / Revenue
316
+ // ---------------------------------------------------------------------------
317
+ export const getFeesOverviewHandler = async (input) => {
318
+ try {
319
+ const data = await defiLlamaClient.getFeesOverview(overviewQuery(input));
320
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
321
+ }
322
+ catch (error) {
323
+ return createErrorResponse(`Error getting fees overview: ${errorMessage(error)}`);
324
+ }
325
+ };
326
+ export const getFeesOverviewByChainHandler = async (input) => {
327
+ try {
328
+ const data = await defiLlamaClient.getFeesOverviewByChain(input.chain, overviewQuery(input));
329
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
330
+ }
331
+ catch (error) {
332
+ return createErrorResponse(`Error getting fees overview for chain: ${errorMessage(error)}`);
333
+ }
334
+ };
335
+ export const getFeeSummaryHandler = async (input) => {
336
+ try {
337
+ const data = await defiLlamaClient.getFeeSummary(input.protocol, overviewQuery(input));
338
+ return jsonResponse(humanizeDates(compactOverview(data, compactOpts(input))));
63
339
  }
64
340
  catch (error) {
65
- return createErrorResponse(`Error getting stablecoin data: ${error instanceof Error ? error.message : String(error)}`);
341
+ return createErrorResponse(`Error getting fees summary: ${errorMessage(error)}`);
66
342
  }
67
343
  };
68
344
  //# sourceMappingURL=defillama.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defillama.js","sourceRoot":"","sources":["../../src/handlers/defillama.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defillama.js","sourceRoot":"","sources":["../../src/handlers/defillama.ts"],"names":[],"mappings":"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"}