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