@pyxisjs/client 0.2.7 → 0.3.1

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 Pyxis Team
3
+ Copyright (c) 2026 Pyxis Team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/index.d.mts CHANGED
@@ -1,64 +1,9 @@
1
- import { GetActivitiesArgs, VaultActivity, VaultTvlArgs, HistoricalApyArgs, ExchangeRateEvent, ApyDataPoint, BaseAnalyticsClient } from '@pyxisjs/core';
1
+ import { GetManageOperationsArgs, ManageOperation } from '@pyxisjs/core';
2
2
 
3
- /**
4
- * PyxisAnalyticsAPI - Public interface for analytics operations
5
- */
6
- interface PyxisAnalyticsAPI {
7
- getActivities(args: GetActivitiesArgs): Promise<{
8
- activities: VaultActivity[];
9
- total: number;
10
- }>;
11
- getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
12
- getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
13
- get30DayApy(vault: string): Promise<string>;
14
- getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
15
- }
16
- /**
17
- * PyxisAnalyticsClient - Multi-chain analytics client
18
- *
19
- * This client aggregates data from multiple chain-specific analytics clients.
20
- * Each method fetches data from all clients and combines the results.
21
- *
22
- * @example
23
- * ```typescript
24
- * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);
25
- * const evmClient = new EVMAnalyticsClient(evmAdapter); // future
26
- * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);
27
- *
28
- * const activities = await client.getActivities({ vault: '0x...', page: 1 });
29
- * ```
30
- */
31
- declare class PyxisAnalyticsClient implements PyxisAnalyticsAPI {
32
- private clients;
33
- constructor(clients: BaseAnalyticsClient[]);
34
- /**
35
- * Get vault activities with pagination from all clients
36
- * Aggregates activities from all clients
37
- */
38
- getActivities(args: GetActivitiesArgs): Promise<{
39
- activities: VaultActivity[];
40
- total: number;
41
- }>;
42
- /**
43
- * Get total value locked in base asset from all clients
44
- * Returns the sum of TVL from all clients
45
- */
46
- getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
47
- /**
48
- * Get exchange rate update events from all clients
49
- * Aggregates and sorts events by timestamp
50
- */
51
- getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
52
- /**
53
- * Get 30-day APY for a vault
54
- * Returns the average APY across all clients
55
- */
56
- get30DayApy(vault: string): Promise<string>;
57
- /**
58
- * Get historical APY data points from all clients
59
- * Aggregates data points and averages values for matching timestamps
60
- */
61
- getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
3
+ declare class PyxisStatsClient {
4
+ private readonly baseUrl;
5
+ constructor(baseUrl?: string);
6
+ getManageOperations({ vaultId, startTime, endTime, limit, }: GetManageOperationsArgs): Promise<ManageOperation[]>;
62
7
  }
63
8
 
64
- export { type PyxisAnalyticsAPI, PyxisAnalyticsClient };
9
+ export { PyxisStatsClient };
package/dist/index.d.ts CHANGED
@@ -1,64 +1,9 @@
1
- import { GetActivitiesArgs, VaultActivity, VaultTvlArgs, HistoricalApyArgs, ExchangeRateEvent, ApyDataPoint, BaseAnalyticsClient } from '@pyxisjs/core';
1
+ import { GetManageOperationsArgs, ManageOperation } from '@pyxisjs/core';
2
2
 
3
- /**
4
- * PyxisAnalyticsAPI - Public interface for analytics operations
5
- */
6
- interface PyxisAnalyticsAPI {
7
- getActivities(args: GetActivitiesArgs): Promise<{
8
- activities: VaultActivity[];
9
- total: number;
10
- }>;
11
- getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
12
- getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
13
- get30DayApy(vault: string): Promise<string>;
14
- getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
15
- }
16
- /**
17
- * PyxisAnalyticsClient - Multi-chain analytics client
18
- *
19
- * This client aggregates data from multiple chain-specific analytics clients.
20
- * Each method fetches data from all clients and combines the results.
21
- *
22
- * @example
23
- * ```typescript
24
- * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);
25
- * const evmClient = new EVMAnalyticsClient(evmAdapter); // future
26
- * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);
27
- *
28
- * const activities = await client.getActivities({ vault: '0x...', page: 1 });
29
- * ```
30
- */
31
- declare class PyxisAnalyticsClient implements PyxisAnalyticsAPI {
32
- private clients;
33
- constructor(clients: BaseAnalyticsClient[]);
34
- /**
35
- * Get vault activities with pagination from all clients
36
- * Aggregates activities from all clients
37
- */
38
- getActivities(args: GetActivitiesArgs): Promise<{
39
- activities: VaultActivity[];
40
- total: number;
41
- }>;
42
- /**
43
- * Get total value locked in base asset from all clients
44
- * Returns the sum of TVL from all clients
45
- */
46
- getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
47
- /**
48
- * Get exchange rate update events from all clients
49
- * Aggregates and sorts events by timestamp
50
- */
51
- getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
52
- /**
53
- * Get 30-day APY for a vault
54
- * Returns the average APY across all clients
55
- */
56
- get30DayApy(vault: string): Promise<string>;
57
- /**
58
- * Get historical APY data points from all clients
59
- * Aggregates data points and averages values for matching timestamps
60
- */
61
- getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
3
+ declare class PyxisStatsClient {
4
+ private readonly baseUrl;
5
+ constructor(baseUrl?: string);
6
+ getManageOperations({ vaultId, startTime, endTime, limit, }: GetManageOperationsArgs): Promise<ManageOperation[]>;
62
7
  }
63
8
 
64
- export { type PyxisAnalyticsAPI, PyxisAnalyticsClient };
9
+ export { PyxisStatsClient };
package/dist/index.js CHANGED
@@ -20,117 +20,48 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- PyxisAnalyticsClient: () => PyxisAnalyticsClient
23
+ PyxisStatsClient: () => PyxisStatsClient
24
24
  });
