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