@paxoslabs/amplify-sdk 0.5.3 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +113 -91
- package/dist/index.d.mts +3081 -759
- package/dist/index.d.ts +3081 -759
- package/dist/index.js +14775 -186
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14834 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +25 -86
- package/CHANGELOG.md +0 -320
- package/dist/chain-utils-5r2UnCDS.d.mts +0 -380
- package/dist/chain-utils-5r2UnCDS.d.ts +0 -380
- package/dist/chunk-4NQPS3JC.js +0 -2101
- package/dist/chunk-4NQPS3JC.js.map +0 -1
- package/dist/chunk-6CU533DM.mjs +0 -39
- package/dist/chunk-6CU533DM.mjs.map +0 -1
- package/dist/chunk-6JLKHV6O.js +0 -128
- package/dist/chunk-6JLKHV6O.js.map +0 -1
- package/dist/chunk-FHE43NKY.js +0 -1143
- package/dist/chunk-FHE43NKY.js.map +0 -1
- package/dist/chunk-GOJQYEJQ.js +0 -3212
- package/dist/chunk-GOJQYEJQ.js.map +0 -1
- package/dist/chunk-LMNADWTH.mjs +0 -2073
- package/dist/chunk-LMNADWTH.mjs.map +0 -1
- package/dist/chunk-ODXJYXUH.mjs +0 -3168
- package/dist/chunk-ODXJYXUH.mjs.map +0 -1
- package/dist/chunk-QMFYPHX5.mjs +0 -690
- package/dist/chunk-QMFYPHX5.mjs.map +0 -1
- package/dist/chunk-TNL23CO2.js +0 -45
- package/dist/chunk-TNL23CO2.js.map +0 -1
- package/dist/chunk-UY2WD7MF.mjs +0 -1133
- package/dist/chunk-UY2WD7MF.mjs.map +0 -1
- package/dist/chunk-WD6QFSXZ.js +0 -701
- package/dist/chunk-WD6QFSXZ.js.map +0 -1
- package/dist/chunk-Y5LBT2WT.mjs +0 -118
- package/dist/chunk-Y5LBT2WT.mjs.map +0 -1
- package/dist/core.d.mts +0 -195
- package/dist/core.d.ts +0 -195
- package/dist/core.js +0 -1236
- package/dist/core.js.map +0 -1
- package/dist/core.mjs +0 -1194
- package/dist/core.mjs.map +0 -1
- package/dist/display.d.mts +0 -472
- package/dist/display.d.ts +0 -472
- package/dist/display.js +0 -52
- package/dist/display.js.map +0 -1
- package/dist/display.mjs +0 -7
- package/dist/display.mjs.map +0 -1
- package/dist/index-D8RtV9cB.d.mts +0 -5114
- package/dist/index-ev_V5sjt.d.ts +0 -5114
- package/dist/utils.d.mts +0 -112
- package/dist/utils.d.ts +0 -112
- package/dist/utils.js +0 -67
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -25
- package/dist/utils.mjs.map +0 -1
- package/dist/vaults.d.mts +0 -4
- package/dist/vaults.d.ts +0 -4
- package/dist/vaults.js +0 -96
- package/dist/vaults.js.map +0 -1
- package/dist/vaults.mjs +0 -7
- package/dist/vaults.mjs.map +0 -1
package/dist/chunk-6JLKHV6O.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkGOJQYEJQ_js = require('./chunk-GOJQYEJQ.js');
|
|
4
|
-
|
|
5
|
-
// src/types/withdraw-errors.ts
|
|
6
|
-
var WithdrawError = class _WithdrawError extends Error {
|
|
7
|
-
constructor(message, code, context) {
|
|
8
|
-
super(message);
|
|
9
|
-
/**
|
|
10
|
-
* Error code for programmatic handling
|
|
11
|
-
* @example "VAULT_NOT_FOUND", "INVALID_ADDRESS", "INSUFFICIENT_BALANCE"
|
|
12
|
-
*/
|
|
13
|
-
chunkGOJQYEJQ_js.__publicField(this, "code");
|
|
14
|
-
/**
|
|
15
|
-
* Additional context data for debugging
|
|
16
|
-
*/
|
|
17
|
-
chunkGOJQYEJQ_js.__publicField(this, "context");
|
|
18
|
-
this.name = "WithdrawError";
|
|
19
|
-
this.code = code;
|
|
20
|
-
this.context = context;
|
|
21
|
-
Object.setPrototypeOf(this, _WithdrawError.prototype);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
var InvalidChainIdError = class _InvalidChainIdError extends WithdrawError {
|
|
25
|
-
constructor(message, context) {
|
|
26
|
-
super(message, "INVALID_CHAIN_ID", context);
|
|
27
|
-
this.name = "InvalidChainIdError";
|
|
28
|
-
Object.setPrototypeOf(this, _InvalidChainIdError.prototype);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var TransactionDataError = class _TransactionDataError extends WithdrawError {
|
|
32
|
-
constructor(message, context) {
|
|
33
|
-
super(message, "TRANSACTION_DATA_ERROR", context);
|
|
34
|
-
this.name = "TransactionDataError";
|
|
35
|
-
Object.setPrototypeOf(this, _TransactionDataError.prototype);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var VaultNotFoundByAddressError = class _VaultNotFoundByAddressError extends WithdrawError {
|
|
39
|
-
constructor(message, context) {
|
|
40
|
-
super(message, "VAULT_NOT_FOUND_BY_ADDRESS", context);
|
|
41
|
-
this.name = "VaultNotFoundByAddressError";
|
|
42
|
-
Object.setPrototypeOf(this, _VaultNotFoundByAddressError.prototype);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
var VaultNotFoundByNameError = class _VaultNotFoundByNameError extends WithdrawError {
|
|
46
|
-
constructor(message, context) {
|
|
47
|
-
super(message, "VAULT_NOT_FOUND_BY_NAME", context);
|
|
48
|
-
this.name = "VaultNotFoundByNameError";
|
|
49
|
-
Object.setPrototypeOf(this, _VaultNotFoundByNameError.prototype);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
var UnauthorizedVaultAccessError = class _UnauthorizedVaultAccessError extends WithdrawError {
|
|
53
|
-
constructor(message, context) {
|
|
54
|
-
super(message, "UNAUTHORIZED_VAULT_ACCESS", context);
|
|
55
|
-
this.name = "UnauthorizedVaultAccessError";
|
|
56
|
-
Object.setPrototypeOf(this, _UnauthorizedVaultAccessError.prototype);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
function isVaultNotFoundByAddressError(error) {
|
|
60
|
-
return error instanceof VaultNotFoundByAddressError;
|
|
61
|
-
}
|
|
62
|
-
function isVaultNotFoundByNameError(error) {
|
|
63
|
-
return error instanceof VaultNotFoundByNameError;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// src/client/resolve-vault.ts
|
|
67
|
-
async function resolveVault(params) {
|
|
68
|
-
const { vaultName, assetAddress, chainId, callerEndpoint } = params;
|
|
69
|
-
if (!chunkGOJQYEJQ_js.isValidAddress(assetAddress)) {
|
|
70
|
-
throw new chunkGOJQYEJQ_js.APIError(
|
|
71
|
-
`Invalid assetAddress: ${assetAddress}. Must be a valid Ethereum address.`,
|
|
72
|
-
{ endpoint: callerEndpoint }
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
if (!chunkGOJQYEJQ_js.isValidChainId(chainId)) {
|
|
76
|
-
throw new chunkGOJQYEJQ_js.APIError(
|
|
77
|
-
`Invalid chainId: ${chainId}. Must be a positive integer.`,
|
|
78
|
-
{ endpoint: callerEndpoint }
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
const cache = chunkGOJQYEJQ_js.getCache();
|
|
82
|
-
if (cache.isEmpty() || cache.isExpired()) {
|
|
83
|
-
await cache.refresh();
|
|
84
|
-
}
|
|
85
|
-
const vault = cache.getVaultByName(vaultName);
|
|
86
|
-
if (!vault) {
|
|
87
|
-
throw new VaultNotFoundByNameError(
|
|
88
|
-
`No vault found with name "${vaultName}". The vault may not exist or may not be available for your organization.`,
|
|
89
|
-
{ vaultName, endpoint: callerEndpoint }
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
const supportedChainIds = /* @__PURE__ */ new Set([vault.chainId]);
|
|
93
|
-
for (const a of vault.supportedAssets) {
|
|
94
|
-
if (a.chainId != null) {
|
|
95
|
-
supportedChainIds.add(a.chainId);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (!supportedChainIds.has(chainId)) {
|
|
99
|
-
const chains = Array.from(supportedChainIds).join(", ");
|
|
100
|
-
throw new chunkGOJQYEJQ_js.APIError(
|
|
101
|
-
`Vault "${vaultName}" supports chains [${chains}], but ${chunkGOJQYEJQ_js.getChainNameById(chainId)} (${chainId}) was requested.`,
|
|
102
|
-
{ endpoint: callerEndpoint }
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
const matchedAsset = vault.supportedAssets.find(
|
|
106
|
-
(a) => a.address.toLowerCase() === assetAddress.toLowerCase() && (a.chainId == null || a.chainId === chainId)
|
|
107
|
-
);
|
|
108
|
-
if (!matchedAsset) {
|
|
109
|
-
const supported = vault.supportedAssets.filter((a) => a.chainId == null || a.chainId === chainId).map((a) => `${a.address} (${a.symbol})`).join(", ");
|
|
110
|
-
throw new chunkGOJQYEJQ_js.APIError(
|
|
111
|
-
`Vault "${vaultName}" supports assets [${supported}] on chain ${chainId}, but asset ${assetAddress} was requested.`,
|
|
112
|
-
{ endpoint: callerEndpoint }
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
return vault;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
exports.InvalidChainIdError = InvalidChainIdError;
|
|
119
|
-
exports.TransactionDataError = TransactionDataError;
|
|
120
|
-
exports.UnauthorizedVaultAccessError = UnauthorizedVaultAccessError;
|
|
121
|
-
exports.VaultNotFoundByAddressError = VaultNotFoundByAddressError;
|
|
122
|
-
exports.VaultNotFoundByNameError = VaultNotFoundByNameError;
|
|
123
|
-
exports.WithdrawError = WithdrawError;
|
|
124
|
-
exports.isVaultNotFoundByAddressError = isVaultNotFoundByAddressError;
|
|
125
|
-
exports.isVaultNotFoundByNameError = isVaultNotFoundByNameError;
|
|
126
|
-
exports.resolveVault = resolveVault;
|
|
127
|
-
//# sourceMappingURL=chunk-6JLKHV6O.js.map
|
|
128
|
-
//# sourceMappingURL=chunk-6JLKHV6O.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/withdraw-errors.ts","../src/client/resolve-vault.ts"],"names":["__publicField","isValidAddress","APIError","isValidChainId","getCache","getChainNameById"],"mappings":"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","file":"chunk-6JLKHV6O.js","sourcesContent":["/**\n * Withdraw operation error types\n *\n * Defines all error classes and error scenarios specific to the withdraw flow.\n * Provides type-safe error handling with clear error messages for different failure modes.\n *\n * @module types/withdraw-errors\n */\n\n/**\n * Base class for all withdraw-related errors\n *\n * Extends Error with additional context information for better error handling\n * and debugging in consuming applications.\n */\nexport class WithdrawError extends Error {\n /**\n * Error code for programmatic handling\n * @example \"VAULT_NOT_FOUND\", \"INVALID_ADDRESS\", \"INSUFFICIENT_BALANCE\"\n */\n readonly code: string\n\n /**\n * Additional context data for debugging\n */\n readonly context?: Record<string, unknown>\n\n constructor(\n message: string,\n code: string,\n context?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'WithdrawError'\n this.code = code\n this.context = context\n\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, WithdrawError.prototype)\n }\n}\n\n/**\n * Thrown when vault lookup fails\n *\n * Occurs when no vault matches the provided (yieldType, wantToken, chainId)\n * combination in the vault cache.\n *\n * @example\n * ```typescript\n * throw new VaultNotFoundError(\n * \"No vault found matching yieldType 'UNKNOWN', token '0x...', and chain 1\",\n * { yieldType: \"UNKNOWN\", token: \"0x...\", chainId: 1 }\n * );\n * ```\n */\nexport class VaultNotFoundError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_NOT_FOUND', context)\n this.name = 'VaultNotFoundError'\n Object.setPrototypeOf(this, VaultNotFoundError.prototype)\n }\n}\n\n/**\n * Thrown when multiple vaults match the lookup criteria\n *\n * Data integrity error indicating vault cache is corrupted or misconfigured.\n * Should not occur in production with well-formed vault data.\n *\n * @example\n * ```typescript\n * throw new MultipleVaultsFoundError(\n * \"Data integrity error: multiple vaults match yieldType 'CORE', token '0x...', chain 1\",\n * { count: 2, yieldType: \"CORE\" }\n * );\n * ```\n */\nexport class MultipleVaultsFoundError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'MULTIPLE_VAULTS_FOUND', context)\n this.name = 'MultipleVaultsFoundError'\n Object.setPrototypeOf(this, MultipleVaultsFoundError.prototype)\n }\n}\n\n/**\n * Thrown when recipient address is invalid\n *\n * Occurs when recipientAddress is:\n * - Not a valid Ethereum address format (0x + 40 hex chars)\n * - The zero address (0x0000...)\n * - Missing or empty\n *\n * @example\n * ```typescript\n * throw new InvalidAddressError(\n * \"Invalid recipient address: must be valid Ethereum address\",\n * { address: \"0xinvalid\", reason: \"not hex format\" }\n * );\n * ```\n */\nexport class InvalidAddressError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_ADDRESS', context)\n this.name = 'InvalidAddressError'\n Object.setPrototypeOf(this, InvalidAddressError.prototype)\n }\n}\n\n/**\n * Thrown when share amount is invalid\n *\n * Occurs when shareAmount is:\n * - Not a valid number string\n * - Zero or negative\n * - Cannot be converted to BigInt\n *\n * @example\n * ```typescript\n * throw new InvalidShareAmountError(\n * \"Share amount must be greater than zero\",\n * { amount: \"0\", reason: \"zero not allowed\" }\n * );\n * ```\n */\nexport class InvalidShareAmountError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_SHARE_AMOUNT', context)\n this.name = 'InvalidShareAmountError'\n Object.setPrototypeOf(this, InvalidShareAmountError.prototype)\n }\n}\n\n/**\n * Thrown when slippage value is invalid\n *\n * Occurs when slippage is:\n * - Negative\n * - Greater than 10000 (100%)\n * - Not an integer\n *\n * @example\n * ```typescript\n * throw new InvalidSlippageError(\n * \"Invalid slippage value: must be 0-10000 basis points\",\n * { slippage: -100, reason: \"negative not allowed\" }\n * );\n * ```\n */\nexport class InvalidSlippageError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_SLIPPAGE', context)\n this.name = 'InvalidSlippageError'\n Object.setPrototypeOf(this, InvalidSlippageError.prototype)\n }\n}\n\n/**\n * Thrown when yield type is invalid\n *\n * Occurs when yieldType is:\n * - Not defined in YieldType enum\n * - Empty or null\n * - Case-sensitive mismatch\n *\n * @example\n * ```typescript\n * throw new InvalidYieldTypeError(\n * \"Invalid yield type: 'UNKNOWN' is not supported\",\n * { yieldType: \"UNKNOWN\", supportedTypes: [\"CORE\", \"TREASURY\", \"FRONTIER\"] }\n * );\n * ```\n */\nexport class InvalidYieldTypeError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_YIELD_TYPE', context)\n this.name = 'InvalidYieldTypeError'\n Object.setPrototypeOf(this, InvalidYieldTypeError.prototype)\n }\n}\n\n/**\n * Thrown when chain ID is invalid\n *\n * Occurs when chainId is:\n * - Not a positive integer\n * - Not in list of supported chains\n * - Mismatches vault's supported networks\n *\n * @example\n * ```typescript\n * throw new InvalidChainIdError(\n * \"Chain ID 999999 is not supported\",\n * { chainId: 999999, supportedChains: [1, 288, 1329] }\n * );\n * ```\n */\nexport class InvalidChainIdError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_CHAIN_ID', context)\n this.name = 'InvalidChainIdError'\n Object.setPrototypeOf(this, InvalidChainIdError.prototype)\n }\n}\n\n/**\n * Thrown when transaction data cannot be constructed\n *\n * Occurs during transaction data assembly if:\n * - Required vault addresses are missing\n * - ABI is unavailable\n * - Function encoding fails\n *\n * @example\n * ```typescript\n * throw new TransactionDataError(\n * \"Failed to construct transaction data: missing Teller address\",\n * { reason: \"missing address\", field: \"tellerAddress\" }\n * );\n * ```\n */\nexport class TransactionDataError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'TRANSACTION_DATA_ERROR', context)\n this.name = 'TransactionDataError'\n Object.setPrototypeOf(this, TransactionDataError.prototype)\n }\n}\n\n/**\n * Thrown when vault cache is empty or uninitialized\n *\n * Occurs when attempting to lookup vaults before cache is populated.\n * Consumer should call getVaults() or getSupportedAssets() first.\n *\n * @example\n * ```typescript\n * throw new VaultCacheEmptyError(\n * \"Vault cache is empty. Call getVaults() or getSupportedAssets() first.\",\n * { reason: \"cache not initialized\" }\n * );\n * ```\n */\nexport class VaultCacheEmptyError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_CACHE_EMPTY', context)\n this.name = 'VaultCacheEmptyError'\n Object.setPrototypeOf(this, VaultCacheEmptyError.prototype)\n }\n}\n\n/**\n * Type guard for WithdrawError\n *\n * Safely check if an error is a WithdrawError\n *\n * @example\n * ```typescript\n * try {\n * await prepareWithdrawOrderTxData(params);\n * } catch (error) {\n * if (isWithdrawError(error)) {\n * console.error(`Withdraw error [${error.code}]: ${error.message}`);\n * }\n * }\n * ```\n */\nexport function isWithdrawError(error: unknown): error is WithdrawError {\n return error instanceof WithdrawError\n}\n\n/**\n * Type guard for vault not found errors\n */\nexport function isVaultNotFoundError(\n error: unknown\n): error is VaultNotFoundError {\n return error instanceof VaultNotFoundError\n}\n\n/**\n * Type guard for invalid address errors\n */\nexport function isInvalidAddressError(\n error: unknown\n): error is InvalidAddressError {\n return error instanceof InvalidAddressError\n}\n\n/**\n * Type guard for invalid share amount errors\n */\nexport function isInvalidShareAmountError(\n error: unknown\n): error is InvalidShareAmountError {\n return error instanceof InvalidShareAmountError\n}\n\n/**\n * Type guard for invalid slippage errors\n */\nexport function isInvalidSlippageError(\n error: unknown\n): error is InvalidSlippageError {\n return error instanceof InvalidSlippageError\n}\n\nexport class VaultNotFoundByAddressError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_NOT_FOUND_BY_ADDRESS', context)\n this.name = 'VaultNotFoundByAddressError'\n Object.setPrototypeOf(this, VaultNotFoundByAddressError.prototype)\n }\n}\n\nexport class VaultNotFoundByNameError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_NOT_FOUND_BY_NAME', context)\n this.name = 'VaultNotFoundByNameError'\n Object.setPrototypeOf(this, VaultNotFoundByNameError.prototype)\n }\n}\n\nexport class UnauthorizedVaultAccessError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'UNAUTHORIZED_VAULT_ACCESS', context)\n this.name = 'UnauthorizedVaultAccessError'\n Object.setPrototypeOf(this, UnauthorizedVaultAccessError.prototype)\n }\n}\n\nexport function isVaultNotFoundByAddressError(\n error: unknown\n): error is VaultNotFoundByAddressError {\n return error instanceof VaultNotFoundByAddressError\n}\n\nexport function isVaultNotFoundByNameError(\n error: unknown\n): error is VaultNotFoundByNameError {\n return error instanceof VaultNotFoundByNameError\n}\n\n/**\n * Helper to format error message for logging\n *\n * @param error - Any error to format\n * @returns Human-readable error message with context if available\n */\nexport function formatWithdrawError(error: unknown): string {\n if (isWithdrawError(error)) {\n const context =\n error.context && Object.keys(error.context).length > 0\n ? ` | context: ${JSON.stringify(error.context)}`\n : ''\n return `[${error.code}] ${error.message}${context}`\n }\n if (error instanceof Error) {\n return error.message\n }\n return String(error)\n}\n","import type { Address } from 'viem'\nimport type { AmplifyVault } from '../types/amplify-sdk-api'\nimport {\n APIError,\n isValidAddress,\n isValidChainId,\n} from '../types/amplify-sdk-api'\nimport { VaultNotFoundByNameError } from '../types/withdraw-errors'\nimport { getChainNameById } from '../utils/chain-utils'\nimport { getCache } from './amplify-sdk-client'\n\n/**\n * Parameters for resolving a vault by name, chain, and asset.\n *\n * All three fields are required and validated against the resolved vault\n * to ensure the calldata is unambiguous — wrong chain or wrong asset will\n * throw an `APIError` before any transaction is prepared.\n *\n * @property {string} vaultName - Human-readable vault name (e.g. \"Amplify USDC Core\")\n * @property {Address} assetAddress - Token contract address for the deposit or want asset\n * @property {number} chainId - Chain ID where the vault is deployed\n * @property {string} callerEndpoint - Caller name included in error messages for tracing\n */\nexport interface ResolveVaultParams {\n vaultName: string\n assetAddress: Address\n chainId: number\n callerEndpoint: string\n}\n\n/**\n * Resolves a vault by name and validates it against the provided chain ID\n * and asset address.\n *\n * Throws an `APIError` when:\n * - `assetAddress` or `chainId` fail basic format validation\n * - No vault exists with the given `vaultName`\n * - The resolved vault is on a different chain than `chainId`\n * - The resolved vault's supported asset does not match `assetAddress`\n */\nexport async function resolveVault(\n params: ResolveVaultParams\n): Promise<AmplifyVault> {\n const { vaultName, assetAddress, chainId, callerEndpoint } = params\n\n if (!isValidAddress(assetAddress)) {\n throw new APIError(\n `Invalid assetAddress: ${assetAddress}. Must be a valid Ethereum address.`,\n { endpoint: callerEndpoint }\n )\n }\n\n if (!isValidChainId(chainId)) {\n throw new APIError(\n `Invalid chainId: ${chainId}. Must be a positive integer.`,\n { endpoint: callerEndpoint }\n )\n }\n\n const cache = getCache()\n\n if (cache.isEmpty() || cache.isExpired()) {\n await cache.refresh()\n }\n\n const vault = cache.getVaultByName(vaultName)\n if (!vault) {\n throw new VaultNotFoundByNameError(\n `No vault found with name \"${vaultName}\". The vault may not exist or may not be available for your organization.`,\n { vaultName, endpoint: callerEndpoint }\n )\n }\n\n const supportedChainIds = new Set<number>([vault.chainId])\n for (const a of vault.supportedAssets) {\n if (a.chainId != null) {\n supportedChainIds.add(a.chainId)\n }\n }\n\n if (!supportedChainIds.has(chainId)) {\n const chains = Array.from(supportedChainIds).join(', ')\n throw new APIError(\n `Vault \"${vaultName}\" supports chains [${chains}], but ${getChainNameById(chainId)} (${chainId}) was requested.`,\n { endpoint: callerEndpoint }\n )\n }\n\n const matchedAsset = vault.supportedAssets.find(\n (a) =>\n a.address.toLowerCase() === assetAddress.toLowerCase() &&\n (a.chainId == null || a.chainId === chainId)\n )\n if (!matchedAsset) {\n const supported = vault.supportedAssets\n .filter((a) => a.chainId == null || a.chainId === chainId)\n .map((a) => `${a.address} (${a.symbol})`)\n .join(', ')\n throw new APIError(\n `Vault \"${vaultName}\" supports assets [${supported}] on chain ${chainId}, but asset ${assetAddress} was requested.`,\n { endpoint: callerEndpoint }\n )\n }\n\n return vault\n}\n"]}
|