@neilberkman/sidereon 0.39.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -56,6 +56,57 @@ export interface Sp3MergeIdentityOptions {
56
56
  systems?: string[];
57
57
  assertedFrameLabelSets?: string[][];
58
58
  helmert?: boolean;
59
+ verifyContinuity?: Sp3ContinuityOptions | null;
60
+ }
61
+
62
+ export type Sp3MergeOptions = Sp3MergeIdentityOptions;
63
+
64
+ export interface Sp3ContinuityOptions {
65
+ orbitClass?: "meo_gnss" | "geosynchronous" | "leo" | null;
66
+ residualToleranceM?: number | null;
67
+ }
68
+
69
+ export interface ContinuityDefect {
70
+ kind: "duplicate_epoch" | "single_sample_series" | "speed_bound" | "hold_out_residual";
71
+ satellite: string;
72
+ fromJ2000S: number | undefined;
73
+ toJ2000S: number | undefined;
74
+ magnitude: number | undefined;
75
+ bound: number | undefined;
76
+ }
77
+
78
+ export interface ContinuityReport {
79
+ attested: boolean;
80
+ defects: ContinuityDefect[];
81
+ pairsChecked: number;
82
+ residualsChecked: number;
83
+ residualsSkipped: number;
84
+ }
85
+
86
+ export interface MergeContinuityViolation {
87
+ defect: ContinuityDefect;
88
+ fromSources: number[];
89
+ toSources: number[];
90
+ crossesContributors: boolean;
91
+ }
92
+
93
+ export interface WindowContinuityVerdict {
94
+ decision: "accept" | "refuse";
95
+ accepted: boolean;
96
+ influencingDefects: ContinuityDefect[];
97
+ influencingSplices: MergeContinuityViolation[];
98
+ allDefects: ContinuityDefect[];
99
+ allSplices: MergeContinuityViolation[];
100
+ }
101
+
102
+ export interface NominalCoverageInterval {
103
+ from: Date;
104
+ until: Date;
105
+ }
106
+
107
+ export interface NominalCoverage {
108
+ observed: NominalCoverageInterval | null;
109
+ predicted: NominalCoverageInterval | null;
59
110
  }
60
111
 
