otomato-sdk 1.5.37 → 1.5.39

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.
@@ -1526,6 +1526,7 @@ export const ACTIONS = {
1526
1526
  "to": "{{before.contractAddress}}"
1527
1527
  }
1528
1528
  ],
1529
+ "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 }",
1529
1530
  "output": {
1530
1531
  "transactionHash": "string"
1531
1532
  },
@@ -1615,6 +1616,7 @@ export const ACTIONS = {
1615
1616
  }
1616
1617
  ],
1617
1618
  "requiredApprovals": [],
1619
+ "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 }",
1618
1620
  "output": {
1619
1621
  "transactionHash": "string"
1620
1622
  },
@@ -1686,6 +1688,7 @@ export const ACTIONS = {
1686
1688
  }
1687
1689
  ],
1688
1690
  "requiredApprovals": [],
1691
+ "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 }",
1689
1692
  "output": {
1690
1693
  "transactionHash": "string"
1691
1694
  },
@@ -1771,6 +1774,7 @@ export const ACTIONS = {
1771
1774
  "to": "{{before.contractAddress}}"
1772
1775
  }
1773
1776
  ],
1777
+ "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 }",
1774
1778
  "output": {
1775
1779
  "transactionHash": "string"
1776
1780
  },
@@ -16,13 +16,18 @@ export class Action extends Node {
16
16
  super(Object.assign(Object.assign({}, action), { class: 'action', parentInfo: findActionByBlockId(action.blockId).parentInfo }));
17
17
  }
18
18
  getSessionKeyPermissions() {
19
- const parentBlock = findActionByBlockId(this.blockId).block;
20
- if (!parentBlock.permissions)
21
- return null;
22
- const permissions = SessionKeyPermission.fromJSON(parentBlock.permissions);
23
- permissions.fillParameters(this.getParameters());
24
- permissions.fillMethod();
25
- return permissions;
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const parentBlock = findActionByBlockId(this.blockId).block;
21
+ if (!parentBlock.permissions)
22
+ return null;
23
+ const permissions = SessionKeyPermission.fromJSON(parentBlock.permissions);
24
+ permissions.fillParameters(this.getParameters());
25
+ permissions.fillMethod();
26
+ if (parentBlock.before) {
27
+ yield permissions.fillBeforeVariables(parentBlock.before, this.getParameters());
28
+ }
29
+ return permissions;
30
+ });
26
31
  }
