@neilberkman/sidereon 0.24.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.
@@ -1,6 +1,555 @@
1
1
  /* tslint:disable */
2
2
  /* eslint-disable */
3
3
 
4
+ /* sidereon typed JsValue overlay */
5
+ export type Vec3 = [number, number, number] | Float64Array;
6
+ export type Vec4 = [number, number, number, number] | Float64Array;
7
+ export type Matrix3 = number[] | Float64Array;
8
+
9
+ export interface SurfaceMetInput {
10
+ pressureHpa: number;
11
+ temperatureK: number;
12
+ relativeHumidity: number;
13
+ }
14
+
15
+ export interface RobustOptions {
16
+ huberK?: number;
17
+ scaleFloorM?: number;
18
+ maxOuter?: number;
19
+ outerTolM?: number;
20
+ }
21
+
22
+ export interface SppObservation {
23
+ satelliteId: string;
24
+ pseudorangeM: number;
25
+ }
26
+
27
+ export interface SppCorrections {
28
+ ionosphere?: boolean;
29
+ troposphere?: boolean;
30
+ }
31
+
32
+ export interface SppRequest {
33
+ observations: SppObservation[];
34
+ tRxJ2000S: number;
35
+ tRxSecondOfDayS: number;
36
+ dayOfYear: number;
37
+ initialGuess?: Vec4;
38
+ corrections?: SppCorrections;
39
+ klobuchar?: { alpha?: Vec4; beta?: Vec4 };
40
+ met?: SurfaceMetInput;
41
+ glonassChannels?: Array<[number, number]>;
42
+ withGeodetic?: boolean;
43
+ robust?: RobustOptions;
44
+ coarseSearchSeeds?: number;
45
+ maxPdop?: number;
46
+ }
47
+
48
+ export interface FdeRequest extends SppRequest {
49
+ pFa?: number;
50
+ weights?: Array<{ satelliteId: string; weight: number }>;
51
+ nSystems?: number;
52
+ maxIterations?: number;
53
+ }
54
+
55
+ export interface SppBatchOptions {
56
+ withGeodetic?: boolean;
57
+ coarseSearchSeeds?: number;
58
+ maxPdop?: number;
59
+ }
60
+
61
+ export interface RinexSppOptions {
62
+ signalPolicy?: Record<string, string[]>;
63
+ corrections?: SppCorrections;
64
+ initialGuess?: Vec4;
65
+ satellites?: string[];
66
+ met?: SurfaceMetInput;
67
+ robust?: RobustOptions;
68
+ }
69
+
70
+ export type RinexSppSolveOptions = SppBatchOptions;
71
+
72
+ export interface RinexSppEpochTime {
73
+ year: number;
74
+ month: number;
75
+ day: number;
76
+ hour: number;
77
+ minute: number;
78
+ second: number;
79
+ }
80
+
81
+ export interface RinexSppEpochInputs {
82
+ epochIndex: number;
83
+ epoch: RinexSppEpochTime;
84
+ observations: SppObservation[];
85
+ tRxJ2000S: number;
86
+ tRxSecondOfDayS: number;
87
+ dayOfYear: number;
88
+ initialGuess: [number, number, number, number];
89
+ corrections: Required<SppCorrections>;
90
+ glonassChannels: Array<[number, number]>;
91
+ }
92
+
93
+ export interface RaimInput {
94
+ usedSats: string[];
95
+ residualsM: number[] | Float64Array;
96
+ }
97
+
98
+ export type RaimWeightsInput =
99
+ | { satelliteIds: string[]; weights: number[] | Float64Array }
100
+ | { satelliteIds: string[]; values: number[] | Float64Array }
101
+ | Array<{ satelliteId: string; weight: number }>
102
+ | Record<string, number>;
103
+
104
+ export interface RaimOptions {
105
+ pFa?: number;
106
+ weights?: RaimWeightsInput | RaimWeights;
107
+ weightEntries?: Array<{ satelliteId: string; elevationDeg: number; cn0Dbhz?: number }>;
108
+ varianceOptions?: { aM?: number; bM?: number; model?: "elevation" | "elevation_cn0"; cn0Dbhz?: number; cn0ScaleM2?: number };
109
+ nSystems?: number;
110
+ }
111
+
112
+ export interface RaimResult {
113
+ faultDetected: boolean;
114
+ testStatistic: number;
115
+ threshold: number | null;
116
+ worstSat: string | null;
117
+ reducedChiSquare: number | null;
118
+ normalizedResiduals: Record<string, number>;
119
+ rmsM: number;
120
+ dof: number;
121
+ }
122
+
123
+ export interface RangeFdeRow {
124
+ id: string;
125
+ residualM: number;
126
+ designRow: number[] | Float64Array;
127
+ weight: number;
128
+ }
129
+
130
+ export interface RangeFdeOptions {
131
+ pFa?: number;
132
+ maxExclusions?: number;
133
+ minRedundancy?: number;
134
+ }
135
+
136
+ export interface RangeFdeResult {
137
+ stateCorrection: number[];
138
+ stateCovariance: number[][];
139
+ globalTest: { weightedSumSquares: number; dof: number; threshold: number | null; testable: boolean; faultDetected: boolean };
140
+ excluded: string[];
141
+ diagnostics: Array<{ id: string; excluded: boolean; postFitResidualM: number; normalizedResidual: number }>;
142
+ iterations: number;
143
+ }
144
+
145
+ export interface AraimReceiver {
146
+ latRad: number;
147
+ lonRad: number;
148
+ heightM: number;
149
+ }
150
+
151
+ export interface AraimRow {
152
+ id: string;
153
+ lineOfSight: [number, number, number] | Float64Array;
154
+ system?: string;
155
+ elevationRad: number;
156
+ }
157
+
158
+ export interface AraimGeometry {
159
+ rows: AraimRow[];
160
+ receiver: AraimReceiver;
161
+ clockSystems: string[];
162
+ }
163
+
164
+ export interface AraimSatelliteIsmModel {
165
+ sigmaUraM: number;
166
+ sigmaUreM: number;
167
+ effectiveSigmaIntM?: number;
168
+ effectiveSigmaAccM?: number;
169
+ bNomM: number;
170
+ pSat: number;
171
+ }
172
+
173
+ export interface AraimConstellationIsm {
174
+ system: string;
175
+ pConst: number;
176
+ defaultSat: AraimSatelliteIsmModel;
177
+ }
178
+
179
+ export interface AraimSatelliteIsm extends AraimSatelliteIsmModel {
180
+ id: string;
181
+ }
182
+
183
+ export interface AraimIsm {
184
+ constellations: AraimConstellationIsm[];
185
+ satellites?: AraimSatelliteIsm[];
186
+ }
187
+
188
+ export interface AraimAllocation {
189
+ phmiTotal: number;
190
+ phmiVert: number;
191
+ phmiHor: number;
192
+ pfaVert: number;
193
+ pfaHor: number;
194
+ pThresholdUnmonitored: number;
195
+ pEmt?: number;
196
+ maxFaultOrder: number;
197
+ }
198
+
199
+ export interface AraimFaultHypothesis {
200
+ excluded: string[];
201
+ excludedConstellation: string | null;
202
+ prior: number;
203
+ }
204
+
205
+ export interface AraimFaultMode extends AraimFaultHypothesis {
206
+ sigmaIntEnuM: [number, number, number];
207
+ biasEnuM: [number, number, number];
208
+ thresholdEnuM: [number, number, number];
209
+ monitorable: boolean;
210
+ }
211
+
212
+ export interface AraimResult {
213
+ available: boolean;
214
+ hplM: number;
215
+ vplM: number;
216
+ sigmaAccHM: number;
217
+ sigmaAccVM: number;
218
+ emtM: number;
219
+ faultModes: AraimFaultMode[];
220
+ pUnmonitored: number;
221
+ availability: boolean;
222
+ }
223
+
224
+ export interface RtkSignalPair {
225
+ system?: string;
226
+ codeObservable: string;
227
+ phaseObservable: string;
228
+ }
229
+
230
+ export interface RtkDualSignalPair {
231
+ system?: string;
232
+ code1Observable: string;
233
+ phase1Observable: string;
234
+ code2Observable: string;
235
+ phase2Observable: string;
236
+ }
237
+
238
+ export interface RtkRinexArcOptions {
239
+ signalPairs?: RtkSignalPair[];
240
+ maxEpochs?: number;
241
+ minCommonSatellites?: number;
242
+ includePredictionTime?: boolean;
243
+ }
244
+
245
+ export interface RtkRinexDualArcOptions {
246
+ signalPairs?: RtkDualSignalPair[];
247
+ maxEpochs?: number;
248
+ minCommonSatellites?: number;
249
+ includePredictionTime?: boolean;
250
+ }
251
+
252
+ export interface RtkArcObservation {
253
+ satelliteId: string;
254
+ roverCodeM: number;
255
+ baseCodeM: number;
256
+ roverPhaseCycles: number;
257
+ basePhaseCycles: number;
258
+ wavelengthM: number;
259
+ elevationRad?: number;
260
+ }
261
+
262
+ export interface RtkArcEpoch {
263
+ tRxJ2000S: number;
264
+ observations: RtkArcObservation[];
265
+ }
266
+
267
+ export interface RtkMeasModel {
268
+ codeSigmaM?: number;
269
+ phaseSigmaM?: number;
270
+ sagnac?: boolean;
271
+ stochastic?: string | { kind: string; elevationWeighting?: boolean };
272
+ }
273
+
274
+ export interface RtkArcConfig {
275
+ baseM: Vec3;
276
+ reference?: string | { kind: string; satelliteId?: string };
277
+ model?: RtkMeasModel;
278
+ baselinePriorSigmaM?: number;
279
+ ambiguityPriorSigmaM?: number;
280
+ initialBaselineM?: Vec3;
281
+ wavelengthsM?: Record<string, number>;
282
+ offsetsM?: Record<string, number>;
283
+ updateOpts?: Record<string, number | boolean>;
284
+ preprocessing?: Record<string, number | boolean | string[]>;
285
+ }
286
+
287
+ export interface RtkStaticArcConfig {
288
+ arc: RtkArcConfig;
289
+ opts?: Record<string, number | boolean>;
290
+ }
291
+
292
+ export interface RtkArcSolution {
293
+ epochs: Array<Record<string, number | string | boolean | string[] | number[] | null>>;
294
+ finalState: Record<string, number | number[] | Record<string, number>>;
295
+ references: Record<string, string>;
296
+ }
297
+
298
+ export interface RtkStaticArcSolution {
299
+ float: Record<string, number | string | boolean | string[] | number[] | Record<string, number> | null>;
300
+ fixed: Record<string, number | string | boolean | string[] | number[] | Record<string, number> | null>;
301
+ }
302
+
303
+ export interface RtkDualFrequencyObservation {
304
+ satelliteId: string;
305
+ roverCode1M: number;
306
+ baseCode1M: number;
307
+ roverPhase1Cycles: number;
308
+ basePhase1Cycles: number;
309
+ roverCode2M: number;
310
+ baseCode2M: number;
311
+ roverPhase2Cycles: number;
312
+ basePhase2Cycles: number;
313
+ freq1Hz: number;
314
+ freq2Hz: number;
315
+ elevationRad?: number;
316
+ }
317
+
318
+ export interface RtkDualFrequencyArcEpoch {
319
+ tRxJ2000S: number;
320
+ observations: RtkDualFrequencyObservation[];
321
+ }
322
+
323
+ export interface RtkWideLaneArcConfig extends RtkArcConfig {
324
+ options?: Record<string, number | boolean>;
325
+ }
326
+
327
+ export interface RtkWideLaneFixedResult {
328
+ wideLaneCycles: Record<string, number>;
329
+ metadata: Record<string, number | string | boolean>;
330
+ solutions?: Array<Record<string, number | string | boolean | number[] | Record<string, number>>>;
331
+ }
332
+
333
+ export interface RtkIonosphereFreeArcConfig extends RtkArcConfig {
334
+ options?: Record<string, number | boolean>;
335
+ }
336
+
337
+ export interface RtkIonosphereFreeArcResult {
338
+ epochs: RtkArcEpoch[];
339
+ wavelengthsM: Record<string, number>;
340
+ offsetsM: Record<string, number>;
341
+ }
342
+
343
+ export interface PppCivil {
344
+ year: number;
345
+ month: number;
346
+ day: number;
347
+ hour: number;
348
+ minute: number;
349
+ second: number;
350
+ }
351
+
352
+ export interface PppObservation {
353
+ satelliteId: string;
354
+ ambiguityId: string;
355
+ codeM: number;
356
+ phaseM: number;
357
+ freq1Hz?: number;
358
+ freq2Hz?: number;
359
+ glonassChannel?: number;
360
+ }
361
+
362
+ export interface PppEpoch {
363
+ civil: PppCivil;
364
+ jdWhole: number;
365
+ jdFraction: number;
366
+ tRxJ2000S: number;
367
+ observations: PppObservation[];
368
+ }
369
+
370
+ export interface PppFloatState {
371
+ positionM: Vec3;
372
+ clocksM: number[];
373
+ ambiguitiesM: Record<string, number>;
374
+ ztdM?: number;
375
+ tropoGradientNorthM?: number;
376
+ tropoGradientEastM?: number;
377
+ residualIonosphereM?: Record<string, number>;
378
+ }
379
+
380
+ export interface PppWeights {
381
+ code?: number;
382
+ phase?: number;
383
+ elevationWeighting?: boolean;
384
+ }
385
+
386
+ export interface PppTroposphere {
387
+ enabled?: boolean;
388
+ estimateZtd?: boolean;
389
+ estimateTropoGradients?: boolean;
390
+ pressureHpa?: number;
391
+ temperatureK?: number;
392
+ relativeHumidity?: number;
393
+ vmf1?: Array<{ mjd: number; ah: number; aw: number }>;
394
+ }
395
+
396
+ export interface PppSolveOptions {
397
+ maxIterations?: number;
398
+ positionToleranceM?: number;
399
+ clockToleranceM?: number;
400
+ ambiguityToleranceM?: number;
401
+ ztdToleranceM?: number;
402
+ }
403
+
404
+ export interface PppFloatConfig {
405
+ weights?: PppWeights;
406
+ tropo?: PppTroposphere;
407
+ options?: PppSolveOptions;
408
+ elevationCutoffDeg?: number;
409
+ residualScreen?: boolean;
410
+ estimateResidualIonosphere?: boolean;
411
+ }
412
+
413
+ export interface PppFixedAmbiguity {
414
+ wavelengthsM: Record<string, number>;
415
+ offsetsM: Record<string, number>;
416
+ ratioThreshold?: number;
417
+ }
418
+
419
+ export interface PppFixedConfig {
420
+ ambiguity: PppFixedAmbiguity;
421
+ weights?: PppWeights;
422
+ tropo?: PppTroposphere;
423
+ options?: PppSolveOptions;
424
+ elevationCutoffDeg?: number;
425
+ estimateResidualIonosphere?: boolean;
426
+ }
427
+
428
+ export interface PppAutoInitOptions {
429
+ initialGuess?: { positionM: Vec3; clockM: number };
430
+ sppInitialGuess?: Vec4;
431
+ sppTroposphere?: boolean;
432
+ sppMet?: SurfaceMetInput;
433
+ }
434
+
435
+ export interface PppResidual {
436
+ epochIndex: number;
437
+ satelliteId: string;
438
+ codeM: number;
439
+ phaseM: number;
440
+ codeWeight: number;
441
+ phaseWeight: number;
442
+ }
443
+
444
+ export interface PppTemporalCorrelation {
445
+ lag1Autocorrelation: number;
446
+ decorrelationTimeEpochs: number;
447
+ decorrelationTimeS: number | null;
448
+ nominalSampleCount: number;
449
+ effectiveSampleCount: number;
450
+ varianceInflationFactor: number;
451
+ arcsUsed: number;
452
+ }
453
+
454
+ export type PppScalarMap = Record<string, number>;
455
+
456
+ export interface FusionConfig {
457
+ filterKind?: "ekf" | "ukf";
458
+ initialState?: Record<string, number | number[]>;
459
+ processNoise?: Record<string, number>;
460
+ leverArmBodyM?: Vec3;
461
+ timeSync?: FusionTimeSyncConfig;
462
+ }
463
+
464
+ export interface FusionTimeSyncConfig {
465
+ maxRetainedSamples?: number;
466
+ maxRetainedEpochs?: number;
467
+ }
468
+
469
+ export interface ImuSampleInput {
470
+ dtS: number;
471
+ accelMps2?: Vec3;
472
+ gyroRadS?: Vec3;
473
+ deltaVelocityMps?: Vec3;
474
+ deltaAngleRad?: Vec3;
475
+ }
476
+
477
+ export interface FusionLooseMeasurement {
478
+ epochJ2000S?: number;
479
+ positionM: Vec3;
480
+ velocityMps?: Vec3;
481
+ positionCovarianceM2?: Matrix3;
482
+ velocityCovarianceM2?: Matrix3;
483
+ }
484
+
485
+ export interface FusionTightEpoch {
486
+ observations: SppObservation[];
487
+ tRxJ2000S: number;
488
+ tRxSecondOfDayS: number;
489
+ dayOfYear: number;
490
+ corrections?: SppCorrections;
491
+ met?: SurfaceMetInput;
492
+ }
493
+
494
+ export interface FusionUpdate {
495
+ accepted: boolean;
496
+ normalizedInnovationSquared?: number;
497
+ reason?: string;
498
+ }
499
+
500
+ export interface FusionState {
501
+ epochJ2000S?: number;
502
+ positionM: [number, number, number];
503
+ velocityMps: [number, number, number];
504
+ attitudeQuaternion?: [number, number, number, number];
505
+ covariance?: number[];
506
+ }
507
+
508
+ export interface FusionTimeSyncStatus {
509
+ retainedSamples: number;
510
+ retainedEpochs: number;
511
+ maxRetainedSamples: number;
512
+ maxRetainedEpochs: number;
513
+ }
514
+
515
+ export interface FusionRtsEpoch {
516
+ epochJ2000S: number;
517
+ state: FusionState;
518
+ }
519
+
520
+ export interface DllJitterOptions {
521
+ cn0DbHz: number;
522
+ receiverBandwidthHz: number;
523
+ earlyLateSpacingChips: number;
524
+ integrationTimeS?: number;
525
+ }
526
+
527
+ export interface DllJitterResult {
528
+ sigmaChips: number;
529
+ sigmaM: number;
530
+ }
531
+
532
+ export interface MultipathEnvelopeOptions {
533
+ earlyLateSpacingChips: number;
534
+ receiverBandwidthHz: number;
535
+ relativeAmplitude?: number;
536
+ carrierPhaseRad?: number;
537
+ }
538
+
539
+ export interface MultipathEnvelopeResult {
540
+ delayChips: Float64Array;
541
+ errorChips: Float64Array;
542
+ }
543
+
544
+ export interface TerrainLookupOptions {
545
+ interpolation?: "bilinear" | "nearest" | "nearestPosting";
546
+ }
547
+
548
+ export type TerrainPoint = [number, number] | { longitudeDeg: number; latitudeDeg: number };
549
+ export type TerrainHeightBatchResult = { ok: true; heightM: number } | { ok: false; error: string };
550
+ export type TerrainOrthometricBatchResult = { ok: true; orthometricHeightM: OrthometricHeightM } | { ok: false; error: string };
551
+
552
+
4
553
  /**
5
554
  * Acquisition search-grid metadata.
6
555
  */
