topstepx-api 1.0.2 → 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;
@@ -502,9 +1015,12 @@ var MarketHub = class extends TypedEventEmitter {
502
1015
  subscribedDepth = /* @__PURE__ */ new Set();
503
1016
  setupEventHandlers() {
504
1017
  this.connectionManager.onMarketConnection((connection) => {
505
- connection.on("GatewayQuote", (contractId, data) => {
506
- this.emit("quote", { contractId, data });
507
- });
1018
+ connection.on(
1019
+ "GatewayQuote",
1020
+ (contractId, data) => {
1021
+ this.emit("quote", { contractId, data });
1022
+ }
1023
+ );
508
1024
  connection.on(
509
1025
  "GatewayTrade",
510
1026
  (contractId, data) => {
@@ -571,8 +1087,8 @@ var MarketHub = class extends TypedEventEmitter {
571
1087
  }
572
1088
  };
573
1089
 
574
- // src/realtime/user/user-hub.ts
575
- var UserHub = class extends TypedEventEmitter {
1090
+ // src/realtime/user/realtime.user.event.hub.ts
1091
+ var RealtimeUserEventHub = class extends TypedEventEmitter {
576
1092
  constructor(connectionManager) {
577
1093
  super();
578
1094
  this.connectionManager = connectionManager;
@@ -583,18 +1099,30 @@ var UserHub = class extends TypedEventEmitter {
583
1099
  subscribedTrades = /* @__PURE__ */ new Set();
584
1100
  setupEventHandlers() {
585
1101
  this.connectionManager.onUserConnection((connection) => {
586
- connection.on("GatewayUserAccount", (data) => {
587
- this.emit("account", data);
588
- });
589
- connection.on("GatewayUserOrder", (data) => {
590
- this.emit("order", data);
591
- });
592
- connection.on("GatewayUserPosition", (data) => {
593
- this.emit("position", data);
594
- });
595
- connection.on("GatewayUserTrade", (data) => {
596
- this.emit("trade", data);
597
- });
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
+ );
598
1126
  });
599
1127
  }
600
1128
  async subscribe(accountId) {
@@ -649,7 +1177,7 @@ var UserHub = class extends TypedEventEmitter {
649
1177
  }
650
1178
  };
651
1179
 
652
- // src/client.ts
1180
+ // src/topstep.x.client.ts
653
1181
  var TopstepXClient = class extends TypedEventEmitter {
654
1182
  auth;
655
1183
  connectionManager;
@@ -695,8 +1223,8 @@ var TopstepXClient = class extends TypedEventEmitter {
695
1223
  userHubUrl: config.userHubUrl ?? "https://rtc.topstepx.com/hubs/user",
696
1224
  auth: this.auth
697
1225
  });
698
- this.marketHub = new MarketHub(this.connectionManager);
699
- this.userHub = new UserHub(this.connectionManager);
1226
+ this.marketHub = new RealtimeMarketEventHub(this.connectionManager);
1227
+ this.userHub = new RealtimeUserEventHub(this.connectionManager);
700
1228
  }
701
1229
  /**
702
1230
  * Connect to the TopstepX API.
@@ -729,48 +1257,31 @@ var TopstepXClient = class extends TypedEventEmitter {
729
1257
  }
730
1258
  };
731
1259
 
732
- // src/types/enums.ts
733
- var OrderType = /* @__PURE__ */ ((OrderType2) => {
734
- OrderType2[OrderType2["Limit"] = 1] = "Limit";
735
- OrderType2[OrderType2["Market"] = 2] = "Market";
736
- OrderType2[OrderType2["Stop"] = 3] = "Stop";
737
- OrderType2[OrderType2["StopLimit"] = 4] = "StopLimit";
738
- return OrderType2;
739
- })(OrderType || {});
740
- var OrderSide = /* @__PURE__ */ ((OrderSide2) => {
741
- OrderSide2[OrderSide2["Buy"] = 0] = "Buy";
742
- OrderSide2[OrderSide2["Sell"] = 1] = "Sell";
743
- return OrderSide2;
744
- })(OrderSide || {});
745
- var OrderStatus = /* @__PURE__ */ ((OrderStatus2) => {
746
- OrderStatus2[OrderStatus2["Pending"] = 0] = "Pending";
747
- OrderStatus2[OrderStatus2["Working"] = 1] = "Working";
748
- OrderStatus2[OrderStatus2["Filled"] = 2] = "Filled";
749
- OrderStatus2[OrderStatus2["Cancelled"] = 3] = "Cancelled";
750
- OrderStatus2[OrderStatus2["Rejected"] = 4] = "Rejected";
751
- OrderStatus2[OrderStatus2["PartiallyFilled"] = 5] = "PartiallyFilled";
752
- return OrderStatus2;
753
- })(OrderStatus || {});
754
- var BarUnit = /* @__PURE__ */ ((BarUnit2) => {
755
- BarUnit2[BarUnit2["Second"] = 1] = "Second";
756
- BarUnit2[BarUnit2["Minute"] = 2] = "Minute";
757
- BarUnit2[BarUnit2["Hour"] = 3] = "Hour";
758
- BarUnit2[BarUnit2["Day"] = 4] = "Day";
759
- BarUnit2[BarUnit2["Week"] = 5] = "Week";
760
- BarUnit2[BarUnit2["Month"] = 6] = "Month";
761
- return BarUnit2;
762
- })(BarUnit || {});
763
- var PositionType = /* @__PURE__ */ ((PositionType2) => {
764
- PositionType2[PositionType2["Long"] = 0] = "Long";
765
- PositionType2[PositionType2["Short"] = 1] = "Short";
766
- return PositionType2;
767
- })(PositionType || {});
768
- var TradeType = /* @__PURE__ */ ((TradeType2) => {
769
- TradeType2[TradeType2["Bid"] = 0] = "Bid";
770
- TradeType2[TradeType2["Ask"] = 1] = "Ask";
771
- return TradeType2;
772
- })(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 || {});
773
1284
 
774
- 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 };
775
1286
  //# sourceMappingURL=index.js.map
776
1287
  //# sourceMappingURL=index.js.map