dexbot 1.2.1 → 1.2.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 (66) hide show
  1. package/dist/modules/bitshares-native/lru_cache.d.ts +9 -0
  2. package/dist/modules/bitshares-native/lru_cache.d.ts.map +1 -1
  3. package/dist/modules/bitshares-native/lru_cache.js +12 -0
  4. package/dist/modules/bitshares-native/lru_cache.js.map +1 -1
  5. package/dist/modules/bitshares-native/tx/builder.d.ts +4 -0
  6. package/dist/modules/bitshares-native/tx/builder.d.ts.map +1 -1
  7. package/dist/modules/bitshares-native/tx/builder.js +19 -0
  8. package/dist/modules/bitshares-native/tx/builder.js.map +1 -1
  9. package/dist/modules/bitshares-native/tx/tx_cache.d.ts +7 -0
  10. package/dist/modules/bitshares-native/tx/tx_cache.d.ts.map +1 -1
  11. package/dist/modules/bitshares-native/tx/tx_cache.js +11 -0
  12. package/dist/modules/bitshares-native/tx/tx_cache.js.map +1 -1
  13. package/dist/modules/bitshares_client.d.ts.map +1 -1
  14. package/dist/modules/bitshares_client.js +5 -0
  15. package/dist/modules/bitshares_client.js.map +1 -1
  16. package/dist/modules/constants.d.ts +1 -0
  17. package/dist/modules/constants.d.ts.map +1 -1
  18. package/dist/modules/constants.js +1 -0
  19. package/dist/modules/constants.js.map +1 -1
  20. package/dist/modules/dexbot_class.d.ts +0 -1
  21. package/dist/modules/dexbot_class.d.ts.map +1 -1
  22. package/dist/modules/dexbot_class.js +67 -37
  23. package/dist/modules/dexbot_class.js.map +1 -1
  24. package/dist/modules/dexbot_fill_runtime.d.ts.map +1 -1
  25. package/dist/modules/dexbot_fill_runtime.js +3 -0
  26. package/dist/modules/dexbot_fill_runtime.js.map +1 -1
  27. package/dist/modules/node_manager.d.ts +1 -0
  28. package/dist/modules/node_manager.d.ts.map +1 -1
  29. package/dist/modules/node_manager.js +11 -1
  30. package/dist/modules/node_manager.js.map +1 -1
  31. package/dist/modules/order/accounting.d.ts.map +1 -1
  32. package/dist/modules/order/accounting.js +4 -1
  33. package/dist/modules/order/accounting.js.map +1 -1
  34. package/dist/modules/order/index.d.ts +3 -8
  35. package/dist/modules/order/index.d.ts.map +1 -1
  36. package/dist/modules/order/index.js +3 -10
  37. package/dist/modules/order/index.js.map +1 -1
  38. package/dist/modules/order/manager.d.ts +2 -0
  39. package/dist/modules/order/manager.d.ts.map +1 -1
  40. package/dist/modules/order/manager.js +5 -0
  41. package/dist/modules/order/manager.js.map +1 -1
  42. package/dist/modules/order/strategy.js +1 -1
  43. package/dist/modules/order/strategy.js.map +1 -1
  44. package/dist/modules/order/sync_engine.d.ts.map +1 -1
  45. package/dist/modules/order/sync_engine.js +40 -17
  46. package/dist/modules/order/sync_engine.js.map +1 -1
  47. package/dist/modules/order/utils/math.d.ts +28 -1
  48. package/dist/modules/order/utils/math.d.ts.map +1 -1
  49. package/dist/modules/order/utils/math.js +40 -2
  50. package/dist/modules/order/utils/math.js.map +1 -1
  51. package/dist/modules/utils/math_utils.d.ts +3 -6
  52. package/dist/modules/utils/math_utils.d.ts.map +1 -1
  53. package/dist/modules/utils/math_utils.js +1 -14
  54. package/dist/modules/utils/math_utils.js.map +1 -1
  55. package/dist/{modules/order → scripts}/runner.d.ts +15 -9
  56. package/dist/scripts/runner.d.ts.map +1 -0
  57. package/dist/{modules/order → scripts}/runner.js +24 -45
  58. package/dist/scripts/runner.js.map +1 -0
  59. package/package.json +1 -2
  60. package/scripts/README.md +13 -0
  61. package/dist/modules/cli_whitelist_args.d.ts +0 -6
  62. package/dist/modules/cli_whitelist_args.d.ts.map +0 -1
  63. package/dist/modules/cli_whitelist_args.js +0 -13
  64. package/dist/modules/cli_whitelist_args.js.map +0 -1
  65. package/dist/modules/order/runner.d.ts.map +0 -1
  66. package/dist/modules/order/runner.js.map +0 -1
@@ -1,13 +1,16 @@
1
1
  "use strict";
