@blackcube/xgate-sdk 0.23.0 → 0.25.0

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.ts CHANGED
@@ -969,23 +969,42 @@ interface IProtection {
969
969
  * Ce que l'appelant fournit. **Les pourcentages sont des écarts au prix d'entrée**, en fraction
970
970
  * (0.01 = 1 %) : `slPct: 0.02` place le stop 2 % sous l'entrée en long, 2 % au-dessus en short.
971
971
  */
972
+ /**
973
+ * UN NIVEAU DE SORTIE — dit en ÉCART ou en PRIX, jamais les deux.
974
+ *
975
+ * Les deux façons de penser un objectif coexistent réellement : « je sors si ça monte de 10 % »
976
+ * raisonne en risque, « je sors si ça touche 62 500 » raisonne en niveau technique. Obliger à
977
+ * convertir l'un dans l'autre revient à faire calculer l'appelant, donc à déplacer l'erreur chez lui.
978
+ *
979
+ * L'union est **exclusive** par construction : donner les deux ne compile pas, et n'en donner aucun
980
+ * non plus. C'est ce qui rend impossible un objectif à moitié défini.
981
+ */
982
+ type ITarget = {
983
+ pct: number;
984
+ price?: never;
985
+ } | {
986
+ price: number;
987
+ pct?: never;
988
+ };
972
989
  interface IProtectionInput {
973
990
  /** Prix d'entrée de référence. */
974
991
  entry: number;
975
992
  direction: Direction;
976
993
  /** Taille de la position, **en unités de base**. */
977
994
  size: number;
978
- /** Écart du stop au prix d'entrée, en fraction. Toujours du côté perdant. */
979
- slPct: number;
980
995
  /**
981
- * Les take-profits, dans l'ordre. `pct` est l'écart au prix d'entrée (côté gagnant) et `part` la
982
- * fraction de la position à sortir à ce niveau.
996
+ * Le stop — en **écart** au prix d'entrée (`{ pct: 0.02 }`) ou en **prix absolu**
997
+ * (`{ price: 62500 }`). Toujours du côté perdant quand il est donné en écart.
998
+ */
999
+ sl: ITarget;
1000
+ /**
1001
+ * Les take-profits, dans l'ordre. Chacun porte son niveau — en écart ou en prix — et `part`, la
1002
+ * fraction de la POSITION à sortir là (toujours un pourcentage, jamais un prix).
983
1003
  *
984
1004
  * **Une part à 0 ne produit AUCUN leg** — c'est un marqueur (un palier de breakeven, par exemple),
985
1005
  * pas un ordre. Sauf s'il s'agit du dernier : celui-là clôture toujours.
986
1006
  */
987
- tps: Array<{
988
- pct: number;
1007
+ tps: Array<ITarget & {
989
1008
  part: number;
990
1009
  }>;
991
1010
  /** Pas de prix de la paire. */
@@ -1016,6 +1035,12 @@ declare function roundPrice(value: number, tickSize?: string | null, lotSize?: s
1016
1035
  * L'appelant donne un prix d'entrée, un sens et des écarts ; il ne calcule aucun prix lui-même.
1017
1036
  * Le stop part du côté perdant, les take-profits du côté gagnant — le sens s'en occupe.
1018
1037
  */
1038
+ /**
1039
+ * Les niveaux depuis des POURCENTAGES seuls — forme courte quand tout est exprimé en écart.
1040
+ *
1041
+ * {@link buildProtection} ne l'utilise plus : il résout chaque niveau séparément, puisqu'un stop
1042
+ * peut être donné en écart et un take-profit en prix absolu dans le même appel.
1043
+ */
1019
1044
  declare function buildLevels(entry: number, direction: Direction, slPct: number, tpPcts: readonly number[]): {
1020
1045
  sl: number;
1021
1046
  tps: number[];
@@ -1128,6 +1153,69 @@ interface IPosition {
1128
1153
  margin: string | null;
1129
1154
  xtras?: Record<string, unknown>;
1130
1155
  }
1156
+ /**
1157
+ * UNE TRANSACTION PUBLIQUE — celles de tout le monde sur un marché, pas les siennes.
1158
+ *
1159
+ * À ne pas confondre avec {@link ITrade}, qui est une exécution **du compte**. Celle-ci n'a ni
1160
+ * frais, ni PnL, ni identifiant d'ordre : on ne voit que ce que le marché montre.
1161
+ */
1162
+ interface IPublicTrade {
1163
+ xex: XgateEx;
1164
+ symbolXex: string;
1165
+ price: string;
1166
+ size: string;
1167
+ /** Sens de l'AGRESSEUR : `buy` = quelqu'un a pris l'offre. */
1168
+ side: Side;
1169
+ tradedAt: Date;
1170
+ xtras?: Record<string, unknown>;
1171
+ }
1172
+ /**
1173
+ * L'ÉTAT D'UN COMPTE — ce que toutes les venues disent, sous des noms différents.
1174
+ *
1175
+ * Les formes natives ne se ressemblent pas : hyperliquid range son équité sous
1176
+ * `marginSummary.accountValue`, pacifica sous `accountEquity`, aster sous `totalMarginBalance`.
1177
+ * **Mais les concepts, eux, sont les mêmes** — c'est exactement ce qu'XGate existe pour normaliser.
1178
+ *
1179
+ * `xtras` conserve la forme native complète : ce qui est propre à une venue n'est pas perdu, il
1180
+ * n'est simplement pas promu au rang de contrat.
1181
+ */
1182
+ interface IAccountState {
1183
+ xex: XgateEx;
1184
+ /** Valeur totale du compte, PnL latent compris. */
1185
+ equity: string;
1186
+ /** Ce qui reste mobilisable — pour ouvrir ou retirer. `null` si la venue ne le publie pas. */
1187
+ available: string | null;
1188
+ /** Marge immobilisée par les positions et ordres en cours. */
1189
+ marginUsed: string | null;
1190
+ /** Marge de maintenance : sous ce seuil, la liquidation menace. */
1191
+ maintenanceMargin: string | null;
1192
+ /**
1193
+ * PnL non réalisé des positions ouvertes.
1194
+ *
1195
+ * **Seule aster le publie au niveau du compte.** hyperliquid et pacifica ne l'exposent pas là —
1196
+ * il se lit alors sur les positions (`IPosition.unrealizedPnl`), qui le portent toutes. On rend
1197
+ * `null` plutôt que de le reconstituer : une somme calculée ici passerait pour une donnée de la
1198
+ * venue.
1199
+ */
1200
+ unrealizedPnl: string | null;
1201
+ /** L'état natif COMPLET, tel que la venue le publie. */
1202
+ xtras?: Record<string, unknown>;
1203
+ }
1204
+ /**
1205
+ * UN FUNDING PAYÉ — ce qui a réellement été prélevé ou reçu sur une position.
1206
+ *
1207
+ * À ne pas confondre avec le taux courant d'`IPrice.funding`, qui annonce ce qui *sera* payé. Un
1208
+ * calcul de résultat qui ignore ce qui l'a été surestime toute position tenue longtemps.
1209
+ */
1210
+ interface IFundingPaid {
1211
+ xex: XgateEx;
1212
+ symbolXex: string;
1213
+ /** Le taux appliqué, en fraction. */
1214
+ rate: string;
1215
+ /** Moment où il a été prélevé. */
1216
+ appliedAt: Date;
1217
+ xtras?: Record<string, unknown>;
1218
+ }
1131
1219
  /** UNE EXÉCUTION du compte — ce qui a réellement été rempli, par opposition à ce qui a été demandé. */
1132
1220
  interface ITrade {
1133
1221
  xex: XgateEx;
@@ -1198,16 +1286,34 @@ interface IEntryWithProtection {
1198
1286
  size: number;
1199
1287
  /** Prix d'entrée visé. Sert de référence aux pourcentages, et de prix limite. */
1200
1288
  entry: number;
1201
- /** Écart du stop au prix d'entrée, en fraction (0.02 = 2 %). Obligatoire. */
1202
- slPct: number;
1203
1289
  /**
1204
- * Les take-profits, dans l'ordre. `part` est la fraction de la position à sortir.
1290
+ * LE STOP — en **écart** au prix d'entrée ou en **prix absolu**, jamais les deux.
1291
+ *
1292
+ * ```typescript
1293
+ * sl: { pct: 0.02 } // 2 % sous l'entrée en long, 2 % au-dessus en short
1294
+ * sl: { price: 62500 } // exactement 62 500, quel que soit le prix d'entrée
1295
+ * ```
1296
+ *
1297
+ * **Obligatoire.** C'est la règle qui a motivé tout ce chemin : jamais un ordre sans stop.
1298
+ */
1299
+ sl: ITarget;
1300
+ /**
1301
+ * LES TAKE-PROFITS, dans l'ordre. Chacun dit son NIVEAU et sa PART.
1302
+ *
1303
+ * ```typescript
1304
+ * tps: [{ pct: 0.03, part: 0.5 }, // sortir 50 % si ça monte de 3 %
1305
+ * { price: 62500, part: 0.5 }] // sortir 50 % si ça touche 62 500
1306
+ * ```
1307
+ *
1308
+ * **`part` est toujours une fraction de la POSITION**, jamais un prix : les deux modes ne portent
1309
+ * que sur le niveau. Un objectif se pense soit en risque (« +3 % »), soit en niveau technique
1310
+ * (« 62 500 ») — obliger à convertir l'un dans l'autre déplacerait le calcul, donc l'erreur, chez
1311
+ * l'appelant.
1205
1312
  *
1206
1313
  * Au-dessus de 80 % cumulés, le dernier absorbe le reliquat et la position ferme entièrement ;
1207
1314
  * à 80 % ou en dessous, le reste court.
1208
1315
  */
1209
- tps: Array<{
1210
- pct: number;
1316
+ tps: Array<ITarget & {
1211
1317
  part: number;
1212
1318
  }>;
1213
1319
  /** `ioc` pour entrer au marché (taker), `alo` pour poster (maker). Défaut : `ioc`. */
@@ -1254,6 +1360,18 @@ declare class TradingService {
1254
1360
  * conditionnels. Le SDK de la venue s'en charge ; xgate fournit des niveaux justes.
1255
1361
  */
1256
1362
  openWithProtection(access: ITradingAccess, input: IEntryWithProtection): Promise<IOrder[]>;
1363
+ /**
1364
+ * CE QUE LA VENUE A RÉELLEMENT FAIT, après une réponse perdue.
1365
+ *
1366
+ * Un timeout ne dit pas « rien n'a été créé » : mesuré sur aster, deux exécutions identiques ont
1367
+ * produit deux sous-ensembles différents — une fois le stop et un take-profit, une fois l'entrée
1368
+ * seule. La seule vérité est au carnet, donc on va l'y chercher.
1369
+ *
1370
+ * **Lève si la position est nue** : une entrée remplie sans stop est exactement ce que ce service
1371
+ * existe pour empêcher, et le silence serait pire que l'erreur. L'appelant doit savoir qu'il a une
1372
+ * position à protéger, tout de suite.
1373
+ */
1374
+ private etatApres;
1257
1375
  /** Les positions ouvertes d'un compte. */
1258
1376
  positions(access: ITradingAccess, symbolXex?: string): Promise<IPosition[]>;
1259
1377
  /** Les ordres encore au carnet. */
@@ -1302,10 +1420,120 @@ declare class TradingService {
1302
1420
  * take-profits partiels, celui-là est la clôture.
1303
1421
  */
1304
1422
  exitPrice(access: ITradingAccess, symbolXex: string, direction: Direction, openedAt: Date): Promise<string | null>;
1423
+ /**
1424
+ * L'HISTORIQUE DES ORDRES du compte — ce qui a été soumis, rempli, annulé ou expiré.
1425
+ *
1426
+ * À distinguer de {@link trades} : un ordre est une **intention**, une exécution est un **fait**.
1427
+ * Un ordre `filled` peut avoir été rempli en plusieurs fois, à des prix différents.
1428
+ *
1429
+ * Servi par les huit venues qui tradent.
1430
+ */
1431
+ orderHistory(access: ITradingAccess, symbolXex?: string): Promise<IOrder[]>;
1432
+ /**
1433
+ * L'ÉTAT DU COMPTE — équité, disponible, marge immobilisée, marge de maintenance, PnL latent.
1434
+ *
1435
+ * Les venues rangent ces valeurs sous des noms qui n'ont rien à voir : `marginSummary.accountValue`
1436
+ * chez hyperliquid, `accountEquity` chez pacifica, `totalMarginBalance` chez aster — **mais elles
1437
+ * disent la même chose**. La forme native complète reste dans `xtras`, rien n'est perdu.
1438
+ *
1439
+ * **blofin ne l'expose pas** et lève ; les sept autres le servent.
1440
+ */
1441
+ accountInfo(access: ITradingAccess): Promise<IAccountState>;
1442
+ /**
1443
+ * RÈGLE LE LEVIER d'une paire, avant d'ouvrir.
1444
+ *
1445
+ * Le levier détermine la marge immobilisée, donc la taille tenable : le changer après l'ouverture
1446
+ * ne rejoue pas la position déjà prise. C'est un réglage préalable, pas un ajustement.
1447
+ *
1448
+ * **bullet ne l'expose pas** — son levier se fixe au compte, pas à la position — et lève.
1449
+ */
1450
+ setLeverage(access: ITradingAccess, symbolXex: string, leverage: number): Promise<void>;
1451
+ /**
1452
+ * CHOISIT LE MODE DE MARGE d'une paire : **isolée** ou **croisée**.
1453
+ *
1454
+ * En **croisée**, tout le solde du compte garantit la position : elle tient plus longtemps, mais
1455
+ * une liquidation emporte l'ensemble. En **isolée**, seule la marge affectée est en jeu : la perte
1456
+ * est bornée à ce montant, la liquidation arrive plus tôt.
1457
+ *
1458
+ * **À régler AVANT d'ouvrir.** Changer le mode d'une position vivante est refusé par la plupart
1459
+ * des venues, et là où c'est accepté, cela redistribue la garantie sous les pieds de la position.
1460
+ *
1461
+ * Servi par les trois venues de référence.
1462
+ */
1463
+ setMarginMode(access: ITradingAccess, symbolXex: string, isolated: boolean): Promise<void>;
1464
+ /**
1465
+ * AJOUTE DE LA MARGE à une position isolée — pour éloigner le prix de liquidation.
1466
+ *
1467
+ * C'est le geste qui sauve une position sous pression sans la réduire : on renforce la garantie
1468
+ * plutôt que de couper. **N'a de sens qu'en marge isolée** ; en croisée, tout le solde garantit
1469
+ * déjà la position et il n'y a rien à ajouter.
1470
+ *
1471
+ * Servi par les trois venues de référence.
1472
+ */
1473
+ addMargin(access: ITradingAccess, symbolXex: string, amount: string): Promise<void>;
1474
+ /**
1475
+ * RETIRE DE LA MARGE d'une position isolée — pour libérer du capital.
1476
+ *
1477
+ * L'inverse d'{@link addMargin} : la garantie diminue, donc le prix de liquidation **se rapproche**.
1478
+ * La venue refuse ce qui mettrait la position sous son seuil de maintenance.
1479
+ *
1480
+ * ⚠️ **pacifica ne l'expose pas** et lève : chez elle, la marge s'ajoute mais ne se retire pas.
1481
+ * Fermer partiellement la position libère alors le capital.
1482
+ */
1483
+ removeMargin(access: ITradingAccess, symbolXex: string, amount: string): Promise<void>;
1484
+ /**
1485
+ * L'HISTORIQUE DU FUNDING **PAYÉ** sur une paire — ce qui a réellement été prélevé ou reçu.
1486
+ *
1487
+ * À ne pas confondre avec le taux courant, que rend `PricesService` : celui-ci annonce ce qui
1488
+ * *sera* payé, celui-là dit ce qui *l'a été*. Un backtest qui ignore le funding réel surestime le
1489
+ * résultat d'une position tenue longtemps.
1490
+ *
1491
+ * Servi par les huit venues qui tradent.
1492
+ */
1493
+ fundingHistory(access: ITradingAccess, symbolXex: string, range?: {
1494
+ startTime?: Date;
1495
+ endTime?: Date;
1496
+ limit?: number;
1497
+ }): Promise<IFundingPaid[]>;
1498
+ /**
1499
+ * UN IDENTIFIANT APPLICATIF pour un ordre, **au format que la venue accepte**.
1500
+ *
1501
+ * C'est lui qui relie un ordre à la décision qui l'a produit : la venue le rend tel quel dans
1502
+ * `IOrder.clientId`, ce qui permet de retrouver son origine sans tenir de table de correspondance.
1503
+ *
1504
+ * **hyperliquid exige un hexadécimal préfixé `0x`** (128 bits) là où les autres acceptent un UUID
1505
+ * ordinaire. Passer le mauvais format fait rejeter l'ordre — d'où cette méthode plutôt qu'un
1506
+ * `randomUUID()` chez l'appelant.
1507
+ */
1508
+ newClientOrderId(xex: XgateEx): string;
1509
+ /**
1510
+ * LE COUPE-CIRCUIT : annule TOUS les ordres d'une paire, d'un geste.
1511
+ *
1512
+ * À réserver aux situations où l'on veut reprendre la main sans discuter — un état incohérent, un
1513
+ * arrêt d'urgence, une reprise après incident. Annuler un par un laisse une fenêtre pendant
1514
+ * laquelle certains ordres vivent encore.
1515
+ *
1516
+ * ⚠️ **Cela retire aussi les PROTECTIONS.** Stops et take-profits sont des ordres comme les
1517
+ * autres : une position ouverte se retrouve **nue** après ce geste. À n'employer que si la
1518
+ * position est fermée, ou si l'on repose une protection immédiatement — jamais pour « faire le
1519
+ * ménage » sur une position vivante.
1520
+ *
1521
+ * Rend le nombre d'ordres annulés quand la venue le publie, `null` sinon.
1522
+ */
1523
+ cancelAll(access: ITradingAccess, symbolXex: string): Promise<number | null>;
1305
1524
  /** Annule un ordre par son identifiant de venue. */
1306
1525
  cancel(access: ITradingAccess, symbolXex: string, orderId: string): Promise<void>;
1307
1526
  /** Le scope `perp()` de la venue, typé au plus près de ce que le contrat commun garantit. */
1308
1527
  private perpOf;
1528
+ /**
1529
+ * L'état natif d'une venue → {@link IAccountState}.
1530
+ *
1531
+ * Une lecture EXPLICITE par venue plutôt qu'un parcours à l'aveugle : les noms ne se devinent pas,
1532
+ * et prendre le premier champ qui ressemble à une équité produirait un chiffre faux sans que rien
1533
+ * ne le signale. `null` là où la venue ne publie pas la valeur — pas `0`, qui se lirait comme
1534
+ * « rien » alors que personne n'a rien dit.
1535
+ */
1536
+ private toAccountState;
1309
1537
  /**
1310
1538
  * Le statut de la venue, VALIDÉ — jamais casté. Une venue qui inventerait un statut rendrait sinon
1311
1539
  * une valeur absente de tous les `switch` en aval, et personne ne la rattraperait.
@@ -1314,6 +1542,75 @@ declare class TradingService {
1314
1542
  private toOrder;
1315
1543
  }
1316
1544
 
1545
+ /**
1546
+ * LE FLUX DES EXÉCUTIONS DU COMPTE — savoir ce qui s'est rempli, à l'instant où ça se remplit.
1547
+ *
1548
+ * **C'est la seule façon de connaître son état exact.** Sans lui, on interroge en boucle et on
1549
+ * apprend un remplissage avec le retard du sondage : entre-temps, un take-profit partiel a pu
1550
+ * modifier la taille de la position, et toute décision prise sur l'ancienne valeur est fausse.
1551
+ *
1552
+ * Le flux ne dit pas ce qu'on a **demandé** mais ce qui a été **obtenu** : un ordre annoncé `filled`
1553
+ * peut l'avoir été en plusieurs fois, à des prix différents. Chaque exécution porte son prix réel.
1554
+ *
1555
+ * **ON NE TRANSMET QUE CE QUI ARRIVE APRÈS L'OUVERTURE DU FLUX.** Les venues rejouent leur
1556
+ * historique à la souscription : mesuré le 2026-08-09 sur hyperliquid, 30 exécutions arrivent dans
1557
+ * les six premières secondes, **toutes antérieures** à l'abonnement, la plus ancienne de plus de
1558
+ * deux jours. Sans filtre, chaque reconnexion rejouerait deux jours de trades — et un consommateur
1559
+ * qui compte les remplissages compterait deux fois les mêmes.
1560
+ *
1561
+ * Le filtre se fait sur `filledAt` contre l'instant d'abonnement. Un flux dit le **présent** ;
1562
+ * l'historique se lit avec `TradingService.trades()`, qui est fait pour ça.
1563
+ *
1564
+ * **blofin est la seule venue qui ne l'expose pas** ; elle lève. Les sept autres le servent.
1565
+ */
1566
+ declare class WsTradesService {
1567
+ private readonly logger;
1568
+ /**
1569
+ * S'abonne aux exécutions d'un compte. Rend la fonction de désabonnement.
1570
+ *
1571
+ * Le handler reçoit **une exécution à la fois**, au format unifié, et **uniquement celles
1572
+ * survenues après l'abonnement** — le rejeu d'historique de la venue est écarté.
1573
+ */
1574
+ subscribe(access: ITradingAccess, handler: (trade: ITrade) => void): Unsubscribe;
1575
+ /**
1576
+ * S'abonne aux exécutions de PLUSIEURS comptes, avec un seul handler.
1577
+ *
1578
+ * Chaque exécution porte son `xex` : l'appelant sait toujours de quelle venue elle vient. La
1579
+ * fonction rendue coupe tous les flux d'un coup — sinon il faudrait en garder N et n'en oublier
1580
+ * aucun.
1581
+ *
1582
+ * Une venue qui refuse est journalisée et ignorée : le reste des comptes doit continuer d'être
1583
+ * suivi. Sur un seul accès, l'échec est celui de l'appel.
1584
+ */
1585
+ subscribeAll(accesses: ITradingAccess[], handler: (trade: ITrade) => void): Unsubscribe;
1586
+ /**
1587
+ * S'abonne aux ORDRES du compte — leur naissance, leur remplissage, leur mort.
1588
+ *
1589
+ * À distinguer des exécutions : un ordre est une **intention** dont on suit le cycle de vie
1590
+ * (`open` → `partiallyFilled` → `filled`, ou `canceled`), une exécution est un **fait** ponctuel.
1591
+ * Pour savoir qu'un stop vient de se déclencher, c'est ici qu'il faut écouter ; pour savoir à quel
1592
+ * prix, c'est {@link subscribe}.
1593
+ *
1594
+ * **Même règle que pour les exécutions** : seuls les ordres postérieurs à l'abonnement sont
1595
+ * transmis, le rejeu d'historique est écarté.
1596
+ */
1597
+ subscribeOrders(access: ITradingAccess, handler: (order: IOrder) => void): Unsubscribe;
1598
+ /**
1599
+ * S'abonne aux TRANSACTIONS PUBLIQUES d'un marché — celles de tout le monde, pas les siennes.
1600
+ *
1601
+ * C'est le flux qui dit ce qui se négocie réellement : prix, taille, sens agresseur. Il sert à
1602
+ * mesurer l'activité d'une paire, pas à suivre son compte — pour cela, {@link subscribe}.
1603
+ *
1604
+ * **Aucun filtre temporel ici** : un trade public est daté de son exécution et arrive en direct,
1605
+ * il n'y a pas d'historique rejoué à écarter.
1606
+ */
1607
+ subscribePublicTrades(access: ITradingAccess, symbolXex: string, handler: (trade: IPublicTrade) => void): Unsubscribe;
1608
+ /** Le client temps réel d'un compte, avec ses souscriptions signées. */
1609
+ private wsOf;
1610
+ private toOrder;
1611
+ private toTrade;
1612
+ }
1613
+
1317
1614
  /** La venue sert-elle cet intervalle de première main ? */
1318
1615
  declare function servesNatively(xex: XgateEx, interval: Timeframe): boolean;
1319
1616
  /**
@@ -1397,4 +1694,4 @@ declare function expiryOf(xtras?: Record<string, unknown>): Date | undefined;
1397
1694
  */
1398
1695
  declare function isDated(xtras?: Record<string, unknown>): boolean;
1399
1696
 
1400
- export { CandlesService, CandlesStreamRegistry, CandlesStreamService, CatalogService, type Direction, type IBalance, type ICandle, type ICandlesQuery, type IEntryWithProtection, type IEquityPoint, type IMoveStop, type IMovement, type IOrder, type IPair, type IPosition, type IPrice, type IProtection, type IProtectionInput, type IProtectionLeg, type ITrade, type ITradingAccess, type IWalletAccess, type IXexAccess, type IXexSpotSource, type MarketKind, type MovementKind, type MovementStatus, ORDER_STATUSES, type OrderStatus, type OrderType, PricesService, SPOT_XEXES, type Side, SpotCandlesService, SpotCatalogService, SpotPricesService, SpotWsCandlesService, TIMEFRAME_MINUTES, type TimeInForce, Timeframe, TradingService, type Unsubscribe, WALLET_XEXES, WS_SUBSCRIPTION_LIMITS, WalletService, WsCandlesService, XGATE_EXCHANGES, XgateEx, XgateModule, buildLevels, buildProtection, canonicalFromBase, canonicalFromXex, expiryOf, isDated, multiplierFromXex, roundPrice, roundToStep, servesNatively, servesSpot, sourceFor, subscriptionLimitOf, timeframeMs };
1697
+ export { CandlesService, CandlesStreamRegistry, CandlesStreamService, CatalogService, type Direction, type IAccountState, type IBalance, type ICandle, type ICandlesQuery, type IEntryWithProtection, type IEquityPoint, type IFundingPaid, type IMoveStop, type IMovement, type IOrder, type IPair, type IPosition, type IPrice, type IProtection, type IProtectionInput, type IProtectionLeg, type IPublicTrade, type ITarget, type ITrade, type ITradingAccess, type IWalletAccess, type IXexAccess, type IXexSpotSource, type MarketKind, type MovementKind, type MovementStatus, ORDER_STATUSES, type OrderStatus, type OrderType, PricesService, SPOT_XEXES, type Side, SpotCandlesService, SpotCatalogService, SpotPricesService, SpotWsCandlesService, TIMEFRAME_MINUTES, type TimeInForce, Timeframe, TradingService, type Unsubscribe, WALLET_XEXES, WS_SUBSCRIPTION_LIMITS, WalletService, WsCandlesService, WsTradesService, XGATE_EXCHANGES, XgateEx, XgateModule, buildLevels, buildProtection, canonicalFromBase, canonicalFromXex, expiryOf, isDated, multiplierFromXex, roundPrice, roundToStep, servesNatively, servesSpot, sourceFor, subscriptionLimitOf, timeframeMs };