hyperliquid-prime 0.1.3 → 0.1.5

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 (67) hide show
  1. package/README.md +87 -30
  2. package/dist/cli/program.d.ts.map +1 -1
  3. package/dist/cli/program.js +32 -7
  4. package/dist/cli/program.js.map +1 -1
  5. package/dist/collateral/manager.d.ts +2 -2
  6. package/dist/collateral/manager.d.ts.map +1 -1
  7. package/dist/collateral/manager.js +487 -91
  8. package/dist/collateral/manager.js.map +1 -1
  9. package/dist/config.d.ts +5 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/execution/executor.d.ts +23 -0
  13. package/dist/execution/executor.d.ts.map +1 -1
  14. package/dist/execution/executor.js +346 -102
  15. package/dist/execution/executor.js.map +1 -1
  16. package/dist/execution/types.d.ts +23 -2
  17. package/dist/execution/types.d.ts.map +1 -1
  18. package/dist/index.d.ts +51 -12
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +227 -26
  21. package/dist/index.js.map +1 -1
  22. package/dist/market/registry.d.ts +3 -0
  23. package/dist/market/registry.d.ts.map +1 -1
  24. package/dist/market/registry.js +53 -23
  25. package/dist/market/registry.js.map +1 -1
  26. package/dist/market/types.d.ts +6 -0
  27. package/dist/market/types.d.ts.map +1 -1
  28. package/dist/position/manager.d.ts +6 -3
  29. package/dist/position/manager.d.ts.map +1 -1
  30. package/dist/position/manager.js +58 -31
  31. package/dist/position/manager.js.map +1 -1
  32. package/dist/provider/nktkas.d.ts +38 -3
  33. package/dist/provider/nktkas.d.ts.map +1 -1
  34. package/dist/provider/nktkas.js +202 -35
  35. package/dist/provider/nktkas.js.map +1 -1
  36. package/dist/provider/provider.d.ts +29 -3
  37. package/dist/provider/provider.d.ts.map +1 -1
  38. package/dist/provider/schemas.d.ts +933 -0
  39. package/dist/provider/schemas.d.ts.map +1 -0
  40. package/dist/provider/schemas.js +330 -0
  41. package/dist/provider/schemas.js.map +1 -0
  42. package/dist/provider/types.d.ts +88 -1
  43. package/dist/provider/types.d.ts.map +1 -1
  44. package/dist/router/router.d.ts +3 -3
  45. package/dist/router/router.d.ts.map +1 -1
  46. package/dist/router/router.js +98 -25
  47. package/dist/router/router.js.map +1 -1
  48. package/dist/router/scorer.d.ts +3 -1
  49. package/dist/router/scorer.d.ts.map +1 -1
  50. package/dist/router/scorer.js +28 -5
  51. package/dist/router/scorer.js.map +1 -1
  52. package/dist/router/types.d.ts +11 -0
  53. package/dist/router/types.d.ts.map +1 -1
  54. package/dist/router/types.js.map +1 -1
  55. package/dist/types/result.d.ts +16 -0
  56. package/dist/types/result.d.ts.map +1 -0
  57. package/dist/types/result.js +9 -0
  58. package/dist/types/result.js.map +1 -0
  59. package/dist/utils/asset.d.ts +2 -0
  60. package/dist/utils/asset.d.ts.map +1 -0
  61. package/dist/utils/asset.js +18 -0
  62. package/dist/utils/asset.js.map +1 -0
  63. package/dist/utils/order-precision.d.ts +16 -0
  64. package/dist/utils/order-precision.d.ts.map +1 -0
  65. package/dist/utils/order-precision.js +45 -0
  66. package/dist/utils/order-precision.js.map +1 -0
  67. package/package.json +7 -3
