dexbot 1.4.25 → 1.5.1

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 (217) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +6 -2
  3. package/analysis/README.md +14 -7
  4. package/analysis/ama_fitting/package.json +1 -1
  5. package/analysis/analyze_derivatives.ts +1 -1
  6. package/analysis/bot_key_utils.ts +272 -3
  7. package/analysis/bot_usage/discover_bot_accounts.ts +64 -9
  8. package/analysis/bot_usage/kibana_bot_queries.ts +40 -1
  9. package/analysis/chart_utils.ts +6 -3
  10. package/analysis/grid_correction_check.ts +56 -20
  11. package/analysis/resolve_bot_accounts.ts +199 -0
  12. package/analysis/trade_profitability.ts +36 -8
  13. package/analysis/tradingview/README.md +25 -0
  14. package/analysis/tradingview/analyze_tradingview.ts +2 -2
  15. package/analysis/trend_detection/package.json +1 -1
  16. package/claw/modules/claw_launcher.ts +5 -4
  17. package/claw/modules/credit_runtime_adapter.ts +2 -1
  18. package/claw/modules/dexbot_profiles.ts +4 -3
  19. package/claw/package.json +1 -1
  20. package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
  21. package/claw/runtimes/openclaw-plugin/package.json +1 -1
  22. package/claw/tests/test_claw_mcp_transport.ts +2 -2
  23. package/dist/analysis/analyze_derivatives.js +1 -1
  24. package/dist/analysis/bot_key_utils.d.ts +28 -1
  25. package/dist/analysis/bot_key_utils.d.ts.map +1 -1
  26. package/dist/analysis/bot_key_utils.js +385 -3
  27. package/dist/analysis/bot_key_utils.js.map +1 -1
  28. package/dist/analysis/bot_usage/discover_bot_accounts.js +60 -10
  29. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -1
  30. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +45 -1
  31. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -1
  32. package/dist/analysis/bot_usage/kibana_bot_queries.js +39 -1
  33. package/dist/analysis/bot_usage/kibana_bot_queries.js.map +1 -1
  34. package/dist/analysis/chart_utils.d.ts +2 -1
  35. package/dist/analysis/chart_utils.d.ts.map +1 -1
  36. package/dist/analysis/chart_utils.js +4 -1
  37. package/dist/analysis/chart_utils.js.map +1 -1
  38. package/dist/analysis/grid_correction_check.d.ts.map +1 -1
  39. package/dist/analysis/grid_correction_check.js +60 -20
  40. package/dist/analysis/grid_correction_check.js.map +1 -1
  41. package/dist/analysis/resolve_bot_accounts.d.ts +3 -0
  42. package/dist/analysis/resolve_bot_accounts.d.ts.map +1 -0
  43. package/dist/analysis/resolve_bot_accounts.js +216 -0
  44. package/dist/analysis/resolve_bot_accounts.js.map +1 -0
  45. package/dist/analysis/trade_profitability.d.ts.map +1 -1
  46. package/dist/analysis/trade_profitability.js +40 -8
  47. package/dist/analysis/trade_profitability.js.map +1 -1
  48. package/dist/analysis/tradingview/analyze_tradingview.js +2 -2
  49. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -1
  50. package/dist/bot.d.ts.map +1 -1
  51. package/dist/bot.js +2 -1
  52. package/dist/bot.js.map +1 -1
  53. package/dist/dexbot.d.ts.map +1 -1
  54. package/dist/dexbot.js +73 -17
  55. package/dist/dexbot.js.map +1 -1
  56. package/dist/market_adapter/ama_signal_runner.js +2 -2
  57. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +2 -1
  58. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js.map +1 -1
  59. package/dist/market_adapter/inputs/fetch_lp_data.d.ts +4 -1
  60. package/dist/market_adapter/inputs/fetch_lp_data.d.ts.map +1 -1
  61. package/dist/market_adapter/inputs/fetch_lp_data.js +3 -2
  62. package/dist/market_adapter/inputs/fetch_lp_data.js.map +1 -1
  63. package/dist/modules/account_bots.d.ts +42 -1
  64. package/dist/modules/account_bots.d.ts.map +1 -1
  65. package/dist/modules/account_bots.js +168 -17
  66. package/dist/modules/account_bots.js.map +1 -1
  67. package/dist/modules/account_orders.d.ts +7 -1
  68. package/dist/modules/account_orders.d.ts.map +1 -1
  69. package/dist/modules/account_orders.js +34 -1
  70. package/dist/modules/account_orders.js.map +1 -1
  71. package/dist/modules/bitshares_client.d.ts +4 -1
  72. package/dist/modules/bitshares_client.d.ts.map +1 -1
  73. package/dist/modules/bitshares_client.js +12 -4
  74. package/dist/modules/bitshares_client.js.map +1 -1
  75. package/dist/modules/bot_settings.d.ts.map +1 -1
  76. package/dist/modules/bot_settings.js +2 -1
  77. package/dist/modules/bot_settings.js.map +1 -1
  78. package/dist/modules/cli_colors.d.ts +39 -0
  79. package/dist/modules/cli_colors.d.ts.map +1 -0
  80. package/dist/modules/cli_colors.js +42 -0
  81. package/dist/modules/cli_colors.js.map +1 -0
  82. package/dist/modules/constants.d.ts +2 -0
  83. package/dist/modules/constants.d.ts.map +1 -1
  84. package/dist/modules/constants.js +27 -11
  85. package/dist/modules/constants.js.map +1 -1
  86. package/dist/modules/credit_pricing.d.ts +61 -0
  87. package/dist/modules/credit_pricing.d.ts.map +1 -0
  88. package/dist/modules/credit_pricing.js +237 -0
  89. package/dist/modules/credit_pricing.js.map +1 -0
  90. package/dist/modules/credit_runtime.d.ts +1 -0
  91. package/dist/modules/credit_runtime.d.ts.map +1 -1
  92. package/dist/modules/credit_runtime.js +49 -107
  93. package/dist/modules/credit_runtime.js.map +1 -1
  94. package/dist/modules/dexbot_class.d.ts +3 -1
  95. package/dist/modules/dexbot_class.d.ts.map +1 -1
  96. package/dist/modules/dexbot_class.js +22 -6
  97. package/dist/modules/dexbot_class.js.map +1 -1
  98. package/dist/modules/dexbot_cow_runtime.d.ts +36 -2
  99. package/dist/modules/dexbot_cow_runtime.d.ts.map +1 -1
  100. package/dist/modules/dexbot_cow_runtime.js +434 -20
  101. package/dist/modules/dexbot_cow_runtime.js.map +1 -1
  102. package/dist/modules/dexbot_maintenance_runtime.d.ts +15 -16
  103. package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -1
  104. package/dist/modules/dexbot_maintenance_runtime.js +69 -42
  105. package/dist/modules/dexbot_maintenance_runtime.js.map +1 -1
  106. package/dist/modules/dexbot_startup_runtime.d.ts +1 -0
  107. package/dist/modules/dexbot_startup_runtime.d.ts.map +1 -1
  108. package/dist/modules/dexbot_startup_runtime.js +12 -1
  109. package/dist/modules/dexbot_startup_runtime.js.map +1 -1
  110. package/dist/modules/dexbot_state_recovery.d.ts.map +1 -1
  111. package/dist/modules/dexbot_state_recovery.js +7 -0
  112. package/dist/modules/dexbot_state_recovery.js.map +1 -1
  113. package/dist/modules/fund_registry.d.ts +1 -1
  114. package/dist/modules/fund_registry.js +1 -1
  115. package/dist/modules/launcher/adapter_requirement.d.ts +38 -0
  116. package/dist/modules/launcher/adapter_requirement.d.ts.map +1 -0
  117. package/dist/modules/launcher/adapter_requirement.js +141 -0
  118. package/dist/modules/launcher/adapter_requirement.js.map +1 -0
  119. package/dist/modules/launcher/bot_supervisor.d.ts +2 -2
  120. package/dist/modules/launcher/bot_supervisor.d.ts.map +1 -1
  121. package/dist/modules/launcher/bot_supervisor.js +32 -3
  122. package/dist/modules/launcher/bot_supervisor.js.map +1 -1
  123. package/dist/modules/launcher/launch_modes.d.ts.map +1 -1
  124. package/dist/modules/launcher/launch_modes.js +5 -4
  125. package/dist/modules/launcher/launch_modes.js.map +1 -1
  126. package/dist/modules/launcher/monolithic_runtime.d.ts +1 -1
  127. package/dist/modules/launcher/monolithic_runtime.d.ts.map +1 -1
  128. package/dist/modules/launcher/monolithic_runtime.js +12 -8
  129. package/dist/modules/launcher/monolithic_runtime.js.map +1 -1
  130. package/dist/modules/launcher/status_reporting.d.ts +6 -6
  131. package/dist/modules/launcher/status_reporting.d.ts.map +1 -1
  132. package/dist/modules/launcher/status_reporting.js +9 -6
  133. package/dist/modules/launcher/status_reporting.js.map +1 -1
  134. package/dist/modules/order/accounting.d.ts +34 -0
  135. package/dist/modules/order/accounting.d.ts.map +1 -1
  136. package/dist/modules/order/accounting.js +182 -5
  137. package/dist/modules/order/accounting.js.map +1 -1
  138. package/dist/modules/order/export.d.ts +1 -1
  139. package/dist/modules/order/export.js +1 -1
  140. package/dist/modules/order/grid.d.ts.map +1 -1
  141. package/dist/modules/order/grid.js +68 -28
  142. package/dist/modules/order/grid.js.map +1 -1
  143. package/dist/modules/order/grid_reconcile_internal.d.ts.map +1 -1
  144. package/dist/modules/order/grid_reconcile_internal.js +72 -0
  145. package/dist/modules/order/grid_reconcile_internal.js.map +1 -1
  146. package/dist/modules/order/logger.d.ts +23 -1
  147. package/dist/modules/order/logger.d.ts.map +1 -1
  148. package/dist/modules/order/logger.js +60 -17
  149. package/dist/modules/order/logger.js.map +1 -1
  150. package/dist/modules/order/manager.d.ts +41 -1
  151. package/dist/modules/order/manager.d.ts.map +1 -1
  152. package/dist/modules/order/manager.js +186 -17
  153. package/dist/modules/order/manager.js.map +1 -1
  154. package/dist/modules/order/strategy.d.ts.map +1 -1
  155. package/dist/modules/order/strategy.js +17 -2
  156. package/dist/modules/order/strategy.js.map +1 -1
  157. package/dist/modules/order/sync_engine.d.ts.map +1 -1
  158. package/dist/modules/order/sync_engine.js +59 -9
  159. package/dist/modules/order/sync_engine.js.map +1 -1
  160. package/dist/modules/order/utils/math.d.ts +42 -1
  161. package/dist/modules/order/utils/math.d.ts.map +1 -1
  162. package/dist/modules/order/utils/math.js +91 -1
  163. package/dist/modules/order/utils/math.js.map +1 -1
  164. package/dist/modules/order/utils/order.d.ts +52 -1
  165. package/dist/modules/order/utils/order.d.ts.map +1 -1
  166. package/dist/modules/order/utils/order.js +137 -7
  167. package/dist/modules/order/utils/order.js.map +1 -1
  168. package/dist/modules/order/utils/system.d.ts +66 -4
  169. package/dist/modules/order/utils/system.d.ts.map +1 -1
  170. package/dist/modules/order/utils/system.js +156 -16
  171. package/dist/modules/order/utils/system.js.map +1 -1
  172. package/dist/modules/order/utils/validate.d.ts +30 -3
  173. package/dist/modules/order/utils/validate.d.ts.map +1 -1
  174. package/dist/modules/order/utils/validate.js +206 -11
  175. package/dist/modules/order/utils/validate.js.map +1 -1
  176. package/dist/modules/utils/chain_logs.d.ts +11 -0
  177. package/dist/modules/utils/chain_logs.d.ts.map +1 -0
  178. package/dist/modules/utils/chain_logs.js +23 -0
  179. package/dist/modules/utils/chain_logs.js.map +1 -0
  180. package/dist/modules/utils/sanitize_key.d.ts +7 -0
  181. package/dist/modules/utils/sanitize_key.d.ts.map +1 -1
  182. package/dist/modules/utils/sanitize_key.js +15 -0
  183. package/dist/modules/utils/sanitize_key.js.map +1 -1
  184. package/dist/pm2.d.ts +11 -1
  185. package/dist/pm2.d.ts.map +1 -1
  186. package/dist/pm2.js +66 -15
  187. package/dist/pm2.js.map +1 -1
  188. package/dist/scripts/analyze-credit.d.ts +4 -0
  189. package/dist/scripts/analyze-credit.d.ts.map +1 -0
  190. package/dist/scripts/analyze-credit.js +760 -0
  191. package/dist/scripts/analyze-credit.js.map +1 -0
  192. package/dist/scripts/analyze-orders.d.ts +1 -10
  193. package/dist/scripts/analyze-orders.d.ts.map +1 -1
  194. package/dist/scripts/analyze-orders.js +11 -34
  195. package/dist/scripts/analyze-orders.js.map +1 -1
  196. package/dist/scripts/test-credit-renewal.d.ts.map +1 -1
  197. package/dist/scripts/test-credit-renewal.js +37 -5
  198. package/dist/scripts/test-credit-renewal.js.map +1 -1
  199. package/dist/scripts/tv.d.ts +11 -0
  200. package/dist/scripts/tv.d.ts.map +1 -0
  201. package/dist/scripts/tv.js +357 -0
  202. package/dist/scripts/tv.js.map +1 -0
  203. package/dist/scripts/update.js +77 -10
  204. package/dist/scripts/update.js.map +1 -1
  205. package/dist/unlock.d.ts.map +1 -1
  206. package/dist/unlock.js +20 -8
  207. package/dist/unlock.js.map +1 -1
  208. package/docs/DEXBOT_COMPARISON.md +3 -3
  209. package/docs/EVOLUTION.md +8 -6
  210. package/docs/FUND_MOVEMENT_AND_ACCOUNTING.md +3 -1
  211. package/docs/GRID_RECONCILE.md +1 -0
  212. package/docs/LOGGING.md +3 -0
  213. package/docs/MPA_CREDIT_USAGE.md +3 -1
  214. package/docs/README.md +2 -2
  215. package/docs/WORKFLOW.md +3 -1
  216. package/package.json +2 -1
  217. package/scripts/README.md +12 -0
