@neilberkman/sidereon 0.10.1 → 0.11.1

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.
@@ -284,6 +284,617 @@ export interface PropagateStateRequest {
284
284
  muKm3S2?: number;
285
285
  }
286
286
 
287
+ // --- Covariance propagation -------------------------------------------------
288
+ //
289
+ // `propagateCovariance(request)` and `transportCovariance(covariance, segments,
290
+ // options)` deserialize through serde. These interfaces document the accepted
291
+ // JS objects and plain object fields returned by the related table APIs.
292
+
293
+ /** Covariance reference frame label. */
294
+ export type CovarianceFrameLabel = "inertial" | "rtn";
295
+
296
+ /** RTN acceleration process-noise power spectral densities. */
297
+ export interface CovarianceProcessNoise {
298
+ qRadialKm2S3?: number;
299
+ qTransverseKm2S3?: number;
300
+ qNormalKm2S3?: number;
301
+ }
302
+
303
+ /** Space-weather constants embedded in a covariance drag request. */
304
+ export interface CovarianceDragSpaceWeather {
305
+ f107?: number;
306
+ f107a?: number;
307
+ ap?: number;
308
+ }
309
+
310
+ /** Drag parameterization for covariance propagation. */
311
+ export interface CovarianceDragConfig {
312
+ bcFactorM2Kg?: number;
313
+ ballisticCoefficientKgM2?: number;
314
+ cd?: number;
315
+ areaM2?: number;
316
+ massKg?: number;
317
+ cutoffAltitudeKm?: number;
318
+ spaceWeather?: CovarianceDragSpaceWeather;
319
+ }
320
+
321
+ /** The object passed to `propagateCovariance`. */
322
+ export interface CovariancePropagationRequest {
323
+ epochS: number;
324
+ positionKm: [number, number, number];
325
+ velocityKmS: [number, number, number];
326
+ covariance: number[] | Float64Array;
327
+ timesS: number[];
328
+ covarianceFrame?: CovarianceFrameLabel;
329
+ outputFrame?: CovarianceFrameLabel;
330
+ processNoise?: CovarianceProcessNoise;
331
+ forceModel?: ForceModel;
332
+ integrator?: Integrator;
333
+ absTol?: number;
334
+ relTol?: number;
335
+ initialStepS?: number;
336
+ minStepS?: number;
337
+ maxStepS?: number;
338
+ maxSteps?: number;
339
+ muKm3S2?: number;
340
+ drag?: CovarianceDragConfig;
341
+ }
342
+
343
+ /** One STM segment passed to `transportCovariance`. */
344
+ export interface CovarianceTransportSegment {
345
+ stateTransitionMatrix: number[] | Float64Array;
346
+ dtS: number;
347
+ qRotationEpochS: number;
348
+ qRotationPositionKm: [number, number, number];
349
+ qRotationVelocityKmS: [number, number, number];
350
+ }
351
+
352
+ /** Options passed as the third argument to `transportCovariance`. */
353
+ export interface CovarianceTransportOptions {
354
+ processNoise?: CovarianceProcessNoise;
355
+ }
356
+
357
+ // --- SGP4 fitting -----------------------------------------------------------
358
+ //
359
+ // `fitTle(samples, config)` accepts TEME state samples plus solver controls and
360
+ // returns `TleFit.elements` / `TleFit.stats` as serde plain objects.
361
+
362
+ /** One TEME state sample for `fitTle`. */
363
+ export interface TleFitSample {
364
+ epoch: [number, number];
365
+ positionTemeKm: [number, number, number];
366
+ velocityTemeKmS?: [number, number, number];
367
+ }
368
+
369
+ /** Metadata copied into the fitted TLE and OMM encodings. */
370
+ export interface TleFitMetadata {
371
+ catalogNumber?: number;
372
+ classification?: "U" | "C" | "S";
373
+ internationalDesignator?: string;
374
+ elementSetNumber?: number;
375
+ revAtEpoch?: number;
376
+ objectName?: string;
377
+ }
378
+
379
+ /** Solver controls for `fitTle`. */
380
+ export interface TleFitConfig {
381
+ epoch?: "midpoint" | "first" | "last";
382
+ epochSampleIndex?: number;
383
+ epochJd?: [number, number];
384
+ fitBstar?: boolean;
385
+ bstarSeed?: number;
386
+ useVelocity?: boolean;
387
+ velocityWeightS?: number;
388
+ weights?: number[];
389
+ opsMode?: "improved" | "afspc";
390
+ ftol?: number;
391
+ xtol?: number;
392
+ gtol?: number;
393
+ maxNfev?: number;
394
+ xScale?: "unit" | "jac" | number[];
395
+ loss?: "linear" | "softL1" | "soft_l1" | "huber" | "cauchy" | "arctan";
396
+ fScale?: number;
397
+ metadata?: TleFitMetadata;
398
+ }
399
+
400
+ /** `TleFit.stats` plain object. */
401
+ export interface TleFitStatistics {
402
+ rms_position_km: number;
403
+ max_position_km: number;
404
+ rms_position_axes_km: [number, number, number];
405
+ rms_velocity_km_s?: number;
406
+ tle_rms_position_km: number;
407
+ status: number;
408
+ nfev: number;
409
+ njev: number;
410
+ cost: number;
411
+ optimality: number;
412
+ bstar_observable: boolean;
413
+ seed_refine_passes: number;
414
+ }
415
+
416
+ /** `TleFit.elements` plain object. */
417
+ export interface TleFitElements {
418
+ epoch: [number, number];
419
+ bstar: number;
420
+ mean_motion_dot: number;
421
+ mean_motion_double_dot: number;
422
+ eccentricity: number;
423
+ argument_of_perigee_deg: number;
424
+ inclination_deg: number;
425
+ mean_anomaly_deg: number;
426
+ mean_motion_rev_per_day: number;
427
+ right_ascension_deg: number;
428
+ catalog_number: number;
429
+ }
430
+
431
+ // --- NMEA -------------------------------------------------------------------
432
+ //
433
+ // `parseNmea`, `NmeaAccumulator.push/finish`, and `nmeaWriteGga` use serde
434
+ // plain objects for sentence bodies, diagnostics, epochs, and writer requests.
435
+
436
+ /** Calendar date used by NMEA epoch recovery. */
437
+ export interface NmeaDate {
438
+ year: number;
439
+ month: number;
440
+ day: number;
441
+ }
442
+
443
+ /** NMEA time of day. */
444
+ export interface NmeaTimeOfDay {
445
+ hour: number;
446
+ minute: number;
447
+ second: number;
448
+ nanos: number;
449
+ decimals: number;
450
+ }
451
+
452
+ /** NMEA latitude, longitude, and ellipsoidal height. */
453
+ export interface NmeaPosition {
454
+ latDeg: number;
455
+ lonDeg: number;
456
+ heightM: number;
457
+ }
458
+
459
+ /** Shared NMEA parser diagnostics. */
460
+ export interface NmeaDiagnostics {
461
+ skipCount: number;
462
+ warningCount: number;
463
+ skips: unknown[];
464
+ warnings: unknown[];
465
+ }
466
+
467
+ /** One satellite ID used by an NMEA GSA epoch. */
468
+ export interface NmeaUsedSatellite {
469
+ raw: number;
470
+ resolved?: string;
471
+ }
472
+
473
+ /** One parsed or accumulated NMEA epoch. */
474
+ export interface NmeaEpoch {
475
+ timeOfDay: NmeaTimeOfDay;
476
+ date?: NmeaDate;
477
+ position: NmeaPosition;
478
+ instantUtcJ2000S?: number;
479
+ pdop?: number;
480
+ hdop?: number;
481
+ vdop?: number;
482
+ usedSatellites: NmeaUsedSatellite[];
483
+ satellitesInView: number;
484
+ sentenceCount: number;
485
+ diagnostics: NmeaDiagnostics;
486
+ gga?: Record<string, unknown>;
487
+ rmc?: Record<string, unknown>;
488
+ gll?: Record<string, unknown>;
489
+ gst?: Record<string, unknown>;
490
+ vtg?: Record<string, unknown>;
491
+ zda?: Record<string, unknown>;
492
+ gsa: Record<string, unknown>[];
493
+ gsv: Record<string, unknown>[];
494
+ }
495
+
496
+ /** Plain object returned by `NmeaAccumulator.push/finish`. */
497
+ export interface NmeaAccumulatorResult {
498
+ sentences: Record<string, unknown>[];
499
+ epochs: NmeaEpoch[];
500
+ diagnostics: NmeaDiagnostics;
501
+ retainedLength: number;
502
+ }
503
+
504
+ /** Constructor options for `NmeaAccumulator`. */
505
+ export interface NmeaAccumulatorOptions {
506
+ date?: NmeaDate;
507
+ maxSentencesPerEpoch?: number;
508
+ }
509
+
510
+ /** The object passed to `nmeaWriteGga`. */
511
+ export interface NmeaGgaRequest {
512
+ talker?: string;
513
+ timeSecondsOfDay: number;
514
+ latDeg: number;
515
+ lonDeg: number;
516
+ coordinateDecimals?: number;
517
+ quality?: number;
518
+ satellitesUsed?: number;
519
+ hdop?: number;
520
+ altitudeMslM?: number;
521
+ geoidSeparationM?: number;
522
+ differentialAgeS?: number;
523
+ differentialStationId?: string;
524
+ }
525
+
526
+ // --- NTRIP sans-IO ----------------------------------------------------------
527
+
528
+ /** Basic authentication credentials for NTRIP request construction. */
529
+ export interface NtripCredentials {
530
+ username: string;
531
+ password: string;
532
+ }
533
+
534
+ /** NTRIP revision label accepted by request and state-machine configs. */
535
+ export type NtripVersionLabel = "rev1" | "rev2";
536
+
537
+ /** Config object for `ntripRequestBytes` and `new NtripClientMachine(config)`. */
538
+ export interface NtripRequestConfig {
539
+ host: string;
540
+ port?: number;
541
+ mountpoint?: string;
542
+ version?: NtripVersionLabel;
543
+ credentials?: NtripCredentials;
544
+ userAgentProduct?: string;
545
+ ggaIntervalS?: number;
546
+ }
547
+
548
+ /** Header row surfaced on NTRIP connection events. */
549
+ export interface NtripHeader {
550
+ name: string;
551
+ value: string;
552
+ }
553
+
554
+ /** Event emitted by `NtripClientMachine.push/finish`. */
555
+ export type NtripClientEvent =
556
+ | {
557
+ kind: "connected";
558
+ version?: NtripVersionLabel;
559
+ chunked?: boolean;
560
+ headers?: NtripHeader[];
561
+ payload?: undefined;
562
+ sourcetable?: undefined;
563
+ rejection?: undefined;
564
+ detail?: undefined;
565
+ }
566
+ | {
567
+ kind: "payload";
568
+ payload: number[];
569
+ version?: undefined;
570
+ chunked?: undefined;
571
+ headers?: undefined;
572
+ sourcetable?: undefined;
573
+ rejection?: undefined;
574
+ detail?: undefined;
575
+ }
576
+ | {
577
+ kind: "sourcetable";
578
+ sourcetable: NtripSourcetable;
579
+ version?: undefined;
580
+ chunked?: undefined;
581
+ headers?: undefined;
582
+ payload?: undefined;
583
+ rejection?: undefined;
584
+ detail?: undefined;
585
+ }
586
+ | {
587
+ kind: "rejected" | "streamCorrupted" | "streamEnded";
588
+ detail?: string;
589
+ rejection?: unknown;
590
+ version?: undefined;
591
+ chunked?: undefined;
592
+ headers?: undefined;
593
+ payload?: undefined;
594
+ sourcetable?: undefined;
595
+ };
596
+
597
+ /** Parsed scalar wrapper used by NTRIP sourcetable fields. */
598
+ export type NtripParsed<T> =
599
+ { kind: "parsed"; value: T } | { kind: "missing" } | { kind: "invalid"; raw: string };
600
+
601
+ /** One STR row in an NTRIP sourcetable. */
602
+ export interface NtripStreamRecord {
603
+ typeTag: "STR";
604
+ mountpoint: string;
605
+ identifier: string;
606
+ format: string;
607
+ formatDetails: string;
608
+ carrier: NtripParsed<number>;
609
+ navSystem: string;
610
+ network: string;
611
+ country: string;
612
+ latDeg: NtripParsed<number>;
613
+ lonDeg: NtripParsed<number>;
614
+ nmeaRequired: NtripParsed<boolean>;
615
+ networkSolution: NtripParsed<boolean>;
616
+ generator: string;
617
+ compression: string;
618
+ authentication: string;
619
+ fee: NtripParsed<boolean>;
620
+ bitrate: NtripParsed<number>;
621
+ misc: string;
622
+ }
623
+
624
+ /** Parsed NTRIP sourcetable. */
625
+ export interface NtripSourcetable {
626
+ recordCount: number;
627
+ streamCount: number;
628
+ streams: NtripStreamRecord[];
629
+ records: Record<string, unknown>[];
630
+ diagnostics: unknown[];
631
+ }
632
+
633
+ // --- Space weather ----------------------------------------------------------
634
+
635
+ /** CelesTrak CSSI table coverage. */
636
+ export interface SpaceWeatherCoverage {
637
+ firstJ2000S: number;
638
+ lastObservedJ2000S: number;
639
+ lastDailyPredictedJ2000S: number;
640
+ endJ2000S: number;
641
+ }
642
+
643
+ /** One daily CSSI space-weather row. */
644
+ export interface SpaceWeatherDay {
645
+ year: number;
646
+ month: number;
647
+ day: number;
648
+ class: "observed" | "dailyPredicted";
649
+ bsrn: number;
650
+ nd: number;
651
+ kp: number[];
652
+ kpSum: number;
653
+ ap: number[];
654
+ apAvg: number;
655
+ cp: number;
656
+ c9: number;
657
+ isn: number;
658
+ fluxQualifier?: string;
659
+ f107Obs: number;
660
+ f107Adj: number;
661
+ f107ObsCenter81: number;
662
+ f107ObsLast81: number;
663
+ f107AdjCenter81: number;
664
+ f107AdjLast81: number;
665
+ }
666
+
667
+ /** One monthly predicted CSSI row. */
668
+ export interface SpaceWeatherMonthly {
669
+ year: number;
670
+ month: number;
671
+ f107: number;
672
+ f107a: number;
673
+ ap?: number;
674
+ }
675
+
676
+ /** Sample returned by `SpaceWeatherTable.sampleAt`. */
677
+ export interface SpaceWeatherSample {
678
+ f107: number;
679
+ f107a: number;
680
+ ap: number;
681
+ class: "observed" | "dailyPredicted" | "monthlyPredicted";
682
+ apDefaulted: boolean;
683
+ }
684
+
685
+ /** Optional table sampling policy. */
686
+ export interface SpaceWeatherSamplePolicy {
687
+ defaultMonthlyAp?: number;
688
+ }
689
+
690
+ /** Decay request passed to `estimateDecayWithSpaceWeather`. */
691
+ export interface SpaceWeatherDecayRequest {
692
+ epochS: number;
693
+ positionKm: [number, number, number];
694
+ velocityKmS: [number, number, number];
695
+ scanStepS?: number;
696
+ maxDurationS?: number;
697
+ maxScanSamples?: number;
698
+ reentryAltitudeKm?: number;
699
+ crossingToleranceS?: number;
700
+ }
701
+
702
+ /** Decay result returned by `estimateDecayWithSpaceWeather`. */
703
+ export interface SpaceWeatherDecayResult {
704
+ timeToDecayS: number;
705
+ reentryEpochS: number;
706
+ reentryPositionKm: [number, number, number];
707
+ reentryVelocityKmS: [number, number, number];
708
+ reentryAltitudeKm: number;
709
+ }
710
+
711
+ // --- RINEX QC and repair ----------------------------------------------------
712
+
713
+ /** Location attached to a RINEX lint finding. */
714
+ export interface RinexFindingRef {
715
+ epochIndex?: number;
716
+ satellite?: string;
717
+ field?: string;
718
+ }
719
+
720
+ /** One lint finding from `lintRinexObs` or `lintRinexNav`. */
721
+ export interface RinexFinding {
722
+ code: string;
723
+ severity: "fatal" | "error" | "warning" | "info";
724
+ specRef: string;
725
+ repairable: boolean;
726
+ at: RinexFindingRef;
727
+ detail: string;
728
+ }
729
+
730
+ /** Shared RINEX lint report. */
731
+ export interface RinexLintReport {
732
+ clean: boolean;
733
+ decodedFromCrinex: boolean;
734
+ findingCount: number;
735
+ counts: { fatal: number; error: number; warning: number; info: number };
736
+ findings: RinexFinding[];
737
+ }
738
+
739
+ /** Options accepted by `repairRinexObs`. */
740
+ export interface RinexObsRepairOptions {
741
+ fileStamp?: string;
742
+ setInterval?: boolean;
743
+ setTimeOfLastObs?: boolean;
744
+ setObsCounts?: boolean;
745
+ dropEmptyRecords?: boolean;
746
+ sortRecords?: boolean;
747
+ }
748
+
749
+ /** Options accepted by `repairRinexNav`. */
750
+ export interface RinexNavRepairOptions {
751
+ fileStamp?: string;
752
+ dropUnsupported?: boolean;
753
+ sortRecords?: boolean;
754
+ }
755
+
756
+ /** Options accepted by `observationQc`. */
757
+ export interface ObservationQcOptions {
758
+ intervalOverrideS?: number;
759
+ gapFactor?: number;
760
+ clockJumpThresholdS?: number;
761
+ }
762
+
763
+ /** Civil epoch used inside observation QC report rows. */
764
+ export interface ObservationQcEpochTime {
765
+ year: number;
766
+ month: number;
767
+ day: number;
768
+ hour: number;
769
+ minute: number;
770
+ second: number;
771
+ }
772
+
773
+ /** One detected gap between adjacent observation epochs. */
774
+ export interface ObservationQcDataGap {
775
+ startEpoch: ObservationQcEpochTime;
776
+ endEpoch: ObservationQcEpochTime;
777
+ nominalIntervalS: number;
778
+ observedDeltaS: number;
779
+ missingEpochs: number;
780
+ }
781
+
782
+ /** One detected receiver-clock jump. */
783
+ export interface ObservationQcClockJump {
784
+ epochIndex: number;
785
+ deltaS: number;
786
+ }
787
+
788
+ /** One satellite summary in an observation QC report. */
789
+ export interface ObservationQcSatellite {
790
+ satellite: string;
791
+ epochsWithObservations: number;
792
+ valueObservations: number;
793
+ }
794
+
795
+ /** Signal-strength indicator histogram. */
796
+ export interface ObservationQcSsi {
797
+ counts: number[];
798
+ }
799
+
800
+ /** SNR summary for one signal. */
801
+ export interface ObservationQcSnr {
802
+ n: number;
803
+ mean: number;
804
+ min: number;
805
+ max: number;
806
+ std: number;
807
+ }
808
+
809
+ /** One satellite/signal summary in an observation QC report. */
810
+ export interface ObservationQcSatelliteSignal {
811
+ satellite: string;
812
+ code: string;
813
+ valueObservations: number;
814
+ ssi: ObservationQcSsi;
815
+ snr?: ObservationQcSnr;
816
+ }
817
+
818
+ /** One system/signal summary in an observation QC report. */
819
+ export interface ObservationQcSystemSignal {
820
+ system: string;
821
+ code: string;
822
+ valueObservations: number;
823
+ ssi: ObservationQcSsi;
824
+ snr?: ObservationQcSnr;
825
+ }
826
+
827
+ /** Per-system cycle-slip summary in an observation QC report. */
828
+ export interface ObservationQcSystemCycleSlip {
829
+ system: string;
830
+ observations: number;
831
+ slips: number;
832
+ observationsPerSlip?: number;
833
+ }
834
+
835
+ /** Cycle-slip summary in an observation QC report. */
836
+ export interface ObservationQcCycleSlips {
837
+ observations: number;
838
+ totalSlips: number;
839
+ observationsPerSlip?: number;
840
+ bySystem: ObservationQcSystemCycleSlip[];
841
+ }
842
+
843
+ /** MP1 or MP2 multipath RMS statistics. */
844
+ export interface ObservationQcMpStats {
845
+ n: number;
846
+ rmsM: number;
847
+ }
848
+
849
+ /** Per-satellite multipath summary in an observation QC report. */
850
+ export interface ObservationQcSatelliteMultipath {
851
+ satellite: string;
852
+ mp1?: ObservationQcMpStats;
853
+ mp2?: ObservationQcMpStats;
854
+ }
855
+
856
+ /** Per-system multipath summary in an observation QC report. */
857
+ export interface ObservationQcSystemMultipath {
858
+ system: string;
859
+ mp1?: ObservationQcMpStats;
860
+ mp2?: ObservationQcMpStats;
861
+ }
862
+
863
+ /** Multipath summary in an observation QC report. */
864
+ export interface ObservationQcMultipath {
865
+ satellites: ObservationQcSatelliteMultipath[];
866
+ systems: ObservationQcSystemMultipath[];
867
+ }
868
+
869
+ /** Non-fatal observation QC note. */
870
+ export interface ObservationQcNote {
871
+ kind: string;
872
+ epochIndex?: number;
873
+ }
874
+
875
+ /** Report object returned by `observationQc`. */
876
+ export interface ObservationQcReport {
877
+ totalEpochRecords: number;
878
+ observationEpochs: number;
879
+ eventRecords: number;
880
+ powerFailureEpochs: number;
881
+ skippedRecords: number;
882
+ intervalS?: number;
883
+ intervalSource?: string;
884
+ missingEpochs: number;
885
+ dataGaps: ObservationQcDataGap[];
886
+ clockJumps: ObservationQcClockJump[];
887
+ cycleSlips: ObservationQcCycleSlips;
888
+ multipath: ObservationQcMultipath;
889
+ satellites: ObservationQcSatellite[];
890
+ satelliteSignals: ObservationQcSatelliteSignal[];
891
+ systemSignals: ObservationQcSystemSignal[];
892
+ notes: ObservationQcNote[];
893
+ renderText(): string;
894
+ renderHtml(): string;
895
+ toJson(): string;
896
+ }
897
+
287
898
  // --- RTK baseline solving ---------------------------------------------------