@@ -1,8 +1,11 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  export class Executor {
2
3
  provider;
3
4
  logger;
4
5
  wireBuilder;
6
+ builderEnabledForOrders = false;
5
7
  approvalChecked = false;
8
+ builderManualApprovalWarned = false;
6
9
  constructor(provider, logger, builderConfig) {
7
10
  this.provider = provider;
8
11
  this.logger = logger.child({ module: "executor" });
@@ -28,9 +31,48 @@ export class Executor {
28
31
  user: userAddress,
29
32
  builder: this.wireBuilder.b,
30
33
  });
31
- if (currentApproval >= this.wireBuilder.f) {
32
- this.logger.debug({ builder: this.wireBuilder.b, approved: currentApproval, required: this.wireBuilder.f }, "Builder fee already approved");
34
+ if (this.isBuilderApprovalSufficient(currentApproval, this.wireBuilder.f)) {
35
+ this.logger.debug({
36
+ builder: this.wireBuilder.b,
37
+ approvedRaw: currentApproval,
38
+ approvedTenthsBps: this.normalizedApprovalTenthsBps(currentApproval),
39
+ requiredTenthsBps: this.wireBuilder.f,
40
+ }, "Builder fee already approved");
41
+ this.builderEnabledForOrders = true;
33
42
  this.approvalChecked = true;
43
+ this.builderManualApprovalWarned = false;
44
+ return;
45
+ }
46
+ const signerAddress = this.provider.getSignerAddress?.();
47
+ const isAgentSession = Boolean(signerAddress && signerAddress.toLowerCase() !== userAddress.toLowerCase());
48
+ if (isAgentSession) {
49
+ // The master wallet may have just approved the builder fee (e.g. via the trade form's
50
+ // pre-trade actions). Poll briefly to allow the on-chain state to propagate before
51
+ // giving up.
52
+ const approved = await this.pollBuilderApproval(userAddress);
53
+ if (approved) {
54
+ this.builderEnabledForOrders = true;
55
+ this.approvalChecked = true;
56
+ this.builderManualApprovalWarned = false;
57
+ this.logger.info({ builder: this.wireBuilder.b, user: userAddress }, "Builder fee confirmed after polling");
58
+ return;
59
+ }
60
+ // Do NOT cache the negative result for agent sessions. The master wallet
61
+ // may approve the builder fee at any time (e.g. via the frontend pre-trade
62
+ // MetaMask flow), so we must re-check on every trade until approved.
63
+ this.builderEnabledForOrders = false;
64
+ if (!this.builderManualApprovalWarned) {
65
+ this.logger.warn({
66
+ builder: this.wireBuilder.b,
67
+ signer: signerAddress,
68
+ user: userAddress,
69
+ approvedRaw: currentApproval,
70
+ approvedTenthsBps: this.normalizedApprovalTenthsBps(currentApproval),
71
+ requiredTenthsBps: this.wireBuilder.f,
72
+ maxFeeRate: `${(this.wireBuilder.f / 1000).toFixed(2)}%`,
73
+ }, "Builder fee not approved for user. Approve with master wallet (setup flow) to enable builder fees.");
74
+ this.builderManualApprovalWarned = true;
75
+ }
34
76
  return;
35
77
  }
36
78
  // Convert wire 0.1bps back to percentage string for approval
@@ -41,14 +83,31 @@ export class Executor {
41
83
  maxFeeRate,
42
84
  builder: this.wireBuilder.b,
43
85
  });
86
+ this.builderEnabledForOrders = true;
44
87
  this.approvalChecked = true;
45
88
  this.logger.info("Builder fee approved successfully");
46
89
  }
47
90
  catch (error) {
48
- this.logger.warn({ error }, "Failed to check/approve builder fee — will retry on next order. Orders may fail if not pre-approved.");
91
+ this.builderEnabledForOrders = false;
92
+ if (this.isDepositRequiredError(error)) {
93
+ // Terminal condition until funds are deposited: avoid noisy retries every order.
94
+ this.approvalChecked = true;
95
+ this.logger.warn({ error }, "Builder fee approval unavailable before first deposit; disabling builder fee checks for this session.");
96
+ return;
97
+ }
98
+ this.logger.warn({ error }, "Failed to check/approve builder fee — continuing without builder fee for this order; will retry next order.");
49
99
  // Do NOT set approvalChecked = true so we retry on the next order attempt
50
100
  }
51
101
  }
