@blackcube/xgate-sdk 0.56.2 → 0.56.3
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.
- package/dist/index.cjs +38 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +38 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1623,6 +1623,8 @@ exports.TradingService = class TradingService {
|
|
|
1623
1623
|
* disent la même chose**. La forme native complète reste dans `xtras`, rien n'est perdu.
|
|
1624
1624
|
*
|
|
1625
1625
|
* **blofin ne l'expose pas** et lève ; les sept autres le servent.
|
|
1626
|
+
*
|
|
1627
|
+
* **hyperliquid en compte unifié lit le spot** (`unifiedAccountState`) : son état perp y vaut 0.
|
|
1626
1628
|
*/
|
|
1627
1629
|
async accountInfo(access) {
|
|
1628
1630
|
const perp = this.perpOf(access);
|
|
@@ -1632,7 +1634,42 @@ exports.TradingService = class TradingService {
|
|
|
1632
1634
|
);
|
|
1633
1635
|
}
|
|
1634
1636
|
const brut = await perp.getAccountInfo();
|
|
1635
|
-
|
|
1637
|
+
const etat = this.toAccountState(brut, access.xex);
|
|
1638
|
+
return access.xex === "hyperliquid" /* Hyperliquid */ ? this.unifiedAccountState(access, etat) : etat;
|
|
1639
|
+
}
|
|
1640
|
+
/**
|
|
1641
|
+
* HYPERLIQUID EN COMPTE UNIFIÉ — l'argent vit dans le spot, et l'état perp affiche 0.
|
|
1642
|
+
*
|
|
1643
|
+
* La doc HL : « unified account and portfolio margin show all balances and holds in the spot
|
|
1644
|
+
* clearinghouse state. Individual perp dex user states are not meaningful ». Lu côté perp, un
|
|
1645
|
+
* compte unifié de 101 USDC rend une équité de 0 — et tout appelant qui dimensionne une mise sur
|
|
1646
|
+
* l'équité refuse d'ouvrir (Blips, 2026-10-01 : « plafond d'engagement » sur un compte financé).
|
|
1647
|
+
*
|
|
1648
|
+
* Le mode est DEMANDÉ à HL (`getAbstraction`), jamais déduit des soldes : en mode standard
|
|
1649
|
+
* (`disabled`), le spot ne finance pas les perps, et le compter fausserait l'équité dans l'autre
|
|
1650
|
+
* sens. Hors `unifiedAccount`/`portfolioMargin`, l'état perp est rendu tel quel.
|
|
1651
|
+
*
|
|
1652
|
+
* L'équité est le total USDC du spot, le disponible ce total moins ce que HL bloque (`hold`).
|
|
1653
|
+
* **Le PnL latent n'y est pas ajouté** (décision Philippe, 2026-10-01) : la doc ne dit pas si le
|
|
1654
|
+
* total spot le contient déjà, et l'ajouter risquerait de le compter deux fois. En portfolio
|
|
1655
|
+
* margin, les autres actifs éligibles (HYPE, BTC, USDT) ne sont pas comptés non plus : seul l'USDC
|
|
1656
|
+
* finance ici. Le mode et le solde lu restent dans `xtras`.
|
|
1657
|
+
*/
|
|
1658
|
+
async unifiedAccountState(access, etat) {
|
|
1659
|
+
const source = createAccountXex(access.xex, access);
|
|
1660
|
+
const abstraction = await source.native.account().getAbstraction();
|
|
1661
|
+
if (abstraction.mode !== "unifiedAccount" && abstraction.mode !== "portfolioMargin") {
|
|
1662
|
+
return etat;
|
|
1663
|
+
}
|
|
1664
|
+
const usdc = (await source.account().getBalances()).find((balance) => balance.asset === "USDC");
|
|
1665
|
+
const total = usdc?.total ?? "0";
|
|
1666
|
+
const hold = Number(usdc?.xtras?.hold ?? 0);
|
|
1667
|
+
return {
|
|
1668
|
+
...etat,
|
|
1669
|
+
equity: total,
|
|
1670
|
+
available: String(Math.max(0, Number(total) - hold)),
|
|
1671
|
+
xtras: { ...etat.xtras, abstraction: abstraction.mode, spotUsdc: usdc ?? null }
|
|
1672
|
+
};
|
|
1636
1673
|
}
|
|
1637
1674
|
/**
|
|
1638
1675
|
* RÈGLE LE LEVIER d'une paire, avant d'ouvrir.
|