space-data-module-sdk 0.8.15 → 0.8.17

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.
Files changed (130) hide show
  1. package/bin/space-data-module.js +24 -6
  2. package/docs/_shell/consumer-assets.html +5 -0
  3. package/docs/browser-wasmedge-isomorphic.html +261 -0
  4. package/docs/byo-wasm-quickstart.html +226 -0
  5. package/docs/byo-wasm-quickstart.md +204 -0
  6. package/docs/conformance.html +162 -0
  7. package/docs/conformance.md +20 -4
  8. package/docs/emception-shared-memory-verdict.md +209 -0
  9. package/docs/events-abi.html +313 -0
  10. package/docs/events-abi.md +530 -0
  11. package/docs/families/analytics.html +178 -0
  12. package/docs/families/analytics.md +104 -0
  13. package/docs/families/attitude.html +157 -0
  14. package/docs/families/attitude.md +36 -0
  15. package/docs/families/behavior.html +157 -0
  16. package/docs/families/behavior.md +36 -0
  17. package/docs/families/breakup.html +157 -0
  18. package/docs/families/breakup.md +36 -0
  19. package/docs/families/conjunction.html +186 -0
  20. package/docs/families/conjunction.md +121 -0
  21. package/docs/families/data-source.html +323 -0
  22. package/docs/families/effects.html +157 -0
  23. package/docs/families/effects.md +36 -0
  24. package/docs/families/environment.html +170 -0
  25. package/docs/families/environment.md +73 -0
  26. package/docs/families/estimation.html +192 -0
  27. package/docs/families/estimation.md +158 -0
  28. package/docs/families/gnc.html +157 -0
  29. package/docs/families/gnc.md +36 -0
  30. package/docs/families/maneuver.html +209 -0
  31. package/docs/families/maneuver.md +206 -0
  32. package/docs/families/obstruction.html +191 -0
  33. package/docs/families/obstruction.md +96 -0
  34. package/docs/families/propagator.html +347 -0
  35. package/docs/families/propulsion.html +157 -0
  36. package/docs/families/propulsion.md +36 -0
  37. package/docs/families/reentry.html +157 -0
  38. package/docs/families/reentry.md +36 -0
  39. package/docs/families/rf.html +193 -0
  40. package/docs/families/rf.md +136 -0
  41. package/docs/families/scheduler.html +157 -0
  42. package/docs/families/scheduler.md +36 -0
  43. package/docs/families/sensor.html +157 -0
  44. package/docs/families/sensor.md +36 -0
  45. package/docs/families/signature.html +157 -0
  46. package/docs/families/signature.md +36 -0
  47. package/docs/flatsql-host-contract.html +176 -0
  48. package/docs/flatsql-streaming-standard.html +375 -0
  49. package/docs/gpu-module-abi.html +233 -0
  50. package/docs/harness-family-matrix.md +135 -0
  51. package/docs/index.html +216 -85
  52. package/docs/isomorphic-pthreads.html +228 -0
  53. package/docs/isomorphic-pthreads.md +84 -0
  54. package/docs/isomorphic-sdn-runtime-plan.html +274 -0
  55. package/docs/language-runtime-matrix.html +182 -0
  56. package/docs/llms.txt +86 -0
  57. package/docs/module-bundle-runtime-plan.html +146 -0
  58. package/docs/module-publication-standard.html +503 -0
  59. package/docs/node-red-default-node-parity.html +201 -0
  60. package/docs/propagator-abi.md +97 -12
  61. package/docs/protect-and-sign.html +181 -0
  62. package/docs/protect-and-sign.md +120 -0
  63. package/docs/protocol-installation.html +296 -0
  64. package/docs/provider-access-abi.md +25 -0
  65. package/docs/publication-submission.html +158 -0
  66. package/docs/publication-submission.md +78 -0
  67. package/docs/secrets-capability.html +206 -0
  68. package/docs/styles.css +860 -167
  69. package/docs/testing-harness.html +408 -0
  70. package/docs/tri-runtime-parity-gate.html +182 -0
  71. package/docs/tri-runtime-parity.html +203 -0
  72. package/include/orbpro/orbpro_estimation_abi.h +883 -0
  73. package/include/orbpro/orbpro_event_runner.h +951 -0
  74. package/include/orbpro/orbpro_events_abi.h +565 -0
  75. package/include/orbpro/orbpro_propagator_abi.h +75 -0
  76. package/package.json +13 -4
  77. package/schemas/orbpro/Estimation.fbs +244 -0
  78. package/schemas/orbpro/Events.fbs +501 -0
  79. package/schemas/orbpro/Propagator.fbs +136 -9
  80. package/schemas/orbpro/reference-frame-crosswalk.json +108 -0
  81. package/schemas/orbpro/reference-frame.lock.json +98 -0
  82. package/src/browser.js +13 -0
  83. package/src/conformance/estimationReference.js +81 -0
  84. package/src/conformance/estimationSuite.js +134 -0
  85. package/src/conformance/index.js +39 -2
  86. package/src/generated/orbpro/events-abi.js +206 -0
  87. package/src/generated/orbpro/events-abi.ts +319 -0
  88. package/src/generated/orbpro/propagator/reference-frame.js +17 -0
  89. package/src/generated/orbpro/propagator/reference-frame.ts +91 -1
  90. package/src/generated/orbpro/propagator-abi.js +38 -0
  91. package/src/generated/orbpro/propagator-abi.ts +67 -0
  92. package/src/generated/spacedatastandards/plg/CCT.d.ts +94 -0
  93. package/src/generated/spacedatastandards/plg/CCT.d.ts.map +1 -0
  94. package/src/generated/spacedatastandards/plg/CCT.js +208 -0
  95. package/src/generated/spacedatastandards/plg/CCT.ts +281 -0
  96. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts +98 -0
  97. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts.map +1 -0
  98. package/src/generated/spacedatastandards/plg/CCTCategory.js +177 -0
  99. package/src/generated/spacedatastandards/plg/CCTCategory.ts +269 -0
  100. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts +54 -0
  101. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts.map +1 -0
  102. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.js +106 -0
  103. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.ts +144 -0
  104. package/src/generated/spacedatastandards/plg/PLG.d.ts +46 -2
  105. package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -1
  106. package/src/generated/spacedatastandards/plg/PLG.js +78 -5
  107. package/src/generated/spacedatastandards/plg/PLG.ts +90 -5
  108. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts +181 -0
  109. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts.map +1 -0
  110. package/src/generated/spacedatastandards/plg/capabilityClass.js +183 -0
  111. package/src/generated/spacedatastandards/plg/capabilityClass.ts +208 -0
  112. package/src/generated/spacedatastandards/plg/main.d.ts +4 -0
  113. package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -1
  114. package/src/generated/spacedatastandards/plg/main.js +4 -0
  115. package/src/generated/spacedatastandards/plg/main.ts +4 -0
  116. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +40 -2
  117. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
  118. package/src/generated/spacedatastandards/plg/pluginCategory.js +40 -2
  119. package/src/generated/spacedatastandards/plg/pluginCategory.ts +40 -2
  120. package/src/host/browserModuleHarness.js +8 -0
  121. package/src/host/wasiThreadHost.js +189 -14
  122. package/src/index.d.ts +18 -1
  123. package/src/standards/sharedCatalog.js +7 -0
  124. package/src/transport/index.js +16 -0
  125. package/src/transport/records.js +1015 -3
  126. package/templates/estimation-module/README.md +24 -0
  127. package/templates/estimation-module/build.mjs +32 -0
  128. package/templates/estimation-module/package.json +12 -0
  129. package/templates/estimation-module/plugin-manifest.json +34 -0
  130. package/templates/estimation-module/src/reference_estimation.cpp +53 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "space-data-module-sdk",
