@123456btc/123456btc-cli 1.0.1 → 1.0.2

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 (130) hide show
  1. package/dist/api/client.d.ts +4 -0
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +74 -16
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/provider.d.ts +163 -0
  6. package/dist/api/provider.d.ts.map +1 -0
  7. package/dist/api/provider.js +123 -0
  8. package/dist/api/provider.js.map +1 -0
  9. package/dist/api/signal-crypto.d.ts +17 -0
  10. package/dist/api/signal-crypto.d.ts.map +1 -0
  11. package/dist/api/signal-crypto.js +48 -0
  12. package/dist/api/signal-crypto.js.map +1 -0
  13. package/dist/api/signals.d.ts +47 -0
  14. package/dist/api/signals.d.ts.map +1 -0
  15. package/dist/api/signals.js +34 -0
  16. package/dist/api/signals.js.map +1 -0
  17. package/dist/api/strategy-stream.d.ts +59 -0
  18. package/dist/api/strategy-stream.d.ts.map +1 -0
  19. package/dist/api/strategy-stream.js +136 -0
  20. package/dist/api/strategy-stream.js.map +1 -0
  21. package/dist/api/strategy.d.ts +66 -20
  22. package/dist/api/strategy.d.ts.map +1 -1
  23. package/dist/api/strategy.js +15 -18
  24. package/dist/api/strategy.js.map +1 -1
  25. package/dist/api/token-manager.d.ts +37 -0
  26. package/dist/api/token-manager.d.ts.map +1 -0
  27. package/dist/api/token-manager.js +191 -0
  28. package/dist/api/token-manager.js.map +1 -0
  29. package/dist/api/wallet.d.ts +38 -0
  30. package/dist/api/wallet.d.ts.map +1 -0
  31. package/dist/api/wallet.js +23 -0
  32. package/dist/api/wallet.js.map +1 -0
  33. package/dist/cli.js +12 -2
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/auth.d.ts.map +1 -1
  36. package/dist/commands/auth.js +149 -3
  37. package/dist/commands/auth.js.map +1 -1
  38. package/dist/commands/health.d.ts +3 -0
  39. package/dist/commands/health.d.ts.map +1 -0
  40. package/dist/commands/health.js +77 -0
  41. package/dist/commands/health.js.map +1 -0
  42. package/dist/commands/install.d.ts.map +1 -1
  43. package/dist/commands/install.js +127 -24
  44. package/dist/commands/install.js.map +1 -1
  45. package/dist/commands/provider.d.ts +3 -0
  46. package/dist/commands/provider.d.ts.map +1 -0
  47. package/dist/commands/provider.js +371 -0
  48. package/dist/commands/provider.js.map +1 -0
  49. package/dist/commands/signals.d.ts +3 -0
  50. package/dist/commands/signals.d.ts.map +1 -0
  51. package/dist/commands/signals.js +104 -0
  52. package/dist/commands/signals.js.map +1 -0
  53. package/dist/commands/strategy.d.ts.map +1 -1
  54. package/dist/commands/strategy.js +147 -59
  55. package/dist/commands/strategy.js.map +1 -1
  56. package/dist/commands/tier.d.ts +3 -0
  57. package/dist/commands/tier.d.ts.map +1 -0
  58. package/dist/commands/tier.js +105 -0
  59. package/dist/commands/tier.js.map +1 -0
  60. package/dist/commands/vault.d.ts +7 -0
  61. package/dist/commands/vault.d.ts.map +1 -0
  62. package/dist/commands/vault.js +377 -0
  63. package/dist/commands/vault.js.map +1 -0
  64. package/dist/commands/wallet.d.ts +3 -0
  65. package/dist/commands/wallet.d.ts.map +1 -0
  66. package/dist/commands/wallet.js +74 -0
  67. package/dist/commands/wallet.js.map +1 -0
  68. package/dist/config.d.ts +1 -0
  69. package/dist/config.d.ts.map +1 -1
  70. package/dist/config.js +16 -2
  71. package/dist/config.js.map +1 -1
  72. package/dist/index.d.ts +12 -4
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +22 -6
  75. package/dist/index.js.map +1 -1
  76. package/dist/providers/executor.d.ts +55 -20
  77. package/dist/providers/executor.d.ts.map +1 -1
  78. package/dist/providers/executor.js +260 -58
  79. package/dist/providers/executor.js.map +1 -1
  80. package/dist/providers/risk.d.ts +17 -0
  81. package/dist/providers/risk.d.ts.map +1 -0
  82. package/dist/providers/risk.js +67 -0
  83. package/dist/providers/risk.js.map +1 -0
  84. package/dist/providers/state.d.ts +30 -0
  85. package/dist/providers/state.d.ts.map +1 -0
  86. package/dist/providers/state.js +190 -0
  87. package/dist/providers/state.js.map +1 -0
  88. package/dist/types/strategy.d.ts +65 -1
  89. package/dist/types/strategy.d.ts.map +1 -1
  90. package/dist/types/strategy.js +1 -0
  91. package/dist/types/strategy.js.map +1 -1
  92. package/dist/utils/auth.d.ts +1 -0
  93. package/dist/utils/auth.d.ts.map +1 -1
  94. package/dist/utils/device.d.ts +13 -0
  95. package/dist/utils/device.d.ts.map +1 -0
  96. package/dist/utils/device.js +104 -0
  97. package/dist/utils/device.js.map +1 -0
  98. package/dist/vault/backends/file.d.ts +15 -0
  99. package/dist/vault/backends/file.d.ts.map +1 -0
  100. package/dist/vault/backends/file.js +39 -0
  101. package/dist/vault/backends/file.js.map +1 -0
  102. package/dist/vault/backends/os-keychain.d.ts +13 -0
  103. package/dist/vault/backends/os-keychain.d.ts.map +1 -0
  104. package/dist/vault/backends/os-keychain.js +60 -0
  105. package/dist/vault/backends/os-keychain.js.map +1 -0
  106. package/dist/vault/backends/os-secret.d.ts +13 -0
  107. package/dist/vault/backends/os-secret.d.ts.map +1 -0
  108. package/dist/vault/backends/os-secret.js +57 -0
  109. package/dist/vault/backends/os-secret.js.map +1 -0
  110. package/dist/vault/backends/os-win-cred.d.ts +13 -0
  111. package/dist/vault/backends/os-win-cred.d.ts.map +1 -0
  112. package/dist/vault/backends/os-win-cred.js +76 -0
  113. package/dist/vault/backends/os-win-cred.js.map +1 -0
  114. package/dist/vault/crypto.d.ts +49 -0
  115. package/dist/vault/crypto.d.ts.map +1 -0
  116. package/dist/vault/crypto.js +122 -0
  117. package/dist/vault/crypto.js.map +1 -0
  118. package/dist/vault/index.d.ts +88 -0
  119. package/dist/vault/index.d.ts.map +1 -0
  120. package/dist/vault/index.js +276 -0
  121. package/dist/vault/index.js.map +1 -0
  122. package/dist/vault/storage.d.ts +14 -0
  123. package/dist/vault/storage.d.ts.map +1 -0
  124. package/dist/vault/storage.js +68 -0
  125. package/dist/vault/storage.js.map +1 -0
  126. package/dist/vault/types.d.ts +41 -0
  127. package/dist/vault/types.d.ts.map +1 -0
  128. package/dist/vault/types.js +6 -0
  129. package/dist/vault/types.js.map +1 -0
  130. package/package.json +3 -1