102
+ /**
103
+ * Reset the cached builder approval state so the next trade re-checks on-chain.
104
+ * Call after the master wallet approves the builder fee (e.g. after setup flow).
105
+ */
106
+ resetBuilderApprovalCheck() {
107
+ this.approvalChecked = false;
108
+ this.builderEnabledForOrders = false;
109
+ this.builderManualApprovalWarned = false;
110
+ }
52
111
  /**
53
112
  * Execute a plan generated by the router.
54
113
  * This is the ONLY place orders are placed.
@@ -62,55 +121,42 @@ export class Executor {
62
121
  price: plan.price,
63
122
  }, "Executing order");
64
123
  try {
124
+ await this.applyLeverageIfRequested(plan);
125
+ const builder = this.builderEnabledForOrders ? this.wireBuilder ?? undefined : undefined;
126
+ const cloid = `0x${randomUUID().replace(/-/g, "")}`;
65
127
  const result = await this.provider.placeOrder({
66
128
  assetIndex: plan.market.assetIndex,
67
129
  isBuy: plan.side === "buy",
68
130
  price: plan.price,
69
131
  size: plan.size,
70
- reduceOnly: false,
132
+ reduceOnly: plan.reduceOnly ?? false,
71
133
  orderType: plan.orderType,
72
- }, this.wireBuilder ?? undefined);
73
- // Parse the order result to extract fill info
74
- const status = result.statuses[0];
75
- let orderId;
76
- let filledSize = "0";
77
- let avgPrice = "0";
78
- if (status && typeof status === "object") {
79
- if ("filled" in status) {
80
- orderId = status.filled.oid;
81
- filledSize = status.filled.totalSz;
82
- avgPrice = status.filled.avgPx;
83
- }
84
- else if ("resting" in status) {
85
- orderId = status.resting.oid;
86
- // Resting means not yet filled — IOC orders shouldn't reach here
87
- filledSize = "0";
88
- avgPrice = plan.price;
89
- }
90
- else if ("error" in status) {
91
- this.logger.error({ error: status.error, plan }, "Order rejected");
92
- return {
93
- success: false,
94
- market: plan.market,
95
- side: plan.side,
96
- requestedSize: plan.size,
97
- filledSize: "0",
98
- avgPrice: "0",
99
- orderId: undefined,
100
- timestamp: Date.now(),
101
- error: status.error,
102
- raw: result,
103
- };
104
- }
134
+ cloid,
135
+ }, builder);
136
+ const parsed = this.parseOrderStatus(result.statuses[0], plan.price);
137
+ if (!parsed.success) {
138
+ this.logger.error({ error: parsed.error, status: result.statuses[0], plan }, "Order rejected");
139
+ return {
140
+ success: false,
141
+ market: plan.market,
142
+ side: plan.side,
143
+ requestedSize: plan.size,
144
+ filledSize: parsed.filledSize,
145
+ avgPrice: parsed.avgPrice,
146
+ orderId: parsed.orderId,
147
+ timestamp: Date.now(),
148
+ error: parsed.error ?? "Order rejected",
149
+ raw: result,
150
+ };
105
151
  }
106
152
  const receipt = {
107
153
  success: true,
108
154
  market: plan.market,
109
155
  side: plan.side,
110
156
  requestedSize: plan.size,
111
- filledSize,
112
- avgPrice,
113
- orderId,
157
+ filledSize: parsed.filledSize,
158
+ avgPrice: parsed.avgPrice,
159
+ orderId: parsed.orderId,
114
160
  timestamp: Date.now(),
115
161
  raw: result,
116
162
  };
@@ -140,6 +186,9 @@ export class Executor {
140
186
  /**
141
187
  * Execute a split order plan across multiple markets.
142
188
  * Flow: prepare collateral → batch place all leg orders → aggregate receipts.
189
+ *
190
+ * Returns per-leg receipts so callers can see exactly which legs succeeded
191
+ * even when some fail (partial fill scenario).
143
192
  */
144
193
  async executeSplit(plan, collateralManager, userAddress) {
145
194
  await this.ensureBuilderApproval(userAddress);
@@ -150,24 +199,39 @@ export class Executor {
150
199
  markets: plan.legs.map((l) => l.market.coin),
151
200
  }, "Executing split order");
