@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.
Files changed (52) hide show
  1. package/CHANGELOG.md +79 -64
  2. package/dist/{chain-utils-CRMbWzu7.d.mts → chain-utils-CbVFMjwR.d.mts} +13 -1
  3. package/dist/{chain-utils-CRMbWzu7.d.ts → chain-utils-CbVFMjwR.d.ts} +13 -1
  4. package/dist/{chunk-5CV25BTQ.js → chunk-4OEL42W2.mjs} +83 -4
  5. package/dist/chunk-4OEL42W2.mjs.map +1 -0
  6. package/dist/{chunk-RW7PZETN.mjs → chunk-7RAFG3NI.mjs} +167 -228
  7. package/dist/chunk-7RAFG3NI.mjs.map +1 -0
  8. package/dist/{chunk-CQZCGPZK.mjs → chunk-E2HBXOZY.js} +92 -3
  9. package/dist/chunk-E2HBXOZY.js.map +1 -0
  10. package/dist/{chunk-WZXCJAKM.js → chunk-EHRZFLWL.js} +12 -12
  11. package/dist/{chunk-WZXCJAKM.js.map → chunk-EHRZFLWL.js.map} +1 -1
  12. package/dist/{chunk-GMMBJB4B.mjs → chunk-GSYGURYO.mjs} +71 -46
  13. package/dist/chunk-GSYGURYO.mjs.map +1 -0
  14. package/dist/{chunk-VZED4E3L.mjs → chunk-HBFBGNRH.mjs} +3 -3
  15. package/dist/{chunk-VZED4E3L.mjs.map → chunk-HBFBGNRH.mjs.map} +1 -1
  16. package/dist/{chunk-TPU2HZAX.mjs → chunk-L3X5UBG6.mjs} +86 -169
  17. package/dist/chunk-L3X5UBG6.mjs.map +1 -0
  18. package/dist/{chunk-BQG3XKTU.js → chunk-R5G6F7RP.js} +168 -227
  19. package/dist/chunk-R5G6F7RP.js.map +1 -0
  20. package/dist/{chunk-OZJNKGW6.js → chunk-WHL5LQRP.js} +120 -95
  21. package/dist/chunk-WHL5LQRP.js.map +1 -0
  22. package/dist/{chunk-2YPKHXFJ.js → chunk-ZJBJFFBQ.js} +180 -263
  23. package/dist/chunk-ZJBJFFBQ.js.map +1 -0
  24. package/dist/core.d.mts +2 -2
  25. package/dist/core.d.ts +2 -2
  26. package/dist/core.js +16 -16
  27. package/dist/core.mjs +4 -4
  28. package/dist/display.d.mts +23 -11
  29. package/dist/display.d.ts +23 -11
  30. package/dist/display.js +10 -10
  31. package/dist/display.mjs +4 -4
  32. package/dist/index.d.mts +107 -7
  33. package/dist/index.d.ts +107 -7
  34. package/dist/index.js +75 -51
  35. package/dist/index.mjs +5 -5
  36. package/dist/utils.d.mts +1 -1
  37. package/dist/utils.d.ts +1 -1
  38. package/dist/utils.js +7 -7
  39. package/dist/utils.mjs +2 -2
  40. package/dist/vaults.d.mts +107 -94
  41. package/dist/vaults.d.ts +107 -94
  42. package/dist/vaults.js +25 -25
  43. package/dist/vaults.mjs +4 -4
  44. package/package.json +18 -11
  45. package/dist/chunk-2YPKHXFJ.js.map +0 -1
  46. package/dist/chunk-5CV25BTQ.js.map +0 -1
  47. package/dist/chunk-BQG3XKTU.js.map +0 -1
  48. package/dist/chunk-CQZCGPZK.mjs.map +0 -1
  49. package/dist/chunk-GMMBJB4B.mjs.map +0 -1
  50. package/dist/chunk-OZJNKGW6.js.map +0 -1
  51. package/dist/chunk-RW7PZETN.mjs.map +0 -1
  52. 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://api.paxoslabs.com";
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 logger = getLogger();
934
- const [graphqlResult, restResult] = await Promise.allSettled([
935
- fetchAmplifySdkConfigs(endpoint),
936
- fetchVaultAssets()
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
- 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
- }
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-RW7PZETN.mjs.map
1450
- //# sourceMappingURL=chunk-RW7PZETN.mjs.map
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