@@ -0,0 +1,237 @@
1
+ 'use strict';
2
+ /**
3
+ * modules/credit_pricing.ts — Canonical credit-pricing math (single source of truth).
4
+ *
5
+ * Pure functions only: no imports, no I/O, browser-safe. Both the live
6
+ * credit runtime (modules/credit_runtime.ts) and the offline analyzer
7
+ * (scripts/analyze-credit.ts) delegate to these helpers so offer-price
8
+ * orientation, conversion rates, and collateral-ratio math cannot drift
9
+ * apart between surfaces.
10
+ *
11
+ * Conventions (mirror the chain's credit_offer_object price layout):
12
+ * - A 'core' price has base == debt asset / quote == collateral asset and
13
+ * the conversion rate (debt per 1 collateral) is base / quote.
14
+ * - A 'legacy-reversed' price has base == collateral / quote == debt and
15
+ * the rate is quote / base. Unknown layouts default to 'core'.
16
+ * - Credit CR = collateralValueInDebt / debtAmount, where
17
+ * collateralValueInDebt = collateralAmount * conversionRate.
18
+ */
19
+ function toFiniteOrNull(value) {
20
+ const num = typeof value === 'string' && value.trim() !== '' ? Number(value) : Number(value);
21
+ return Number.isFinite(num) ? num : null;
22
+ }
23
+ function positiveOrNull(value) {
24
+ const num = toFiniteOrNull(value);
25
+ return num !== null && num > 0 ? num : null;
26
+ }
27
+ /**
28
+ * Tolerantly normalize an offer's acceptable_collateral map, which arrives
29
+ * in different shapes depending on the API path (Map, [[id, price]] pairs,
30
+ * [{key, value}] entries, or a plain {assetId: price} object).
31
+ */
32
+ function normalizeCollateralMap(raw) {
33
+ const out = new Map();
34
+ if (raw instanceof Map) {
35
+ for (const [key, value] of raw.entries()) {
36
+ if (key && value)
37
+ out.set(String(key), value);
38
+ }
39
+ return out;
40
+ }
41
+ if (Array.isArray(raw)) {
42
+ for (const entry of raw) {
43
+ if (Array.isArray(entry) && entry.length >= 2 && entry[0] && entry[1]) {
44
+ out.set(String(entry[0]), entry[1]);
45
+ }
46
+ else if (entry && typeof entry === 'object' && entry.key && entry.value) {
47
+ out.set(String(entry.key), entry.value);
48
+ }
49
+ }
50
+ return out;
51
+ }
52
+ if (raw && typeof raw === 'object') {
53
+ for (const [key, value] of Object.entries(raw)) {
54
+ if (key && value)
55
+ out.set(String(key), value);
56
+ }
57
+ }
58
+ return out;
59
+ }
60
+ function creditPriceOrientation(baseAssetId, quoteAssetId, debtAssetId, collateralAssetId) {
61
+ if (String(baseAssetId) === String(debtAssetId) && String(quoteAssetId) === String(collateralAssetId)) {
62
+ return 'core';
63
+ }
64
+ if (String(baseAssetId) === String(collateralAssetId) && String(quoteAssetId) === String(debtAssetId)) {
65
+ return 'legacy-reversed';
66
+ }
67
+ return 'core';
68
+ }
69
+ function priceLegToFloat(leg, precision) {
70
+ const raw = toFiniteOrNull(leg?.amount);
71
+ if (raw === null || raw <= 0 || precision === null || !Number.isFinite(precision) || precision < 0) {
72
+ return null;
73
+ }
74
+ const float = raw / Math.pow(10, precision);
75
+ return float > 0 ? float : null;
76
+ }
77
+ /**
78
+ * Extract the conversion rate (debt asset per 1 collateral unit) for a
79
+ * collateral asset from an offer's acceptable_collateral map.
80
+ *
81
+ * @param offerCollateral - Raw acceptable_collateral in any supported shape
82
+ * @param collateralAssetId - Collateral asset ID to look up
83
+ * @param debtAssetId - Debt asset ID (determines price orientation)
84
+ * @param precisionOf - (assetId) => precision, or null when unknown
85
+ * @returns Debt-per-collateral rate, or null when not listed/unresolvable
86
+ */
87
+ function extractOfferConversionRate(offerCollateral, collateralAssetId, debtAssetId, precisionOf) {
88
+ const map = normalizeCollateralMap(offerCollateral);
89
+ const price = map.get(String(collateralAssetId));
90
+ if (!price)
91
+ return null;
92
+ const baseId = String(price?.base?.asset_id || '');
93
+ const quoteId = String(price?.quote?.asset_id || '');
94
+ if (!baseId || !quoteId)
95
+ return null;
96
+ const orientation = creditPriceOrientation(baseId, quoteId, String(debtAssetId), String(collateralAssetId));
97
+ const baseFloat = priceLegToFloat(price?.base, precisionOf(baseId));
98
+ const quoteFloat = priceLegToFloat(price?.quote, precisionOf(quoteId));
99
+ if (baseFloat === null || quoteFloat === null)
100
+ return null;
101
+ const rate = orientation === 'legacy-reversed' ? quoteFloat / baseFloat : baseFloat / quoteFloat;
102
+ return Number.isFinite(rate) && rate > 0 ? rate : null;
103
+ }
104
+ /**
105
+ * Resolve the single offer price for a collateral asset. Accepts either the
106
+ * full acceptable_collateral map (looked up by collateral asset ID) or the
107
+ * bare { base, quote } price object the runtime already selected.
108
+ */
109
+ function asOfferPrice(collateralPriceOrMap, collateralAssetId) {
110
+ const hit = normalizeCollateralMap(collateralPriceOrMap).get(String(collateralAssetId));
111
+ if (hit)
112
+ return hit;
113
+ const raw = collateralPriceOrMap;
114
+ if (raw && typeof raw === 'object' && raw.base && raw.quote)
115
+ return raw;
116
+ return null;
117
+ }
118
+ /**
119
+ * Value collateral (raw int) in debt-asset units via an offer price.
120
+ * Pure offer-math leg of the runtime's pool-aware valuation.
121
+ */
122
+ function collateralValueFromOfferPrice(collateralAmountInt, collateralPrecision, collateralPriceOrMap, debtAssetId, collateralAssetId, precisionOf) {
123
+ const collRaw = toFiniteOrNull(collateralAmountInt);
124
+ const collPrec = toFiniteOrNull(collateralPrecision);
125
+ if (collRaw === null || collRaw <= 0 || collPrec === null)
126
+ return null;
127
+ const collateralFloat = collRaw / Math.pow(10, collPrec);
128
+ if (!(collateralFloat > 0))
129
+ return null;
130
+ const price = asOfferPrice(collateralPriceOrMap, collateralAssetId);
131
+ if (!price)
132
+ return null;
133
+ const rate = extractOfferConversionRate({ [String(collateralAssetId)]: price }, collateralAssetId, debtAssetId, precisionOf);
134
+ if (rate === null)
135
+ return null;
136
+ return collateralFloat * rate;
137
+ }
138
+ /**
139
+ * Minimum raw collateral required to borrow a raw debt amount at a price.
140
+ * Integer ceil so the borrow is never under-collateralized by rounding.
141
+ */
142
+ function requiredCollateralForBorrow(borrowAmountInt, collateralPrice, debtAssetId = null, collateralAssetId = null) {
143
+ const borrowRaw = toFiniteOrNull(borrowAmountInt);
144
+ const baseAmount = toFiniteOrNull(collateralPrice?.base?.amount);
145
+ const quoteAmount = toFiniteOrNull(collateralPrice?.quote?.amount);
146
+ if (borrowRaw === null || borrowRaw <= 0 || baseAmount === null || quoteAmount === null || baseAmount <= 0 || quoteAmount <= 0) {
147
+ return null;
148
+ }
149
+ const orientation = creditPriceOrientation(String(collateralPrice?.base?.asset_id || ''), String(collateralPrice?.quote?.asset_id || ''), String(debtAssetId || ''), String(collateralAssetId || ''));
150
+ if (orientation === 'legacy-reversed') {
151
+ return Math.ceil((Number(borrowAmountInt) * baseAmount) / quoteAmount);
152
+ }
153
+ return Math.ceil((Number(borrowAmountInt) * quoteAmount) / baseAmount);
154
+ }
155
+ /**
156
+ * Raw debt yielded by raw collateral at a price. Integer floor so the
157
+ * borrow never exceeds what the collateral covers.
158
+ */
159
+ function borrowAmountForCollateral(collateralAmountInt, collateralPrice, debtAssetId = null, collateralAssetId = null) {
160
+ const collRaw = toFiniteOrNull(collateralAmountInt);
161
+ const baseAmount = toFiniteOrNull(collateralPrice?.base?.amount);
162
+ const quoteAmount = toFiniteOrNull(collateralPrice?.quote?.amount);
163
+ if (collRaw === null || collRaw <= 0 || baseAmount === null || quoteAmount === null || baseAmount <= 0 || quoteAmount <= 0) {
164
+ return null;
165
+ }
166
+ const orientation = creditPriceOrientation(String(collateralPrice?.base?.asset_id || ''), String(collateralPrice?.quote?.asset_id || ''), String(debtAssetId || ''), String(collateralAssetId || ''));
167
+ if (orientation === 'legacy-reversed') {
168
+ return Math.floor((Number(collateralAmountInt) * quoteAmount) / baseAmount);
169
+ }
170
+ return Math.floor((Number(collateralAmountInt) * baseAmount) / quoteAmount);
171
+ }
172
+ /**
173
+ * Per-deal CR from floats plus a conversion rate:
174
+ * (collateralFloat * rate) / debtFloat.
175
+ */
176
+ function creditDealCollateralRatio(debtFloat, collateralFloat, rate) {
177
+ const debt = positiveOrNull(debtFloat);
178
+ const coll = toFiniteOrNull(collateralFloat);
179
+ const price = positiveOrNull(rate);
180
+ if (debt === null || coll === null || coll < 0 || price === null)
181
+ return null;
182
+ return (coll * price) / debt;
183
+ }
184
+ /**
185
+ * Value-weighted average CR = sum(collateral values) / sum(debts), so one
186
+ * large deal correctly dominates many dust deals. Unpriced entries (null
187
+ * debt/value) are skipped by the caller convention — entries with
188
+ * non-positive debt are ignored here as well.
189
+ */
190
+ function averageCollateralRatio(entries) {
191
+ let debtSum = 0;
192
+ let valueSum = 0;
193
+ for (const entry of entries || []) {
194
+ const debt = positiveOrNull(entry?.debt);
195
+ const value = toFiniteOrNull(entry?.value);
196
+ if (debt === null || value === null || value < 0)
197
+ continue;
198
+ debtSum += debt;
199
+ valueSum += value;
200
+ }
201
+ if (!(debtSum > 0))
202
+ return null;
203
+ return valueSum / debtSum;
204
+ }
205
+ /**
206
+ * Flat offer fee prorated per day: (feeRate / denom) / (durationDays).
207
+ * Returns 0 for missing/non-positive inputs (matches runtime gating, where
208
+ * a zero daily rate never exceeds maxFeeRatePerDay).
209
+ */
210
+ function dailyOfferFeeRate(offer, feeDenom) {
211
+ const feeRate = toFiniteOrNull(offer?.fee_rate);
212
+ const maxDurationSeconds = toFiniteOrNull(offer?.max_duration_seconds);
213
+ const denom = toFiniteOrNull(feeDenom);
214
+ if (feeRate === null || maxDurationSeconds === null || denom === null || feeRate <= 0 || maxDurationSeconds <= 0 || denom <= 0) {
215
+ return 0;
216
+ }
217
+ return (feeRate / denom) / (maxDurationSeconds / 86400);
218
+ }
219
+ /**
220
+ * Credit-deal repay fee in raw debt units, rounded up (Graphene ceil):
221
+ * (repay * feeRate + denom - 1) / denom. Zero when nothing is owed.
222
+ */
223
+ function creditDealFee(repayAmountInt, feeRate, feeDenom) {
224
+ const repayRaw = toFiniteOrNull(repayAmountInt);
225
+ const rateRaw = toFiniteOrNull(feeRate);
226
+ const denomRaw = toFiniteOrNull(feeDenom);
227
+ if (repayRaw === null || rateRaw === null || denomRaw === null || denomRaw <= 0)
228
+ return 0;
229
+ const repay = BigInt(Math.max(0, Math.trunc(repayRaw)));
230
+ const rate = BigInt(Math.max(0, Math.trunc(rateRaw)));
231
+ const denom = BigInt(Math.max(1, Math.trunc(denomRaw)));
232
+ if (repay <= 0n || rate <= 0n)
233
+ return 0;
234
+ return Number(((repay * rate) + denom - 1n) / denom);
235
+ }
236
+ export { normalizeCollateralMap, creditPriceOrientation, extractOfferConversionRate, collateralValueFromOfferPrice, requiredCollateralForBorrow, borrowAmountForCollateral, creditDealCollateralRatio, averageCollateralRatio, dailyOfferFeeRate, creditDealFee, };
237
+ //# sourceMappingURL=credit_pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit_pricing.js","sourceRoot":"","sources":["../../modules/credit_pricing.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,7 @@ declare class CreditRuntime {
83
83
  }): Promise<any>;
