topstepx-api 1.0.3 → 2.0.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.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { HubConnectionBuilder, HttpTransportType, HubConnectionState } from '@microsoft/signalr';
2
2
 
3
- // src/errors/base-error.ts
3
+ // src/errors/base.error.ts
4
4
  var TopstepXError = class extends Error {
5
5
  constructor(message, code) {
6
6
  super(message);
@@ -20,14 +20,14 @@ var TopstepXError = class extends Error {
20
20
  }
21
21
  };
22
22
 
23
- // src/errors/auth-error.ts
23
+ // src/errors/auth.error.ts
24
24
  var AuthenticationError = class extends TopstepXError {
25
25
  constructor(message, code) {
26
26
  super(message, code);
27
27
  }
28
28
  };
29
29
 
30
- // src/errors/api-error.ts
30
+ // src/errors/api.error.ts
31
31
  var ApiError = class extends TopstepXError {
32
32
  constructor(message, code, endpoint) {
33
33
  super(message, code);
@@ -41,7 +41,7 @@ var ApiError = class extends TopstepXError {
41
41
  }
42
42
  };
43
43
 
44
- // src/errors/connection-error.ts
44
+ // src/errors/connection.error.ts
45
45
  var ConnectionError = class extends TopstepXError {
46
46
  constructor(message) {
47
47
  super(message);
@@ -132,9 +132,7 @@ var AuthService = class {
132
132
  }
133
133
  setTokenExpiration() {
134
134
  const expiration = /* @__PURE__ */ new Date();
135
- expiration.setHours(
136
- expiration.getHours() + this.config.tokenValidityHours
137
- );
135
+ expiration.setHours(expiration.getHours() + this.config.tokenValidityHours);
138
136
  this.tokenExpiration = expiration;
139
137
  }
140
138
  isTokenExpired() {
@@ -291,10 +289,7 @@ var OrderApi = class {
291
289
  * ```
292
290
  */
293
291
  async place(request) {
294
- return this.http.post(
295
- "/api/Order/place",
296
- request
297
- );
292
+ return this.http.post("/api/Order/place", request);
298
293
  }
299
294
  /**
300
295
  * Cancel an existing order.
@@ -302,10 +297,7 @@ var OrderApi = class {
302
297
  * @returns Response indicating success or failure
303
298
  */
304
299
  async cancel(request) {
305
- return this.http.post(
306
- "/api/Order/cancel",
307
- request
308
- );
300
+ return this.http.post("/api/Order/cancel", request);
309
301
  }
310
302
  /**
311
303
  * Modify an existing order's size or price.
@@ -313,10 +305,7 @@ var OrderApi = class {
313
305
  * @returns Response indicating success or failure
314
306
  */
315
307
  async modify(request) {
316
- return this.http.post(
317
- "/api/Order/modify",
318
- request
319
- );
308
+ return this.http.post("/api/Order/modify", request);
320
309
  }
321
310
  };
322
311
 
@@ -330,10 +319,7 @@ var PositionApi = class {
330
319
  return response;
331
320
  }
332
321
  async close(request) {
333
- return this.http.post(
334
- "/api/Position/closeContract",
335
- request
336
- );
322
+ return this.http.post("/api/Position/closeContract", request);
337
323
  }
338
324
  async partialClose(request) {
339
325
  return this.http.post("/api/Position/partialCloseContract", request);
@@ -366,6 +352,533 @@ var ContractApi = class {
366
352
  }
367
353
  };
368
354
 
355
+ // src/rest/contract/cme/cme.contract.constants.ts
356
+ var CME_CONTRACTS = (
357
+ // Grouped by contract market sector
358
+ [
359
+ // Per the CME Group futures contracts which Topstep
360
+ // allows its traders to buy/sell positions on
361
+ // https://help.topstep.com/en/articles/8284206-when-and-what-products-can-i-trade#h_fc99007dde
362
+ // Equity
363
+ {
364
+ symbol: "ES" /* E_MINI_SP_500 */,
365
+ name: "E-mini S&P 500",
366
+ sector: "Equity" /* EQUITY */,
367
+ exchange: 0 /* CME */,
368
+ tickSize: 0.25,
369
+ tickValue: 12.5,
370
+ roundTripFees: 2.8
371
+ },
372
+ {
373
+ symbol: "MES" /* MICRO_E_MINI_SP_500 */,
374
+ name: "Micro E-mini S&P 500",
375
+ sector: "Equity" /* EQUITY */,
376
+ exchange: 0 /* CME */,
377
+ tickSize: 0.25,
378
+ tickValue: 1.25,
379
+ roundTripFees: 0.74
380
+ },
381
+ {
382
+ symbol: "NQ" /* E_MINI_NASDAQ */,
383
+ name: "E-mini NASDAQ 100",
384
+ sector: "Equity" /* EQUITY */,
385
+ exchange: 0 /* CME */,
386
+ tickSize: 0.25,
387
+ tickValue: 5,
388
+ roundTripFees: 2.8
389
+ },
390
+ {
391
+ symbol: "MNQ" /* MICRO_E_MINI_NASDAQ */,
392
+ name: "Micro E-mini NASDAQ 100",
393
+ sector: "Equity" /* EQUITY */,
394
+ exchange: 0 /* CME */,
395
+ tickSize: 0.25,
396
+ tickValue: 0.5,
397
+ roundTripFees: 0.74
398
+ },
399
+ {
400
+ symbol: "RTY" /* E_MINI_RUSSELL */,
401
+ name: "E-mini Russell 2000",
402
+ sector: "Equity" /* EQUITY */,
403
+ exchange: 0 /* CME */,
404
+ tickSize: 0.1,
405
+ tickValue: 5,
406
+ roundTripFees: 2.8
407
+ },
408
+ {
409
+ symbol: "M2K" /* MICRO_E_MINI_RUSSELL */,
410
+ name: "Micro E-mini Russell 2000",
411
+ sector: "Equity" /* EQUITY */,
412
+ exchange: 0 /* CME */,
413
+ tickSize: 0.1,
414
+ tickValue: 0.25,
415
+ roundTripFees: 0.74
416
+ },
417
+ {
418
+ symbol: "NKD" /* NIKKEI */,
419
+ name: "Nikkei NKD",
420
+ sector: "Equity" /* EQUITY */,
421
+ exchange: 0 /* CME */,
422
+ tickSize: 5,
423
+ tickValue: 25,
424
+ roundTripFees: 4.34
425
+ },
426
+ {
427
+ symbol: "YM" /* MINI_DOW */,
428
+ name: "Mini-DOW",
429
+ sector: "Equity" /* EQUITY */,
430
+ exchange: 1 /* CBOT */,
431
+ tickSize: 1,
432
+ tickValue: 5,
433
+ roundTripFees: 2.8
434
+ },
435
+ {
436
+ symbol: "MYM" /* MICRO_MINI_DOW */,
437
+ name: "Micro Mini-DOW",
438
+ sector: "Equity" /* EQUITY */,
439
+ exchange: 1 /* CBOT */,
440
+ tickSize: 1,
441
+ tickValue: 0.5,
442
+ roundTripFees: 0.74
443
+ },
444
+ // Foreign Exchange
445
+ {
446
+ symbol: "6A" /* AUD_USD */,
447
+ name: "Australian $",
448
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
449
+ exchange: 0 /* CME */,
450
+ tickSize: 5e-5,
451
+ tickValue: 5,
452
+ roundTripFees: 3.24
453
+ },
454
+ {
455
+ symbol: "M6A" /* MICRO_AUD_USD */,
456
+ name: "Micro AUD/USD",
457
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
458
+ exchange: 0 /* CME */,
459
+ tickSize: 5e-5,
460
+ tickValue: 0.5,
461
+ roundTripFees: 0.52
462
+ },
463
+ {
464
+ symbol: "6B" /* GBP_USD */,
465
+ name: "British Pound",
466
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
467
+ exchange: 0 /* CME */,
468
+ tickSize: 1e-4,
469
+ tickValue: 6.25,
470
+ roundTripFees: 3.24
471
+ },
472
+ {
473
+ symbol: "M6B" /* MICRO_GBP_USD */,
474
+ name: "Micro GBP/USD",
475
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
476
+ exchange: 0 /* CME */,
477
+ tickSize: 1e-4,
478
+ tickValue: 0.625,
479
+ roundTripFees: 0.52
480
+ },
481
+ {
482
+ symbol: "6C" /* CAD_USD */,
483
+ name: "Canadian $",
484
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
485
+ exchange: 0 /* CME */,
486
+ tickSize: 5e-5,
487
+ tickValue: 5,
488
+ roundTripFees: 3.24
489
+ },
490
+ {
491
+ symbol: "6E" /* EUR_USD */,
492
+ name: "Euro FX",
493
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
494
+ exchange: 0 /* CME */,
495
+ tickSize: 5e-5,
496
+ tickValue: 6.25,
497
+ roundTripFees: 3.24
498
+ },
499
+ {
500
+ symbol: "M6E" /* MICRO_EUR_USD */,
501
+ name: "Micro Euro FX",
502
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
503
+ exchange: 0 /* CME */,
504
+ tickSize: 5e-5,
505
+ tickValue: 0.625,
506
+ roundTripFees: 0.52
507
+ },
508
+ {
509
+ symbol: "E7" /* E_MINI_EUR_USD */,
510
+ name: "E-mini Euro FX",
511
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
512
+ exchange: 0 /* CME */,
513
+ tickSize: 1e-4,
514
+ tickValue: 6.25,
515
+ roundTripFees: 1.74
516
+ },
517
+ {
518
+ symbol: "6J" /* JPY_USD */,
519
+ name: "Japanese Yen",
520
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
521
+ exchange: 0 /* CME */,
522
+ tickSize: 5e-7,
523
+ tickValue: 6.25,
524
+ roundTripFees: 3.24
525
+ },
526
+ {
527
+ symbol: "6S" /* CHF_USD */,
528
+ name: "Swiss Franc",
529
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
530
+ exchange: 0 /* CME */,
531
+ tickSize: 1e-4,
532
+ tickValue: 12.5,
533
+ roundTripFees: 3.24
534
+ },
535
+ {
536
+ symbol: "6M" /* MXN_USD */,
537
+ name: "Mexican Peso",
538
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
539
+ exchange: 0 /* CME */,
540
+ tickSize: 25e-6,
541
+ tickValue: 12.5,
542
+ roundTripFees: 3.24
543
+ },
544
+ {
545
+ symbol: "6N" /* NZD_USD */,
546
+ name: "New Zealand $",
547
+ sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
548
+ exchange: 0 /* CME */,
549
+ tickSize: 1e-4,
550
+ tickValue: 10,
551
+ roundTripFees: 3.24
552
+ },
553
+ // Live Stock
554
+ {
555
+ symbol: "HE" /* LEAN_HOGS */,
556
+ name: "Lean Hogs",
557
+ sector: "Live Stock" /* LIVE_STOCK */,
558
+ exchange: 0 /* CME */,
559
+ tickSize: 25e-5,
560
+ tickValue: 10,
561
+ roundTripFees: 4.24
562
+ },
563
+ {
564
+ symbol: "LE" /* LIVE_CATTLE */,
565
+ name: "Live Cattle",
566
+ sector: "Live Stock" /* LIVE_STOCK */,
567
+ exchange: 0 /* CME */,
568
+ tickSize: 25e-5,
569
+ tickValue: 10,
570
+ roundTripFees: 4.24
571
+ },
572
+ // Crops
573
+ {
574
+ symbol: "ZC" /* CORN */,
575
+ name: "Corn",
576
+ sector: "Crops" /* CROPS */,
577
+ exchange: 1 /* CBOT */,
578
+ tickSize: 0.25,
579
+ tickValue: 12.5,
580
+ roundTripFees: 4.3
581
+ },
582
+ {
583
+ symbol: "ZW" /* WHEAT */,
584
+ name: "Wheat",
585
+ sector: "Crops" /* CROPS */,
586
+ exchange: 1 /* CBOT */,
587
+ tickSize: 0.25,
588
+ tickValue: 12.5,
589
+ roundTripFees: 4.3
590
+ },
591
+ {
592
+ symbol: "ZS" /* SOYBEANS */,
593
+ name: "Soybeans",
594
+ sector: "Crops" /* CROPS */,
595
+ exchange: 1 /* CBOT */,
596
+ tickSize: 0.25,
597
+ tickValue: 12.5,
598
+ roundTripFees: 4.3
599
+ },
600
+ {
601
+ symbol: "ZM" /* SOYBEAN_MEAL */,
602
+ name: "Soybean Meal",
603
+ sector: "Crops" /* CROPS */,
604
+ exchange: 1 /* CBOT */,
605
+ tickSize: 0.1,
606
+ tickValue: 10,
607
+ roundTripFees: 4.3
608
+ },
609
+ {
610
+ symbol: "ZL" /* SOYBEAN_OIL */,
611
+ name: "Soybean Oil",
612
+ sector: "Crops" /* CROPS */,
613
+ exchange: 1 /* CBOT */,
614
+ tickSize: 0.01,
615
+ tickValue: 6,
616
+ roundTripFees: 4.3
617
+ },
618
+ // Gas & Oil
619
+ {
620
+ symbol: "NG" /* NATURAL_GAS */,
621
+ name: "Natural Gas",
622
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
623
+ exchange: 3 /* NYMEX */,
624
+ tickSize: 1e-3,
625
+ tickValue: 10,
626
+ roundTripFees: 3.2
627
+ },
628
+ {
629
+ symbol: "MNG" /* MICRO_NATURAL_GAS */,
630
+ name: "Micro Henry Hub Natural Gas",
631
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
632
+ exchange: 3 /* NYMEX */,
633
+ tickSize: 1e-3,
634
+ tickValue: 1,
635
+ roundTripFees: 1.24
636
+ },
637
+ {
638
+ symbol: "QG" /* E_MINI_NATURAL_GAS */,
639
+ name: "E-mini Natural Gas",
640
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
641
+ exchange: 3 /* NYMEX */,
642
+ tickSize: 5e-3,
643
+ tickValue: 12.5,
644
+ roundTripFees: 1.04
645
+ },
646
+ {
647
+ symbol: "RB" /* RBOB_GASOLINE */,
648
+ name: "RBOB Gasoline",
649
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
650
+ exchange: 3 /* NYMEX */,
651
+ tickSize: 1e-4,
652
+ tickValue: 4.2,
653
+ roundTripFees: 3.04
654
+ },
655
+ {
656
+ symbol: "CL" /* CRUDE_OIL */,
657
+ name: "Crude Oil",
658
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
659
+ exchange: 3 /* NYMEX */,
660
+ tickSize: 0.01,
661
+ tickValue: 10,
662
+ roundTripFees: 3.04
663
+ },
664
+ {
665
+ symbol: "MCL" /* MICRO_CRUDE_OIL */,
666
+ name: "Micro Crude Oil",
667
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
668
+ exchange: 3 /* NYMEX */,
669
+ tickSize: 0.01,
670
+ tickValue: 1,
671
+ roundTripFees: 1.04
672
+ },
673
+ {
674
+ symbol: "QM" /* E_MINI_CRUDE_OIL */,
675
+ name: "E-mini Crude Oil",
676
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
677
+ exchange: 3 /* NYMEX */,
678
+ tickSize: 0.025,
679
+ tickValue: 12.5,
680
+ roundTripFees: 2.44
681
+ },
682
+ {
683
+ symbol: "HO" /* HEATING_OIL */,
684
+ name: "Heating Oil",
685
+ sector: "Gas & Oil" /* GAS_AND_OIL */,
686
+ exchange: 3 /* NYMEX */,
687
+ tickSize: 1e-4,
688
+ tickValue: 4.2,
689
+ roundTripFees: 3.04
690
+ },
691
+ // Notes & Bonds
692
+ {
693
+ symbol: "ZT" /* TWO_YEAR_NOTE */,
694
+ name: "2-Year Note",
695
+ sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
696
+ exchange: 1 /* CBOT */,
697
+ tickSize: 78125e-7,
698
+ tickValue: 15.625,
699
+ roundTripFees: 1.34
700
+ },
701
+ {
702
+ symbol: "ZF" /* FIVE_YEAR_NOTE */,
703
+ name: "5-Year Note",
704
+ sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
705
+ exchange: 1 /* CBOT */,
706
+ tickSize: 78125e-7,
707
+ tickValue: 15.625,
708
+ roundTripFees: 1.34
709
+ },
710
+ {
711
+ symbol: "ZN" /* TEN_YEAR_NOTE */,
712
+ name: "10-Year Note",
713
+ sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
714
+ exchange: 1 /* CBOT */,
715
+ tickSize: 0.015625,
716
+ tickValue: 15.625,
717
+ roundTripFees: 1.6
718
+ },
719
+ {
720
+ symbol: "TN" /* TEN_YEAR_ULTRA_NOTE */,
721
+ name: "10-Year Ultra-Note",
722
+ sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
723
+ exchange: 1 /* CBOT */,
724
+ tickSize: 0.015625,
725
+ tickValue: 15.625,
726
+ roundTripFees: 1.64
727
+ },
728
+ {
729
+ symbol: "ZB" /* THIRTY_YEAR_BOND */,
730
+ name: "30-Year Bond",
731
+ sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
732
+ exchange: 1 /* CBOT */,
733
+ tickSize: 0.03125,
734
+ tickValue: 31.25,
735
+ roundTripFees: 1.78
736
+ },
737
+ {
738
+ symbol: "UB" /* ULTRA_BOND */,
739
+ name: "Ultra-Bond",
740
+ sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
741
+ exchange: 1 /* CBOT */,
742
+ tickSize: 0.03125,
743
+ tickValue: 31.25,
744
+ roundTripFees: 1.94
745
+ },
746
+ // Metals
747
+ {
748
+ symbol: "GC" /* GOLD */,
749
+ name: "Gold",
750
+ sector: "Metals" /* METALS */,
751
+ exchange: 2 /* COMEX */,
752
+ tickSize: 0.1,
753
+ tickValue: 10,
754
+ roundTripFees: 3.24
755
+ },
756
+ {
757
+ symbol: "MGC" /* MICRO_GOLD */,
758
+ name: "Micro Gold",
759
+ sector: "Metals" /* METALS */,
760
+ exchange: 2 /* COMEX */,
761
+ tickSize: 0.1,
762
+ tickValue: 1,
763
+ roundTripFees: 1.24
764
+ },
765
+ {
766
+ symbol: "SI" /* SILVER */,
767
+ name: "Silver",
768
+ sector: "Metals" /* METALS */,
769
+ exchange: 2 /* COMEX */,
770
+ tickSize: 5e-3,
771
+ tickValue: 25,
772
+ roundTripFees: 3.24
773
+ },
774
+ {
775
+ symbol: "SIL" /* MICRO_SILVER */,
776
+ name: "Micro Silver",
777
+ sector: "Metals" /* METALS */,
778
+ exchange: 2 /* COMEX */,
779
+ tickSize: 5e-3,
780
+ tickValue: 2.5,
781
+ roundTripFees: 2.04
782
+ },
783
+ {
784
+ symbol: "HG" /* COPPER */,
785
+ name: "Copper",
786
+ sector: "Metals" /* METALS */,
787
+ exchange: 2 /* COMEX */,
788
+ tickSize: 5e-4,
789
+ tickValue: 12.5,
790
+ roundTripFees: 3.24
791
+ },
792
+ {
793
+ symbol: "MHG" /* MICRO_COPPER */,
794
+ name: "Micro Copper",
795
+ sector: "Metals" /* METALS */,
796
+ exchange: 2 /* COMEX */,
797
+ tickSize: 5e-4,
798
+ tickValue: 1.25,
799
+ roundTripFees: 1.24
800
+ },
801
+ {
802
+ symbol: "PL" /* PLATINUM */,
803
+ name: "Platinum",
804
+ sector: "Metals" /* METALS */,
805
+ exchange: 3 /* NYMEX */,
806
+ tickSize: 0.1,
807
+ tickValue: 5,
808
+ roundTripFees: 3.24
809
+ },
810
+ // Crypto
811
+ {
812
+ symbol: "MBT" /* MICRO_BITCOIN */,
813
+ name: "Micro Bitcoin",
814
+ sector: "Crypto" /* CRYPTO */,
815
+ exchange: 0 /* CME */,
816
+ tickSize: 5,
817
+ tickValue: 0.5,
818
+ roundTripFees: 2.34
819
+ },
820
+ {
821
+ symbol: "MET" /* MICRO_ETHER */,
822
+ name: "Micro Ether",
823
+ sector: "Crypto" /* CRYPTO */,
824
+ exchange: 0 /* CME */,
825
+ tickSize: 0.25,
826
+ tickValue: 0.125,
827
+ roundTripFees: 0.24
828
+ }
829
+ ]
830
+ );
831
+
832
+ // src/rest/contract/cme/cme.contract.store.ts
833
+ var CmeContractStore = class {
834
+ static getContracts() {
835
+ return CME_CONTRACTS;
836
+ }
837
+ static getContractsBySector() {
838
+ const sectors = [...new Set(CME_CONTRACTS.map((c) => c.sector))];
839
+ return sectors.map((sector) => ({
840
+ sector,
841
+ contracts: CME_CONTRACTS.filter((c) => c.sector === sector)
842
+ }));
843
+ }
844
+ static getContractBySymbol(symbol) {
845
+ return CME_CONTRACTS.find((c) => c.symbol === symbol);
846
+ }
847
+ static getSectors() {
848
+ return [...new Set(CME_CONTRACTS.map((c) => c.sector))];
849
+ }
850
+ static matchTradeNameToContract(trade) {
851
+ const contractSymbol = trade.contractId.substring(0, 3).toUpperCase();
852
+ const contract = CME_CONTRACTS.find((c) => c.symbol === contractSymbol);
853
+ if (!contract) {
854
+ const twoCharCode = contractSymbol.substring(0, 2);
855
+ return CME_CONTRACTS.find((c) => c.symbol === twoCharCode);
856
+ }
857
+ return contract;
858
+ }
859
+ static groupTradesBySector(trades = []) {
860
+ const sectorMap = /* @__PURE__ */ new Map();
861
+ this.getSectors().forEach((sector) => {
862
+ sectorMap.set(sector, []);
863
+ });
864
+ trades.forEach((trade) => {
865
+ const contract = this.matchTradeNameToContract(trade);
866
+ if (contract) {
867
+ const sectorTrades = sectorMap.get(contract.sector) || [];
868
+ sectorTrades.push(trade);
869
+ sectorMap.set(contract.sector, sectorTrades);
870
+ }
871
+ });
872
+ return this.getSectors().map((sector) => ({
873
+ sector,
874
+ trades: sectorMap.get(sector) || []
875
+ }));
876
+ }
877
+ static matchContractNameToGlobexCode(contractName) {
878
+ return CME_CONTRACTS.find((c) => contractName.startsWith(c.symbol));
879
+ }
880
+ };
881
+
369
882
  // src/rest/history/history.api.ts
370
883
  var HistoryApi = class {
371
884
  constructor(http) {
@@ -443,7 +956,7 @@ var ConnectionManager = class {
443
956
  }
444
957
  };
445
958
 
446
- // src/utils/event-emitter.ts
959
+ // src/utils/typed.event.emitter.ts
447
960
  var TypedEventEmitter = class {
448
961
  listeners = /* @__PURE__ */ new Map();
449
962
  on(event, callback) {
@@ -490,8 +1003,8 @@ var TypedEventEmitter = class {
490
1003
  }
491
1004
  };
492
1005
 
493
- // src/realtime/market/market-hub.ts
494
- var MarketHub = class extends TypedEventEmitter {
1006
+ // src/realtime/market/realtime.market.event.hub.ts
1007
+ var RealtimeMarketEventHub = class extends TypedEventEmitter {
495
1008
  constructor(connectionManager) {
496
1009
  super();
497
1010
  this.connectionManager = connectionManager;
@@ -574,8 +1087,8 @@ var MarketHub = class extends TypedEventEmitter {
574
1087
  }
575
1088
  };
576
1089
 
577
- // src/realtime/user/user-hub.ts
578
- var UserHub = class extends TypedEventEmitter {
1090
+ // src/realtime/user/realtime.user.event.hub.ts
1091
+ var RealtimeUserEventHub = class extends TypedEventEmitter {
579
1092
  constructor(connectionManager) {
580
1093
  super();
581
1094
  this.connectionManager = connectionManager;
@@ -586,18 +1099,30 @@ var UserHub = class extends TypedEventEmitter {
586
1099
  subscribedTrades = /* @__PURE__ */ new Set();
587
1100
  setupEventHandlers() {
588
1101
  this.connectionManager.onUserConnection((connection) => {
589
- connection.on("GatewayUserAccount", (data) => {
590
- this.emit("account", data);
591
- });
592
- connection.on("GatewayUserOrder", (data) => {
593
- this.emit("order", data);
594
- });
595
- connection.on("GatewayUserPosition", (data) => {
596
- this.emit("position", data);
597
- });
598
- connection.on("GatewayUserTrade", (data) => {
599
- this.emit("trade", data);
600
- });
1102
+ connection.on(
1103
+ "GatewayUserAccount",
1104
+ (data) => {
1105
+ this.emit("account", data);
1106
+ }
1107
+ );
1108
+ connection.on(
1109
+ "GatewayUserOrder",
1110
+ (data) => {
1111
+ this.emit("order", data);
1112
+ }
1113
+ );
1114
+ connection.on(
1115
+ "GatewayUserPosition",
1116
+ (data) => {
1117
+ this.emit("position", data);
1118
+ }
1119
+ );
1120
+ connection.on(
1121
+ "GatewayUserTrade",
1122
+ (data) => {
1123
+ this.emit("trade", data);
1124
+ }
1125
+ );
601
1126
  });
602
1127
  }
603
1128
  async subscribe(accountId) {
@@ -652,7 +1177,7 @@ var UserHub = class extends TypedEventEmitter {
652
1177
  }
653
1178
  };
654
1179
 
655
- // src/client.ts
1180
+ // src/topstep.x.client.ts
656
1181
  var TopstepXClient = class extends TypedEventEmitter {
657
1182
  auth;
658
1183
  connectionManager;
@@ -698,8 +1223,8 @@ var TopstepXClient = class extends TypedEventEmitter {
698
1223
  userHubUrl: config.userHubUrl ?? "https://rtc.topstepx.com/hubs/user",
699
1224
  auth: this.auth
700
1225
  });
701
- this.marketHub = new MarketHub(this.connectionManager);
702
- this.userHub = new UserHub(this.connectionManager);
1226
+ this.marketHub = new RealtimeMarketEventHub(this.connectionManager);
1227
+ this.userHub = new RealtimeUserEventHub(this.connectionManager);
703
1228
  }
704
1229
  /**
705
1230
  * Connect to the TopstepX API.
@@ -732,48 +1257,31 @@ var TopstepXClient = class extends TypedEventEmitter {
732
1257
  }
733
1258
  };
734
1259
 
735
- // src/types/enums.ts
736
- var OrderType = /* @__PURE__ */ ((OrderType2) => {
737
- OrderType2[OrderType2["Limit"] = 1] = "Limit";
738
- OrderType2[OrderType2["Market"] = 2] = "Market";
739
- OrderType2[OrderType2["Stop"] = 3] = "Stop";
740
- OrderType2[OrderType2["StopLimit"] = 4] = "StopLimit";
741
- return OrderType2;
742
- })(OrderType || {});
743
- var OrderSide = /* @__PURE__ */ ((OrderSide2) => {
744
- OrderSide2[OrderSide2["Buy"] = 0] = "Buy";
745
- OrderSide2[OrderSide2["Sell"] = 1] = "Sell";
746
- return OrderSide2;
747
- })(OrderSide || {});
748
- var OrderStatus = /* @__PURE__ */ ((OrderStatus2) => {
749
- OrderStatus2[OrderStatus2["Pending"] = 0] = "Pending";
750
- OrderStatus2[OrderStatus2["Working"] = 1] = "Working";
751
- OrderStatus2[OrderStatus2["Filled"] = 2] = "Filled";
752
- OrderStatus2[OrderStatus2["Cancelled"] = 3] = "Cancelled";
753
- OrderStatus2[OrderStatus2["Rejected"] = 4] = "Rejected";
754
- OrderStatus2[OrderStatus2["PartiallyFilled"] = 5] = "PartiallyFilled";
755
- return OrderStatus2;
756
- })(OrderStatus || {});
757
- var BarUnit = /* @__PURE__ */ ((BarUnit2) => {
758
- BarUnit2[BarUnit2["Second"] = 1] = "Second";
759
- BarUnit2[BarUnit2["Minute"] = 2] = "Minute";
760
- BarUnit2[BarUnit2["Hour"] = 3] = "Hour";
761
- BarUnit2[BarUnit2["Day"] = 4] = "Day";
762
- BarUnit2[BarUnit2["Week"] = 5] = "Week";
763
- BarUnit2[BarUnit2["Month"] = 6] = "Month";
764
- return BarUnit2;
765
- })(BarUnit || {});
766
- var PositionType = /* @__PURE__ */ ((PositionType2) => {
767
- PositionType2[PositionType2["Long"] = 0] = "Long";
768
- PositionType2[PositionType2["Short"] = 1] = "Short";
769
- return PositionType2;
770
- })(PositionType || {});
771
- var TradeType = /* @__PURE__ */ ((TradeType2) => {
772
- TradeType2[TradeType2["Bid"] = 0] = "Bid";
773
- TradeType2[TradeType2["Ask"] = 1] = "Ask";
774
- return TradeType2;
775
- })(TradeType || {});
1260
+ // src/shared/order.status.enum.ts
1261
+ var OrderStatusEnum = /* @__PURE__ */ ((OrderStatusEnum2) => {
1262
+ OrderStatusEnum2[OrderStatusEnum2["Pending"] = 0] = "Pending";
1263
+ OrderStatusEnum2[OrderStatusEnum2["Working"] = 1] = "Working";
1264
+ OrderStatusEnum2[OrderStatusEnum2["Filled"] = 2] = "Filled";
1265
+ OrderStatusEnum2[OrderStatusEnum2["Cancelled"] = 3] = "Cancelled";
1266
+ OrderStatusEnum2[OrderStatusEnum2["Rejected"] = 4] = "Rejected";
1267
+ OrderStatusEnum2[OrderStatusEnum2["PartiallyFilled"] = 5] = "PartiallyFilled";
1268
+ return OrderStatusEnum2;
1269
+ })(OrderStatusEnum || {});
1270
+
1271
+ // src/shared/position.type.enum.ts
1272
+ var PositionTypeEnum = /* @__PURE__ */ ((PositionTypeEnum2) => {
1273
+ PositionTypeEnum2[PositionTypeEnum2["Long"] = 0] = "Long";
1274
+ PositionTypeEnum2[PositionTypeEnum2["Short"] = 1] = "Short";
1275
+ return PositionTypeEnum2;
1276
+ })(PositionTypeEnum || {});
1277
+
1278
+ // src/shared/trade.type.enum.ts
1279
+ var TradeTypeEnum = /* @__PURE__ */ ((TradeTypeEnum2) => {
1280
+ TradeTypeEnum2[TradeTypeEnum2["Bid"] = 0] = "Bid";
1281
+ TradeTypeEnum2[TradeTypeEnum2["Ask"] = 1] = "Ask";
1282
+ return TradeTypeEnum2;
1283
+ })(TradeTypeEnum || {});
776
1284
 
777
- export { AccountApi, ApiError, AuthService, AuthenticationError, BarUnit, ConnectionError, ConnectionManager, ContractApi, HistoryApi, HttpClient, MarketHub, OrderApi, OrderSide, OrderStatus, OrderType, PositionApi, PositionType, TopstepXClient, TopstepXError, TradeApi, TradeType, TypedEventEmitter, UserHub };
1285
+ export { AccountApi, ApiError, AuthService, AuthenticationError, CME_CONTRACTS, CmeContractStore, ConnectionError, ConnectionManager, ContractApi, HistoryApi, HttpClient, OrderApi, OrderStatusEnum, PositionApi, PositionTypeEnum, RealtimeMarketEventHub, RealtimeUserEventHub, TopstepXClient, TopstepXError, TradeApi, TradeTypeEnum, TypedEventEmitter };
778
1286
  //# sourceMappingURL=index.js.map
779
1287
  //# sourceMappingURL=index.js.map