@paxoslabs/amplify-sdk 0.4.2 → 0.4.3-alpha.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/CHANGELOG.md +79 -64
- package/dist/{chain-utils-CRMbWzu7.d.mts → chain-utils-CbVFMjwR.d.mts} +13 -1
- package/dist/{chain-utils-CRMbWzu7.d.ts → chain-utils-CbVFMjwR.d.ts} +13 -1
- package/dist/{chunk-5CV25BTQ.js → chunk-4OEL42W2.mjs} +83 -4
- package/dist/chunk-4OEL42W2.mjs.map +1 -0
- package/dist/{chunk-RW7PZETN.mjs → chunk-7RAFG3NI.mjs} +167 -228
- package/dist/chunk-7RAFG3NI.mjs.map +1 -0
- package/dist/{chunk-CQZCGPZK.mjs → chunk-E2HBXOZY.js} +92 -3
- package/dist/chunk-E2HBXOZY.js.map +1 -0
- package/dist/{chunk-WZXCJAKM.js → chunk-EHRZFLWL.js} +12 -12
- package/dist/{chunk-WZXCJAKM.js.map → chunk-EHRZFLWL.js.map} +1 -1
- package/dist/{chunk-GMMBJB4B.mjs → chunk-GSYGURYO.mjs} +71 -46
- package/dist/chunk-GSYGURYO.mjs.map +1 -0
- package/dist/{chunk-VZED4E3L.mjs → chunk-HBFBGNRH.mjs} +3 -3
- package/dist/{chunk-VZED4E3L.mjs.map → chunk-HBFBGNRH.mjs.map} +1 -1
- package/dist/{chunk-TPU2HZAX.mjs → chunk-L3X5UBG6.mjs} +86 -169
- package/dist/chunk-L3X5UBG6.mjs.map +1 -0
- package/dist/{chunk-BQG3XKTU.js → chunk-R5G6F7RP.js} +168 -227
- package/dist/chunk-R5G6F7RP.js.map +1 -0
- package/dist/{chunk-OZJNKGW6.js → chunk-WHL5LQRP.js} +120 -95
- package/dist/chunk-WHL5LQRP.js.map +1 -0
- package/dist/{chunk-2YPKHXFJ.js → chunk-ZJBJFFBQ.js} +180 -263
- package/dist/chunk-ZJBJFFBQ.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
|
*
|
|
@@ -224,6 +240,8 @@ var VaultCache = class {
|
|
|
224
240
|
const { vaults, assets } = await fetchVaultDataFromGraphQL();
|
|
225
241
|
this.vaults.clear();
|
|
226
242
|
this.assets.clear();
|
|
243
|
+
this.vaultsByAddress.clear();
|
|
244
|
+
this.vaultsByName.clear();
|
|
227
245
|
for (const vault of vaults) {
|
|
228
246
|
const tokenAddress = vault.vault.baseTokenAddress;
|
|
229
247
|
const existing = this.vaults.get(tokenAddress);
|
|
@@ -232,6 +250,13 @@ var VaultCache = class {
|
|
|
232
250
|
} else {
|
|
233
251
|
this.vaults.set(tokenAddress, [vault]);
|
|
234
252
|
}
|
|
253
|
+
this.vaultsByAddress.set(
|
|
254
|
+
vault.vault.boringVaultAddress.toLowerCase(),
|
|
255
|
+
vault
|
|
256
|
+
);
|
|
257
|
+
if (vault.name) {
|
|
258
|
+
this.vaultsByName.set(vault.name.toLowerCase(), vault);
|
|
259
|
+
}
|
|
235
260
|
}
|
|
236
261
|
for (const asset of assets) {
|
|
237
262
|
this.assets.set(asset.address, asset);
|
|
@@ -255,6 +280,8 @@ var VaultCache = class {
|
|
|
255
280
|
clear() {
|
|
256
281
|
this.vaults.clear();
|
|
257
282
|
this.assets.clear();
|
|
283
|
+
this.vaultsByAddress.clear();
|
|
284
|
+
this.vaultsByName.clear();
|
|
258
285
|
this.lastFetch = 0;
|
|
259
286
|
}
|
|
260
287
|
/**
|
|
@@ -506,6 +533,11 @@ var VAULT_FIELDS = `
|
|
|
506
533
|
symbol
|
|
507
534
|
coinGeckoApiId
|
|
508
535
|
}
|
|
536
|
+
withdrawalSla {
|
|
537
|
+
withdrawAssetAddress
|
|
538
|
+
externalWithdrawalQueueDelaySLA
|
|
539
|
+
externalAccountantRateUpdateSLA
|
|
540
|
+
}
|
|
509
541
|
`;
|
|
510
542
|
var DEPOSIT_TOKEN_FIELDS = `
|
|
511
543
|
id
|
|
@@ -513,6 +545,22 @@ var DEPOSIT_TOKEN_FIELDS = `
|
|
|
513
545
|
chainId
|
|
514
546
|
name
|
|
515
547
|
`;
|
|
548
|
+
var TOKEN_METADATA_FIELDS = `
|
|
549
|
+
address
|
|
550
|
+
chainId
|
|
551
|
+
symbol
|
|
552
|
+
tokenName
|
|
553
|
+
decimals
|
|
554
|
+
coinGeckoTokenId
|
|
555
|
+
tokenStandard
|
|
556
|
+
source
|
|
557
|
+
firstSeenAt
|
|
558
|
+
metadataRefreshedAt
|
|
559
|
+
`;
|
|
560
|
+
var VAULT_ASSET_FLAGS_FIELDS = `
|
|
561
|
+
depositable
|
|
562
|
+
withdrawable
|
|
563
|
+
`;
|
|
516
564
|
var SDK_CONFIG_CORE_FIELDS = `
|
|
517
565
|
id
|
|
518
566
|
chainId
|
|
@@ -531,6 +579,16 @@ function buildSdkConfigsQuery(options) {
|
|
|
531
579
|
`depositTokenAddress { ${options.depositTokenAddress} }`
|
|
532
580
|
);
|
|
533
581
|
}
|
|
582
|
+
if (options.tokenMetadata) {
|
|
583
|
+
nestedFields.push(
|
|
584
|
+
`tokenMetadata { ${options.tokenMetadata} }`
|
|
585
|
+
);
|
|
586
|
+
}
|
|
587
|
+
if (options.vaultAssetFlags) {
|
|
588
|
+
nestedFields.push(
|
|
589
|
+
`vaultAssetFlags { ${options.vaultAssetFlags} }`
|
|
590
|
+
);
|
|
591
|
+
}
|
|
534
592
|
const allFields = [
|
|
535
593
|
...options.fields,
|
|
536
594
|
...nestedFields
|
|
@@ -607,7 +665,9 @@ async function fetchAmplifySdkConfigs(endpoint, variables) {
|
|
|
607
665
|
const query = buildSdkConfigsQuery({
|
|
608
666
|
fields: SDK_CONFIG_CORE_FIELDS.trim().split(/\s+/),
|
|
609
667
|
vault: VAULT_FIELDS,
|
|
610
|
-
depositTokenAddress: DEPOSIT_TOKEN_FIELDS
|
|
668
|
+
depositTokenAddress: DEPOSIT_TOKEN_FIELDS,
|
|
669
|
+
tokenMetadata: TOKEN_METADATA_FIELDS,
|
|
670
|
+
vaultAssetFlags: VAULT_ASSET_FLAGS_FIELDS
|
|
611
671
|
});
|
|
612
672
|
return executeGraphQLQuery(
|
|
613
673
|
endpoint,
|
|
@@ -658,6 +718,7 @@ function mapGraphQLConfigToVault(config) {
|
|
|
658
718
|
id: config.id,
|
|
659
719
|
chainId: config.chainId,
|
|
660
720
|
yieldType,
|
|
721
|
+
name: vault.name,
|
|
661
722
|
vault: {
|
|
662
723
|
boringVaultAddress: vault.boringVaultAddress,
|
|
663
724
|
tellerAddress: vault.tellerModuleId,
|
|
@@ -671,10 +732,18 @@ function mapGraphQLConfigToVault(config) {
|
|
|
671
732
|
},
|
|
672
733
|
supportedAssets: {
|
|
673
734
|
address: depositTokenAddress.address,
|
|
674
|
-
symbol: depositTokenAddress.name,
|
|
675
|
-
name: depositTokenAddress.name,
|
|
676
|
-
decimals: 0
|
|
677
|
-
|
|
735
|
+
symbol: config.tokenMetadata?.symbol ?? depositTokenAddress.name,
|
|
736
|
+
name: config.tokenMetadata?.tokenName ?? depositTokenAddress.name,
|
|
737
|
+
decimals: config.tokenMetadata?.decimals ?? 0,
|
|
738
|
+
...config.vaultAssetFlags && {
|
|
739
|
+
depositable: config.vaultAssetFlags.depositable,
|
|
740
|
+
withdrawable: config.vaultAssetFlags.withdrawable
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
sla: vault.withdrawalSla && vault.withdrawalSla.length > 0 ? {
|
|
744
|
+
externalWithdrawalQueueDelaySLA: vault.withdrawalSla[0].externalWithdrawalQueueDelaySLA,
|
|
745
|
+
externalAccountantRateUpdateSLA: vault.withdrawalSla[0].externalAccountantRateUpdateSLA
|
|
746
|
+
} : void 0
|
|
678
747
|
};
|
|
679
748
|
}
|
|
680
749
|
function extractSupportedAssetsFromConfigs(configs) {
|
|
@@ -685,12 +754,17 @@ function extractSupportedAssetsFromConfigs(configs) {
|
|
|
685
754
|
const existing = assetMap.get(key);
|
|
686
755
|
if (existing) {
|
|
687
756
|
existing.chains.add(config.chainId);
|
|
757
|
+
if (existing.decimals === 0 && config.tokenMetadata?.decimals) {
|
|
758
|
+
existing.decimals = config.tokenMetadata.decimals;
|
|
759
|
+
existing.symbol = config.tokenMetadata.symbol ?? existing.symbol;
|
|
760
|
+
existing.name = config.tokenMetadata.tokenName ?? existing.name;
|
|
761
|
+
}
|
|
688
762
|
} else {
|
|
689
763
|
assetMap.set(key, {
|
|
690
764
|
address: config.depositTokenAddress.address,
|
|
691
|
-
symbol: config.depositTokenAddress.name,
|
|
692
|
-
name: config.depositTokenAddress.name,
|
|
693
|
-
decimals: 0,
|
|
765
|
+
symbol: config.tokenMetadata?.symbol ?? config.depositTokenAddress.name,
|
|
766
|
+
name: config.tokenMetadata?.tokenName ?? config.depositTokenAddress.name,
|
|
767
|
+
decimals: config.tokenMetadata?.decimals ?? 0,
|
|
694
768
|
chains: /* @__PURE__ */ new Set([config.chainId])
|
|
695
769
|
});
|
|
696
770
|
}
|
|
@@ -704,174 +778,6 @@ function extractSupportedAssetsFromConfigs(configs) {
|
|
|
704
778
|
}));
|
|
705
779
|
}
|
|
706
780
|
|
|
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
781
|
// src/client/amplify-sdk-client.ts
|
|
876
782
|
function validateVaultFilterOptions(options) {
|
|
877
783
|
if (!options) return;
|
|
@@ -932,54 +838,29 @@ function validateAssetFilterOptions(options) {
|
|
|
932
838
|
}
|
|
933
839
|
async function fetchVaultDataFromGraphQL() {
|
|
934
840
|
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 = [];
|
|
841
|
+
const response = await fetchAmplifySdkConfigs(endpoint);
|
|
842
|
+
const configs = response.amplifySdkConfigs;
|
|
843
|
+
const vaults = [];
|
|
844
|
+
const seenVaultIds = /* @__PURE__ */ new Set();
|
|
945
845
|
for (const config of configs) {
|
|
846
|
+
if (seenVaultIds.has(config.vaultId)) continue;
|
|
946
847
|
const vault = mapGraphQLConfigToVault(config);
|
|
947
848
|
if (vault) {
|
|
849
|
+
seenVaultIds.add(config.vaultId);
|
|
948
850
|
vaults.push(vault);
|
|
949
851
|
}
|
|
950
852
|
}
|
|
951
|
-
|
|
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
|
-
}
|
|
853
|
+
const assets = extractSupportedAssetsFromConfigs(configs);
|
|
969
854
|
return { vaults, assets };
|
|
970
855
|
}
|
|
971
856
|
function applyVaultFilters(vaults, options) {
|
|
972
857
|
if (!options) return vaults;
|
|
973
858
|
let filtered = vaults;
|
|
974
859
|
if (options.chainId !== void 0) {
|
|
975
|
-
filtered = filtered.filter(
|
|
976
|
-
(v) => v.chainId === options.chainId
|
|
977
|
-
);
|
|
860
|
+
filtered = filtered.filter((v) => v.chainId === options.chainId);
|
|
978
861
|
}
|
|
979
862
|
if (options.yieldType) {
|
|
980
|
-
filtered = filtered.filter(
|
|
981
|
-
(v) => v.yieldType === options.yieldType
|
|
982
|
-
);
|
|
863
|
+
filtered = filtered.filter((v) => v.yieldType === options.yieldType);
|
|
983
864
|
}
|
|
984
865
|
if (options.depositTokenAddress) {
|
|
985
866
|
filtered = filtered.filter(
|
|
@@ -993,9 +874,7 @@ function applyAssetFilters(assets, options) {
|
|
|
993
874
|
let filtered = assets;
|
|
994
875
|
if (options.chains !== void 0 && options.chains.length > 0) {
|
|
995
876
|
filtered = filtered.filter(
|
|
996
|
-
(asset) => options.chains?.some(
|
|
997
|
-
(chainId) => asset.chains.includes(chainId)
|
|
998
|
-
)
|
|
877
|
+
(asset) => options.chains?.some((chainId) => asset.chains.includes(chainId))
|
|
999
878
|
);
|
|
1000
879
|
}
|
|
1001
880
|
if (options.address) {
|
|
@@ -1005,9 +884,7 @@ function applyAssetFilters(assets, options) {
|
|
|
1005
884
|
);
|
|
1006
885
|
}
|
|
1007
886
|
if (options.symbol) {
|
|
1008
|
-
filtered = filtered.filter(
|
|
1009
|
-
(asset) => asset.symbol === options.symbol
|
|
1010
|
-
);
|
|
887
|
+
filtered = filtered.filter((asset) => asset.symbol === options.symbol);
|
|
1011
888
|
}
|
|
1012
889
|
return filtered;
|
|
1013
890
|
}
|
|
@@ -1092,6 +969,68 @@ async function findVaultByConfig(params) {
|
|
|
1092
969
|
);
|
|
1093
970
|
return matchingVault || null;
|
|
1094
971
|
}
|
|
972
|
+
async function getVaultsByConfig(params) {
|
|
973
|
+
const cache = getCache();
|
|
974
|
+
if (cache.isEmpty() || cache.isExpired()) {
|
|
975
|
+
await cache.refresh();
|
|
976
|
+
}
|
|
977
|
+
let vaults = cache.getAllVaults();
|
|
978
|
+
if (params?.yieldType) {
|
|
979
|
+
if (!isValidYieldType(params.yieldType)) {
|
|
980
|
+
throw new APIError(
|
|
981
|
+
`Invalid yieldType: ${params.yieldType}. Must be one of: CORE, TREASURY, FRONTIER.`,
|
|
982
|
+
{ endpoint: "getVaultsByConfig" }
|
|
983
|
+
);
|
|
984
|
+
}
|
|
985
|
+
vaults = vaults.filter((v) => v.yieldType === params.yieldType);
|
|
986
|
+
}
|
|
987
|
+
if (params?.chainId !== void 0) {
|
|
988
|
+
if (!isValidChainId(params.chainId)) {
|
|
989
|
+
throw new APIError(
|
|
990
|
+
`Invalid chainId: ${params.chainId}. Must be a positive integer.`,
|
|
991
|
+
{ endpoint: "getVaultsByConfig" }
|
|
992
|
+
);
|
|
993
|
+
}
|
|
994
|
+
vaults = vaults.filter((v) => v.chainId === params.chainId);
|
|
995
|
+
}
|
|
996
|
+
if (params?.depositAssetAddress) {
|
|
997
|
+
if (!isValidAddress(params.depositAssetAddress)) {
|
|
998
|
+
throw new APIError(
|
|
999
|
+
`Invalid depositAssetAddress: ${params.depositAssetAddress}.`,
|
|
1000
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1001
|
+
);
|
|
1002
|
+
}
|
|
1003
|
+
const normalized = params.depositAssetAddress.toLowerCase();
|
|
1004
|
+
vaults = vaults.filter(
|
|
1005
|
+
(v) => v.vault.baseTokenAddress.toLowerCase() === normalized
|
|
1006
|
+
);
|
|
1007
|
+
}
|
|
1008
|
+
if (params?.withdrawAssetAddress) {
|
|
1009
|
+
if (!isValidAddress(params.withdrawAssetAddress)) {
|
|
1010
|
+
throw new APIError(
|
|
1011
|
+
`Invalid withdrawAssetAddress: ${params.withdrawAssetAddress}.`,
|
|
1012
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1013
|
+
);
|
|
1014
|
+
}
|
|
1015
|
+
const normalized = params.withdrawAssetAddress.toLowerCase();
|
|
1016
|
+
vaults = vaults.filter(
|
|
1017
|
+
(v) => v.supportedAssets.withdrawable !== false && v.supportedAssets.address.toLowerCase() === normalized
|
|
1018
|
+
);
|
|
1019
|
+
}
|
|
1020
|
+
if (params?.settlementAssetAddress) {
|
|
1021
|
+
if (!isValidAddress(params.settlementAssetAddress)) {
|
|
1022
|
+
throw new APIError(
|
|
1023
|
+
`Invalid settlementAssetAddress: ${params.settlementAssetAddress}.`,
|
|
1024
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1025
|
+
);
|
|
1026
|
+
}
|
|
1027
|
+
const normalized = params.settlementAssetAddress.toLowerCase();
|
|
1028
|
+
vaults = vaults.filter(
|
|
1029
|
+
(v) => v.vault.baseTokenAddress.toLowerCase() === normalized
|
|
1030
|
+
);
|
|
1031
|
+
}
|
|
1032
|
+
return vaults;
|
|
1033
|
+
}
|
|
1095
1034
|
async function getWithdrawSupportedAssets() {
|
|
1096
1035
|
const cache = getCache();
|
|
1097
1036
|
if (cache.isEmpty() || cache.isExpired()) {
|
|
@@ -1468,15 +1407,17 @@ exports.getClient = getClient;
|
|
|
1468
1407
|
exports.getLogger = getLogger;
|
|
1469
1408
|
exports.getRequestHeaders = getRequestHeaders;
|
|
1470
1409
|
exports.getRestV2BaseURL = getRestV2BaseURL;
|
|
1410
|
+
exports.getVaultsByConfig = getVaultsByConfig;
|
|
1471
1411
|
exports.getWithdrawSupportedAssets = getWithdrawSupportedAssets;
|
|
1472
1412
|
exports.initAmplifySDK = initAmplifySDK;
|
|
1473
1413
|
exports.initializeCache = initializeCache;
|
|
1474
1414
|
exports.isCacheReady = isCacheReady;
|
|
1475
1415
|
exports.isValidAddress = isValidAddress;
|
|
1416
|
+
exports.isValidChainId = isValidChainId;
|
|
1476
1417
|
exports.refreshVaultCache = refreshVaultCache;
|
|
1477
1418
|
exports.setLogLevel = setLogLevel;
|
|
1478
1419
|
exports.setLogger = setLogger;
|
|
1479
1420
|
exports.toChainId = toChainId;
|
|
1480
1421
|
exports.waitForCacheReady = waitForCacheReady;
|
|
1481
|
-
//# sourceMappingURL=chunk-
|
|
1482
|
-
//# sourceMappingURL=chunk-
|
|
1422
|
+
//# sourceMappingURL=chunk-R5G6F7RP.js.map
|
|
1423
|
+
//# sourceMappingURL=chunk-R5G6F7RP.js.map
|