3
- "version": "0.8.15",
3
+ "version": "0.8.17",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Module SDK for building, validating, signing, and deploying WebAssembly modules on the Space Data Network.",
6
6
  "type": "module",
@@ -97,18 +97,27 @@
97
97
  "gate:parity": "node ./bin/space-data-module.js parity-gate",
98
98
  "gate:parity-negative-control": "node ./bin/space-data-module.js parity-gate --gate-manifest ./parity/negative-control.json --expect-fail",
99
99
  "conformance:self-test": "node ./bin/space-data-module.js conformance propagator --self-test",
100
+ "conformance:estimation:self-test": "node ./bin/space-data-module.js conformance estimation --self-test",
100
101
  "test:stream-ingest": "node --test test/runtime-host-stream-ingest.test.js",
101
102
  "test:module-stream": "node --test test/module-flatbuffer-stream-pump.test.js",
102
103
  "benchmark:stream-1gib": "SPACE_DATA_MODULE_SDK_ENABLE_1GB_STREAM_TEST=1 node --test test/runtime-host-stream-ingest.test.js",
103
104
  "benchmark:module-stream-1gib": "SPACE_DATA_MODULE_SDK_ENABLE_1GB_MODULE_STREAM_TEST=1 node --test test/module-flatbuffer-stream-pump.test.js",