2
2
  /**
3
- * modules/order/runner.ts - Grid Calculation Runner
3
+ * scripts/runner.ts - Grid Calculation Runner
4
4
  *
5
5
  * Standalone order grid calculation utility for testing and debugging.
6
6
  * Provides command-line tools for grid verification without placing orders.
7
7
  *
8
+ * NOTE: Requires a live BitShares connection — initializeGrid() performs
9
+ * on-chain asset metadata lookups and price derivation. Not offline-capable.
10
+ *
8
11
  * Features:
9
12
  * - Load bot configuration from profiles/bots.json
10
- * - Derive market price from pool or market
13
+ * - Derive market price from pool or market (via initializeGrid)
11
14
  * - Create and display order grid
12
15
  * - Simulate multiple calculation cycles
13
16
  * - Validate grid structure and fund calculations
@@ -25,8 +28,8 @@
25
28
  *
26
29
  * 1. runOrderManagerCalculation() - Main calculation runner (async)
27
30
  * Loads bot config, derives market price, initializes grid, runs calculation cycles
28
- * Validates config, derives startPrice, initializes OrderManager and Grid
29
- * Runs configurable cycles with optional delays
31
+ * Validates config, initializes OrderManager and Grid (price derivation handled
32
+ * internally by initializeGrid), runs configurable cycles with optional delays
30
33
  * Displays grid status and metrics after each cycle
31
34
  *
32
35
  * Environment variables:
@@ -38,13 +41,15 @@
38
41
  *
39
42
  * USAGE:
40
43
  * Command line:
41
- * node -e "require('./runner').runOrderManagerCalculation()"
44
+ * node -e "require('./scripts/runner').runOrderManagerCalculation()"
45
+ * tsx scripts/runner.ts
42
46
  *
43
47
  * With env vars:
44
- * CALC_CYCLES=5 CALC_DELAY_MS=1000 node -e "require('./runner').runOrderManagerCalculation()"
48
+ * CALC_CYCLES=5 CALC_DELAY_MS=1000 node -e "require('./scripts/runner').runOrderManagerCalculation()"
49
+ * CALC_CYCLES=5 CALC_DELAY_MS=1000 tsx scripts/runner.ts
45
50
  *
46
51
  * From code:
47
- * const { runOrderManagerCalculation } = require('./runner');
52
+ * const { runOrderManagerCalculation } = require('./scripts/runner');
48
53
  * await runOrderManagerCalculation();
49
54
  *
50
55
  * ===============================================================================
@@ -57,20 +62,18 @@
57
62
  *
58
63
  * ===============================================================================
59
64
  */
60
- const { path } = require('../path_api');
61
- const { OrderManager } = require('./manager');
62
- const { PATHS } = require('../paths');
63
- const { initializeGrid } = require('./grid');
64
- const { readBotsFileSync } = require('../bots_file_lock');
65
- const { Config } = require('../config');
66
- const { parseJsonWithComments, sleep } = require('./utils/system');
67
- const { derivePrice } = require('./utils/system');
68
- const { isNumeric } = require('./format');
65
+ const { OrderManager } = require('../modules/order/manager');
66
+ const { PATHS } = require('../modules/paths');
67
+ const { initializeGrid } = require('../modules/order/grid');
68
+ const { readBotsFileSync } = require('../modules/bots_file_lock');
69
+ const { Config } = require('../modules/config');
70
+ const { parseJsonWithComments, sleep } = require('../modules/order/utils/system');
69
71
  /**
70
72
  * Run a standalone order grid calculation for testing.
71
- * Loads bot config, derives market price, creates grid, and simulates cycles.
73
+ * Loads bot config, initializes grid, and simulates sync cycles.
74
+ * Price derivation is handled internally by initializeGrid.
72
75
  * @returns {Promise<void>}
73
- * @throws {Error} If config invalid or startPrice outside bounds
76
+ * @throws {Error} If config invalid, BitShares unavailable, or grid init fails
74
77
  */
