@neilberkman/sidereon 0.12.0 → 0.14.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.
@@ -884,6 +884,43 @@ class BroadcastEphemeris {
884
884
  const ret = wasm.broadcastephemeris_leapSeconds(this.__wbg_ptr);
885
885
  return ret[0] === 0 ? undefined : ret[1];
886
886
  }
887
+ /**
888
+ * Query ECEF position and clock for parallel satellite and epoch arrays
889
+ * against this parsed broadcast ephemeris store.
890
+ *
891
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
892
+ * seconds since J2000 in GPST for GNSS broadcast records. The returned
893
+ * plain object has aligned `positionsEcefM`, `clocksS`, `statuses`, and
894
+ * `elementResults` arrays.
895
+ * @param {any} satellites
896
+ * @param {any} epochs_j2000_s
897
+ * @returns {any}
898
+ */
899
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
900
+ const ret = wasm.broadcastephemeris_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
901
+ if (ret[2]) {
902
+ throw takeFromExternrefTable0(ret[1]);
903
+ }
904
+ return takeFromExternrefTable0(ret[0]);
905
+ }
906
+ /**
907
+ * Query ECEF position and clock for many satellites at one epoch against
908
+ * this parsed broadcast ephemeris store.
909
+ *
910
+ * `epochJ2000S` is seconds since J2000 in GPST. The returned object follows
911
+ * the same contract as
912
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
913
+ * @param {any} satellites
914
+ * @param {number} epoch_j2000_s
915
+ * @returns {any}
916
+ */
917
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
918
+ const ret = wasm.broadcastephemeris_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
919
+ if (ret[2]) {
920
+ throw takeFromExternrefTable0(ret[1]);
921
+ }
922
+ return takeFromExternrefTable0(ret[0]);
923
+ }
887
924
  /**
888
925
  * Number of usable GPS, Galileo, and BeiDou records.
889
926
  * @returns {number}
@@ -4761,6 +4798,86 @@ class GeoidGrid {
4761
4798
  if (Symbol.dispose) GeoidGrid.prototype[Symbol.dispose] = GeoidGrid.prototype.free;
4762
4799
  exports.GeoidGrid = GeoidGrid;
4763
4800
 
4801
+ /**
4802
+ * Geometry observability and covariance-validation diagnostics.
4803
+ */
4804
+ class GeometryQuality {
4805
+ static __wrap(ptr) {
4806
+ const obj = Object.create(GeometryQuality.prototype);
4807
+ obj.__wbg_ptr = ptr;
4808
+ GeometryQualityFinalization.register(obj, obj.__wbg_ptr, obj);
4809
+ return obj;
4810
+ }
4811
+ __destroy_into_raw() {
4812
+ const ptr = this.__wbg_ptr;
4813
+ this.__wbg_ptr = 0;
4814
+ GeometryQualityFinalization.unregister(this);
4815
+ return ptr;
4816
+ }
4817
+ free() {
4818
+ const ptr = this.__destroy_into_raw();
4819
+ wasm.__wbg_geometryquality_free(ptr, 0);
4820
+ }
4821
+ /**
4822
+ * Singular-value condition number of the design matrix.
4823
+ * @returns {number}
4824
+ */
4825
+ get conditionNumber() {
4826
+ const ret = wasm.geometryquality_conditionNumber(this.__wbg_ptr);
4827
+ return ret;
4828
+ }
4829
+ /**
4830
+ * Whether residuals or a propagated prior validated the covariance bound.
4831
+ * @returns {boolean}
4832
+ */
4833
+ get covarianceValidated() {
4834
+ const ret = wasm.geometryquality_covarianceValidated(this.__wbg_ptr);
4835
+ return ret !== 0;
4836
+ }
4837
+ /**
4838
+ * Geometric dilution of precision for the solved state.
4839
+ * @returns {number}
4840
+ */
4841
+ get gdop() {
4842
+ const ret = wasm.geometryquality_gdop(this.__wbg_ptr);
4843
+ return ret;
4844
+ }
4845
+ /**
4846
+ * Whether residual-based RAIM can test the solve.
4847
+ * @returns {boolean}
4848
+ */
4849
+ get raimCheckable() {
4850
+ const ret = wasm.geometryquality_raimCheckable(this.__wbg_ptr);
4851
+ return ret !== 0;
4852
+ }
4853
+ /**
4854
+ * Rank of the design matrix used by the solve.
4855
+ * @returns {number}
4856
+ */
4857
+ get rank() {
4858
+ const ret = wasm.geometryquality_rank(this.__wbg_ptr);
4859
+ return ret >>> 0;
4860
+ }
4861
+ /**
4862
+ * Observation redundancy, `nObs - nParams`.
4863
+ * @returns {number}
4864
+ */
4865
+ get redundancy() {
4866
+ const ret = wasm.geometryquality_redundancy(this.__wbg_ptr);
4867
+ return ret;
4868
+ }
4869
+ /**
4870
+ * Observability and validation tier.
4871
+ * @returns {ObservabilityTier}
4872
+ */
4873
+ get tier() {
4874
+ const ret = wasm.geometryquality_tier(this.__wbg_ptr);
4875
+ return ret;
4876
+ }
4877
+ }
4878
+ if (Symbol.dispose) GeometryQuality.prototype[Symbol.dispose] = GeometryQuality.prototype.free;
4879
+ exports.GeometryQuality = GeometryQuality;
4880
+
4764
4881
  /**
4765
4882
  * One GLONASS broadcast state-vector record. `toeUtcJ2000S` is UTC seconds past
4766
4883
  * J2000; position is PZ-90.11 ECEF metres, velocity m/s, acceleration m/s^2.
@@ -8221,6 +8338,36 @@ class ObsPhaseShift {
8221
8338
  if (Symbol.dispose) ObsPhaseShift.prototype[Symbol.dispose] = ObsPhaseShift.prototype.free;
8222
8339
  exports.ObsPhaseShift = ObsPhaseShift;
8223
8340
 
8341
+ /**
8342
+ * Observability and validation tier for an estimation design.
8343
+ *
8344
+ * `ZeroRedundancy` means the design is full rank but has no residual degrees of
8345
+ * freedom, so snapshot-solve covariance bounds are unvalidated unless a
8346
+ * propagated prior is present. `Weak` means the design exceeded the configured
8347
+ * condition-number or GDOP cutoff; the returned bounds are reported as computed
8348
+ * and are not clamped.
8349
+ * @enum {0 | 1 | 2 | 3}
8350
+ */
8351
+ const ObservabilityTier = Object.freeze({
8352
+ /**
8353
+ * At least one estimated parameter is not observable.
8354
+ */
8355
+ RankDeficient: 0, "0": "RankDeficient",
8356
+ /**
8357
+ * Full rank with no residual degrees of freedom.
8358
+ */
8359
+ ZeroRedundancy: 1, "1": "ZeroRedundancy",
8360
+ /**
8361
+ * Full rank with residual degrees of freedom, but above a cutoff.
8362
+ */
8363
+ Weak: 2, "2": "Weak",
8364
+ /**
8365
+ * Full rank and within the configured cutoffs.
8366
+ */
8367
+ Nominal: 3, "3": "Nominal",
8368
+ });
8369
+ exports.ObservabilityTier = ObservabilityTier;
8370
+
8224
8371
  /**
8225
8372
  * Optional observation-code allow-list for raw and carrier-phase rows. Build
8226
8373
  * with `new ObservationFilter()` then chain `.withSystem(system, codes)`.
@@ -11049,6 +11196,160 @@ class PppFloatSolution {
11049
11196
  if (Symbol.dispose) PppFloatSolution.prototype[Symbol.dispose] = PppFloatSolution.prototype.free;
11050
11197
  exports.PppFloatSolution = PppFloatSolution;
11051
11198
 
11199
+ /**
11200
+ * A reusable precise-ephemeris interpolant with cached per-satellite nodes.
11201
+ *
11202
+ * Build this handle once from a parsed [`Sp3`] product, raw precise samples, or
11203
+ * a [`PreciseEphemerisSampleSource`], then reuse it for many state or range
11204
+ * queries. The handle delegates to
11205
+ * `sidereon_core::ephemeris::PreciseEphemerisInterpolant`; ECEF positions are
11206
+ * metres, clocks are seconds, and query epochs are seconds since J2000 in the
11207
+ * source time scale.
11208
+ */
11209
+ class PreciseEphemerisInterpolant {
11210
+ static __wrap(ptr) {
11211
+ const obj = Object.create(PreciseEphemerisInterpolant.prototype);
11212
+ obj.__wbg_ptr = ptr;
11213
+ PreciseEphemerisInterpolantFinalization.register(obj, obj.__wbg_ptr, obj);
11214
+ return obj;
11215
+ }
11216
+ __destroy_into_raw() {
11217
+ const ptr = this.__wbg_ptr;
11218
+ this.__wbg_ptr = 0;
11219
+ PreciseEphemerisInterpolantFinalization.unregister(this);
11220
+ return ptr;
11221
+ }
11222
+ free() {
11223
+ const ptr = this.__destroy_into_raw();
11224
+ wasm.__wbg_preciseephemerisinterpolant_free(ptr, 0);
11225
+ }
11226
+ /**
11227
+ * Build a cached interpolant from an existing sample-backed precise source.
11228
+ * @param {PreciseEphemerisSampleSource} source
11229
+ * @returns {PreciseEphemerisInterpolant}
11230
+ */
11231
+ static fromPreciseEphemerisSamples(source) {
11232
+ _assertClass(source, PreciseEphemerisSampleSource);
11233
+ const ret = wasm.preciseephemerisinterpolant_fromPreciseEphemerisSamples(source.__wbg_ptr);
11234
+ return PreciseEphemerisInterpolant.__wrap(ret);
11235
+ }
11236
+ /**
11237
+ * Build a cached interpolant directly from precise samples.
11238
+ *
11239
+ * `samples` is the same array accepted by
11240
+ * [`preciseEphemerisSamplesFromSamples`]: each item has `{ sat, epoch,
11241
+ * positionEcefM, clockS?, clockEvent? }`, with epochs in seconds since
11242
+ * J2000 and positions in ECEF metres. Throws a `TypeError` for malformed
11243
+ * JS input and a `RangeError` for sample validation failures.
11244
+ * @param {any} samples
11245
+ * @returns {PreciseEphemerisInterpolant}
11246
+ */
11247
+ static fromSamples(samples) {
11248
+ const ret = wasm.preciseephemerisinterpolant_fromSamples(samples);
11249
+ if (ret[2]) {
11250
+ throw takeFromExternrefTable0(ret[1]);
11251
+ }
11252
+ return PreciseEphemerisInterpolant.__wrap(ret[0]);
11253
+ }
11254
+ /**
11255
+ * Build a cached interpolant from a parsed SP3 precise product.
11256
+ *
11257
+ * Nodes are copied from the product's native SP3 records. Query epochs are
11258
+ * seconds since J2000 in the SP3 product time scale.
11259
+ * @param {Sp3} sp3
11260
+ * @returns {PreciseEphemerisInterpolant}
11261
+ */
11262
+ static fromSp3(sp3) {
11263
+ _assertClass(sp3, Sp3);
11264
+ const ret = wasm.preciseephemerisinterpolant_fromSp3(sp3.__wbg_ptr);
11265
+ return PreciseEphemerisInterpolant.__wrap(ret);
11266
+ }
11267
+ /**
11268
+ * Query ECEF position and optional clock for parallel satellite and epoch
11269
+ * arrays using this cached interpolant.
11270
+ *
11271
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
11272
+ * seconds since J2000 on this handle's time scale. The returned plain
11273
+ * object has aligned `positionsEcefM`, `clocksS`, `statuses`, and
11274
+ * `elementResults` arrays.
11275
+ * @param {any} satellites
11276
+ * @param {any} epochs_j2000_s
11277
+ * @returns {any}
11278
+ */
11279
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
11280
+ const ret = wasm.preciseephemerisinterpolant_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
11281
+ if (ret[2]) {
11282
+ throw takeFromExternrefTable0(ret[1]);
11283
+ }
11284
+ return takeFromExternrefTable0(ret[0]);
11285
+ }
11286
+ /**
11287
+ * Query ECEF position and optional clock for many satellites at one epoch
11288
+ * using this cached interpolant.
11289
+ *
11290
+ * `epochJ2000S` is seconds since J2000 on this handle's time scale. The
11291
+ * returned object follows the same contract as
11292
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
11293
+ * @param {any} satellites
11294
+ * @param {number} epoch_j2000_s
11295
+ * @returns {any}
11296
+ */
11297
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
11298
+ const ret = wasm.preciseephemerisinterpolant_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
11299
+ if (ret[2]) {
11300
+ throw takeFromExternrefTable0(ret[1]);
11301
+ }
11302
+ return takeFromExternrefTable0(ret[0]);
11303
+ }
11304
+ /**
11305
+ * Predict geometric ranges for many `(satellite, receiver, epoch)`
11306
+ * requests using this cached interpolant.
11307
+ *
11308
+ * `requests` is an array of `{ sat, receiverEcefM, tRxJ2000S }` objects.
11309
+ * Positions are ECEF metres and epochs are seconds since J2000 on this
11310
+ * handle's time scale. The output matches [`Sp3.predictRanges`].
11311
+ * @param {any} requests
11312
+ * @param {any} options
11313
+ * @returns {any}
11314
+ */
11315
+ predictRanges(requests, options) {
11316
+ const ret = wasm.preciseephemerisinterpolant_predictRanges(this.__wbg_ptr, requests, options);
11317
+ if (ret[2]) {
11318
+ throw takeFromExternrefTable0(ret[1]);
11319
+ }
11320
+ return takeFromExternrefTable0(ret[0]);
11321
+ }
11322
+ /**
11323
+ * Satellite tokens this handle can interpolate, ascending.
11324
+ * @returns {string[]}
11325
+ */
11326
+ get satellites() {
11327
+ const ret = wasm.preciseephemerisinterpolant_satellites(this.__wbg_ptr);
11328
+ var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
11329
+ wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
11330
+ return v1;
11331
+ }
11332
+ /**
11333
+ * Source time-scale abbreviation used by this handle's J2000-second axis,
11334
+ * such as `"GPST"`.
11335
+ * @returns {string}
11336
+ */
11337
+ get timeScale() {
11338
+ let deferred1_0;
11339
+ let deferred1_1;
11340
+ try {
11341
+ const ret = wasm.preciseephemerisinterpolant_timeScale(this.__wbg_ptr);
11342
+ deferred1_0 = ret[0];
11343
+ deferred1_1 = ret[1];
11344
+ return getStringFromWasm0(ret[0], ret[1]);
11345
+ } finally {
11346
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
11347
+ }
11348
+ }
11349
+ }
11350
+ if (Symbol.dispose) PreciseEphemerisInterpolant.prototype[Symbol.dispose] = PreciseEphemerisInterpolant.prototype.free;
11351
+ exports.PreciseEphemerisInterpolant = PreciseEphemerisInterpolant;
11352
+
11052
11353
  /**
11053
11354
  * A precise-ephemeris source built from samples rather than parsed SP3 text.
11054
11355
  *
@@ -11073,6 +11374,44 @@ class PreciseEphemerisSampleSource {
11073
11374
  const ptr = this.__destroy_into_raw();
11074
11375
  wasm.__wbg_preciseephemerissamplesource_free(ptr, 0);
11075
11376
  }
11377
+ /**
11378
+ * Query ECEF position and optional clock for parallel satellite and epoch
11379
+ * arrays against this sample-backed precise source.
11380
+ *
11381
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
11382
+ * seconds since J2000 on the source time scale. The returned plain object
11383
+ * has aligned `positionsEcefM`, `clocksS`, `statuses`, and
11384
+ * `elementResults` arrays. Failed elements use the core missing-position
11385
+ * sentinel and carry the scalar engine error in `elementResults[i].error`.
11386
+ * @param {any} satellites
11387
+ * @param {any} epochs_j2000_s
11388
+ * @returns {any}
11389
+ */
11390
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
11391
+ const ret = wasm.preciseephemerissamplesource_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
11392
+ if (ret[2]) {
11393
+ throw takeFromExternrefTable0(ret[1]);
11394
+ }
11395
+ return takeFromExternrefTable0(ret[0]);
11396
+ }
11397
+ /**
11398
+ * Query ECEF position and optional clock for many satellites at one epoch
11399
+ * against this sample-backed precise source.
11400
+ *
11401
+ * `epochJ2000S` is seconds since J2000 on the source time scale. The
11402
+ * returned plain object follows the same contract as
11403
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
11404
+ * @param {any} satellites
11405
+ * @param {number} epoch_j2000_s
11406
+ * @returns {any}
11407
+ */
11408
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
11409
+ const ret = wasm.preciseephemerissamplesource_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
11410
+ if (ret[2]) {
11411
+ throw takeFromExternrefTable0(ret[1]);
11412
+ }
11413
+ return takeFromExternrefTable0(ret[0]);
11414
+ }
11076
11415
  /**
11077
11416
  * Predict geometric ranges for many requests in one call. See the shared
11078
11417
  * [`predictRanges`](crate::precise_samples::predict_ranges_over) contract;
@@ -12328,6 +12667,15 @@ class RtkFixedSolution {
12328
12667
  wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
12329
12668
  return v1;
12330
12669
  }
12670
+ /**
12671
+ * Geometry observability and covariance-validation diagnostics for the
12672
+ * float design used by the integer-fixed solve.
12673
+ * @returns {GeometryQuality}
12674
+ */
12675
+ get geometryQuality() {
12676
+ const ret = wasm.rtkfixedsolution_geometryQuality(this.__wbg_ptr);
12677
+ return GeometryQuality.__wrap(ret);
12678
+ }
12331
12679
  /**
12332
12680
  * @returns {number}
12333
12681
  */
