space-data-module-sdk 0.8.6 → 0.8.8

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 (51) hide show
  1. package/README.md +13 -0
  2. package/docs/AGENTS.md +5 -0
  3. package/docs/browser-wasmedge-isomorphic.md +65 -1
  4. package/docs/language-runtime-matrix.md +2 -2
  5. package/docs/provider-access-abi.md +600 -0
  6. package/package.json +15 -6
  7. package/schemas/orbpro/Propagator.fbs +19 -3
  8. package/src/browser.js +14 -4
  9. package/src/bundle/artifactBytes.js +44 -0
  10. package/src/bundle/index.js +1 -0
  11. package/src/compiler/compileModule.js +24 -1
  12. package/src/flow/flowCompiler.js +141 -2
  13. package/src/flow/flowRuntimeHost.js +7 -1
  14. package/src/flow/isomorphicFlowHost.js +1 -1
  15. package/src/flow/vendor/sdn-flow/MethodRegistry.js +6 -1
  16. package/src/generated/orbpro/propagator/propagator-source-description.js +2 -2
  17. package/src/generated/orbpro/propagator/propagator-source-description.ts +2 -2
  18. package/src/generated/orbpro/propagator/propagator-source-kind.js +13 -2
  19. package/src/generated/orbpro/propagator/propagator-source-kind.ts +13 -2
  20. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +18 -1
  21. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
  22. package/src/generated/spacedatastandards/plg/pluginCategory.js +17 -0
  23. package/src/generated/spacedatastandards/plg/pluginCategory.ts +21 -1
  24. package/src/{testing → host}/browserModuleHarness.js +69 -34
  25. package/src/host/index.js +6 -0
  26. package/src/host/isomorphicLoader.js +17 -45
  27. package/src/host/isomorphicLoaderBrowser.js +47 -0
  28. package/src/host/isomorphicLoaderCore.js +58 -0
  29. package/src/host/nodeBuiltinSpecifier.js +43 -0
  30. package/src/host/providerAccess.js +727 -0
  31. package/src/host/providerAccessAbi.js +403 -0
  32. package/src/host/providerAccessEngineAdapter.js +338 -0
  33. package/src/host/providerAccessFixtureAdapter.js +444 -0
  34. package/src/host/providerAccessTileStoreAdapter.js +366 -0
  35. package/src/host/sabHostcallChannel.js +1 -1
  36. package/src/host/terrainSourceSeam.js +205 -0
  37. package/src/host/wasiThreadHost.js +11 -1
  38. package/src/{testing → host}/workerModuleHarness.js +45 -12
  39. package/src/{testing → host}/workerModuleHarnessWorker.js +6 -5
  40. package/src/index.d.ts +29 -2
  41. package/src/standards/browser.js +95 -0
  42. package/src/standards/catalogCore.js +290 -0
  43. package/src/standards/index.js +27 -251
  44. package/src/testing/AGENTS.md +25 -2
  45. package/src/testing/browser.js +32 -0
  46. package/src/testing/index.d.ts +12 -1
  47. package/src/testing/index.js +3 -3
  48. package/src/testing/parityBrowserRunner.js +9 -2
  49. package/src/testing/parityHarness.js +1 -1
  50. package/templates/provider-access-module/include/space_data_provider_abi.h +227 -0
  51. /package/src/{testing → host}/moduleFlatbufferStreamPump.js +0 -0
@@ -21,9 +21,25 @@ enum StateFlags : uint {
21
21
  HAS_COVARIANCE = 32
22
22
  }
23
23
 
24
+ // Synced to the ratified SDS VCM.propagatorFamily vocabulary (schema/VCM/main.fbs)
25
+ // so any provider self-identifying in PropagatorDescribeSourcesBatchResult uses
26
+ // the SAME family codes SDS already carries — HPOP/Cowell-class numerical
27
+ // integrators map to COWELL (no HPOP-specific code needed); new codes go
28
+ // through Themis's SDS auto-ratification law, never invented here first.
24
29
  enum PropagatorSourceKind : ubyte {
25
- UNKNOWN = 0,
26
- SGP4 = 1
30
+ NONE = 0,
31
+ SEMI_ANALYTICAL = 1,
32
+ VINTI = 2,
33
+ SGP4 = 3,
34
+ COWELL = 4,
35
+ RK4 = 5,
36
+ NYX = 6,
37
+ GMAT = 7,
38
+ SPICE = 8,
39
+ SGP = 9,
40
+ SDP4 = 10,
41
+ SGP8 = 11,
42
+ SDP8 = 12
27
43
  }