61
112
  export interface SurfaceMetInput {
@@ -2476,6 +2527,22 @@ export class ErrorEllipse2 {
2476
2527
  readonly semiMinor: number;
2477
2528
  }
2478
2529
 
2530
+ /**
2531
+ * Stateful adapter around the core's target-neutral single-flight waiter.
2532
+ */
2533
+ export class ExactCacheSingleFlightWait {
2534
+ free(): void;
2535
+ [Symbol.dispose](): void;
2536
+ /**
2537
+ * Start one bounded wait at a browser-monotonic timestamp in milliseconds.
2538
+ */
2539
+ constructor(started_ms: number, poll_interval_ms: number, heartbeat_interval_ms: number, liveness_timeout_ms: number, wait_timeout_ms: number);
2540
+ /**
2541
+ * Observe an opaque IndexedDB owner/heartbeat revision.
2542
+ */
2543
+ observe(now_ms: number, revision: Uint8Array): any;
2544
+ }
2545
+
2479
2546
  /**
2480
2547
  * Accepted boundary convention for a validated exact SP3 product.
2481
2548
  */
@@ -4493,6 +4560,31 @@ export class NmeaParseResult {
4493
4560
  readonly sentences: any;
4494
4561
  }
4495
4562
 
4563
+ /**
4564
+ * The next catalog issue nominally due at or after a UTC instant.
4565
+ *
4566
+ * This is a network-free schedule query. It does not claim the archive has
4567
+ * published the issue. Coverage intervals are half-open and all returned
4568
+ * `Date` values are UTC instants.
4569
+ */
4570
+ export class NominalIssue {
4571
+ private constructor();
4572
+ free(): void;
4573
+ [Symbol.dispose](): void;
4574
+ /**
4575
+ * Nominal observed and predicted half-open coverage intervals.
4576
+ */
4577
+ readonly covers: NominalCoverage;
4578
+ /**
4579
+ * Nominal publication deadline as a UTC JavaScript `Date`.
4580
+ */
4581
+ readonly dueAt: Date;
4582
+ /**
4583
+ * Exact product identity expected at the due time.
4584
+ */
4585
+ readonly identity: GnssProductIdentity;
4586
+ }
4587
+
4496
4588
  /**
4497
4589
  * Sans-IO NTRIP client state machine.
4498
4590
  */
@@ -7189,7 +7281,7 @@ export class Sp3 {
7189
7281
  * residualsSkipped }`. Reports rather than refuses: whether a product with
7190
7282
  * defects is acceptable is the caller's decision.
7191
7283
  */
7192
- checkContinuity(orbit_class?: string | null, residual_tolerance_m?: number | null): any;
7284
+ checkContinuity(orbitClass?: string | null, residualToleranceM?: number | null): ContinuityReport;
7193
7285
  /**
7194
7286
  * Estimate `other`'s per-epoch common clock offset relative to this product.
7195
7287
  *
@@ -7199,6 +7291,16 @@ export class Sp3 {
7199
7291
  * `sidereon_core::ephemeris::clock_reference_offset`.
7200
7292
  */
7201
7293
  clockReferenceOffset(other: Sp3, min_common?: number | null): Sp3ClockReferenceOffset[];
7294
+ /**
7295
+ * Decide whether product-wide continuity findings can influence an
7296
+ * inclusive evaluation window through this product's interpolation
7297
+ * stencil.
7298
+ *
7299
+ * Omitted options use the existing defaults (`"meo_gnss"` and 1 metre).
7300
+ * Passing `null` disables the corresponding check. The returned object
7301
+ * retains both the influencing findings and the complete report.
7302
+ */
7303
+ continuityVerdict(fromJ2000S: number, throughJ2000S: number, orbitClass?: string | null, residualToleranceM?: number | null): WindowContinuityVerdict;
7202
7304
  /**
7203
7305
  * Compute DGNSS pseudorange corrections from a surveyed base station.
7204
7306
  *
@@ -7338,6 +7440,13 @@ export class Sp3 {
7338
7440
  * `TypeError` if the satellite has no record there.
7339
7441
  */
7340
7442
  state(satellite: string, epoch_index: number): Sp3State;
7443
+ /**
7444
+ * Time reach of the SP3 position interpolator before and after a query.
7445
+ *
7446
+ * The core derives both values from this product's declared epoch interval
7447
+ * and interpolation-node count. Callers never supply a stencil duration.
7448
+ */
7449
+ stencilExtent(): { beforeS: number; afterS: number };
7341
7450
  /**
7342
7451
  * Serialize to standard SP3 text (the version named by the header, `c` or
7343
7452
  * `d`). Deterministic: the same product always produces byte-identical text.
@@ -7618,6 +7727,14 @@ export class Sp3MergeReport {
7618
7727
  private constructor();
7619
7728
  free(): void;
7620
7729
  [Symbol.dispose](): void;
7730
+ /**
7731
+ * Decide whether this merge's optional continuity post-condition can
7732
+ * influence an inclusive evaluation window through `merged`'s derived
7733
+ * interpolation stencil.
7734
+ *
7735
+ * Returns `null` when `verifyContinuity` was not requested for the merge.
7736
+ */
7737
+ continuityVerdict(merged: Sp3, fromJ2000S: number, throughJ2000S: number): WindowContinuityVerdict | null;
7621
7738
  /**
7622
7739
  * Per-(epoch, satellite) agreement statistics for every accepted cell, in
7623
7740
  * output (epoch, then satellite) order, one entry per cell written to the
@@ -10707,7 +10824,7 @@ export function mergeNavcenAt(records: any, assessments: any): any;
10707
10824
  * empty source list or bad options, and an `Error` for incompatible inputs
10708
10825
  * (mismatched time systems or coordinate frames).
10709
10826
  */
10710
- export function mergeSp3(sources: Sp3[], options: any): Sp3MergeResult;
10827
+ export function mergeSp3(sources: Sp3[], options?: Sp3MergeOptions | null): Sp3MergeResult;
10711
10828
 
10712
10829
  export function meridianTransits(body: string, station: any, start_unix_us: bigint, end_unix_us: bigint, step_s: number, tolerance_s: number): any;
10713
10830
 
@@ -10855,6 +10972,14 @@ export function networkField(input: any): any;
10855
10972
  */
10856
10973
  export function newestPublishedProduct(center: string, family: string, listing_body: string): any;
10857
10974
 
10975
+ /**
10976
+ * Return the next catalog issue nominally due at or after `now`.
10977
+ *
10978
+ * Fractional milliseconds advance to the next whole second, matching the
10979
+ * core catalog's whole-second resolution.
10980
+ */
10981
+ export function nextIssueDue(center: string, content: string, now: Date): NominalIssue;
10982
+
10858
10983
  /**
10859
10984
  * Scalar normalized innovation squared statistic.
10860
10985
  */
@@ -4785,6 +4785,56 @@ class ErrorEllipse2 {
4785
4785
  if (Symbol.dispose) ErrorEllipse2.prototype[Symbol.dispose] = ErrorEllipse2.prototype.free;
4786
4786
  exports.ErrorEllipse2 = ErrorEllipse2;
4787
4787
 
4788
+ /**
4789
+ * Stateful adapter around the core's target-neutral single-flight waiter.
4790
+ */
4791
+ class ExactCacheSingleFlightWait {
4792
+ __destroy_into_raw() {
4793
+ const ptr = this.__wbg_ptr;
4794
+ this.__wbg_ptr = 0;
4795
+ ExactCacheSingleFlightWaitFinalization.unregister(this);
4796
+ return ptr;
4797
+ }
4798
+ free() {
4799
+ const ptr = this.__destroy_into_raw();
4800
+ wasm.__wbg_exactcachesingleflightwait_free(ptr, 0);
4801
+ }
4802
+ /**
4803
+ * Start one bounded wait at a browser-monotonic timestamp in milliseconds.
4804
+ * @param {number} started_ms
4805
+ * @param {number} poll_interval_ms
4806
+ * @param {number} heartbeat_interval_ms
4807
+ * @param {number} liveness_timeout_ms
4808
+ * @param {number} wait_timeout_ms
4809
+ */
4810
+ constructor(started_ms, poll_interval_ms, heartbeat_interval_ms, liveness_timeout_ms, wait_timeout_ms) {
4811
+ const ret = wasm.exactcachesingleflightwait_new(started_ms, poll_interval_ms, heartbeat_interval_ms, liveness_timeout_ms, wait_timeout_ms);
4812
+ if (ret[2]) {
4813
+ throw takeFromExternrefTable0(ret[1]);
4814
+ }
4815
+ this.__wbg_ptr = ret[0];
4816
+ ExactCacheSingleFlightWaitFinalization.register(this, this.__wbg_ptr, this);
4817
+ return this;
4818
+ }
4819
+ /**
4820
+ * Observe an opaque IndexedDB owner/heartbeat revision.
4821
+ * @param {number} now_ms
4822
+ * @param {Uint8Array} revision
4823
+ * @returns {any}
4824
+ */
4825
+ observe(now_ms, revision) {
4826
+ const ptr0 = passArray8ToWasm0(revision, wasm.__wbindgen_malloc);
4827
+ const len0 = WASM_VECTOR_LEN;
4828
+ const ret = wasm.exactcachesingleflightwait_observe(this.__wbg_ptr, now_ms, ptr0, len0);
4829
+ if (ret[2]) {
4830
+ throw takeFromExternrefTable0(ret[1]);
4831
+ }
4832
+ return takeFromExternrefTable0(ret[0]);
4833
+ }
4834
+ }
4835
+ if (Symbol.dispose) ExactCacheSingleFlightWait.prototype[Symbol.dispose] = ExactCacheSingleFlightWait.prototype.free;
4836
+ exports.ExactCacheSingleFlightWait = ExactCacheSingleFlightWait;
4837
+
4788
4838
  /**
4789
4839
  * Accepted boundary convention for a validated exact SP3 product.
4790
4840
  * @enum {0 | 1}
@@ -10005,6 +10055,58 @@ class NmeaParseResult {
10005
10055
  if (Symbol.dispose) NmeaParseResult.prototype[Symbol.dispose] = NmeaParseResult.prototype.free;
10006
10056
  exports.NmeaParseResult = NmeaParseResult;
10007
10057
 
10058
+ /**
10059
+ * The next catalog issue nominally due at or after a UTC instant.
10060
+ *
10061
+ * This is a network-free schedule query. It does not claim the archive has
10062
+ * published the issue. Coverage intervals are half-open and all returned
10063
+ * `Date` values are UTC instants.
10064
+ */
10065
+ class NominalIssue {
10066
+ static __wrap(ptr) {
10067
+ const obj = Object.create(NominalIssue.prototype);
10068
+ obj.__wbg_ptr = ptr;
10069
+ NominalIssueFinalization.register(obj, obj.__wbg_ptr, obj);
10070
+ return obj;
10071
+ }
10072
+ __destroy_into_raw() {
10073
+ const ptr = this.__wbg_ptr;
10074
+ this.__wbg_ptr = 0;
10075
+ NominalIssueFinalization.unregister(this);
10076
+ return ptr;
10077
+ }
10078
+ free() {
10079
+ const ptr = this.__destroy_into_raw();
10080
+ wasm.__wbg_nominalissue_free(ptr, 0);
10081
+ }
10082
+ /**
10083
+ * Nominal observed and predicted half-open coverage intervals.
10084
+ * @returns {any}
10085
+ */
10086
+ get covers() {
10087
+ const ret = wasm.nominalissue_covers(this.__wbg_ptr);
10088
+ return ret;
10089
+ }
10090
+ /**
10091
+ * Nominal publication deadline as a UTC JavaScript `Date`.
10092
+ * @returns {Date}
10093
+ */
10094
+ get dueAt() {
10095
+ const ret = wasm.nominalissue_dueAt(this.__wbg_ptr);
10096
+ return ret;
10097
+ }
10098
+ /**
10099
+ * Exact product identity expected at the due time.
10100
+ * @returns {GnssProductIdentity}
10101
+ */
10102
+ get identity() {
10103
+ const ret = wasm.nominalissue_identity(this.__wbg_ptr);
10104
+ return GnssProductIdentity.__wrap(ret);
10105
+ }
10106
+ }
10107
+ if (Symbol.dispose) NominalIssue.prototype[Symbol.dispose] = NominalIssue.prototype.free;
10108
+ exports.NominalIssue = NominalIssue;
10109
+
10008
10110
  /**
10009
10111
  * Sans-IO NTRIP client state machine.
10010
10112
  */
@@ -17199,6 +17301,27 @@ class Sp3 {
17199
17301
  wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
17200
17302
  return v1;
17201
17303
  }
17304
+ /**
17305
+ * Decide whether product-wide continuity findings can influence an
17306
+ * inclusive evaluation window through this product's interpolation
17307
+ * stencil.
17308
+ *
17309
+ * Omitted options use the existing defaults (`"meo_gnss"` and 1 metre).
17310
+ * Passing `null` disables the corresponding check. The returned object
17311
+ * retains both the influencing findings and the complete report.
17312
+ * @param {number} from_j2000_s
17313
+ * @param {number} through_j2000_s
17314
+ * @param {any} orbit_class
17315
+ * @param {any} residual_tolerance_m
17316
+ * @returns {any}
17317
+ */
17318
+ continuityVerdict(from_j2000_s, through_j2000_s, orbit_class, residual_tolerance_m) {
17319
+ const ret = wasm.sp3_continuityVerdict(this.__wbg_ptr, from_j2000_s, through_j2000_s, orbit_class, residual_tolerance_m);
17320
+ if (ret[2]) {
17321
+ throw takeFromExternrefTable0(ret[1]);
17322
+ }
17323
+ return takeFromExternrefTable0(ret[0]);
17324
+ }
17202
17325
  /**
17203
17326
  * Epoch count declared by SP3 header line 1, independent of the parsed
17204
17327
  * body count used by [`Sp3::epochCount`].
@@ -17550,6 +17673,20 @@ class Sp3 {
17550
17673
  }
17551
17674
  return Sp3State.__wrap(ret[0]);
17552
17675
  }
17676
+ /**
17677
+ * Time reach of the SP3 position interpolator before and after a query.
17678
+ *
17679
+ * The core derives both values from this product's declared epoch interval
17680
+ * and interpolation-node count. Callers never supply a stencil duration.
17681
+ * @returns {any}
17682
+ */
17683
+ stencilExtent() {
17684
+ const ret = wasm.sp3_stencilExtent(this.__wbg_ptr);
17685
+ if (ret[2]) {
17686
+ throw takeFromExternrefTable0(ret[1]);
17687
+ }
17688
+ return takeFromExternrefTable0(ret[0]);
17689
+ }
17553
17690
  /**
17554
17691
  * Serialize to standard SP3 text (the version named by the header, `c` or
17555
17692
  * `d`). Deterministic: the same product always produces byte-identical text.
@@ -18226,6 +18363,25 @@ class Sp3MergeReport {
18226
18363
  wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
18227
18364
  return v1;
18228
18365
  }
18366
+ /**
18367
+ * Decide whether this merge's optional continuity post-condition can
18368
+ * influence an inclusive evaluation window through `merged`'s derived
18369
+ * interpolation stencil.
18370
+ *
18371
+ * Returns `null` when `verifyContinuity` was not requested for the merge.
18372
+ * @param {Sp3} merged
18373
+ * @param {number} from_j2000_s
18374
+ * @param {number} through_j2000_s
18375
+ * @returns {any}
18376
+ */
18377
+ continuityVerdict(merged, from_j2000_s, through_j2000_s) {
18378
+ _assertClass(merged, Sp3);
18379
+ const ret = wasm.sp3mergereport_continuityVerdict(this.__wbg_ptr, merged.__wbg_ptr, from_j2000_s, through_j2000_s);
18380
+ if (ret[2]) {
18381
+ throw takeFromExternrefTable0(ret[1]);
18382
+ }
18383
+ return takeFromExternrefTable0(ret[0]);
18384
+ }
18229
18385
  /**
18230
18386
  * @returns {number}
18231
18387
  */
@@ -26997,6 +27153,29 @@ function newestPublishedProduct(center, family, listing_body) {
26997
27153
  }
26998
27154
  exports.newestPublishedProduct = newestPublishedProduct;
26999
27155
 
27156
+ /**
27157
+ * Return the next catalog issue nominally due at or after `now`.
27158
+ *
27159
+ * Fractional milliseconds advance to the next whole second, matching the
27160
+ * core catalog's whole-second resolution.
27161
+ * @param {string} center
27162
+ * @param {string} content
27163
+ * @param {Date} now
27164
+ * @returns {NominalIssue}
27165
+ */
27166
+ function nextIssueDue(center, content, now) {
27167
+ const ptr0 = passStringToWasm0(center, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
27168
+ const len0 = WASM_VECTOR_LEN;
27169
+ const ptr1 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
27170
+ const len1 = WASM_VECTOR_LEN;
27171
+ const ret = wasm.nextIssueDue(ptr0, len0, ptr1, len1, now);
27172
+ if (ret[2]) {
27173
+ throw takeFromExternrefTable0(ret[1]);
27174
+ }
27175
+ return NominalIssue.__wrap(ret[0]);
27176
+ }
27177
+ exports.nextIssueDue = nextIssueDue;
27178
+
27000
27179
  /**
27001
27180
  * Scalar normalized innovation squared statistic.
27002
27181
  * @param {number} innovation
@@ -31438,6 +31617,34 @@ function __wbg_get_imports() {
31438
31617
  const ret = Array.from(arg0);
31439
31618
  return ret;
31440
31619
  },
31620
+ __wbg_getTime_d6f070c088c9b5ed: function(arg0) {
31621
+ const ret = arg0.getTime();
31622
+ return ret;
31623
+ },
31624
+ __wbg_getUTCDate_652a2ad7beebbadf: function(arg0) {
31625
+ const ret = arg0.getUTCDate();
31626
+ return ret;
31627
+ },
31628
+ __wbg_getUTCFullYear_5af8ca4e2020c06e: function(arg0) {
31629
+ const ret = arg0.getUTCFullYear();
31630
+ return ret;
31631
+ },
31632
+ __wbg_getUTCHours_3f030631d89309ea: function(arg0) {
31633
+ const ret = arg0.getUTCHours();
31634
+ return ret;
31635
+ },
31636
+ __wbg_getUTCMinutes_03f5d6c64c8b2fb1: function(arg0) {
31637
+ const ret = arg0.getUTCMinutes();
31638
+ return ret;
31639
+ },
31640
+ __wbg_getUTCMonth_773ed3c34515d086: function(arg0) {
31641
+ const ret = arg0.getUTCMonth();
31642
+ return ret;
31643
+ },
31644
+ __wbg_getUTCSeconds_92d08d3589a8958a: function(arg0) {
31645
+ const ret = arg0.getUTCSeconds();
31646
+ return ret;
31647
+ },
31441
31648
  __wbg_get_507a50627bffa49b: function(arg0, arg1) {
31442
31649
  const ret = arg0[arg1 >>> 0];
31443
31650
  return ret;
@@ -31598,6 +31805,10 @@ function __wbg_get_imports() {
31598
31805
  const ret = new Error(getStringFromWasm0(arg0, arg1));
31599
31806
  return ret;
31600
31807
  },
31808
+ __wbg_new_cc984128914cfc6f: function(arg0) {
31809
+ const ret = new Date(arg0);
31810
+ return ret;
31811
+ },
31601
31812
  __wbg_new_cd45aabdf6073e84: function(arg0) {
31602
31813
  const ret = new Uint8Array(arg0);
31603
31814
  return ret;
@@ -31930,6 +32141,9 @@ const ErrorEllipseFinalization = (typeof FinalizationRegistry === 'undefined')
31930
32141
  const ErrorEllipse2Finalization = (typeof FinalizationRegistry === 'undefined')
31931
32142
  ? { register: () => {}, unregister: () => {} }
31932
32143
  : new FinalizationRegistry(ptr => wasm.__wbg_errorellipse2_free(ptr, 1));
32144
+ const ExactCacheSingleFlightWaitFinalization = (typeof FinalizationRegistry === 'undefined')
32145
+ ? { register: () => {}, unregister: () => {} }
32146
+ : new FinalizationRegistry(ptr => wasm.__wbg_exactcachesingleflightwait_free(ptr, 1));
31933
32147
  const ExactSp3ParseResultFinalization = (typeof FinalizationRegistry === 'undefined')
31934
32148
  ? { register: () => {}, unregister: () => {} }
31935
32149
  : new FinalizationRegistry(ptr => wasm.__wbg_exactsp3parseresult_free(ptr, 1));
@@ -32089,6 +32303,9 @@ const NmeaAccumulatorFinalization = (typeof FinalizationRegistry === 'undefined'
32089
32303
  const NmeaParseResultFinalization = (typeof FinalizationRegistry === 'undefined')
32090
32304
  ? { register: () => {}, unregister: () => {} }
32091
32305
  : new FinalizationRegistry(ptr => wasm.__wbg_nmeaparseresult_free(ptr, 1));
32306
+ const NominalIssueFinalization = (typeof FinalizationRegistry === 'undefined')
32307
+ ? { register: () => {}, unregister: () => {} }
32308
+ : new FinalizationRegistry(ptr => wasm.__wbg_nominalissue_free(ptr, 1));
32092
32309
  const NtripClientMachineFinalization = (typeof FinalizationRegistry === 'undefined')
32093
32310
  ? { register: () => {}, unregister: () => {} }
32094
32311
  : new FinalizationRegistry(ptr => wasm.__wbg_ntripclientmachine_free(ptr, 1));
Binary file