@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
|
@@ -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
|
*
|
|
@@ -222,6 +238,8 @@ var VaultCache = class {
|
|
|
222
238
|
const { vaults, assets } = await fetchVaultDataFromGraphQL();
|
|
223
239
|
this.vaults.clear();
|
|
224
240
|
this.assets.clear();
|
|
241
|
+
this.vaultsByAddress.clear();
|
|
242
|
+
this.vaultsByName.clear();
|
|
225
243
|
for (const vault of vaults) {
|
|
226
244
|
const tokenAddress = vault.vault.baseTokenAddress;
|
|
227
245
|
const existing = this.vaults.get(tokenAddress);
|
|
@@ -230,6 +248,13 @@ var VaultCache = class {
|
|
|
230
248
|
} else {
|
|
231
249
|
this.vaults.set(tokenAddress, [vault]);
|
|
232
250
|
}
|
|
251
|
+
this.vaultsByAddress.set(
|
|
252
|
+
vault.vault.boringVaultAddress.toLowerCase(),
|
|
253
|
+
vault
|
|
254
|
+
);
|
|
255
|
+
if (vault.name) {
|
|
256
|
+
this.vaultsByName.set(vault.name.toLowerCase(), vault);
|
|
257
|
+
}
|
|
233
258
|
}
|
|
234
259
|
for (const asset of assets) {
|
|
235
260
|
this.assets.set(asset.address, asset);
|
|
@@ -253,6 +278,8 @@ var VaultCache = class {
|
|
|
253
278
|
clear() {
|
|
254
279
|
this.vaults.clear();
|
|
255
280
|
this.assets.clear();
|
|
281
|
+
this.vaultsByAddress.clear();
|
|
282
|
+
this.vaultsByName.clear();
|
|
256
283
|
this.lastFetch = 0;
|
|
257
284
|
}
|
|
258
285
|
/**
|
|
@@ -504,6 +531,11 @@ var VAULT_FIELDS = `
|
|
|
504
531
|
symbol
|
|
505
532
|
coinGeckoApiId
|
|
506
533
|
}
|
|
534
|
+
withdrawalSla {
|
|
535
|
+
withdrawAssetAddress
|
|
536
|
+
externalWithdrawalQueueDelaySLA
|
|
537
|
+
externalAccountantRateUpdateSLA
|
|
538
|
+
}
|
|
507
539
|
`;
|
|
508
540
|
var DEPOSIT_TOKEN_FIELDS = `
|
|
509
541
|
id
|
|
@@ -511,6 +543,22 @@ var DEPOSIT_TOKEN_FIELDS = `
|
|
|
511
543
|
chainId
|
|
512
544
|
name
|
|
513
545
|
`;
|
|
546
|
+
var TOKEN_METADATA_FIELDS = `
|
|
547
|
+
address
|
|
548
|
+
chainId
|
|
549
|
+
symbol
|
|
550
|
+
tokenName
|
|
551
|
+
decimals
|
|
552
|
+
coinGeckoTokenId
|
|
553
|
+
tokenStandard
|
|
554
|
+
source
|
|
555
|
+
firstSeenAt
|
|
556
|
+
metadataRefreshedAt
|
|
557
|
+
`;
|
|
558
|
+
var VAULT_ASSET_FLAGS_FIELDS = `
|
|
559
|
+
depositable
|
|
560
|
+
withdrawable
|
|
561
|
+
`;
|
|
514
562
|
var SDK_CONFIG_CORE_FIELDS = `
|
|
515
563
|
id
|
|
516
564
|
chainId
|
|
@@ -529,6 +577,16 @@ function buildSdkConfigsQuery(options) {
|
|
|
529
577
|
`depositTokenAddress { ${options.depositTokenAddress} }`
|
|
530
578
|
);
|
|
531
579
|
}
|
|
580
|
+
if (options.tokenMetadata) {
|
|
581
|
+
nestedFields.push(
|
|
582
|
+
`tokenMetadata { ${options.tokenMetadata} }`
|
|
583
|
+
);
|
|
584
|
+
}
|
|
585
|
+
if (options.vaultAssetFlags) {
|
|
586
|
+
nestedFields.push(
|
|
587
|
+
`vaultAssetFlags { ${options.vaultAssetFlags} }`
|
|
588
|
+
);
|
|
589
|
+
}
|
|
532
590
|
const allFields = [
|
|
533
591
|
...options.fields,
|
|
534
592
|
...nestedFields
|
|
@@ -605,7 +663,9 @@ async function fetchAmplifySdkConfigs(endpoint, variables) {
|
|
|
605
663
|
const query = buildSdkConfigsQuery({
|
|
606
664
|
fields: SDK_CONFIG_CORE_FIELDS.trim().split(/\s+/),
|
|
607
665
|
vault: VAULT_FIELDS,
|
|
608
|
-
depositTokenAddress: DEPOSIT_TOKEN_FIELDS
|
|
666
|
+
depositTokenAddress: DEPOSIT_TOKEN_FIELDS,
|
|
667
|
+
tokenMetadata: TOKEN_METADATA_FIELDS,
|
|
668
|
+
vaultAssetFlags: VAULT_ASSET_FLAGS_FIELDS
|
|
609
669
|
});
|
|
610
670
|
return executeGraphQLQuery(
|
|
611
671
|
endpoint,
|
|
@@ -656,6 +716,7 @@ function mapGraphQLConfigToVault(config) {
|
|
|
656
716
|
id: config.id,
|
|
657
717
|
chainId: config.chainId,
|
|
658
718
|
yieldType,
|
|
719
|
+
name: vault.name,
|
|
659
720
|
vault: {
|
|
660
721
|
boringVaultAddress: vault.boringVaultAddress,
|
|
661
722
|
tellerAddress: vault.tellerModuleId,
|
|
@@ -669,10 +730,18 @@ function mapGraphQLConfigToVault(config) {
|
|
|
669
730
|
},
|
|
670
731
|
supportedAssets: {
|
|
671
732
|
address: depositTokenAddress.address,
|
|
672
|
-
symbol: depositTokenAddress.name,
|
|
673
|
-
name: depositTokenAddress.name,
|
|
674
|
-
decimals: 0
|
|
675
|
-
|
|
733
|
+
symbol: config.tokenMetadata?.symbol ?? depositTokenAddress.name,
|
|
734
|
+
name: config.tokenMetadata?.tokenName ?? depositTokenAddress.name,
|
|
735
|
+
decimals: config.tokenMetadata?.decimals ?? 0,
|
|
736
|
+
...config.vaultAssetFlags && {
|
|
737
|
+
depositable: config.vaultAssetFlags.depositable,
|
|
738
|
+
withdrawable: config.vaultAssetFlags.withdrawable
|
|
739
|
+
}
|
|
740
|
+
},
|
|
741
|
+
sla: vault.withdrawalSla && vault.withdrawalSla.length > 0 ? {
|
|
742
|
+
externalWithdrawalQueueDelaySLA: vault.withdrawalSla[0].externalWithdrawalQueueDelaySLA,
|
|
743
|
+
externalAccountantRateUpdateSLA: vault.withdrawalSla[0].externalAccountantRateUpdateSLA
|
|
744
|
+
} : void 0
|
|
676
745
|
};
|
|
677
746
|
}
|
|
678
747
|
function extractSupportedAssetsFromConfigs(configs) {
|
|
@@ -683,12 +752,17 @@ function extractSupportedAssetsFromConfigs(configs) {
|
|
|
683
752
|
const existing = assetMap.get(key);
|
|
684
753
|
if (existing) {
|
|
685
754
|
existing.chains.add(config.chainId);
|
|
755
|
+
if (existing.decimals === 0 && config.tokenMetadata?.decimals) {
|
|
756
|
+
existing.decimals = config.tokenMetadata.decimals;
|
|
757
|
+
existing.symbol = config.tokenMetadata.symbol ?? existing.symbol;
|
|
758
|
+
existing.name = config.tokenMetadata.tokenName ?? existing.name;
|
|
759
|
+
}
|
|
686
760
|
} else {
|
|
687
761
|
assetMap.set(key, {
|
|
688
762
|
address: config.depositTokenAddress.address,
|
|
689
|
-
symbol: config.depositTokenAddress.name,
|
|
690
|
-
name: config.depositTokenAddress.name,
|
|
691
|
-
decimals: 0,
|
|
763
|
+
symbol: config.tokenMetadata?.symbol ?? config.depositTokenAddress.name,
|
|
764
|
+
name: config.tokenMetadata?.tokenName ?? config.depositTokenAddress.name,
|
|
765
|
+
decimals: config.tokenMetadata?.decimals ?? 0,
|
|
692
766
|
chains: /* @__PURE__ */ new Set([config.chainId])
|
|
693
767
|
});
|
|
694
768
|
}
|
|
@@ -702,174 +776,6 @@ function extractSupportedAssetsFromConfigs(configs) {
|
|
|
702
776
|
}));
|
|
703
777
|
}
|
|
704
778
|
|
|
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
779
|
// src/client/amplify-sdk-client.ts
|
|
874
780
|
function validateVaultFilterOptions(options) {
|
|
875
781
|
if (!options) return;
|
|
@@ -930,54 +836,29 @@ function validateAssetFilterOptions(options) {
|
|
|
930
836
|
}
|
|
931
837
|
async function fetchVaultDataFromGraphQL() {
|
|
932
838
|
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 = [];
|
|
839
|
+
const response = await fetchAmplifySdkConfigs(endpoint);
|
|
840
|
+
const configs = response.amplifySdkConfigs;
|
|
841
|
+
const vaults = [];
|
|
842
|
+
const seenVaultIds = /* @__PURE__ */ new Set();
|
|
943
843
|
for (const config of configs) {
|
|
844
|
+
if (seenVaultIds.has(config.vaultId)) continue;
|
|
944
845
|
const vault = mapGraphQLConfigToVault(config);
|
|
945
846
|
if (vault) {
|
|
847
|
+
seenVaultIds.add(config.vaultId);
|
|
946
848
|
vaults.push(vault);
|
|
947
849
|
}
|
|
948
850
|
}
|
|
949
|
-
|
|
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
|
-
}
|
|
851
|
+
const assets = extractSupportedAssetsFromConfigs(configs);
|
|
967
852
|
return { vaults, assets };
|
|
968
853
|
}
|
|
969
854
|
function applyVaultFilters(vaults, options) {
|
|
970
855
|
if (!options) return vaults;
|
|
971
856
|
let filtered = vaults;
|
|
972
857
|
if (options.chainId !== void 0) {
|
|
973
|
-
filtered = filtered.filter(
|
|
974
|
-
(v) => v.chainId === options.chainId
|
|
975
|
-
);
|
|
858
|
+
filtered = filtered.filter((v) => v.chainId === options.chainId);
|
|
976
859
|
}
|
|
977
860
|
if (options.yieldType) {
|
|
978
|
-
filtered = filtered.filter(
|
|
979
|
-
(v) => v.yieldType === options.yieldType
|
|
980
|
-
);
|
|
861
|
+
filtered = filtered.filter((v) => v.yieldType === options.yieldType);
|
|
981
862
|
}
|
|
982
863
|
if (options.depositTokenAddress) {
|
|
983
864
|
filtered = filtered.filter(
|
|
@@ -991,9 +872,7 @@ function applyAssetFilters(assets, options) {
|
|
|
991
872
|
let filtered = assets;
|
|
992
873
|
if (options.chains !== void 0 && options.chains.length > 0) {
|
|
993
874
|
filtered = filtered.filter(
|
|
994
|
-
(asset) => options.chains?.some(
|
|
995
|
-
(chainId) => asset.chains.includes(chainId)
|
|
996
|
-
)
|
|
875
|
+
(asset) => options.chains?.some((chainId) => asset.chains.includes(chainId))
|
|
997
876
|
);
|
|
998
877
|
}
|
|
999
878
|
if (options.address) {
|
|
@@ -1003,9 +882,7 @@ function applyAssetFilters(assets, options) {
|
|
|
1003
882
|
);
|
|
1004
883
|
}
|
|
1005
884
|
if (options.symbol) {
|
|
1006
|
-
filtered = filtered.filter(
|
|
1007
|
-
(asset) => asset.symbol === options.symbol
|
|
1008
|
-
);
|
|
885
|
+
filtered = filtered.filter((asset) => asset.symbol === options.symbol);
|
|
1009
886
|
}
|
|
1010
887
|
return filtered;
|
|
1011
888
|
}
|
|
@@ -1090,6 +967,68 @@ async function findVaultByConfig(params) {
|
|
|
1090
967
|
);
|
|
1091
968
|
return matchingVault || null;
|
|
1092
969
|
}
|
|
970
|
+
async function getVaultsByConfig(params) {
|
|
971
|
+
const cache = getCache();
|
|
972
|
+
if (cache.isEmpty() || cache.isExpired()) {
|
|
973
|
+
await cache.refresh();
|
|
974
|
+
}
|
|
975
|
+
let vaults = cache.getAllVaults();
|
|
976
|
+
if (params?.yieldType) {
|
|
977
|
+
if (!isValidYieldType(params.yieldType)) {
|
|
978
|
+
throw new APIError(
|
|
979
|
+
`Invalid yieldType: ${params.yieldType}. Must be one of: CORE, TREASURY, FRONTIER.`,
|
|
980
|
+
{ endpoint: "getVaultsByConfig" }
|
|
981
|
+
);
|
|
982
|
+
}
|
|
983
|
+
vaults = vaults.filter((v) => v.yieldType === params.yieldType);
|
|
984
|
+
}
|
|
985
|
+
if (params?.chainId !== void 0) {
|
|
986
|
+
if (!isValidChainId(params.chainId)) {
|
|
987
|
+
throw new APIError(
|
|
988
|
+
`Invalid chainId: ${params.chainId}. Must be a positive integer.`,
|
|
989
|
+
{ endpoint: "getVaultsByConfig" }
|
|
990
|
+
);
|
|
991
|
+
}
|
|
992
|
+
vaults = vaults.filter((v) => v.chainId === params.chainId);
|
|
993
|
+
}
|
|
994
|
+
if (params?.depositAssetAddress) {
|
|
995
|
+
if (!isValidAddress(params.depositAssetAddress)) {
|
|
996
|
+
throw new APIError(
|
|
997
|
+
`Invalid depositAssetAddress: ${params.depositAssetAddress}.`,
|
|
998
|
+
{ endpoint: "getVaultsByConfig" }
|
|
999
|
+
);
|
|
1000
|
+
}
|
|
1001
|
+
const normalized = params.depositAssetAddress.toLowerCase();
|
|
1002
|
+
vaults = vaults.filter(
|
|
1003
|
+
(v) => v.vault.baseTokenAddress.toLowerCase() === normalized
|
|
1004
|
+
);
|
|
1005
|
+
}
|
|
1006
|
+
if (params?.withdrawAssetAddress) {
|
|
1007
|
+
if (!isValidAddress(params.withdrawAssetAddress)) {
|
|
1008
|
+
throw new APIError(
|
|
1009
|
+
`Invalid withdrawAssetAddress: ${params.withdrawAssetAddress}.`,
|
|
1010
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1011
|
+
);
|
|
1012
|
+
}
|
|
1013
|
+
const normalized = params.withdrawAssetAddress.toLowerCase();
|
|
1014
|
+
vaults = vaults.filter(
|
|
1015
|
+
(v) => v.supportedAssets.withdrawable !== false && v.supportedAssets.address.toLowerCase() === normalized
|
|
1016
|
+
);
|
|
1017
|
+
}
|
|
1018
|
+
if (params?.settlementAssetAddress) {
|
|
1019
|
+
if (!isValidAddress(params.settlementAssetAddress)) {
|
|
1020
|
+
throw new APIError(
|
|
1021
|
+
`Invalid settlementAssetAddress: ${params.settlementAssetAddress}.`,
|
|
1022
|
+
{ endpoint: "getVaultsByConfig" }
|
|
1023
|
+
);
|
|
1024
|
+
}
|
|
1025
|
+
const normalized = params.settlementAssetAddress.toLowerCase();
|
|
1026
|
+
vaults = vaults.filter(
|
|
1027
|
+
(v) => v.vault.baseTokenAddress.toLowerCase() === normalized
|
|
1028
|
+
);
|
|
1029
|
+
}
|
|
1030
|
+
return vaults;
|
|
1031
|
+
}
|
|
1093
1032
|
async function getWithdrawSupportedAssets() {
|
|
1094
1033
|
const cache = getCache();
|
|
1095
1034
|
if (cache.isEmpty() || cache.isExpired()) {
|
|
@@ -1445,6 +1384,6 @@ async function initAmplifySDK(apiKey, options) {
|
|
|
1445
1384
|
await sdkConfig.initPromise;
|
|
1446
1385
|
}
|
|
1447
1386
|
|
|
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-
|
|
1387
|
+
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 };
|
|
1388
|
+
//# sourceMappingURL=chunk-7RAFG3NI.mjs.map
|
|
1389
|
+
//# sourceMappingURL=chunk-7RAFG3NI.mjs.map
|