@axonfi/sdk 0.14.0 → 0.15.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/dist/index.js CHANGED
@@ -20,7 +20,7 @@ var EXECUTE_INTENT_TYPEHASH = keccak256(
20
20
  )
21
21
  );
22
22
  var SWAP_INTENT_TYPEHASH = keccak256(
23
- stringToBytes("SwapIntent(address bot,address toToken,uint256 minToAmount,uint256 deadline,bytes32 ref)")
23
+ stringToBytes("SwapIntent(address bot,address toToken,uint256 minToAmount,address fromToken,uint256 maxFromAmount,uint256 deadline,bytes32 ref)")
24
24
  );
25
25
  var EIP712_DOMAIN_NAME = "AxonVault";
26
26
  var EIP712_DOMAIN_VERSION = "1";
@@ -165,6 +165,8 @@ var SWAP_INTENT_TYPES = {
165
165
  { name: "bot", type: "address" },
166
166
  { name: "toToken", type: "address" },
167
167
  { name: "minToAmount", type: "uint256" },
168
+ { name: "fromToken", type: "address" },
169
+ { name: "maxFromAmount", type: "uint256" },
168
170
  { name: "deadline", type: "uint256" },
169
171
  { name: "ref", type: "bytes32" }
170
172
  ]
@@ -230,6 +232,8 @@ async function signSwapIntent(walletClient, vaultAddress, chainId, intent) {
230
232
  bot: intent.bot,
231
233
  toToken: intent.toToken,
232
234
  minToAmount: intent.minToAmount,
235
+ fromToken: intent.fromToken,
236
+ maxFromAmount: intent.maxFromAmount,
233
237
  deadline: intent.deadline,
234
238
  ref: intent.ref
235
239
  }