25
25
  module.exports = __toCommonJS(index_exports);
26
26
 
27
- // ../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js
28
- var isProduction = process.env.NODE_ENV === "production";
29
- var prefix = "Invariant failed";
30
- function invariant(condition, message) {
31
- if (condition) {
32
- return;
27
+ // src/stats-client.ts
28
+ var PyxisStatsClient = class {
29
+ constructor(baseUrl = "https://stats.pyxisfinance.xyz/v1") {
30
+ this.baseUrl = baseUrl;
33
31
  }
34
- if (isProduction) {
35
- throw new Error(prefix);
36
- }
37
- var provided = typeof message === "function" ? message() : message;
38
- var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
39
- throw new Error(value);
40
- }
41
-
42
- // src/analytics-client.ts
43
- var PyxisAnalyticsClient = class {
44
- constructor(clients) {
45
- invariant(clients.length > 0, "At least one analytics client is required");
46
- this.clients = clients;
47
- }
48
- /**
49
- * Get vault activities with pagination from all clients
50
- * Aggregates activities from all clients
51
- */
52
- async getActivities(args) {
53
- const results = await Promise.all(
54
- this.clients.map((client) => client.getActivities(args))
55
- );
56
- const allActivities = results.flatMap((r) => r.activities);
57
- const totalCount = results.reduce((sum, r) => sum + r.total, 0);
58
- const pageSize = args.pageSize ?? 10;
59
- const page = args.page ?? 1;
60
- const start = (page - 1) * pageSize;
61
- const paginatedActivities = allActivities.slice(start, start + pageSize);
62
- return {
63
- activities: paginatedActivities,
64
- total: totalCount
65
- };
66
- }
67
- /**
68
- * Get total value locked in base asset from all clients
69
- * Returns the sum of TVL from all clients
70
- */
71
- async getTvlInBaseAsset(args) {
72
- const results = await Promise.all(
73
- this.clients.map((client) => client.getTvlInBaseAsset(args))
74
- );
75
- const totalTvl = results.reduce((sum, tvl) => sum + BigInt(tvl), BigInt(0));
76
- return totalTvl.toString();
77
- }
78
- /**
79
- * Get exchange rate update events from all clients
80
- * Aggregates and sorts events by timestamp
81
- */
82
- async getUpdateExchangeRateEvents(args) {
83
- const results = await Promise.all(
84
- this.clients.map((client) => client.getUpdateExchangeRateEvents(args))
85
- );
86
- const allEvents = results.flat();
87
- allEvents.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
88
- return allEvents;
89
- }
90
- /**
91
- * Get 30-day APY for a vault
92
- * Returns the average APY across all clients
93
- */
94
- async get30DayApy(vault) {
95
- const results = await Promise.all(
96
- this.clients.map((client) => client.get30DayApy(vault))
97
- );
98
- const validApys = results.filter((apy) => apy !== "0");
99
- if (validApys.length === 0) {
100
- return "0";
32
+ async getManageOperations({
33
+ vaultId,
34
+ startTime,
35
+ endTime,
36
+ limit = 100
37
+ }) {
38
+ const params = new URLSearchParams({
39
+ start_time: startTime.toString(),
40
+ end_time: endTime.toString(),
41
+ limit: limit.toString()
42
+ });
43
+ const url = `${this.baseUrl}/vaults/${vaultId}/manage-operations?${params}`;
44
+ const response = await fetch(url);
45
+ if (!response.ok) {
46
+ throw new Error(
47
+ `Failed to fetch manage operations: ${response.status} ${response.statusText}`
48
+ );
101
49
  }
102
- const totalApy = validApys.reduce((sum, apy) => sum + parseFloat(apy), 0);
103
- return (totalApy / validApys.length).toString();
104
- }
105
- /**
106
- * Get historical APY data points from all clients
107
- * Aggregates data points and averages values for matching timestamps
108
- */
109
- async getHistoricalApy(args) {
110
- const results = await Promise.all(
111
- this.clients.map((client) => client.getHistoricalApy(args))
112
- );
113
- const allDataPoints = results.flat();
114
- const timestampMap = /* @__PURE__ */ new Map();
115
- for (const point of allDataPoints) {
116
- const values = timestampMap.get(point.timestamp) || [];
117
- values.push(parseFloat(point.value));
118
- timestampMap.set(point.timestamp, values);
119
- }
120
- const aggregatedData = [];
121
- for (const [timestamp, values] of timestampMap) {
122
- const avgValue = values.reduce((a, b) => a + b, 0) / values.length;
123
- aggregatedData.push({
124
- timestamp,
125
- value: avgValue.toString()
126
- });
50
+ const data = await response.json();
51
+ if (data.code !== 0) {
52
+ throw new Error(
53
+ `Manage operations API error: ${data.message} (code: ${data.code})`
54
+ );
127
55
  }
128
- aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
129
- return aggregatedData;
56
+ const uniqueOperations = data.data.items.filter(
57
+ (op, index, self) => index === self.findIndex((o) => o.id === op.id)
58
+ );
59
+ uniqueOperations.sort((a, b) => b.event_timestamp - a.event_timestamp);
60
+ return uniqueOperations;
130
61
  }
131
62
  };
132
63
  // Annotate the CommonJS export names for ESM import in node:
133
64
  0 && (module.exports = {
134
- PyxisAnalyticsClient
65
+ PyxisStatsClient
135
66
  });
136
67
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../src/analytics-client.ts"],"sourcesContent":["export * from './analytics-client';\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import {\n ApyDataPoint,\n BaseAnalyticsClient,\n ExchangeRateEvent,\n GetActivitiesArgs,\n HistoricalApyArgs,\n VaultActivity,\n VaultTvlArgs,\n} from '@pyxisjs/core';\nimport invariant from 'tiny-invariant';\n\n/**\n * PyxisAnalyticsAPI - Public interface for analytics operations\n */\nexport interface PyxisAnalyticsAPI {\n getActivities(\n args: GetActivitiesArgs\n ): Promise<{ activities: VaultActivity[]; total: number }>;\n getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;\n getUpdateExchangeRateEvents(\n args: HistoricalApyArgs\n ): Promise<ExchangeRateEvent[]>;\n get30DayApy(vault: string): Promise<string>;\n getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;\n}\n\n/**\n * PyxisAnalyticsClient - Multi-chain analytics client\n *\n * This client aggregates data from multiple chain-specific analytics clients.\n * Each method fetches data from all clients and combines the results.\n *\n * @example\n * ```typescript\n * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);\n * const evmClient = new EVMAnalyticsClient(evmAdapter); // future\n * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);\n *\n * const activities = await client.getActivities({ vault: '0x...', page: 1 });\n * ```\n */\nexport class PyxisAnalyticsClient implements PyxisAnalyticsAPI {\n private clients: BaseAnalyticsClient[];\n\n constructor(clients: BaseAnalyticsClient[]) {\n invariant(clients.length > 0, 'At least one analytics client is required');\n this.clients = clients;\n }\n\n /**\n * Get vault activities with pagination from all clients\n * Aggregates activities from all clients\n */\n async getActivities(\n args: GetActivitiesArgs\n ): Promise<{ activities: VaultActivity[]; total: number }> {\n const results = await Promise.all(\n this.clients.map(client => client.getActivities(args))\n );\n\n // Aggregate all activities\n const allActivities = results.flatMap(r => r.activities);\n const totalCount = results.reduce((sum, r) => sum + r.total, 0);\n\n // Apply pagination to aggregated results\n const pageSize = args.pageSize ?? 10;\n const page = args.page ?? 1;\n const start = (page - 1) * pageSize;\n const paginatedActivities = allActivities.slice(start, start + pageSize);\n\n return {\n activities: paginatedActivities,\n total: totalCount,\n };\n }\n\n /**\n * Get total value locked in base asset from all clients\n * Returns the sum of TVL from all clients\n */\n async getTvlInBaseAsset(args: VaultTvlArgs): Promise<string> {\n const results = await Promise.all(\n this.clients.map(client => client.getTvlInBaseAsset(args))\n );\n\n // Sum all TVL values\n const totalTvl = results.reduce((sum, tvl) => sum + BigInt(tvl), BigInt(0));\n\n return totalTvl.toString();\n }\n\n /**\n * Get exchange rate update events from all clients\n * Aggregates and sorts events by timestamp\n */\n async getUpdateExchangeRateEvents(\n args: HistoricalApyArgs\n ): Promise<ExchangeRateEvent[]> {\n const results = await Promise.all(\n this.clients.map(client => client.getUpdateExchangeRateEvents(args))\n );\n\n // Aggregate all events\n const allEvents = results.flat();\n\n // Sort by timestamp ascending\n allEvents.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));\n\n return allEvents;\n }\n\n /**\n * Get 30-day APY for a vault\n * Returns the average APY across all clients\n */\n async get30DayApy(vault: string): Promise<string> {\n const results = await Promise.all(\n this.clients.map(client => client.get30DayApy(vault))\n );\n\n // Filter out zero APY values\n const validApys = results.filter(apy => apy !== '0');\n\n if (validApys.length === 0) {\n return '0';\n }\n\n // Calculate average APY\n const totalApy = validApys.reduce((sum, apy) => sum + parseFloat(apy), 0);\n\n return (totalApy / validApys.length).toString();\n }\n\n /**\n * Get historical APY data points from all clients\n * Aggregates data points and averages values for matching timestamps\n */\n async getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]> {\n const results = await Promise.all(\n this.clients.map(client => client.getHistoricalApy(args))\n );\n\n // Aggregate all data points\n const allDataPoints = results.flat();\n\n // Group by timestamp and calculate average\n const timestampMap = new Map<string, number[]>();\n for (const point of allDataPoints) {\n const values = timestampMap.get(point.timestamp) || [];\n values.push(parseFloat(point.value));\n timestampMap.set(point.timestamp, values);\n }\n\n // Calculate average for each timestamp\n const aggregatedData: ApyDataPoint[] = [];\n for (const [timestamp, values] of timestampMap) {\n const avgValue = values.reduce((a, b) => a + b, 0) / values.length;\n aggregatedData.push({\n timestamp,\n value: avgValue.toString(),\n });\n }\n\n // Sort by timestamp ascending\n aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));\n\n return aggregatedData;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/stats-client.ts"],"sourcesContent":["export * from './stats-client';\n","import {\n GetManageOperationsArgs,\n ManageOperation,\n ManageOperationsResponse,\n} from '@pyxisjs/core';\n\nexport class PyxisStatsClient {\n private readonly baseUrl: string;\n\n constructor(baseUrl: string = 'https://stats.pyxisfinance.xyz/v1') {\n this.baseUrl = baseUrl;\n }\n\n async getManageOperations({\n vaultId,\n startTime,\n endTime,\n limit = 100,\n }: GetManageOperationsArgs): Promise<ManageOperation[]> {\n const params = new URLSearchParams({\n start_time: startTime.toString(),\n end_time: endTime.toString(),\n limit: limit.toString(),\n });\n\n const url = `${this.baseUrl}/vaults/${vaultId}/manage-operations?${params}`;\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch manage operations: ${response.status} ${response.statusText}`\n );\n }\n\n const data: ManageOperationsResponse = await response.json();\n\n if (data.code !== 0) {\n throw new Error(\n `Manage operations API error: ${data.message} (code: ${data.code})`\n );\n }\n\n // Deduplicate operations by ID to handle multiple deployments\n const uniqueOperations = data.data.items.filter(\n (op, index, self) => index === self.findIndex(o => o.id === op.id)\n );\n\n uniqueOperations.sort((a, b) => b.event_timestamp - a.event_timestamp);\n\n return uniqueOperations;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,mBAAN,MAAuB;AAAA,EAG5B,YAAY,UAAkB,qCAAqC;AACjE,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,GAAwD;AACtD,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,YAAY,UAAU,SAAS;AAAA,MAC/B,UAAU,QAAQ,SAAS;AAAA,MAC3B,OAAO,MAAM,SAAS;AAAA,IACxB,CAAC;AAED,UAAM,MAAM,GAAG,KAAK,OAAO,WAAW,OAAO,sBAAsB,MAAM;AAEzE,UAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,sCAAsC,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,MAC9E;AAAA,IACF;AAEA,UAAM,OAAiC,MAAM,SAAS,KAAK;AAE3D,QAAI,KAAK,SAAS,GAAG;AACnB,YAAM,IAAI;AAAA,QACR,gCAAgC,KAAK,OAAO,WAAW,KAAK,IAAI;AAAA,MAClE;AAAA,IACF;AAGA,UAAM,mBAAmB,KAAK,KAAK,MAAM;AAAA,MACvC,CAAC,IAAI,OAAO,SAAS,UAAU,KAAK,UAAU,OAAK,EAAE,OAAO,GAAG,EAAE;AAAA,IACnE;AAEA,qBAAiB,KAAK,CAAC,GAAG,MAAM,EAAE,kBAAkB,EAAE,eAAe;AAErE,WAAO;AAAA,EACT;AACF;","names":[]}
package/dist/index.mjs CHANGED
@@ -1,109 +1,40 @@
1
- // ../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js
2
- var isProduction = process.env.NODE_ENV === "production";
3
- var prefix = "Invariant failed";
4
- function invariant(condition, message) {
5
- if (condition) {
6
- return;
7
- }
8
- if (isProduction) {
9
- throw new Error(prefix);
10
- }
11
- var provided = typeof message === "function" ? message() : message;
12
- var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
13
- throw new Error(value);
14
- }
15
-
16
- // src/analytics-client.ts
17
- var PyxisAnalyticsClient = class {
18
- constructor(clients) {
19
- invariant(clients.length > 0, "At least one analytics client is required");
20
- this.clients = clients;
21
- }
22
- /**
23
- * Get vault activities with pagination from all clients
24
- * Aggregates activities from all clients
25
- */
26
- async getActivities(args) {
27
- const results = await Promise.all(
28
- this.clients.map((client) => client.getActivities(args))
29
- );
30
- const allActivities = results.flatMap((r) => r.activities);
31
- const totalCount = results.reduce((sum, r) => sum + r.total, 0);
32
- const pageSize = args.pageSize ?? 10;
33
- const page = args.page ?? 1;
34
- const start = (page - 1) * pageSize;
35
- const paginatedActivities = allActivities.slice(start, start + pageSize);
36
- return {
37
- activities: paginatedActivities,
38
- total: totalCount
39
- };
40
- }
41
- /**
42
- * Get total value locked in base asset from all clients
43
- * Returns the sum of TVL from all clients
44
- */
45
- async getTvlInBaseAsset(args) {
46
- const results = await Promise.all(
47
- this.clients.map((client) => client.getTvlInBaseAsset(args))
48
- );
49
- const totalTvl = results.reduce((sum, tvl) => sum + BigInt(tvl), BigInt(0));
50
- return totalTvl.toString();
51
- }
52
- /**
53
- * Get exchange rate update events from all clients
54
- * Aggregates and sorts events by timestamp
55
- */
56
- async getUpdateExchangeRateEvents(args) {
57
- const results = await Promise.all(
58
- this.clients.map((client) => client.getUpdateExchangeRateEvents(args))
59
- );
60
- const allEvents = results.flat();
61
- allEvents.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
62
- return allEvents;
63
- }
64
- /**
65
- * Get 30-day APY for a vault
66
- * Returns the average APY across all clients
67
- */
68
- async get30DayApy(vault) {
69
- const results = await Promise.all(
70
- this.clients.map((client) => client.get30DayApy(vault))
71
- );
72
- const validApys = results.filter((apy) => apy !== "0");
73
- if (validApys.length === 0) {
74
- return "0";
1
+ // src/stats-client.ts
2
+ var PyxisStatsClient = class {
3
+ constructor(baseUrl = "https://stats.pyxisfinance.xyz/v1") {
4
+ this.baseUrl = baseUrl;
5
+ }
6
+ async getManageOperations({
7
+ vaultId,
8
+ startTime,
9
+ endTime,
10
+ limit = 100
11
+ }) {
12
+ const params = new URLSearchParams({
13
+ start_time: startTime.toString(),
14
+ end_time: endTime.toString(),
15
+ limit: limit.toString()
16
+ });
17
+ const url = `${this.baseUrl}/vaults/${vaultId}/manage-operations?${params}`;
18
+ const response = await fetch(url);
19
+ if (!response.ok) {
20
+ throw new Error(
21
+ `Failed to fetch manage operations: ${response.status} ${response.statusText}`
22
+ );
75
23
  }
76
- const totalApy = validApys.reduce((sum, apy) => sum + parseFloat(apy), 0);
77
- return (totalApy / validApys.length).toString();
78
- }
79
- /**
80
- * Get historical APY data points from all clients
81
- * Aggregates data points and averages values for matching timestamps
82
- */
83
- async getHistoricalApy(args) {
84
- const results = await Promise.all(
85
- this.clients.map((client) => client.getHistoricalApy(args))
86
- );
87
- const allDataPoints = results.flat();
88
- const timestampMap = /* @__PURE__ */ new Map();
89
- for (const point of allDataPoints) {
90
- const values = timestampMap.get(point.timestamp) || [];
91
- values.push(parseFloat(point.value));
92
- timestampMap.set(point.timestamp, values);
93
- }
94
- const aggregatedData = [];
95
- for (const [timestamp, values] of timestampMap) {
96
- const avgValue = values.reduce((a, b) => a + b, 0) / values.length;
97
- aggregatedData.push({
98
- timestamp,
99
- value: avgValue.toString()
100
- });
24
+ const data = await response.json();
25
+ if (data.code !== 0) {
26
+ throw new Error(
27
+ `Manage operations API error: ${data.message} (code: ${data.code})`
28
+ );
101
29
  }
102
- aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
103
- return aggregatedData;
30
+ const uniqueOperations = data.data.items.filter(
31
+ (op, index, self) => index === self.findIndex((o) => o.id === op.id)
32
+ );
33
+ uniqueOperations.sort((a, b) => b.event_timestamp - a.event_timestamp);
34
+ return uniqueOperations;
104
35
  }
105
36
  };
106
37
  export {
107
- PyxisAnalyticsClient
38
+ PyxisStatsClient
108
39
  };
109
40
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../src/analytics-client.ts"],"sourcesContent":["var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import {\n ApyDataPoint,\n BaseAnalyticsClient,\n ExchangeRateEvent,\n GetActivitiesArgs,\n HistoricalApyArgs,\n VaultActivity,\n VaultTvlArgs,\n} from '@pyxisjs/core';\nimport invariant from 'tiny-invariant';\n\n/**\n * PyxisAnalyticsAPI - Public interface for analytics operations\n */\nexport interface PyxisAnalyticsAPI {\n getActivities(\n args: GetActivitiesArgs\n ): Promise<{ activities: VaultActivity[]; total: number }>;\n getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;\n getUpdateExchangeRateEvents(\n args: HistoricalApyArgs\n ): Promise<ExchangeRateEvent[]>;\n get30DayApy(vault: string): Promise<string>;\n getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;\n}\n\n/**\n * PyxisAnalyticsClient - Multi-chain analytics client\n *\n * This client aggregates data from multiple chain-specific analytics clients.\n * Each method fetches data from all clients and combines the results.\n *\n * @example\n * ```typescript\n * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);\n * const evmClient = new EVMAnalyticsClient(evmAdapter); // future\n * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);\n *\n * const activities = await client.getActivities({ vault: '0x...', page: 1 });\n * ```\n */\nexport class PyxisAnalyticsClient implements PyxisAnalyticsAPI {\n private clients: BaseAnalyticsClient[];\n\n constructor(clients: BaseAnalyticsClient[]) {\n invariant(clients.length > 0, 'At least one analytics client is required');\n this.clients = clients;\n }\n\n /**\n * Get vault activities with pagination from all clients\n * Aggregates activities from all clients\n */\n async getActivities(\n args: GetActivitiesArgs\n ): Promise<{ activities: VaultActivity[]; total: number }> {\n const results = await Promise.all(\n this.clients.map(client => client.getActivities(args))\n );\n\n // Aggregate all activities\n const allActivities = results.flatMap(r => r.activities);\n const totalCount = results.reduce((sum, r) => sum + r.total, 0);\n\n // Apply pagination to aggregated results\n const pageSize = args.pageSize ?? 10;\n const page = args.page ?? 1;\n const start = (page - 1) * pageSize;\n const paginatedActivities = allActivities.slice(start, start + pageSize);\n\n return {\n activities: paginatedActivities,\n total: totalCount,\n };\n }\n\n /**\n * Get total value locked in base asset from all clients\n * Returns the sum of TVL from all clients\n */\n async getTvlInBaseAsset(args: VaultTvlArgs): Promise<string> {\n const results = await Promise.all(\n this.clients.map(client => client.getTvlInBaseAsset(args))\n );\n\n // Sum all TVL values\n const totalTvl = results.reduce((sum, tvl) => sum + BigInt(tvl), BigInt(0));\n\n return totalTvl.toString();\n }\n\n /**\n * Get exchange rate update events from all clients\n * Aggregates and sorts events by timestamp\n */\n async getUpdateExchangeRateEvents(\n args: HistoricalApyArgs\n ): Promise<ExchangeRateEvent[]> {\n const results = await Promise.all(\n this.clients.map(client => client.getUpdateExchangeRateEvents(args))\n );\n\n // Aggregate all events\n const allEvents = results.flat();\n\n // Sort by timestamp ascending\n allEvents.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));\n\n return allEvents;\n }\n\n /**\n * Get 30-day APY for a vault\n * Returns the average APY across all clients\n */\n async get30DayApy(vault: string): Promise<string> {\n const results = await Promise.all(\n this.clients.map(client => client.get30DayApy(vault))\n );\n\n // Filter out zero APY values\n const validApys = results.filter(apy => apy !== '0');\n\n if (validApys.length === 0) {\n return '0';\n }\n\n // Calculate average APY\n const totalApy = validApys.reduce((sum, apy) => sum + parseFloat(apy), 0);\n\n return (totalApy / validApys.length).toString();\n }\n\n /**\n * Get historical APY data points from all clients\n * Aggregates data points and averages values for matching timestamps\n */\n async getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]> {\n const results = await Promise.all(\n this.clients.map(client => client.getHistoricalApy(args))\n );\n\n // Aggregate all data points\n const allDataPoints = results.flat();\n\n // Group by timestamp and calculate average\n const timestampMap = new Map<string, number[]>();\n for (const point of allDataPoints) {\n const values = timestampMap.get(point.timestamp) || [];\n values.push(parseFloat(point.value));\n timestampMap.set(point.timestamp, values);\n }\n\n // Calculate average for each timestamp\n const aggregatedData: ApyDataPoint[] = [];\n for (const [timestamp, values] of timestampMap) {\n const avgValue = values.reduce((a, b) => a + b, 0) / values.length;\n aggregatedData.push({\n timestamp,\n value: avgValue.toString(),\n });\n }\n\n // Sort by timestamp ascending\n aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));\n\n return aggregatedData;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/stats-client.ts"],"sourcesContent":["import {\n GetManageOperationsArgs,\n ManageOperation,\n ManageOperationsResponse,\n} from '@pyxisjs/core';\n\nexport class PyxisStatsClient {\n private readonly baseUrl: string;\n\n constructor(baseUrl: string = 'https://stats.pyxisfinance.xyz/v1') {\n this.baseUrl = baseUrl;\n }\n\n async getManageOperations({\n vaultId,\n startTime,\n endTime,\n limit = 100,\n }: GetManageOperationsArgs): Promise<ManageOperation[]> {\n const params = new URLSearchParams({\n start_time: startTime.toString(),\n end_time: endTime.toString(),\n limit: limit.toString(),\n });\n\n const url = `${this.baseUrl}/vaults/${vaultId}/manage-operations?${params}`;\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch manage operations: ${response.status} ${response.statusText}`\n );\n }\n\n const data: ManageOperationsResponse = await response.json();\n\n if (data.code !== 0) {\n throw new Error(\n `Manage operations API error: ${data.message} (code: ${data.code})`\n );\n }\n\n // Deduplicate operations by ID to handle multiple deployments\n const uniqueOperations = data.data.items.filter(\n (op, index, self) => index === self.findIndex(o => o.id === op.id)\n );\n\n uniqueOperations.sort((a, b) => b.event_timestamp - a.event_timestamp);\n\n return uniqueOperations;\n }\n}\n"],"mappings":";AAMO,IAAM,mBAAN,MAAuB;AAAA,EAG5B,YAAY,UAAkB,qCAAqC;AACjE,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,GAAwD;AACtD,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,YAAY,UAAU,SAAS;AAAA,MAC/B,UAAU,QAAQ,SAAS;AAAA,MAC3B,OAAO,MAAM,SAAS;AAAA,IACxB,CAAC;AAED,UAAM,MAAM,GAAG,KAAK,OAAO,WAAW,OAAO,sBAAsB,MAAM;AAEzE,UAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,sCAAsC,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,MAC9E;AAAA,IACF;AAEA,UAAM,OAAiC,MAAM,SAAS,KAAK;AAE3D,QAAI,KAAK,SAAS,GAAG;AACnB,YAAM,IAAI;AAAA,QACR,gCAAgC,KAAK,OAAO,WAAW,KAAK,IAAI;AAAA,MAClE;AAAA,IACF;AAGA,UAAM,mBAAmB,KAAK,KAAK,MAAM;AAAA,MACvC,CAAC,IAAI,OAAO,SAAS,UAAU,KAAK,UAAU,OAAK,EAAE,OAAO,GAAG,EAAE;AAAA,IACnE;AAEA,qBAAiB,KAAK,CAAC,GAAG,MAAM,EAAE,kBAAkB,EAAE,eAAe;AAErE,WAAO;AAAA,EACT;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyxisjs/client",
3
- "version": "0.2.7",
3
+ "version": "0.3.1",
4
4
  "description": "Pyxis SDK Client",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -30,9 +30,8 @@
30
30
  }
31
31
  },
32
32
  "dependencies": {
33
- "dayjs": "^1.11.19",
34
- "@pyxisjs/chains": "0.2.7",
35
- "@pyxisjs/core": "0.2.7"
33
+ "@pyxisjs/chains": "0.3.1",
34
+ "@pyxisjs/core": "0.3.1"
36
35
  },
37
36
  "devDependencies": {
38
37
  "tsup": "^8.0.0",