@@ -333,6 +882,14 @@ export class BroadcastEphemeris {
333
882
  * J2000 seconds. Returns `undefined` when no usable record covers the query.
334
883
  */
335
884
  evaluate(satellite: string, t_j2000_s: number): BroadcastStoreEvaluation | undefined;
885
+ /**
886
+ * Run fault detection and exclusion against this broadcast ephemeris.
887
+ *
888
+ * `request` is the SPP solve request plus the RAIM/exclusion options, the
889
+ * same object accepted by `Sp3.fde`. Delegates to
890
+ * `sidereon_core::quality::fde_spp` over the broadcast store.
891
+ */
892
+ fde(request: FdeRequest): FdeSolution;
336
893
  /**
337
894
  * Query ECEF position and clock for parallel satellite and epoch arrays
338
895
  * against this parsed broadcast ephemeris store.
@@ -358,7 +915,7 @@ export class BroadcastEphemeris {
358
915
  * SPP request object [`Sp3.solveSpp`] takes. The result is identical to
359
916
  * solving against this broadcast store as an ephemeris source.
360
917
  */
361
- solveBroadcast(request: any): SppSolution;
918
+ solveBroadcast(request: SppRequest): SppSolution;
362
919
  /**
363
920
  * Serialize the usable GPS, Galileo, and BeiDou broadcast records to
364
921
  * standard RINEX 3 navigation text. Deterministic: the same record set
@@ -1613,7 +2170,7 @@ export class DtedTerrain {
1613
2170
  * index-aligned to `points`; each entry is `{ ok: true, heightM }` or
1614
2171
  * `{ ok: false, error }`. Missing tiles evaluate to `0.0`.
1615
2172
  */
1616
- heightBatch(points: any, options: any): any;
2173
+ heightBatch(points: TerrainPoint[], options?: TerrainLookupOptions | null): TerrainHeightBatchResult[];
1617
2174
  /**
1618
2175
  * Terrain height in ORTHOMETRIC meters at `(longitudeDeg, latitudeDeg)`.
1619
2176
  *
@@ -1629,7 +2186,7 @@ export class DtedTerrain {
1629
2186
  * `"bilinear"`, `"nearest"`, or `"nearestPosting"`. Missing tiles evaluate
1630
2187
  * to `0.0`, matching the core DTED fallback.
1631
2188
  */
1632
- heightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): number;
2189
+ heightMWithOptions(longitude_deg: number, latitude_deg: number, options?: TerrainLookupOptions | null): number;
1633
2190
  /**
1634
2191
  * Create a DTED terrain reader rooted at `root`.
1635
2192
  *
@@ -2056,7 +2613,7 @@ export class FusionRtsHistory {
2056
2613
  /**
2057
2614
  * Recorded epochs in forward time order.
2058
2615
  */