84
84
  _calculateCollateralDistribution(): Promise<void>;
85
85
  _creditPriceOrientation(collateralPrice: any, debtAsset: any, collateralAsset: any): string;
86
+ _precisionOfPair(debtAsset: any, collateralAsset: any): (assetId: string) => number | null;
86
87
  _extractRateFromCollateralMap(collateralMap: Map<string, any>, collateralAssetId: string, debtAsset: any, collateralAsset: any): number | null;
87
88
  _calculateBorrowAmountFromCollateral(collateralAmountInt: any, collateralPrice: any, debtAsset?: any, collateralAsset?: any): number | null;
88
89
  _enforceMaxBorrowAmount(policy: any, borrowInt: any, debtAsset: any, options?: Record<string, any>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"credit_runtime.d.ts","sourceRoot":"","sources":["../../modules/credit_runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credit_runtime.d.ts","sourceRoot":"","sources":["../../modules/credit_runtime.ts"],"names":[],"mappings":"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"}
@@ -14,9 +14,10 @@ import { writeJsonFileAtomic } from './bots_file_lock.js';
14
14
  import { resolveAssetByRef, nowIso } from './order/utils/system.js';
15
15
  import { FEE_PARAMETERS, DEFAULT_TARGET_CR, TIMING, NATIVE_CLIENT } from './constants.js';
16
16
  import { PATHS } from './paths.js';
17
- import { deriveLiquidityPoolTokenValue, ensureDir as ensureDirSync, } from './order/utils/system.js';
17
+ import { deriveLiquidityPoolTokenValue, derivePriceWithBridges, ensureDir as ensureDirSync, } from './order/utils/system.js';
18
18
  const storage = getStorage();
19
19
  import { buildCollateralFallbackPlan, buildDebtFirstCrPlan, positiveOrNull, resolveMinCollateralIncreaseThreshold, resolveTargetCollateralRatio, } from './cr_planner.js';
20
+ import { borrowAmountForCollateral as sharedBorrowAmountForCollateral, collateralValueFromOfferPrice as sharedCollateralValueFromOfferPrice, creditDealFee as sharedCreditDealFee, creditPriceOrientation as sharedCreditPriceOrientation, dailyOfferFeeRate as sharedDailyOfferFeeRate, extractOfferConversionRate as sharedExtractOfferConversionRate, normalizeCollateralMap, requiredCollateralForBorrow as sharedRequiredCollateralForBorrow, } from './credit_pricing.js';
20
21
  import { getErrorMessage } from './utils/errors.js';
21
22
  const CREDIT_FEE_RATE_DENOM = FEE_PARAMETERS.GRAPHENE_FEE_RATE_DENOM;
22
23
  const ZERO_ASSET_ID = NATIVE_CLIENT.CHAIN.CORE_ASSET_ID;
@@ -62,19 +63,6 @@ function toGrapheneCollateralRatio(value) {
62
63
  const scaled = Math.round(numeric * GRAPHENE_COLLATERAL_RATIO_DENOM);
63
64
  return Number.isInteger(scaled) && scaled > 0 && scaled <= 0xffff ? scaled : null;
64
65
  }
65
- function getMapEntries(value) {
66
- if (value instanceof Map)
67
- return Array.from(value.entries());
68
- if (Array.isArray(value)) {
69
- if (value.length > 0 && typeof value[0] === 'object' && !Array.isArray(value[0]) && value[0] !== null && 'key' in value[0] && 'value' in value[0]) {
70
- return value.map((item) => [item.key, item.value]);
71
- }
72
- return value;
73
- }
74
- if (value && typeof value === 'object')
75
- return Object.entries(value);
76
- return [];
77
- }
78
66
  function getPriceQuoteAssetId(price) {
79
67
  return price?.quote?.asset_id || null;
80
68
  }
@@ -115,15 +103,6 @@ function isMaxBorrowAmountError(err) {
115
103
  const message = String(err?.message || err || '');
116
104
  return /would exceed maxBorrowAmount/.test(message) || /exceeds maxBorrowAmountPerOperation/.test(message);
117
105
  }
118
- function normalizeCollateralMap(acceptableCollateral) {
119
- const result = new Map();
120
- for (const [assetId, price] of getMapEntries(acceptableCollateral)) {
121
- if (!assetId || !price)
122
- continue;
123
- result.set(String(assetId), price);
124
- }
125
- return result;
126
- }
127
106
  function resolveAutoRepayValue(value) {
128
107
  if (value === true)
129
108
  return 1;
@@ -724,13 +703,16 @@ class CreditRuntime {
724
703
  }
725
704
  }
726
705
  // Offer map had no usable entry — fall back to pool derivation for LP
727
- // shares. Only attempt when cached is stale to avoid hourly
706
+ // shares, then to universal DEX pricing (direct market, else bridge
707
+ // hops via BTS) so every collateral/debt pair resolves a rate even
708
+ // when the collateral or pool is not part of the credit offer.
709
+ // Only attempt when cached is stale to avoid hourly
728
710
  // deriveLiquidityPoolTokenValue failures when a fresh live-offer rate
729
711
  // would already have returned. Reuses debtAsset/collateralAsset
730
712
  // resolved above.
731
713
  if (!cachedIsFresh) {
732
714
  if (collateralAsset?.for_liquidity_pool && debtAsset?.id) {
733
- const poolRate = await deriveLiquidityPoolTokenValue(BitShares, collateralAsset.id, debtAsset.id).catch((e) => {
715
+ const poolRate = await deriveLiquidityPoolTokenValue(BitShares, collateralAsset.id, debtAsset.id, 'auto', true).catch((e) => {
734
716
  this.log(`credit runtime: pool token rate derivation failed for ${collateralAsset.id}/${debtAsset.id}: ${getErrorMessage(e)}`);
735
717
  return null;
736
718
  });
@@ -742,6 +724,20 @@ class CreditRuntime {
742
724
  return options.includeSource ? { price: poolRate, source: 'pool-derived' } : poolRate;
743
725
  }
744
726
  }
727
+ if (collateralAsset?.id && debtAsset?.id) {
728
+ const bridged = await derivePriceWithBridges(BitShares, collateralAsset.id, debtAsset.id).catch((e) => {
729
+ this.log(`credit runtime: market rate derivation failed for ${collateralAsset.id}/${debtAsset.id}: ${getErrorMessage(e)}`);
730
+ return null;
731
+ });
732
+ if (bridged && Number.isFinite(bridged.rate) && bridged.rate > 0) {
733
+ if (!this.state.positions[posKey])
734
+ this.state.positions[posKey] = {};
735
+ this.state.positions[posKey].creditConversionRate = bridged.rate;
736
+ this.state.positions[posKey].creditConversionRateAt = Date.now();
737
+ const source = bridged.path === 'direct' ? 'market-direct' : `market-${bridged.path}`;
738
+ return options.includeSource ? { price: bridged.rate, source } : bridged.rate;
739
+ }
740
+ }
745
741
  }
746
742
  if (options.includeSource) {
747
743
  return cachedIsFresh
@@ -865,42 +861,29 @@ class CreditRuntime {
865
861
  }
866
862
  }
867
863
  _creditPriceOrientation(collateralPrice, debtAsset, collateralAsset) {
868
- const baseAssetId = String(collateralPrice?.base?.asset_id || '');
869
- const quoteAssetId = String(collateralPrice?.quote?.asset_id || '');
870
- const debtAssetId = String(debtAsset?.id || '');
871
- const collateralAssetId = String(collateralAsset?.id || '');
872
- if (baseAssetId === debtAssetId && quoteAssetId === collateralAssetId)
873
- return 'core';
874
- if (baseAssetId === collateralAssetId && quoteAssetId === debtAssetId)
875
- return 'legacy-reversed';
876
- return 'core';
864
+ return sharedCreditPriceOrientation(String(collateralPrice?.base?.asset_id || ''), String(collateralPrice?.quote?.asset_id || ''), String(debtAsset?.id || ''), String(collateralAsset?.id || ''));
865
+ }
866
+ _precisionOfPair(debtAsset, collateralAsset) {
867
+ return (assetId) => {
868
+ if (debtAsset && String(assetId) === String(debtAsset.id))
869
+ return getAssetPrecision(debtAsset);
870
+ if (collateralAsset && String(assetId) === String(collateralAsset.id))
871
+ return getAssetPrecision(collateralAsset);
872
+ return null;
873
+ };
877
874
  }
878
875
  _extractRateFromCollateralMap(collateralMap, collateralAssetId, debtAsset, collateralAsset) {
879
- const price = collateralMap.get(collateralAssetId);
880
- if (!price)
881
- return null;
882
- const orientation = this._creditPriceOrientation(price, debtAsset, collateralAsset);
883
- const baseAmount = blockchainAmountToFloat(price?.base, orientation === 'legacy-reversed' ? collateralAsset : debtAsset);
884
- const quoteAmount = blockchainAmountToFloat(price?.quote, orientation === 'legacy-reversed' ? debtAsset : collateralAsset);
885
- if (baseAmount == null || quoteAmount == null || baseAmount <= 0)
886
- return null;
887
- const rate = orientation === 'legacy-reversed'
888
- ? quoteAmount / baseAmount
889
- : baseAmount / quoteAmount;
890
- if (!Number.isFinite(rate) || rate <= 0)
891
- return null;
876
+ const rate = sharedExtractOfferConversionRate(collateralMap, String(collateralAssetId), String(debtAsset?.id || ''), this._precisionOfPair(debtAsset, collateralAsset));
877
+ // The offer lists this collateral but the price is unusable (missing
878
+ // asset precision or invalid base/quote amounts) — log it, otherwise
879
+ // the null is indistinguishable from "not listed" downstream.
880
+ if (rate === null && collateralMap?.get(String(collateralAssetId)) != null) {
881
+ this.log(`credit runtime: offer lists ${collateralAssetId} but its price cannot be resolved (missing precision or invalid base/quote amounts)`);
882
+ }
892
883
  return rate;
893
884
  }
894
885
  _calculateBorrowAmountFromCollateral(collateralAmountInt, collateralPrice, debtAsset = null, collateralAsset = null) {
895
- const baseAmount = toFiniteNumber(collateralPrice?.base?.amount, undefined);
896
- const quoteAmount = toFiniteNumber(collateralPrice?.quote?.amount, undefined);
897
- if (!Number.isFinite(baseAmount) || !Number.isFinite(quoteAmount) || baseAmount <= 0 || quoteAmount <= 0) {
898
- return null;
899
- }
900
- if (this._creditPriceOrientation(collateralPrice, debtAsset, collateralAsset) === 'legacy-reversed') {
901
- return Math.floor((Number(collateralAmountInt) * quoteAmount) / baseAmount);
902
- }
903
- return Math.floor((Number(collateralAmountInt) * baseAmount) / quoteAmount);
886
+ return sharedBorrowAmountForCollateral(collateralAmountInt, collateralPrice, debtAsset?.id != null ? String(debtAsset.id) : null, collateralAsset?.id != null ? String(collateralAsset.id) : null);
904
887
  }
905
888
  _enforceMaxBorrowAmount(policy, borrowInt, debtAsset, options = {}) {
906
889
  const maxBorrowAmountValue = positiveOrNull(policy?.maxBorrowAmount);
@@ -1002,14 +985,8 @@ class CreditRuntime {
1002
985
  }
1003
986
  }
1004
987
  _calculateDailyFeeRate(offer) {
1005
- const feeRate = toFiniteNumber(offer?.fee_rate, 0) || 0;
1006
- const maxDurationSeconds = toFiniteNumber(offer?.max_duration_seconds, 0) || 0;
1007
- if (feeRate <= 0 || maxDurationSeconds <= 0)
1008
- return 0;
1009
988
  const feeRateDenom = this.bot?.config?.feeParams?.GRAPHENE_FEE_RATE_DENOM ?? FEE_PARAMETERS.GRAPHENE_FEE_RATE_DENOM;
1010
- const flatFeePercent = feeRate / feeRateDenom;
1011
- const durationDays = maxDurationSeconds / 86400;
1012
- return flatFeePercent / durationDays;
989
+ return sharedDailyOfferFeeRate(offer, feeRateDenom);
1013
990
  }
1014
991
  _getDefaultMaxFeeRatePerDay() {
1015
992
  return this.bot?.config?.feeParams?.DEFAULT_MAX_FEE_RATE_PER_DAY ?? FEE_PARAMETERS.DEFAULT_MAX_FEE_RATE_PER_DAY;
@@ -1046,43 +1023,21 @@ class CreditRuntime {
1046
1023
  return { allow: true, reason: null };
1047
1024
  }
1048
1025
  async _calculateCollateralValueInDebtAsset(collateralAmountInt, collateralAsset, debtAsset, collateralPrice) {
1049
- const collateralAmountFloat = blockchainToFloat(collateralAmountInt, collateralAsset.precision);
1050
- if (!Number.isFinite(collateralAmountFloat) || collateralAmountFloat <= 0) {
1051
- return null;
1052
- }
1053
1026
  if (collateralAsset?.for_liquidity_pool) {
1054
- const valuePerShare = await deriveLiquidityPoolTokenValue(BitShares, collateralAsset.id, debtAsset.id);
1027
+ const collateralAmountFloat = blockchainToFloat(collateralAmountInt, collateralAsset.precision);
1028
+ if (!Number.isFinite(collateralAmountFloat) || collateralAmountFloat <= 0) {
1029
+ return null;
1030
+ }
1031
+ const valuePerShare = await deriveLiquidityPoolTokenValue(BitShares, collateralAsset.id, debtAsset.id, 'auto', true);
1055
1032
  if (valuePerShare == null || !Number.isFinite(valuePerShare) || valuePerShare <= 0) {
1056
1033
  return null;
1057
1034
  }
1058
1035
  return collateralAmountFloat * valuePerShare;
1059
1036
  }
1060
- const orientation = this._creditPriceOrientation(collateralPrice, debtAsset, collateralAsset);
1061
- const baseAmountFloat = blockchainAmountToFloat(collateralPrice?.base, orientation === 'legacy-reversed' ? collateralAsset : debtAsset);
1062
- const quoteAmountFloat = blockchainAmountToFloat(collateralPrice?.quote, orientation === 'legacy-reversed' ? debtAsset : collateralAsset);
1063
- if (baseAmountFloat == null || quoteAmountFloat == null || baseAmountFloat <= 0 || quoteAmountFloat <= 0) {
1064
- return null;
1065
- }
1066
- if (orientation === 'legacy-reversed') {
1067
- return (collateralAmountFloat * quoteAmountFloat) / baseAmountFloat;
1068
- }
1069
- return (collateralAmountFloat * baseAmountFloat) / quoteAmountFloat;
1037
+ return this._calculateCreditOfferCollateralValueInDebtAsset(collateralAmountInt, collateralAsset, debtAsset, collateralPrice);
1070
1038
  }
1071
1039
  _calculateCreditOfferCollateralValueInDebtAsset(collateralAmountInt, collateralAsset, debtAsset, collateralPrice) {
1072
- const collateralAmountFloat = blockchainToFloat(collateralAmountInt, collateralAsset.precision);
1073
- if (!Number.isFinite(collateralAmountFloat) || collateralAmountFloat <= 0) {
1074
- return null;
1075
- }
1076
- const orientation = this._creditPriceOrientation(collateralPrice, debtAsset, collateralAsset);
1077
- const baseAmountFloat = blockchainAmountToFloat(collateralPrice?.base, orientation === 'legacy-reversed' ? collateralAsset : debtAsset);
1078
- const quoteAmountFloat = blockchainAmountToFloat(collateralPrice?.quote, orientation === 'legacy-reversed' ? debtAsset : collateralAsset);
1079
- if (baseAmountFloat == null || quoteAmountFloat == null || baseAmountFloat <= 0 || quoteAmountFloat <= 0) {
1080
- return null;
1081
- }
1082
- if (orientation === 'legacy-reversed') {
1083
- return (collateralAmountFloat * quoteAmountFloat) / baseAmountFloat;
1084
- }
1085
- return (collateralAmountFloat * baseAmountFloat) / quoteAmountFloat;
1040
+ return sharedCollateralValueFromOfferPrice(collateralAmountInt, collateralAsset?.precision, collateralPrice, String(debtAsset?.id || ''), String(collateralAsset?.id || ''), this._precisionOfPair(debtAsset, collateralAsset));
1086
1041
  }
1087
1042
  async _fetchBorrowerDeals() {
1088
1043
  if (this._borrowerDealsCache !== null)
@@ -1677,23 +1632,10 @@ class CreditRuntime {
1677
1632
  return op;
1678
1633
  }
1679
1634
  _calculateRequiredCollateral(borrowAmountInt, collateralPrice, debtAsset = null, collateralAsset = null) {
1680
- const baseAmount = toFiniteNumber(collateralPrice?.base?.amount, undefined);
1681
- const quoteAmount = toFiniteNumber(collateralPrice?.quote?.amount, undefined);
1682
- if (!Number.isFinite(baseAmount) || !Number.isFinite(quoteAmount) || baseAmount <= 0 || quoteAmount <= 0) {
1683
- return null;
1684
- }
1685
- if (this._creditPriceOrientation(collateralPrice, debtAsset, collateralAsset) === 'legacy-reversed') {
1686
- return Math.ceil((Number(borrowAmountInt) * baseAmount) / quoteAmount);
1687
- }
1688
- return Math.ceil((Number(borrowAmountInt) * quoteAmount) / baseAmount);
1635
+ return sharedRequiredCollateralForBorrow(borrowAmountInt, collateralPrice, debtAsset?.id != null ? String(debtAsset.id) : null, collateralAsset?.id != null ? String(collateralAsset.id) : null);
1689
1636
  }
1690
1637
  _calculateCreditFee(repayAmountInt, feeRate) {
1691
- const repay = BigInt(Math.max(0, Math.trunc(Number(repayAmountInt))));
1692
- const rate = BigInt(Math.max(0, Math.trunc(Number(feeRate))));
1693
- const denom = BigInt(CREDIT_FEE_RATE_DENOM);
1694
- if (repay <= 0n || rate <= 0n)
1695
- return 0;
1696
- return Number(((repay * rate) + denom - 1n) / denom);
1638
+ return sharedCreditDealFee(repayAmountInt, feeRate, CREDIT_FEE_RATE_DENOM);
1697
1639
  }
1698
1640
  async buildCreditDealRepayOperation(deal, repayAmount) {
1699
1641
  const dealSummary = typeof deal === 'object' ? parseDealSummary(deal) : null;