152
201
  const timestamp = Date.now();
153
- // Step 1: Estimate collateral using live balances at execution time.
202
+ // Step 1: Apply requested leverage per leg/market before any transfers/orders.
203
+ try {
204
+ await this.applySplitLeverage(plan);
205
+ }
206
+ catch (error) {
207
+ return this.failedSplitReceipt(plan, timestamp, {
208
+ success: false,
209
+ swapsExecuted: [],
210
+ abstractionWasEnabled: false,
211
+ error: error instanceof Error ? error.message : String(error),
212
+ }, `Leverage setup failed: ${error instanceof Error ? error.message : String(error)}`);
213
+ }
214
+ // Step 2: Estimate collateral using live balances at execution time.
154
215
  const allocations = this.buildAllocationsFromLegs(plan);
155
216
  const collateralPlan = await collateralManager.estimateRequirements(allocations, userAddress);
156
- // Step 2: Prepare collateral (enable abstraction, swap if needed)
217
+ this.logger.info({
218
+ user: userAddress,
219
+ swapsNeeded: collateralPlan.swapsNeeded,
220
+ requirements: collateralPlan.requirements.map((req) => ({
221
+ token: req.token,
222
+ amountNeeded: req.amountNeeded,
223
+ currentBalance: req.currentBalance,
224
+ shortfall: req.shortfall,
225
+ swapFrom: req.swapFrom,
226
+ estimatedSwapCostBps: req.estimatedSwapCostBps,
227
+ })),
228
+ }, "Collateral estimate at execution time (live balances)");
229
+ // Step 3: Prepare collateral (enable abstraction, swap if needed)
157
230
  let collateralReceipt;
158
231
  if (collateralPlan.swapsNeeded) {
159
232
  collateralReceipt = await collateralManager.prepare(collateralPlan, userAddress);
160
233
  if (!collateralReceipt.success) {
161
- return {
162
- success: false,
163
- legs: [],
164
- collateralReceipt,
165
- totalRequestedSize: plan.totalSize,
166
- totalFilledSize: "0",
167
- aggregateAvgPrice: "0",
168
- timestamp,
169
- error: `Collateral preparation failed: ${collateralReceipt.error}`,
170
- };
234
+ return this.failedSplitReceipt(plan, timestamp, collateralReceipt, `Collateral preparation failed: ${collateralReceipt.error}`);
171
235
  }
172
236
  }
173
237
  else {
@@ -177,7 +241,7 @@ export class Executor {
177
241
  abstractionWasEnabled: false,
178
242
  };
179
243
  }