2059
- readonly epochs: any;
2616
+ readonly epochs: FusionRtsEpoch[];
2060
2617
  }
2061
2618
 
2062
2619
  /**
@@ -2367,7 +2924,7 @@ export class GnssInsFilter {
2367
2924
  /**
2368
2925
  * Replace retained-history capacities for later time-sync replay.
2369
2926
  */
2370
- configureTimeSync(config: any): void;
2927
+ configureTimeSync(config: FusionTimeSyncConfig): void;
2371
2928
  /**
2372
2929
  * Encode the current fusion state with the core versioned binary codec.
2373
2930
  */
@@ -2375,23 +2932,23 @@ export class GnssInsFilter {
2375
2932
  /**
2376
2933
  * Build a filter, then restore its state from versioned fusion-state bytes.
2377
2934
  */
2378
- static fromStateBytes(config: any, bytes: Uint8Array): GnssInsFilter;
2935
+ static fromStateBytes(config: FusionConfig, bytes: Uint8Array): GnssInsFilter;
2379
2936
  /**
2380
2937
  * Build a filter from a JS configuration object.
2381
2938
  */
2382
- constructor(config: any);
2939
+ constructor(config: FusionConfig);
2383
2940
  /**
2384
2941
  * Propagate the filter with one IMU rate or increment sample.
2385
2942
  */
2386
- propagate(sample: any): any;
2943
+ propagate(sample: ImuSampleInput): FusionState;
2387
2944
  /**
2388
2945
  * Propagate the filter with a JS array of IMU samples.
2389
2946
  */
2390
- propagateBatch(samples: any): any;
2947
+ propagateBatch(samples: ImuSampleInput[]): FusionState[];
2391
2948
  /**
2392
2949
  * Propagate and record the transition for later fusion RTS smoothing.
2393
2950
  */
2394
- propagateRecorded(sample: any, history: FusionRtsHistoryBuilder): any;
2951
+ propagateRecorded(sample: ImuSampleInput, history: FusionRtsHistoryBuilder): FusionState;
2395
2952
  /**
2396
2953
  * Restore this filter from versioned fusion-state bytes.
2397
2954
  */
@@ -2399,67 +2956,67 @@ export class GnssInsFilter {
2399
2956
  /**
2400
2957
  * Current INS state, covariance, and last body-rate diagnostic.
2401
2958
  */
2402
- state(): any;
2959
+ state(): FusionState;
2403
2960
  /**
2404
2961
  * Current tight-coupling receiver-clock state.
2405
2962
  */
2406
- tightClockState(): any;
2963
+ tightClockState(): Record<string, number>;
2407
2964
  /**
2408
2965
  * Current retained-history capacity and occupancy.
2409
2966
  */
2410
- timeSyncStatus(): any;
2967
+ timeSyncStatus(): FusionTimeSyncStatus;
2411
2968
  /**
2412
2969
  * Apply a loose position or position-velocity GNSS fix at the current epoch.
2413
2970
  */
2414
- updateLoose(measurement: any): any;
2971
+ updateLoose(measurement: FusionLooseMeasurement): FusionUpdate;
2415
2972
  /**
2416
2973
  * Apply a loose GNSS fix and record checkpoints for fusion RTS smoothing.
2417
2974
  */
2418
- updateLooseRecorded(measurement: any, history: FusionRtsHistoryBuilder): any;
2975
+ updateLooseRecorded(measurement: FusionLooseMeasurement, history: FusionRtsHistoryBuilder): FusionUpdate;
2419
2976
  /**
2420
2977
  * Apply a loose GNSS fix, replaying retained IMU checkpoints when it is late.
2421
2978
  */
2422
- updateLooseTimeSync(measurement: any): any;
2979
+ updateLooseTimeSync(measurement: FusionLooseMeasurement): FusionUpdate;
2423
2980
  /**
2424
2981
  * Apply a gated wheeled-vehicle non-holonomic constraint update.
2425
2982
  */
2426
- updateNonHolonomic(): any;
2983
+ updateNonHolonomic(): FusionUpdate;
2427
2984
  /**
2428
2985
  * Apply a non-holonomic constraint and record checkpoints when an update applies.
2429
2986
  */
2430
- updateNonHolonomicRecorded(history: FusionRtsHistoryBuilder): any;
2987
+ updateNonHolonomicRecorded(history: FusionRtsHistoryBuilder): FusionUpdate;
2431
2988
  /**
2432
2989
  * Apply a gated zero-velocity and zero-angular-rate update.
2433
2990
  */
2434
- updateStationary(): any;
2991
+ updateStationary(): FusionUpdate;
2435
2992
  /**
2436
2993
  * Apply a stationary update and record checkpoints when an update applies.
2437
2994
  */
2438
- updateStationaryRecorded(history: FusionRtsHistoryBuilder): any;
2995
+ updateStationaryRecorded(history: FusionRtsHistoryBuilder): FusionUpdate;
2439
2996
  /**
2440
2997
  * Apply a tight raw-observation epoch against a broadcast ephemeris source.
2441
2998
  */
2442
- updateTightBroadcast(broadcast: BroadcastEphemeris, epoch: any): any;
2999
+ updateTightBroadcast(broadcast: BroadcastEphemeris, epoch: FusionTightEpoch): FusionUpdate;
2443
3000
  /**
2444
3001
  * Apply a tight broadcast update and record checkpoints for fusion RTS smoothing.
2445
3002
  */
2446
- updateTightBroadcastRecorded(broadcast: BroadcastEphemeris, epoch: any, history: FusionRtsHistoryBuilder): any;
3003
+ updateTightBroadcastRecorded(broadcast: BroadcastEphemeris, epoch: FusionTightEpoch, history: FusionRtsHistoryBuilder): FusionUpdate;
2447
3004
  /**
2448
3005
  * Apply a tight broadcast update, replaying retained IMU checkpoints when it is late.
2449
3006
  */
2450
- updateTightBroadcastTimeSync(broadcast: BroadcastEphemeris, epoch: any): any;
3007
+ updateTightBroadcastTimeSync(broadcast: BroadcastEphemeris, epoch: FusionTightEpoch): FusionUpdate;
2451
3008
  /**
2452
3009
  * Apply a tight raw-observation epoch against an SP3 source.
2453
3010
  */
2454
- updateTightSp3(sp3: Sp3, epoch: any): any;
3011
+ updateTightSp3(sp3: Sp3, epoch: FusionTightEpoch): FusionUpdate;
2455
3012
  /**
2456
3013
  * Apply a tight SP3 update and record checkpoints for fusion RTS smoothing.
2457
3014
  */
2458
- updateTightSp3Recorded(sp3: Sp3, epoch: any, history: FusionRtsHistoryBuilder): any;
3015
+ updateTightSp3Recorded(sp3: Sp3, epoch: FusionTightEpoch, history: FusionRtsHistoryBuilder): FusionUpdate;
2459
3016
  /**
2460
3017
  * Apply a tight SP3 update, replaying retained IMU checkpoints when it is late.
2461
3018
  */
2462
- updateTightSp3TimeSync(sp3: Sp3, epoch: any): any;
3019
+ updateTightSp3TimeSync(sp3: Sp3, epoch: FusionTightEpoch): FusionUpdate;
2463
3020
  }
2464
3021
 
2465
3022
  /**
@@ -3512,12 +4069,12 @@ export class MmapTerrain {
3512
4069
  * the EGM96 15-arcminute model requires a loaded `WW15MGH.DAC` grid and
3513
4070
  * does not fall back to the embedded 1-degree grid.
3514
4071
  */
3515
- ellipsoidalHeightMWithModel(longitude_deg: number, latitude_deg: number, options: any, geoid: TerrainGeoidModel): EllipsoidalHeightM;
4072
+ ellipsoidalHeightMWithModel(longitude_deg: number, latitude_deg: number, options: TerrainLookupOptions | null | undefined, geoid: TerrainGeoidModel): EllipsoidalHeightM;
3516
4073
  /**
3517
4074
  * Ellipsoidal height `h = H + N` in metres using embedded EGM96 1-degree
3518
4075
  * geoid conversion and explicit terrain lookup options.
3519
4076
  */
3520
- ellipsoidalHeightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): EllipsoidalHeightM;
4077
+ ellipsoidalHeightMWithOptions(longitude_deg: number, latitude_deg: number, options?: TerrainLookupOptions | null): EllipsoidalHeightM;
3521
4078
  /**
3522
4079
  * Parse terrain store bytes from a `Uint8Array`.
3523
4080
  */
