@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 +1 -1
- package/dist/index.d.mts +6 -61
- package/dist/index.d.ts +6 -61
- package/dist/index.js +33 -102
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +33 -102
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -4
package/LICENSE
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,64 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GetManageOperationsArgs, ManageOperation } from '@pyxisjs/core';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 {
|
|
9
|
+
export { PyxisStatsClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,64 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GetManageOperationsArgs, ManageOperation } from '@pyxisjs/core';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 {
|
|
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
|
-
|
|
23
|
+
PyxisStatsClient: () => PyxisStatsClient
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(index_exports);
|
|
26
26
|
|
|
27
|
-
//
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
129
|
-
|
|
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
|
-
|
|
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","
|
|
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
|
-
//
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
103
|
-
|
|
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
|
-
|
|
38
|
+
PyxisStatsClient
|
|
108
39
|
};
|
|
109
40
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
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.
|
|
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
|
-
"
|
|
34
|
-
"@pyxisjs/
|
|
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",
|