@@ -1,36 +1,71 @@
1
- import { StrategyResult, ExecutorContext } from '../types/strategy';
2
1
  /**
3
- * Local strategy executor
4
- * Executes strategies in isolated environment
2
+ * StrategyExecutor Core Execution Engine
3
+ * Executes strategies in isolated environment with retry logic and state tracking.
5
4
  */
5
+ import type { ExecutorContext, StrategyResult, TrackedStrategy, RiskLimits } from '../types/strategy';
6
+ import { OrderStateManager } from './state';
7
+ import { RiskGuard } from './risk';
6
8
  export declare class StrategyExecutor {
7
- private context;
8
- constructor(context: ExecutorContext);
9
+ private state;
10
+ private risk;
11
+ private solana;
12
+ private retry;
13
+ private packagesDir;
14
+ constructor(options?: {
15
+ riskLimits?: RiskLimits;
16
+ packagesDir?: string;
17
+ });
9
18
  /**
10
- * Execute strategy
19
+ * Execute a strategy with full lifecycle tracking
11
20
  */
12
- execute(): Promise<StrategyResult>;
21
+ execute(context: ExecutorContext): Promise<StrategyResult>;
13
22
  /**
14
- * Update context
23
+ * Load strategy package and execute
15
24
  */
16
- updateContext(context: Partial<ExecutorContext>): void;
17
- }
18
- /**
19
- * Strategy execution manager
20
- */
21
- export declare class ExecutionManager {
22
- private executing;
25
+ private loadAndExecuteStrategy;
23
26
  /**
24
- * Start execution
27
+ * Estimate gas usage for a strategy
25
28
  */
26
- execute(context: ExecutorContext): Promise<StrategyResult>;
29
+ private estimateGasUsage;
27
30
  /**
28
- * Check if executing
31
+ * Get tracked strategy
29
32
  */
30
- isExecuting(dispatchId: string): boolean;
33
+ getStrategy(dispatchId: string): TrackedStrategy | undefined;
31
34
  /**
32
35
  * List executing strategies
33
36
  */
34
- listExecuting(): string[];
37
+ listExecuting(): TrackedStrategy[];
38
+ /**
39
+ * Cancel a running strategy
40
+ */
41
+ cancel(dispatchId: string): Promise<boolean>;
42
+ /**
43
+ * Sync strategy status from external source
44
+ */
45
+ syncStatus(dispatchId: string): Promise<TrackedStrategy | null>;
46
+ /**
47
+ * Get state manager (for ExecutionManager)
48
+ */
49
+ getState(): OrderStateManager;
50
+ /**
51
+ * Get risk guard (for ExecutionManager)
52
+ */
53
+ getRisk(): RiskGuard;
54
+ }
55
+ /**
56
+ * Strategy execution manager (singleton-like)
57
+ * Manages multiple concurrent strategy executions
58
+ */
59
+ export declare class ExecutionManager {
60
+ private executor;
61
+ private executing;
62
+ constructor(options?: {
63
+ riskLimits?: RiskLimits;
64
+ });
65
+ execute(context: ExecutorContext): Promise<StrategyResult>;
66
+ cancel(dispatchId: string): Promise<boolean>;
67
+ getStrategy(dispatchId: string): TrackedStrategy | undefined;
68
+ listExecuting(): TrackedStrategy[];
69
+ purgeOld(maxAgeMs?: number): number;
35
70
  }