@@ -3539,7 +4096,7 @@ export class MmapTerrain {
3539
4096
  * `{ longitudeDeg, latitudeDeg }` objects. Each entry is
3540
4097
  * `{ ok: true, heightM }` or `{ ok: false, error }`.
3541
4098
  */
3542
- heightBatch(points: any, options: any): any;
4099
+ heightBatch(points: TerrainPoint[], options?: TerrainLookupOptions | null): TerrainHeightBatchResult[];
3543
4100
  /**
3544
4101
  * Terrain height in ORTHOMETRIC metres at `(longitudeDeg, latitudeDeg)`.
3545
4102
  *
@@ -3553,14 +4110,14 @@ export class MmapTerrain {
3553
4110
  * `options.interpolation` is `"bilinear"`, `"nearest"`, or
3554
4111
  * `"nearestPosting"`.
3555
4112
  */
3556
- heightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): number;
4113
+ heightMWithOptions(longitude_deg: number, latitude_deg: number, options?: TerrainLookupOptions | null): number;
3557
4114
  /**
3558
4115
  * Batch typed ORTHOMETRIC terrain heights for longitude-first points.
3559
4116
  *
3560
4117
  * Each entry is `{ ok: true, orthometricHeightM: { valueM } }` or
3561
4118
  * `{ ok: false, error }`.
3562
4119
  */
