@paxoslabs/amplify-sdk 0.4.2 → 0.4.3-alpha.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/CHANGELOG.md +79 -64
- package/dist/{chain-utils-CRMbWzu7.d.mts → chain-utils-CpOJcWig.d.mts} +48 -29
- package/dist/{chain-utils-CRMbWzu7.d.ts → chain-utils-CpOJcWig.d.ts} +48 -29
- package/dist/{chunk-RW7PZETN.mjs → chunk-7JMQWERX.mjs} +238 -254
- package/dist/chunk-7JMQWERX.mjs.map +1 -0
- package/dist/{chunk-TPU2HZAX.mjs → chunk-HV2LE2M6.mjs} +86 -169
- package/dist/chunk-HV2LE2M6.mjs.map +1 -0
- package/dist/{chunk-WZXCJAKM.js → chunk-JTURYJHV.js} +12 -12
- package/dist/{chunk-WZXCJAKM.js.map → chunk-JTURYJHV.js.map} +1 -1
- package/dist/{chunk-5CV25BTQ.js → chunk-KXU3GSF4.mjs} +87 -4
- package/dist/chunk-KXU3GSF4.mjs.map +1 -0
- package/dist/{chunk-CQZCGPZK.mjs → chunk-MB6HYA7R.js} +96 -3
- package/dist/chunk-MB6HYA7R.js.map +1 -0
- package/dist/{chunk-BQG3XKTU.js → chunk-PKGFLHZA.js} +239 -253
- package/dist/chunk-PKGFLHZA.js.map +1 -0
- package/dist/{chunk-2YPKHXFJ.js → chunk-R35K46S5.js} +180 -263
- package/dist/chunk-R35K46S5.js.map +1 -0
- package/dist/{chunk-GMMBJB4B.mjs → chunk-UM7S7U45.mjs} +71 -46
- package/dist/chunk-UM7S7U45.mjs.map +1 -0
- package/dist/{chunk-VZED4E3L.mjs → chunk-USF4CU2K.mjs} +3 -3
- package/dist/{chunk-VZED4E3L.mjs.map → chunk-USF4CU2K.mjs.map} +1 -1
- package/dist/{chunk-OZJNKGW6.js → chunk-YEAWQB72.js} +120 -95
- package/dist/chunk-YEAWQB72.js.map +1 -0
- package/dist/core.d.mts +2 -2
- package/dist/core.d.ts +2 -2
- package/dist/core.js +16 -16
- package/dist/core.mjs +4 -4
- package/dist/display.d.mts +23 -11
- package/dist/display.d.ts +23 -11
- package/dist/display.js +10 -10
- package/dist/display.mjs +4 -4
- package/dist/index.d.mts +107 -7
- package/dist/index.d.ts +107 -7
- package/dist/index.js +75 -51
- package/dist/index.mjs +5 -5
- package/dist/utils.d.mts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +7 -7
- package/dist/utils.mjs +2 -2
- package/dist/vaults.d.mts +107 -94
- package/dist/vaults.d.ts +107 -94
- package/dist/vaults.js +25 -25
- package/dist/vaults.mjs +4 -4
- package/package.json +18 -11
- package/dist/chunk-2YPKHXFJ.js.map +0 -1
- package/dist/chunk-5CV25BTQ.js.map +0 -1
- package/dist/chunk-BQG3XKTU.js.map +0 -1
- package/dist/chunk-CQZCGPZK.mjs.map +0 -1
- package/dist/chunk-GMMBJB4B.mjs.map +0 -1
- package/dist/chunk-OZJNKGW6.js.map +0 -1
- package/dist/chunk-RW7PZETN.mjs.map +0 -1
- package/dist/chunk-TPU2HZAX.mjs.map +0 -1
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
var viem = require('viem');
|
|
4
4
|
var chains = require('viem/chains');
|
|
5
5
|
|
|
6
|
+
// src/utils/fetch.ts
|
|
7
|
+
var DEFAULT_TIMEOUT = 1e4;
|
|
8
|
+
function createTimeoutSignal(timeoutMs) {
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
setTimeout(() => controller.abort(), timeoutMs);
|
|
11
|
+
return controller.signal;
|
|
12
|
+
}
|
|
13
|
+
|
|
6
14
|
// src/types/telemetry.ts
|
|
7
15
|
var LogLevel = {
|
|
8
16
|
DEBUG: 0,
|
|
@@ -80,16 +88,8 @@ function setLogLevel(level) {
|
|
|
80
88
|
}
|
|
81
89
|
}
|
|
82
90
|
|
|
83
|
-
// src/utils/fetch.ts
|
|
84
|
-
var DEFAULT_TIMEOUT = 1e4;
|
|
85
|
-
function createTimeoutSignal(timeoutMs) {
|
|
86
|
-
const controller = new AbortController();
|
|
87
|
-
setTimeout(() => controller.abort(), timeoutMs);
|
|
88
|
-
return controller.signal;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
91
|
// src/constants/environment.ts
|
|
92
|
-
var BASE_URL = "https://
|
|
92
|
+
var BASE_URL = "https://paxos-labs-monorepo.onrender.com";
|
|
93
93
|
function getGraphQLEndpoint() {
|
|
94
94
|
return `${BASE_URL}/graphql`;
|
|
95
95
|
}
|
|
@@ -108,6 +108,8 @@ var VaultCache = class {
|
|
|
108
108
|
constructor(ttl = DEFAULT_TTL) {
|
|
109
109
|
this.vaults = /* @__PURE__ */ new Map();
|
|
110
110
|
this.assets = /* @__PURE__ */ new Map();
|
|
111
|
+
this.vaultsByAddress = /* @__PURE__ */ new Map();
|
|
112
|
+
this.vaultsByName = /* @__PURE__ */ new Map();
|
|
111
113
|
this.lastFetch = 0;
|
|
112
114
|
this.ttl = ttl;
|
|
113
115
|
this.refreshPromise = null;
|
|
@@ -124,6 +126,20 @@ var VaultCache = class {
|
|
|
124
126
|
getVault(tokenAddress) {
|
|
125
127
|
return this.vaults.get(tokenAddress);
|
|
126
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Gets a vault by its boringVaultAddress (on-chain vault contract).
|
|
131
|
+
* Case-insensitive lookup.
|
|
132
|
+
*/
|
|
133
|
+
getVaultByAddress(address) {
|
|
134
|
+
return this.vaultsByAddress.get(address.toLowerCase());
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Gets a vault by its human-readable name.
|
|
138
|
+
* Case-insensitive lookup.
|
|
139
|
+
*/
|
|
140
|
+
getVaultByName(name) {
|
|
141
|
+
return this.vaultsByName.get(name.toLowerCase());
|
|
142
|
+
}
|
|
127
143
|
/**
|
|
128
144
|
* Gets asset by token address
|
|
129
145
|
*
|
|
@@ -145,9 +161,15 @@ var VaultCache = class {
|
|
|
145
161
|
* @returns Array of all AmplifyVault objects
|
|
146
162
|
*/
|
|
147
163
|
getAllVaults() {
|
|
164
|
+
const seen = /* @__PURE__ */ new Set();
|
|
148
165
|
const allVaults = [];
|
|
149
166
|
for (const vaultArray of this.vaults.values()) {
|
|
150
|
-
|
|
167
|
+
for (const vault of vaultArray) {
|
|
168
|
+
if (!seen.has(vault.id)) {
|
|
169
|
+
seen.add(vault.id);
|
|
170
|
+
allVaults.push(vault);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
151
173
|
}
|
|
152
174
|
return allVaults;
|
|
153
175
|
}
|
|
@@ -224,13 +246,26 @@ var VaultCache = class {
|
|
|
224
246
|
const { vaults, assets } = await fetchVaultDataFromGraphQL();
|
|
225
247
|
this.vaults.clear();
|
|
226
248
|
this.assets.clear();
|
|
249
|
+
this.vaultsByAddress.clear();
|
|
250
|
+
this.vaultsByName.clear();
|
|
227
251
|
for (const vault of vaults) {
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
existing
|
|
232
|
-
|
|
233
|
-
|
|
252
|
+
for (const asset of vault.supportedAssets) {
|
|
253
|
+
const tokenAddress = asset.address;
|
|
254
|
+
const existing = this.vaults.get(tokenAddress);
|
|
255
|
+
if (existing) {
|
|
256
|
+
if (!existing.includes(vault)) {
|
|
257
|
+
existing.push(vault);
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
this.vaults.set(tokenAddress, [vault]);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
this.vaultsByAddress.set(
|
|
264
|
+
vault.vault.boringVaultAddress.toLowerCase(),
|
|
265
|
+
vault
|
|
266
|
+
);
|
|
267
|
+
if (vault.name) {
|
|
268
|
+
this.vaultsByName.set(vault.name.toLowerCase(), vault);
|
|
234
269
|
}
|
|
235
270
|
}
|
|
236
271
|
for (const asset of assets) {
|
|
@@ -255,6 +290,8 @@ var VaultCache = class {
|
|
|
255
290
|
clear() {
|
|
256
291
|
this.vaults.clear();
|
|
257
292
|
this.assets.clear();
|
|
293
|
+
this.vaultsByAddress.clear();
|
|
294
|
+
this.vaultsByName.clear();
|
|
258
295
|
this.lastFetch = 0;
|
|
259
296
|
}
|
|
260
297
|
/**
|
|
@@ -506,6 +543,20 @@ var VAULT_FIELDS = `
|
|
|
506
543
|
symbol
|
|
507
544
|
coinGeckoApiId
|
|
508
545
|
}
|
|
546
|
+
withdrawalSla {
|
|
547
|
+
withdrawAssetAddress
|
|
548
|
+
externalWithdrawalQueueDelaySLA
|
|
549
|
+
externalAccountantRateUpdateSLA
|
|
550
|
+
}
|
|
551
|
+
supportedAssets {
|
|
552
|
+
address
|
|
553
|
+
chainId
|
|
554
|
+
depositable
|
|
555
|
+
withdrawable
|
|
556
|
+
symbol
|
|
557
|
+
tokenName
|
|
558
|
+
decimals
|
|
559
|
+
}
|
|
509
560
|
`;
|
|
510
561
|
var DEPOSIT_TOKEN_FIELDS = `
|
|
511
562
|
id
|
|
@@ -513,6 +564,22 @@ var DEPOSIT_TOKEN_FIELDS = `
|
|
|
513
564
|
chainId
|
|
514
565
|
name
|
|
515
566
|
`;
|
|
567
|
+
var TOKEN_METADATA_FIELDS = `
|
|
568
|
+
address
|
|
569
|
+
chainId
|
|
570
|
+
symbol
|
|
571
|
+
tokenName
|
|
572
|
+
decimals
|
|
573
|
+
coinGeckoTokenId
|
|
574
|
+
tokenStandard
|
|
575
|
+
source
|
|
576
|
+
firstSeenAt
|
|
577
|
+
metadataRefreshedAt
|
|
578
|
+
`;
|
|
579
|
+
var VAULT_ASSET_FLAGS_FIELDS = `
|
|
580
|
+
depositable
|
|
581
|
+
withdrawable
|
|
582
|
+
`;
|
|
516
583
|
var SDK_CONFIG_CORE_FIELDS = `
|
|
517
584
|
id
|
|
518
585
|
chainId
|
|
@@ -531,6 +598,16 @@ function buildSdkConfigsQuery(options) {
|
|
|
531
598
|
`depositTokenAddress { ${options.depositTokenAddress} }`
|
|
532
599
|
);
|
|
533
600
|
}
|
|
601
|
+
if (options.tokenMetadata) {
|
|
602
|
+
nestedFields.push(
|
|
603
|
+
`tokenMetadata { ${options.tokenMetadata} }`
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
if (options.vaultAssetFlags) {
|
|
607
|
+
nestedFields.push(
|
|
608
|
+
`vaultAssetFlags { ${options.vaultAssetFlags} }`
|
|
609
|
+
);
|
|
610
|
+
}
|
|
534
611
|
const allFields = [
|
|
535
612
|
...options.fields,
|
|
536
613
|
...nestedFields
|
|
@@ -607,7 +684,9 @@ async function fetchAmplifySdkConfigs(endpoint, variables) {
|
|
|
607
684
|
const query = buildSdkConfigsQuery({
|
|
608
685
|
fields: SDK_CONFIG_CORE_FIELDS.trim().split(/\s+/),
|
|
609
686
|
vault: VAULT_FIELDS,
|
|
610
|
-
depositTokenAddress: DEPOSIT_TOKEN_FIELDS
|
|
687
|
+
depositTokenAddress: DEPOSIT_TOKEN_FIELDS,
|
|
688
|
+
tokenMetadata: TOKEN_METADATA_FIELDS,
|
|
689
|
+
vaultAssetFlags: VAULT_ASSET_FLAGS_FIELDS
|
|
611
690
|
});
|
|
612
691
|
return executeGraphQLQuery(
|
|
613
692
|
endpoint,
|
|
@@ -654,10 +733,30 @@ function mapGraphQLConfigToVault(config) {
|
|
|
654
733
|
return null;
|
|
655
734
|
}
|
|
656
735
|
const { vault, depositTokenAddress } = config;
|
|
736
|
+
const indexerAssets = vault.supportedAssets && vault.supportedAssets.length > 0 ? vault.supportedAssets.map((a) => ({
|
|
737
|
+
address: a.address,
|
|
738
|
+
symbol: a.symbol ?? a.address,
|
|
739
|
+
name: a.tokenName ?? a.symbol ?? a.address,
|
|
740
|
+
decimals: a.decimals ?? 0,
|
|
741
|
+
depositable: a.depositable,
|
|
742
|
+
withdrawable: a.withdrawable
|
|
743
|
+
})) : [
|
|
744
|
+
{
|
|
745
|
+
address: depositTokenAddress.address,
|
|
746
|
+
symbol: config.tokenMetadata?.symbol ?? depositTokenAddress.name,
|
|
747
|
+
name: config.tokenMetadata?.tokenName ?? depositTokenAddress.name,
|
|
748
|
+
decimals: config.tokenMetadata?.decimals ?? 0,
|
|
749
|
+
...config.vaultAssetFlags && {
|
|
750
|
+
depositable: config.vaultAssetFlags.depositable,
|
|
751
|
+
withdrawable: config.vaultAssetFlags.withdrawable
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
];
|
|
657
755
|
return {
|
|
658
756
|
id: config.id,
|
|
659
757
|
chainId: config.chainId,
|
|
660
758
|
yieldType,
|
|
759
|
+
name: vault.name,
|
|
661
760
|
vault: {
|
|
662
761
|
boringVaultAddress: vault.boringVaultAddress,
|
|
663
762
|
tellerAddress: vault.tellerModuleId,
|
|
@@ -669,14 +768,25 @@ function mapGraphQLConfigToVault(config) {
|
|
|
669
768
|
withdrawQueueAddress: vault.withdrawQueueModuleId ? vault.withdrawQueueModuleId : void 0,
|
|
670
769
|
communityCodeDepositorAddress: vault.communityCodeDepositorModuleId ? vault.communityCodeDepositorModuleId : void 0
|
|
671
770
|
},
|
|
672
|
-
supportedAssets:
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
}
|
|
771
|
+
supportedAssets: indexerAssets,
|
|
772
|
+
sla: vault.withdrawalSla && vault.withdrawalSla.length > 0 ? {
|
|
773
|
+
externalWithdrawalQueueDelaySLA: vault.withdrawalSla[0].externalWithdrawalQueueDelaySLA,
|
|
774
|
+
externalAccountantRateUpdateSLA: vault.withdrawalSla[0].externalAccountantRateUpdateSLA
|
|
775
|
+
} : void 0
|
|
678
776
|
};
|
|
679
777
|
}
|
|
778
|
+
function aggregateVaultConfigs(configs) {
|
|
779
|
+
const vaultMap = /* @__PURE__ */ new Map();
|
|
780
|
+
for (const config of configs) {
|
|
781
|
+
if (!config.vault || !config.depositTokenAddress) continue;
|
|
782
|
+
if (vaultMap.has(config.vaultId)) continue;
|
|
783
|
+
const mapped = mapGraphQLConfigToVault(config);
|
|
784
|
+
if (mapped) {
|
|
785
|
+
vaultMap.set(config.vaultId, mapped);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
return Array.from(vaultMap.values());
|
|
789
|
+
}
|
|
680
790
|
function extractSupportedAssetsFromConfigs(configs) {
|
|
681
791
|
const assetMap = /* @__PURE__ */ new Map();
|
|
682
792
|
for (const config of configs) {
|
|
@@ -685,12 +795,17 @@ function extractSupportedAssetsFromConfigs(configs) {
|
|
|
685
795
|
const existing = assetMap.get(key);
|
|
686
796
|
if (existing) {
|
|
687
797
|
existing.chains.add(config.chainId);
|
|
798
|
+
if (existing.decimals === 0 && config.tokenMetadata?.decimals) {
|
|
799
|
+
existing.decimals = config.tokenMetadata.decimals;
|
|
800
|
+
existing.symbol = config.tokenMetadata.symbol ?? existing.symbol;
|
|
801
|
+
existing.name = config.tokenMetadata.tokenName ?? existing.name;
|
|
802
|
+
}
|
|
688
803
|
} else {
|
|
689
804
|
assetMap.set(key, {
|
|
690
805
|
address: config.depositTokenAddress.address,
|
|
691
|
-
symbol: config.depositTokenAddress.name,
|
|
692
|
-
name: config.depositTokenAddress.name,
|
|
693
|
-
decimals: 0,
|
|
806
|
+
symbol: config.tokenMetadata?.symbol ?? config.depositTokenAddress.name,
|
|
807
|
+
name: config.tokenMetadata?.tokenName ?? config.depositTokenAddress.name,
|
|
808
|
+
decimals: config.tokenMetadata?.decimals ?? 0,
|
|
694
809
|
chains: /* @__PURE__ */ new Set([config.chainId])
|
|
695
810
|
});
|
|
696
811
|
}
|
|
@@ -704,174 +819,6 @@ function extractSupportedAssetsFromConfigs(configs) {
|
|
|
704
819
|
}));
|
|
705
820
|
}
|
|
706
821
|
|
|
707
|
-
// src/client/vault-assets-client.ts
|
|
708
|
-
var PAGE_SIZE = 100;
|
|
709
|
-
var MAX_PAGES = 50;
|
|
710
|
-
var ENDPOINT_PATH = "/amplify/vaultAssets";
|
|
711
|
-
async function fetchVaultAssets() {
|
|
712
|
-
const baseUrl = getRestV2BaseURL();
|
|
713
|
-
const allVaultAssets = [];
|
|
714
|
-
let allTokenMetadata = {};
|
|
715
|
-
let pageToken = null;
|
|
716
|
-
let pageCount = 0;
|
|
717
|
-
do {
|
|
718
|
-
let urlStr = `${baseUrl}${ENDPOINT_PATH}?pageSize=${PAGE_SIZE}`;
|
|
719
|
-
if (pageToken) {
|
|
720
|
-
urlStr += `&pageToken=${encodeURIComponent(pageToken)}`;
|
|
721
|
-
}
|
|
722
|
-
let response;
|
|
723
|
-
try {
|
|
724
|
-
response = await fetch(urlStr, {
|
|
725
|
-
method: "GET",
|
|
726
|
-
headers: getRequestHeaders(),
|
|
727
|
-
signal: createTimeoutSignal(DEFAULT_TIMEOUT)
|
|
728
|
-
});
|
|
729
|
-
} catch (error) {
|
|
730
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
731
|
-
throw new APIError(
|
|
732
|
-
"vaultAssets request timed out",
|
|
733
|
-
{ endpoint: ENDPOINT_PATH, cause: error }
|
|
734
|
-
);
|
|
735
|
-
}
|
|
736
|
-
throw new APIError(
|
|
737
|
-
`vaultAssets network error: ${error instanceof Error ? error.message : String(error)}`,
|
|
738
|
-
{ endpoint: ENDPOINT_PATH, cause: error }
|
|
739
|
-
);
|
|
740
|
-
}
|
|
741
|
-
if (!response.ok) {
|
|
742
|
-
throw new APIError(
|
|
743
|
-
`vaultAssets HTTP error: ${response.status} ${response.statusText}`,
|
|
744
|
-
{
|
|
745
|
-
endpoint: ENDPOINT_PATH,
|
|
746
|
-
statusCode: response.status
|
|
747
|
-
}
|
|
748
|
-
);
|
|
749
|
-
}
|
|
750
|
-
let body;
|
|
751
|
-
try {
|
|
752
|
-
body = await response.json();
|
|
753
|
-
} catch (error) {
|
|
754
|
-
throw new APIError(
|
|
755
|
-
"vaultAssets response is not valid JSON",
|
|
756
|
-
{ endpoint: ENDPOINT_PATH, cause: error }
|
|
757
|
-
);
|
|
758
|
-
}
|
|
759
|
-
allVaultAssets.push(...body.vaultAssets);
|
|
760
|
-
allTokenMetadata = {
|
|
761
|
-
...allTokenMetadata,
|
|
762
|
-
...body.tokenMetadata
|
|
763
|
-
};
|
|
764
|
-
pageToken = body.nextPageToken ?? null;
|
|
765
|
-
pageCount++;
|
|
766
|
-
if (pageCount >= MAX_PAGES && pageToken) {
|
|
767
|
-
throw new APIError(
|
|
768
|
-
`vaultAssets pagination safety limit reached (${pageCount} of ${MAX_PAGES} pages)`,
|
|
769
|
-
{
|
|
770
|
-
endpoint: ENDPOINT_PATH,
|
|
771
|
-
statusCode: 0,
|
|
772
|
-
cause: new Error(
|
|
773
|
-
`Pagination exceeded ${MAX_PAGES} pages with nextPageToken still present`
|
|
774
|
-
)
|
|
775
|
-
}
|
|
776
|
-
);
|
|
777
|
-
}
|
|
778
|
-
} while (pageToken);
|
|
779
|
-
return {
|
|
780
|
-
vaultAssets: allVaultAssets,
|
|
781
|
-
nextPageToken: null,
|
|
782
|
-
tokenMetadata: allTokenMetadata
|
|
783
|
-
};
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
// src/client/vault-data-merger.ts
|
|
787
|
-
function buildVaultAssetKey(boringVaultAddress, chainId, assetAddress) {
|
|
788
|
-
return `${boringVaultAddress.toLowerCase()}:${chainId}:${assetAddress.toLowerCase()}`;
|
|
789
|
-
}
|
|
790
|
-
function buildMetadataMap(tokenMetadata) {
|
|
791
|
-
const map = /* @__PURE__ */ new Map();
|
|
792
|
-
for (const [address, metadata] of Object.entries(
|
|
793
|
-
tokenMetadata
|
|
794
|
-
)) {
|
|
795
|
-
map.set(address.toLowerCase(), metadata);
|
|
796
|
-
}
|
|
797
|
-
return map;
|
|
798
|
-
}
|
|
799
|
-
function enrichVaultsWithAssetData(vaults, vaultAssetsResponse) {
|
|
800
|
-
const logger = getLogger();
|
|
801
|
-
const vaultAssetMap = /* @__PURE__ */ new Map();
|
|
802
|
-
for (const entry of vaultAssetsResponse.vaultAssets) {
|
|
803
|
-
const key = buildVaultAssetKey(
|
|
804
|
-
entry.vaultAddress,
|
|
805
|
-
entry.chainId,
|
|
806
|
-
entry.assetAddress
|
|
807
|
-
);
|
|
808
|
-
vaultAssetMap.set(key, {
|
|
809
|
-
depositable: entry.depositable,
|
|
810
|
-
withdrawable: entry.withdrawable
|
|
811
|
-
});
|
|
812
|
-
}
|
|
813
|
-
const metadataMap = buildMetadataMap(
|
|
814
|
-
vaultAssetsResponse.tokenMetadata
|
|
815
|
-
);
|
|
816
|
-
return vaults.map((vault) => {
|
|
817
|
-
const assetAddress = vault.supportedAssets.address;
|
|
818
|
-
const key = buildVaultAssetKey(
|
|
819
|
-
vault.vault.boringVaultAddress,
|
|
820
|
-
vault.chainId,
|
|
821
|
-
assetAddress
|
|
822
|
-
);
|
|
823
|
-
const vaultAssetEntry = vaultAssetMap.get(key);
|
|
824
|
-
const tokenMeta = metadataMap.get(
|
|
825
|
-
assetAddress.toLowerCase()
|
|
826
|
-
);
|
|
827
|
-
if (!vaultAssetEntry && !tokenMeta) {
|
|
828
|
-
logger.debug(
|
|
829
|
-
`No vaultAssets match for vault ${vault.id}`
|
|
830
|
-
);
|
|
831
|
-
return vault;
|
|
832
|
-
}
|
|
833
|
-
return {
|
|
834
|
-
...vault,
|
|
835
|
-
supportedAssets: {
|
|
836
|
-
...vault.supportedAssets,
|
|
837
|
-
...tokenMeta && {
|
|
838
|
-
symbol: tokenMeta.symbol,
|
|
839
|
-
name: tokenMeta.name,
|
|
840
|
-
decimals: Number.parseInt(
|
|
841
|
-
tokenMeta.decimals,
|
|
842
|
-
10
|
|
843
|
-
),
|
|
844
|
-
coinGeckoTokenId: tokenMeta.coin_gecko_id || void 0
|
|
845
|
-
},
|
|
846
|
-
...vaultAssetEntry && {
|
|
847
|
-
depositable: vaultAssetEntry.depositable,
|
|
848
|
-
withdrawable: vaultAssetEntry.withdrawable
|
|
849
|
-
}
|
|
850
|
-
}
|
|
851
|
-
};
|
|
852
|
-
});
|
|
853
|
-
}
|
|
854
|
-
function enrichAssetsWithMetadata(assets, vaultAssetsResponse) {
|
|
855
|
-
const metadataMap = buildMetadataMap(
|
|
856
|
-
vaultAssetsResponse.tokenMetadata
|
|
857
|
-
);
|
|
858
|
-
return assets.map((asset) => {
|
|
859
|
-
const tokenMeta = metadataMap.get(
|
|
860
|
-
asset.address.toLowerCase()
|
|
861
|
-
);
|
|
862
|
-
if (!tokenMeta) {
|
|
863
|
-
return asset;
|
|
864
|
-
}
|
|
865
|
-
return {
|
|
866
|
-
...asset,
|
|
867
|
-
symbol: tokenMeta.symbol,
|
|
868
|
-
name: tokenMeta.name,
|
|
869
|
-
decimals: Number.parseInt(tokenMeta.decimals, 10),
|
|
870
|
-
coinGeckoTokenId: tokenMeta.coin_gecko_id || void 0
|
|
871
|
-
};
|
|
872
|
-
});
|
|
873
|
-
}
|
|
874
|
-
|
|
875
822
|
// src/client/amplify-sdk-client.ts
|
|
876
823
|
function validateVaultFilterOptions(options) {
|
|
877
824
|
if (!options) return;
|
|
@@ -932,58 +879,27 @@ function validateAssetFilterOptions(options) {
|
|
|
932
879
|
}
|
|
933
880
|
async function fetchVaultDataFromGraphQL() {
|
|
934
881
|
const endpoint = getGraphQLEndpoint();
|
|
935
|
-
const
|
|
936
|
-
const
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
]);
|
|
940
|
-
if (graphqlResult.status === "rejected") {
|
|
941
|
-
throw graphqlResult.reason;
|
|
942
|
-
}
|
|
943
|
-
const configs = graphqlResult.value.amplifySdkConfigs;
|
|
944
|
-
let vaults = [];
|
|
945
|
-
for (const config of configs) {
|
|
946
|
-
const vault = mapGraphQLConfigToVault(config);
|
|
947
|
-
if (vault) {
|
|
948
|
-
vaults.push(vault);
|
|
949
|
-
}
|
|
950
|
-
}
|
|
951
|
-
let assets = extractSupportedAssetsFromConfigs(configs);
|
|
952
|
-
if (restResult.status === "fulfilled") {
|
|
953
|
-
vaults = enrichVaultsWithAssetData(
|
|
954
|
-
vaults,
|
|
955
|
-
restResult.value
|
|
956
|
-
);
|
|
957
|
-
assets = enrichAssetsWithMetadata(
|
|
958
|
-
assets,
|
|
959
|
-
restResult.value
|
|
960
|
-
);
|
|
961
|
-
logger.debug(
|
|
962
|
-
"Enriched vault data with vaultAssets metadata"
|
|
963
|
-
);
|
|
964
|
-
} else {
|
|
965
|
-
logger.warn(
|
|
966
|
-
`Failed to fetch vaultAssets, using GraphQL-only data: ${restResult.reason instanceof Error ? restResult.reason.message : String(restResult.reason)}`
|
|
967
|
-
);
|
|
968
|
-
}
|
|
882
|
+
const response = await fetchAmplifySdkConfigs(endpoint);
|
|
883
|
+
const configs = response.amplifySdkConfigs;
|
|
884
|
+
const vaults = aggregateVaultConfigs(configs);
|
|
885
|
+
const assets = extractSupportedAssetsFromConfigs(configs);
|
|
969
886
|
return { vaults, assets };
|
|
970
887
|
}
|
|
971
888
|
function applyVaultFilters(vaults, options) {
|
|
972
889
|
if (!options) return vaults;
|
|
973
890
|
let filtered = vaults;
|
|
974
891
|
if (options.chainId !== void 0) {
|
|
975
|
-
filtered = filtered.filter(
|
|
976
|
-
(v) => v.chainId === options.chainId
|
|
977
|
-
);
|
|
892
|
+
filtered = filtered.filter((v) => v.chainId === options.chainId);
|
|
978
893
|
}
|
|
979
894
|
if (options.yieldType) {
|
|
980
|
-
filtered = filtered.filter(
|
|
981
|
-
(v) => v.yieldType === options.yieldType
|
|
982
|
-
);
|
|
895
|
+
filtered = filtered.filter((v) => v.yieldType === options.yieldType);
|
|
983
896
|
}
|
|
984
897
|
if (options.depositTokenAddress) {
|
|
898
|
+
const normalized = options.depositTokenAddress.toLowerCase();
|
|
985
899
|
filtered = filtered.filter(
|
|
986
|
-
(v) => v.
|
|
900
|
+
(v) => v.supportedAssets.some(
|
|
901
|
+
(a) => a.address.toLowerCase() === normalized
|
|
902
|
+
)
|
|
987
903
|
);
|
|
988
904
|
}
|
|
989
905
|
return filtered;
|
|
@@ -993,9 +909,7 @@ function applyAssetFilters(assets, options) {
|
|
|
993
909
|
let filtered = assets;
|
|
994
910
|
if (options.chains !== void 0 && options.chains.length > 0) {
|
|
995
911
|
filtered = filtered.filter(
|
|
996
|
-
(asset) => options.chains?.some(
|
|
997
|
-
(chainId) => asset.chains.includes(chainId)
|
|
998
|
-
)
|
|
912
|
+
(asset) => options.chains?.some((chainId) => asset.chains.includes(chainId))
|
|
999
913
|
);
|
|
1000
914
|
}
|
|
1001
915
|
if (options.address) {
|
|
@@ -1005,9 +919,7 @@ function applyAssetFilters(assets, options) {
|
|
|
1005
919
|
);
|
|
1006
920
|
}
|
|
1007
921
|
if (options.symbol) {
|
|
1008
|
-
filtered = filtered.filter(
|
|
1009
|
-
(asset) => asset.symbol === options.symbol
|
|
1010
|
-
);
|
|
922
|
+
filtered = filtered.filter((asset) => asset.symbol === options.symbol);
|
|
1011
923
|
}
|
|
1012
924
|
return filtered;
|
|
1013
925
|
}
|
|
@@ -1080,7 +992,9 @@ async function findVaultByConfig(params) {
|
|
|
1080
992
|
if (!vaultsByToken) {
|
|
1081
993
|
const allVaults = cache.getAllVaults();
|
|
1082
994
|
const matchingVaults = allVaults.filter(
|
|
1083
|
-
(vault) => vault.
|
|
995
|
+
(vault) => vault.supportedAssets.some(
|
|
996
|
+
(a) => a.address.toLowerCase() === normalizedAddress
|
|
997
|
+
)
|
|
1084
998
|
);
|
|
1085
999
|
vaultsByToken = matchingVaults.length > 0 ? matchingVaults : void 0;
|
|
1086
1000
|
}
|
|
@@ -1092,6 +1006,74 @@ async function findVaultByConfig(params) {
|
|
|
1092
1006
|
);
|
|
1093
1007
|
return matchingVault || null;
|
|
1094
1008
|
}
|
|
1009
|
+
async function getVaultsByConfig(params) {
|
|
1010
|
+
const cache = getCache();
|
|
1011
|
+
if (cache.isEmpty() || cache.isExpired()) {
|
|
1012
|
+
await cache.refresh();
|
|
1013
|
+
}
|
|
1014
|
+
let vaults = cache.getAllVaults();
|
|
1015
|
+
if (params?.yieldType) {
|
|
1016
|
+
if (!isValidYieldType(params.yieldType)) {
|
|
1017
|
+
throw new APIError(
|
|
1018
|
+
`Invalid yieldType: ${params.yieldType}. Must be one of: CORE, TREASURY, FRONTIER.`,
|
|
1019
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1020
|
+
);
|
|
1021
|
+
}
|
|
1022
|
+
vaults = vaults.filter((v) => v.yieldType === params.yieldType);
|
|
1023
|
+
}
|
|
1024
|
+
if (params?.chainId !== void 0) {
|
|
1025
|
+
if (!isValidChainId(params.chainId)) {
|
|
1026
|
+
throw new APIError(
|
|
1027
|
+
`Invalid chainId: ${params.chainId}. Must be a positive integer.`,
|
|
1028
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1029
|
+
);
|
|
1030
|
+
}
|
|
1031
|
+
vaults = vaults.filter((v) => v.chainId === params.chainId);
|
|
1032
|
+
}
|
|
1033
|
+
if (params?.depositAssetAddress) {
|
|
1034
|
+
if (!isValidAddress(params.depositAssetAddress)) {
|
|
1035
|
+
throw new APIError(
|
|
1036
|
+
`Invalid depositAssetAddress: ${params.depositAssetAddress}.`,
|
|
1037
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1038
|
+
);
|
|
1039
|
+
}
|
|
1040
|
+
const normalized = params.depositAssetAddress.toLowerCase();
|
|
1041
|
+
vaults = vaults.filter(
|
|
1042
|
+
(v) => v.supportedAssets.some(
|
|
1043
|
+
(a) => a.address.toLowerCase() === normalized
|
|
1044
|
+
)
|
|
1045
|
+
);
|
|
1046
|
+
}
|
|
1047
|
+
if (params?.withdrawAssetAddress) {
|
|
1048
|
+
if (!isValidAddress(params.withdrawAssetAddress)) {
|
|
1049
|
+
throw new APIError(
|
|
1050
|
+
`Invalid withdrawAssetAddress: ${params.withdrawAssetAddress}.`,
|
|
1051
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1052
|
+
);
|
|
1053
|
+
}
|
|
1054
|
+
const normalized = params.withdrawAssetAddress.toLowerCase();
|
|
1055
|
+
vaults = vaults.filter(
|
|
1056
|
+
(v) => v.supportedAssets.some(
|
|
1057
|
+
(a) => a.withdrawable !== false && a.address.toLowerCase() === normalized
|
|
1058
|
+
)
|
|
1059
|
+
);
|
|
1060
|
+
}
|
|
1061
|
+
if (params?.settlementAssetAddress) {
|
|
1062
|
+
if (!isValidAddress(params.settlementAssetAddress)) {
|
|
1063
|
+
throw new APIError(
|
|
1064
|
+
`Invalid settlementAssetAddress: ${params.settlementAssetAddress}.`,
|
|
1065
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1066
|
+
);
|
|
1067
|
+
}
|
|
1068
|
+
const normalized = params.settlementAssetAddress.toLowerCase();
|
|
1069
|
+
vaults = vaults.filter(
|
|
1070
|
+
(v) => v.supportedAssets.some(
|
|
1071
|
+
(a) => a.address.toLowerCase() === normalized
|
|
1072
|
+
)
|
|
1073
|
+
);
|
|
1074
|
+
}
|
|
1075
|
+
return vaults;
|
|
1076
|
+
}
|
|
1095
1077
|
async function getWithdrawSupportedAssets() {
|
|
1096
1078
|
const cache = getCache();
|
|
1097
1079
|
if (cache.isEmpty() || cache.isExpired()) {
|
|
@@ -1106,16 +1088,18 @@ async function getWithdrawSupportedAssets() {
|
|
|
1106
1088
|
}
|
|
1107
1089
|
const assetVaultMap = /* @__PURE__ */ new Map();
|
|
1108
1090
|
for (const vault of vaults) {
|
|
1109
|
-
const
|
|
1110
|
-
|
|
1111
|
-
assetVaultMap.
|
|
1091
|
+
for (const asset of vault.supportedAssets) {
|
|
1092
|
+
const assetAddress = asset.address.toLowerCase();
|
|
1093
|
+
if (!assetVaultMap.has(assetAddress)) {
|
|
1094
|
+
assetVaultMap.set(assetAddress, []);
|
|
1095
|
+
}
|
|
1096
|
+
assetVaultMap.get(assetAddress)?.push({
|
|
1097
|
+
id: vault.id,
|
|
1098
|
+
yieldType: vault.yieldType,
|
|
1099
|
+
chainId: vault.chainId,
|
|
1100
|
+
vaultId: vault.id
|
|
1101
|
+
});
|
|
1112
1102
|
}
|
|
1113
|
-
assetVaultMap.get(assetAddress)?.push({
|
|
1114
|
-
id: vault.id,
|
|
1115
|
-
yieldType: vault.yieldType,
|
|
1116
|
-
chainId: vault.chainId,
|
|
1117
|
-
vaultId: vault.id
|
|
1118
|
-
});
|
|
1119
1103
|
}
|
|
1120
1104
|
for (const [assetAddress, vaultsData] of assetVaultMap.entries()) {
|
|
1121
1105
|
const asset = assetMap.get(assetAddress);
|
|
@@ -1468,15 +1452,17 @@ exports.getClient = getClient;
|
|
|
1468
1452
|
exports.getLogger = getLogger;
|
|
1469
1453
|
exports.getRequestHeaders = getRequestHeaders;
|
|
1470
1454
|
exports.getRestV2BaseURL = getRestV2BaseURL;
|
|
1455
|
+
exports.getVaultsByConfig = getVaultsByConfig;
|
|
1471
1456
|
exports.getWithdrawSupportedAssets = getWithdrawSupportedAssets;
|
|
1472
1457
|
exports.initAmplifySDK = initAmplifySDK;
|
|
1473
1458
|
exports.initializeCache = initializeCache;
|
|
1474
1459
|
exports.isCacheReady = isCacheReady;
|
|
1475
1460
|
exports.isValidAddress = isValidAddress;
|
|
1461
|
+
exports.isValidChainId = isValidChainId;
|
|
1476
1462
|
exports.refreshVaultCache = refreshVaultCache;
|
|
1477
1463
|
exports.setLogLevel = setLogLevel;
|
|
1478
1464
|
exports.setLogger = setLogger;
|
|
1479
1465
|
exports.toChainId = toChainId;
|
|
1480
1466
|
exports.waitForCacheReady = waitForCacheReady;
|
|
1481
|
-
//# sourceMappingURL=chunk-
|
|
1482
|
-
//# sourceMappingURL=chunk-
|
|
1467
|
+
//# sourceMappingURL=chunk-PKGFLHZA.js.map
|
|
1468
|
+
//# sourceMappingURL=chunk-PKGFLHZA.js.map
|