@pyxisjs/client 0.1.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Pyxis Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,124 @@
1
+ import { QuoteDepositArgs, QuoteWithdrawArgs, GetDepositRateInQuoteSafeArgs, GetWithdrawRateInQuoteSafeArgs, BuildDepositTxArgs, TransactionPayload, BuildWithdrawTxArgs, BuildReclaimWithdrawalRequestTxArgs, BuildCancelWithdrawalRequestTxArgs, GetMinimumRequestAgeArgs, GetWithdrawalRequestsOfUserArgs, PyxisWithdrawalRequest, BaseChainAdapter, GetActivitiesArgs, VaultActivity, VaultTvlArgs, HistoricalApyArgs, ExchangeRateEvent, ApyDataPoint, BaseAnalyticsClient, ChainType } from '@pyxisjs/core';
2
+
3
+ /**
4
+ * Chain-agnostic Vault API implementation
5
+ */
6
+
7
+ interface MultiChainVaultAPI {
8
+ quoteDeposit(args: QuoteDepositArgs): Promise<string>;
9
+ quoteWithdraw(args: QuoteWithdrawArgs): Promise<string>;
10
+ getDepositRateInQuoteSafe(args: GetDepositRateInQuoteSafeArgs): Promise<string>;
11
+ getWithdrawRateInQuoteSafe(args: GetWithdrawRateInQuoteSafeArgs): Promise<string>;
12
+ buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload>;
13
+ buildWithdrawTx(args: BuildWithdrawTxArgs): Promise<TransactionPayload>;
14
+ buildReclaimWithdrawalRequestTx(args: BuildReclaimWithdrawalRequestTxArgs): Promise<TransactionPayload>;
15
+ buildCancelWithdrawalRequestTx(args: BuildCancelWithdrawalRequestTxArgs): Promise<TransactionPayload>;
16
+ getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number>;
17
+ getUserWithdrawalRequests(args: GetWithdrawalRequestsOfUserArgs): Promise<PyxisWithdrawalRequest[]>;
18
+ }
19
+ declare class MultiChainVaultClient implements MultiChainVaultAPI {
20
+ private adapter;
21
+ constructor(adapter: BaseChainAdapter<any>);
22
+ /**
23
+ * Get function signature using the new configuration system
24
+ */
25
+ private getFunctionSignature;
26
+ getWithdrawRateInQuoteSafe(args: GetWithdrawRateInQuoteSafeArgs): Promise<string>;
27
+ getDepositRateInQuoteSafe(args: GetDepositRateInQuoteSafeArgs): Promise<string>;
28
+ quoteDeposit({ vault, asset, amount, }: QuoteDepositArgs): Promise<string>;
29
+ quoteWithdraw({ vault, amount, wantAsset, }: QuoteWithdrawArgs): Promise<string>;
30
+ buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload>;
31
+ buildWithdrawTx(args: BuildWithdrawTxArgs): Promise<TransactionPayload>;
32
+ buildReclaimWithdrawalRequestTx(args: BuildReclaimWithdrawalRequestTxArgs): Promise<TransactionPayload>;
33
+ buildCancelWithdrawalRequestTx(args: BuildCancelWithdrawalRequestTxArgs): Promise<TransactionPayload>;
34
+ getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number>;
35
+ getUserWithdrawalRequests({ flag, userAddress, vault, matchAll, }: GetWithdrawalRequestsOfUserArgs): Promise<PyxisWithdrawalRequest[]>;
36
+ }
37
+
38
+ /**
39
+ * PyxisAnalyticsAPI - Public interface for analytics operations
40
+ */
41
+ interface PyxisAnalyticsAPI {
42
+ getActivities(args: GetActivitiesArgs): Promise<{
43
+ activities: VaultActivity[];
44
+ total: number;
45
+ }>;
46
+ getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
47
+ getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
48
+ get30DayApy(vault: string): Promise<string>;
49
+ getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
50
+ }
51
+ /**
52
+ * PyxisAnalyticsClient - Multi-chain analytics client
53
+ *
54
+ * This client aggregates data from multiple chain-specific analytics clients.
55
+ * Each method fetches data from all clients and combines the results.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);
60
+ * const evmClient = new EVMAnalyticsClient(evmAdapter); // future
61
+ * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);
62
+ *
63
+ * const activities = await client.getActivities({ vault: '0x...', page: 1 });
64
+ * ```
65
+ */
66
+ declare class PyxisAnalyticsClient implements PyxisAnalyticsAPI {
67
+ private clients;
68
+ constructor(clients: BaseAnalyticsClient[]);
69
+ /**
70
+ * Get vault activities with pagination from all clients
71
+ * Aggregates activities from all clients
72
+ */
73
+ getActivities(args: GetActivitiesArgs): Promise<{
74
+ activities: VaultActivity[];
75
+ total: number;
76
+ }>;
77
+ /**
78
+ * Get total value locked in base asset from all clients
79
+ * Returns the sum of TVL from all clients
80
+ */
81
+ getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
82
+ /**
83
+ * Get exchange rate update events from all clients
84
+ * Aggregates and sorts events by timestamp
85
+ */
86
+ getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
87
+ /**
88
+ * Get 30-day APY for a vault
89
+ * Returns the average APY across all clients
90
+ */
91
+ get30DayApy(vault: string): Promise<string>;
92
+ /**
93
+ * Get historical APY data points from all clients
94
+ * Aggregates data points and averages values for matching timestamps
95
+ */
96
+ getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
97
+ }
98
+
99
+ interface ContractConfig {
100
+ name: string;
101
+ abi: Record<ChainType, any>;
102
+ functionSignatures: Partial<Record<ChainType, Partial<Record<string, string>>>>;
103
+ }
104
+ interface ContractsConfig {
105
+ [key: string]: ContractConfig;
106
+ }
107
+ /**
108
+ * Contract configurations with real addresses and ABIs
109
+ */
110
+ declare const CONTRACTS: Record<string, ContractConfig>;
111
+ /**
112
+ * Get function signature for a contract on a specific chain
113
+ * @param type - The chain type (EVM or MoveVM)
114
+ * @param contractName - The name of the contract
115
+ * @param functionName - The name of the function
116
+ * @param contractAddress - The address of the contract (required for MoveVM)
117
+ */
118
+ declare function getFunctionSignature(type: ChainType, contractName: string, functionName: string, contractAddress: string): string;
119
+ /**
120
+ * Get contract ABI for a specific chain type
121
+ */
122
+ declare function getContractABI(type: ChainType, contractName: string): any;
123
+
124
+ export { CONTRACTS, type ContractConfig, type ContractsConfig, type MultiChainVaultAPI, MultiChainVaultClient, type PyxisAnalyticsAPI, PyxisAnalyticsClient, getContractABI, getFunctionSignature };
@@ -0,0 +1,124 @@
1
+ import { QuoteDepositArgs, QuoteWithdrawArgs, GetDepositRateInQuoteSafeArgs, GetWithdrawRateInQuoteSafeArgs, BuildDepositTxArgs, TransactionPayload, BuildWithdrawTxArgs, BuildReclaimWithdrawalRequestTxArgs, BuildCancelWithdrawalRequestTxArgs, GetMinimumRequestAgeArgs, GetWithdrawalRequestsOfUserArgs, PyxisWithdrawalRequest, BaseChainAdapter, GetActivitiesArgs, VaultActivity, VaultTvlArgs, HistoricalApyArgs, ExchangeRateEvent, ApyDataPoint, BaseAnalyticsClient, ChainType } from '@pyxisjs/core';
2
+
3
+ /**
4
+ * Chain-agnostic Vault API implementation
5
+ */
6
+
7
+ interface MultiChainVaultAPI {
8
+ quoteDeposit(args: QuoteDepositArgs): Promise<string>;
9
+ quoteWithdraw(args: QuoteWithdrawArgs): Promise<string>;
10
+ getDepositRateInQuoteSafe(args: GetDepositRateInQuoteSafeArgs): Promise<string>;
11
+ getWithdrawRateInQuoteSafe(args: GetWithdrawRateInQuoteSafeArgs): Promise<string>;
12
+ buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload>;
13
+ buildWithdrawTx(args: BuildWithdrawTxArgs): Promise<TransactionPayload>;
14
+ buildReclaimWithdrawalRequestTx(args: BuildReclaimWithdrawalRequestTxArgs): Promise<TransactionPayload>;
15
+ buildCancelWithdrawalRequestTx(args: BuildCancelWithdrawalRequestTxArgs): Promise<TransactionPayload>;
16
+ getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number>;
17
+ getUserWithdrawalRequests(args: GetWithdrawalRequestsOfUserArgs): Promise<PyxisWithdrawalRequest[]>;
18
+ }
19
+ declare class MultiChainVaultClient implements MultiChainVaultAPI {
20
+ private adapter;
21
+ constructor(adapter: BaseChainAdapter<any>);
22
+ /**
23
+ * Get function signature using the new configuration system
24
+ */
25
+ private getFunctionSignature;
26
+ getWithdrawRateInQuoteSafe(args: GetWithdrawRateInQuoteSafeArgs): Promise<string>;
27
+ getDepositRateInQuoteSafe(args: GetDepositRateInQuoteSafeArgs): Promise<string>;
28
+ quoteDeposit({ vault, asset, amount, }: QuoteDepositArgs): Promise<string>;
29
+ quoteWithdraw({ vault, amount, wantAsset, }: QuoteWithdrawArgs): Promise<string>;
30
+ buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload>;
31
+ buildWithdrawTx(args: BuildWithdrawTxArgs): Promise<TransactionPayload>;
32
+ buildReclaimWithdrawalRequestTx(args: BuildReclaimWithdrawalRequestTxArgs): Promise<TransactionPayload>;
33
+ buildCancelWithdrawalRequestTx(args: BuildCancelWithdrawalRequestTxArgs): Promise<TransactionPayload>;
34
+ getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number>;
35
+ getUserWithdrawalRequests({ flag, userAddress, vault, matchAll, }: GetWithdrawalRequestsOfUserArgs): Promise<PyxisWithdrawalRequest[]>;
36
+ }
37
+
38
+ /**
39
+ * PyxisAnalyticsAPI - Public interface for analytics operations
40
+ */
41
+ interface PyxisAnalyticsAPI {
42
+ getActivities(args: GetActivitiesArgs): Promise<{
43
+ activities: VaultActivity[];
44
+ total: number;
45
+ }>;
46
+ getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
47
+ getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
48
+ get30DayApy(vault: string): Promise<string>;
49
+ getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
50
+ }
51
+ /**
52
+ * PyxisAnalyticsClient - Multi-chain analytics client
53
+ *
54
+ * This client aggregates data from multiple chain-specific analytics clients.
55
+ * Each method fetches data from all clients and combines the results.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const aptosClient = new AptosAnalyticsClient(baseAdapter, analyticsAdapter);
60
+ * const evmClient = new EVMAnalyticsClient(evmAdapter); // future
61
+ * const client = new PyxisAnalyticsClient([aptosClient, evmClient]);
62
+ *
63
+ * const activities = await client.getActivities({ vault: '0x...', page: 1 });
64
+ * ```
65
+ */
66
+ declare class PyxisAnalyticsClient implements PyxisAnalyticsAPI {
67
+ private clients;
68
+ constructor(clients: BaseAnalyticsClient[]);
69
+ /**
70
+ * Get vault activities with pagination from all clients
71
+ * Aggregates activities from all clients
72
+ */
73
+ getActivities(args: GetActivitiesArgs): Promise<{
74
+ activities: VaultActivity[];
75
+ total: number;
76
+ }>;
77
+ /**
78
+ * Get total value locked in base asset from all clients
79
+ * Returns the sum of TVL from all clients
80
+ */
81
+ getTvlInBaseAsset(args: VaultTvlArgs): Promise<string>;
82
+ /**
83
+ * Get exchange rate update events from all clients
84
+ * Aggregates and sorts events by timestamp
85
+ */
86
+ getUpdateExchangeRateEvents(args: HistoricalApyArgs): Promise<ExchangeRateEvent[]>;
87
+ /**
88
+ * Get 30-day APY for a vault
89
+ * Returns the average APY across all clients
90
+ */
91
+ get30DayApy(vault: string): Promise<string>;
92
+ /**
93
+ * Get historical APY data points from all clients
94
+ * Aggregates data points and averages values for matching timestamps
95
+ */
96
+ getHistoricalApy(args: HistoricalApyArgs): Promise<ApyDataPoint[]>;
97
+ }
98
+
99
+ interface ContractConfig {
100
+ name: string;
101
+ abi: Record<ChainType, any>;
102
+ functionSignatures: Partial<Record<ChainType, Partial<Record<string, string>>>>;
103
+ }
104
+ interface ContractsConfig {
105
+ [key: string]: ContractConfig;
106
+ }
107
+ /**
108
+ * Contract configurations with real addresses and ABIs
109
+ */
110
+ declare const CONTRACTS: Record<string, ContractConfig>;
111
+ /**
112
+ * Get function signature for a contract on a specific chain
113
+ * @param type - The chain type (EVM or MoveVM)
114
+ * @param contractName - The name of the contract
115
+ * @param functionName - The name of the function
116
+ * @param contractAddress - The address of the contract (required for MoveVM)
117
+ */
118
+ declare function getFunctionSignature(type: ChainType, contractName: string, functionName: string, contractAddress: string): string;
119
+ /**
120
+ * Get contract ABI for a specific chain type
121
+ */
122
+ declare function getContractABI(type: ChainType, contractName: string): any;
123
+
124
+ export { CONTRACTS, type ContractConfig, type ContractsConfig, type MultiChainVaultAPI, MultiChainVaultClient, type PyxisAnalyticsAPI, PyxisAnalyticsClient, getContractABI, getFunctionSignature };
package/dist/index.js ADDED
@@ -0,0 +1,445 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ CONTRACTS: () => CONTRACTS,
24
+ MultiChainVaultClient: () => MultiChainVaultClient,
25
+ PyxisAnalyticsClient: () => PyxisAnalyticsClient,
26
+ getContractABI: () => getContractABI,
27
+ getFunctionSignature: () => getFunctionSignature
28
+ });
29
+ module.exports = __toCommonJS(index_exports);
30
+
31
+ // src/vault-client.ts
32
+ var import_core2 = require("@pyxisjs/core");
33
+ var import_core3 = require("@pyxisjs/core");
34
+
35
+ // src/constants.ts
36
+ var import_chains = require("@pyxisjs/chains");
37
+ var import_core = require("@pyxisjs/core");
38
+ var CONTRACTS = {
39
+ accountant: {
40
+ name: "Accountant",
41
+ abi: {
42
+ [import_core.ChainType.MoveVM]: import_chains.AccountantAptosABI,
43
+ [import_core.ChainType.EVM]: import_chains.AccountantABI
44
+ },
45
+ functionSignatures: {
46
+ [import_core.ChainType.MoveVM]: {
47
+ calculate_shares_from_assets_safe: "{address}::accountant::calculate_shares_from_assets_safe",
48
+ calculate_assets_from_shares_safe: "{address}::accountant::calculate_assets_from_shares_safe",
49
+ get_withdraw_rate_in_quote_safe: "{address}::accountant::get_withdraw_rate_in_quote_safe",
50
+ get_deposit_rate_in_quote_safe: "{address}::accountant::get_deposit_rate_in_quote_safe"
51
+ },
52
+ [import_core.ChainType.EVM]: {
53
+ calculate_shares_from_assets_safe: "calculateSharesFromAssetsSafe",
54
+ calculate_assets_from_shares_safe: "calculateAssetsFromSharesSafe",
55
+ get_withdraw_rate_in_quote_safe: "getWithdrawRateInQuoteSafe",
56
+ get_deposit_rate_in_quote_safe: "getDepositRateInQuoteSafe"
57
+ }
58
+ }
59
+ },
60
+ teller: {
61
+ name: "Teller",
62
+ abi: {
63
+ [import_core.ChainType.MoveVM]: import_chains.TellerAptosABI,
64
+ [import_core.ChainType.EVM]: import_chains.TellerWithMultiAssetSupportABI
65
+ },
66
+ functionSignatures: {
67
+ [import_core.ChainType.MoveVM]: {
68
+ deposit: "{address}::teller::deposit",
69
+ deposit_with_referral: "{address}::teller::deposit_with_referral",
70
+ deposit_for: "{address}::teller::deposit_for",
71
+ mint_shares: "{address}::teller::mint_shares",
72
+ create_withdrawal_request: "{address}::teller::create_withdrawal_request"
73
+ },
74
+ [import_core.ChainType.EVM]: {
75
+ deposit: "deposit",
76
+ deposit_with_referral: "depositWithReferral",
77
+ deposit_for: "depositFor",
78
+ mint_shares: "mintShares",
79
+ create_withdrawal_request: "createWithdrawalRequest"
80
+ }
81
+ }
82
+ },
83
+ atomicQueue: {
84
+ name: "AtomicQueue",
85
+ abi: {
86
+ [import_core.ChainType.MoveVM]: import_chains.AtomicQueueAptosABI,
87
+ [import_core.ChainType.EVM]: import_chains.AtomicQueueABI
88
+ },
89
+ functionSignatures: {
90
+ [import_core.ChainType.MoveVM]: {
91
+ get_minimum_request_age: "{address}::atomic_queue::get_minimum_request_age",
92
+ get_all_atomic_requests: "{address}::atomic_queue::get_all_atomic_requests",
93
+ get_request_update_cooldown: "{address}::atomic_queue::get_request_update_cooldown",
94
+ get_request_updated_at: "{address}::atomic_queue::get_request_updated_at",
95
+ get_user_atomic_request: "{address}::atomic_queue::get_user_atomic_request",
96
+ get_user_atomic_requests: "{address}::atomic_queue::get_user_atomic_requests",
97
+ is_atomic_request_valid: "{address}::atomic_queue::is_atomic_request_valid",
98
+ is_paused: "{address}::atomic_queue::is_paused",
99
+ update_atomic_request: "{address}::atomic_queue::update_atomic_request",
100
+ cancel_atomic_request: "{address}::atomic_queue::cancel_atomic_request",
101
+ cancel_withdrawal_request: "{address}::atomic_queue::cancel_atomic_request"
102
+ },
103
+ [import_core.ChainType.EVM]: {
104
+ get_minimum_request_age: "getMinimumRequestAge",
105
+ cancel_withdrawal_request: "cancelWithdrawalRequest",
106
+ reclaim_withdrawal_request: "reclaimWithdrawalRequest"
107
+ }
108
+ }
109
+ },
110
+ vault: {
111
+ name: "Vault",
112
+ abi: {
113
+ [import_core.ChainType.MoveVM]: import_chains.VaultAptosABI,
114
+ [import_core.ChainType.EVM]: import_chains.BoringVaultABI
115
+ },
116
+ functionSignatures: {
117
+ [import_core.ChainType.MoveVM]: {
118
+ get_vault_config: "{address}::vault::get_vault_config",
119
+ get_total_assets: "{address}::vault::get_total_assets",
120
+ get_total_shares: "{address}::vault::get_total_shares"
121
+ },
122
+ [import_core.ChainType.EVM]: {
123
+ get_vault_config: "getVaultConfig",
124
+ get_total_assets: "totalAssets",
125
+ get_total_shares: "totalShares"
126
+ }
127
+ }
128
+ }
129
+ };
130
+ function getFunctionSignature(type, contractName, functionName, contractAddress) {
131
+ const contract = CONTRACTS[contractName];
132
+ if (!contract) {
133
+ throw new Error(`Contract ${contractName} not found`);
134
+ }
135
+ const chainSignatures = contract.functionSignatures[type];
136
+ if (!chainSignatures) {
137
+ throw new Error(
138
+ `Chain type ${type} not supported for contract ${contractName}`
139
+ );
140
+ }
141
+ const signature = chainSignatures[functionName];
142
+ if (!signature) {
143
+ throw new Error(
144
+ `Function ${functionName} not found in contract ${contractName}`
145
+ );
146
+ }
147
+ return signature.replace("{address}", contractAddress);
148
+ }
149
+ function getContractABI(type, contractName) {
150
+ const contract = CONTRACTS[contractName];
151
+ if (!contract) {
152
+ throw new Error(`Contract ${contractName} not found`);
153
+ }
154
+ const abi = contract.abi[type];
155
+ if (!abi) {
156
+ console.warn(`ABI for ${contractName} on ${type} is missing`);
157
+ return [];
158
+ }
159
+ return abi;
160
+ }
161
+
162
+ // src/vault-client.ts
163
+ var MultiChainVaultClient = class {
164
+ constructor(adapter) {
165
+ this.adapter = adapter;
166
+ }
167
+ /**
168
+ * Get function signature using the new configuration system
169
+ */
170
+ getFunctionSignature(contractName, functionName) {
171
+ const config = (0, import_core2.getChainConfig)(this.adapter.chain.id);
172
+ const contractAddress = this.adapter.getContractAddress(contractName);
173
+ return getFunctionSignature(
174
+ config.type,
175
+ contractName,
176
+ functionName,
177
+ contractAddress
178
+ );
179
+ }
180
+ async getWithdrawRateInQuoteSafe(args) {
181
+ const functionSignature = this.getFunctionSignature(
182
+ "accountant",
183
+ "get_withdraw_rate_in_quote_safe"
184
+ );
185
+ const result = await this.adapter.viewContract({
186
+ function: functionSignature,
187
+ arguments: [args.vault, args.quoteAsset]
188
+ });
189
+ return result;
190
+ }
191
+ async getDepositRateInQuoteSafe(args) {
192
+ const functionSignature = this.getFunctionSignature(
193
+ "accountant",
194
+ "get_deposit_rate_in_quote_safe"
195
+ );
196
+ const result = await this.adapter.viewContract({
197
+ function: functionSignature,
198
+ arguments: [args.vault, args.quoteAsset]
199
+ });
200
+ return result;
201
+ }
202
+ async quoteDeposit({
203
+ vault,
204
+ asset,
205
+ amount
206
+ }) {
207
+ const functionSignature = this.getFunctionSignature(
208
+ "accountant",
209
+ "calculate_shares_from_assets_safe"
210
+ );
211
+ const result = await this.adapter.viewContract({
212
+ function: functionSignature,
213
+ arguments: [vault, asset, amount]
214
+ });
215
+ return result;
216
+ }
217
+ async quoteWithdraw({
218
+ vault,
219
+ amount,
220
+ wantAsset
221
+ }) {
222
+ const functionSignature = this.getFunctionSignature(
223
+ "accountant",
224
+ "calculate_assets_from_shares_safe"
225
+ );
226
+ const result = await this.adapter.viewContract({
227
+ function: functionSignature,
228
+ arguments: [vault, wantAsset, amount]
229
+ });
230
+ return result;
231
+ }
232
+ async buildDepositTx(args) {
233
+ const functionSignature = this.getFunctionSignature("teller", "deposit");
234
+ return await this.adapter.buildPayload({
235
+ function: functionSignature,
236
+ arguments: [args.vault, args.asset, args.amount, args.minimumMint]
237
+ });
238
+ }
239
+ async buildWithdrawTx(args) {
240
+ const functionSignature = this.getFunctionSignature(
241
+ "atomicQueue",
242
+ "update_atomic_request"
243
+ );
244
+ return await this.adapter.buildPayload({
245
+ function: functionSignature,
246
+ arguments: [
247
+ args.vault,
248
+ args.offerAsset,
249
+ args.wantAsset,
250
+ args.offerAmount,
251
+ args.price,
252
+ args.deadline
253
+ ]
254
+ });
255
+ }
256
+ async buildReclaimWithdrawalRequestTx(args) {
257
+ const functionSignature = this.getFunctionSignature(
258
+ "atomicQueue",
259
+ "cancel_atomic_request"
260
+ );
261
+ return await this.adapter.buildPayload({
262
+ function: functionSignature,
263
+ arguments: [args.vault, args.offerAsset, args.wantAsset]
264
+ });
265
+ }
266
+ async buildCancelWithdrawalRequestTx(args) {
267
+ const functionSignature = this.getFunctionSignature(
268
+ "atomicQueue",
269
+ "cancel_withdrawal_request"
270
+ );
271
+ return await this.adapter.buildPayload({
272
+ function: functionSignature,
273
+ arguments: [args.vault, args.offerAsset, args.wantAsset]
274
+ });
275
+ }
276
+ async getMinimumRequestAge(args) {
277
+ const functionSignature = this.getFunctionSignature(
278
+ "atomicQueue",
279
+ "get_minimum_request_age"
280
+ );
281
+ const result = await this.adapter.viewContract({
282
+ function: functionSignature,
283
+ arguments: [args.vault]
284
+ });
285
+ return Number(result);
286
+ }
287
+ async getUserWithdrawalRequests({
288
+ flag,
289
+ userAddress,
290
+ vault,
291
+ matchAll = true
292
+ }) {
293
+ const requestFlag = import_core3.PyxisUtils.buildRequestFlags(flag);
294
+ const getUserRequestsFn = this.getFunctionSignature(
295
+ "atomicQueue",
296
+ "get_user_atomic_requests"
297
+ );
298
+ const withdrawalRequests = await this.adapter.viewContract({
299
+ function: getUserRequestsFn,
300
+ arguments: [vault, userAddress, requestFlag, matchAll]
301
+ });
302
+ const getUpdatedAtFn = this.getFunctionSignature(
303
+ "atomicQueue",
304
+ "get_request_updated_at"
305
+ );
306
+ const updatedAtResults = await Promise.allSettled(
307
+ withdrawalRequests.map(
308
+ (request) => this.adapter.viewContract({
309
+ function: getUpdatedAtFn,
310
+ arguments: [
311
+ vault,
312
+ userAddress,
313
+ request.offer_token.inner,
314
+ request.want_token.inner
315
+ ]
316
+ })
317
+ )
318
+ );
319
+ return withdrawalRequests.map(
320
+ (request, index) => {
321
+ const result = updatedAtResults[index];
322
+ let updatedAt;
323
+ if (result.status === "fulfilled") {
324
+ updatedAt = result.value;
325
+ }
326
+ return import_core3.PyxisUtils.mapOnchainToWithdrawalRequest(request, updatedAt);
327
+ }
328
+ );
329
+ }
330
+ };
331
+
332
+ // ../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js
333
+ var isProduction = process.env.NODE_ENV === "production";
334
+ var prefix = "Invariant failed";
335
+ function invariant(condition, message) {
336
+ if (condition) {
337
+ return;
338
+ }
339
+ if (isProduction) {
340
+ throw new Error(prefix);
341
+ }
342
+ var provided = typeof message === "function" ? message() : message;
343
+ var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
344
+ throw new Error(value);
345
+ }
346
+
347
+ // src/analytics-client.ts
348
+ var PyxisAnalyticsClient = class {
349
+ constructor(clients) {
350
+ invariant(clients.length > 0, "At least one analytics client is required");
351
+ this.clients = clients;
352
+ }
353
+ /**
354
+ * Get vault activities with pagination from all clients
355
+ * Aggregates activities from all clients
356
+ */
357
+ async getActivities(args) {
358
+ const results = await Promise.all(
359
+ this.clients.map((client) => client.getActivities(args))
360
+ );
361
+ const allActivities = results.flatMap((r) => r.activities);
362
+ const totalCount = results.reduce((sum, r) => sum + r.total, 0);
363
+ const pageSize = args.pageSize ?? 10;
364
+ const page = args.page ?? 1;
365
+ const start = (page - 1) * pageSize;
366
+ const paginatedActivities = allActivities.slice(start, start + pageSize);
367
+ return {
368
+ activities: paginatedActivities,
369
+ total: totalCount
370
+ };
371
+ }
372
+ /**
373
+ * Get total value locked in base asset from all clients
374
+ * Returns the sum of TVL from all clients
375
+ */
376
+ async getTvlInBaseAsset(args) {
377
+ const results = await Promise.all(
378
+ this.clients.map((client) => client.getTvlInBaseAsset(args))
379
+ );
380
+ const totalTvl = results.reduce((sum, tvl) => sum + BigInt(tvl), BigInt(0));
381
+ return totalTvl.toString();
382
+ }
383
+ /**
384
+ * Get exchange rate update events from all clients
385
+ * Aggregates and sorts events by timestamp
386
+ */
387
+ async getUpdateExchangeRateEvents(args) {
388
+ const results = await Promise.all(
389
+ this.clients.map((client) => client.getUpdateExchangeRateEvents(args))
390
+ );
391
+ const allEvents = results.flat();
392
+ allEvents.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
393
+ return allEvents;
394
+ }
395
+ /**
396
+ * Get 30-day APY for a vault
397
+ * Returns the average APY across all clients
398
+ */
399
+ async get30DayApy(vault) {
400
+ const results = await Promise.all(
401
+ this.clients.map((client) => client.get30DayApy(vault))
402
+ );
403
+ const validApys = results.filter((apy) => apy !== "0");
404
+ if (validApys.length === 0) {
405
+ return "0";
406
+ }
407
+ const totalApy = validApys.reduce((sum, apy) => sum + parseFloat(apy), 0);
408
+ return (totalApy / validApys.length).toString();
409
+ }
410
+ /**
411
+ * Get historical APY data points from all clients
412
+ * Aggregates data points and averages values for matching timestamps
413
+ */
414
+ async getHistoricalApy(args) {
415
+ const results = await Promise.all(
416
+ this.clients.map((client) => client.getHistoricalApy(args))
417
+ );
418
+ const allDataPoints = results.flat();
419
+ const timestampMap = /* @__PURE__ */ new Map();
420
+ for (const point of allDataPoints) {
421
+ const values = timestampMap.get(point.timestamp) || [];
422
+ values.push(parseFloat(point.value));
423
+ timestampMap.set(point.timestamp, values);
424
+ }
425
+ const aggregatedData = [];
426
+ for (const [timestamp, values] of timestampMap) {
427
+ const avgValue = values.reduce((a, b) => a + b, 0) / values.length;
428
+ aggregatedData.push({
429
+ timestamp,
430
+ value: avgValue.toString()
431
+ });
432
+ }
433
+ aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
434
+ return aggregatedData;
435
+ }
436
+ };
437
+ // Annotate the CommonJS export names for ESM import in node:
438
+ 0 && (module.exports = {
439
+ CONTRACTS,
440
+ MultiChainVaultClient,
441
+ PyxisAnalyticsClient,
442
+ getContractABI,
443
+ getFunctionSignature
444
+ });
445
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/vault-client.ts","../src/constants.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 './vault-client';\nexport * from './analytics-client';\nexport * from './constants';\n","/**\n * Chain-agnostic Vault API implementation\n */\n\nimport {\n BaseChainAdapter,\n getChainConfig,\n TransactionPayload,\n} from '@pyxisjs/core';\nimport {\n BuildCancelWithdrawalRequestTxArgs,\n BuildDepositTxArgs,\n BuildReclaimWithdrawalRequestTxArgs,\n BuildWithdrawTxArgs,\n GetDepositRateInQuoteSafeArgs,\n GetMinimumRequestAgeArgs,\n GetWithdrawalRequestsOfUserArgs,\n GetWithdrawRateInQuoteSafeArgs,\n PyxisOnchainWithdrawalRequest,\n PyxisWithdrawalRequest,\n PyxisUtils,\n QuoteDepositArgs,\n QuoteWithdrawArgs,\n} from '@pyxisjs/core';\n\nimport { getFunctionSignature } from './constants';\n\nexport interface MultiChainVaultAPI {\n quoteDeposit(args: QuoteDepositArgs): Promise<string>;\n quoteWithdraw(args: QuoteWithdrawArgs): Promise<string>;\n getDepositRateInQuoteSafe(\n args: GetDepositRateInQuoteSafeArgs\n ): Promise<string>;\n getWithdrawRateInQuoteSafe(\n args: GetWithdrawRateInQuoteSafeArgs\n ): Promise<string>;\n buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload>;\n buildWithdrawTx(args: BuildWithdrawTxArgs): Promise<TransactionPayload>;\n buildReclaimWithdrawalRequestTx(\n args: BuildReclaimWithdrawalRequestTxArgs\n ): Promise<TransactionPayload>;\n buildCancelWithdrawalRequestTx(\n args: BuildCancelWithdrawalRequestTxArgs\n ): Promise<TransactionPayload>;\n getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number>;\n getUserWithdrawalRequests(\n args: GetWithdrawalRequestsOfUserArgs\n ): Promise<PyxisWithdrawalRequest[]>;\n}\n\nexport class MultiChainVaultClient implements MultiChainVaultAPI {\n constructor(private adapter: BaseChainAdapter<any>) {}\n\n /**\n * Get function signature using the new configuration system\n */\n private getFunctionSignature(\n contractName: 'accountant' | 'teller' | 'atomicQueue',\n functionName: string\n ): string {\n const config = getChainConfig(this.adapter.chain.id);\n const contractAddress = this.adapter.getContractAddress(contractName);\n return getFunctionSignature(\n config.type,\n contractName,\n functionName,\n contractAddress\n );\n }\n\n async getWithdrawRateInQuoteSafe(\n args: GetWithdrawRateInQuoteSafeArgs\n ): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'get_withdraw_rate_in_quote_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [args.vault, args.quoteAsset],\n });\n\n return result;\n }\n\n async getDepositRateInQuoteSafe(\n args: GetDepositRateInQuoteSafeArgs\n ): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'get_deposit_rate_in_quote_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [args.vault, args.quoteAsset],\n });\n\n return result;\n }\n\n async quoteDeposit({\n vault,\n asset,\n amount,\n }: QuoteDepositArgs): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'calculate_shares_from_assets_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [vault, asset, amount],\n });\n\n return result;\n }\n\n async quoteWithdraw({\n vault,\n amount,\n wantAsset,\n }: QuoteWithdrawArgs): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'calculate_assets_from_shares_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [vault, wantAsset, amount],\n });\n\n return result;\n }\n\n async buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload> {\n const functionSignature = this.getFunctionSignature('teller', 'deposit');\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [args.vault, args.asset, args.amount, args.minimumMint],\n });\n }\n\n async buildWithdrawTx(\n args: BuildWithdrawTxArgs\n ): Promise<TransactionPayload> {\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'update_atomic_request'\n );\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [\n args.vault,\n args.offerAsset,\n args.wantAsset,\n args.offerAmount,\n args.price,\n args.deadline,\n ],\n });\n }\n\n async buildReclaimWithdrawalRequestTx(\n args: BuildReclaimWithdrawalRequestTxArgs\n ): Promise<TransactionPayload> {\n // Call cancel_atomic_request to reclaim the request\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'cancel_atomic_request'\n );\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [args.vault, args.offerAsset, args.wantAsset],\n });\n }\n\n async buildCancelWithdrawalRequestTx(\n args: BuildCancelWithdrawalRequestTxArgs\n ): Promise<TransactionPayload> {\n // Update amount to 0 to cancel the request\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'cancel_withdrawal_request'\n );\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [args.vault, args.offerAsset, args.wantAsset],\n });\n }\n\n async getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number> {\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'get_minimum_request_age'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [args.vault],\n });\n\n return Number(result);\n }\n\n async getUserWithdrawalRequests({\n flag,\n userAddress,\n vault,\n matchAll = true,\n }: GetWithdrawalRequestsOfUserArgs): Promise<PyxisWithdrawalRequest[]> {\n const requestFlag = PyxisUtils.buildRequestFlags(flag);\n\n // Get user atomic requests\n const getUserRequestsFn = this.getFunctionSignature(\n 'atomicQueue',\n 'get_user_atomic_requests'\n );\n\n const withdrawalRequests: PyxisOnchainWithdrawalRequest[] =\n await this.adapter.viewContract<PyxisOnchainWithdrawalRequest[]>({\n function: getUserRequestsFn,\n arguments: [vault, userAddress, requestFlag, matchAll],\n });\n\n // Fetch updatedAt for each withdrawal request in parallel\n const getUpdatedAtFn = this.getFunctionSignature(\n 'atomicQueue',\n 'get_request_updated_at'\n );\n\n const updatedAtResults = await Promise.allSettled(\n withdrawalRequests.map((request: PyxisOnchainWithdrawalRequest) =>\n this.adapter.viewContract<string>({\n function: getUpdatedAtFn,\n arguments: [\n vault,\n userAddress,\n request.offer_token.inner,\n request.want_token.inner,\n ],\n })\n )\n );\n\n // Map withdrawal requests with enriched updatedAt data\n return withdrawalRequests.map(\n (request: PyxisOnchainWithdrawalRequest, index: number) => {\n const result = updatedAtResults[index];\n let updatedAt: string | undefined;\n\n if (result.status === 'fulfilled') {\n updatedAt = result.value as string;\n }\n\n return PyxisUtils.mapOnchainToWithdrawalRequest(request, updatedAt);\n }\n );\n }\n}\n","import {\n AccountantAptosABI,\n AtomicQueueAptosABI,\n TellerAptosABI,\n VaultAptosABI,\n AccountantABI,\n AtomicQueueABI,\n BoringVaultABI,\n TellerWithMultiAssetSupportABI,\n} from '@pyxisjs/chains';\nimport { ChainType } from '@pyxisjs/core';\n\nexport interface ContractConfig {\n name: string;\n abi: Record<ChainType, any>;\n functionSignatures: Partial<\n Record<ChainType, Partial<Record<string, string>>>\n >;\n}\n\nexport interface ContractsConfig {\n [key: string]: ContractConfig;\n}\n\n/**\n * Contract configurations with real addresses and ABIs\n */\nexport const CONTRACTS: Record<string, ContractConfig> = {\n accountant: {\n name: 'Accountant',\n abi: {\n [ChainType.MoveVM]: AccountantAptosABI,\n [ChainType.EVM]: AccountantABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n calculate_shares_from_assets_safe:\n '{address}::accountant::calculate_shares_from_assets_safe',\n calculate_assets_from_shares_safe:\n '{address}::accountant::calculate_assets_from_shares_safe',\n get_withdraw_rate_in_quote_safe:\n '{address}::accountant::get_withdraw_rate_in_quote_safe',\n get_deposit_rate_in_quote_safe:\n '{address}::accountant::get_deposit_rate_in_quote_safe',\n },\n [ChainType.EVM]: {\n calculate_shares_from_assets_safe: 'calculateSharesFromAssetsSafe',\n calculate_assets_from_shares_safe: 'calculateAssetsFromSharesSafe',\n get_withdraw_rate_in_quote_safe: 'getWithdrawRateInQuoteSafe',\n get_deposit_rate_in_quote_safe: 'getDepositRateInQuoteSafe',\n },\n },\n },\n teller: {\n name: 'Teller',\n abi: {\n [ChainType.MoveVM]: TellerAptosABI,\n [ChainType.EVM]: TellerWithMultiAssetSupportABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n deposit: '{address}::teller::deposit',\n deposit_with_referral: '{address}::teller::deposit_with_referral',\n deposit_for: '{address}::teller::deposit_for',\n mint_shares: '{address}::teller::mint_shares',\n create_withdrawal_request:\n '{address}::teller::create_withdrawal_request',\n },\n [ChainType.EVM]: {\n deposit: 'deposit',\n deposit_with_referral: 'depositWithReferral',\n deposit_for: 'depositFor',\n mint_shares: 'mintShares',\n create_withdrawal_request: 'createWithdrawalRequest',\n },\n },\n },\n atomicQueue: {\n name: 'AtomicQueue',\n abi: {\n [ChainType.MoveVM]: AtomicQueueAptosABI,\n [ChainType.EVM]: AtomicQueueABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n get_minimum_request_age:\n '{address}::atomic_queue::get_minimum_request_age',\n get_all_atomic_requests:\n '{address}::atomic_queue::get_all_atomic_requests',\n get_request_update_cooldown:\n '{address}::atomic_queue::get_request_update_cooldown',\n get_request_updated_at:\n '{address}::atomic_queue::get_request_updated_at',\n get_user_atomic_request:\n '{address}::atomic_queue::get_user_atomic_request',\n get_user_atomic_requests:\n '{address}::atomic_queue::get_user_atomic_requests',\n is_atomic_request_valid:\n '{address}::atomic_queue::is_atomic_request_valid',\n is_paused: '{address}::atomic_queue::is_paused',\n update_atomic_request: '{address}::atomic_queue::update_atomic_request',\n cancel_atomic_request: '{address}::atomic_queue::cancel_atomic_request',\n cancel_withdrawal_request:\n '{address}::atomic_queue::cancel_atomic_request',\n },\n [ChainType.EVM]: {\n get_minimum_request_age: 'getMinimumRequestAge',\n cancel_withdrawal_request: 'cancelWithdrawalRequest',\n reclaim_withdrawal_request: 'reclaimWithdrawalRequest',\n },\n },\n },\n vault: {\n name: 'Vault',\n abi: {\n [ChainType.MoveVM]: VaultAptosABI,\n [ChainType.EVM]: BoringVaultABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n get_vault_config: '{address}::vault::get_vault_config',\n get_total_assets: '{address}::vault::get_total_assets',\n get_total_shares: '{address}::vault::get_total_shares',\n },\n [ChainType.EVM]: {\n get_vault_config: 'getVaultConfig',\n get_total_assets: 'totalAssets',\n get_total_shares: 'totalShares',\n },\n },\n },\n};\n\n/**\n * Get function signature for a contract on a specific chain\n * @param type - The chain type (EVM or MoveVM)\n * @param contractName - The name of the contract\n * @param functionName - The name of the function\n * @param contractAddress - The address of the contract (required for MoveVM)\n */\nexport function getFunctionSignature(\n type: ChainType,\n contractName: string,\n functionName: string,\n contractAddress: string\n): string {\n const contract = CONTRACTS[contractName];\n if (!contract) {\n throw new Error(`Contract ${contractName} not found`);\n }\n\n const chainSignatures = contract.functionSignatures[type];\n if (!chainSignatures) {\n throw new Error(\n `Chain type ${type} not supported for contract ${contractName}`\n );\n }\n\n const signature = chainSignatures[functionName];\n if (!signature) {\n throw new Error(\n `Function ${functionName} not found in contract ${contractName}`\n );\n }\n\n return signature.replace('{address}', contractAddress);\n}\n\n/**\n * Get contract ABI for a specific chain type\n */\nexport function getContractABI(type: ChainType, contractName: string): any {\n const contract = CONTRACTS[contractName];\n if (!contract) {\n throw new Error(`Contract ${contractName} not found`);\n }\n\n const abi = contract.abi[type];\n if (!abi) {\n // Return empty array/null instead of error if ABI is missing,\n // as it might be acceptable for some chains/contracts initially.\n // However, adapter expects ABI to be present for encoding.\n console.warn(`ABI for ${contractName} on ${type} is missing`);\n return [];\n }\n return abi;\n}\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":["import_core"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,427 @@
1
+ // src/vault-client.ts
2
+ import {
3
+ getChainConfig
4
+ } from "@pyxisjs/core";
5
+ import {
6
+ PyxisUtils
7
+ } from "@pyxisjs/core";
8
+
9
+ // src/constants.ts
10
+ import {
11
+ AccountantAptosABI,
12
+ AtomicQueueAptosABI,
13
+ TellerAptosABI,
14
+ VaultAptosABI,
15
+ AccountantABI,
16
+ AtomicQueueABI,
17
+ BoringVaultABI,
18
+ TellerWithMultiAssetSupportABI
19
+ } from "@pyxisjs/chains";
20
+ import { ChainType } from "@pyxisjs/core";
21
+ var CONTRACTS = {
22
+ accountant: {
23
+ name: "Accountant",
24
+ abi: {
25
+ [ChainType.MoveVM]: AccountantAptosABI,
26
+ [ChainType.EVM]: AccountantABI
27
+ },
28
+ functionSignatures: {
29
+ [ChainType.MoveVM]: {
30
+ calculate_shares_from_assets_safe: "{address}::accountant::calculate_shares_from_assets_safe",
31
+ calculate_assets_from_shares_safe: "{address}::accountant::calculate_assets_from_shares_safe",
32
+ get_withdraw_rate_in_quote_safe: "{address}::accountant::get_withdraw_rate_in_quote_safe",
33
+ get_deposit_rate_in_quote_safe: "{address}::accountant::get_deposit_rate_in_quote_safe"
34
+ },
35
+ [ChainType.EVM]: {
36
+ calculate_shares_from_assets_safe: "calculateSharesFromAssetsSafe",
37
+ calculate_assets_from_shares_safe: "calculateAssetsFromSharesSafe",
38
+ get_withdraw_rate_in_quote_safe: "getWithdrawRateInQuoteSafe",
39
+ get_deposit_rate_in_quote_safe: "getDepositRateInQuoteSafe"
40
+ }
41
+ }
42
+ },
43
+ teller: {
44
+ name: "Teller",
45
+ abi: {
46
+ [ChainType.MoveVM]: TellerAptosABI,
47
+ [ChainType.EVM]: TellerWithMultiAssetSupportABI
48
+ },
49
+ functionSignatures: {
50
+ [ChainType.MoveVM]: {
51
+ deposit: "{address}::teller::deposit",
52
+ deposit_with_referral: "{address}::teller::deposit_with_referral",
53
+ deposit_for: "{address}::teller::deposit_for",
54
+ mint_shares: "{address}::teller::mint_shares",
55
+ create_withdrawal_request: "{address}::teller::create_withdrawal_request"
56
+ },
57
+ [ChainType.EVM]: {
58
+ deposit: "deposit",
59
+ deposit_with_referral: "depositWithReferral",
60
+ deposit_for: "depositFor",
61
+ mint_shares: "mintShares",
62
+ create_withdrawal_request: "createWithdrawalRequest"
63
+ }
64
+ }
65
+ },
66
+ atomicQueue: {
67
+ name: "AtomicQueue",
68
+ abi: {
69
+ [ChainType.MoveVM]: AtomicQueueAptosABI,
70
+ [ChainType.EVM]: AtomicQueueABI
71
+ },
72
+ functionSignatures: {
73
+ [ChainType.MoveVM]: {
74
+ get_minimum_request_age: "{address}::atomic_queue::get_minimum_request_age",
75
+ get_all_atomic_requests: "{address}::atomic_queue::get_all_atomic_requests",
76
+ get_request_update_cooldown: "{address}::atomic_queue::get_request_update_cooldown",
77
+ get_request_updated_at: "{address}::atomic_queue::get_request_updated_at",
78
+ get_user_atomic_request: "{address}::atomic_queue::get_user_atomic_request",
79
+ get_user_atomic_requests: "{address}::atomic_queue::get_user_atomic_requests",
80
+ is_atomic_request_valid: "{address}::atomic_queue::is_atomic_request_valid",
81
+ is_paused: "{address}::atomic_queue::is_paused",
82
+ update_atomic_request: "{address}::atomic_queue::update_atomic_request",
83
+ cancel_atomic_request: "{address}::atomic_queue::cancel_atomic_request",
84
+ cancel_withdrawal_request: "{address}::atomic_queue::cancel_atomic_request"
85
+ },
86
+ [ChainType.EVM]: {
87
+ get_minimum_request_age: "getMinimumRequestAge",
88
+ cancel_withdrawal_request: "cancelWithdrawalRequest",
89
+ reclaim_withdrawal_request: "reclaimWithdrawalRequest"
90
+ }
91
+ }
92
+ },
93
+ vault: {
94
+ name: "Vault",
95
+ abi: {
96
+ [ChainType.MoveVM]: VaultAptosABI,
97
+ [ChainType.EVM]: BoringVaultABI
98
+ },
99
+ functionSignatures: {
100
+ [ChainType.MoveVM]: {
101
+ get_vault_config: "{address}::vault::get_vault_config",
102
+ get_total_assets: "{address}::vault::get_total_assets",
103
+ get_total_shares: "{address}::vault::get_total_shares"
104
+ },
105
+ [ChainType.EVM]: {
106
+ get_vault_config: "getVaultConfig",
107
+ get_total_assets: "totalAssets",
108
+ get_total_shares: "totalShares"
109
+ }
110
+ }
111
+ }
112
+ };
113
+ function getFunctionSignature(type, contractName, functionName, contractAddress) {
114
+ const contract = CONTRACTS[contractName];
115
+ if (!contract) {
116
+ throw new Error(`Contract ${contractName} not found`);
117
+ }
118
+ const chainSignatures = contract.functionSignatures[type];
119
+ if (!chainSignatures) {
120
+ throw new Error(
121
+ `Chain type ${type} not supported for contract ${contractName}`
122
+ );
123
+ }
124
+ const signature = chainSignatures[functionName];
125
+ if (!signature) {
126
+ throw new Error(
127
+ `Function ${functionName} not found in contract ${contractName}`
128
+ );
129
+ }
130
+ return signature.replace("{address}", contractAddress);
131
+ }
132
+ function getContractABI(type, contractName) {
133
+ const contract = CONTRACTS[contractName];
134
+ if (!contract) {
135
+ throw new Error(`Contract ${contractName} not found`);
136
+ }
137
+ const abi = contract.abi[type];
138
+ if (!abi) {
139
+ console.warn(`ABI for ${contractName} on ${type} is missing`);
140
+ return [];
141
+ }
142
+ return abi;
143
+ }
144
+
145
+ // src/vault-client.ts
146
+ var MultiChainVaultClient = class {
147
+ constructor(adapter) {
148
+ this.adapter = adapter;
149
+ }
150
+ /**
151
+ * Get function signature using the new configuration system
152
+ */
153
+ getFunctionSignature(contractName, functionName) {
154
+ const config = getChainConfig(this.adapter.chain.id);
155
+ const contractAddress = this.adapter.getContractAddress(contractName);
156
+ return getFunctionSignature(
157
+ config.type,
158
+ contractName,
159
+ functionName,
160
+ contractAddress
161
+ );
162
+ }
163
+ async getWithdrawRateInQuoteSafe(args) {
164
+ const functionSignature = this.getFunctionSignature(
165
+ "accountant",
166
+ "get_withdraw_rate_in_quote_safe"
167
+ );
168
+ const result = await this.adapter.viewContract({
169
+ function: functionSignature,
170
+ arguments: [args.vault, args.quoteAsset]
171
+ });
172
+ return result;
173
+ }
174
+ async getDepositRateInQuoteSafe(args) {
175
+ const functionSignature = this.getFunctionSignature(
176
+ "accountant",
177
+ "get_deposit_rate_in_quote_safe"
178
+ );
179
+ const result = await this.adapter.viewContract({
180
+ function: functionSignature,
181
+ arguments: [args.vault, args.quoteAsset]
182
+ });
183
+ return result;
184
+ }
185
+ async quoteDeposit({
186
+ vault,
187
+ asset,
188
+ amount
189
+ }) {
190
+ const functionSignature = this.getFunctionSignature(
191
+ "accountant",
192
+ "calculate_shares_from_assets_safe"
193
+ );
194
+ const result = await this.adapter.viewContract({
195
+ function: functionSignature,
196
+ arguments: [vault, asset, amount]
197
+ });
198
+ return result;
199
+ }
200
+ async quoteWithdraw({
201
+ vault,
202
+ amount,
203
+ wantAsset
204
+ }) {
205
+ const functionSignature = this.getFunctionSignature(
206
+ "accountant",
207
+ "calculate_assets_from_shares_safe"
208
+ );
209
+ const result = await this.adapter.viewContract({
210
+ function: functionSignature,
211
+ arguments: [vault, wantAsset, amount]
212
+ });
213
+ return result;
214
+ }
215
+ async buildDepositTx(args) {
216
+ const functionSignature = this.getFunctionSignature("teller", "deposit");
217
+ return await this.adapter.buildPayload({
218
+ function: functionSignature,
219
+ arguments: [args.vault, args.asset, args.amount, args.minimumMint]
220
+ });
221
+ }
222
+ async buildWithdrawTx(args) {
223
+ const functionSignature = this.getFunctionSignature(
224
+ "atomicQueue",
225
+ "update_atomic_request"
226
+ );
227
+ return await this.adapter.buildPayload({
228
+ function: functionSignature,
229
+ arguments: [
230
+ args.vault,
231
+ args.offerAsset,
232
+ args.wantAsset,
233
+ args.offerAmount,
234
+ args.price,
235
+ args.deadline
236
+ ]
237
+ });
238
+ }
239
+ async buildReclaimWithdrawalRequestTx(args) {
240
+ const functionSignature = this.getFunctionSignature(
241
+ "atomicQueue",
242
+ "cancel_atomic_request"
243
+ );
244
+ return await this.adapter.buildPayload({
245
+ function: functionSignature,
246
+ arguments: [args.vault, args.offerAsset, args.wantAsset]
247
+ });
248
+ }
249
+ async buildCancelWithdrawalRequestTx(args) {
250
+ const functionSignature = this.getFunctionSignature(
251
+ "atomicQueue",
252
+ "cancel_withdrawal_request"
253
+ );
254
+ return await this.adapter.buildPayload({
255
+ function: functionSignature,
256
+ arguments: [args.vault, args.offerAsset, args.wantAsset]
257
+ });
258
+ }
259
+ async getMinimumRequestAge(args) {
260
+ const functionSignature = this.getFunctionSignature(
261
+ "atomicQueue",
262
+ "get_minimum_request_age"
263
+ );
264
+ const result = await this.adapter.viewContract({
265
+ function: functionSignature,
266
+ arguments: [args.vault]
267
+ });
268
+ return Number(result);
269
+ }
270
+ async getUserWithdrawalRequests({
271
+ flag,
272
+ userAddress,
273
+ vault,
274
+ matchAll = true
275
+ }) {
276
+ const requestFlag = PyxisUtils.buildRequestFlags(flag);
277
+ const getUserRequestsFn = this.getFunctionSignature(
278
+ "atomicQueue",
279
+ "get_user_atomic_requests"
280
+ );
281
+ const withdrawalRequests = await this.adapter.viewContract({
282
+ function: getUserRequestsFn,
283
+ arguments: [vault, userAddress, requestFlag, matchAll]
284
+ });
285
+ const getUpdatedAtFn = this.getFunctionSignature(
286
+ "atomicQueue",
287
+ "get_request_updated_at"
288
+ );
289
+ const updatedAtResults = await Promise.allSettled(
290
+ withdrawalRequests.map(
291
+ (request) => this.adapter.viewContract({
292
+ function: getUpdatedAtFn,
293
+ arguments: [
294
+ vault,
295
+ userAddress,
296
+ request.offer_token.inner,
297
+ request.want_token.inner
298
+ ]
299
+ })
300
+ )
301
+ );
302
+ return withdrawalRequests.map(
303
+ (request, index) => {
304
+ const result = updatedAtResults[index];
305
+ let updatedAt;
306
+ if (result.status === "fulfilled") {
307
+ updatedAt = result.value;
308
+ }
309
+ return PyxisUtils.mapOnchainToWithdrawalRequest(request, updatedAt);
310
+ }
311
+ );
312
+ }
313
+ };
314
+
315
+ // ../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js
316
+ var isProduction = process.env.NODE_ENV === "production";
317
+ var prefix = "Invariant failed";
318
+ function invariant(condition, message) {
319
+ if (condition) {
320
+ return;
321
+ }
322
+ if (isProduction) {
323
+ throw new Error(prefix);
324
+ }
325
+ var provided = typeof message === "function" ? message() : message;
326
+ var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
327
+ throw new Error(value);
328
+ }
329
+
330
+ // src/analytics-client.ts
331
+ var PyxisAnalyticsClient = class {
332
+ constructor(clients) {
333
+ invariant(clients.length > 0, "At least one analytics client is required");
334
+ this.clients = clients;
335
+ }
336
+ /**
337
+ * Get vault activities with pagination from all clients
338
+ * Aggregates activities from all clients
339
+ */
340
+ async getActivities(args) {
341
+ const results = await Promise.all(
342
+ this.clients.map((client) => client.getActivities(args))
343
+ );
344
+ const allActivities = results.flatMap((r) => r.activities);
345
+ const totalCount = results.reduce((sum, r) => sum + r.total, 0);
346
+ const pageSize = args.pageSize ?? 10;
347
+ const page = args.page ?? 1;
348
+ const start = (page - 1) * pageSize;
349
+ const paginatedActivities = allActivities.slice(start, start + pageSize);
350
+ return {
351
+ activities: paginatedActivities,
352
+ total: totalCount
353
+ };
354
+ }
355
+ /**
356
+ * Get total value locked in base asset from all clients
357
+ * Returns the sum of TVL from all clients
358
+ */
359
+ async getTvlInBaseAsset(args) {
360
+ const results = await Promise.all(
361
+ this.clients.map((client) => client.getTvlInBaseAsset(args))
362
+ );
363
+ const totalTvl = results.reduce((sum, tvl) => sum + BigInt(tvl), BigInt(0));
364
+ return totalTvl.toString();
365
+ }
366
+ /**
367
+ * Get exchange rate update events from all clients
368
+ * Aggregates and sorts events by timestamp
369
+ */
370
+ async getUpdateExchangeRateEvents(args) {
371
+ const results = await Promise.all(
372
+ this.clients.map((client) => client.getUpdateExchangeRateEvents(args))
373
+ );
374
+ const allEvents = results.flat();
375
+ allEvents.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
376
+ return allEvents;
377
+ }
378
+ /**
379
+ * Get 30-day APY for a vault
380
+ * Returns the average APY across all clients
381
+ */
382
+ async get30DayApy(vault) {
383
+ const results = await Promise.all(
384
+ this.clients.map((client) => client.get30DayApy(vault))
385
+ );
386
+ const validApys = results.filter((apy) => apy !== "0");
387
+ if (validApys.length === 0) {
388
+ return "0";
389
+ }
390
+ const totalApy = validApys.reduce((sum, apy) => sum + parseFloat(apy), 0);
391
+ return (totalApy / validApys.length).toString();
392
+ }
393
+ /**
394
+ * Get historical APY data points from all clients
395
+ * Aggregates data points and averages values for matching timestamps
396
+ */
397
+ async getHistoricalApy(args) {
398
+ const results = await Promise.all(
399
+ this.clients.map((client) => client.getHistoricalApy(args))
400
+ );
401
+ const allDataPoints = results.flat();
402
+ const timestampMap = /* @__PURE__ */ new Map();
403
+ for (const point of allDataPoints) {
404
+ const values = timestampMap.get(point.timestamp) || [];
405
+ values.push(parseFloat(point.value));
406
+ timestampMap.set(point.timestamp, values);
407
+ }
408
+ const aggregatedData = [];
409
+ for (const [timestamp, values] of timestampMap) {
410
+ const avgValue = values.reduce((a, b) => a + b, 0) / values.length;
411
+ aggregatedData.push({
412
+ timestamp,
413
+ value: avgValue.toString()
414
+ });
415
+ }
416
+ aggregatedData.sort((a, b) => Number(a.timestamp) - Number(b.timestamp));
417
+ return aggregatedData;
418
+ }
419
+ };
420
+ export {
421
+ CONTRACTS,
422
+ MultiChainVaultClient,
423
+ PyxisAnalyticsClient,
424
+ getContractABI,
425
+ getFunctionSignature
426
+ };
427
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vault-client.ts","../src/constants.ts","../../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../src/analytics-client.ts"],"sourcesContent":["/**\n * Chain-agnostic Vault API implementation\n */\n\nimport {\n BaseChainAdapter,\n getChainConfig,\n TransactionPayload,\n} from '@pyxisjs/core';\nimport {\n BuildCancelWithdrawalRequestTxArgs,\n BuildDepositTxArgs,\n BuildReclaimWithdrawalRequestTxArgs,\n BuildWithdrawTxArgs,\n GetDepositRateInQuoteSafeArgs,\n GetMinimumRequestAgeArgs,\n GetWithdrawalRequestsOfUserArgs,\n GetWithdrawRateInQuoteSafeArgs,\n PyxisOnchainWithdrawalRequest,\n PyxisWithdrawalRequest,\n PyxisUtils,\n QuoteDepositArgs,\n QuoteWithdrawArgs,\n} from '@pyxisjs/core';\n\nimport { getFunctionSignature } from './constants';\n\nexport interface MultiChainVaultAPI {\n quoteDeposit(args: QuoteDepositArgs): Promise<string>;\n quoteWithdraw(args: QuoteWithdrawArgs): Promise<string>;\n getDepositRateInQuoteSafe(\n args: GetDepositRateInQuoteSafeArgs\n ): Promise<string>;\n getWithdrawRateInQuoteSafe(\n args: GetWithdrawRateInQuoteSafeArgs\n ): Promise<string>;\n buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload>;\n buildWithdrawTx(args: BuildWithdrawTxArgs): Promise<TransactionPayload>;\n buildReclaimWithdrawalRequestTx(\n args: BuildReclaimWithdrawalRequestTxArgs\n ): Promise<TransactionPayload>;\n buildCancelWithdrawalRequestTx(\n args: BuildCancelWithdrawalRequestTxArgs\n ): Promise<TransactionPayload>;\n getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number>;\n getUserWithdrawalRequests(\n args: GetWithdrawalRequestsOfUserArgs\n ): Promise<PyxisWithdrawalRequest[]>;\n}\n\nexport class MultiChainVaultClient implements MultiChainVaultAPI {\n constructor(private adapter: BaseChainAdapter<any>) {}\n\n /**\n * Get function signature using the new configuration system\n */\n private getFunctionSignature(\n contractName: 'accountant' | 'teller' | 'atomicQueue',\n functionName: string\n ): string {\n const config = getChainConfig(this.adapter.chain.id);\n const contractAddress = this.adapter.getContractAddress(contractName);\n return getFunctionSignature(\n config.type,\n contractName,\n functionName,\n contractAddress\n );\n }\n\n async getWithdrawRateInQuoteSafe(\n args: GetWithdrawRateInQuoteSafeArgs\n ): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'get_withdraw_rate_in_quote_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [args.vault, args.quoteAsset],\n });\n\n return result;\n }\n\n async getDepositRateInQuoteSafe(\n args: GetDepositRateInQuoteSafeArgs\n ): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'get_deposit_rate_in_quote_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [args.vault, args.quoteAsset],\n });\n\n return result;\n }\n\n async quoteDeposit({\n vault,\n asset,\n amount,\n }: QuoteDepositArgs): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'calculate_shares_from_assets_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [vault, asset, amount],\n });\n\n return result;\n }\n\n async quoteWithdraw({\n vault,\n amount,\n wantAsset,\n }: QuoteWithdrawArgs): Promise<string> {\n const functionSignature = this.getFunctionSignature(\n 'accountant',\n 'calculate_assets_from_shares_safe'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [vault, wantAsset, amount],\n });\n\n return result;\n }\n\n async buildDepositTx(args: BuildDepositTxArgs): Promise<TransactionPayload> {\n const functionSignature = this.getFunctionSignature('teller', 'deposit');\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [args.vault, args.asset, args.amount, args.minimumMint],\n });\n }\n\n async buildWithdrawTx(\n args: BuildWithdrawTxArgs\n ): Promise<TransactionPayload> {\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'update_atomic_request'\n );\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [\n args.vault,\n args.offerAsset,\n args.wantAsset,\n args.offerAmount,\n args.price,\n args.deadline,\n ],\n });\n }\n\n async buildReclaimWithdrawalRequestTx(\n args: BuildReclaimWithdrawalRequestTxArgs\n ): Promise<TransactionPayload> {\n // Call cancel_atomic_request to reclaim the request\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'cancel_atomic_request'\n );\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [args.vault, args.offerAsset, args.wantAsset],\n });\n }\n\n async buildCancelWithdrawalRequestTx(\n args: BuildCancelWithdrawalRequestTxArgs\n ): Promise<TransactionPayload> {\n // Update amount to 0 to cancel the request\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'cancel_withdrawal_request'\n );\n\n return await this.adapter.buildPayload({\n function: functionSignature,\n arguments: [args.vault, args.offerAsset, args.wantAsset],\n });\n }\n\n async getMinimumRequestAge(args: GetMinimumRequestAgeArgs): Promise<number> {\n const functionSignature = this.getFunctionSignature(\n 'atomicQueue',\n 'get_minimum_request_age'\n );\n\n const result = await this.adapter.viewContract<string>({\n function: functionSignature,\n arguments: [args.vault],\n });\n\n return Number(result);\n }\n\n async getUserWithdrawalRequests({\n flag,\n userAddress,\n vault,\n matchAll = true,\n }: GetWithdrawalRequestsOfUserArgs): Promise<PyxisWithdrawalRequest[]> {\n const requestFlag = PyxisUtils.buildRequestFlags(flag);\n\n // Get user atomic requests\n const getUserRequestsFn = this.getFunctionSignature(\n 'atomicQueue',\n 'get_user_atomic_requests'\n );\n\n const withdrawalRequests: PyxisOnchainWithdrawalRequest[] =\n await this.adapter.viewContract<PyxisOnchainWithdrawalRequest[]>({\n function: getUserRequestsFn,\n arguments: [vault, userAddress, requestFlag, matchAll],\n });\n\n // Fetch updatedAt for each withdrawal request in parallel\n const getUpdatedAtFn = this.getFunctionSignature(\n 'atomicQueue',\n 'get_request_updated_at'\n );\n\n const updatedAtResults = await Promise.allSettled(\n withdrawalRequests.map((request: PyxisOnchainWithdrawalRequest) =>\n this.adapter.viewContract<string>({\n function: getUpdatedAtFn,\n arguments: [\n vault,\n userAddress,\n request.offer_token.inner,\n request.want_token.inner,\n ],\n })\n )\n );\n\n // Map withdrawal requests with enriched updatedAt data\n return withdrawalRequests.map(\n (request: PyxisOnchainWithdrawalRequest, index: number) => {\n const result = updatedAtResults[index];\n let updatedAt: string | undefined;\n\n if (result.status === 'fulfilled') {\n updatedAt = result.value as string;\n }\n\n return PyxisUtils.mapOnchainToWithdrawalRequest(request, updatedAt);\n }\n );\n }\n}\n","import {\n AccountantAptosABI,\n AtomicQueueAptosABI,\n TellerAptosABI,\n VaultAptosABI,\n AccountantABI,\n AtomicQueueABI,\n BoringVaultABI,\n TellerWithMultiAssetSupportABI,\n} from '@pyxisjs/chains';\nimport { ChainType } from '@pyxisjs/core';\n\nexport interface ContractConfig {\n name: string;\n abi: Record<ChainType, any>;\n functionSignatures: Partial<\n Record<ChainType, Partial<Record<string, string>>>\n >;\n}\n\nexport interface ContractsConfig {\n [key: string]: ContractConfig;\n}\n\n/**\n * Contract configurations with real addresses and ABIs\n */\nexport const CONTRACTS: Record<string, ContractConfig> = {\n accountant: {\n name: 'Accountant',\n abi: {\n [ChainType.MoveVM]: AccountantAptosABI,\n [ChainType.EVM]: AccountantABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n calculate_shares_from_assets_safe:\n '{address}::accountant::calculate_shares_from_assets_safe',\n calculate_assets_from_shares_safe:\n '{address}::accountant::calculate_assets_from_shares_safe',\n get_withdraw_rate_in_quote_safe:\n '{address}::accountant::get_withdraw_rate_in_quote_safe',\n get_deposit_rate_in_quote_safe:\n '{address}::accountant::get_deposit_rate_in_quote_safe',\n },\n [ChainType.EVM]: {\n calculate_shares_from_assets_safe: 'calculateSharesFromAssetsSafe',\n calculate_assets_from_shares_safe: 'calculateAssetsFromSharesSafe',\n get_withdraw_rate_in_quote_safe: 'getWithdrawRateInQuoteSafe',\n get_deposit_rate_in_quote_safe: 'getDepositRateInQuoteSafe',\n },\n },\n },\n teller: {\n name: 'Teller',\n abi: {\n [ChainType.MoveVM]: TellerAptosABI,\n [ChainType.EVM]: TellerWithMultiAssetSupportABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n deposit: '{address}::teller::deposit',\n deposit_with_referral: '{address}::teller::deposit_with_referral',\n deposit_for: '{address}::teller::deposit_for',\n mint_shares: '{address}::teller::mint_shares',\n create_withdrawal_request:\n '{address}::teller::create_withdrawal_request',\n },\n [ChainType.EVM]: {\n deposit: 'deposit',\n deposit_with_referral: 'depositWithReferral',\n deposit_for: 'depositFor',\n mint_shares: 'mintShares',\n create_withdrawal_request: 'createWithdrawalRequest',\n },\n },\n },\n atomicQueue: {\n name: 'AtomicQueue',\n abi: {\n [ChainType.MoveVM]: AtomicQueueAptosABI,\n [ChainType.EVM]: AtomicQueueABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n get_minimum_request_age:\n '{address}::atomic_queue::get_minimum_request_age',\n get_all_atomic_requests:\n '{address}::atomic_queue::get_all_atomic_requests',\n get_request_update_cooldown:\n '{address}::atomic_queue::get_request_update_cooldown',\n get_request_updated_at:\n '{address}::atomic_queue::get_request_updated_at',\n get_user_atomic_request:\n '{address}::atomic_queue::get_user_atomic_request',\n get_user_atomic_requests:\n '{address}::atomic_queue::get_user_atomic_requests',\n is_atomic_request_valid:\n '{address}::atomic_queue::is_atomic_request_valid',\n is_paused: '{address}::atomic_queue::is_paused',\n update_atomic_request: '{address}::atomic_queue::update_atomic_request',\n cancel_atomic_request: '{address}::atomic_queue::cancel_atomic_request',\n cancel_withdrawal_request:\n '{address}::atomic_queue::cancel_atomic_request',\n },\n [ChainType.EVM]: {\n get_minimum_request_age: 'getMinimumRequestAge',\n cancel_withdrawal_request: 'cancelWithdrawalRequest',\n reclaim_withdrawal_request: 'reclaimWithdrawalRequest',\n },\n },\n },\n vault: {\n name: 'Vault',\n abi: {\n [ChainType.MoveVM]: VaultAptosABI,\n [ChainType.EVM]: BoringVaultABI,\n },\n functionSignatures: {\n [ChainType.MoveVM]: {\n get_vault_config: '{address}::vault::get_vault_config',\n get_total_assets: '{address}::vault::get_total_assets',\n get_total_shares: '{address}::vault::get_total_shares',\n },\n [ChainType.EVM]: {\n get_vault_config: 'getVaultConfig',\n get_total_assets: 'totalAssets',\n get_total_shares: 'totalShares',\n },\n },\n },\n};\n\n/**\n * Get function signature for a contract on a specific chain\n * @param type - The chain type (EVM or MoveVM)\n * @param contractName - The name of the contract\n * @param functionName - The name of the function\n * @param contractAddress - The address of the contract (required for MoveVM)\n */\nexport function getFunctionSignature(\n type: ChainType,\n contractName: string,\n functionName: string,\n contractAddress: string\n): string {\n const contract = CONTRACTS[contractName];\n if (!contract) {\n throw new Error(`Contract ${contractName} not found`);\n }\n\n const chainSignatures = contract.functionSignatures[type];\n if (!chainSignatures) {\n throw new Error(\n `Chain type ${type} not supported for contract ${contractName}`\n );\n }\n\n const signature = chainSignatures[functionName];\n if (!signature) {\n throw new Error(\n `Function ${functionName} not found in contract ${contractName}`\n );\n }\n\n return signature.replace('{address}', contractAddress);\n}\n\n/**\n * Get contract ABI for a specific chain type\n */\nexport function getContractABI(type: ChainType, contractName: string): any {\n const contract = CONTRACTS[contractName];\n if (!contract) {\n throw new Error(`Contract ${contractName} not found`);\n }\n\n const abi = contract.abi[type];\n if (!abi) {\n // Return empty array/null instead of error if ABI is missing,\n // as it might be acceptable for some chains/contracts initially.\n // However, adapter expects ABI to be present for encoding.\n console.warn(`ABI for ${contractName} on ${type} is missing`);\n return [];\n }\n return abi;\n}\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":[]}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@pyxisjs/client",
3
+ "version": "0.1.0",
4
+ "description": "Pyxis SDK Client",
5
+ "license": "MIT",
6
+ "publishConfig": {
7
+ "access": "public",
8
+ "registry": "https://registry.npmjs.org/"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/pyxis/pyxis-sdk.git",
13
+ "directory": "packages/client"
14
+ },
15
+ "homepage": "https://github.com/pyxis/pyxis-sdk/tree/main/packages/client#readme",
16
+ "bugs": {
17
+ "url": "https://github.com/pyxis/pyxis-sdk/issues"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "main": "dist/index.js",
23
+ "module": "dist/index.mjs",
24
+ "types": "dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "import": "./dist/index.mjs",
28
+ "require": "./dist/index.js",
29
+ "types": "./dist/index.d.ts"
30
+ }
31
+ },
32
+ "dependencies": {
33
+ "dayjs": "^1.11.19",
34
+ "@pyxisjs/chains": "0.1.0",
35
+ "@pyxisjs/core": "0.1.0"
36
+ },
37
+ "devDependencies": {
38
+ "tsup": "^8.0.0",
39
+ "typescript": "^5.0.0"
40
+ },
41
+ "scripts": {
42
+ "build": "tsup",
43
+ "dev": "tsup --watch",
44
+ "test": "jest",
45
+ "clean": "rm -rf dist"
46
+ }
47
+ }