36
71
  //# sourceMappingURL=executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/providers/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpF;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAqCxC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;CAGvD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA4C;IAE7D;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAYhE;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;CAG1B"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/providers/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAYnC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAAS;gBAG1B,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;KACjB;IAeR;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAmFhE;;OAEG;YACW,sBAAsB;IAwEpC;;OAEG;YACW,gBAAgB;IAM9B;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI5D;;OAEG;IACH,aAAa,IAAI,eAAe,EAAE;IAIlC;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAclD;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IASrE;;OAEG;IACH,QAAQ,IAAI,iBAAiB;IAI7B;;OAEG;IACH,OAAO,IAAI,SAAS;CAGrB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,SAAS,CAA0C;gBAE/C,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE;IAI3C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAM1D,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI5D,aAAa,IAAI,eAAe,EAAE;IAIlC,QAAQ,CAAC,QAAQ,GAAE,MAA4B,GAAG,MAAM;CAGzD"}
@@ -1,90 +1,292 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExecutionManager = exports.StrategyExecutor = void 0;
4
2
  /**
5
- * Local strategy executor
6
- * Executes strategies in isolated environment
3
+ * StrategyExecutor Core Execution Engine
4
+ * Executes strategies in isolated environment with retry logic and state tracking.
7
5
  */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ExecutionManager = exports.StrategyExecutor = void 0;