@@ -12359,6 +12707,24 @@ class RtkFixedSolution {
12359
12707
  wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
12360
12708
  }
12361
12709
  }
12710
+ /**
12711
+ * Whether residual-based RAIM can test the float design used by the
12712
+ * integer-fixed solve.
12713
+ * @returns {boolean}
12714
+ */
12715
+ get raimCheckable() {
12716
+ const ret = wasm.rtkfixedsolution_raimCheckable(this.__wbg_ptr);
12717
+ return ret !== 0;
12718
+ }
12719
+ /**
12720
+ * Observation redundancy, `nObs - nParams`, for the float design used by
12721
+ * the integer-fixed solve.
12722
+ * @returns {number}
12723
+ */
12724
+ get redundancy() {
12725
+ const ret = wasm.rtkfixedsolution_redundancy(this.__wbg_ptr);
12726
+ return ret;
12727
+ }
12362
12728
  }
12363
12729
  if (Symbol.dispose) RtkFixedSolution.prototype[Symbol.dispose] = RtkFixedSolution.prototype.free;
12364
12730
  exports.RtkFixedSolution = RtkFixedSolution;
@@ -12415,6 +12781,17 @@ class RtkFloatSolution {
12415
12781
  const ret = wasm.rtkfloatsolution_converged(this.__wbg_ptr);
12416
12782
  return ret !== 0;
12417
12783
  }