180
- // Step 3: Place all leg orders via batchOrders (single atomic API call)
244
+ // Step 4: Place all leg orders via batchOrders (single atomic API call)
181
245
  try {
182
246
  const orderParams = plan.legs.map((leg) => ({
183
247
  assetIndex: leg.market.assetIndex,
@@ -186,98 +250,105 @@ export class Executor {
186
250
  size: leg.size,
187
251
  reduceOnly: false,
188
252
  orderType: leg.orderType,
253
+ cloid: `0x${randomUUID().replace(/-/g, "")}`,
189
254
  }));
190
- const result = await this.provider.batchOrders(orderParams, this.wireBuilder ?? undefined);
191
- // Step 4: Map each status to a per-leg receipt
255
+ const result = await this.provider.batchOrders(orderParams, this.builderEnabledForOrders ? this.wireBuilder ?? undefined : undefined);
256
+ // Step 5: Map each status to a per-leg receipt
192
257
  const legs = plan.legs.map((leg, i) => {
193
258
  const status = result.statuses[i];
194
- let orderId;
195
- let filledSize = "0";
196
- let avgPrice = "0";
197
- let success = false;
198
- let error;
199
- if (status && typeof status === "object") {
200
- if ("filled" in status) {
201
- orderId = status.filled.oid;
202
- filledSize = status.filled.totalSz;
203
- avgPrice = status.filled.avgPx;
204
- success = true;
205
- }
206
- else if ("resting" in status) {
207
- orderId = status.resting.oid;
208
- filledSize = "0";
209
- avgPrice = leg.price;
210
- success = true; // Order is resting, not failed
211
- }
212
- else if ("error" in status) {
213
- error = status.error;
214
- }
215
- }
259
+ const parsed = this.parseOrderStatus(status, leg.price);
216
260
  return {
217
- success,
218
261
  market: leg.market,
219
262
  side: leg.side,
220
263
  requestedSize: leg.size,
221
- filledSize,
222
- avgPrice,
223
- orderId,
224
- timestamp,
225
- error,
264
+ filledSize: parsed.filledSize,
265
+ avgPrice: parsed.avgPrice,
266
+ orderId: parsed.orderId,
267
+ success: parsed.success,
268
+ error: parsed.error,
226
269
  raw: status,
227
270
  };
228
271
  });
229
- // Step 5: Aggregate results
272
+ // Step 6: Aggregate results
230
273
  let totalFilledSize = 0;
231
274
  let totalFilledCost = 0;
232
- let allSuccess = true;
275
+ let succeededCount = 0;
276
+ let failedCount = 0;
233
277
  for (const leg of legs) {
234
278
  const filled = parseFloat(leg.filledSize);
235
279
  const price = parseFloat(leg.avgPrice);
236
280
  totalFilledSize += filled;
237
281
  totalFilledCost += filled * price;
238
- if (!leg.success)
239
- allSuccess = false;
282
+ if (leg.success) {
283
+ succeededCount++;
284
+ }
285
+ else {
286
+ failedCount++;
287
+ }
240
288
  }
289
+ const allSucceeded = failedCount === 0;
290
+ const partialFill = succeededCount > 0 && failedCount > 0;
241
291
  const aggregateAvgPrice = totalFilledSize > 0
242
292
  ? (totalFilledCost / totalFilledSize).toFixed(6)
243
293
  : "0";
294
+ const warnings = [];
295
+ if (partialFill) {
296
+ const failedLegs = legs.filter((l) => !l.success);
297
+ warnings.push(`Partial fill: ${succeededCount}/${legs.length} legs succeeded. ` +
298
+ `Failed: ${failedLegs.map((l) => `${l.market.coin} (${l.error ?? "unknown"})`).join(", ")}`);
299
+ }
244
300
  this.logger.info({
245
- allSuccess,
301
+ allSucceeded,
302
+ partialFill,
246
303
  totalFilledSize,
247
304
  aggregateAvgPrice,
248
- legsSucceeded: legs.filter((l) => l.success).length,
249
- legsFailed: legs.filter((l) => !l.success).length,
305
+ legsSucceeded: succeededCount,
306
+ legsFailed: failedCount,
250
307
  }, "Split order executed");
251
308
  return {
252
- success: allSuccess,
309
+ success: allSucceeded,
310
+ allSucceeded,
311
+ partialFill,
253
312
  legs,
254
313
  collateralReceipt,
255
314
  totalRequestedSize: plan.totalSize,
256
315
  totalFilledSize: totalFilledSize.toString(),
257
316
  aggregateAvgPrice,
258
317
  timestamp,
318
+ warnings,
259
319
  };
260
320
  }
261
321
  catch (error) {
262
322
  this.logger.error({ error }, "Split order execution failed");
263
- return {
264
- success: false,
265
- legs: [],
266
- collateralReceipt,
267
- totalRequestedSize: plan.totalSize,
268
- totalFilledSize: "0",
269
- aggregateAvgPrice: "0",
270
- timestamp,
271
- error: error instanceof Error ? error.message : String(error),
272
- };
323
+ return this.failedSplitReceipt(plan, timestamp, collateralReceipt, error instanceof Error ? error.message : String(error));
273
324
  }
274
325
  }