41
+ const child_process_1 = require("child_process");
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const util_1 = require("util");
45
+ const state_1 = require("./state");
46
+ const risk_1 = require("./risk");
47
+ const solana_1 = require("./solana");
48
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
49
+ const DEFAULT_RETRY = {
50
+ maxAttempts: 3,
51
+ baseDelayMs: 500,
52
+ maxDelayMs: 10000,
53
+ backoffFactor: 2,
54
+ };
8
55
  class StrategyExecutor {
9
- context;
10
- constructor(context) {
11
- this.context = context;
56
+ state;
57
+ risk;
58
+ solana;
59
+ retry;
60
+ packagesDir;
61
+ constructor(options = {}) {
62
+ this.state = new state_1.OrderStateManager();
63
+ this.risk = new risk_1.RiskGuard(options.riskLimits ?? {});
64
+ this.solana = new solana_1.SolanaProvider();
65
+ this.retry = { ...DEFAULT_RETRY };
66
+ this.packagesDir =
67
+ options.packagesDir ??
68
+ path.join(process.env.HOME || process.env.USERPROFILE || '.', '.123456btc-cli', 'packages');
12
69
  }
13
70
  /**
14
- * Execute strategy
71
+ * Execute a strategy with full lifecycle tracking
15
72
  */
16
- async execute() {
73
+ async execute(context) {
17
74
  const startTime = Date.now();
18
- try {
19
- // In real implementation, this would:
20
- // 1. Load the strategy package
21
- // 2. Execute the strategy with given config
22
- // 3. Track gas usage
23
- // 4. Return result
24
- console.log(`Executing strategy: ${this.context.strategyId}`);
25
- console.log(`Dispatch ID: ${this.context.dispatchId}`);
26
- console.log(`Config: ${JSON.stringify(this.context.config)}`);
27
- // Simulated result
28
- const result = {
29
- success: true,
30
- data: {
31
- message: 'Strategy executed successfully',
32
- strategyId: this.context.strategyId,
33
- dispatchId: this.context.dispatchId,
34
- },
35
- gasUsed: Math.floor(Math.random() * 1000),
36
- executionTime: Date.now() - startTime,
37
- };
38
- return result;
39
- }
40
- catch (error) {
75
+ const clientOrderId = `order_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;
76
+ // 1. Register in state manager
77
+ const tracked = this.state.register(clientOrderId, context.strategyId, context);
78
+ // 2. Risk check
79
+ const riskResult = await this.risk.check(context, context.gasBudget);
80
+ if (!riskResult.passed) {
81
+ this.state.markError(context.dispatchId, `Risk block: ${riskResult.message}`);
41
82
  return {
42
83
  success: false,
43
- error: error instanceof Error ? error.message : 'Unknown error',
84
+ error: riskResult.message,
44
85
  gasUsed: 0,
45
86
  executionTime: Date.now() - startTime,
46
87
  };
47
88
  }
89
+ // 3. Execute with retry
90
+ let lastError;
91
+ for (let attempt = 0; attempt < this.retry.maxAttempts; attempt++) {
92
+ if (attempt > 0) {
93
+ const delay = Math.min(this.retry.baseDelayMs * Math.pow(this.retry.backoffFactor, attempt - 1), this.retry.maxDelayMs);
94
+ await sleep(delay);
95
+ this.state.incrementRetry(context.dispatchId);
96
+ }
97
+ try {
98
+ // Load and execute strategy
99
+ const result = await this.loadAndExecuteStrategy(context);
100
+ // Track gas usage via Solana
101
+ const gasUsed = await this.estimateGasUsage(context);
102
+ this.state.setResult(context.dispatchId, result.data);
103
+ this.risk.recordStrategyClosed();
104
+ return {
105
+ success: true,
106
+ data: result.data,
107
+ gasUsed,
108
+ executionTime: Date.now() - startTime,
109
+ };
110
+ }
111
+ catch (err) {
112
+ lastError = err;
113
+ const msg = lastError.message.toLowerCase();
114
+ // Retry on transient errors
115
+ const shouldRetry = msg.includes('timeout') ||
116
+ msg.includes('network') ||
117
+ msg.includes('rate limit');
118
+ if (!shouldRetry) {
119
+ this.state.markError(context.dispatchId, lastError.message);
120
+ return {
121
+ success: false,
122
+ error: lastError.message,
123
+ gasUsed: 0,
124
+ executionTime: Date.now() - startTime,
125
+ };
126
+ }
127
+ }
128
+ }
129
+ // All retries exhausted
130
+ this.state.markError(context.dispatchId, lastError?.message ?? 'Max retries exceeded');
131
+ return {
132
+ success: false,
133
+ error: lastError?.message ?? 'Order submission failed after max retries',
134
+ gasUsed: 0,
135
+ executionTime: Date.now() - startTime,
136
+ };
48
137
  }
49
138
  /**
50
- * Update context
139
+ * Load strategy package and execute
51
140
  */
52
- updateContext(context) {
53
- this.context = { ...this.context, ...context };
54
- }
55
- }
56
- exports.StrategyExecutor = StrategyExecutor;
57
- /**
58
- * Strategy execution manager
59
- */
60
- class ExecutionManager {
61
- executing = new Map();
62
- /**
63
- * Start execution
64
- */
65
- async execute(context) {
66
- const executor = new StrategyExecutor(context);
67
- this.executing.set(context.dispatchId, executor);
141
+ async loadAndExecuteStrategy(context) {
142
+ const packageDir = path.join(this.packagesDir, context.strategyId);
143
+ if (!fs.existsSync(packageDir)) {
144
+ throw new Error(`Strategy package not found: ${context.strategyId}`);
145
+ }
146
+ const manifestPath = path.join(packageDir, 'manifest.json');
147
+ if (!fs.existsSync(manifestPath)) {
148
+ throw new Error(`Invalid strategy package: no manifest.json`);
149
+ }
150
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
151
+ if (!manifest.aiCompatible && !manifest.llmCompatible) {
152
+ throw new Error(`Strategy not AI/LLM compatible: ${context.strategyId}`);
153
+ }
154
+ const entryPoint = path.join(packageDir, manifest.entryPoint);
155
+ if (!fs.existsSync(entryPoint)) {
156
+ throw new Error(`Entry point not found: ${entryPoint}`);
157
+ }
158
+ // Execute the strategy
159
+ console.log(`Executing strategy: ${context.strategyId}`);
160
+ console.log(`Dispatch ID: ${context.dispatchId}`);
161
+ console.log(`Config: ${JSON.stringify(context.config.params)}`);
68
162
  try {
69
- const result = await executor.execute();
70
- return result;
163
+ const { stdout, stderr } = await execAsync(`node ${entryPoint}`, {
164
+ cwd: packageDir,
165
+ env: {
166
+ ...process.env,
167
+ STRATEGY_ID: context.strategyId,
168
+ DISPATCH_ID: context.dispatchId,
169
+ CONFIG: JSON.stringify(context.config.params),
170
+ API_KEY: context.apiKey,
171
+ },
172
+ timeout: 300000, // 5 min timeout
173
+ });
174
+ if (stderr) {
175
+ console.warn(`Strategy stderr: ${stderr}`);
176
+ }
177
+ // Parse result from stdout
178
+ try {
179
+ const result = JSON.parse(stdout);
180
+ return {
181
+ success: true,
182
+ data: result,
183
+ };
184
+ }
185
+ catch {
186
+ return {
187
+ success: true,
188
+ data: { output: stdout },
189
+ };
190
+ }
71
191
  }
72
- finally {
73
- this.executing.delete(context.dispatchId);
192
+ catch (err) {
193
+ const error = err;
194
+ if (error.code === 124) {
195
+ throw new Error('Strategy execution timeout');
196
+ }
197
+ throw new Error(`Strategy execution failed: ${error.message}`);
74
198
  }
75
199
  }
76
200
  /**
77
- * Check if executing
201
+ * Estimate gas usage for a strategy
202
+ */
203
+ async estimateGasUsage(context) {
204
+ // In real implementation, track actual gas via Solana provider
205
+ // For now, return a simulated value
206
+ return Math.floor(Math.random() * 1000) + 100;
207
+ }
208
+ /**
209
+ * Get tracked strategy
78
210
  */
79
- isExecuting(dispatchId) {
80
- return this.executing.has(dispatchId);
211
+ getStrategy(dispatchId) {
212
+ return this.state.get(dispatchId);
81
213
  }
82
214
  /**
83
215
  * List executing strategies
84
216
  */
85
217
  listExecuting() {
86
- return Array.from(this.executing.keys());
218
+ return this.state.list({ status: 'open' });
219
+ }
220
+ /**
221
+ * Cancel a running strategy
222
+ */
223
+ async cancel(dispatchId) {
224
+ const strategy = this.state.get(dispatchId);
225
+ if (!strategy)
226
+ return false;
227
+ if (strategy.status === 'pending' || strategy.status === 'open') {
228
+ this.state.transition(dispatchId, 'cancel_request');
229
+ this.state.transition(dispatchId, 'cancelled');
230
+ this.risk.recordStrategyClosed();
231
+ return true;
232
+ }
233
+ return false;
234
+ }
235
+ /**
236
+ * Sync strategy status from external source
237
+ */
238
+ async syncStatus(dispatchId) {
239
+ const strategy = this.state.get(dispatchId);
240
+ if (!strategy)
241
+ return null;
242
+ // In real implementation, check with API for latest status
243
+ // For now, return current state
244
+ return strategy;
245
+ }
246
+ /**
247
+ * Get state manager (for ExecutionManager)
248
+ */
249
+ getState() {
250
+ return this.state;
251
+ }
252
+ /**
253
+ * Get risk guard (for ExecutionManager)
254
+ */
255
+ getRisk() {
256
+ return this.risk;
257
+ }
258
+ }
259
+ exports.StrategyExecutor = StrategyExecutor;
260
+ /**
261
+ * Strategy execution manager (singleton-like)
262
+ * Manages multiple concurrent strategy executions
263
+ */
264
+ class ExecutionManager {
265
+ executor;
266
+ executing = new Map();
267
+ constructor(options) {
268
+ this.executor = new StrategyExecutor(options);
269
+ }
270
+ async execute(context) {
271
+ this.executor.getRisk().recordStrategyOpened();
272
+ const result = await this.executor.execute(context);
273
+ return result;
274
+ }
275
+ async cancel(dispatchId) {
276
+ return this.executor.cancel(dispatchId);
277
+ }
278
+ getStrategy(dispatchId) {
279
+ return this.executor.getStrategy(dispatchId);
280
+ }
281
+ listExecuting() {
282
+ return this.executor.listExecuting();
283
+ }
284
+ purgeOld(maxAgeMs = 24 * 60 * 60 * 1000) {
285
+ return this.executor.getState().purge(maxAgeMs);
87
286
  }
88
287
  }
89
288
  exports.ExecutionManager = ExecutionManager;
289
+ function sleep(ms) {
290
+ return new Promise((r) => setTimeout(r, ms));
291
+ }
90
292
  //# sourceMappingURL=executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/providers/executor.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,gBAAgB;IACnB,OAAO,CAAkB;IAEjC,YAAY,OAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,sCAAsC;YACtC,+BAA+B;YAC/B,4CAA4C;YAC5C,qBAAqB;YACrB,mBAAmB;YAEnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAE9D,mBAAmB;YACnB,MAAM,MAAM,GAAmB;gBAC7B,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,OAAO,EAAE,gCAAgC;oBACzC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;oBACnC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;iBACpC;gBACD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;gBACzC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACtC,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBAC/D,OAAO,EAAE,CAAC;gBACV,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAiC;QAC7C,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACjD,CAAC;CACF;AArDD,4CAqDC;AAED;;GAEG;AACH,MAAa,gBAAgB;IACnB,SAAS,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE7D;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF;AA/BD,4CA+BC"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/providers/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Risk Guard — Pre-execution checks
3
+ * Validates every strategy dispatch against configurable limits.
4
+ */
5
+ import type { ExecutorContext, RiskLimits, RiskCheckResult } from '../types/strategy';
6
+ export declare class RiskGuard {
7
+ private limits;
8
+ private dailyLoss;
9
+ private openStrategyCount;
10
+ constructor(limits: RiskLimits);
11
+ recordStrategyOpened(): void;
12
+ recordStrategyClosed(): void;
13
+ recordPnl(pnl: number): void;
14
+ resetDailyStats(): void;
15
+ check(context: ExecutorContext, gasBudget?: number): Promise<RiskCheckResult>;
16
+ }
17
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../src/providers/risk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,SAAS;IAIR,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,iBAAiB,CAAa;gBAElB,MAAM,EAAE,UAAU;IAEtC,oBAAoB,IAAI,IAAI;IAI5B,oBAAoB,IAAI,IAAI;IAI5B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,eAAe,IAAI,IAAI;IAIjB,KAAK,CACT,OAAO,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC;CAqD5B"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Risk Guard — Pre-execution checks
4
+ * Validates every strategy dispatch against configurable limits.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RiskGuard = void 0;
8
+ class RiskGuard {
9
+ limits;
10
+ dailyLoss = 0;
11
+ openStrategyCount = 0;
12
+ constructor(limits) {
13
+ this.limits = limits;
14
+ }
15
+ recordStrategyOpened() {
16
+ this.openStrategyCount++;
17
+ }
18
+ recordStrategyClosed() {
19
+ this.openStrategyCount = Math.max(0, this.openStrategyCount - 1);
20
+ }
21
+ recordPnl(pnl) {
22
+ if (pnl < 0)
23
+ this.dailyLoss += Math.abs(pnl);
24
+ }
25
+ resetDailyStats() {
26
+ this.dailyLoss = 0;
27
+ }
28
+ async check(context, gasBudget) {
29
+ const messages = [];
30
+ // ── 1. Strategy Whitelist / Blacklist ──────────────────────────────────
31
+ if (this.limits.allowedStrategies?.length) {
32
+ const allowed = this.limits.allowedStrategies.includes(context.strategyId);
33
+ if (!allowed) {
34
+ messages.push(`Strategy ${context.strategyId} not in whitelist`);
35
+ }
36
+ }
37
+ if (this.limits.blockedStrategies?.includes(context.strategyId)) {
38
+ messages.push(`Strategy ${context.strategyId} is blocked`);
39
+ }
40
+ // ── 2. Daily Limit ─────────────────────────────────────────────────────
41
+ if (this.limits.maxDailyStrategies !== undefined &&
42
+ this.limits.usedToday !== undefined) {
43
+ if (this.limits.usedToday >= this.limits.maxDailyStrategies) {
44
+ messages.push(`Daily limit reached: ${this.limits.usedToday}/${this.limits.maxDailyStrategies}`);
45
+ }
46
+ }
47
+ // ── 3. Max Open Strategies ────────────────────────────────────────────
48
+ if (this.limits.maxDailyStrategies !== undefined &&
49
+ this.openStrategyCount >= this.limits.maxDailyStrategies) {
50
+ messages.push(`Open strategy limit reached: ${this.openStrategyCount}`);
51
+ }
52
+ // ── 4. Gas Budget ─────────────────────────────────────────────────────
53
+ if (gasBudget !== undefined && this.limits.maxGasBudget !== undefined) {
54
+ if (gasBudget > this.limits.maxGasBudget) {
55
+ messages.push(`Gas budget $${gasBudget} exceeds limit $${this.limits.maxGasBudget}`);
56
+ }
57
+ }
58
+ const passed = messages.length === 0;
59
+ return {
60
+ passed,
61
+ message: messages.join('; '),
62
+ adjustedContext: passed ? undefined : context,
63
+ };
64
+ }
65
+ }
66
+ exports.RiskGuard = RiskGuard;
67
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/providers/risk.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,MAAa,SAAS;IAIA;IAHZ,SAAS,GAAW,CAAC,CAAC;IACtB,iBAAiB,GAAW,CAAC,CAAC;IAEtC,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C,oBAAoB;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,IAAI,GAAG,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,eAAe;QACb,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK,CACT,OAAwB,EACxB,SAAkB;QAElB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,0EAA0E;QAC1E,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,UAAU,mBAAmB,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,UAAU,aAAa,CAAC,CAAC;QAC7D,CAAC;QAED,0EAA0E;QAC1E,IACE,IAAI,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;YAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,EACnC,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CACX,wBAAwB,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAClF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,IACE,IAAI,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;YAC5C,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EACxD,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,gCAAgC,IAAI,CAAC,iBAAiB,EAAE,CACzD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtE,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CACX,eAAe,SAAS,mBAAmB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CACtE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QACrC,OAAO;YACL,MAAM;YACN,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;SAC9C,CAAC;IACJ,CAAC;CACF;AA9ED,8BA8EC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Order State Manager
3
+ * Tracks every strategy through its lifecycle with complete transition log.
4
+ */
5
+ import type { OrderStatus, OrderEvent, TrackedStrategy, ExecutorContext } from '../types/strategy';
6
+ export declare function applyTransition(current: OrderStatus, event: OrderEvent): OrderStatus | null;
7
+ export declare class OrderStateManager {
8
+ private strategies;
9
+ private clientIdMap;
10
+ register(clientOrderId: string, strategyId: string, context: ExecutorContext): TrackedStrategy;
11
+ bind(clientOrderId: string, dispatchId: string): TrackedStrategy | null;
12
+ transition(id: string, event: OrderEvent, detail?: string): TrackedStrategy | null;
13
+ applyResult(id: string, result: {
14
+ status: OrderStatus;
15
+ error?: string;
16
+ }): TrackedStrategy | null;
17
+ markError(id: string, error: string): TrackedStrategy | null;
18
+ setResult(id: string, result: unknown): TrackedStrategy | null;
19
+ incrementRetry(id: string): number;
20
+ get(id: string): TrackedStrategy | undefined;
21
+ getByDispatchId(dispatchId: string): TrackedStrategy | undefined;
22
+ list(filter?: {
23
+ status?: OrderStatus;
24
+ }): TrackedStrategy[];
25
+ remove(id: string): void;
26
+ /** Purge terminal strategies older than maxAgeMs */
27
+ purge(maxAgeMs?: number): number;
28
+ size(): number;
29
+ }
30
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/providers/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EAEV,eAAe,EACf,eAAe,EAChB,MAAM,mBAAmB,CAAC;AA6B3B,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,UAAU,GAChB,WAAW,GAAG,IAAI,CAEpB;AAID,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,WAAW,CAAkC;IAErD,QAAQ,CACN,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,eAAe;IAiBlB,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAUvE,UAAU,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,GAAG,IAAI;IAuBzB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,GAAG,IAAI;IAwBhG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAQ5D,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI;IAa9D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAQlC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAO5C,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIhE,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,eAAe,EAAE;IAS1D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOxB,oDAAoD;IACpD,KAAK,CAAC,QAAQ,GAAE,MAA4B,GAAG,MAAM;IAwBrD,IAAI,IAAI,MAAM;CAGf"}