12784
+ /**
12785
+ * Geometry observability and covariance-validation diagnostics for the
12786
+ * final double-difference design. `ZeroRedundancy` bounds are unvalidated
12787
+ * for snapshot solves, `Weak` bounds are unclamped, and rank-deficient
12788
+ * designs are returned as a singular-geometry `Error`.
12789
+ * @returns {GeometryQuality}
12790
+ */
12791
+ get geometryQuality() {
12792
+ const ret = wasm.rtkfloatsolution_geometryQuality(this.__wbg_ptr);
12793
+ return GeometryQuality.__wrap(ret);
12794
+ }
12418
12795
  /**
12419
12796
  * @returns {number}
12420
12797
  */
@@ -12436,6 +12813,22 @@ class RtkFloatSolution {
12436
12813
  const ret = wasm.rtkfloatsolution_phaseRmsM(this.__wbg_ptr);
12437
12814
  return ret;
12438
12815
  }
12816
+ /**
12817
+ * Whether residual-based RAIM can test the float design.
12818
+ * @returns {boolean}
12819
+ */
12820
+ get raimCheckable() {
12821
+ const ret = wasm.rtkfloatsolution_raimCheckable(this.__wbg_ptr);
12822
+ return ret !== 0;
12823
+ }
12824
+ /**
12825
+ * Observation redundancy, `nObs - nParams`, for the float design.
12826
+ * @returns {number}
12827
+ */
12828
+ get redundancy() {
12829
+ const ret = wasm.rtkfloatsolution_redundancy(this.__wbg_ptr);
12830
+ return ret;
12831
+ }
12439
12832
  /**
12440
12833
  * @returns {number}
12441
12834
  */