28
44
 
29
45
  struct StateVector {
@@ -41,7 +57,7 @@ table PropagatorDescribeSourcesBatchRequest {
41
57
 
42
58
  table PropagatorSourceDescription {
43
59
  sourceHandle:uint = 0;
44
- sourceKind:PropagatorSourceKind = UNKNOWN;
60
+ sourceKind:PropagatorSourceKind = NONE;
45
61
  objectName:string;
46
62
  objectId:string;
47
63
  noradCatId:uint = 0;
package/src/browser.js CHANGED
@@ -16,7 +16,17 @@ export * from "./host/sabHostcallChannel.js";
16
16
  export * from "./host/timerDriver.js";
17
17
  export * from "./flow/index.js";
18
18
  export * from "./compat/index.js";
19
- export * from "./host/isomorphicLoader.js";
20
- export { createBrowserModuleHarness, detectArtifactProfile } from "./testing/browserModuleHarness.js";
21
- export { createWorkerModuleHarness } from "./testing/workerModuleHarness.js";
22
- export { createModuleFlatBufferStreamPump } from "./testing/moduleFlatbufferStreamPump.js";
19
+ // The browser leg of `./host/isomorphic`. NEVER isomorphicLoader.js: that is
20
+ // the Node leg, and a bundler resolves its node:* branches even though a
21
+ // browser can never take them.
22
+ export * from "./host/isomorphicLoaderBrowser.js";
23
+ // Browser module hosts. These are runtime surface and live in src/host/;
24
+ // nothing under src/testing/ is reachable from this entry.
25
+ export {
26
+ createBrowserModuleHarness,
27
+ detectArtifactProfile,
28
+ zeroWasmBytes,
29
+ isSharedArrayBufferLike,
30
+ } from "./host/browserModuleHarness.js";
31
+ export { createWorkerModuleHarness } from "./host/workerModuleHarness.js";
32
+ export { createModuleFlatBufferStreamPump } from "./host/moduleFlatbufferStreamPump.js";
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Artifact byte reduction — runtime surface, not test-harness surface.
3
+ *
4
+ * A published module artifact is `module.wasm` plus an appended publication
5
+ * record collection (MBL bundle: the sds.signature entry, PNM/REC trailers).
6
+ * EVERY runtime that loads a module — browser, native WasmEdge, Docker
7
+ * WasmEdge — must reduce the artifact to the same canonical payload before it
8
+ * reaches a wasm engine, because every engine rejects the trailing bytes
9
+ * ("unknown section code" / "malformed section id"). Same input bytes in,
10
+ * byte-identical payload out, in all three runtimes.
11
+ *
12
+ * That makes this an ARTIFACT concern and it belongs beside signing and
13
+ * verification, on `space-data-module-sdk/bundle`. It previously lived in
14
+ * `src/testing/browserModuleHarness.js`, which forced production delivery code
15
+ * (OrbPro's SDN module decryptor) to import a TEST-harness subpath to get it —
16
+ * the import that dragged the Node harnesses into a browser bundle and blanked
17
+ * all 275 gallery demos (`orbpro-engine-bundle-ships-node-builtins`).
18
+ */
19
+
20
+ import { extractPublicationRecordCollection } from "../transport/records.js";
21
+ import { ModuleSignatureError } from "./signing.js";
22
+
23
+ /**
24
+ * Reduce a module artifact to the bytes a wasm engine can compile.
25
+ *
26
+ * ENC-protected payloads cannot be reduced here — decryption is a host
27
+ * concern, and the caller must decrypt before loading.
28
+ *
29
+ * @param {Uint8Array} bytes - raw artifact bytes
30
+ * @returns {Uint8Array} compilable wasm bytes
31
+ */
32
+ export function toLoadableWasmBytes(bytes) {
33
+ const publication = extractPublicationRecordCollection(bytes);
34
+ if (!publication) {
35
+ return bytes;
36
+ }
37
+ if (publication.enc) {
38
+ throw new ModuleSignatureError(
39
+ "encrypted_artifact",
40
+ "Module artifact payload is ENC-protected; decrypt it before loading.",
41
+ );
42
+ }
43
+ return publication.payloadBytes;
44
+ }
@@ -1,6 +1,7 @@
1
1
  export * from "./constants.js";
2
2
  export * from "./codec.js";
3
3
  export * from "./wasm.js";
4
+ export * from "./artifactBytes.js";
4
5
  export * from "./signing.js";
5
6
  // Re-exported under explicit names rather than `export *`: sigdomain's own
6
7
  // names (`statement`, `domains`, `describe`, `registered`) are deliberately
@@ -160,6 +160,15 @@ function usesPthreadCompileFlags(options = {}) {
160
160
  const MIN_STACK_SIZE_BYTES = 64 * 1024;
161
161
  const MAX_STACK_SIZE_BYTES = 1024 * 1024 * 1024;
162
162
 
163
+ // The wasi-sequential heap contract. 16 MiB initial matches what the previous
164
+ // (Emscripten) sequential artifacts shipped with; the 2 GiB ceiling is the SAME
165
+ // number PTHREAD_FINAL_LINK_FLAGS pins, so the two thread models differ in
166
+ // their threading contract and NOTHING else. wasm-ld defaults the maximum to
167
+ // the computed minimum when neither flag is given, which is what made a
168
+ // sequential guest unable to grow its heap by a single page.
169
+ const SEQUENTIAL_INITIAL_MEMORY_BYTES = 16 * 1024 * 1024;
170
+ const SEQUENTIAL_MAX_MEMORY_BYTES = 2147483648;
171
+
163
172
  function resolveStackSize(stackSize) {
164
173
  if (stackSize === undefined || stackSize === null) {
165
174
  return null;
@@ -193,7 +202,21 @@ function buildCompilerArgs(exportedSymbols, options = {}) {
193
202
  // refuses to instantiate it ("unknown import: env.memory"). Held to that
194
203
  // shape by assertSequentialArtifact.
195
204
  if (options.threadModel === ModuleThreadModel.WASI_SEQUENTIAL) {
196
- const sequentialArgs = ["-O3", "-mbulk-memory"];
205
+ // A sequential guest still needs a HEAP. Without an explicit ceiling the
206
+ // sequential link emitted a memory whose maximum equalled its minimum (18
207
+ // pages for a status node), so the guest could not grow at all and
208
+ // plugin_alloc returned null for the first frame larger than ~1 MiB — while
209
+ // the SAME source on the pthreads profile got a 2 GiB-growable memory.
210
+ // Two thread models must differ in their THREADING contract only; a guest
211
+ // that cannot allocate is not "sequential", it is broken. Same ceiling as
212
+ // PTHREAD_FINAL_LINK_FLAGS' --max-memory, unshared and unimported so the
213
+ // browser needs no cross-origin isolation to load it.
214
+ const sequentialArgs = [
215
+ "-O3",
216
+ "-mbulk-memory",
217
+ `-Wl,--initial-memory=${SEQUENTIAL_INITIAL_MEMORY_BYTES}`,
218
+ `-Wl,--max-memory=${SEQUENTIAL_MAX_MEMORY_BYTES}`,
219
+ ];
197
220
  if (options.noEntry === true) {
198
221
  sequentialArgs.push("-mexec-model=reactor");
199
222
  }
@@ -84,7 +84,7 @@ import {
84
84
  TriggerBindingT,
85
85
  TriggerKind,
86
86
  } from "../generated/orbpro/flow.js";
87
- import { DrainPolicy } from "../generated/orbpro/manifest.js";
87
+ import { DrainPolicy, PluginFamily } from "../generated/orbpro/manifest.js";
88
88
 
89
89
  const RUNTIME_TEMPLATE_PATH = fileURLToPath(
90
90
  new URL("./runtime-src/flow_runtime.cpp", import.meta.url),
@@ -1184,6 +1184,131 @@ export function validateFlowAPIDeclaration(flow, issues) {
1184
1184
  });
1185
1185
  }
1186
1186
 
1187
+ // ---------------------------------------------------------------------------
1188
+ // Family/interface-typed node binding (PLUGGABLE-PROPAGATION LAW, ruling E).
1189
+ //
1190
+ // The exact-pluginId path above is the ONLY binding mode this compiler has
1191
+ // ever had — every propagator reference in every flow.json was a design-time
1192
+ // fixed ID, which is exactly the gap the law's own flow-side contract
1193
+ // ("propagator input ports in composed flows") left unclosed. This adds an
1194
+ // ADDITIVE alternative: a node may declare `pluginFamily` (e.g.
1195
+ // "propagator") instead of `pluginId`, and is bound at CHECK TIME to the one
1196
+ // dependency in that family whose manifest exposes `methodId` — "any
1197
+ // pluginFamily:propagator satisfying method X". Resolution is a
1198
+ // DECLARATION, never an inference: zero or more than one qualifying
1199
+ // candidate is a compile error, never a guess (mirrors the wasi-sequential
1200
+ // thread model's own rule, applied here).
1201
+ //
1202
+ // Ruling C (provider method vocabulary): providers in one family are NOT
1203
+ // required to share a uniform method vocabulary beyond whatever the
1204
+ // binding's own declared `methodId` demands — sgp4 exposes
1205
+ // ingest_omm/upsert_cat/propagate_state/propagate_path/catalog_query, hpop
1206
+ // exposes invoke/ingest_state/propagate_state/prepare_trajectory_segments/
1207
+ // describe_trajectory_segments; a node that asks for "propagator satisfying
1208
+ // propagate_state" resolves against either, a node that asks for
1209
+ // "propagator satisfying catalog_query" resolves only against sgp4-shaped
1210
+ // providers. No vocabulary unification is needed: findMethod() already
1211
+ // enforces this per-candidate, the same check exact-ID binding uses.
1212
+ //
1213
+ // Ruling E (scope): this binds NODE -> PLUGIN only. Edge type contracts
1214
+ // still resolve by concrete SDS type refs (unrelated mechanism), and
1215
+ // requiredPlugins still enumerates concrete plugin ids — once a family
1216
+ // binding resolves, `node.pluginId` is backfilled with the concrete winner
1217
+ // BEFORE any other validation runs, so every downstream stage (edge typing,
1218
+ // manifest capability union, generateFlowTables, buildFlowModuleManifest,
1219
+ // the embedded FlowProgram record itself) sees an ordinary exact-ID node.
1220
+ // This is authoring-time sugar, not a new wire concept: zero ABI/schema
1221
+ // change, zero tri-runtime parity impact — the compiled artifact never
1222
+ // carries the word "pluginFamily".
1223
+ function normalizePluginFamilyName(value) {
1224
+ if (typeof value === "number") {
1225
+ return PluginFamily[value] ?? null;
1226
+ }
1227
+ const trimmed = String(value ?? "").trim();
1228
+ if (!trimmed) return null;
1229
+ const upper = trimmed.toUpperCase().replace(/[\s-]+/g, "_");
1230
+ return upper === "DATASOURCE" ? "DATA_SOURCE" : upper;
1231
+ }
1232
+
1233
+ function resolveNodePluginFamilyBindings({ flow, dependencies, issues }) {
1234
+ const failed = new Set();
1235
+ const nodes = Array.isArray(flow?.nodes) ? flow.nodes : [];
1236
+ nodes.forEach((node, index) => {
1237
+ if (!node || !node.pluginFamily) return;
1238
+ const label = node.nodeId || `flow.nodes[${index}]`;
1239
+ const location = `flow.nodes[${index}].pluginFamily`;
1240
+ if (node.pluginId) {
1241
+ pushIssue(
1242
+ issues,
1243
+ "error",
1244
+ "ambiguous-plugin-binding",
1245
+ `Node "${label}" declares both pluginId and pluginFamily; a node binds by ` +
1246
+ `EXACTLY ONE (declaration, never inference).`,
1247
+ location,
1248
+ );
1249
+ failed.add(node);
1250
+ return;
1251
+ }
1252
+ const requestedFamily = normalizePluginFamilyName(node.pluginFamily);
1253
+ if (!requestedFamily) {
1254
+ pushIssue(
1255
+ issues,
1256
+ "error",
1257
+ "invalid-plugin-family",
1258
+ `Node "${label}" declares an empty or unreadable pluginFamily.`,
1259
+ location,
1260
+ );
1261
+ failed.add(node);
1262
+ return;
1263
+ }
1264
+ if (!node.methodId) {
1265
+ pushIssue(
1266
+ issues,
1267
+ "error",
1268
+ "missing-method-id",
1269
+ `Node "${label}" declares pluginFamily "${node.pluginFamily}" but no methodId to resolve ` +
1270
+ `against (family binding always resolves by "pluginFamily:<X> satisfying method <Y>").`,
1271
+ location,
1272
+ );
1273
+ failed.add(node);
1274
+ return;
1275
+ }
1276
+ const candidates = [...dependencies.values()].filter(
1277
+ (dependency) =>
1278
+ normalizePluginFamilyName(dependency.normalized?.pluginFamily) === requestedFamily &&
1279
+ findMethod(dependency.normalized, node.methodId),
1280
+ );
1281
+ if (candidates.length === 0) {
1282
+ pushIssue(
1283
+ issues,
1284
+ "error",
1285
+ "unresolvable-plugin-family",
1286
+ `Node "${label}" requests pluginFamily "${node.pluginFamily}" satisfying method ` +
1287
+ `"${node.methodId}", but no resolvable dependency in that family exposes it.`,
1288
+ location,
1289
+ );
1290
+ failed.add(node);
1291
+ return;
1292
+ }
1293
+ if (candidates.length > 1) {
1294
+ pushIssue(
1295
+ issues,
1296
+ "error",
1297
+ "ambiguous-plugin-family",
1298
+ `Node "${label}" requests pluginFamily "${node.pluginFamily}" satisfying method ` +
1299
+ `"${node.methodId}", but ${candidates.length} dependencies qualify (` +
1300
+ `${candidates.map((c) => c.pluginId).sort().join(", ")}); disambiguate with an exact pluginId.`,
1301
+ location,
1302
+ );
1303
+ failed.add(node);
1304
+ return;
1305
+ }
1306
+ node.pluginId = candidates[0].pluginId;
1307
+ node.resolvedFromPluginFamily = requestedFamily;
1308
+ });
1309
+ return failed;
1310
+ }
1311
+
1187
1312
  /**
1188
1313
  * Validate a flow document against its dependency manifests. Returns
1189
1314
  * { ok, issues, capabilities, nodes } where `capabilities` is the computed
@@ -1192,6 +1317,11 @@ export function validateFlowAPIDeclaration(flow, issues) {
1192
1317
  */
1193
1318
  export function checkFlowProgram({ flow, dependencies = new Map() } = {}) {
1194
1319
  const issues = [];
1320
+ const familyResolutionFailed = resolveNodePluginFamilyBindings({
1321
+ flow,
1322
+ dependencies,
1323
+ issues,
1324
+ });
1195
1325
  const nodes = Array.isArray(flow?.nodes) ? flow.nodes : [];
1196
1326
  const edges = Array.isArray(flow?.edges) ? flow.edges : [];
1197
1327
  const triggers = Array.isArray(flow?.triggers) ? flow.triggers : [];
@@ -1270,7 +1400,11 @@ export function checkFlowProgram({ flow, dependencies = new Map() } = {}) {
1270
1400
  location,
1271
1401
  );
1272
1402
  }
1273
- } else if (!isHostModelNode(node)) {
1403
+ } else if (!isHostModelNode(node) && !familyResolutionFailed.has(node)) {
1404
+ // A node in familyResolutionFailed already has its own precise error
1405
+ // (ambiguous/unresolvable/invalid pluginFamily) from
1406
+ // resolveNodePluginFamilyBindings above; "references plugin undefined"
1407
+ // here would just be a confusing echo of that same failure.
1274
1408
  pushIssue(
1275
1409
  issues,
1276
1410
  "error",
@@ -1655,6 +1789,9 @@ export function checkFlowProgram({ flow, dependencies = new Map() } = {}) {
1655
1789
  pluginId: entry.node.pluginId,
1656
1790
  methodId: entry.node.methodId,
1657
1791
  dispatchModel: entry.dispatchModel,
1792
+ // Present only for nodes bound via the additive pluginFamily path;
1793
+ // absent (undefined) for ordinary exact-pluginId nodes.
1794
+ resolvedFromPluginFamily: entry.node.resolvedFromPluginFamily ?? null,
1658
1795
  })),
1659
1796
  };
1660
1797
  }
@@ -2897,4 +3034,6 @@ export const __testables = {
2897
3034
  // SHARED statement-domain vectors directly, instead of inferring it from a
2898
3035
  // full compile that fails for a dozen later reasons.
2899
3036
  verifyIsomorphicNodeArtifacts,
3037
+ normalizePluginFamilyName,
3038
+ resolveNodePluginFamilyBindings,
2900
3039
  };
@@ -202,7 +202,13 @@ export async function createFlowRuntimeHost(options = {}) {
202
202
  const bytes = stripPublicationTrailer(
203
203
  source instanceof Uint8Array ? source : new Uint8Array(source),
204
204
  );
205
- wasmModule = await WebAssembly.compile(bytes.slice().buffer);
205
+ // Plaintext hygiene: `bytes` is a VIEW over the caller's own buffer
206
+ // (stripPublicationTrailer only ever narrows via subarray(), never
207
+ // copies), so it is never this function's buffer to zero — and
208
+ // WebAssembly.compile accepts a BufferSource view directly, so a
209
+ // defensive `.slice().buffer` copy here would only add an extra
210
+ // plaintext buffer that nothing zeroes. Compile from the view; no copy.
211
+ wasmModule = await WebAssembly.compile(bytes);
206
212
  }
207
213
 
208
214
  const wasi = createBrowserWasiShim({
@@ -5,7 +5,7 @@ import {
5
5
  } from "../bundle/signing.js";
6
6
  import { getWasmCustomSections } from "../bundle/wasm.js";
7
7
  import { decodePlgManifest } from "../manifest/plgCodec.js";
8
- import { createBrowserModuleHarness } from "../testing/browserModuleHarness.js";
8
+ import { createBrowserModuleHarness } from "../host/browserModuleHarness.js";
9
9
  import { extractPublicationRecordCollection } from "../transport/records.js";
10
10
  import { sha256Bytes } from "../utils/crypto.js";
11
11
  import { bytesToHex } from "../utils/encoding.js";
@@ -1,10 +1,15 @@
1
1
  import { DrainPolicy } from "./constants.js";
2
+ // Import the type-ref helpers from their own module, NOT from the manifest
3
+ // barrel: `manifest/index.js` re-exports the build-time embedded-manifest
4
+ // writers, which pull `node:fs`/`node:path`. A relative import bypasses the
5
+ // package's `browser` export condition, so the barrel would drag Node builtins
6
+ // into every browser bundle that reaches the flow runtime host.
2
7
  import {
3
8
  clonePayloadTypeRef,
4
9
  normalizePayloadWireFormatName,
5
10
  payloadTypeRefsMatch,
6
11
  selectPreferredPayloadTypeRef,
7
- } from "../../../manifest/index.js";
12
+ } from "../../../manifest/typeRefs.js";
8
13
  import { normalizeFrame, normalizeManifest } from "./normalize.js";
9
14
 
10
15
  const INTERNAL_ALIGNED_BINARY_EXCEPTION_INTERFACE_KINDS = new Set([
@@ -29,7 +29,7 @@ class PropagatorSourceDescription {
29
29
  }
30
30
  sourceKind() {
31
31
  const offset = this.bb.__offset(this.bb_pos, 6);
32
- return offset ? this.bb.readUint8(this.bb_pos + offset) : PropagatorSourceKind.UNKNOWN;
32
+ return offset ? this.bb.readUint8(this.bb_pos + offset) : PropagatorSourceKind.NONE;
33
33
  }
34
34
  objectName(optionalEncoding) {
35
35
  const offset = this.bb.__offset(this.bb_pos, 8);
@@ -114,7 +114,7 @@ class PropagatorSourceDescription {
114
114
  builder.addFieldInt32(0, sourceHandle, 0);
115
115
  }
116
116
  static addSourceKind(builder, sourceKind) {
117
- builder.addFieldInt8(1, sourceKind, PropagatorSourceKind.UNKNOWN);
117
+ builder.addFieldInt8(1, sourceKind, PropagatorSourceKind.NONE);
118
118
  }
119
119
  static addObjectName(builder, objectNameOffset) {
120
120
  builder.addFieldOffset(2, objectNameOffset, 0);
@@ -32,7 +32,7 @@ sourceHandle():number {
32
32
 
33
33
  sourceKind():PropagatorSourceKind {
34
34
  const offset = this.bb!.__offset(this.bb_pos, 6);
35
- return offset ? this.bb!.readUint8(this.bb_pos + offset) : PropagatorSourceKind.UNKNOWN;
35
+ return offset ? this.bb!.readUint8(this.bb_pos + offset) : PropagatorSourceKind.NONE;
36
36
  }
37
37
 
38
38
  objectName():string|null
@@ -145,7 +145,7 @@ static addSourceHandle(builder:flatbuffers.Builder, sourceHandle:number) {
145
145
  }
146
146
 
147
147
  static addSourceKind(builder:flatbuffers.Builder, sourceKind:PropagatorSourceKind) {
148
- builder.addFieldInt8(1, sourceKind, PropagatorSourceKind.UNKNOWN);
148
+ builder.addFieldInt8(1, sourceKind, PropagatorSourceKind.NONE);
149
149
  }
150
150
 
151
151
  static addObjectName(builder:flatbuffers.Builder, objectNameOffset:flatbuffers.Offset) {
@@ -1,6 +1,17 @@
1
1
  var PropagatorSourceKind = /* @__PURE__ */ ((PropagatorSourceKind2) => {
2
- PropagatorSourceKind2[PropagatorSourceKind2["UNKNOWN"] = 0] = "UNKNOWN";
3
- PropagatorSourceKind2[PropagatorSourceKind2["SGP4"] = 1] = "SGP4";
2
+ PropagatorSourceKind2[PropagatorSourceKind2["NONE"] = 0] = "NONE";
3
+ PropagatorSourceKind2[PropagatorSourceKind2["SEMI_ANALYTICAL"] = 1] = "SEMI_ANALYTICAL";
4
+ PropagatorSourceKind2[PropagatorSourceKind2["VINTI"] = 2] = "VINTI";
5
+ PropagatorSourceKind2[PropagatorSourceKind2["SGP4"] = 3] = "SGP4";
6
+ PropagatorSourceKind2[PropagatorSourceKind2["COWELL"] = 4] = "COWELL";
7
+ PropagatorSourceKind2[PropagatorSourceKind2["RK4"] = 5] = "RK4";
8
+ PropagatorSourceKind2[PropagatorSourceKind2["NYX"] = 6] = "NYX";
9
+ PropagatorSourceKind2[PropagatorSourceKind2["GMAT"] = 7] = "GMAT";
10
+ PropagatorSourceKind2[PropagatorSourceKind2["SPICE"] = 8] = "SPICE";
11
+ PropagatorSourceKind2[PropagatorSourceKind2["SGP"] = 9] = "SGP";
12
+ PropagatorSourceKind2[PropagatorSourceKind2["SDP4"] = 10] = "SDP4";
13
+ PropagatorSourceKind2[PropagatorSourceKind2["SGP8"] = 11] = "SGP8";
14
+ PropagatorSourceKind2[PropagatorSourceKind2["SDP8"] = 12] = "SDP8";
4
15
  return PropagatorSourceKind2;
5
16
  })(PropagatorSourceKind || {});
6
17
  export {
@@ -3,6 +3,17 @@
3
3
  /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
4
4
 
5
5
  export enum PropagatorSourceKind {
6
- UNKNOWN = 0,
7
- SGP4 = 1
6
+ NONE = 0,
7
+ SEMI_ANALYTICAL = 1,
8
+ VINTI = 2,
9
+ SGP4 = 3,
10
+ COWELL = 4,
11
+ RK4 = 5,
12
+ NYX = 6,
13
+ GMAT = 7,
14
+ SPICE = 8,
15
+ SGP = 9,
16
+ SDP4 = 10,
17
+ SGP8 = 11,
18
+ SDP8 = 12
8
19
  }
@@ -77,6 +77,23 @@ export declare enum pluginCategory {
77
77
  /**
78
78
  * Basilisk astrodynamics simulation module
79
79
  */
80
- Basilisk = 18
80
+ Basilisk = 18,
81
+ /**
82
+ * Maneuver planning, targeting and trajectory optimization
83
+ */
84
+ Maneuver = 19,
85
+ /**
86
+ * A composed flow published as a single loadable module. The unit is a
87
+ * graph of other modules, not a leaf algorithm.
88
+ */
89
+ Flow = 20,
90
+ /**
91
+ * No family stated. Sits at the end of the enum rather than at 0 because
92
+ * this enum is append-only and `Sensor` already holds 0; it exists so a
93
+ * record can distinguish "the provider did not say" from "Sensor". A
94
+ * consumer MUST render an `Unspecified` module as ungrouped, never as a
95
+ * member of any family.
96
+ */
97
+ Unspecified = 21
81
98
  }
82
99
  //# sourceMappingURL=pluginCategory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pluginCategory.d.ts","sourceRoot":"","sources":["../../../ts/PLG/pluginCategory.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,oBAAY,cAAc;IACxB;;OAEG;IACH,MAAM,IAAI;IAEV;;OAEG;IACH,UAAU,IAAI;IAEd;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,UAAU,IAAI;IAEd;;OAEG;IACH,EAAE,IAAI;IAEN;;OAEG;IACH,KAAK,IAAI;IAET;;OAEG;IACH,OAAO,IAAI;IAEX;;OAEG;IACH,MAAM,IAAI;IAEV;;OAEG;IACH,MAAM,IAAI;IAEV;;OAEG;IACH,SAAS,KAAK;IAEd;;OAEG;IACH,YAAY,KAAK;IAEjB;;OAEG;IACH,QAAQ,KAAK;IAEb;;OAEG;IACH,UAAU,KAAK;IAEf;;OAEG;IACH,cAAc,KAAK;IAEnB;;OAEG;IACH,SAAS,KAAK;IAEd;;OAEG;IACH,UAAU,KAAK;IAEf;;OAEG;IACH,SAAS,KAAK;IAEd;;OAEG;IACH,QAAQ,KAAK;CACd"}
1
+ {"version":3,"file":"pluginCategory.d.ts","sourceRoot":"","sources":["../../../ts/PLG/pluginCategory.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,oBAAY,cAAc;IACxB;;OAEG;IACH,MAAM,IAAI;IAEV;;OAEG;IACH,UAAU,IAAI;IAEd;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,UAAU,IAAI;IAEd;;OAEG;IACH,EAAE,IAAI;IAEN;;OAEG;IACH,KAAK,IAAI;IAET;;OAEG;IACH,OAAO,IAAI;IAEX;;OAEG;IACH,MAAM,IAAI;IAEV;;OAEG;IACH,MAAM,IAAI;IAEV;;OAEG;IACH,SAAS,KAAK;IAEd;;OAEG;IACH,YAAY,KAAK;IAEjB;;OAEG;IACH,QAAQ,KAAK;IAEb;;OAEG;IACH,UAAU,KAAK;IAEf;;OAEG;IACH,cAAc,KAAK;IAEnB;;OAEG;IACH,SAAS,KAAK;IAEd;;OAEG;IACH,UAAU,KAAK;IAEf;;OAEG;IACH,SAAS,KAAK;IAEd;;OAEG;IACH,QAAQ,KAAK;IAEb;;OAEG;IACH,QAAQ,KAAK;IAEb;;;OAGG;IACH,IAAI,KAAK;IAET;;;;;;OAMG;IACH,WAAW,KAAK;CACjB"}
@@ -81,4 +81,21 @@ export var pluginCategory;
81
81
  * Basilisk astrodynamics simulation module
82
82
  */
83
83
  pluginCategory[pluginCategory["Basilisk"] = 18] = "Basilisk";
84
+ /**
85
+ * Maneuver planning, targeting and trajectory optimization
86
+ */
87
+ pluginCategory[pluginCategory["Maneuver"] = 19] = "Maneuver";
88
+ /**
89
+ * A composed flow published as a single loadable module. The unit is a
90
+ * graph of other modules, not a leaf algorithm.
91
+ */
92
+ pluginCategory[pluginCategory["Flow"] = 20] = "Flow";
93
+ /**
94
+ * No family stated. Sits at the end of the enum rather than at 0 because
95
+ * this enum is append-only and `Sensor` already holds 0; it exists so a
96
+ * record can distinguish "the provider did not say" from "Sensor". A
97
+ * consumer MUST render an `Unspecified` module as ungrouped, never as a
98
+ * member of any family.
99
+ */
100
+ pluginCategory[pluginCategory["Unspecified"] = 21] = "Unspecified";
84
101
  })(pluginCategory || (pluginCategory = {}));
@@ -99,5 +99,25 @@ export enum pluginCategory {
99
99
  /**
100
100
  * Basilisk astrodynamics simulation module
101
101
  */
102
- Basilisk = 18
102
+ Basilisk = 18,
103
+
104
+ /**
105
+ * Maneuver planning, targeting and trajectory optimization
106
+ */
107
+ Maneuver = 19,
108
+
109
+ /**
110
+ * A composed flow published as a single loadable module. The unit is a
111
+ * graph of other modules, not a leaf algorithm.
112
+ */
113
+ Flow = 20,
114
+
115
+ /**
116
+ * No family stated. Sits at the end of the enum rather than at 0 because
117
+ * this enum is append-only and `Sensor` already holds 0; it exists so a
118
+ * record can distinguish "the provider did not say" from "Sensor". A
119
+ * consumer MUST render an `Unspecified` module as ungrouped, never as a
120
+ * member of any family.
121
+ */
122
+ Unspecified = 21
103
123
  }