326
+ /** Build a failed SplitExecutionReceipt with consistent shape. */
327
+ failedSplitReceipt(plan, timestamp, collateralReceipt, error) {
328
+ return {
329
+ success: false,
330
+ allSucceeded: false,
331
+ partialFill: false,
332
+ legs: [],
333
+ collateralReceipt,
334
+ totalRequestedSize: plan.totalSize,
335
+ totalFilledSize: "0",
336
+ aggregateAvgPrice: "0",
337
+ timestamp,
338
+ warnings: [],
339
+ error,
340
+ };
341
+ }
275
342
  buildAllocationsFromLegs(plan) {
276
343
  const totalSize = plan.legs.reduce((sum, leg) => sum + parseFloat(leg.size), 0);
277
344
  return plan.legs.map((leg) => {
278
345
  const size = parseFloat(leg.size);
279
346
  const estimatedAvgPrice = parseFloat(leg.price);
280
- const estimatedCost = size * estimatedAvgPrice;
347
+ const notional = size * estimatedAvgPrice;
348
+ const leverage = Number.isFinite(leg.leverage) && (leg.leverage ?? 0) > 0
349
+ ? leg.leverage
350
+ : 1;
351
+ const estimatedCost = notional / leverage;
281
352
  return {
282
353
  market: leg.market,
283
354
  size,
@@ -287,5 +358,178 @@ export class Executor {
287
358
  };
288
359
  });
289
360
  }
361
+ async applyLeverageIfRequested(plan) {
362
+ if (plan.leverage === undefined)
363
+ return;
364
+ if (!Number.isFinite(plan.market.assetIndex)) {
365
+ throw new Error(`Invalid asset index "${plan.market.assetIndex}" for ${plan.market.coin}`);
366
+ }
367
+ if (!Number.isFinite(plan.leverage) || plan.leverage <= 0) {
368
+ throw new Error(`Invalid leverage "${plan.leverage}" for ${plan.market.coin}`);
369
+ }
370
+ // Safety clamp: never send leverage exceeding the market's maximum to the exchange
371
+ const maxLev = plan.market.maxLeverage;
372
+ let effective = plan.leverage;
373
+ if (maxLev > 0 && effective > maxLev) {
374
+ this.logger.warn({ market: plan.market.coin, requested: effective, max: maxLev }, "Clamping leverage to market maximum (safety guard)");
375
+ effective = maxLev;
376
+ }
377
+ let isCross = plan.isCross ?? true;
378
+ if (isCross && plan.market.onlyIsolated) {
379
+ this.logger.warn({ market: plan.market.coin, assetIndex: plan.market.assetIndex }, "Cross margin not supported for this asset; switching leverage update to isolated margin");
380
+ isCross = false;
381
+ }
382
+ this.logger.info({ market: plan.market.coin, assetIndex: plan.market.assetIndex, leverage: effective, isCross }, "Applying leverage before execution");
383
+ await this.provider.setLeverage(plan.market.assetIndex, effective, isCross);
384
+ }
385
+ async applySplitLeverage(plan) {
386
+ const applied = new Set();
387
+ for (const leg of plan.legs) {
388
+ if (leg.leverage === undefined)
389
+ continue;
390
+ const key = `${leg.market.coin}:${leg.leverage}:${leg.isCross ?? true}`;
391
+ if (applied.has(key))
392
+ continue;
393
+ await this.applyLeverageIfRequested(leg);
394
+ applied.add(key);
395
+ }
396
+ }
397
+ parseOrderStatus(status, fallbackPrice) {
398
+ if (!status) {
399
+ return {
400
+ success: false,
401
+ orderId: undefined,
402
+ filledSize: "0",
403
+ avgPrice: "0",
404
+ error: "Exchange returned no order status.",
405
+ };
406
+ }
407
+ if (typeof status === "string") {
408
+ if (status === "waitingForFill" || status === "waitingForTrigger") {
409
+ return {
410
+ success: false,
411
+ orderId: undefined,
412
+ filledSize: "0",
413
+ avgPrice: "0",
414
+ error: `Order did not fill immediately (${status}).`,
415
+ };
416
+ }
417
+ return {
418
+ success: false,
419
+ orderId: undefined,
420
+ filledSize: "0",
421
+ avgPrice: "0",
422
+ error: `Unknown order status: ${status}`,
423
+ };
424
+ }
425
+ if (typeof status !== "object") {
426
+ return {
427
+ success: false,
428
+ orderId: undefined,
429
+ filledSize: "0",
430
+ avgPrice: "0",
431
+ error: "Unrecognized order status payload.",
432
+ };
433
+ }
434
+ const value = status;
435
+ if ("filled" in value && value.filled && typeof value.filled === "object") {
436
+ const filled = value.filled;
437
+ const rawSize = typeof filled.totalSz === "string" ? filled.totalSz : "0";
438
+ const rawPrice = typeof filled.avgPx === "string" ? filled.avgPx : "0";
439
+ const parsedSize = parseFloat(rawSize);
440
+ const parsedPrice = parseFloat(rawPrice);
441
+ // Sanity: reject nonsensical fills (negative or non-finite values)
442
+ if (!Number.isFinite(parsedSize) || parsedSize < 0) {
443
+ return {
444
+ success: false,
445
+ orderId: typeof filled.oid === "number" ? filled.oid : undefined,
446
+ filledSize: "0",
447
+ avgPrice: "0",
448
+ error: `Exchange returned invalid fill size: ${rawSize}`,
449
+ };
450
+ }
451
+ if (!Number.isFinite(parsedPrice) || parsedPrice < 0) {
452
+ return {
453
+ success: false,
454
+ orderId: typeof filled.oid === "number" ? filled.oid : undefined,
455
+ filledSize: "0",
456
+ avgPrice: "0",
457
+ error: `Exchange returned invalid fill price: ${rawPrice}`,
458
+ };
459
+ }
460
+ return {
461
+ success: true,
462
+ orderId: typeof filled.oid === "number" ? filled.oid : undefined,
463
+ filledSize: rawSize,
464
+ avgPrice: rawPrice,
465
+ };
466
+ }
467
+ if ("resting" in value && value.resting && typeof value.resting === "object") {
468
+ const resting = value.resting;
469
+ return {
470
+ success: true,
471
+ orderId: typeof resting.oid === "number" ? resting.oid : undefined,
472
+ filledSize: "0",
473
+ avgPrice: fallbackPrice,
474
+ };
475
+ }
476
+ if ("error" in value) {
477
+ return {
478
+ success: false,
479
+ orderId: undefined,
480
+ filledSize: "0",
481
+ avgPrice: "0",
482
+ error: typeof value.error === "string" ? value.error : "Order rejected.",
483
+ };
484
+ }
485
+ return {
486
+ success: false,
487
+ orderId: undefined,
488
+ filledSize: "0",
489
+ avgPrice: "0",
490
+ error: "Unknown order status payload from exchange.",
491
+ };
492
+ }
493
+ isDepositRequiredError(error) {
494
+ const message = error instanceof Error ? error.message : String(error);
495
+ return /must deposit before performing actions/i.test(message);
496
+ }
497
+ normalizedApprovalTenthsBps(rawApproval) {
498
+ if (!Number.isFinite(rawApproval) || rawApproval <= 0)
499
+ return 0;
500
+ const raw = Math.max(0, rawApproval);
501
+ const candidates = [raw, raw * 10];
502
+ if (raw < 1) {
503
+ candidates.push(raw * 1000);
504
+ }
505
+ return Math.max(...candidates);
506
+ }
507
+ isBuilderApprovalSufficient(rawApproval, requiredTenthsBps) {
508
+ return this.normalizedApprovalTenthsBps(rawApproval) >= requiredTenthsBps;
509
+ }
510
+ /**
511
+ * Poll maxBuilderFee a few times with short delays to allow on-chain state propagation.
512
+ * The master wallet may have just signed the approval via the frontend pre-trade flow.
513
+ */
514
+ async pollBuilderApproval(userAddress, retries = 4, delayMs = 400) {
515
+ if (!this.wireBuilder)
516
+ return false;
517
+ for (let i = 0; i < retries; i++) {
518
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
519
+ try {
520
+ const approval = await this.provider.maxBuilderFee({
521
+ user: userAddress,
522
+ builder: this.wireBuilder.b,
523
+ });
524
+ if (this.isBuilderApprovalSufficient(approval, this.wireBuilder.f)) {
525
+ return true;
526
+ }
527
+ }
528
+ catch {
529
+ // Ignore transient errors during polling
530
+ }
531
+ }
532
+ return false;
533
+ }
290
534
  }
291
535
  //# sourceMappingURL=executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"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"}