27
32
  static fromJSON(json) {
28
33
  return __awaiter(this, void 0, void 0, function* () {
@@ -1,3 +1,12 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { getToken } from "../constants/tokens.js";
2
11
  export class SessionKeyPermission {
3
12
  constructor({ approvedTargets = [], label = [], labelNotAuthorized = [], } = {}) {
@@ -5,6 +14,7 @@ export class SessionKeyPermission {
5
14
  this.label = label;
6
15
  this.labelNotAuthorized = labelNotAuthorized;
7
16
  }
17
+ // Existing method to replace placeholders with actual values
8
18
  fill(key, value) {
9
19
  const replacePlaceholder = (target) => {
10
20
  const placeholder = new RegExp(`{{${key}}}`, 'g');
@@ -14,15 +24,50 @@ export class SessionKeyPermission {
14
24
  this.label = this.label.map(replacePlaceholder);
15
25
  this.labelNotAuthorized = this.labelNotAuthorized.map(replacePlaceholder);
16
26
  }
27
+ /**
28
+ * Fill placeholders using variables returned by the 'before' string execution.
29
+ * @param beforeCode - A string representing the 'before' logic to execute.
30
+ */
31
+ fillBeforeVariables(beforeCode, parameters) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ try {
34
+ // Prepare the environment with parameters
35
+ const env = { parameters };
36
+ // Replace the import statement in the beforeCode string if needed
37
+ const beforeCodeUpdated = beforeCode.replace("import('otomato-sdk')", "import('../index.js')");
38
+ // Wrap the beforeCode in an async function and immediately invoke it
39
+ const asyncBeforeFn = new Function('env', `
40
+ return (async function() {
41
+ return await (${beforeCodeUpdated})(env);
42
+ })();
43
+ `);
44
+ // Execute the async function and await the result
45
+ const beforeResult = yield asyncBeforeFn(env);
46
+ // Replace placeholders like {{before.variableName}} with the corresponding values
47
+ if (beforeResult && typeof beforeResult === 'object') {
48
+ Object.keys(beforeResult).forEach(key => {
49
+ this.fill(`before.${key}`, beforeResult[key]);
50
+ });
51
+ }
52
+ else {
53
+ console.error("Before function did not return an object:", beforeResult);
54
+ }
55
+ }
56
+ catch (error) {
57
+ console.error('Error executing before code:', error);
58
+ }
59
+ });
60
+ }
61
+ // The rest of your existing code
17
62
  fillParameters(params) {
18
63
  var _a;
19
- // 1. replace non abi params
64
+ // 1. replace non-ABI params
20
65
  for (let key in params) {
21
66
  if (key !== 'abi') {
22
67
  this.fill(`parameters.${key}`, params[key]);
23
68
  }
24
69
  }
25
- // 2. replace abi params
70
+ // 2. replace ABI params
26
71
  const abiParams = (_a = params.abi) === null || _a === void 0 ? void 0 : _a.parameters;
27
72
  for (let key in abiParams) {
28
73
  this.fill(`parameters.abiParams.${key}`, abiParams[key]);
@@ -89,6 +134,7 @@ export class SessionKeyPermission {
89
134
  this.labelNotAuthorized = this.labelNotAuthorized.filter(lbl => !this.label.includes(lbl));
90
135
  }
91
136
  }
137
+ // Helper function to get a different token
92
138
  const getDifferentToken = (chain, contractAddress) => {
93
139
  var _a;
94
140
  const tokenSymbol = (_a = getToken(chain, contractAddress)) === null || _a === void 0 ? void 0 : _a.symbol;
@@ -202,20 +202,22 @@ export class Workflow {
202
202
  });
203
203
  }
204
204
  getSessionKeyPermissions() {
205
- const permissions = new SessionKeyPermission();
206
- for (const node of this.nodes) {
207
- try {
208
- if (node.class === 'action' && 'getSessionKeyPermissions' in node) {
209
- const nodePermissions = node.getSessionKeyPermissions();
210
- if (nodePermissions) {
211
- permissions.merge(nodePermissions);
205
+ return __awaiter(this, void 0, void 0, function* () {
206
+ const permissions = new SessionKeyPermission();
207
+ for (const node of this.nodes) {
208
+ try {
209
+ if (node.class === 'action' && 'getSessionKeyPermissions' in node) {
210
+ const nodePermissions = yield node.getSessionKeyPermissions();
211
+ if (nodePermissions) {
212
+ permissions.merge(nodePermissions);
213
+ }
212
214
  }
213
215
  }
216
+ catch (error) {
217
+ console.error(`Error getting session key permissions for node ${node.getRef()}:`, error);
218
+ }
214
219
  }
215
- catch (error) {
216
- console.error(`Error getting session key permissions for node ${node.getRef()}:`, error);
217
- }
218
- }
219
- return permissions;
220
+ return permissions;
221
+ });
220
222
  }
221
223
  }
@@ -642,6 +642,7 @@ export declare const ACTIONS: {
642
642
  amount: string;
643
643
  to: string;
644
644
  }[];
645
+ before: string;
645
646
  output: {
646
647
  transactionHash: string;
647
648
  };
@@ -684,6 +685,7 @@ export declare const ACTIONS: {
684
685
  })[];
685
686
  }[];
686
687
  requiredApprovals: never[];
688
+ before: string;
687
689
  output: {
688
690
  transactionHash: string;
689
691
  };
@@ -713,6 +715,7 @@ export declare const ACTIONS: {
713
715
  })[];
714
716
  }[];
715
717
  requiredApprovals: never[];
718
+ before: string;
716
719
  output: {
717
720
  transactionHash: string;
718
721
  };
@@ -752,6 +755,7 @@ export declare const ACTIONS: {
752
755
  amount: string;
753
756
  to: string;
754
757
  }[];
758
+ before: string;
755
759
  output: {
756
760
  transactionHash: string;
757
761
  };
@@ -16,7 +16,7 @@ export declare class Action extends Node {
16
16
  parentInfo?: ParentInfo;
17
17
  state?: NodeState;
18
18
  });
19
- getSessionKeyPermissions(): SessionKeyPermission | null;
19
+ getSessionKeyPermissions(): Promise<SessionKeyPermission | null>;
20
20
  static fromJSON(json: {
21
21
  [key: string]: any;
22
22
  }): Promise<Action>;
@@ -8,6 +8,13 @@ export declare class SessionKeyPermission {
8
8
  labelNotAuthorized?: string[];
9
9
  });
10
10
  fill(key: string, value: any): void;
11
+ /**
12
+ * Fill placeholders using variables returned by the 'before' string execution.
13
+ * @param beforeCode - A string representing the 'before' logic to execute.
14
+ */
15
+ fillBeforeVariables(beforeCode: string, parameters: {
16
+ [key: string]: any;
17
+ }): Promise<void>;
11
18
  fillParameters(params: {
12
19
  [key: string]: any;
13
20
  }): void;
@@ -49,5 +49,5 @@ export declare class Workflow {
49
49
  success: boolean;
50
50
  error?: string;
51
51
  }>;
52
- getSessionKeyPermissions(): SessionKeyPermission;
52
+ getSessionKeyPermissions(): Promise<SessionKeyPermission>;
53
53
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "otomato-sdk",
3
- "version": "1.5.37",
3
+ "version": "1.5.39",
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",