otomato-sdk 1.0.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/.mocharc.json +8 -0
- package/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/examples/create-trigger-list.js +136 -0
- package/dist/examples/create-trigger.js +7 -0
- package/dist/src/constants/ActionBlocks.js +321 -0
- package/dist/src/constants/chains.js +5 -0
- package/dist/src/constants/tokens.js +82 -0
- package/dist/src/index.js +13 -0
- package/dist/src/models/Action.js +1 -0
- package/dist/src/models/Automation.js +1 -0
- package/dist/src/models/Condition.js +1 -0
- package/dist/src/models/Parameter.js +1 -0
- package/dist/src/models/Trigger.js +110 -0
- package/dist/src/services/ApiService.js +1 -0
- package/dist/src/services/AutomationService.js +1 -0
- package/dist/test/trigger.spec.js +72 -0
- package/dist/types/examples/create-trigger-list.d.ts +1 -0
- package/dist/types/examples/create-trigger.d.ts +1 -0
- package/dist/types/src/constants/ActionBlocks.d.ts +91 -0
- package/dist/types/src/constants/chains.d.ts +5 -0
- package/dist/types/src/constants/tokens.d.ts +11 -0
- package/dist/types/src/index.d.ts +10 -0
- package/dist/types/src/models/Action.d.ts +6 -0
- package/dist/types/src/models/Automation.d.ts +6 -0
- package/dist/types/src/models/Condition.d.ts +6 -0
- package/dist/types/src/models/Parameter.d.ts +6 -0
- package/dist/types/src/models/Trigger.d.ts +37 -0
- package/dist/types/src/services/ApiService.d.ts +6 -0
- package/dist/types/src/services/AutomationService.d.ts +6 -0
- package/dist/types/test/trigger.spec.d.ts +1 -0
- package/examples/create-trigger-list.ts +159 -0
- package/examples/create-trigger.ts +12 -0
- package/package.json +37 -0
- package/src/constants/ActionBlocks.ts +324 -0
- package/src/constants/chains.ts +5 -0
- package/src/constants/tokens.ts +97 -0
- package/src/index.ts +15 -0
- package/src/models/Action.ts +6 -0
- package/src/models/Automation.ts +6 -0
- package/src/models/Condition.ts +6 -0
- package/src/models/Parameter.ts +6 -0
- package/src/models/Trigger.ts +128 -0
- package/src/services/ApiService.ts +6 -0
- package/src/services/AutomationService.ts +6 -0
- package/test/trigger.spec.ts +86 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
export class Trigger {
|
|
3
|
+
constructor(trigger) {
|
|
4
|
+
this.id = trigger.id;
|
|
5
|
+
this.name = trigger.name;
|
|
6
|
+
this.description = trigger.description;
|
|
7
|
+
this.type = trigger.type;
|
|
8
|
+
this.parameters = {};
|
|
9
|
+
this.keyMap = {};
|
|
10
|
+
trigger.parameters.forEach(param => {
|
|
11
|
+
this.parameters[param.key] = Object.assign(Object.assign({}, param), { value: null });
|
|
12
|
+
const simplifiedKey = this.getSimplifiedKey(param.key);
|
|
13
|
+
this.keyMap[simplifiedKey] = param.key;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
setChainId(value) {
|
|
17
|
+
this.setParameter('chainId', value);
|
|
18
|
+
}
|
|
19
|
+
setContractAddress(value) {
|
|
20
|
+
this.setParameter('contractAddress', value);
|
|
21
|
+
}
|
|
22
|
+
setCondition(value) {
|
|
23
|
+
if (this.type !== 1) {
|
|
24
|
+
throw new Error('Condition setting is not applicable for subscription based triggers.');
|
|
25
|
+
}
|
|
26
|
+
this.setParameter('condition', value);
|
|
27
|
+
}
|
|
28
|
+
setComparisonValue(value) {
|
|
29
|
+
if (this.type !== 1) {
|
|
30
|
+
throw new Error('Comparison value setting is not applicable for subscription based triggers.');
|
|
31
|
+
}
|
|
32
|
+
this.setParameter('comparisonValue', value);
|
|
33
|
+
}
|
|
34
|
+
setInterval(value) {
|
|
35
|
+
if (this.type !== 1) {
|
|
36
|
+
throw new Error('Interval setting is not applicable for subscription based triggers.');
|
|
37
|
+
}
|
|
38
|
+
this.setParameter('interval', value);
|
|
39
|
+
}
|
|
40
|
+
setParams(key, value) {
|
|
41
|
+
const fullKey = `abiParams.${key}`;
|
|
42
|
+
if (fullKey in this.parameters) {
|
|
43
|
+
this.setParameter(fullKey, value);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new Error(`Parameter with simplified key ${key} not found in abiParams`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
setParameter(key, value) {
|
|
50
|
+
if (key in this.parameters) {
|
|
51
|
+
const param = this.parameters[key];
|
|
52
|
+
if (this.validateType(param.type, value)) {
|
|
53
|
+
this.parameters[key].value = value;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
throw new Error(`Invalid type for parameter ${key}. Expected ${param.type}.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error(`Parameter with key ${key} not found`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
validateType(expectedType, value) {
|
|
64
|
+
switch (expectedType) {
|
|
65
|
+
case 'int':
|
|
66
|
+
case 'integer':
|
|
67
|
+
case 'uint256':
|
|
68
|
+
case 'int256':
|
|
69
|
+
return Number.isInteger(value);
|
|
70
|
+
case 'address':
|
|
71
|
+
return typeof value === 'string' && this.isAddress(value);
|
|
72
|
+
case 'float':
|
|
73
|
+
return typeof value === 'number';
|
|
74
|
+
case 'logic_operator':
|
|
75
|
+
const validOperators = new Set(['<', '>', '<=', '>=', '==']);
|
|
76
|
+
return typeof value === 'string' && validOperators.has(value);
|
|
77
|
+
case 'any':
|
|
78
|
+
return true;
|
|
79
|
+
default:
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
isAddress(value) {
|
|
84
|
+
return ethers.isAddress(value);
|
|
85
|
+
}
|
|
86
|
+
getParameter(key) {
|
|
87
|
+
if (key in this.parameters) {
|
|
88
|
+
return this.parameters[key].value;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw new Error(`Parameter with key ${key} not found`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getParameters() {
|
|
95
|
+
return Object.keys(this.parameters).reduce((acc, key) => {
|
|
96
|
+
acc[key] = this.parameters[key].value;
|
|
97
|
+
return acc;
|
|
98
|
+
}, {});
|
|
99
|
+
}
|
|
100
|
+
toJSON() {
|
|
101
|
+
const json = {
|
|
102
|
+
id: this.id,
|
|
103
|
+
parameters: this.getParameters(),
|
|
104
|
+
};
|
|
105
|
+
return json;
|
|
106
|
+
}
|
|
107
|
+
getSimplifiedKey(key) {
|
|
108
|
+
return key.replace(/[.\[\]]/g, '_');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { Trigger, TRIGGERS, getToken, CHAINS } from '../src/index';
|
|
3
|
+
const DEFAULT_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
4
|
+
describe('Trigger Class', () => {
|
|
5
|
+
it('should create a transfer trigger without parameters', () => {
|
|
6
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
7
|
+
const params = transferTrigger.getParameters();
|
|
8
|
+
expect(params.chainId).to.be.null;
|
|
9
|
+
expect(params['abiParams.value']).to.be.null;
|
|
10
|
+
expect(params['abiParams.to']).to.be.null;
|
|
11
|
+
expect(params.contractAddress).to.be.null;
|
|
12
|
+
});
|
|
13
|
+
it('should create a transfer trigger and set parameters correctly', () => {
|
|
14
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
15
|
+
transferTrigger.setChainId(CHAINS.ETHEREUM);
|
|
16
|
+
transferTrigger.setParams("value", 1000);
|
|
17
|
+
transferTrigger.setParams("to", DEFAULT_ADDRESS);
|
|
18
|
+
transferTrigger.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
19
|
+
const params = transferTrigger.getParameters();
|
|
20
|
+
expect(params.chainId).to.equal(CHAINS.ETHEREUM);
|
|
21
|
+
expect(params['abiParams.value']).to.equal(1000);
|
|
22
|
+
expect(params['abiParams.to']).to.equal(DEFAULT_ADDRESS);
|
|
23
|
+
expect(params.contractAddress).to.equal(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
24
|
+
});
|
|
25
|
+
it('should be able to export a trigger as json', () => {
|
|
26
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
27
|
+
transferTrigger.setChainId(CHAINS.ETHEREUM);
|
|
28
|
+
transferTrigger.setParams("value", 1000);
|
|
29
|
+
transferTrigger.setParams("to", DEFAULT_ADDRESS);
|
|
30
|
+
transferTrigger.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
31
|
+
const json = transferTrigger.toJSON();
|
|
32
|
+
expect(json).to.deep.equal({
|
|
33
|
+
id: TRIGGERS.TOKENS.ERC20.TRANSFER.id,
|
|
34
|
+
parameters: {
|
|
35
|
+
chainId: CHAINS.ETHEREUM,
|
|
36
|
+
'abiParams.value': 1000,
|
|
37
|
+
'abiParams.to': DEFAULT_ADDRESS,
|
|
38
|
+
contractAddress: getToken(CHAINS.ETHEREUM, 'USDC').contractAddress
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it('should create a balance trigger with polling parameters correctly', () => {
|
|
43
|
+
const balanceTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.BALANCE);
|
|
44
|
+
balanceTrigger.setChainId(CHAINS.ETHEREUM);
|
|
45
|
+
balanceTrigger.setParams("account", DEFAULT_ADDRESS);
|
|
46
|
+
balanceTrigger.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
47
|
+
balanceTrigger.setCondition(">");
|
|
48
|
+
balanceTrigger.setComparisonValue(45000);
|
|
49
|
+
balanceTrigger.setInterval(5000);
|
|
50
|
+
const params = balanceTrigger.getParameters();
|
|
51
|
+
expect(params.chainId).to.equal(CHAINS.ETHEREUM);
|
|
52
|
+
expect(params['abiParams.account']).to.equal(DEFAULT_ADDRESS);
|
|
53
|
+
expect(params.contractAddress).to.equal(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
54
|
+
expect(balanceTrigger.toJSON().condition).to.equal(">");
|
|
55
|
+
expect(balanceTrigger.toJSON().comparisonValue).to.equal(45000);
|
|
56
|
+
expect(balanceTrigger.toJSON().interval).to.equal(5000);
|
|
57
|
+
});
|
|
58
|
+
it('should not be able to set conditions, comparison value and interval for subscription based triggers', () => {
|
|
59
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
60
|
+
expect(() => transferTrigger.setCondition(">")).to.throw('Condition setting is not applicable for subscription based triggers.');
|
|
61
|
+
expect(() => transferTrigger.setComparisonValue(45000)).to.throw('Comparison value setting is not applicable for subscription based triggers.');
|
|
62
|
+
expect(() => transferTrigger.setInterval(5000)).to.throw('Interval setting is not applicable for subscription based triggers.');
|
|
63
|
+
});
|
|
64
|
+
it('should throw an error for invalid parameter type', () => {
|
|
65
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
66
|
+
expect(() => transferTrigger.setParams("value", "invalid")).to.throw('Invalid type for parameter abiParams.value. Expected uint256.');
|
|
67
|
+
});
|
|
68
|
+
it('should throw an error for invalid address', () => {
|
|
69
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
70
|
+
expect(() => transferTrigger.setParams("to", "invalid_address")).to.throw('Invalid type for parameter abiParams.to. Expected address.');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Parameter } from '../models/Parameter.js';
|
|
2
|
+
export declare const TRIGGERS: {
|
|
3
|
+
TOKENS: {
|
|
4
|
+
ERC20: {
|
|
5
|
+
CHAINS: number[];
|
|
6
|
+
TRANSFER: {
|
|
7
|
+
id: number;
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
type: number;
|
|
11
|
+
parameters: Parameter[];
|
|
12
|
+
};
|
|
13
|
+
BALANCE: {
|
|
14
|
+
id: number;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
type: number;
|
|
18
|
+
parameters: Parameter[];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
YIELD: {
|
|
23
|
+
SPLICE_FI: {
|
|
24
|
+
CHAINS: number[];
|
|
25
|
+
SWAP: {
|
|
26
|
+
id: number;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
type: number;
|
|
30
|
+
parameters: Parameter[];
|
|
31
|
+
};
|
|
32
|
+
LIQUIDITY_REMOVED: {
|
|
33
|
+
id: number;
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
type: number;
|
|
37
|
+
parameters: Parameter[];
|
|
38
|
+
};
|
|
39
|
+
MARKET_CREATION: {
|
|
40
|
+
id: number;
|
|
41
|
+
name: string;
|
|
42
|
+
description: string;
|
|
43
|
+
type: number;
|
|
44
|
+
parameters: Parameter[];
|
|
45
|
+
};
|
|
46
|
+
INTEREST_RATE_UPDATE: {
|
|
47
|
+
id: number;
|
|
48
|
+
name: string;
|
|
49
|
+
description: string;
|
|
50
|
+
type: number;
|
|
51
|
+
parameters: Parameter[];
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
LENDING: {
|
|
56
|
+
ASTARIA: {
|
|
57
|
+
CHAINS: number[];
|
|
58
|
+
LEND_RECALLED: {
|
|
59
|
+
id: number;
|
|
60
|
+
name: string;
|
|
61
|
+
description: string;
|
|
62
|
+
type: number;
|
|
63
|
+
parameters: Parameter[];
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
DEXES: {
|
|
68
|
+
ODOS: {
|
|
69
|
+
CHAINS: number[];
|
|
70
|
+
SWAP: {
|
|
71
|
+
id: number;
|
|
72
|
+
name: string;
|
|
73
|
+
description: string;
|
|
74
|
+
type: number;
|
|
75
|
+
parameters: Parameter[];
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
SOCIALS: {
|
|
80
|
+
MODE_NAME_SERVICE: {
|
|
81
|
+
CHAINS: number[];
|
|
82
|
+
NAME_REGISTERED: {
|
|
83
|
+
id: number;
|
|
84
|
+
name: string;
|
|
85
|
+
description: string;
|
|
86
|
+
type: number;
|
|
87
|
+
parameters: Parameter[];
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Token {
|
|
2
|
+
contractAddress: string;
|
|
3
|
+
name: string;
|
|
4
|
+
symbol: string;
|
|
5
|
+
decimals: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Tokens {
|
|
8
|
+
[key: number]: Token[];
|
|
9
|
+
}
|
|
10
|
+
export declare const TOKENS: Tokens;
|
|
11
|
+
export declare function getToken(chain: number, symbol: string): Token;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './constants/ActionBlocks.js';
|
|
2
|
+
export * from './constants/chains.js';
|
|
3
|
+
export * from './constants/tokens.js';
|
|
4
|
+
export * from './models/Action.js';
|
|
5
|
+
export * from './models/Automation.js';
|
|
6
|
+
export * from './models/Condition.js';
|
|
7
|
+
export * from './models/Parameter.js';
|
|
8
|
+
export * from './models/Trigger.js';
|
|
9
|
+
export * from './services/ApiService.js';
|
|
10
|
+
export * from './services/AutomationService.js';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Parameter } from './Parameter.js';
|
|
2
|
+
export declare class Trigger {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
type: number;
|
|
7
|
+
parameters: {
|
|
8
|
+
[key: string]: Parameter;
|
|
9
|
+
};
|
|
10
|
+
keyMap: {
|
|
11
|
+
[key: string]: string;
|
|
12
|
+
};
|
|
13
|
+
constructor(trigger: {
|
|
14
|
+
id: number;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
type: number;
|
|
18
|
+
parameters: Parameter[];
|
|
19
|
+
});
|
|
20
|
+
setChainId(value: number): void;
|
|
21
|
+
setContractAddress(value: string): void;
|
|
22
|
+
setCondition(value: string): void;
|
|
23
|
+
setComparisonValue(value: number): void;
|
|
24
|
+
setInterval(value: number): void;
|
|
25
|
+
setParams(key: string, value: any): void;
|
|
26
|
+
private setParameter;
|
|
27
|
+
private validateType;
|
|
28
|
+
private isAddress;
|
|
29
|
+
getParameter(key: string): any;
|
|
30
|
+
getParameters(): {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
};
|
|
33
|
+
toJSON(): {
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
};
|
|
36
|
+
private getSimplifiedKey;
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { TRIGGERS, getToken, TOKENS, CHAINS, Trigger } from '../src/index.js';
|
|
2
|
+
|
|
3
|
+
const generateDefaultTriggers = (): any[] => {
|
|
4
|
+
const triggersList: any[] = [];
|
|
5
|
+
|
|
6
|
+
const createDefaultTrigger = (trigger: any) => {
|
|
7
|
+
const triggerInstance = new Trigger(trigger);
|
|
8
|
+
|
|
9
|
+
// Set common parameters if they exist
|
|
10
|
+
if (trigger.parameters.some((p: any) => p.key === "chainId")) {
|
|
11
|
+
triggerInstance.setChainId(CHAINS.ETHEREUM);
|
|
12
|
+
}
|
|
13
|
+
if (trigger.parameters.some((p: any) => p.key === "contractAddress")) {
|
|
14
|
+
triggerInstance.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
15
|
+
}
|
|
16
|
+
if (trigger.parameters.some((p: any) => p.key === "condition")) {
|
|
17
|
+
triggerInstance.setCondition('>');
|
|
18
|
+
}
|
|
19
|
+
if (trigger.parameters.some((p: any) => p.key === "comparisonValue")) {
|
|
20
|
+
triggerInstance.setComparisonValue(1000);
|
|
21
|
+
}
|
|
22
|
+
if (trigger.parameters.some((p: any) => p.key === "interval")) {
|
|
23
|
+
triggerInstance.setInterval(60000); // 1 minute interval
|
|
24
|
+
}
|
|
25
|
+
if (trigger.parameters.some((p: any) => p.key === "abiParams.account")) {
|
|
26
|
+
triggerInstance.setParams('account', '0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return triggerInstance.toJSON();
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// Explicitly create each trigger
|
|
33
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.TOKENS.ERC20.TRANSFER));
|
|
34
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.YIELD.SPLICE_FI.SWAP));
|
|
35
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.YIELD.SPLICE_FI.LIQUIDITY_REMOVED));
|
|
36
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.YIELD.SPLICE_FI.MARKET_CREATION));
|
|
37
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.YIELD.SPLICE_FI.INTEREST_RATE_UPDATE));
|
|
38
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.LENDING.ASTARIA.LEND_RECALLED));
|
|
39
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.DEXES.ODOS.SWAP));
|
|
40
|
+
triggersList.push(createDefaultTrigger(TRIGGERS.SOCIALS.MODE_NAME_SERVICE.NAME_REGISTERED));
|
|
41
|
+
|
|
42
|
+
return triggersList;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
function generateTriggersForAllTokens(chain: number) {
|
|
46
|
+
if (!(chain in TOKENS)) {
|
|
47
|
+
throw new Error(`Unsupported chain: ${chain}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const tokens = TOKENS[chain];
|
|
51
|
+
const triggersList: any[] = [];
|
|
52
|
+
|
|
53
|
+
tokens.forEach(token => {
|
|
54
|
+
// Generate transfer trigger
|
|
55
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
56
|
+
transferTrigger.setChainId(chain);
|
|
57
|
+
// transferTrigger.setParams("value", 1000);
|
|
58
|
+
// transferTrigger.setParams("to", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
59
|
+
transferTrigger.setContractAddress(token.contractAddress);
|
|
60
|
+
triggersList.push(transferTrigger);
|
|
61
|
+
|
|
62
|
+
// Generate balance trigger
|
|
63
|
+
const balanceTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.BALANCE);
|
|
64
|
+
balanceTrigger.setChainId(chain);
|
|
65
|
+
balanceTrigger.setParams("account", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
66
|
+
balanceTrigger.setContractAddress(token.contractAddress);
|
|
67
|
+
balanceTrigger.setCondition(">");
|
|
68
|
+
balanceTrigger.setComparisonValue(10);
|
|
69
|
+
balanceTrigger.setInterval(5000);
|
|
70
|
+
triggersList.push(balanceTrigger);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
return triggersList.map(t => t.toJSON());
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const generateSpecificTriggers = (): any[] => {
|
|
77
|
+
// Create individual triggers
|
|
78
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
79
|
+
transferTrigger.setChainId(CHAINS.ETHEREUM);
|
|
80
|
+
transferTrigger.setParams("value", 1000);
|
|
81
|
+
transferTrigger.setParams("to", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
82
|
+
transferTrigger.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
83
|
+
|
|
84
|
+
const balanceTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.BALANCE);
|
|
85
|
+
balanceTrigger.setChainId(CHAINS.ETHEREUM);
|
|
86
|
+
balanceTrigger.setParams("account", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
87
|
+
balanceTrigger.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
88
|
+
balanceTrigger.setCondition(">");
|
|
89
|
+
balanceTrigger.setComparisonValue(45000);
|
|
90
|
+
balanceTrigger.setInterval(5000);
|
|
91
|
+
|
|
92
|
+
const spliceFiSwapTrigger = new Trigger(TRIGGERS.YIELD.SPLICE_FI.SWAP);
|
|
93
|
+
spliceFiSwapTrigger.setParams("caller", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
94
|
+
spliceFiSwapTrigger.setParams("market", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
95
|
+
spliceFiSwapTrigger.setParams("receiver", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
96
|
+
spliceFiSwapTrigger.setParams("netPtToAccount", 1000);
|
|
97
|
+
spliceFiSwapTrigger.setParams("netSyToAccount", 2000);
|
|
98
|
+
|
|
99
|
+
const liquidityRemovedTrigger = new Trigger(TRIGGERS.YIELD.SPLICE_FI.LIQUIDITY_REMOVED);
|
|
100
|
+
liquidityRemovedTrigger.setParams("caller", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
101
|
+
liquidityRemovedTrigger.setParams("market", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
102
|
+
liquidityRemovedTrigger.setParams("receiver", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
103
|
+
liquidityRemovedTrigger.setParams("netLpToRemove", 1000);
|
|
104
|
+
liquidityRemovedTrigger.setParams("netPtOut", 500);
|
|
105
|
+
liquidityRemovedTrigger.setParams("netSyOut", 1500);
|
|
106
|
+
|
|
107
|
+
const marketCreationTrigger = new Trigger(TRIGGERS.YIELD.SPLICE_FI.MARKET_CREATION);
|
|
108
|
+
marketCreationTrigger.setParams("market", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
109
|
+
marketCreationTrigger.setParams("PT", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
110
|
+
marketCreationTrigger.setParams("scalarRoot", 1234);
|
|
111
|
+
marketCreationTrigger.setParams("initialAnchor", 5678);
|
|
112
|
+
marketCreationTrigger.setParams("lnFeeRateRoot", 91011);
|
|
113
|
+
|
|
114
|
+
const interestRateUpdateTrigger = new Trigger(TRIGGERS.YIELD.SPLICE_FI.INTEREST_RATE_UPDATE);
|
|
115
|
+
interestRateUpdateTrigger.setParams("timestamp", 1627848271);
|
|
116
|
+
interestRateUpdateTrigger.setParams("lastLnImpliedRate", 123456);
|
|
117
|
+
interestRateUpdateTrigger.setContractAddress("0xDE95511418EBD8Bd36294B11C86314DdFA50e212");
|
|
118
|
+
|
|
119
|
+
const lendRecalledTrigger = new Trigger(TRIGGERS.LENDING.ASTARIA.LEND_RECALLED);
|
|
120
|
+
lendRecalledTrigger.setParams("loanId", 123456);
|
|
121
|
+
lendRecalledTrigger.setParams("recaller", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
122
|
+
lendRecalledTrigger.setParams("end", 1627848271);
|
|
123
|
+
|
|
124
|
+
const odosSwapTrigger = new Trigger(TRIGGERS.DEXES.ODOS.SWAP);
|
|
125
|
+
odosSwapTrigger.setChainId(CHAINS.ETHEREUM);
|
|
126
|
+
odosSwapTrigger.setParams("sender", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
127
|
+
odosSwapTrigger.setParams("inputAmount", 1000);
|
|
128
|
+
odosSwapTrigger.setParams("inputToken", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
129
|
+
odosSwapTrigger.setParams("amountOut", 500);
|
|
130
|
+
odosSwapTrigger.setParams("outputToken", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
131
|
+
odosSwapTrigger.setParams("exchangeRate", 1.23);
|
|
132
|
+
|
|
133
|
+
const nameRegisteredTrigger = new Trigger(TRIGGERS.SOCIALS.MODE_NAME_SERVICE.NAME_REGISTERED);
|
|
134
|
+
nameRegisteredTrigger.setParams("id", 123456);
|
|
135
|
+
nameRegisteredTrigger.setParams("owner", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
136
|
+
nameRegisteredTrigger.setParams("expires", 1627848271);
|
|
137
|
+
|
|
138
|
+
return [
|
|
139
|
+
transferTrigger.toJSON(),
|
|
140
|
+
balanceTrigger.toJSON(),
|
|
141
|
+
spliceFiSwapTrigger.toJSON(),
|
|
142
|
+
liquidityRemovedTrigger.toJSON(),
|
|
143
|
+
marketCreationTrigger.toJSON(),
|
|
144
|
+
interestRateUpdateTrigger.toJSON(),
|
|
145
|
+
lendRecalledTrigger.toJSON(),
|
|
146
|
+
odosSwapTrigger.toJSON(),
|
|
147
|
+
nameRegisteredTrigger.toJSON(),
|
|
148
|
+
]
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
// Collect all triggers in a list
|
|
152
|
+
const triggersList = [
|
|
153
|
+
...generateTriggersForAllTokens(CHAINS.ETHEREUM),
|
|
154
|
+
...generateTriggersForAllTokens(CHAINS.MODE),
|
|
155
|
+
...generateDefaultTriggers(),
|
|
156
|
+
...generateSpecificTriggers()
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
console.log(JSON.stringify(triggersList));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TRIGGERS, getToken, CHAINS, Trigger } from '../src/index.js';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const transferTrigger = new Trigger(TRIGGERS.TOKENS.ERC20.TRANSFER);
|
|
6
|
+
|
|
7
|
+
transferTrigger.setChainId(CHAINS.ETHEREUM);
|
|
8
|
+
// transferTrigger.setParams("value", 1000);
|
|
9
|
+
// transferTrigger.setParams("to", "0xe1432599B51d9BE1b5A27E2A2FB8e5dF684749C6");
|
|
10
|
+
transferTrigger.setContractAddress(getToken(CHAINS.ETHEREUM, 'USDC').contractAddress);
|
|
11
|
+
|
|
12
|
+
console.log(transferTrigger.toJSON());
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "otomato-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "An SDK for building and managing automations on Otomato",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "npx tsc",
|
|
10
|
+
"test": "mocha --config .mocharc.json"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"sdk",
|
|
14
|
+
"automation",
|
|
15
|
+
"typescript",
|
|
16
|
+
"javascript",
|
|
17
|
+
"crypto",
|
|
18
|
+
"evm",
|
|
19
|
+
"ethereum"
|
|
20
|
+
],
|
|
21
|
+
"author": "otomato",
|
|
22
|
+
"license": "ISC",
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/axios": "^0.14.0",
|
|
25
|
+
"@types/chai": "^4.3.16",
|
|
26
|
+
"@types/mocha": "^10.0.6",
|
|
27
|
+
"@types/node": "^20.14.2",
|
|
28
|
+
"chai": "^5.1.1",
|
|
29
|
+
"mocha": "^10.4.0",
|
|
30
|
+
"ts-node": "^10.9.2",
|
|
31
|
+
"typescript": "^5.4.5"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"axios": "^1.7.2",
|
|
35
|
+
"ethers": "^6.13.0"
|
|
36
|
+
}
|
|
37
|
+
}
|