@@ -13142,6 +13535,44 @@ class Sp3 {
13142
13535
  }
13143
13536
  return Sp3Interpolation.__wrap(ret[0]);
13144
13537
  }
13538
+ /**
13539
+ * Query ECEF position and optional clock for parallel satellite and epoch
13540
+ * arrays against this parsed SP3 product.
13541
+ *
13542
+ * `satellites[i]` is evaluated at `epochsJ2000S[i]`, where epochs are
13543
+ * seconds since J2000 in the product time scale. The returned plain object
13544
+ * has aligned `positionsEcefM`, `clocksS`, `statuses`, and
13545
+ * `elementResults` arrays. Failed elements use the core missing-position
13546
+ * sentinel and carry the scalar engine error in `elementResults[i].error`.
13547
+ * @param {any} satellites
13548
+ * @param {any} epochs_j2000_s
13549
+ * @returns {any}
13550
+ */
13551
+ observableStatesAtJ2000S(satellites, epochs_j2000_s) {
13552
+ const ret = wasm.sp3_observableStatesAtJ2000S(this.__wbg_ptr, satellites, epochs_j2000_s);
13553
+ if (ret[2]) {
13554
+ throw takeFromExternrefTable0(ret[1]);
13555
+ }
13556
+ return takeFromExternrefTable0(ret[0]);
13557
+ }
13558
+ /**
13559
+ * Query ECEF position and optional clock for many satellites at one epoch
13560
+ * against this parsed SP3 product.
13561
+ *
13562
+ * `epochJ2000S` is seconds since J2000 in the product time scale. The
13563
+ * returned object follows the same contract as
13564
+ * [`observableStatesAtJ2000S`](Self::observable_states_at_j2000_s).
13565
+ * @param {any} satellites
13566
+ * @param {number} epoch_j2000_s
13567
+ * @returns {any}
13568
+ */
13569
+ observableStatesAtSharedJ2000S(satellites, epoch_j2000_s) {
13570
+ const ret = wasm.sp3_observableStatesAtSharedJ2000S(this.__wbg_ptr, satellites, epoch_j2000_s);
13571
+ if (ret[2]) {
13572
+ throw takeFromExternrefTable0(ret[1]);
13573
+ }
13574
+ return takeFromExternrefTable0(ret[0]);
13575
+ }
13145
13576
  /**
13146
13577
  * Predict geometric ranges for many `(satellite, receiver, epoch)` requests
13147
13578
  * against this ephemeris in one call. `requests` is an array of
@@ -14450,6 +14881,17 @@ class SppSolution {
14450
14881
  }
14451
14882
  return v1;
14452
14883
  }
14884
+ /**
14885
+ * Geometry observability and covariance-validation diagnostics for this
14886
+ * solved design. `ZeroRedundancy` marks unvalidated snapshot covariance
14887
+ * bounds, `Weak` leaves large bounds unclamped, and rank-deficient designs
14888
+ * are returned as a singular-geometry `Error` rather than a solution.
14889
+ * @returns {GeometryQuality}
14890
+ */
14891
+ get geometryQuality() {
14892
+ const ret = wasm.sppsolution_geometryQuality(this.__wbg_ptr);
14893
+ return GeometryQuality.__wrap(ret);
14894
+ }
14453
14895
  /**
14454
14896
  * ECEF position as a `Float64Array` `[x, y, z]`, metres.
14455
14897
  * @returns {Float64Array}
@@ -14460,6 +14902,22 @@ class SppSolution {
14460
14902
  wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
14461
14903
  return v1;
14462
14904
  }
14905
+ /**
14906
+ * Whether residual-based RAIM can test the accepted solve.
14907
+ * @returns {boolean}
14908
+ */
14909
+ get raimCheckable() {
14910
+ const ret = wasm.sppsolution_raimCheckable(this.__wbg_ptr);
14911
+ return ret !== 0;
14912
+ }
14913
+ /**
14914
+ * Degrees of freedom in the accepted solve: `usedCount - (3 + clocks)`.
14915
+ * @returns {number}
14916
+ */
14917
+ get redundancy() {
14918
+ const ret = wasm.sppsolution_redundancy(this.__wbg_ptr);
14919
+ return ret;
14920
+ }
14463
14921
  /**
14464
14922
  * Post-fit residuals, metres, index-aligned to `usedSats`.
14465
14923
  * @returns {Float64Array}
@@ -15915,6 +16373,82 @@ function allanDeviation(series, tau0_s, averaging_factors) {
15915
16373
  }
15916
16374
  exports.allanDeviation = allanDeviation;
15917
16375
 
16376
+ /**
16377
+ * Alpha-beta measurement update applied to a predicted scalar state.
16378
+ *
16379
+ * `predicted` is `{ level, rate }`, `measurement` has the same unit as
16380
+ * `level`, `dt` is seconds, and `gains` is `{ alpha, beta }`.
16381
+ * @param {any} predicted
16382
+ * @param {number} measurement
16383
+ * @param {number} dt
16384
+ * @param {any} gains
16385
+ * @returns {any}
16386
+ */
16387
+ function alphaBetaApplyMeasurement(predicted, measurement, dt, gains) {
16388
+ const ret = wasm.alphaBetaApplyMeasurement(predicted, measurement, dt, gains);
16389
+ if (ret[2]) {
16390
+ throw takeFromExternrefTable0(ret[1]);
16391
+ }
16392
+ return takeFromExternrefTable0(ret[0]);
16393
+ }
16394
+ exports.alphaBetaApplyMeasurement = alphaBetaApplyMeasurement;
16395
+
16396
+ /**
16397
+ * Run one alpha-beta predict and measurement update.
16398
+ *
16399
+ * `state` is `{ level, rate }`, `measurement` has the same unit as `level`,
16400
+ * `dt` is seconds, and `gains` is `{ alpha, beta }`. Returns `{ predicted,
16401
+ * updated, innovation }`.
16402
+ * @param {any} state
16403
+ * @param {number} measurement
16404
+ * @param {number} dt
16405
+ * @param {any} gains
16406
+ * @returns {any}
16407
+ */
16408
+ function alphaBetaFilterStep(state, measurement, dt, gains) {
16409
+ const ret = wasm.alphaBetaFilterStep(state, measurement, dt, gains);
16410
+ if (ret[2]) {
16411
+ throw takeFromExternrefTable0(ret[1]);
16412
+ }
16413
+ return takeFromExternrefTable0(ret[0]);
16414
+ }
16415
+ exports.alphaBetaFilterStep = alphaBetaFilterStep;
16416
+
16417
+ /**
16418
+ * Alpha-beta constant-rate prediction.
16419
+ *
16420
+ * `state` is `{ level, rate }` and `dt` is the positive propagation interval in
16421
+ * seconds. Returns the predicted `{ level, rate }`.
16422
+ * @param {any} state
16423
+ * @param {number} dt
16424
+ * @returns {any}
16425
+ */
16426
+ function alphaBetaPredict(state, dt) {
16427
+ const ret = wasm.alphaBetaPredict(state, dt);
16428
+ if (ret[2]) {
16429
+ throw takeFromExternrefTable0(ret[1]);
16430
+ }
16431
+ return takeFromExternrefTable0(ret[0]);
16432
+ }
16433
+ exports.alphaBetaPredict = alphaBetaPredict;
16434
+
16435
+ /**
16436
+ * Steady-state alpha-beta gains from a positive tracking index.
16437
+ *
16438
+ * Returns `{ alpha, beta }`, where `alpha` is the level gain and `beta` maps
16439
+ * innovation to rate through `beta * innovation / dt`.
16440
+ * @param {number} tracking_index
16441
+ * @returns {any}
16442
+ */
16443
+ function alphaBetaSteadyStateGains(tracking_index) {
16444
+ const ret = wasm.alphaBetaSteadyStateGains(tracking_index);
16445
+ if (ret[2]) {
16446
+ throw takeFromExternrefTable0(ret[1]);
16447
+ }
16448
+ return takeFromExternrefTable0(ret[0]);
16449
+ }
16450
+ exports.alphaBetaSteadyStateGains = alphaBetaSteadyStateGains;
16451
+
15918
16452
  /**
15919
16453
  * On-sky angle in degrees between two direction vectors.
15920
16454
  * @param {Float64Array} a
@@ -16187,6 +16721,92 @@ function carrierFrequencyHz(system, band) {
16187
16721
  }
16188
16722
  exports.carrierFrequencyHz = carrierFrequencyHz;
16189
16723
 
16724
+ /**
16725
+ * CA-CFAR false alarm probability from searched-cell count, absolute
16726
+ * threshold, and mean noise level.
16727
+ * @param {number} searched_cells
16728
+ * @param {number} threshold
16729
+ * @param {number} noise_level
16730
+ * @returns {number}
16731
+ */
16732
+ function cfarCaFalseAlarmProbability(searched_cells, threshold, noise_level) {
16733
+ const ret = wasm.cfarCaFalseAlarmProbability(searched_cells, threshold, noise_level);
16734
+ if (ret[2]) {
16735
+ throw takeFromExternrefTable0(ret[1]);
16736
+ }
16737
+ return ret[0];
16738
+ }
16739
+ exports.cfarCaFalseAlarmProbability = cfarCaFalseAlarmProbability;
16740
+
16741
+ /**
16742
+ * CA-CFAR threshold multiplier from searched-cell count and target false alarm
16743
+ * probability.
16744
+ * @param {number} searched_cells
16745
+ * @param {number} false_alarm_probability
16746
+ * @returns {number}
16747
+ */
16748
+ function cfarCaMultiplierFromPfa(searched_cells, false_alarm_probability) {
16749
+ const ret = wasm.cfarCaMultiplierFromPfa(searched_cells, false_alarm_probability);
16750
+ if (ret[2]) {
16751
+ throw takeFromExternrefTable0(ret[1]);
16752
+ }
16753
+ return ret[0];
16754
+ }
16755
+ exports.cfarCaMultiplierFromPfa = cfarCaMultiplierFromPfa;
16756
+
16757
+ /**
16758
+ * CA-CFAR false alarm probability from searched-cell count and multiplier.
16759
+ * @param {number} searched_cells
16760
+ * @param {number} multiplier
16761
+ * @returns {number}
16762
+ */
16763
+ function cfarCaPfaFromMultiplier(searched_cells, multiplier) {
16764
+ const ret = wasm.cfarCaPfaFromMultiplier(searched_cells, multiplier);
16765
+ if (ret[2]) {
16766
+ throw takeFromExternrefTable0(ret[1]);
16767
+ }
16768
+ return ret[0];
16769
+ }
16770
+ exports.cfarCaPfaFromMultiplier = cfarCaPfaFromMultiplier;
16771
+
16772
+ /**
16773
+ * CA-CFAR absolute threshold from searched-cell count, target false alarm
16774
+ * probability, and mean noise level.
16775
+ * @param {number} searched_cells
16776
+ * @param {number} false_alarm_probability
16777
+ * @param {number} noise_level
16778
+ * @returns {number}
16779
+ */
16780
+ function cfarCaThreshold(searched_cells, false_alarm_probability, noise_level) {
16781
+ const ret = wasm.cfarCaThreshold(searched_cells, false_alarm_probability, noise_level);
16782
+ if (ret[2]) {
16783
+ throw takeFromExternrefTable0(ret[1]);
16784
+ }
16785
+ return ret[0];
16786
+ }
16787
+ exports.cfarCaThreshold = cfarCaThreshold;
16788
+
16789
+ /**
16790
+ * Compute the closed-form Chan-Ho seed used by [`locateSource`].
16791
+ *
16792
+ * `mode` is `"toa"`, `"tdoa"`, or `{ mode: "tdoa", referenceSensor }`.
16793
+ * Per-sensor speed overrides are not used by the closed-form equations, but
16794
+ * they are used by [`locateSource`] during iterative refinement.
16795
+ * @param {any} sensors
16796
+ * @param {any} arrival_times_s
16797
+ * @param {number} propagation_speed_m_s
16798
+ * @param {any} mode
16799
+ * @returns {any}
16800
+ */
16801
+ function chanHoInitialGuess(sensors, arrival_times_s, propagation_speed_m_s, mode) {
16802
+ const ret = wasm.chanHoInitialGuess(sensors, arrival_times_s, propagation_speed_m_s, mode);
16803
+ if (ret[2]) {
16804
+ throw takeFromExternrefTable0(ret[1]);
16805
+ }
16806
+ return takeFromExternrefTable0(ret[0]);
16807
+ }
16808
+ exports.chanHoInitialGuess = chanHoInitialGuess;
16809
+
16190
16810
  /**
16191
16811
  * Returns `true` when a diff has any findings.
16192
16812
  * @param {any} diff
@@ -17330,6 +17950,41 @@ function estimateDecayWithSpaceWeather(drag, table, request) {
17330
17950
  }
17331
17951
  exports.estimateDecayWithSpaceWeather = estimateDecayWithSpaceWeather;
17332
17952
 
17953
+ /**
17954
+ * Exponentially weighted moving-average update.
17955
+ *
17956
+ * `alpha` must be in `[0, 1]`; the returned value is
17957
+ * `previous + alpha * (sample - previous)`.
17958
+ * @param {number} previous
17959
+ * @param {number} sample
17960
+ * @param {number} alpha
17961
+ * @returns {number}
17962
+ */
17963
+ function ewmaUpdate(previous, sample, alpha) {
17964
+ const ret = wasm.ewmaUpdate(previous, sample, alpha);
17965
+ if (ret[2]) {
17966
+ throw takeFromExternrefTable0(ret[1]);
17967
+ }
17968
+ return ret[0];
17969
+ }
17970
+ exports.ewmaUpdate = ewmaUpdate;
17971
+
17972
+ /**
17973
+ * EWMA update with `alpha = 1 / 2^shift`.
17974
+ * @param {number} previous
17975
+ * @param {number} sample
17976
+ * @param {number} shift
17977
+ * @returns {number}
17978
+ */
17979
+ function ewmaUpdatePowerOfTwo(previous, sample, shift) {
17980
+ const ret = wasm.ewmaUpdatePowerOfTwo(previous, sample, shift);
17981
+ if (ret[2]) {
17982
+ throw takeFromExternrefTable0(ret[1]);
17983
+ }
17984
+ return ret[0];
17985
+ }
17986
+ exports.ewmaUpdatePowerOfTwo = ewmaUpdatePowerOfTwo;
17987
+
17333
17988
  /**
17334
17989
  * Find Moon elevation threshold crossings (moonrise / moonset) over a UTC
17335
17990
  * window.
@@ -18512,6 +19167,26 @@ function jarqueBera(x) {
18512
19167
  }
18513
19168
  exports.jarqueBera = jarqueBera;
18514
19169
 
19170
+ /**
19171
+ * Steady-state gains for a scalar constant-velocity Kalman filter.
19172
+ *
19173
+ * `trackingIndex`, `dt`, and `measurementVariance` must be positive. Returns
19174
+ * `{ positionGain, rateGain }`; `rateGain * dt` equals the alpha-beta `beta`
19175
+ * gain for the same tracking index.
19176
+ * @param {number} tracking_index
19177
+ * @param {number} dt
19178
+ * @param {number} measurement_variance
19179
+ * @returns {any}
19180
+ */
19181
+ function kalmanCvSteadyStateGains(tracking_index, dt, measurement_variance) {
19182
+ const ret = wasm.kalmanCvSteadyStateGains(tracking_index, dt, measurement_variance);
19183
+ if (ret[2]) {
19184
+ throw takeFromExternrefTable0(ret[1]);
19185
+ }
19186
+ return takeFromExternrefTable0(ret[0]);
19187
+ }
19188
+ exports.kalmanCvSteadyStateGains = kalmanCvSteadyStateGains;
19189
+
18515
19190
  /**
18516
19191
  * GPS broadcast Klobuchar ionospheric group delay in the model's native units
18517
19192
  * (positive metres).
@@ -19082,6 +19757,30 @@ function loadSp3(bytes) {
19082
19757
  }
19083
19758
  exports.loadSp3 = loadSp3;
19084
19759
 
19760
+ /**
19761
+ * Locate a source from sensor arrival times.
19762
+ *
19763
+ * `sensors` is an array of `{ positionM, propagationSpeedMS? }`; each
19764
+ * `positionM` is a 2D or 3D Cartesian metre vector and all sensors must share
19765
+ * the same dimension. `arrivalTimesS` is an aligned seconds array,
19766
+ * `propagationSpeedMS` is the call-level speed in metres per second, and
19767
+ * `options` may include `mode`, `referenceSensor`, `timingSigmaS`, `loss`,
19768
+ * `fScaleS`, `ftol`, `xtol`, `gtol`, and `maxNfev`.
19769
+ * @param {any} sensors
19770
+ * @param {any} arrival_times_s
19771
+ * @param {number} propagation_speed_m_s
19772
+ * @param {any} options
19773
+ * @returns {any}
19774
+ */
19775
+ function locateSource(sensors, arrival_times_s, propagation_speed_m_s, options) {
19776
+ const ret = wasm.locateSource(sensors, arrival_times_s, propagation_speed_m_s, options);
19777
+ if (ret[2]) {
19778
+ throw takeFromExternrefTable0(ret[1]);
19779
+ }
19780
+ return takeFromExternrefTable0(ret[0]);
19781
+ }
19782
+ exports.locateSource = locateSource;
19783
+
19085
19784
  /**
19086
19785
  * @param {bigint} start_unix_us
19087
19786
  * @param {bigint} end_unix_us
@@ -19136,6 +19835,35 @@ function lvlhRotation(position_km, velocity_km_s) {
19136
19835
  }
19137
19836
  exports.lvlhRotation = lvlhRotation;
19138
19837
 
19838
+ /**
19839
+ * Gaussian consistency factor applied by [`madSpread`].
19840
+ * @returns {number}
19841
+ */
19842
+ function madGaussianConsistency() {
19843
+ const ret = wasm.madGaussianConsistency();
19844
+ return ret;
19845
+ }
19846
+ exports.madGaussianConsistency = madGaussianConsistency;
19847
+
19848
+ /**
19849
+ * Median absolute deviation spread estimate.
19850
+ *
19851
+ * `values` is a JS number array. The returned spread is
19852
+ * `MAD_GAUSSIAN_CONSISTENCY * median(abs(value - median(values)))`, floored by
19853
+ * `scaleFloor`.
19854
+ * @param {any} values
19855
+ * @param {number} scale_floor
19856
+ * @returns {number}
19857
+ */
19858
+ function madSpread(values, scale_floor) {
19859
+ const ret = wasm.madSpread(values, scale_floor);
19860
+ if (ret[2]) {
19861
+ throw takeFromExternrefTable0(ret[1]);
19862
+ }
19863
+ return ret[0];
19864
+ }
19865
+ exports.madSpread = madSpread;
19866
+
19139
19867
  /**
19140
19868
  * @param {number} radius_km
19141
19869
  * @returns {number}
@@ -19568,6 +20296,69 @@ function nequickGStecTecu(_eval) {
19568
20296
  }
19569
20297
  exports.nequickGStecTecu = nequickGStecTecu;
19570
20298
 
20299
+ /**
20300
+ * Scalar normalized innovation squared statistic.
20301
+ * @param {number} innovation
20302
+ * @param {number} innovation_variance
20303
+ * @returns {number}
20304
+ */
20305
+ function nis(innovation, innovation_variance) {
20306
+ const ret = wasm.nis(innovation, innovation_variance);
20307
+ if (ret[2]) {
20308
+ throw takeFromExternrefTable0(ret[1]);
20309
+ }
20310
+ return ret[0];
20311
+ }
20312
+ exports.nis = nis;
20313
+
20314
+ /**
20315
+ * Bar-Shalom expected NIS value for `dof` measurement degrees of freedom.
20316
+ * @param {number} dof
20317
+ * @returns {number}
20318
+ */
20319
+ function nisExpectedValue(dof) {
20320
+ const ret = wasm.nisExpectedValue(dof);
20321
+ if (ret[2]) {
20322
+ throw takeFromExternrefTable0(ret[1]);
20323
+ }
20324
+ return ret[0];
20325
+ }
20326
+ exports.nisExpectedValue = nisExpectedValue;
20327
+
20328
+ /**
20329
+ * Test a scalar innovation against a chi-square NIS gate.
20330
+ *
20331
+ * Returns `{ nis, threshold, inGate, dof }`, with `confidence` in `(0, 1)`.
20332
+ * @param {number} innovation
20333
+ * @param {number} innovation_variance
20334
+ * @param {number} dof
20335
+ * @param {number} confidence
20336
+ * @returns {any}
20337
+ */
20338
+ function nisGate(innovation, innovation_variance, dof, confidence) {
20339
+ const ret = wasm.nisGate(innovation, innovation_variance, dof, confidence);
20340
+ if (ret[2]) {
20341
+ throw takeFromExternrefTable0(ret[1]);
20342
+ }
20343
+ return takeFromExternrefTable0(ret[0]);
20344
+ }
20345
+ exports.nisGate = nisGate;
20346
+
20347
+ /**
20348
+ * Chi-square NIS gate threshold for `dof` and confidence probability.
20349
+ * @param {number} dof
20350
+ * @param {number} confidence
20351
+ * @returns {number}
20352
+ */
20353
+ function nisGateThreshold(dof, confidence) {
20354
+ const ret = wasm.nisGateThreshold(dof, confidence);
20355
+ if (ret[2]) {
20356
+ throw takeFromExternrefTable0(ret[1]);
20357
+ }
20358
+ return ret[0];
20359
+ }
20360
+ exports.nisGateThreshold = nisGateThreshold;
20361
+
19571
20362
  /**
19572
20363
  * Parse bytes and return grouped epoch snapshots directly.
19573
20364
  * @param {Uint8Array} bytes
@@ -19655,6 +20446,21 @@ function normalCovariance(jacobian, m, n, variance_scale) {
19655
20446
  }
19656
20447
  exports.normalCovariance = normalCovariance;
19657
20448
 
20449
+ /**
20450
+ * Scalar normalized innovation `innovation / sqrt(innovationVariance)`.
20451
+ * @param {number} innovation
20452
+ * @param {number} innovation_variance
20453
+ * @returns {number}
20454
+ */
20455
+ function normalizedInnovation(innovation, innovation_variance) {
20456
+ const ret = wasm.normalizedInnovation(innovation, innovation_variance);
20457
+ if (ret[2]) {
20458
+ throw takeFromExternrefTable0(ret[1]);
20459
+ }
20460
+ return ret[0];
20461
+ }
20462
+ exports.normalizedInnovation = normalizedInnovation;
20463
+
19658
20464
  /**
19659
20465
  * Build the NTRIP connection request bytes for a config object.
19660
20466
  * @param {any} config
@@ -19671,6 +20477,43 @@ function ntripRequestBytes(config) {
19671
20477
  }
19672
20478
  exports.ntripRequestBytes = ntripRequestBytes;
19673
20479
 
20480
+ /**
20481
+ * Stable string label for an [`ObservabilityTier`] enum value.
20482
+ * @param {ObservabilityTier} tier
20483
+ * @returns {string}
20484
+ */
20485
+ function observabilityTierLabel(tier) {
20486
+ let deferred1_0;
20487
+ let deferred1_1;
20488
+ try {
20489
+ const ret = wasm.observabilityTierLabel(tier);
20490
+ deferred1_0 = ret[0];
20491
+ deferred1_1 = ret[1];
20492
+ return getStringFromWasm0(ret[0], ret[1]);
20493
+ } finally {
20494
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
20495
+ }
20496
+ }
20497
+ exports.observabilityTierLabel = observabilityTierLabel;
20498
+
20499
+ /**
20500
+ * Missing-position sentinel used in failed observable-state batch elements.
20501
+ *
20502
+ * The returned JS value is `[NaN, NaN, NaN]`, matching
20503
+ * `sidereon_core::ephemeris::OBSERVABLE_STATE_MISSING_POSITION_ECEF_M`. Always
20504
+ * check `elementResults[i].ok` or `statuses[i]` before using
20505
+ * `positionsEcefM[i]`.
20506
+ * @returns {any}
20507
+ */
20508
+ function observableStateMissingPositionEcefM() {
20509
+ const ret = wasm.observableStateMissingPositionEcefM();
20510
+ if (ret[2]) {
20511
+ throw takeFromExternrefTable0(ret[1]);
20512
+ }
20513
+ return takeFromExternrefTable0(ret[0]);
20514
+ }
20515
+ exports.observableStateMissingPositionEcefM = observableStateMissingPositionEcefM;
20516
+
19674
20517
  /**
19675
20518
  * Predict observables for one satellite from a broadcast ephemeris store.
19676
20519
  * Delegates to `sidereon_core::observables::predict`.
@@ -21892,6 +22735,78 @@ function solveWithFallback(precise, broadcast, request, policy) {
21892
22735
  }
21893
22736
  exports.solveWithFallback = solveWithFallback;
21894
22737
 
22738
+ /**
22739
+ * Compute the timing Cramer-Rao lower bound for a proposed source position.
22740
+ *
22741
+ * The covariance is `(H^T H)^-1 * timingSigmaS^2`; position blocks are square
22742
+ * metres and origin-time variance is square seconds.
22743
+ * @param {any} sensors
22744
+ * @param {any} source_position_m
22745
+ * @param {number} propagation_speed_m_s
22746
+ * @param {number} timing_sigma_s
22747
+ * @returns {any}
22748
+ */
22749
+ function sourceCrlb(sensors, source_position_m, propagation_speed_m_s, timing_sigma_s) {
22750
+ const ret = wasm.sourceCrlb(sensors, source_position_m, propagation_speed_m_s, timing_sigma_s);
22751
+ if (ret[2]) {
22752
+ throw takeFromExternrefTable0(ret[1]);
22753
+ }
22754
+ return takeFromExternrefTable0(ret[0]);
22755
+ }
22756
+ exports.sourceCrlb = sourceCrlb;
22757
+
22758
+ /**
22759
+ * Compute timing DOP for a proposed source position.
22760
+ *
22761
+ * `sourcePositionM` is a 2D or 3D Cartesian metre vector in the same frame as
22762
+ * the sensors. The returned DOP values multiply timing sigma in seconds to
22763
+ * produce metres in the caller's Cartesian axes.
22764
+ * @param {any} sensors
22765
+ * @param {any} source_position_m
22766
+ * @param {number} propagation_speed_m_s
22767
+ * @returns {any}
22768
+ */
22769
+ function sourceDop(sensors, source_position_m, propagation_speed_m_s) {
22770
+ const ret = wasm.sourceDop(sensors, source_position_m, propagation_speed_m_s);
22771
+ if (ret[2]) {
22772
+ throw takeFromExternrefTable0(ret[1]);
22773
+ }
22774
+ return takeFromExternrefTable0(ret[0]);
22775
+ }
22776
+ exports.sourceDop = sourceDop;
22777
+
22778
+ /**
22779
+ * Return the plain mode object for TDOA solves against `referenceSensor`.
22780
+ * @param {number} reference_sensor
22781
+ * @returns {any}
22782
+ */
22783
+ function sourceSolveModeTdoa(reference_sensor) {
22784
+ const ret = wasm.sourceSolveModeTdoa(reference_sensor);
22785
+ if (ret[2]) {
22786
+ throw takeFromExternrefTable0(ret[1]);
22787
+ }
22788
+ return takeFromExternrefTable0(ret[0]);
22789
+ }
22790
+ exports.sourceSolveModeTdoa = sourceSolveModeTdoa;
22791
+
22792
+ /**
22793
+ * Return the plain mode value for absolute time-of-arrival solves.
22794
+ * @returns {string}
22795
+ */
22796
+ function sourceSolveModeToa() {
22797
+ let deferred1_0;
22798
+ let deferred1_1;
22799
+ try {
22800
+ const ret = wasm.sourceSolveModeToa();
22801
+ deferred1_0 = ret[0];
22802
+ deferred1_1 = ret[1];
22803
+ return getStringFromWasm0(ret[0], ret[1]);
22804
+ } finally {
22805
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
22806
+ }
22807
+ }
22808
+ exports.sourceSolveModeToa = sourceSolveModeToa;
22809
+
21895
22810
  /**
21896
22811
  * Extract a parsed SP3 product as the canonical precise-ephemeris samples, one
21897
22812
  * per real position record in ascending epoch order.
@@ -23176,6 +24091,9 @@ const FrameStatesFinalization = (typeof FinalizationRegistry === 'undefined')
23176
24091
  const GeoidGridFinalization = (typeof FinalizationRegistry === 'undefined')
23177
24092
  ? { register: () => {}, unregister: () => {} }
23178
24093
  : new FinalizationRegistry(ptr => wasm.__wbg_geoidgrid_free(ptr, 1));
24094
+ const GeometryQualityFinalization = (typeof FinalizationRegistry === 'undefined')
24095
+ ? { register: () => {}, unregister: () => {} }
24096
+ : new FinalizationRegistry(ptr => wasm.__wbg_geometryquality_free(ptr, 1));
23179
24097
  const GlonassRecordJsFinalization = (typeof FinalizationRegistry === 'undefined')
23180
24098
  ? { register: () => {}, unregister: () => {} }
23181
24099
  : new FinalizationRegistry(ptr => wasm.__wbg_glonassrecordjs_free(ptr, 1));
@@ -23362,6 +24280,9 @@ const PppFixedSolutionFinalization = (typeof FinalizationRegistry === 'undefined
23362
24280
  const PppFloatSolutionFinalization = (typeof FinalizationRegistry === 'undefined')
23363
24281
  ? { register: () => {}, unregister: () => {} }
23364
24282
  : new FinalizationRegistry(ptr => wasm.__wbg_pppfloatsolution_free(ptr, 1));
24283
+ const PreciseEphemerisInterpolantFinalization = (typeof FinalizationRegistry === 'undefined')
24284
+ ? { register: () => {}, unregister: () => {} }
24285
+ : new FinalizationRegistry(ptr => wasm.__wbg_preciseephemerisinterpolant_free(ptr, 1));
23365
24286
  const PreciseEphemerisSampleSourceFinalization = (typeof FinalizationRegistry === 'undefined')
23366
24287
  ? { register: () => {}, unregister: () => {} }
23367
24288
  : new FinalizationRegistry(ptr => wasm.__wbg_preciseephemerissamplesource_free(ptr, 1));