104
105
  "start:lab": "node ./lab/server.js",
105
- "check:nav": "node scripts/check-sdn-stack-nav.mjs module-sdk docs/index.html docs/styles.css",
106
+ "build:docs": "node scripts/build-docs.mjs",
107
+ "check:docs": "node scripts/build-docs.mjs --check && node scripts/check-docs-links.mjs",
108
+ "check:docs-links": "node scripts/check-docs-links.mjs",
109
+ "check:nav": "node scripts/check-sdn-stack-nav.mjs module-sdk docs/index.html docs/families/propagator.html docs/families/rf.html docs/byo-wasm-quickstart.html docs/conformance.html docs/protect-and-sign.html docs/publication-submission.html docs/styles.css",
106
110
  "check:compliance": "node ./bin/space-data-module.js check --repo-root .",
107
111
  "check:generated-bindings": "node scripts/check-generated-bindings.mjs",
108
112
  "check:propagator-abi": "node scripts/check-propagator-abi.mjs",
113
+ "check:estimation-abi": "node scripts/check-estimation-abi.mjs",
114
+ "check:reference-frame": "node scripts/check-reference-frame-uniqueness.mjs",
109
115
  "generate:propagator-abi": "node scripts/generate-propagator-abi.mjs",
110
116
  "generate:vectors": "node ./examples/single-file-bundle/generate-vectors.mjs",
111
- "prepublishOnly": "npm test && npm run check:compliance"
117
+ "prepublishOnly": "npm test && npm run check:compliance",
118
+ "playground:build": "node ./playground/build.mjs",
119
+ "playground:serve": "node ./playground/build.mjs && node ./playground/server.mjs",
120
+ "playground:gate": "node ./playground/build.mjs && node ./playground/test/browser-gate.mjs"
112
121
  },
113
122
  "dependencies": {
114
123
  "flatbuffers": "^25.9.23",
@@ -116,7 +125,7 @@
116
125
  "flatsql": "^2.0.0",
117
126
  "hd-wallet-wasm": "2.0.28",
118
127
  "sdn-emception": "1.0.0",
119
- "spacedatastandards.org": "https://github.com/DigitalArsenal/spacedatastandards.org/archive/06deda5079204a46bd97a7ce6ac2868e991c6b8f.tar.gz"
128
+ "spacedatastandards.org": "1.203.0"
120
129
  },
