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.
- package/dist/src/constants/Blocks.js +4 -0
- package/dist/src/models/Action.js +12 -7
- package/dist/src/models/SessionKeyPermission.js +48 -2
- package/dist/src/models/Workflow.js +14 -12
- package/dist/types/src/constants/Blocks.d.ts +4 -0
- package/dist/types/src/models/Action.d.ts +1 -1
- package/dist/types/src/models/SessionKeyPermission.d.ts +7 -0
- package/dist/types/src/models/Workflow.d.ts +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
216
|
-
|
|
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;
|