@@ -499,8 +503,8 @@ var AxonVaultAbi = [
499
503
  "outputs": [
500
504
  {
501
505
  "name": "",
502
- "type": "bool",
503
- "internalType": "bool"
506
+ "type": "address",
507
+ "internalType": "address"
504
508
  }
505
509
  ],
506
510
  "stateMutability": "view"
@@ -772,6 +776,16 @@ var AxonVaultAbi = [
772
776
  "type": "uint256",
773
777
  "internalType": "uint256"
774
778
  },
779
+ {
780
+ "name": "fromToken",
781
+ "type": "address",
782
+ "internalType": "address"
783
+ },
784
+ {
785
+ "name": "maxFromAmount",
786
+ "type": "uint256",
787
+ "internalType": "uint256"
788
+ },
775
789
  {
776
790
  "name": "deadline",
777
791
  "type": "uint256",
@@ -789,16 +803,6 @@ var AxonVaultAbi = [
789
803
  "type": "bytes",
790
804
  "internalType": "bytes"
791
805
  },
792
- {
793
- "name": "fromToken",
794
- "type": "address",
795
- "internalType": "address"
796
- },
797
- {
798
- "name": "maxFromAmount",
799
- "type": "uint256",
800
- "internalType": "uint256"
801
- },
802
806
  {
803
807
  "name": "swapRouter",
804
808
  "type": "address",
@@ -1030,6 +1034,19 @@ var AxonVaultAbi = [
1030
1034
  ],
1031
1035
  "stateMutability": "view"
1032
1036
  },
1037
+ {
1038
+ "type": "function",
1039
+ "name": "maxSwapSlippageBps",
1040
+ "inputs": [],
1041
+ "outputs": [
1042
+ {
1043
+ "name": "",
1044
+ "type": "uint256",
1045
+ "internalType": "uint256"
1046
+ }
1047
+ ],
1048
+ "stateMutability": "view"
1049
+ },
1033
1050
  {
1034
1051
  "type": "function",
1035
1052
  "name": "onERC1155BatchReceived",
@@ -1201,6 +1218,30 @@ var AxonVaultAbi = [
1201
1218
  ],
1202
1219
  "stateMutability": "view"
1203
1220
  },
1221
+ {
1222
+ "type": "function",
1223
+ "name": "oracleUsdValue",
1224
+ "inputs": [
1225
+ {
1226
+ "name": "token",
1227
+ "type": "address",
1228
+ "internalType": "address"
1229
+ },
1230
+ {
1231
+ "name": "amount",
1232
+ "type": "uint256",
1233
+ "internalType": "uint256"
1234
+ }
1235
+ ],
1236
+ "outputs": [
1237
+ {
1238
+ "name": "",
1239
+ "type": "uint256",
1240
+ "internalType": "uint256"
1241
+ }
1242
+ ],
1243
+ "stateMutability": "view"
1244
+ },
1204
1245
  {
1205
1246
  "type": "function",
1206
1247
  "name": "owner",
@@ -1247,6 +1288,55 @@ var AxonVaultAbi = [
1247
1288
  ],
1248
1289
  "stateMutability": "view"
1249
1290
  },
1291
+ {
1292
+ "type": "function",
1293
+ "name": "previewSwapSlippage",
1294
+ "inputs": [
1295
+ {
1296
+ "name": "fromToken",
1297
+ "type": "address",
1298
+ "internalType": "address"
1299
+ },
1300
+ {
1301
+ "name": "fromAmount",
1302
+ "type": "uint256",
1303
+ "internalType": "uint256"
1304
+ },
1305
+ {
1306
+ "name": "toToken",
1307
+ "type": "address",
1308
+ "internalType": "address"
1309
+ },
1310
+ {
1311
+ "name": "toAmount",
1312
+ "type": "uint256",
1313
+ "internalType": "uint256"
1314
+ }
1315
+ ],
1316
+ "outputs": [
1317
+ {
1318
+ "name": "wouldPass",
1319
+ "type": "bool",
1320
+ "internalType": "bool"
1321
+ },
1322
+ {
1323
+ "name": "fromUsd",
1324
+ "type": "uint256",
1325
+ "internalType": "uint256"
1326
+ },
1327
+ {
1328
+ "name": "toUsd",
1329
+ "type": "uint256",
1330
+ "internalType": "uint256"
1331
+ },
1332
+ {
1333
+ "name": "minToUsd",
1334
+ "type": "uint256",
1335
+ "internalType": "uint256"
1336
+ }
1337
+ ],
1338
+ "stateMutability": "view"
1339
+ },
1250
1340
  {
1251
1341
  "type": "function",
1252
1342
  "name": "rebalanceTokenCount",
@@ -1382,6 +1472,19 @@ var AxonVaultAbi = [
1382
1472
  "outputs": [],
1383
1473
  "stateMutability": "nonpayable"
1384
1474
  },
1475
+ {
1476
+ "type": "function",
1477
+ "name": "setMaxSwapSlippageBps",
1478
+ "inputs": [
1479
+ {
1480
+ "name": "bps",
1481
+ "type": "uint256",
1482
+ "internalType": "uint256"
1483
+ }
1484
+ ],
1485
+ "outputs": [],
1486
+ "stateMutability": "nonpayable"
1487
+ },
1385
1488
  {
1386
1489
  "type": "function",
1387
1490
  "name": "setOperator",
@@ -1895,6 +1998,19 @@ var AxonVaultAbi = [
1895
1998
  ],
1896
1999
  "anonymous": false
1897
2000
  },
2001
+ {
2002
+ "type": "event",
2003
+ "name": "MaxSwapSlippageBpsSet",
2004
+ "inputs": [
2005
+ {
2006
+ "name": "bps",
2007
+ "type": "uint256",
2008
+ "indexed": false,
2009
+ "internalType": "uint256"
2010
+ }
2011
+ ],
2012
+ "anonymous": false
2013
+ },
1898
2014
  {
1899
2015
  "type": "event",
1900
2016
  "name": "OperatorCeilingsUpdated",
@@ -1954,6 +2070,31 @@ var AxonVaultAbi = [
1954
2070
  ],
1955
2071
  "anonymous": false
1956
2072
  },
2073
+ {
2074
+ "type": "event",
2075
+ "name": "OracleCheckSkipped",
2076
+ "inputs": [
2077
+ {
2078
+ "name": "fromToken",
2079
+ "type": "address",
2080
+ "indexed": true,
2081
+ "internalType": "address"
2082
+ },
2083
+ {
2084
+ "name": "toToken",
2085
+ "type": "address",
2086
+ "indexed": true,
2087
+ "internalType": "address"
2088
+ },
2089
+ {
2090
+ "name": "reason",
2091
+ "type": "string",
2092
+ "indexed": false,
2093
+ "internalType": "string"
2094
+ }
2095
+ ],
2096
+ "anonymous": false
2097
+ },
1957
2098
  {
1958
2099
  "type": "event",
1959
2100
  "name": "OwnershipTransferStarted",
@@ -2478,6 +2619,11 @@ var AxonVaultAbi = [
2478
2619
  "name": "SwapOutputInsufficient",
2479
2620
  "inputs": []
2480
2621
  },
2622
+ {
2623
+ "type": "error",
2624
+ "name": "SwapSlippageTooHigh",
2625
+ "inputs": []
2626
+ },
2481
2627
  {
2482
2628
  "type": "error",
2483
2629
  "name": "TooManySpendingLimits",
@@ -2714,6 +2860,19 @@ var AxonVaultFactoryAbi = [
2714
2860
  ],
2715
2861
  "stateMutability": "view"
2716
2862
  },
2863
+ {
2864
+ "type": "function",
2865
+ "name": "vaultVersion",
2866
+ "inputs": [],
2867
+ "outputs": [
2868
+ {
2869
+ "name": "",
2870
+ "type": "uint16",
2871
+ "internalType": "uint16"
2872
+ }
2873
+ ],
2874
+ "stateMutability": "view"
2875
+ },
2717
2876
  {
2718
2877
  "type": "event",
2719
2878
  "name": "OwnershipTransferStarted",
@@ -3151,7 +3310,9 @@ function toBotConfigParams(input) {
3151
3310
  for (const sl of input.spendingLimits) {
3152
3311
  if (!ALLOWED_WINDOWS.has(BigInt(sl.windowSeconds))) {
3153
3312
  const allowed = [...ALLOWED_WINDOWS].map((w) => `${Number(w)}s`).join(", ");
3154
- throw new Error(`Invalid spending window: ${sl.windowSeconds}s. Allowed values: ${allowed}. Use WINDOW constants.`);
3313
+ throw new Error(
3314
+ `Invalid spending window: ${sl.windowSeconds}s. Allowed values: ${allowed}. Use WINDOW constants.`
3315
+ );
3155
3316
  }
3156
3317
  }
3157
3318
  return {
@@ -3337,6 +3498,23 @@ async function isRebalanceTokenWhitelisted(publicClient, vaultAddress, token) {
3337
3498
  args: [token]
3338
3499
  });
3339
3500
  }
3501
+ async function getMaxSwapSlippageBps(publicClient, vaultAddress) {
3502
+ return publicClient.readContract({
3503
+ address: vaultAddress,
3504
+ abi: AxonVaultAbi,
3505
+ functionName: "maxSwapSlippageBps"
3506
+ });
3507
+ }
3508
+ async function previewSwapSlippage(publicClient, vaultAddress, fromToken, fromAmount, toToken, toAmount) {
3509
+ const result = await publicClient.readContract({
3510
+ address: vaultAddress,
3511
+ abi: AxonVaultAbi,
3512
+ functionName: "previewSwapSlippage",
3513
+ args: [fromToken, fromAmount, toToken, toAmount]
3514
+ });
3515
+ const [wouldPass, fromUsd, toUsd, minToUsd] = result;
3516
+ return { wouldPass, fromUsd, toUsd, minToUsd };
3517
+ }
3340
3518
  async function deployVault(walletClient, publicClient, relayerUrl) {
3341
3519
  if (!walletClient.account) {
3342
3520
  throw new Error("walletClient has no account attached");
@@ -3893,12 +4071,19 @@ var AxonClient = class {
3893
4071
  const signature = await signPayment(this.walletClient, this.vaultAddress, this.chainId, intent);
3894
4072
  const result = await this._submitPayment(intent, signature, input);
3895
4073
  if (result.status === "rejected" && result.errorCode === "SWAP_REQUIRED") {
4074
+ if (!input.swapFromToken || !input.swapMaxFromAmount) {
4075
+ throw new Error(
4076
+ "Vault lacks the payment token (SWAP_REQUIRED). Provide swapFromToken and swapMaxFromAmount in PayInput to enable auto-swap."
4077
+ );
4078
+ }
3896
4079
  const swapIntent = {
3897
4080
  bot: this.botAddress,
3898
4081
  toToken: intent.token,
3899
4082
  // swap TO the payment token
3900
4083
  minToAmount: intent.amount,
3901
4084
  // need at least the payment amount
4085
+ fromToken: resolveToken(input.swapFromToken, this.chainId),
4086
+ maxFromAmount: parseAmount(input.swapMaxFromAmount, input.swapFromToken, this.chainId),
3902
4087
  deadline: intent.deadline,
3903
4088
  // same deadline
3904
4089
  ref: intent.ref
@@ -4181,6 +4366,8 @@ Timestamp: ${timestamp}`;
4181
4366
  bot: this.botAddress,
4182
4367
  toToken: resolveToken(input.toToken, this.chainId),
4183
4368
  minToAmount: parseAmount(input.minToAmount, input.toToken, this.chainId),
4369
+ fromToken: resolveToken(input.fromToken, this.chainId),
4370
+ maxFromAmount: parseAmount(input.maxFromAmount, input.fromToken, this.chainId),
4184
4371
  deadline: input.deadline ?? this._defaultDeadline(),
4185
4372
  ref: this._resolveRef(input.memo, input.ref)
4186
4373
  };
@@ -4199,10 +4386,12 @@ Timestamp: ${timestamp}`;
4199
4386
  deadline: intent.deadline.toString(),
4200
4387
  ref: intent.ref,
4201
4388
  signature,
4202
- // Swap fields
4389
+ // Swap fields (all bot-signed)
4203
4390
  swapSignature,
4204
4391
  swapToToken: swapIntent.toToken,
4205
4392
  swapMinToAmount: swapIntent.minToAmount.toString(),
4393
+ swapFromToken: swapIntent.fromToken,
4394
+ swapMaxFromAmount: swapIntent.maxFromAmount.toString(),
4206
4395
  swapDeadline: swapIntent.deadline.toString(),
4207
4396
  swapRef: swapIntent.ref,
4208
4397
  // Off-chain metadata
@@ -4270,21 +4459,18 @@ Timestamp: ${timestamp}`;
4270
4459
  }
4271
4460
  async _submitSwap(intent, signature, input) {
4272
4461
  const idempotencyKey = input.idempotencyKey ?? generateUuid();
4273
- const fromToken = input.fromToken !== void 0 ? resolveToken(input.fromToken, this.chainId) : void 0;
4274
- const maxFromAmount = input.maxFromAmount !== void 0 ? parseAmount(input.maxFromAmount, input.fromToken ?? input.toToken, this.chainId) : void 0;
4275
4462
  const body = {
4276
4463
  chainId: this.chainId,
4277
4464
  vaultAddress: this.vaultAddress,
4278
- // Flat intent fields
4465
+ // Flat intent fields (all bot-signed)
4279
4466
  bot: intent.bot,
4280
4467
  toToken: intent.toToken,
4281
4468
  minToAmount: intent.minToAmount.toString(),
4469
+ fromToken: intent.fromToken,
4470
+ maxFromAmount: intent.maxFromAmount.toString(),
4282
4471
  deadline: intent.deadline.toString(),
4283
4472
  ref: intent.ref,
4284
4473
  signature,
4285
- // Optional source token
4286
- ...fromToken !== void 0 && { fromToken },
4287
- ...maxFromAmount !== void 0 && { maxFromAmount: maxFromAmount.toString() },
4288
4474
  // Off-chain metadata
4289
4475
  idempotencyKey,
4290
4476
  ...input.memo !== void 0 && { memo: input.memo }
@@ -4949,6 +5135,6 @@ var AxonRegistryAbi = [
4949
5135
  }
4950
5136
  ];
4951
5137
 
4952
- export { ALLOWED_WINDOWS, AxonClient, AxonRegistryAbi, AxonVaultAbi, AxonVaultFactoryAbi, CHAIN_NAMES, Chain, DEFAULT_APPROVED_TOKENS, DEFAULT_DEADLINE_SECONDS, EIP712_DOMAIN_NAME, EIP712_DOMAIN_VERSION, EXECUTE_INTENT_TYPEHASH, EXPLORER_ADDR, EXPLORER_TX, KNOWN_TOKENS, NATIVE_ETH, PAYMENT_INTENT_TYPEHASH, PERMIT2_ADDRESS, PaymentErrorCode, RELAYER_API, SUPPORTED_CHAIN_IDS, SWAP_INTENT_TYPEHASH, Token, USDC, USDC_EIP712_DOMAIN, WINDOW, WITNESS_TYPE_STRING, X402_PROXY_ADDRESS, addBot, createAxonPublicClient, createAxonWalletClient, decryptKeystore, deployVault, deposit, encodeRef, encryptKeystore, extractX402Metadata, findMatchingOption, formatPaymentSignature, getBotConfig, getChain, getDefaultApprovedTokens, getDomainSeparator, getKnownTokensForChain, getOperatorCeilings, getRebalanceTokenCount, getTokenSymbolByAddress, getVaultOperator, getVaultOwner, getVaultVersion, isBotActive, isDestinationAllowed, isErc1271BotsEnabled, isRebalanceTokenWhitelisted, isVaultPaused, operatorMaxDrainPerDay, parseAmount, parseChainId, parsePaymentRequired, predictVaultAddress, randomNonce, randomPermit2Nonce, removeBot, resolveToken, resolveTokenDecimals, signExecuteIntent, signPayment, signPermit2WitnessTransfer, signSwapIntent, signTransferWithAuthorization, toBotConfigParams, updateBotConfig };
5138
+ export { ALLOWED_WINDOWS, AxonClient, AxonRegistryAbi, AxonVaultAbi, AxonVaultFactoryAbi, CHAIN_NAMES, Chain, DEFAULT_APPROVED_TOKENS, DEFAULT_DEADLINE_SECONDS, EIP712_DOMAIN_NAME, EIP712_DOMAIN_VERSION, EXECUTE_INTENT_TYPEHASH, EXPLORER_ADDR, EXPLORER_TX, KNOWN_TOKENS, NATIVE_ETH, PAYMENT_INTENT_TYPEHASH, PERMIT2_ADDRESS, PaymentErrorCode, RELAYER_API, SUPPORTED_CHAIN_IDS, SWAP_INTENT_TYPEHASH, Token, USDC, USDC_EIP712_DOMAIN, WINDOW, WITNESS_TYPE_STRING, X402_PROXY_ADDRESS, addBot, createAxonPublicClient, createAxonWalletClient, decryptKeystore, deployVault, deposit, encodeRef, encryptKeystore, extractX402Metadata, findMatchingOption, formatPaymentSignature, getBotConfig, getChain, getDefaultApprovedTokens, getDomainSeparator, getKnownTokensForChain, getMaxSwapSlippageBps, getOperatorCeilings, getRebalanceTokenCount, getTokenSymbolByAddress, getVaultOperator, getVaultOwner, getVaultVersion, isBotActive, isDestinationAllowed, isErc1271BotsEnabled, isRebalanceTokenWhitelisted, isVaultPaused, operatorMaxDrainPerDay, parseAmount, parseChainId, parsePaymentRequired, predictVaultAddress, previewSwapSlippage, randomNonce, randomPermit2Nonce, removeBot, resolveToken, resolveTokenDecimals, signExecuteIntent, signPayment, signPermit2WitnessTransfer, signSwapIntent, signTransferWithAuthorization, toBotConfigParams, updateBotConfig };
4953
5139
  //# sourceMappingURL=index.js.map
4954
5140
  //# sourceMappingURL=index.js.map