@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
@@ -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://api.paxoslabs.com";
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 logger = getLogger();
936
- const [graphqlResult, restResult] = await Promise.allSettled([
937
- fetchAmplifySdkConfigs(endpoint),
938
- fetchVaultAssets()
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
- let assets = extractSupportedAssetsFromConfigs(configs);
952
- if (restResult.status === "fulfilled") {
953
- vaults = enrichVaultsWithAssetData(
954
- vaults,
955
- restResult.value
956
- );
957
- assets = enrichAssetsWithMetadata(
958
- assets,
959
- restResult.value
960
- );
961
- logger.debug(
962
- "Enriched vault data with vaultAssets metadata"
963
- );
964
- } else {
965
- logger.warn(
966
- `Failed to fetch vaultAssets, using GraphQL-only data: ${restResult.reason instanceof Error ? restResult.reason.message : String(restResult.reason)}`
967
- );
968
- }
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-BQG3XKTU.js.map
1482
- //# sourceMappingURL=chunk-BQG3XKTU.js.map
1422
+ //# sourceMappingURL=chunk-R5G6F7RP.js.map
1423
+ //# sourceMappingURL=chunk-R5G6F7RP.js.map