3563
- orthometricHeightBatch(points: any, options: any): any;
4120
+ orthometricHeightBatch(points: TerrainPoint[], options?: TerrainLookupOptions | null): TerrainOrthometricBatchResult[];
3564
4121
  /**
3565
4122
  * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`.
3566
4123
  */
@@ -3569,7 +4126,7 @@ export class MmapTerrain {
3569
4126
  * Typed ORTHOMETRIC terrain height `H` at `(longitudeDeg, latitudeDeg)`
3570
4127
  * with explicit lookup options.
3571
4128
  */
3572
- orthometricHeightMWithOptions(longitude_deg: number, latitude_deg: number, options: any): OrthometricHeightM;
4129
+ orthometricHeightMWithOptions(longitude_deg: number, latitude_deg: number, options?: TerrainLookupOptions | null): OrthometricHeightM;
3573
4130
  /**
3574
4131
  * Parsed tile index records in store order.
3575
4132
  */
@@ -3748,7 +4305,7 @@ export class NmeaParseResult {
3748
4305
  [Symbol.dispose](): void;
3749
4306
  readonly diagnostics: any;
3750
4307
  readonly epochCount: number;
3751
- readonly epochs: any;
4308
+ readonly epochs: FusionRtsEpoch[];
3752
4309
  readonly sentenceCount: number;
3753
4310
  readonly sentences: any;
3754
4311
  }
@@ -3762,7 +4319,7 @@ export class NtripClientMachine {
3762
4319
  connectionRequest(): Uint8Array;
3763
4320
  finish(): any;
3764
4321
  ggaMessage(now_s: number, position: any, utc_seconds_of_day: number): any;
3765
- constructor(config: any);
4322
+ constructor(config: FusionConfig);
3766
4323
  push(bytes: Uint8Array): any;
3767
4324
  reset(): void;
3768
4325
  readonly state: NtripState;
@@ -4919,11 +5476,11 @@ export class PppFixedSolution {
4919
5476
  /**
4920
5477
  * Fixed ambiguities, integer cycles, as an id-keyed object.
4921
5478
  */
4922
- readonly fixedAmbiguitiesCycles: any;
5479
+ readonly fixedAmbiguitiesCycles: Record<string, number>;
4923
5480
  /**
4924
5481
  * Fixed ambiguities, metres, as an id-keyed object.
4925
5482
  */
4926
- readonly fixedAmbiguitiesM: any;
5483
+ readonly fixedAmbiguitiesM: PppScalarMap;
4927
5484
  /**
4928
5485
  * The float solution that seeded the integer search.
4929
5486
  */
@@ -4965,11 +5522,11 @@ export class PppFixedSolution {
4965
5522
  /**
4966
5523
  * Residual ionosphere states, metres, as an id-keyed object.
4967
5524
  */
4968
- readonly residualIonosphereM: any;
5525
+ readonly residualIonosphereM: PppScalarMap;
4969
5526
  /**
4970
5527
  * Post-fit PPP residual rows.
4971
5528
  */
4972
- readonly residuals: any;
5529
+ readonly residuals: PppResidual[];
4973
5530
  /**
4974
5531
  * Static PPP termination status.
4975
5532
  */
@@ -4977,7 +5534,7 @@ export class PppFixedSolution {
4977
5534
  /**
4978
5535
  * Temporal-correlation summary used by the conservative covariance.
4979
5536
  */
4980
- readonly temporalCorrelation: any;
5537
+ readonly temporalCorrelation: PppTemporalCorrelation;
4981
5538
  /**
4982
5539
  * Temporal-correlation-deflated ECEF covariance, row-major 3-by-3.
4983
5540
  */
@@ -5020,7 +5577,7 @@ export class PppFloatSolution {
5020
5577
  /**
5021
5578
  * Float ambiguities, metres, as an id-keyed object.
5022
5579
  */
5023
- readonly ambiguitiesM: any;
5580
+ readonly ambiguitiesM: PppScalarMap;
5024
5581
  readonly codeRmsM: number;
5025
5582
  readonly converged: boolean;
5026
5583
  /**
@@ -5058,11 +5615,11 @@ export class PppFloatSolution {
5058
5615
  /**
5059
5616
  * Residual ionosphere states, metres, as an id-keyed object.
5060
5617
  */
5061
- readonly residualIonosphereM: any;
5618
+ readonly residualIonosphereM: PppScalarMap;
5062
5619
  /**
5063
5620
  * Post-fit PPP residual rows.
5064
5621
  */
5065
- readonly residuals: any;
5622
+ readonly residuals: PppResidual[];
5066
5623
  /**
5067
5624
  * Static PPP termination status.
5068
5625
  */
@@ -5070,7 +5627,7 @@ export class PppFloatSolution {
5070
5627
  /**
5071
5628
  * Temporal-correlation summary used by the conservative covariance.
5072
5629
  */
5073
- readonly temporalCorrelation: any;
5630
+ readonly temporalCorrelation: PppTemporalCorrelation;
5074
5631
  /**
5075
5632
  * Temporal-correlation-deflated ECEF covariance, row-major 3-by-3.
5076
5633
  */
@@ -5706,6 +6263,35 @@ export class RinexObsRepair {
5706
6263
  readonly repairedText: string;
5707
6264
  }
5708
6265
 
6266
+ /**
6267
+ * Per-epoch results returned by `solveSppFromRinexObs`.
6268
+ */
6269
+ export class RinexSppSolutionBatch {
6270
+ private constructor();
6271
+ free(): void;
6272
+ [Symbol.dispose](): void;
6273
+ /**
6274
+ * Original RINEX OBS epoch index for assembled batch item `index`.
6275
+ */
6276
+ epochIndex(index: number): number;
6277
+ /**
6278
+ * The solve error for assembled batch item `index`, or `undefined`.
6279
+ */
6280
+ error(index: number): string | undefined;
6281
+ /**
6282
+ * Whether assembled batch item `index` converged to a solution.
6283
+ */
6284
+ isOk(index: number): boolean;
6285
+ /**
6286
+ * The SPP solution for assembled batch item `index`.
6287
+ */
6288
+ solution(index: number): SppSolution;
6289
+ /**
6290
+ * Number of assembled RINEX epochs in the batch.
6291
+ */
6292
+ readonly count: number;
6293
+ }
6294
+
5709
6295
  /**
5710
6296
  * Stateful MSM lock-time tracker for deriving RINEX LLI continuity bits.
5711
6297
  */
@@ -5778,7 +6364,7 @@ export class RtkFloatSolution {
5778
6364
  /**
5779
6365
  * Float single-difference ambiguities, metres, as an id-keyed object.
5780
6366
  */
5781
- readonly ambiguitiesM: any;
6367
+ readonly ambiguitiesM: PppScalarMap;
5782
6368
  /**
5783
6369
  * Baseline (rover minus base) as a `Float64Array` `[dx, dy, dz]`, metres.
5784
6370
  */
@@ -6124,11 +6710,11 @@ export class SignalAnalysisModulation {
6124
6710
  /**
6125
6711
  * Published lower bound for DLL code-delay jitter.
6126
6712
  */
6127
- dllLowerBound(options: any): any;
6713
+ dllLowerBound(options: DllJitterOptions): DllJitterResult;
6128
6714
  /**
6129
6715
  * Early-late DLL thermal-noise jitter for this modulation.
6130
6716
  */
6131
- dllThermalNoiseJitter(options: any, processing: DllProcessing): any;
6717
+ dllThermalNoiseJitter(options: DllJitterOptions, processing: DllProcessing): DllJitterResult;
6132
6718
  /**
6133
6719
  * Fraction of total signal power inside a two-sided receiver bandwidth.
6134
6720
  */
@@ -6140,7 +6726,7 @@ export class SignalAnalysisModulation {
6140
6726
  /**
6141
6727
  * One-path early-late multipath error envelope on a delay grid.
6142
6728
  */
6143
- multipathErrorEnvelope(options: any, delay_chips: Float64Array): any;
6729
+ multipathErrorEnvelope(options: MultipathEnvelopeOptions, delay_chips: Float64Array): MultipathEnvelopeResult;
6144
6730
  /**
6145
6731
  * Signal power inside a two-sided receiver bandwidth.
6146
6732
  */
@@ -6283,7 +6869,7 @@ export class SmoothedFusionTrajectory {
6283
6869
  /**
6284
6870
  * Smoothed epochs in the same order as the recorded history.
6285
6871
  */
6286
- readonly epochs: any;
6872
+ readonly epochs: FusionRtsEpoch[];
6287
6873
  }
6288
6874
 
6289
6875
  export class SmoothedTrack {
@@ -6291,7 +6877,7 @@ export class SmoothedTrack {
6291
6877
  free(): void;
6292
6878
  [Symbol.dispose](): void;
6293
6879
  readonly epochCount: number;
6294
- readonly epochs: any;
6880
+ readonly epochs: FusionRtsEpoch[];
6295
6881
  }
6296
6882
 
6297
6883
  /**
@@ -6384,7 +6970,7 @@ export class Sp3 {
6384
6970
  * is exhausted. Returns the surviving solution and the excluded satellites;
6385
6971
  * throws an `Error` if the fault is unresolved.
6386
6972
  */
6387
- fde(request: any): FdeSolution;
6973
+ fde(request: FdeRequest): FdeSolution;
6388
6974
  /**
6389
6975
  * Interpolate `satellite`'s position and clock at each query epoch.
6390
6976
  *
@@ -6434,7 +7020,7 @@ export class Sp3 {
6434
7020
  * `request` is a plain object; see the `SppRequest` TypeScript type. Throws
6435
7021
  * a `TypeError` for malformed input and an `Error` if the solve fails.
6436
7022
  */
6437
- solveSpp(request: any): SppSolution;
7023
+ solveSpp(request: SppRequest): SppSolution;
6438
7024
  /**
6439
7025
  * Solve a batch of independent SPP epochs against this ephemeris in one call.
6440
7026
  *
@@ -6444,7 +7030,7 @@ export class Sp3 {
6444
7030
  * results are index-aligned to `epochs`; each epoch independently converged
6445
7031
  * or failed. Delegates to the serial reference batch kernel.
6446
7032
  */
6447
- solveSppBatch(epochs: any, options: any): SppBatchSolution;
7033
+ solveSppBatch(epochs: SppRequest[], options?: SppBatchOptions | null): SppBatchSolution;
6448
7034
  /**
6449
7035
  * Run SPP and attach a Doppler velocity/clock-drift solve when Doppler rows solve.
6450
7036
  *
@@ -6467,7 +7053,7 @@ export class Sp3 {
6467
7053
  * `request` is the FDE request with a `robust` object. The implementation
6468
7054
  * delegates to `sidereon_core::quality::spp_robust_fde_driver`.
6469
7055
  */
6470
- sppRobustFdeDriver(request: any): FdeSolution;
7056
+ sppRobustFdeDriver(request: FdeRequest): FdeSolution;
6471
7057
  /**
6472
7058
  * The exact parsed state of `satellite` at record `epochIndex` (no
6473
7059
  * interpolation). Throws a `RangeError` past the last epoch and a
@@ -7229,7 +7815,7 @@ export class StaticSolution {
7229
7815
  /**
7230
7816
  * Post-fit residuals as `{ epochIndex, satelliteId, residualM, ... }[]`.
7231
7817
  */
7232
- readonly residuals: any;
7818
+ readonly residuals: PppResidual[];
7233
7819
  /**
7234
7820
  * Full state covariance, flat row-major square matrix in square metres.
7235
7821
  */
@@ -7931,7 +8517,7 @@ export class TrackFilterConfig {
7931
8517
  /**
7932
8518
  * Build a no-IMU track filter config from a JS object.
7933
8519
  */
7934
- constructor(config: any);
8520
+ constructor(config: FusionConfig);
7935
8521
  toObject(): any;
7936
8522
  readonly dimension: number;
7937
8523
  readonly frame: string;
@@ -7943,7 +8529,7 @@ export class TrackRtsHistory {
7943
8529
  free(): void;
7944
8530
  [Symbol.dispose](): void;
7945
8531
  readonly epochCount: number;
7946
- readonly epochs: any;
8532
+ readonly epochs: FusionRtsEpoch[];
7947
8533
  }
7948
8534
 
7949
8535
  export class TrackRtsHistoryBuilder {
@@ -8235,7 +8821,7 @@ export function angularSeparationCoords(a_lon_deg: number, a_lat_deg: number, b_
8235
8821
  * `araimLpv200Allocation()`. Returned `hplM`, `vplM`, `sigmaAccHM`,
8236
8822
  * `sigmaAccVM`, `emtM`, and per-mode ENU arrays are meters.
8237
8823
  */
8238
- export function araim(geometry: any, ism: any, allocation: any): any;
8824
+ export function araim(geometry: AraimGeometry, ism: AraimIsm, allocation?: AraimAllocation | null): AraimResult;
8239
8825
 
8240
8826
  /**
8241
8827
  * Enumerate ARAIM fault hypotheses for the given geometry, ISM, and allocation.
@@ -8244,7 +8830,7 @@ export function araim(geometry: any, ism: any, allocation: any): any;
8244
8830
  * satellites are string tokens such as `"G01"`, and excluded constellations are
8245
8831
  * labels such as `"GPS"`.
8246
8832
  */
8247
- export function araimFaultModes(geometry: any, ism: any, allocation: any): any;
8833
+ export function araimFaultModes(geometry: AraimGeometry, ism: AraimIsm, allocation?: AraimAllocation | null): AraimFaultHypothesis[];
8248
8834
 
8249
8835
  /**
8250
8836
  * LPV-200 ARAIM integrity and continuity allocation.
@@ -8253,7 +8839,7 @@ export function araimFaultModes(geometry: any, ism: any, allocation: any): any;
8253
8839
  * dimensionless, `pEmt` defaults to `1e-5`, and `maxFaultOrder` is an integer
8254
8840
  * fault order.
8255
8841
  */
8256
- export function araimLpv200Allocation(): any;
8842
+ export function araimLpv200Allocation(): AraimAllocation;
8257
8843
 
8258
8844
  /**
8259
8845
  * Evaluate NRLMSISE-00 neutral-atmosphere density and temperature.
@@ -8274,6 +8860,11 @@ export function atmosphereDensity(lat_deg: number, lon_deg: number, alt_km: numb
8274
8860
  */
8275
8861
  export function atmosphereSpaceWeatherDefaults(): SpaceWeatherDefaults;
8276
8862
 
8863
+ /**
8864
+ * Circular autocorrelation over all lags for a bipolar code vector.
8865
+ */
8866
+ export function autocorrelation(code: Int8Array): Int32Array;
8867
+
8277
8868
  /**
8278
8869
  * Solar beta angle in degrees from orbit normal and Sun vectors.
8279
8870
  */
@@ -8305,7 +8896,7 @@ export function boundedIlsSearch(float_cycles: Float64Array, covariance: any, ra
8305
8896
  * Defaults build the GPS `C1C`/`L1C` plus `C2W`/`L2W` arc used by the real
8306
8897
  * WTZR/WTZZ fixtures.
8307
8898
  */
8308
- export function buildDualFrequencyRinexRtkArc(ephemeris: Sp3, base_obs: RinexObs, rover_obs: RinexObs, options?: any | null): any;
8899
+ export function buildDualFrequencyRinexRtkArc(ephemeris: Sp3, base_obs: RinexObs, rover_obs: RinexObs, options?: RtkRinexDualArcOptions | null): { epochs: RtkDualFrequencyArcEpoch[] };
8309
8900
 
8310
8901
  /**
8311
8902
  * Build single-frequency RTK arc records from parsed RINEX OBS products.
@@ -8315,7 +8906,7 @@ export function buildDualFrequencyRinexRtkArc(ephemeris: Sp3, base_obs: RinexObs
8315
8906
  * `{ signalPairs, maxEpochs, minCommonSatellites, includePredictionTime }`.
8316
8907
  * Defaults build the GPS `C1C`/`L1C` arc used by the real WTZR/WTZZ fixtures.
8317
8908
  */
8318
- export function buildRinexRtkArc(ephemeris: Sp3, base_obs: RinexObs, rover_obs: RinexObs, options?: any | null): any;
8909
+ export function buildRinexRtkArc(ephemeris: Sp3, base_obs: RinexObs, rover_obs: RinexObs, options?: RtkRinexArcOptions | null): { epochs: RtkArcEpoch[]; wavelengthsM: Record<string, number>; offsetsM: Record<string, number> };
8319
8910
 
8320
8911
  /**
8321
8912
  * One wrapping GPS C/A chip at a zero-based index.
@@ -8442,6 +9033,19 @@ export function computeAllanDeviations(input: any): any;
8442
9033
  */
8443
9034
  export function correlate(iq: Float64Array, prn: bigint, options: any): CorrelationResult;
8444
9035
 
9036
+ /**
9037
+ * Coherently correlate interleaved IQ samples against an explicit bipolar code.
9038
+ *
9039
+ * `iq` is `[i0, q0, i1, q1, ...]`. The coherent sum follows the core
9040
+ * `zip(iq, code)` semantics and therefore uses the shorter non-empty input.
9041
+ */
9042
+ export function correlateAgainst(iq: Float64Array, code: Int8Array, sample_rate_hz: number, doppler_hz: number): CorrelationResult;
9043
+
9044
+ /**
9045
+ * Single-lag circular correlation for two equal-length bipolar codes.
9046
+ */
9047
+ export function correlationAt(code_a: Int8Array, code_b: Int8Array, lag: bigint): number;
9048
+
8445
9049
  /**
8446
9050
  * Fitted parameter covariance from a converged solve, scaling `(J^T J)^-1` by
8447
9051
  * the post-fit reduced chi-square `s_sq = 2 * cost / (m - n)` (the same scale
@@ -8476,6 +9080,11 @@ export function covarianceIsSymmetric(covariance_km2: Float64Array): boolean;
8476
9080
  */
8477
9081
  export function coverageLookAngles(satellites: Tle[], stations: GroundStation[], epoch_unix_us: bigint): CoverageGrid;
8478
9082
 
9083
+ /**
9084
+ * Circular cross-correlation over all lags for two equal-length bipolar codes.
9085
+ */
9086
+ export function crossCorrelation(code_a: Int8Array, code_b: Int8Array): Int32Array;
9087
+
8479
9088
  export function cwPropagate(rel: any, n_rad_s: number, dt_s: number): any;
8480
9089
 
8481
9090
  export function cwStm(n_rad_s: number, dt_s: number): Float64Array;
@@ -8995,7 +9604,7 @@ export function fitTrajectory(series: any, model: any, options: any): any;
8995
9604
  * `RtkWideLaneArcConfig` object. Delegates to
8996
9605
  * `sidereon_core::rtk_filter::arc::fix_wide_lane_rtk_arc`.
8997
9606
  */
8998
- export function fixWideLaneRtkArc(epochs: any, config: any): any;
9607
+ export function fixWideLaneRtkArc(epochs: RtkDualFrequencyArcEpoch[], config: RtkWideLaneArcConfig): RtkWideLaneFixedResult;
8999
9608
 
9000
9609
  /**
9001
9610
  * J2 oblateness gravitational acceleration in km/s^2.
@@ -10273,7 +10882,7 @@ export function predictBatchSp3(sp3: Sp3, satellites: string[], receivers_ecef_m
10273
10882
  * `RtkIonosphereFreeArcConfig` object. Delegates to
10274
10883
  * `sidereon_core::rtk_filter::arc::prepare_ionosphere_free_rtk_arc`.
10275
10884
  */
10276
- export function prepareIonosphereFreeRtkArc(epochs: any, wide_lane_cycles: any, config: any): any;
10885
+ export function prepareIonosphereFreeRtkArc(epochs: RtkDualFrequencyArcEpoch[], wide_lane_cycles: Record<string, number>, config: RtkIonosphereFreeArcConfig): RtkIonosphereFreeArcResult;
10277
10886
 
10278
10887
  /**
10279
10888
  * Propagate a fleet of already-initialized [`Tle`]s over a shared epoch grid in
@@ -10332,7 +10941,7 @@ export function pseudorangeVariance(elevation_deg: number, options: any): number
10332
10941
  * normalized residual satellite, reduced chi-square, normalized residual map,
10333
10942
  * RMS residual, and degrees of freedom.
10334
10943
  */
10335
- export function raim(input: any, options: any): any;
10944
+ export function raim(input: RaimInput, options?: RaimOptions | null): RaimResult;
10336
10945
 
10337
10946
  /**
10338
10947
  * Run standalone range RAIM/FDE over a linearized measurement set.
@@ -10347,7 +10956,16 @@ export function raim(input: any, options: any): any;
10347
10956
  * Malformed input throws a `TypeError`; a rank-deficient or rejected set throws
10348
10957
  * an `Error`.
10349
10958
  */
10350
- export function raimFdeDesign(rows: any, options: any): any;
10959
+ export function raimFdeDesign(rows: RangeFdeRow[], options?: RangeFdeOptions | null): RangeFdeResult;
10960
+
10961
+ /**
10962
+ * Run residual chi-square RAIM directly over an existing SPP solution.
10963
+ *
10964
+ * `solution` is a `SppSolution` from `solveSpp`, `solveBroadcast`, fallback,
10965
+ * or a RINEX OBS convenience result. `options` is the same `RaimOptions` object
10966
+ * accepted by `raim`; omit it for the core defaults.
10967
+ */
10968
+ export function raimForSolution(solution: SppSolution, options?: RaimOptions | null): RaimResult;
10351
10969
 
10352
10970
  /**
10353
10971
  * Convert a pseudorange rate in metres per second to Doppler shift in hertz.
@@ -10731,7 +11349,7 @@ export function solveMovingBaseline(config: any): MovingBaselineSolution[];
10731
11349
  * `sidereon_core::precise_positioning::auto_init::solve_ppp_auto_init_fixed`.
10732
11350
  * Throws a `TypeError` for malformed input and an `Error` if the solve fails.
10733
11351
  */
10734
- export function solvePppAutoInitFixed(sp3: Sp3, epochs: any, options: any, float_config: any, fixed_config: any): PppFixedSolution;
11352
+ export function solvePppAutoInitFixed(sp3: Sp3, epochs: PppEpoch[], options: PppAutoInitOptions | null | undefined, float_config: PppFloatConfig, fixed_config: PppFixedConfig): PppFixedSolution;
10735
11353
 
10736
11354
  /**
10737
11355
  * Solve a static multi-epoch float PPP arc from raw epochs, auto-initializing
@@ -10745,7 +11363,7 @@ export function solvePppAutoInitFixed(sp3: Sp3, epochs: any, options: any, float
10745
11363
  * `sidereon_core::precise_positioning::auto_init::solve_ppp_auto_init_float`.
10746
11364
  * Throws a `TypeError` for malformed input and an `Error` if the solve fails.
10747
11365
  */
10748
- export function solvePppAutoInitFloat(sp3: Sp3, epochs: any, options: any, config: any): PppFloatSolution;
11366
+ export function solvePppAutoInitFloat(sp3: Sp3, epochs: PppEpoch[], options: PppAutoInitOptions | null | undefined, config: PppFloatConfig): PppFloatSolution;
10749
11367
 
10750
11368
  /**
10751
11369
  * Search integer ambiguities from a float PPP solution and re-solve fixed.
@@ -10754,7 +11372,7 @@ export function solvePppAutoInitFloat(sp3: Sp3, epochs: any, options: any, confi
10754
11372
  * `floatSolution` is the result of [`solvePppFloat`] over the same arc. Throws
10755
11373
  * a `TypeError` for malformed input and an `Error` if the solve fails.
10756
11374
  */
10757
- export function solvePppFixed(sp3: Sp3, epochs: any, float_solution: PppFloatSolution, config: any): PppFixedSolution;
11375
+ export function solvePppFixed(sp3: Sp3, epochs: PppEpoch[], float_solution: PppFloatSolution, config: PppFixedConfig): PppFixedSolution;
10758
11376
 
10759
11377
  /**
10760
11378
  * Solve a static multi-epoch float PPP arc against an SP3 product.
@@ -10763,7 +11381,7 @@ export function solvePppFixed(sp3: Sp3, epochs: any, float_solution: PppFloatSol
10763
11381
  * `PppEpoch`, `PppFloatState`, and `PppFloatConfig` TypeScript types. Throws a
10764
11382
  * `TypeError` for malformed input and an `Error` if the solve fails.
10765
11383
  */
10766
- export function solvePppFloat(sp3: Sp3, epochs: any, initial_state: any, config: any): PppFloatSolution;
11384
+ export function solvePppFloat(sp3: Sp3, epochs: PppEpoch[], initial_state: PppFloatState, config: PppFloatConfig): PppFloatSolution;
10767
11385
 
10768
11386
  /**
10769
11387
  * Solve a sequential RTK baseline arc from raw rover+base epochs.
@@ -10775,7 +11393,7 @@ export function solvePppFloat(sp3: Sp3, epochs: any, initial_state: any, config:
10775
11393
  * filter state. Delegates to `sidereon_core::rtk_filter::arc::solve_rtk_arc`.
10776
11394
  * Throws a `TypeError` for malformed input and an `Error` if the solve fails.
10777
11395
  */
10778
- export function solveRtkArc(epochs: any, config: any): any;
11396
+ export function solveRtkArc(epochs: RtkArcEpoch[], config: RtkArcConfig): RtkArcSolution;
10779
11397
 
10780
11398
  /**
10781
11399
  * Solve a static fixed RTK baseline with residual validation / FDE.
@@ -10793,6 +11411,15 @@ export function solveRtkFixed(config: any): RtkFixedSolution;
10793
11411
  */
10794
11412
  export function solveRtkFloat(config: any): RtkFloatSolution;
10795
11413
 
11414
+ /**
11415
+ * Solve parsed RINEX OBS epochs serially against a broadcast ephemeris store.
11416
+ *
11417
+ * `rinexOptions` controls observation assembly; `solveOptions` accepts
11418
+ * `withGeodetic`, `maxPdop`, and `coarseSearchSeeds`. The returned batch keeps
11419
+ * per-epoch solve failures, so use `isOk(index)` before `solution(index)`.
11420
+ */
11421
+ export function solveSppFromRinexObs(source: BroadcastEphemeris, obs: RinexObs, rinex_options?: RinexSppOptions | null, solve_options?: RinexSppSolveOptions | null): RinexSppSolutionBatch;
11422
+
10796
11423
  /**
10797
11424
  * Solve SPP using an SBAS-corrected broadcast source and optional SBAS iono.
10798
11425
  *
@@ -10830,7 +11457,7 @@ export function solveStaticRinexRtkBaseline(ephemeris: Sp3, base_obs: RinexObs,
10830
11457
  * `RtkStaticArcConfig` object. Delegates to
10831
11458
  * `sidereon_core::rtk_filter::arc::solve_static_rtk_arc`.
10832
11459
  */
10833
- export function solveStaticRtkArc(epochs: any, config: any): any;
11460
+ export function solveStaticRtkArc(epochs: RtkArcEpoch[], config: RtkStaticArcConfig): RtkStaticArcSolution;
10834
11461
 
10835
11462
  /**
10836
11463
  * Solve receiver velocity over an SP3 precise product. See
@@ -10929,6 +11556,15 @@ export function sphericalRadiusAt(covariance_enu_m2: any, probability: number):
10929
11556
  */
10930
11557
  export function splitJdToJ2000Seconds(jd_whole: number, jd_fraction: number): number;
10931
11558
 
11559
+ /**
11560
+ * Assemble parsed RINEX OBS epochs into broadcast-backed SPP solve inputs.
11561
+ *
11562
+ * `source` is a parsed RINEX NAV broadcast store. `options` accepts
11563
+ * `signalPolicy`, `corrections`, `initialGuess`, `satellites`, `met`, and
11564
+ * `robust`; omit it for the core default policy for the observation file.
11565
+ */
11566
+ export function sppInputsFromRinexObs(source: BroadcastEphemeris, obs: RinexObs, options?: RinexSppOptions | null): RinexSppEpochInputs[];
11567
+
10932
11568
  export function ssrCorrectedState(broadcast: BroadcastEphemeris, store: SsrCorrectionStore, sat: string, t_j2000_s: number, fallback_to_broadcast?: boolean | null, allow_regional_provider?: number | null): any;
10933
11569
 
10934
11570
  /**