@ael-protocol/sdk 0.1.0 → 0.2.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.
Files changed (49) hide show
  1. package/dist/abi/market.d.ts +394 -0
  2. package/dist/abi/market.d.ts.map +1 -0
  3. package/dist/abi/market.js +264 -0
  4. package/dist/abi/market.js.map +1 -0
  5. package/dist/agent-wallet.d.ts +79 -0
  6. package/dist/agent-wallet.d.ts.map +1 -0
  7. package/dist/agent-wallet.js +483 -0
  8. package/dist/agent-wallet.js.map +1 -0
  9. package/dist/hub.d.ts +125 -0
  10. package/dist/hub.d.ts.map +1 -0
  11. package/dist/hub.js +237 -0
  12. package/dist/hub.js.map +1 -0
  13. package/dist/index.d.ts +21 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +39 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/market.d.ts +73 -0
  18. package/dist/market.d.ts.map +1 -0
  19. package/dist/market.js +388 -0
  20. package/dist/market.js.map +1 -0
  21. package/dist/marketplace.d.ts +137 -0
  22. package/dist/marketplace.d.ts.map +1 -0
  23. package/dist/marketplace.js +479 -0
  24. package/dist/marketplace.js.map +1 -0
  25. package/dist/networks.d.ts +66 -0
  26. package/dist/networks.d.ts.map +1 -0
  27. package/dist/networks.js +106 -0
  28. package/dist/networks.js.map +1 -0
  29. package/dist/parser.d.ts +39 -0
  30. package/dist/parser.d.ts.map +1 -0
  31. package/dist/parser.js +134 -0
  32. package/dist/parser.js.map +1 -0
  33. package/dist/strategies/dca.d.ts +39 -0
  34. package/dist/strategies/dca.d.ts.map +1 -0
  35. package/dist/strategies/dca.js +124 -0
  36. package/dist/strategies/dca.js.map +1 -0
  37. package/dist/strategies/grid.d.ts +54 -0
  38. package/dist/strategies/grid.d.ts.map +1 -0
  39. package/dist/strategies/grid.js +161 -0
  40. package/dist/strategies/grid.js.map +1 -0
  41. package/dist/strategies/stop-loss.d.ts +55 -0
  42. package/dist/strategies/stop-loss.d.ts.map +1 -0
  43. package/dist/strategies/stop-loss.js +152 -0
  44. package/dist/strategies/stop-loss.js.map +1 -0
  45. package/dist/strategy.d.ts +72 -0
  46. package/dist/strategy.d.ts.map +1 -0
  47. package/dist/strategy.js +78 -0
  48. package/dist/strategy.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Network configurations for AEL Protocol
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.INTENT_TYPES = exports.EIP712_DOMAIN = exports.TOKEN_INFO = exports.NETWORKS = void 0;
7
+ exports.getNetwork = getNetwork;
8
+ exports.resolveToken = resolveToken;
9
+ exports.getTokenDecimals = getTokenDecimals;
10
+ exports.getTokenSymbol = getTokenSymbol;
11
+ const chains_1 = require("viem/chains");
12
+ exports.NETWORKS = {
13
+ base: {
14
+ chainId: 8453,
15
+ chain: chains_1.base,
16
+ name: 'Base Mainnet',
17
+ rpcUrl: 'https://mainnet.base.org',
18
+ contracts: {
19
+ router: '0x85977BD37d8100F81566A1c6815047f5557bCDCB',
20
+ solverRegistry: '0xd14D394631C32Ea35fFF8407157C6867bCc8E946',
21
+ feeVault: '0xF8E3646b03a83465D6DAE65edbF380C77feb5DE0',
22
+ market: '0xA114e245A4096B8E8821E4344D8FE7E1a8DEFC57',
23
+ },
24
+ tokens: {
25
+ ETH: '0x0000000000000000000000000000000000000000',
26
+ WETH: '0x4200000000000000000000000000000000000006',
27
+ USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
28
+ },
29
+ uniswap: {
30
+ quoterV2: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',
31
+ swapRouter: '0x2626664c2603336E57B271c5C0b26F421741e481',
32
+ factory: '0x33128a8fC17869897dcE68Ed026d694621f6FDfD',
33
+ },
34
+ explorer: 'https://basescan.org',
35
+ },
36
+ 'base-sepolia': {
37
+ chainId: 84532,
38
+ chain: chains_1.baseSepolia,
39
+ name: 'Base Sepolia',
40
+ rpcUrl: 'https://sepolia.base.org',
41
+ contracts: {
42
+ router: '0x0000000000000000000000000000000000000000', // TODO: Deploy to testnet
43
+ solverRegistry: '0x0000000000000000000000000000000000000000',
44
+ feeVault: '0x0000000000000000000000000000000000000000',
45
+ market: '0x0000000000000000000000000000000000000000',
46
+ },
47
+ tokens: {
48
+ ETH: '0x0000000000000000000000000000000000000000',
49
+ WETH: '0x4200000000000000000000000000000000000006',
50
+ USDC: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
51
+ },
52
+ uniswap: {
53
+ quoterV2: '0xC5290058841028F1614F3A6F0F5816cAd0df5E27',
54
+ swapRouter: '0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4',
55
+ factory: '0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24',
56
+ },
57
+ explorer: 'https://sepolia.basescan.org',
58
+ },
59
+ };
60
+ // Token info with decimals
61
+ exports.TOKEN_INFO = {
62
+ '0x0000000000000000000000000000000000000000': { symbol: 'ETH', decimals: 18 },
63
+ '0x4200000000000000000000000000000000000006': { symbol: 'WETH', decimals: 18 },
64
+ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913': { symbol: 'USDC', decimals: 6 },
65
+ '0x036CbD53842c5426634e7929541eC2318f3dCF7e': { symbol: 'USDC', decimals: 6 },
66
+ };
67
+ // EIP-712 Domain (must match contract)
68
+ exports.EIP712_DOMAIN = {
69
+ name: 'AEL Router',
70
+ version: '2',
71
+ };
72
+ exports.INTENT_TYPES = {
73
+ AgentIntent: [
74
+ { name: 'agent', type: 'address' },
75
+ { name: 'tokenIn', type: 'address' },
76
+ { name: 'tokenOut', type: 'address' },
77
+ { name: 'amountIn', type: 'uint256' },
78
+ { name: 'minAmountOut', type: 'uint256' },
79
+ { name: 'deadline', type: 'uint256' },
80
+ { name: 'nonce', type: 'uint256' },
81
+ ],
82
+ };
83
+ function getNetwork(name) {
84
+ const network = exports.NETWORKS[name];
85
+ if (!network) {
86
+ throw new Error(`Unknown network: ${name}. Available: ${Object.keys(exports.NETWORKS).join(', ')}`);
87
+ }
88
+ return network;
89
+ }
90
+ function resolveToken(symbol, network) {
91
+ const upper = symbol.toUpperCase();
92
+ const token = network.tokens[upper];
93
+ if (!token) {
94
+ throw new Error(`Unknown token: ${symbol}. Available: ${Object.keys(network.tokens).join(', ')}`);
95
+ }
96
+ return token;
97
+ }
98
+ function getTokenDecimals(address) {
99
+ const info = exports.TOKEN_INFO[address.toLowerCase()] || exports.TOKEN_INFO[address];
100
+ return info?.decimals ?? 18;
101
+ }
102
+ function getTokenSymbol(address) {
103
+ const info = exports.TOKEN_INFO[address.toLowerCase()] || exports.TOKEN_INFO[address];
104
+ return info?.symbol ?? 'UNKNOWN';
105
+ }
106
+ //# sourceMappingURL=networks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networks.js","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Natural language trade parser
3
+ * Supports formats:
4
+ * - '0.1 ETH -> USDC'
5
+ * - '100 USDC -> ETH'
6
+ * - 'sell 0.5 ETH buy USDC'
7
+ * - 'swap 1 ETH for USDC'
8
+ * - { sell: { token: 'ETH', amount: '0.1' }, buy: { token: 'USDC' }, maxSlippage: 0.5 }
9
+ */
10
+ export interface ParsedTrade {
11
+ sellToken: string;
12
+ sellAmount: string;
13
+ buyToken: string;
14
+ maxSlippage?: number;
15
+ }
16
+ export interface TradeObject {
17
+ sell: {
18
+ token: string;
19
+ amount: string;
20
+ };
21
+ buy: {
22
+ token: string;
23
+ };
24
+ maxSlippage?: number;
25
+ }
26
+ export type TradeInput = string | TradeObject;
27
+ /**
28
+ * Parse trade input into structured format
29
+ */
30
+ export declare function parseTrade(input: TradeInput): ParsedTrade;
31
+ /**
32
+ * Format trade for display
33
+ */
34
+ export declare function formatTrade(trade: ParsedTrade): string;
35
+ /**
36
+ * Validate parsed trade
37
+ */
38
+ export declare function validateTrade(trade: ParsedTrade): void;
39
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9C;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAKzD;AAgGD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAGtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAuBtD"}
package/dist/parser.js ADDED
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * Natural language trade parser
4
+ * Supports formats:
5
+ * - '0.1 ETH -> USDC'
6
+ * - '100 USDC -> ETH'
7
+ * - 'sell 0.5 ETH buy USDC'
8
+ * - 'swap 1 ETH for USDC'
9
+ * - { sell: { token: 'ETH', amount: '0.1' }, buy: { token: 'USDC' }, maxSlippage: 0.5 }
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.parseTrade = parseTrade;
13
+ exports.formatTrade = formatTrade;
14
+ exports.validateTrade = validateTrade;
15
+ /**
16
+ * Parse trade input into structured format
17
+ */
18
+ function parseTrade(input) {
19
+ if (typeof input === 'object') {
20
+ return parseTradeObject(input);
21
+ }
22
+ return parseTradeString(input);
23
+ }
24
+ function parseTradeObject(obj) {
25
+ if (!obj.sell?.token || !obj.sell?.amount || !obj.buy?.token) {
26
+ throw new Error('Invalid trade object. Required: { sell: { token, amount }, buy: { token } }');
27
+ }
28
+ return {
29
+ sellToken: normalizeToken(obj.sell.token),
30
+ sellAmount: obj.sell.amount.toString(),
31
+ buyToken: normalizeToken(obj.buy.token),
32
+ maxSlippage: obj.maxSlippage,
33
+ };
34
+ }
35
+ function parseTradeString(input) {
36
+ const normalized = input.trim().toLowerCase();
37
+ // Pattern 1: '0.1 ETH -> USDC' or '0.1 ETH → USDC'
38
+ const arrowMatch = normalized.match(/^([\d.]+)\s*(\w+)\s*(?:->|→|to)\s*(\w+)$/i);
39
+ if (arrowMatch) {
40
+ return {
41
+ sellToken: normalizeToken(arrowMatch[2]),
42
+ sellAmount: arrowMatch[1],
43
+ buyToken: normalizeToken(arrowMatch[3]),
44
+ };
45
+ }
46
+ // Pattern 2: 'sell 0.5 ETH buy USDC'
47
+ const sellBuyMatch = normalized.match(/^sell\s+([\d.]+)\s*(\w+)\s+buy\s+(\w+)$/i);
48
+ if (sellBuyMatch) {
49
+ return {
50
+ sellToken: normalizeToken(sellBuyMatch[2]),
51
+ sellAmount: sellBuyMatch[1],
52
+ buyToken: normalizeToken(sellBuyMatch[3]),
53
+ };
54
+ }
55
+ // Pattern 3: 'swap 1 ETH for USDC'
56
+ const swapMatch = normalized.match(/^swap\s+([\d.]+)\s*(\w+)\s+(?:for|to)\s+(\w+)$/i);
57
+ if (swapMatch) {
58
+ return {
59
+ sellToken: normalizeToken(swapMatch[2]),
60
+ sellAmount: swapMatch[1],
61
+ buyToken: normalizeToken(swapMatch[3]),
62
+ };
63
+ }
64
+ // Pattern 4: 'buy USDC with 0.1 ETH'
65
+ const buyWithMatch = normalized.match(/^buy\s+(\w+)\s+with\s+([\d.]+)\s*(\w+)$/i);
66
+ if (buyWithMatch) {
67
+ return {
68
+ sellToken: normalizeToken(buyWithMatch[3]),
69
+ sellAmount: buyWithMatch[2],
70
+ buyToken: normalizeToken(buyWithMatch[1]),
71
+ };
72
+ }
73
+ // Pattern 5: 'convert 100 USDC to ETH'
74
+ const convertMatch = normalized.match(/^convert\s+([\d.]+)\s*(\w+)\s+to\s+(\w+)$/i);
75
+ if (convertMatch) {
76
+ return {
77
+ sellToken: normalizeToken(convertMatch[2]),
78
+ sellAmount: convertMatch[1],
79
+ buyToken: normalizeToken(convertMatch[3]),
80
+ };
81
+ }
82
+ throw new Error(`Cannot parse trade: "${input}". ` +
83
+ `Supported formats: "0.1 ETH -> USDC", "sell 0.5 ETH buy USDC", "swap 1 ETH for USDC"`);
84
+ }
85
+ /**
86
+ * Normalize token symbol
87
+ */
88
+ function normalizeToken(token) {
89
+ const upper = token.toUpperCase().trim();
90
+ // Common aliases
91
+ const aliases = {
92
+ ETHER: 'ETH',
93
+ ETHEREUM: 'ETH',
94
+ WRAPPED: 'WETH',
95
+ 'WRAPPED ETH': 'WETH',
96
+ 'WRAPPED ETHER': 'WETH',
97
+ USD: 'USDC',
98
+ 'USD COIN': 'USDC',
99
+ DOLLAR: 'USDC',
100
+ DOLLARS: 'USDC',
101
+ };
102
+ return aliases[upper] || upper;
103
+ }
104
+ /**
105
+ * Format trade for display
106
+ */
107
+ function formatTrade(trade) {
108
+ const slippage = trade.maxSlippage ? ` (${trade.maxSlippage}% slippage)` : '';
109
+ return `${trade.sellAmount} ${trade.sellToken} -> ${trade.buyToken}${slippage}`;
110
+ }
111
+ /**
112
+ * Validate parsed trade
113
+ */
114
+ function validateTrade(trade) {
115
+ const amount = parseFloat(trade.sellAmount);
116
+ if (isNaN(amount) || amount <= 0) {
117
+ throw new Error(`Invalid amount: ${trade.sellAmount}`);
118
+ }
119
+ if (!trade.sellToken) {
120
+ throw new Error('Sell token is required');
121
+ }
122
+ if (!trade.buyToken) {
123
+ throw new Error('Buy token is required');
124
+ }
125
+ if (trade.sellToken === trade.buyToken) {
126
+ throw new Error('Sell and buy tokens must be different');
127
+ }
128
+ if (trade.maxSlippage !== undefined) {
129
+ if (trade.maxSlippage < 0 || trade.maxSlippage > 50) {
130
+ throw new Error('Slippage must be between 0 and 50%');
131
+ }
132
+ }
133
+ }
134
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * DCA (Dollar Cost Averaging) Strategy
3
+ * Executes trades at regular intervals to average out price volatility
4
+ */
5
+ import { Strategy, StrategyConfig, StrategyStatus } from '../strategy';
6
+ import type { AgentWallet } from '../agent-wallet';
7
+ import type { MarketFeed } from '../market';
8
+ export interface DCAConfig extends StrategyConfig {
9
+ side: 'buy' | 'sell';
10
+ amountPerTrade: string;
11
+ interval: string | number;
12
+ totalBudget: string;
13
+ }
14
+ export interface DCAStatus extends StrategyStatus {
15
+ totalSpent: string;
16
+ totalReceived: string;
17
+ avgPrice: number;
18
+ budgetRemaining: string;
19
+ nextTradeAt?: number;
20
+ }
21
+ export declare class DCAStrategy extends Strategy<DCAConfig, DCAStatus> {
22
+ private wallet;
23
+ private marketFeed;
24
+ private tradeInterval?;
25
+ private totalSpent;
26
+ private totalReceived;
27
+ private spentToken;
28
+ private receivedToken;
29
+ private budget;
30
+ private amountPerTrade;
31
+ private nextTradeAt?;
32
+ constructor(wallet: AgentWallet, marketFeed: MarketFeed, config: DCAConfig);
33
+ start(): void;
34
+ stop(): void;
35
+ status(): DCAStatus;
36
+ private executeTrade;
37
+ private complete;
38
+ }
39
+ //# sourceMappingURL=dca.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dca.d.ts","sourceRoot":"","sources":["../../src/strategies/dca.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAY,SAAQ,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAiB;IAEvC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;IA+B1E,KAAK,IAAI,IAAI;IAqBJ,IAAI,IAAI,IAAI;IASrB,MAAM,IAAI,SAAS;YAiBL,YAAY;IAwC1B,OAAO,CAAC,QAAQ;CAIjB"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * DCA (Dollar Cost Averaging) Strategy
4
+ * Executes trades at regular intervals to average out price volatility
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DCAStrategy = void 0;
8
+ const strategy_1 = require("../strategy");
9
+ class DCAStrategy extends strategy_1.Strategy {
10
+ wallet;
11
+ marketFeed;
12
+ tradeInterval;
13
+ totalSpent = 0;
14
+ totalReceived = 0;
15
+ spentToken;
16
+ receivedToken;
17
+ budget;
18
+ amountPerTrade;
19
+ nextTradeAt;
20
+ constructor(wallet, marketFeed, config) {
21
+ super(config);
22
+ this.wallet = wallet;
23
+ this.marketFeed = marketFeed;
24
+ // Parse amounts
25
+ const { amount: budgetAmount, token: budgetToken } = this.parseAmount(config.totalBudget);
26
+ const { amount: tradeAmount, token: tradeToken } = this.parseAmount(config.amountPerTrade);
27
+ this.budget = parseFloat(budgetAmount);
28
+ this.amountPerTrade = parseFloat(tradeAmount);
29
+ // Determine spent/received tokens based on side and pair
30
+ const [baseToken, quoteToken] = config.pair.split(/[\/\-]/).map(t => t.toUpperCase());
31
+ if (config.side === 'buy') {
32
+ // Buying base token with quote token
33
+ this.spentToken = quoteToken;
34
+ this.receivedToken = baseToken;
35
+ }
36
+ else {
37
+ // Selling base token for quote token
38
+ this.spentToken = baseToken;
39
+ this.receivedToken = quoteToken;
40
+ }
41
+ // Validate tokens match
42
+ if (budgetToken !== this.spentToken || tradeToken !== this.spentToken) {
43
+ throw new Error(`Budget and trade amounts must be in ${this.spentToken}`);
44
+ }
45
+ }
46
+ start() {
47
+ if (this._running)
48
+ return;
49
+ this._running = true;
50
+ this._startedAt = Date.now();
51
+ const intervalMs = this.parsePeriodMs(this.config.interval);
52
+ // Execute first trade immediately
53
+ this.executeTrade();
54
+ // Schedule subsequent trades
55
+ this.tradeInterval = setInterval(() => {
56
+ if (this._running) {
57
+ this.executeTrade();
58
+ }
59
+ }, intervalMs);
60
+ this.nextTradeAt = Date.now() + intervalMs;
61
+ }
62
+ stop() {
63
+ super.stop();
64
+ if (this.tradeInterval) {
65
+ clearInterval(this.tradeInterval);
66
+ this.tradeInterval = undefined;
67
+ }
68
+ this.nextTradeAt = undefined;
69
+ }
70
+ status() {
71
+ const avgPrice = this.totalReceived > 0
72
+ ? this.totalSpent / this.totalReceived
73
+ : 0;
74
+ return {
75
+ running: this._running,
76
+ startedAt: this._startedAt,
77
+ tradesCompleted: this._tradesCompleted,
78
+ totalSpent: `${this.totalSpent.toFixed(6)} ${this.spentToken}`,
79
+ totalReceived: `${this.totalReceived.toFixed(6)} ${this.receivedToken}`,
80
+ avgPrice: parseFloat(avgPrice.toFixed(6)),
81
+ budgetRemaining: `${(this.budget - this.totalSpent).toFixed(6)} ${this.spentToken}`,
82
+ nextTradeAt: this.nextTradeAt,
83
+ };
84
+ }
85
+ async executeTrade() {
86
+ try {
87
+ // Check if we have budget remaining
88
+ const remaining = this.budget - this.totalSpent;
89
+ if (remaining <= 0) {
90
+ this.complete();
91
+ return;
92
+ }
93
+ // Determine trade amount (use remaining if less than amountPerTrade)
94
+ const tradeAmount = Math.min(this.amountPerTrade, remaining);
95
+ // Build trade string
96
+ const tradeStr = this.config.side === 'buy'
97
+ ? `${tradeAmount} ${this.spentToken} -> ${this.receivedToken}`
98
+ : `${tradeAmount} ${this.spentToken} -> ${this.receivedToken}`;
99
+ // Execute trade
100
+ const result = await this.wallet.trade(tradeStr);
101
+ // Update totals
102
+ this.totalSpent += parseFloat(result.amountIn);
103
+ this.totalReceived += parseFloat(result.amountOut);
104
+ this._tradesCompleted++;
105
+ // Update next trade time
106
+ const intervalMs = this.parsePeriodMs(this.config.interval);
107
+ this.nextTradeAt = Date.now() + intervalMs;
108
+ this.emit('trade', result);
109
+ // Check if budget exhausted
110
+ if (this.totalSpent >= this.budget) {
111
+ this.complete();
112
+ }
113
+ }
114
+ catch (error) {
115
+ this.emit('error', error instanceof Error ? error : new Error(String(error)));
116
+ }
117
+ }
118
+ complete() {
119
+ this.stop();
120
+ this.emit('complete', this.status());
121
+ }
122
+ }
123
+ exports.DCAStrategy = DCAStrategy;
124
+ //# sourceMappingURL=dca.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dca.js","sourceRoot":"","sources":["../../src/strategies/dca.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Grid Trading Strategy
3
+ * Places buy orders below current price and sell orders above
4
+ * Profits from price oscillation within a range
5
+ */
6
+ import { Strategy, StrategyConfig, StrategyStatus } from '../strategy';
7
+ import type { AgentWallet } from '../agent-wallet';
8
+ import type { MarketFeed } from '../market';
9
+ export interface GridConfig extends StrategyConfig {
10
+ upperPrice: number;
11
+ lowerPrice: number;
12
+ gridCount: number;
13
+ amountPerGrid: string;
14
+ }
15
+ export interface GridLevel {
16
+ price: number;
17
+ status: 'open' | 'filled-buy' | 'filled-sell';
18
+ lastTradeAt?: number;
19
+ }
20
+ export interface GridStatus extends StrategyStatus {
21
+ buys: number;
22
+ sells: number;
23
+ profit: string;
24
+ currentPrice?: number;
25
+ levels: GridLevel[];
26
+ }
27
+ export declare class GridStrategy extends Strategy<GridConfig, GridStatus> {
28
+ private wallet;
29
+ private marketFeed;
30
+ private levels;
31
+ private buys;
32
+ private sells;
33
+ private profit;
34
+ private currentPrice?;
35
+ private lastPrice?;
36
+ private baseToken;
37
+ private quoteToken;
38
+ private amountPerGrid;
39
+ private amountToken;
40
+ constructor(wallet: AgentWallet, marketFeed: MarketFeed, config: GridConfig);
41
+ private initializeLevels;
42
+ start(): void;
43
+ stop(): void;
44
+ status(): GridStatus;
45
+ private onPriceUpdate;
46
+ private checkLevelCrossings;
47
+ private executeBuy;
48
+ private executeSell;
49
+ /**
50
+ * Reset all levels to open state
51
+ */
52
+ reset(): void;
53
+ }
54
+ //# sourceMappingURL=grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/strategies/grid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,aAAa,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,qBAAa,YAAa,SAAQ,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChE,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU;IAmB3E,OAAO,CAAC,gBAAgB;IAaxB,KAAK,IAAI,IAAI;IAcJ,IAAI,IAAI,IAAI;IAKrB,MAAM,IAAI,UAAU;YAaN,aAAa;YAuBb,mBAAmB;YAiBnB,UAAU;YAuBV,WAAW;IAyBzB;;OAEG;IACH,KAAK,IAAI,IAAI;CAOd"}