otomato-sdk 1.5.65 → 1.5.67

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.
@@ -703,7 +703,6 @@ export const TRIGGERS = {
703
703
  ]
704
704
  }
705
705
  ],
706
- "before": "\n async (env) => {\n const otomatoSdk = await import('otomato-sdk');\n \n if (!env.parameters.chainId)\n throw new Error('You need to provide the chainId first');\n \n const getIonicTokenFromToken = (chain, tokenAddress) => {\n const CHAINS = otomatoSdk.CHAINS;\n if (chain == CHAINS.MODE) {\n switch (tokenAddress.toLowerCase()) {\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDT').contractAddress.toLowerCase():\n return '0x94812F2eEa03A49869f95e1b5868C6f3206ee3D3';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDC').contractAddress.toLowerCase():\n return '0x2BE717340023C9e14C1Bb12cb3ecBcfd3c3fB038';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'ezETH').contractAddress.toLowerCase():\n return '0x59e710215d45F584f44c0FEe83DA6d43D762D857';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WETH').contractAddress.toLowerCase():\n return '0x71ef7EDa2Be775E5A7aa8afD02C45F059833e9d2';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WBTC').contractAddress.toLowerCase():\n return '0xd70254C3baD29504789714A7c69d60Ec1127375C';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'STONE').contractAddress.toLowerCase():\n return '0x959FA710CCBb22c7Ce1e59Da82A247e686629310';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'wrsETH').contractAddress.toLowerCase():\n return '0x49950319aBE7CE5c3A6C90698381b45989C99b46';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'weETH.mode').contractAddress.toLowerCase():\n return '0xA0D844742B4abbbc43d8931a6Edb00C56325aA18';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'M-BTC').contractAddress.toLowerCase():\n return '0x19F245782b1258cf3e11Eda25784A378cC18c108';\n\n default: throw new Error('This asset is not available on Ionic');\n }\n }\n}\n \n let ionicTokenContractAddress = getIonicTokenFromToken(\n env.parameters.chainId,\n env.parameters.token.toLowerCase()\n );\n return {\n contractAddress: ionicTokenContractAddress\n };\n }",
707
706
  "output": {
708
707
  "lendingRate": "float"
709
708
  },
@@ -822,6 +821,22 @@ export const TRIGGERS = {
822
821
  "exchangeRate": "float",
823
822
  "transactionHash": "string"
824
823
  },