288
899
  //
289
900
  // `solveRtkFloat(config)` / `solveRtkFixed(config)` deserialize through serde.
@@ -890,13 +1501,7 @@ export interface BroadcastCompareReport {
890
1501
 
891
1502
  /** Lower-case constellation label, e.g. "gps". GPS is supported today. */
892
1503
  export type ConstellationSystem =
893
- | "gps"
894
- | "glonass"
895
- | "galileo"
896
- | "beidou"
897
- | "qzss"
898
- | "navic"
899
- | "sbas";
1504
+ "gps" | "glonass" | "galileo" | "beidou" | "qzss" | "navic" | "sbas";
900
1505
 
901
1506
  /** CelesTrak `gps-ops` provenance preserved on a record. */
902
1507
  export interface CelestrakSource {
@@ -1403,10 +2008,7 @@ export interface LnavOptions {
1403
2008
 
1404
2009
  /** Geometric classification of a two-body orbit. */
1405
2010
  export type OrbitType =
1406
- | "ellipticalInclined"
1407
- | "ellipticalEquatorial"
1408
- | "circularInclined"
1409
- | "circularEquatorial";
2011
+ "ellipticalInclined" | "ellipticalEquatorial" | "circularInclined" | "circularEquatorial";
1410
2012
 
1411
2013
  /**
1412
2014
  * Classical (Keplerian) orbital elements in the Vallado convention. Returned by
@@ -1530,6 +2132,21 @@ export interface RtcmMsmSignal {
1530
2132
  finePhaseRangeRate?: number;
1531
2133
  }
1532
2134
 
2135
+ /** Derived RINEX LLI for one MSM signal cell. */
2136
+ export interface RtcmCellLli {
2137
+ satelliteId: number;
2138
+ signalId: number;
2139
+ /** RINEX LLI value; bit 0 is loss of lock, bit 1 is half-cycle ambiguity. */
2140
+ lli: number;
2141
+ minLockTimeMs?: number;
2142
+ }
2143
+
2144
+ /** Previous lock-state input for `rtcmDeriveLli`. */
2145
+ export interface RtcmPreviousLock {
2146
+ minLockTimeMs?: number;
2147
+ elapsedMs: number;
2148
+ }
2149
+
1533
2150
  /** An MSM4 / MSM7 multi-signal observation message. */
1534
2151
  export interface RtcmMsm {
1535
2152
  type: "msm";
@@ -1652,6 +2269,32 @@ export interface RtcmScannedFrame {
1652
2269
  frameLen: number;
1653
2270
  }
1654
2271
 
2272
+ /** One CRC-valid frame skipped by `decodeRtcmStream`. */
2273
+ export interface RtcmFrameSkip {
2274
+ offset: number;
2275
+ messageNumber?: number;
2276
+ reason: "truncated" | "malformed";
2277
+ message?: string;
2278
+ }
2279
+
2280
+ /** Stream diagnostics returned by `decodeRtcmStream`. */
2281
+ export interface RtcmStreamDiagnostics {
2282
+ resyncBytes: number;
2283
+ skippedFrames: RtcmFrameSkip[];
2284
+ }
2285
+
2286
+ /** RTCM stream decode result returned by `decodeRtcmStream`. */
2287
+ export interface RtcmStream {
2288
+ messages: RtcmMessage[];
2289
+ diagnostics: RtcmStreamDiagnostics;
2290
+ }
2291
+
2292
+ /** RINEX LLI bit constants used by RTCM MSM helpers. */
2293
+ export interface RtcmLliBits {
2294
+ lossOfLock: number;
2295
+ halfCycle: number;
2296
+ }
2297
+
1655
2298
  // ---------------------------------------------------------------------------
1656
2299
  // Moving-baseline RTK
1657
2300
  // ---------------------------------------------------------------------------