121
130
  "devDependencies": {
122
131
  "esbuild": "^0.28.0",
@@ -0,0 +1,244 @@
1
+ include "Propagator.fbs";
2
+
3
+ namespace orbpro.estimation;
4
+
5
+ // Estimation family ABI. This schema is the single source of truth for the
6
+ // fixed-layout C boundary and the request/result wire. Propagation is an
7
+ // inverted port protocol: the guest emits state/STM requests and consumes the
8
+ // supplied Propagator.fbs answers. It imports no provider-specific function.
9
+
10
+ enum EstimatorKind : ubyte (abi, abi_c_name: "OrbProEstimatorKind", abi_c_prefix: "ORBPRO_ESTIMATOR_") {
11
+ BATCH_WEIGHTED_LEAST_SQUARES = 0,
12
+ EXTENDED_KALMAN_FILTER = 1,
13
+ UNSCENTED_KALMAN_FILTER = 2,
14
+ EXTENDED_KALMAN_FILTER_WITH_RTS = 3
15
+ }
16
+
17
+ enum MeasurementKind : ushort (abi, abi_c_name: "OrbProMeasurementKind", abi_c_prefix: "ORBPRO_MEASUREMENT_") {
18
+ RANGE = 0,
19
+ RANGE_RATE = 1,
20
+ DOPPLER = 2,
21
+ AZIMUTH_ELEVATION = 3,
22
+ X_EAST_Y_NORTH = 4,
23
+ X_SOUTH_Y_EAST = 5,
24
+ RIGHT_ASCENSION_DECLINATION = 6,
25
+ POSITION_VECTOR = 7,
26
+ SEQUENTIAL_RANGE = 8,
27
+ PSEUDONOISE_RANGE = 9,
28
+ TIME_CORRELATED_PHASE = 10,
29
+ RELAY_RANGE = 11,
30
+ RELAY_DOPPLER = 12,
31
+ RELAY_DIFFERENCED_DOPPLER = 13,
32
+ BISTATIC_RANGE = 14,
33
+ SKIN_RANGE = 15,
34
+ CROSSLINK_RANGE = 16,
35
+ CROSSLINK_RANGE_RATE = 17,
36
+ LASER_RANGE = 18,
37
+ TIME_DIFFERENCE_OF_ARRIVAL = 19,
38
+ FREQUENCY_DIFFERENCE_OF_ARRIVAL = 20
39
+ }
40
+
41
+ enum ProcessNoiseKind : ubyte (abi, abi_c_name: "OrbProProcessNoiseKind", abi_c_prefix: "ORBPRO_PROCESS_NOISE_") {
42
+ NONE = 0,
43
+ STATE_NOISE_COMPENSATION = 1,
44
+ DYNAMIC_MODEL_COMPENSATION = 2
45
+ }
46
+
47
+ enum TroposphereKind : ubyte (abi, abi_c_name: "OrbProTroposphereKind", abi_c_prefix: "ORBPRO_TROPOSPHERE_") {
48
+ NONE = 0,
49
+ HOPFIELD_SAASTAMOINEN = 1,
50
+ MARINI = 2
51
+ }
52
+
53
+ enum IonosphereKind : ubyte (abi, abi_c_name: "OrbProIonosphereKind", abi_c_prefix: "ORBPRO_IONOSPHERE_") {
54
+ NONE = 0,
55
+ TOTAL_ELECTRON_CONTENT = 1,
56
+ REFERENCE_PROFILE = 2
57
+ }
58
+
59
+ enum InitialOrbitKind : ubyte (abi, abi_c_name: "OrbProInitialOrbitKind", abi_c_prefix: "ORBPRO_IOD_") {
60
+ GAUSS = 0,
61
+ LAPLACE = 1,
62
+ GIBBS = 2,
63
+ HERRICK_GIBBS = 3
64
+ }
65
+
66
+ enum EstimationStatus : int (abi, abi_c_name: "OrbProEstimationStatus", abi_c_prefix: "ORBPRO_ESTIMATION_") {
67
+ INTERNAL = -20,
68
+ PROPAGATOR_PROTOCOL = -19,
69
+ BUFFER_TOO_SMALL = -18,
70
+ NOT_CONVERGED = -5,
71
+ BAD_INPUT = -4,
72
+ NULL_OUTPUT = -3,
73
+ NOT_CONFIGURED = -1,
74
+ OK = 0
75
+ }
76
+
77
+ struct EstimationEpoch (abi, abi_c_name: "OrbProEstimationEpoch", abi_c_helper_prefix: "orbpro_estimation_epoch_") {
78
+ jd_day:double;
79
+ seconds:double;
80
+ }
81
+
82
+ /// One observation in SI units. The first value_count lanes of value and
83
+ /// sigma are meaningful. station_position_m is in the request frame.
84
+ struct EstimationObservation (abi, abi_c_name: "OrbProEstimationObservation", abi_c_helper_prefix: "orbpro_estimation_observation_") {
85
+ epoch:EstimationEpoch;
86
+ value:[double:4];
87
+ sigma:[double:4];
88
+ station_position_m:[double:3];
89
+ station_velocity_mps:[double:3];
90
+ station_east:[double:3];
91
+ station_north:[double:3];
92
+ station_up:[double:3];
93
+ remote_position_m:[double:3];
94
+ remote_velocity_mps:[double:3];
95
+ frequency_hz:double;
96
+ transmitter_delay_seconds:double;
97
+ receiver_delay_seconds:double;
98
+ transponder_delay_seconds:double;
99
+ elevation_rad:double;
100
+ station_latitude_rad:double;
101
+ station_height_m:double;
102
+ pressure_hpa:double;
103
+ temperature_k:double;
104
+ relative_humidity:double;
105
+ wavelength_m:double;
106
+ total_electron_content:double;
107
+ total_electron_content_rate_per_second:double;
108
+ turnaround_numerator:uint;
109
+ turnaround_denominator:uint;
110
+ kind:MeasurementKind;
111
+ value_count:ubyte;
112
+ flags:ubyte;
113
+ transmitter_index:uint;
114
+ receiver_index:uint;
115
+ }
116
+
117
+ struct EstimationErrorModel (abi, abi_c_name: "OrbProEstimationErrorModel", abi_c_helper_prefix: "orbpro_estimation_error_model_") {
118
+ noise_sigma:double;
119
+ bias:double;
120
+ bias_sigma:double;
121
+ correlation_time_seconds:double;
122
+ minimum_value:double;
123
+ maximum_value:double;
124
+ sigma_edit_threshold:double;
125
+ random_seed:ulong;
126
+ measurement_kind:MeasurementKind;
127
+ troposphere:TroposphereKind;
128
+ ionosphere:IonosphereKind;
129
+ flags:ubyte;
130
+ }
131
+
132
+ /// Fixed configuration copied byte-for-byte in every runtime. initial_state
133
+ /// is Cartesian [x,y,z,vx,vy,vz] in metres and metres per second; covariance
134
+ /// is row-major 6 by 6 in matching SI units.
135
+ struct EstimationConfig (abi, abi_c_name: "OrbProEstimationConfig", abi_c_helper_prefix: "orbpro_estimation_config_") {
136
+ initial_epoch:EstimationEpoch;
137
+ initial_state:[double:6];
138
+ initial_covariance:[double:36];
139
+ process_noise_spectral_density:[double:6];
140
+ state_convergence_tolerance:double;
141
+ rms_convergence_tolerance:double;
142
+ sigma_edit_threshold:double;
143
+ dynamic_model_correlation_time_seconds:double;
144
+ maximum_iterations:uint;
145
+ reference_frame:orbpro.propagator.ReferenceFrame;
146
+ estimator:EstimatorKind;
147
+ process_noise:ProcessNoiseKind;
148
+ flags:ushort;
149
+ }
150
+
151
+ struct EstimationState (abi, abi_c_name: "OrbProEstimationState", abi_c_helper_prefix: "orbpro_estimation_state_") {
152
+ epoch:EstimationEpoch;
153
+ state:[double:6];
154
+ covariance:[double:36];
155
+ residual_rms:double;
156
+ recovered_noise_sigma:double;
157
+ iteration_count:uint;
158
+ accepted_count:uint;
159
+ rejected_count:uint;
160
+ reference_frame:orbpro.propagator.ReferenceFrame;
161
+ converged:ubyte;
162
+ smoothed:ubyte;
163
+ estimator:EstimatorKind;
164
+ }
165
+
166
+ struct FilterEpoch (abi, abi_c_name: "OrbProFilterEpoch", abi_c_helper_prefix: "orbpro_filter_epoch_") {
167
+ epoch:EstimationEpoch;
168
+ filtered_state:[double:6];
169
+ filtered_covariance:[double:36];
170
+ smoothed_state:[double:6];
171
+ smoothed_covariance:[double:36];
172
+ normalized_innovation_squared:double;
173
+ }
174
+
175
+ /// State and state-transition matrix supplied by the propagator port. The STM
176
+ /// maps deviations at the estimator epoch to this sample epoch.
177
+ struct EstimationPropagatorSample (abi, abi_c_name: "OrbProEstimationPropagatorSample", abi_c_helper_prefix: "orbpro_estimation_propagator_sample_") {
178
+ epoch:EstimationEpoch;
179
+ state:[double:6];
180
+ stm:[double:36];
181
+ }
182
+
183
+ struct InitialOrbitRequest (abi, abi_c_name: "OrbProInitialOrbitRequest", abi_c_helper_prefix: "orbpro_initial_orbit_request_") {
184
+ // Three inertial position vectors for Gibbs and Herrick-Gibbs.
185
+ positions_m:[double:9];
186
+ // Three observer positions followed by the three topocentric angle pairs
187
+ // used by Gauss and Laplace. The method selects which input set is read.
188
+ observer_positions_m:[double:9];
189
+ right_ascensions_rad:[double:3];
190
+ declinations_rad:[double:3];
191
+ epochs:EstimationEpoch;
192
+ interval_12_seconds:double;
193
+ interval_23_seconds:double;
194
+ gravitational_parameter_m3_s2:double;
195
+ method:InitialOrbitKind;
196
+ }
197
+
198
+ struct InitialOrbitResult (abi, abi_c_name: "OrbProInitialOrbitResult", abi_c_helper_prefix: "orbpro_initial_orbit_result_") {
199
+ epoch:EstimationEpoch;
200
+ state:[double:6];
201
+ iterations:uint;
202
+ reference_frame:orbpro.propagator.ReferenceFrame;
203
+ status:EstimationStatus;
204
+ }
205
+
206
+ /// Request/result wire. observations are decoded from $TDM/$CRD before they
207
+ /// cross this family boundary; their source record identifiers remain on the
208
+ /// request for a complete provenance trail.
209
+ table EstimationRequest {
210
+ config:EstimationConfig;
211
+ observations:[EstimationObservation];
212
+ error_models:[EstimationErrorModel];
213
+ source_record_ids:[string];
214
+ propagator_port_id:string (required);
215
+ propagator_capability:string (required);
216
+ trace_id:string;
217
+ }
218
+
219
+ table EstimationResult {
220
+ status:EstimationStatus = OK;
221
+ estimate:EstimationState;
222
+ filter_history:[FilterEpoch];
223
+ residuals:[double];
224
+ /// Row-major 6x6 covariance blocks, one per batch iteration, in iteration
225
+ /// order. Empty for sequential estimators.
226
+ iteration_covariances:[double];
227
+ rejected_observation_indices:[uint];
228
+ odr_record:[ubyte];
229
+ ocm_record:[ubyte];
230
+ error_message:string;
231
+ trace_id:string;
232
+ }
233
+
234
+ table EstimationEnvelope {
235
+ request:EstimationRequest;
236
+ result:EstimationResult;
237
+ propagator_samples:[EstimationPropagatorSample];
238
+ simulated_observations:[EstimationObservation];
239
+ initial_orbit_request:InitialOrbitRequest;
240
+ initial_orbit_result:InitialOrbitResult;
241
+ }
242
+
243
+ root_type EstimationEnvelope;
244
+ file_identifier "$EST";