@pyxisjs/client 0.3.0 → 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,66 +1,9 @@
1
- import { GetActivitiesArgs, VaultActivity, VaultTvlArgs, HistoricalApyArgs, ExchangeRateEvent, ApyDataPoint, GetManageOperationsArgs, ManageOperation, 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
- getManageOperations(args: GetManageOperationsArgs): Promise<ManageOperation[]>;
16
- }
17
- /**
18
- * PyxisAnalyticsClient - Multi-chain analytics client
19
- *
20
- * This client aggregates data from multiple chain-specific analytics clients.
21
- * Each method fetches data from all clients and combines the results.
22
- *
23
- * @example
24
- * ```typescript
25
- * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);
26
- * const evmClient = new EVMAnalyticsClient(evmAdapter); // future
27
- * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);
28
- *
29
- * const activities = await client.getActivities({ vault: '0x...', page: 1 });
30
- * ```
31
- */
32
- declare class PyxisAnalyticsClient implements PyxisAnalyticsAPI {
33
- private clients;
34
- constructor(clients: BaseAnalyticsClient[]);
35
- /**
36
- * Get vault activities with pagination from all clients
37
- * Aggregates activities from all clients
38
- */
39
- getActivities(args: GetActivitiesArgs): Promise<{
40
- activities: VaultActivity[];
41
- total: number;
42
- }>;
43
- /**
44
- * Get total value locked in base asset from all clients
45
- * Returns the sum of TVL from all clients
46
- */
47
- getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
48
- /**
49
- * Get exchange rate update events from all clients
50
- * Aggregates and sorts events by timestamp
51
- */
52
- getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
53
- /**
54
- * Get 30-day APY for a vault
55
- * Returns the average APY across all clients
56
- */
57
- get30DayApy(vault: string): Promise<string>;
58
- /**
59
- * Get historical APY data points from all clients
60
- * Aggregates data points and averages values for matching timestamps
61
- */
62
- getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
63
- getManageOperations(args: GetManageOperationsArgs): Promise<ManageOperation[]>;
3
+ declare class PyxisStatsClient {
4
+ private readonly baseUrl;
5
+ constructor(baseUrl?: string);
6
+ getManageOperations({ vaultId, startTime, endTime, limit, }: GetManageOperationsArgs): Promise<ManageOperation[]>;
64
7
  }
65
8
 
66
- export { type PyxisAnalyticsAPI, PyxisAnalyticsClient };
9
+ export { PyxisStatsClient };
package/dist/index.d.ts CHANGED
@@ -1,66 +1,9 @@
1
- import { GetActivitiesArgs, VaultActivity, VaultTvlArgs, HistoricalApyArgs, ExchangeRateEvent, ApyDataPoint, GetManageOperationsArgs, ManageOperation, 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
- getManageOperations(args: GetManageOperationsArgs): Promise<ManageOperation[]>;
16
- }
17
- /**
18
- * PyxisAnalyticsClient - Multi-chain analytics client
19
- *
20
- * This client aggregates data from multiple chain-specific analytics clients.
21
- * Each method fetches data from all clients and combines the results.
22
- *
23
- * @example
24
- * ```typescript
25
- * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);
26
- * const evmClient = new EVMAnalyticsClient(evmAdapter); // future
27
- * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);
28
- *
29
- * const activities = await client.getActivities({ vault: '0x...', page: 1 });
30
- * ```
31
- */
32
- declare class PyxisAnalyticsClient implements PyxisAnalyticsAPI {
33
- private clients;
34
- constructor(clients: BaseAnalyticsClient[]);
35
- /**
36
- * Get vault activities with pagination from all clients
37
- * Aggregates activities from all clients
38
- */
39
- getActivities(args: GetActivitiesArgs): Promise<{
40
- activities: VaultActivity[];
41
- total: number;
42
- }>;
43
- /**
44
- * Get total value locked in base asset from all clients
45
- * Returns the sum of TVL from all clients
46
- */
47
- getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
48
- /**
49
- * Get exchange rate update events from all clients
50
- * Aggregates and sorts events by timestamp
51
- */
52
- getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
53
- /**
54
- * Get 30-day APY for a vault
55
- * Returns the average APY across all clients
56
- */
57
- get30DayApy(vault: string): Promise<string>;
58
- /**
59
- * Get historical APY data points from all clients
60
- * Aggregates data points and averages values for matching timestamps
61
- */
62
- getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
63
- getManageOperations(args: GetManageOperationsArgs): Promise<ManageOperation[]>;
3
+ declare class PyxisStatsClient {
4
+ private readonly baseUrl;
5
+ constructor(baseUrl?: string);
6
+ getManageOperations({ vaultId, startTime, endTime, limit, }: GetManageOperationsArgs): Promise<ManageOperation[]>;
64
7
  }
65
8
 
66
- export { type PyxisAnalyticsAPI, PyxisAnalyticsClient };
9
+ export { PyxisStatsClient };
package/dist/index.js CHANGED
@@ -20,120 +20,40 @@ 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);
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
+ );
119
55
  }
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
- });
127
- }
128
- aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
129
- return aggregatedData;
130
- }
131
- async getManageOperations(args) {
132
- const results = await Promise.all(
133
- this.clients.map((client) => client.getManageOperations(args))
134
- );
135
- const allOperations = results.flat();
136
- const uniqueOperations = allOperations.filter(
56
+ const uniqueOperations = data.data.items.filter(
137
57
  (op, index, self) => index === self.findIndex((o) => o.id === op.id)
138
58
  );
139
59
  uniqueOperations.sort((a, b) => b.event_timestamp - a.event_timestamp);
@@ -142,6 +62,6 @@ var PyxisAnalyticsClient = class {
142
62
  };
143
63
  // Annotate the CommonJS export names for ESM import in node:
144
64
  0 && (module.exports = {
145
- PyxisAnalyticsClient
65
+ PyxisStatsClient
146
66
  });
147
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 GetManageOperationsArgs,\n HistoricalApyArgs,\n ManageOperation,\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 getManageOperations(\n args: GetManageOperationsArgs\n ): Promise<ManageOperation[]>;\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 async getManageOperations(\n args: GetManageOperationsArgs\n ): Promise<ManageOperation[]> {\n const results = await Promise.all(\n this.clients.map(client => client.getManageOperations(args))\n );\n\n const allOperations = results.flat();\n\n // Deduplicate operations by ID to handle multiple deployments\n const uniqueOperations = allOperations.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":"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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,113 +1,33 @@
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);
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
+ );
93
29
  }
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
- });
101
- }
102
- aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
103
- return aggregatedData;
104
- }
105
- async getManageOperations(args) {
106
- const results = await Promise.all(
107
- this.clients.map((client) => client.getManageOperations(args))
108
- );
109
- const allOperations = results.flat();
110
- const uniqueOperations = allOperations.filter(
30
+ const uniqueOperations = data.data.items.filter(
111
31
  (op, index, self) => index === self.findIndex((o) => o.id === op.id)
112
32
  );
113
33
  uniqueOperations.sort((a, b) => b.event_timestamp - a.event_timestamp);
@@ -115,6 +35,6 @@ var PyxisAnalyticsClient = class {
115
35
  }
116
36
  };
117
37
  export {
118
- PyxisAnalyticsClient
38
+ PyxisStatsClient
119
39
  };
120
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 GetManageOperationsArgs,\n HistoricalApyArgs,\n ManageOperation,\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 getManageOperations(\n args: GetManageOperationsArgs\n ): Promise<ManageOperation[]>;\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 async getManageOperations(\n args: GetManageOperationsArgs\n ): Promise<ManageOperation[]> {\n const results = await Promise.all(\n this.clients.map(client => client.getManageOperations(args))\n );\n\n const allOperations = results.flat();\n\n // Deduplicate operations by ID to handle multiple deployments\n const uniqueOperations = allOperations.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":"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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.3.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
- "dayjs": "^1.11.19",
34
- "@pyxisjs/chains": "0.3.0",
35
- "@pyxisjs/core": "0.3.0"
33
+ "@pyxisjs/chains": "0.3.1",
34
+ "@pyxisjs/core": "0.3.1"
36
35
  },
37
36
  "devDependencies": {
38
37
  "tsup": "^8.0.0",