75
78
  async function runOrderManagerCalculation() {
76
79
  const cfgFile = PATHS.PROFILES.BOTS_JSON;
@@ -94,42 +97,18 @@ async function runOrderManagerCalculation() {
94
97
  console.warn('Failed to read bot configuration:', err.message);
95
98
  throw err;
96
99
  }
97
- const rawMarketPrice = botConfig.startPrice;
98
- // Auto-derive price ONLY if not a fixed numeric value
99
- if (!isNumeric(rawMarketPrice)) {
100
- try {
101
- const { BitShares } = require('../bitshares_client');
102
- const mode = botConfig.priceMode || (rawMarketPrice === 'book' || rawMarketPrice === 'market' ? 'book' : (rawMarketPrice === 'pool' ? 'pool' : 'auto'));
103
- console.log(`Deriving startPrice using mode: ${mode}...`);
104
- const derived = await derivePrice(BitShares, botConfig.assetA, botConfig.assetB, mode);
105
- if (derived) {
106
- botConfig.startPrice = Number(derived);
107
- console.log(`✓ Derived startPrice from on-chain: ${botConfig.startPrice}`);
108
- }
109
- else {
110
- throw new Error(`Failed to derive price using mode "${mode}" and no numeric fallback available.`);
111
- }
112
- }
113
- catch (err) {
114
- console.error('Price derivation failed:', err.message);
115
- throw err;
116
- }
117
- }
100
+ const manager = new OrderManager(botConfig);
118
101
  try {
119
- const mp = Number(botConfig.startPrice);
120
- if (!Number.isFinite(mp))
121
- throw new Error('Invalid startPrice (not a number)');
102
+ await initializeGrid(manager);
122
103
  }
123
104
  catch (err) {
105
+ console.error('Grid initialization failed — ensure BitShares nodes are reachable and asset symbols are valid:', err.message);
124
106
  throw err;
125
107
  }
126
- const manager = new OrderManager(botConfig);
127
- await initializeGrid(manager);
128
108
  const cycles = Config.CALC_CYCLES;
129
109
  const delayMs = Config.CALC_DELAY_MS;
130
110
  for (let cycle = 1; cycle <= cycles; cycle++) {
131
111
  manager.logger.log(`\n----- Cycle ${cycle}/${cycles} -----`, 'info');
132
- // Use syncFromOpenOrders([]) to simulate a sync check in the test runner
133
112
  await manager.syncFromOpenOrders([]);
134
113
  manager.logger && manager.logger.displayStatus && manager.logger.displayStatus(manager);
135
114
  if (cycle < cycles)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../scripts/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dexbot",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "The first open source trading bot with zero runtime dependencies and a fully adaptive market making strategy.",
5
5
  "main": "dist/modules/dexbot_class.js",
6
6
  "bin": {
@@ -109,7 +109,6 @@
109
109
  "./dist/modules/key_store.js": false,
110
110
  "./dist/modules/order/logger.js": false,
111
111
  "./dist/modules/order/export.js": false,
112
- "./dist/modules/order/runner.js": false,
113
112
  "./dist/market_adapter/lp_chart_runner.js": false,
114
113
  "./dist/market_adapter/ama_signal_runner.js": false
115
114
  },
package/scripts/README.md CHANGED
@@ -150,6 +150,19 @@ tsx scripts/diagnose-pool-history.ts --pool 1.19.x --limit 100 --hours 48 --maxP
150
150
  tsx scripts/print_grid.ts
151
151
  ```
152
152
 
153
+ ### Grid Calculation Runner
154
+ **File:** `runner.ts`
155
+ **Purpose:** Standalone order grid calculation debugger — loads a bot config, initializes the grid, and simulates sync cycles.
156
+ ```bash
157
+ # Default (first bot, 3 cycles)
158
+ tsx scripts/runner.ts
159
+
160
+ # Specific bot, 10 cycles with 1s delay
161
+ LIVE_BOT_NAME=my-bot CALC_CYCLES=10 CALC_DELAY_MS=1000 tsx scripts/runner.ts
162
+ ```
163
+ Useful for verifying config produces the expected grid, testing price derivation, and debugging fund allocation.
164
+ Requires a live BitShares connection (asset metadata lookups and price derivation are on-chain).
165
+
153
166
  ---
154
167
 
155
168
  ## 🔍 GIT & DEVELOPMENT WORKFLOW
@@ -1,6 +0,0 @@
1
- declare function buildMarketAdapterWhitelistNpmArgs(args?: string[]): string[];
2
- declare const _default: {
3
- buildMarketAdapterWhitelistNpmArgs: typeof buildMarketAdapterWhitelistNpmArgs;
4
- };
5
- export = _default;
6
- //# sourceMappingURL=cli_whitelist_args.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli_whitelist_args.d.ts","sourceRoot":"","sources":["../../modules/cli_whitelist_args.ts"],"names":[],"mappings":"AAEA,iBAAS,kCAAkC,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAOzE;;;;AAED,kBAEE"}
@@ -1,13 +0,0 @@
1
- 'use strict';
2
- function buildMarketAdapterWhitelistNpmArgs(args = []) {
3
- const forwardedArgs = Array.isArray(args) ? args.filter((arg) => typeof arg === 'string' && arg.length > 0) : [];
4
- return [
5
- 'run',
6
- 'market-adapter:whitelist',
7
- ...(forwardedArgs.length > 0 ? ['--', ...forwardedArgs] : []),
8
- ];
9
- }
10
- module.exports = {
11
- buildMarketAdapterWhitelistNpmArgs,
12
- };
13
- //# sourceMappingURL=cli_whitelist_args.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli_whitelist_args.js","sourceRoot":"","sources":["../../modules/cli_whitelist_args.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,SAAS,kCAAkC,CAAC,OAAiB,EAAE;IAC3D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjH,OAAO;QACH,KAAK;QACL,0BAA0B;QAC1B,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC;AACN,CAAC;AAED,iBAAS;IACL,kCAAkC;CACrC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../modules/order/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAYH;;;;;GAKG;AACH,iBAAe,0BAA0B,kBAiExC;;;;AAED,kBAAwC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../modules/order/runner.ts"],"names":[],"mappings":"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"}