824
+ "frontendHelpers": {
825
+ "output": {
826
+ "inputAmount": {
827
+ "erc20Token": {
828
+ "contractAddress": "{{output.inputToken}}",
829
+ "chainId": "{{parameters.chainId}}"
830
+ }
831
+ },
832
+ "amountOut": {
833
+ "erc20Token": {
834
+ "contractAddress": "{{output.outputToken}}",
835
+ "chainId": "{{parameters.chainId}}"
836
+ }
837
+ }
838
+ }
839
+ },
825
840
  "parameters": [
826
841
  {
827
842
  "key": "chainId",
@@ -1096,7 +1111,7 @@ export const ACTIONS = {
1096
1111
  {
1097
1112
  "key": "time",
1098
1113
  "type": "string",
1099
- "description": "The time to wait (in milliseconds)",
1114
+ "description": "The time to wait (in seconds)",
1100
1115
  "mandatory": true,
1101
1116
  "category": 0
1102
1117
  },
@@ -1181,6 +1196,22 @@ export const ACTIONS = {
1181
1196
  "tokenOut": "erc20",
1182
1197
  "transactionHash": "string"
1183
1198
  },
1199
+ "frontendHelpers": {
1200
+ "output": {
1201
+ "amountIn": {
1202
+ "erc20Token": {
1203
+ "contractAddress": "{{output.tokenIn}}",
1204
+ "chainId": "{{parameters.chainId}}"
1205
+ }
1206
+ },
1207
+ "amountOut": {
1208
+ "erc20Token": {
1209
+ "contractAddress": "{{output.tokenOut}}",
1210
+ "chainId": "{{parameters.chainId}}"
1211
+ }
1212
+ }
1213
+ }
1214
+ },
1184
1215
  "parameters": [
1185
1216
  {
1186
1217
  "key": "chainId",
@@ -1618,7 +1649,6 @@ export const ACTIONS = {
1618
1649
  "to": "{{before.contractAddress}}"
1619
1650
  }
1620
1651
  ],
1621
- "before": "\n async (env) => {\n const otomatoSdk = await import('otomato-sdk');\n \n if (!env.parameters.chainId)\n throw new Error('You need to provide the chainId first');\n \n const getIonicTokenFromToken = (chain, tokenAddress) => {\n const CHAINS = otomatoSdk.CHAINS;\n if (chain == CHAINS.MODE) {\n switch (tokenAddress.toLowerCase()) {\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDT').contractAddress.toLowerCase():\n return '0x94812F2eEa03A49869f95e1b5868C6f3206ee3D3';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDC').contractAddress.toLowerCase():\n return '0x2BE717340023C9e14C1Bb12cb3ecBcfd3c3fB038';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'ezETH').contractAddress.toLowerCase():\n return '0x59e710215d45F584f44c0FEe83DA6d43D762D857';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WETH').contractAddress.toLowerCase():\n return '0x71ef7EDa2Be775E5A7aa8afD02C45F059833e9d2';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WBTC').contractAddress.toLowerCase():\n return '0xd70254C3baD29504789714A7c69d60Ec1127375C';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'STONE').contractAddress.toLowerCase():\n return '0x959FA710CCBb22c7Ce1e59Da82A247e686629310';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'wrsETH').contractAddress.toLowerCase():\n return '0x49950319aBE7CE5c3A6C90698381b45989C99b46';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'weETH.mode').contractAddress.toLowerCase():\n return '0xA0D844742B4abbbc43d8931a6Edb00C56325aA18';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'M-BTC').contractAddress.toLowerCase():\n return '0x19F245782b1258cf3e11Eda25784A378cC18c108';\n\n default: throw new Error('This asset is not available on Ionic');\n }\n }\n}\n \n let ionicTokenContractAddress = getIonicTokenFromToken(\n env.parameters.chainId,\n env.parameters.tokenToDeposit.toLowerCase()\n );\n return {\n contractAddress: ionicTokenContractAddress\n };\n }",
1622
1652
  "output": {
1623
1653
  "transactionHash": "string"
1624
1654
  },
@@ -1708,7 +1738,6 @@ export const ACTIONS = {
1708
1738
  }
1709
1739
  ],
1710
1740
  "requiredApprovals": [],
1711
- "before": "\n async (env) => {\n const otomatoSdk = await import('otomato-sdk');\n \n if (!env.parameters.chainId)\n throw new Error('You need to provide the chainId first');\n \n const getIonicTokenFromToken = (chain, tokenAddress) => {\n const CHAINS = otomatoSdk.CHAINS;\n if (chain == CHAINS.MODE) {\n switch (tokenAddress.toLowerCase()) {\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDT').contractAddress.toLowerCase():\n return '0x94812F2eEa03A49869f95e1b5868C6f3206ee3D3';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDC').contractAddress.toLowerCase():\n return '0x2BE717340023C9e14C1Bb12cb3ecBcfd3c3fB038';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'ezETH').contractAddress.toLowerCase():\n return '0x59e710215d45F584f44c0FEe83DA6d43D762D857';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WETH').contractAddress.toLowerCase():\n return '0x71ef7EDa2Be775E5A7aa8afD02C45F059833e9d2';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WBTC').contractAddress.toLowerCase():\n return '0xd70254C3baD29504789714A7c69d60Ec1127375C';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'STONE').contractAddress.toLowerCase():\n return '0x959FA710CCBb22c7Ce1e59Da82A247e686629310';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'wrsETH').contractAddress.toLowerCase():\n return '0x49950319aBE7CE5c3A6C90698381b45989C99b46';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'weETH.mode').contractAddress.toLowerCase():\n return '0xA0D844742B4abbbc43d8931a6Edb00C56325aA18';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'M-BTC').contractAddress.toLowerCase():\n return '0x19F245782b1258cf3e11Eda25784A378cC18c108';\n\n default: throw new Error('This asset is not available on Ionic');\n }\n }\n}\n \n let ionicTokenContractAddress = getIonicTokenFromToken(\n env.parameters.chainId,\n env.parameters.tokenToWithdraw.toLowerCase()\n );\n return {\n contractAddress: ionicTokenContractAddress\n };\n }",
1712
1741
  "output": {
1713
1742
  "transactionHash": "string"
1714
1743
  },
@@ -1788,7 +1817,6 @@ export const ACTIONS = {
1788
1817
  }
1789
1818
  ],
1790
1819
  "requiredApprovals": [],
1791
- "before": "\n async (env) => {\n const otomatoSdk = await import('otomato-sdk');\n \n if (!env.parameters.chainId)\n throw new Error('You need to provide the chainId first');\n \n const getIonicTokenFromToken = (chain, tokenAddress) => {\n const CHAINS = otomatoSdk.CHAINS;\n if (chain == CHAINS.MODE) {\n switch (tokenAddress.toLowerCase()) {\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDT').contractAddress.toLowerCase():\n return '0x94812F2eEa03A49869f95e1b5868C6f3206ee3D3';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDC').contractAddress.toLowerCase():\n return '0x2BE717340023C9e14C1Bb12cb3ecBcfd3c3fB038';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'ezETH').contractAddress.toLowerCase():\n return '0x59e710215d45F584f44c0FEe83DA6d43D762D857';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WETH').contractAddress.toLowerCase():\n return '0x71ef7EDa2Be775E5A7aa8afD02C45F059833e9d2';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WBTC').contractAddress.toLowerCase():\n return '0xd70254C3baD29504789714A7c69d60Ec1127375C';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'STONE').contractAddress.toLowerCase():\n return '0x959FA710CCBb22c7Ce1e59Da82A247e686629310';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'wrsETH').contractAddress.toLowerCase():\n return '0x49950319aBE7CE5c3A6C90698381b45989C99b46';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'weETH.mode').contractAddress.toLowerCase():\n return '0xA0D844742B4abbbc43d8931a6Edb00C56325aA18';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'M-BTC').contractAddress.toLowerCase():\n return '0x19F245782b1258cf3e11Eda25784A378cC18c108';\n\n default: throw new Error('This asset is not available on Ionic');\n }\n }\n}\n \n let ionicTokenContractAddress = getIonicTokenFromToken(\n env.parameters.chainId,\n env.parameters.tokenToBorrow.toLowerCase()\n );\n return {\n contractAddress: ionicTokenContractAddress\n };\n }",
1792
1820
  "output": {
1793
1821
  "transactionHash": "string"
1794
1822
  },
@@ -1882,7 +1910,6 @@ export const ACTIONS = {
1882
1910
  "to": "{{before.contractAddress}}"
1883
1911
  }
1884
1912
  ],
1885
- "before": "\n async (env) => {\n const otomatoSdk = await import('otomato-sdk');\n \n if (!env.parameters.chainId)\n throw new Error('You need to provide the chainId first');\n \n const getIonicTokenFromToken = (chain, tokenAddress) => {\n const CHAINS = otomatoSdk.CHAINS;\n if (chain == CHAINS.MODE) {\n switch (tokenAddress.toLowerCase()) {\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDT').contractAddress.toLowerCase():\n return '0x94812F2eEa03A49869f95e1b5868C6f3206ee3D3';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'USDC').contractAddress.toLowerCase():\n return '0x2BE717340023C9e14C1Bb12cb3ecBcfd3c3fB038';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'ezETH').contractAddress.toLowerCase():\n return '0x59e710215d45F584f44c0FEe83DA6d43D762D857';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WETH').contractAddress.toLowerCase():\n return '0x71ef7EDa2Be775E5A7aa8afD02C45F059833e9d2';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'WBTC').contractAddress.toLowerCase():\n return '0xd70254C3baD29504789714A7c69d60Ec1127375C';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'STONE').contractAddress.toLowerCase():\n return '0x959FA710CCBb22c7Ce1e59Da82A247e686629310';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'wrsETH').contractAddress.toLowerCase():\n return '0x49950319aBE7CE5c3A6C90698381b45989C99b46';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'weETH.mode').contractAddress.toLowerCase():\n return '0xA0D844742B4abbbc43d8931a6Edb00C56325aA18';\n case otomatoSdk.getTokenFromSymbol(CHAINS.MODE, 'M-BTC').contractAddress.toLowerCase():\n return '0x19F245782b1258cf3e11Eda25784A378cC18c108';\n\n default: throw new Error('This asset is not available on Ionic');\n }\n }\n}\n \n let ionicTokenContractAddress = getIonicTokenFromToken(\n env.parameters.chainId,\n env.parameters.tokenToRepay.toLowerCase()\n );\n return {\n contractAddress: ionicTokenContractAddress\n };\n }",
1886
1913
  "output": {
1887
1914
  "transactionHash": "string"
1888
1915
  },
@@ -1988,6 +2015,22 @@ export const ACTIONS = {
1988
2015
  "tokenOut": "erc20",
1989
2016
  "transactionHash": "string"
1990
2017
  },
2018
+ "frontendHelpers": {
2019
+ "output": {
2020
+ "amountIn": {
2021
+ "erc20Token": {
2022
+ "contractAddress": "{{output.tokenIn}}",
2023
+ "chainId": "{{parameters.chainId}}"
2024
+ }
2025
+ },
2026
+ "amountOut": {
2027
+ "erc20Token": {
2028
+ "contractAddress": "{{output.tokenOut}}",
2029
+ "chainId": "{{parameters.chainId}}"
2030
+ }
2031
+ }
2032
+ }
2033
+ },
1991
2034
  "parameters": [
1992
2035
  {
1993
2036
  "key": "chainId",
@@ -36,7 +36,6 @@ class RPCServices {
36
36
  getTokenDetails(chainId, contractAddress) {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
38
  const rpcUrl = this.getRPC(chainId); // Get the RPC URL for the chain
39
- // Create a provider using ethers.js
40
39
  const provider = new ethers.JsonRpcProvider(rpcUrl);
41
40
  // Define the contract ABI for the read-only functions (decimals, name, symbol)
42
41
  const erc20ABI = [
@@ -44,14 +43,33 @@ class RPCServices {
44
43
  'function name() view returns (string)',
45
44
  'function symbol() view returns (string)',
46
45
  ];
47
- // Create a contract instance
48
46
  const contract = new ethers.Contract(contractAddress, erc20ABI, provider);
49
- // Fetch the decimals, name, and symbol in parallel using Promise.all
47
+ const maxRetries = 3; // Max number of retries
48
+ const retryDelay = (attempt) => Math.pow(2, attempt) * 1000; // Exponential backoff delay (in milliseconds)
49
+ // Define a helper function to retry the RPC call
50
+ const fetchWithRetry = (fn, retries) => __awaiter(this, void 0, void 0, function* () {
51
+ let attempt = 0;
52
+ while (attempt <= retries) {
53
+ try {
54
+ return yield fn();
55
+ }
56
+ catch (error) {
57
+ if (attempt === retries) {
58
+ throw new Error(`Error fetching token details ${contractAddress} on chain ${chainId}`);
59
+ }
60
+ attempt++;
61
+ console.warn(`Attempt ${attempt} to fetch token details failed. Retrying in ${retryDelay(attempt)}ms...`);
62
+ yield new Promise(resolve => setTimeout(resolve, retryDelay(attempt)));
63
+ }
64
+ }
65
+ throw new Error('Max retries exceeded');
66
+ });
67
+ // Fetch the decimals, name, and symbol with retries
50
68
  try {
51
69
  const [decimals, name, symbol] = yield Promise.all([
52
- contract.decimals(),
53
- contract.name(),
54
- contract.symbol(),
70
+ fetchWithRetry(() => contract.decimals(), maxRetries),
71
+ fetchWithRetry(() => contract.name(), maxRetries),
72
+ fetchWithRetry(() => contract.symbol(), maxRetries),
55
73
  ]);
56
74
  const token = {
57
75
  contractAddress,
@@ -15,13 +15,10 @@ export function convertToTokenUnits(amount, chainId, contractAddress) {
15
15
  const decimals = token.decimals;
16
16
  // Calculate the result as a number first
17
17
  const result = amount * Math.pow(10, decimals);
18
- console.log("result", result);
19
18
  // Check if the result is an integer
20
19
  if (!Number.isInteger(result)) {
21
- console.log("throwing");
22
20
  throw new Error(`Conversion resulted in a non-integer value: ${result}. Please provide an amount that results in a whole number of token units.`);
23
21
  }
24
- console.log("is an integer");
25
22
  // If we've reached here, the result is an integer, so we can safely convert to BigInt
26
23
  return BigInt(Math.round(result));
27
24
  });
@@ -238,7 +238,6 @@ export declare const TRIGGERS: {
238
238
  value: string;
239
239
  })[];
240
240
  }[];
241
- before: string;
242
241
  output: {
243
242
  lendingRate: string;
244
243
  };
@@ -297,6 +296,22 @@ export declare const TRIGGERS: {
297
296
  exchangeRate: string;
298
297
  transactionHash: string;
299
298
  };
299
+ frontendHelpers: {
300
+ output: {
301
+ inputAmount: {
302
+ erc20Token: {
303
+ contractAddress: string;
304
+ chainId: string;
305
+ };
306
+ };
307
+ amountOut: {
308
+ erc20Token: {
309
+ contractAddress: string;
310
+ chainId: string;
311
+ };
312
+ };
313
+ };
314
+ };
300
315
  parameters: Parameter[];
301
316
  examples: {
302
317
  name: string;
@@ -480,6 +495,22 @@ export declare const ACTIONS: {
480
495
  tokenOut: string;
481
496
  transactionHash: string;
482
497
  };
498
+ frontendHelpers: {
499
+ output: {
500
+ amountIn: {
501
+ erc20Token: {
502
+ contractAddress: string;
503
+ chainId: string;
504
+ };
505
+ };
506
+ amountOut: {
507
+ erc20Token: {
508
+ contractAddress: string;
509
+ chainId: string;
510
+ };
511
+ };
512
+ };
513
+ };
483
514
  parameters: Parameter[];
484
515
  examples: {
485
516
  name: string;
@@ -672,7 +703,6 @@ export declare const ACTIONS: {
672
703
  amount: string;
673
704
  to: string;
674
705
  }[];
675
- before: string;
676
706
  output: {
677
707
  transactionHash: string;
678
708
  };
@@ -715,7 +745,6 @@ export declare const ACTIONS: {
715
745
  })[];
716
746
  }[];
717
747
  requiredApprovals: never[];
718
- before: string;
719
748
  output: {
720
749
  transactionHash: string;
721
750
  };
@@ -751,7 +780,6 @@ export declare const ACTIONS: {
751
780
  })[];
752
781
  }[];
753
782
  requiredApprovals: never[];
754
- before: string;
755
783
  output: {
756
784
  transactionHash: string;
757
785
  };
@@ -797,7 +825,6 @@ export declare const ACTIONS: {
797
825
  amount: string;
798
826
  to: string;
799
827
  }[];
800
- before: string;
801
828
  output: {
802
829
  transactionHash: string;
803
830
  };
@@ -866,6 +893,22 @@ export declare const ACTIONS: {
866
893
  tokenOut: string;
867
894
  transactionHash: string;
868
895
  };
896
+ frontendHelpers: {
897
+ output: {
898
+ amountIn: {
899
+ erc20Token: {
900
+ contractAddress: string;
901
+ chainId: string;
902
+ };
903
+ };
904
+ amountOut: {
905
+ erc20Token: {
906
+ contractAddress: string;
907
+ chainId: string;
908
+ };
909
+ };
910
+ };
911
+ };
869
912
  parameters: Parameter[];
870
913
  examples: {
871
914
  name: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "otomato-sdk",
3
- "version": "1.5.65",
3
+ "version": "1.5.67",
4
4
  "description": "An SDK for building and managing automations on Otomato",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/types/src/index.d.ts",