space-data-module-sdk 0.8.14 → 0.8.16
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.
- package/bin/space-data-module.js +91 -0
- package/docs/_shell/consumer-assets.html +5 -0
- package/docs/browser-wasmedge-isomorphic.html +261 -0
- package/docs/byo-wasm-quickstart.html +226 -0
- package/docs/byo-wasm-quickstart.md +204 -0
- package/docs/conformance.html +156 -0
- package/docs/conformance.md +92 -0
- package/docs/emception-shared-memory-verdict.md +209 -0
- package/docs/events-abi.html +313 -0
- package/docs/events-abi.md +530 -0
- package/docs/families/analytics.html +178 -0
- package/docs/families/analytics.md +104 -0
- package/docs/families/attitude.html +157 -0
- package/docs/families/attitude.md +36 -0
- package/docs/families/behavior.html +157 -0
- package/docs/families/behavior.md +36 -0
- package/docs/families/breakup.html +157 -0
- package/docs/families/breakup.md +36 -0
- package/docs/families/conjunction.html +186 -0
- package/docs/families/conjunction.md +121 -0
- package/docs/families/data-source.html +318 -0
- package/docs/families/effects.html +157 -0
- package/docs/families/effects.md +36 -0
- package/docs/families/environment.html +170 -0
- package/docs/families/environment.md +73 -0
- package/docs/families/estimation.html +190 -0
- package/docs/families/estimation.md +128 -0
- package/docs/families/gnc.html +157 -0
- package/docs/families/gnc.md +36 -0
- package/docs/families/maneuver.html +209 -0
- package/docs/families/maneuver.md +206 -0
- package/docs/families/obstruction.html +191 -0
- package/docs/families/obstruction.md +96 -0
- package/docs/families/propagator.html +333 -0
- package/docs/families/propulsion.html +157 -0
- package/docs/families/propulsion.md +36 -0
- package/docs/families/reentry.html +157 -0
- package/docs/families/reentry.md +36 -0
- package/docs/families/rf.html +193 -0
- package/docs/families/rf.md +136 -0
- package/docs/families/scheduler.html +157 -0
- package/docs/families/scheduler.md +36 -0
- package/docs/families/sensor.html +157 -0
- package/docs/families/sensor.md +36 -0
- package/docs/families/signature.html +157 -0
- package/docs/families/signature.md +36 -0
- package/docs/flatsql-host-contract.html +176 -0
- package/docs/flatsql-streaming-standard.html +375 -0
- package/docs/gpu-module-abi.html +233 -0
- package/docs/harness-family-matrix.md +135 -0
- package/docs/index.html +216 -85
- package/docs/isomorphic-pthreads.html +228 -0
- package/docs/isomorphic-pthreads.md +84 -0
- package/docs/isomorphic-sdn-runtime-plan.html +274 -0
- package/docs/language-runtime-matrix.html +182 -0
- package/docs/llms.txt +86 -0
- package/docs/module-bundle-runtime-plan.html +146 -0
- package/docs/module-publication-standard.html +503 -0
- package/docs/node-red-default-node-parity.html +201 -0
- package/docs/propagator-abi.md +73 -21
- package/docs/protect-and-sign.html +181 -0
- package/docs/protect-and-sign.md +120 -0
- package/docs/protocol-installation.html +296 -0
- package/docs/publication-submission.html +158 -0
- package/docs/publication-submission.md +78 -0
- package/docs/secrets-capability.html +206 -0
- package/docs/styles.css +860 -167
- package/docs/testing-harness.html +408 -0
- package/docs/tri-runtime-parity-gate.html +182 -0
- package/docs/tri-runtime-parity.html +203 -0
- package/include/orbpro/orbpro_event_runner.h +951 -0
- package/include/orbpro/orbpro_events_abi.h +565 -0
- package/include/orbpro/orbpro_propagator_abi.h +17 -0
- package/package.json +15 -5
- package/schemas/orbpro/Events.fbs +501 -0
- package/schemas/orbpro/Propagator.fbs +72 -9
- package/schemas/orbpro/reference-frame-crosswalk.json +108 -0
- package/schemas/orbpro/reference-frame.lock.json +98 -0
- package/src/browser.js +13 -0
- package/src/conformance/abiDriver.js +225 -0
- package/src/conformance/index.js +151 -0
- package/src/conformance/propagatorSuite.js +526 -0
- package/src/conformance/selfTest.js +275 -0
- package/src/conformance/selfTestCorpus.js +68 -0
- package/src/conformance/twoBodyReference.js +132 -0
- package/src/generated/orbpro/events-abi.js +206 -0
- package/src/generated/orbpro/events-abi.ts +319 -0
- package/src/generated/orbpro/propagator/reference-frame.js +17 -0
- package/src/generated/orbpro/propagator/reference-frame.ts +91 -1
- package/src/generated/orbpro/propagator-abi.js +17 -0
- package/src/generated/orbpro/propagator-abi.ts +17 -0
- package/src/generated/spacedatastandards/plg/CCT.d.ts +94 -0
- package/src/generated/spacedatastandards/plg/CCT.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/CCT.js +208 -0
- package/src/generated/spacedatastandards/plg/CCT.ts +281 -0
- package/src/generated/spacedatastandards/plg/CCTCategory.d.ts +98 -0
- package/src/generated/spacedatastandards/plg/CCTCategory.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/CCTCategory.js +177 -0
- package/src/generated/spacedatastandards/plg/CCTCategory.ts +269 -0
- package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts +54 -0
- package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/CCTCategoryRollup.js +106 -0
- package/src/generated/spacedatastandards/plg/CCTCategoryRollup.ts +144 -0
- package/src/generated/spacedatastandards/plg/PLG.d.ts +46 -2
- package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -1
- package/src/generated/spacedatastandards/plg/PLG.js +78 -5
- package/src/generated/spacedatastandards/plg/PLG.ts +90 -5
- package/src/generated/spacedatastandards/plg/capabilityClass.d.ts +181 -0
- package/src/generated/spacedatastandards/plg/capabilityClass.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/capabilityClass.js +183 -0
- package/src/generated/spacedatastandards/plg/capabilityClass.ts +208 -0
- package/src/generated/spacedatastandards/plg/main.d.ts +4 -0
- package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -1
- package/src/generated/spacedatastandards/plg/main.js +4 -0
- package/src/generated/spacedatastandards/plg/main.ts +4 -0
- package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +40 -2
- package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
- package/src/generated/spacedatastandards/plg/pluginCategory.js +40 -2
- package/src/generated/spacedatastandards/plg/pluginCategory.ts +40 -2
- package/src/host/browserModuleHarness.js +8 -0
- package/src/host/wasiThreadHost.js +189 -14
- package/src/index.d.ts +18 -1
- package/src/testing/isomorphicHarness.js +233 -0
- package/src/transport/index.js +16 -0
- package/src/transport/records.js +1015 -3
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Protect and sign
|
|
2
|
+
|
|
3
|
+
Once a module passes conformance and the parity gate, it is protected
|
|
4
|
+
(optionally encrypted, with its manifest attached), signed, and verified. All
|
|
5
|
+
three verbs are implemented today in `space-data-module`.
|
|
6
|
+
|
|
7
|
+
## Artifact layout
|
|
8
|
+
|
|
9
|
+
A protected, published artifact is a single file:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
protected-payload-bytes || REC-flatbuffer-bytes || uint32le(REC length) || "$REC"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The trailer is appended after the payload, so a consumer reads the last four
|
|
16
|
+
bytes for the `$REC` magic, then the preceding little-endian `uint32` length,
|
|
17
|
+
then the record. The record types themselves (`REC`, `MBL`, `PNM`, `ENC`) are
|
|
18
|
+
Space Data Standards messages; this SDK consumes the generated classes, it does
|
|
19
|
+
not define them. See the
|
|
20
|
+
[module publication standard](module-publication-standard.html).
|
|
21
|
+
|
|
22
|
+
## Protect
|
|
23
|
+
|
|
24
|
+
`protect` attaches the manifest to the artifact and, when a recipient key is
|
|
25
|
+
supplied, encrypts the payload for that recipient.
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
space-data-module protect \
|
|
29
|
+
--manifest ./manifest.json \
|
|
30
|
+
--wasm ./dist/module.wasm \
|
|
31
|
+
--json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
# encrypted for a specific recipient
|
|
36
|
+
space-data-module protect \
|
|
37
|
+
--manifest ./manifest.json \
|
|
38
|
+
--wasm ./dist/module.wasm \
|
|
39
|
+
--recipient-public-key <hex> \
|
|
40
|
+
--out ./dist/module.wasm.enc
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
# single-file bundle
|
|
45
|
+
space-data-module protect \
|
|
46
|
+
--manifest ./manifest.json \
|
|
47
|
+
--wasm ./dist/module.wasm \
|
|
48
|
+
--single-file-bundle \
|
|
49
|
+
--out ./dist/module.bundle.wasm
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
| Flag | Required | Meaning |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| `--manifest <path>` | yes | Module manifest JSON |
|
|
55
|
+
| `--wasm <path>` | yes | The compiled artifact |
|
|
56
|
+
| `--recipient-public-key <hex>` | no | Encrypt the payload for this recipient |
|
|
57
|
+
| `--mnemonic <words>` | no | Key material for the protecting identity |
|
|
58
|
+
| `--single-file-bundle` | no | Emit one self-contained bundle artifact |
|
|
59
|
+
| `--out <path>` | no | Output path; otherwise reported on stdout |
|
|
60
|
+
| `--json` | no | Machine-readable result |
|
|
61
|
+
|
|
62
|
+
Non-JSON output reports `artifactId`, `signingPublicKeyHex`, `encrypted`,
|
|
63
|
+
`wasmBase64Length`, and `protectedArtifactBytes`.
|
|
64
|
+
|
|
65
|
+
## Sign
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
space-data-module sign \
|
|
69
|
+
--wasm ./dist/module.wasm \
|
|
70
|
+
--key ./keys/module-signing-keypair.json \
|
|
71
|
+
--out ./dist/module.signed.wasm
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
| Flag | Required | Meaning |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| `--wasm <path>` | yes | Artifact to sign |
|
|
77
|
+
| `--key <path>` | yes | Keypair JSON; must contain `privateKeySeedHex` |
|
|
78
|
+
| `--out <path>` | no | Output path; otherwise the input is signed in place |
|
|
79
|
+
|
|
80
|
+
The key file must carry `privateKeySeedHex` or the command refuses. Output
|
|
81
|
+
reports `signed`, `keyId`, `publicKeyHex`, and `canonicalModuleHashHex` — the
|
|
82
|
+
canonical hash is what a verifier recomputes, so it is stable across the
|
|
83
|
+
appended trailer.
|
|
84
|
+
|
|
85
|
+
## Verify
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
space-data-module verify \
|
|
89
|
+
--wasm ./dist/module.wasm \
|
|
90
|
+
--trusted <pubKeyHex>[,<pubKeyHex>...] \
|
|
91
|
+
--require-signature
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
space-data-module verify \
|
|
96
|
+
--wasm ./dist/module.wasm \
|
|
97
|
+
--key ./keys/module-signing-keypair.json
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`--trusted` takes a comma-separated list of trusted public keys; `--key` reads
|
|
101
|
+
`publicKeyHex` out of a keypair JSON instead. Signature requirement defaults to
|
|
102
|
+
true. Output reports `verified`, `signed`, `keyId`, `publicKeyHex`, and the
|
|
103
|
+
process exits non-zero unless verification succeeded.
|
|
104
|
+
|
|
105
|
+
## Key custody
|
|
106
|
+
|
|
107
|
+
Signing keys are HD-derived from a node's root identity by default; supplying an
|
|
108
|
+
external key is an explicit opt-in. Never commit a private key or a mnemonic to
|
|
109
|
+
a repository, and never paste one into a build log. The dev keypairs that appear
|
|
110
|
+
in the SDK's own test fixtures are test material and are not valid for a
|
|
111
|
+
published module.
|
|
112
|
+
|
|
113
|
+
## Honest gaps
|
|
114
|
+
|
|
115
|
+
- There is no `license` CLI verb. A `src/licensing/` module exists in the tree
|
|
116
|
+
and is used programmatically, but it is not wired to a `space-data-module`
|
|
117
|
+
subcommand.
|
|
118
|
+
- `protect`, `sign` and `verify` are artifact-level primitives. There is no
|
|
119
|
+
single end-to-end "release this module" command; see
|
|
120
|
+
[Publication and listing](publication-submission.html).
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<meta name="description" content="This SDK now separates protocol identity from deployment-time routing." />
|
|
7
|
+
<title>Protocol installation — Space Data Module SDK</title>
|
|
8
|
+
<link rel="stylesheet" href="./styles.css" />
|
|
9
|
+
<!-- SDN_CONSUMER_ASSETS_START -->
|
|
10
|
+
<link rel="stylesheet" href="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" crossorigin="anonymous">
|
|
11
|
+
<script defer src="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" crossorigin="anonymous" data-sdn-wallet-public-client="v1"></script>
|
|
12
|
+
<script defer src="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.52fde607eee38ffa116188201f50258ed50bd18c9f06c1af9678f763147a8fe5.js" integrity="sha384-dgeojhJ8vTszHXIbv7O7nZcEzqD10oUYYJjBmPrV7+kLQEUlXLQD4ek5Q7HOFiO5" crossorigin="anonymous" data-nav-style-url="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.36a36359ce18322185e9ff179f88175bab67d5ad84a14d9c08a54f2ff27267e7.css" data-nav-style-integrity="sha384-c4M8Fg+kYaeOYYtJVr7jJsde24IhSWkWaRyAOHEZU9jozhRck089aw+mnHwxymds" data-wallet-client-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" data-wallet-client-integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" data-wallet-style-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" data-wallet-style-integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" data-wallet-client-id="sdn-module-sdk-pages-v1" data-wallet-callback-uri="https://digitalarsenal.github.io/space-data-module-sdk/wallet-callback.html" data-wallet-registry-sha256="e1ce6fe903c9700484a8a87d96581c8cad97063dabf63030b4518a31a3bdaa93"></script>
|
|
13
|
+
<!-- SDN_CONSUMER_ASSETS_END -->
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<a class="skip-link" href="#main">Skip to content</a>
|
|
17
|
+
<sdn-stack-nav active="module-sdk"></sdn-stack-nav>
|
|
18
|
+
<header class="site-header">
|
|
19
|
+
<a class="site-brand" href="./">Space Data Module SDK</a>
|
|
20
|
+
<nav class="header-links" aria-label="Site">
|
|
21
|
+
<a href="./byo-wasm-quickstart.html">Quickstart</a>
|
|
22
|
+
<a href="./conformance.html">Conformance</a>
|
|
23
|
+
<a href="https://github.com/DigitalArsenal/space-data-module-sdk">GitHub</a>
|
|
24
|
+
<a class="stack-button" href="#stack">Stack</a>
|
|
25
|
+
</nav>
|
|
26
|
+
</header>
|
|
27
|
+
<div class="shell">
|
|
28
|
+
<nav class="sidebar" id="sidebar" aria-label="Documentation">
|
|
29
|
+
<h2>Start here</h2><ul>
|
|
30
|
+
<li><a href="./index.html"><span>Harness family matrix</span></a></li>
|
|
31
|
+
<li><a href="./byo-wasm-quickstart.html"><span>BYO-wasm quickstart</span></a></li>
|
|
32
|
+
<li><a href="./conformance.html"><span>Conformance kit</span></a></li>
|
|
33
|
+
<li><a href="./protect-and-sign.html"><span>Protect and sign</span></a></li>
|
|
34
|
+
<li><a href="./publication-submission.html"><span>Publication and listing</span></a></li>
|
|
35
|
+
</ul>
|
|
36
|
+
<h2>Dynamics</h2><ul>
|
|
37
|
+
<li><a href="./families/propagator.html"><span>Propagator</span><span class="tag tag-shipped">shipped</span></a></li>
|
|
38
|
+
<li><a href="./families/maneuver.html"><span>Maneuver</span><span class="tag tag-experimental">experimental</span></a></li>
|
|
39
|
+
<li><a href="./families/propulsion.html"><span>Propulsion</span><span class="tag tag-planned">planned</span></a></li>
|
|
40
|
+
<li><a href="./families/attitude.html"><span>Attitude</span><span class="tag tag-planned">planned</span></a></li>
|
|
41
|
+
<li><a href="./families/gnc.html"><span>GNC</span><span class="tag tag-planned">planned</span></a></li>
|
|
42
|
+
</ul>
|
|
43
|
+
<h2>Environment and interaction</h2><ul>
|
|
44
|
+
<li><a href="./families/rf.html"><span>RF</span><span class="tag tag-designed">designed</span></a></li>
|
|
45
|
+
<li><a href="./families/sensor.html"><span>Sensor</span><span class="tag tag-planned">planned</span></a></li>
|
|
46
|
+
<li><a href="./families/signature.html"><span>Signature</span><span class="tag tag-planned">planned</span></a></li>
|
|
47
|
+
<li><a href="./families/environment.html"><span>Environment</span><span class="tag tag-planned">planned</span></a></li>
|
|
48
|
+
<li><a href="./families/obstruction.html"><span>Obstruction</span><span class="tag tag-designed">designed</span></a></li>
|
|
49
|
+
</ul>
|
|
50
|
+
<h2>Event physics</h2><ul>
|
|
51
|
+
<li><a href="./families/breakup.html"><span>Breakup</span><span class="tag tag-planned">planned</span></a></li>
|
|
52
|
+
<li><a href="./families/reentry.html"><span>Reentry</span><span class="tag tag-planned">planned</span></a></li>
|
|
53
|
+
<li><a href="./families/conjunction.html"><span>Conjunction</span><span class="tag tag-designed">designed</span></a></li>
|
|
54
|
+
<li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
|
|
55
|
+
</ul>
|
|
56
|
+
<h2>Estimation, data and logic</h2><ul>
|
|
57
|
+
<li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
|
|
58
|
+
<li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
|
|
59
|
+
<li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
|
|
60
|
+
<li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
|
|
61
|
+
<li><a href="./families/behavior.html"><span>Behavior</span><span class="tag tag-planned">planned</span></a></li>
|
|
62
|
+
</ul>
|
|
63
|
+
<h2>Runtime contract</h2><ul>
|
|
64
|
+
<li><a href="./events-abi.html"><span>Event locator ABI</span></a></li>
|
|
65
|
+
<li><a href="./module-publication-standard.html"><span>Module publication standard</span></a></li>
|
|
66
|
+
<li><a href="./browser-wasmedge-isomorphic.html"><span>Browser / WasmEdge isomorphism</span></a></li>
|
|
67
|
+
<li><a href="./isomorphic-pthreads.html"><span>Isomorphic pthreads</span></a></li>
|
|
68
|
+
<li><a href="./tri-runtime-parity.html"><span>Tri-runtime parity</span></a></li>
|
|
69
|
+
<li><a href="./tri-runtime-parity-gate.html"><span>Tri-runtime parity gate</span></a></li>
|
|
70
|
+
<li><a href="./testing-harness.html"><span>Testing harness</span></a></li>
|
|
71
|
+
<li><a href="./language-runtime-matrix.html"><span>Language and runtime matrix</span></a></li>
|
|
72
|
+
</ul>
|
|
73
|
+
<h2>Host surfaces</h2><ul>
|
|
74
|
+
<li><a href="./flatsql-host-contract.html"><span>FlatSQL host contract</span></a></li>
|
|
75
|
+
<li><a href="./flatsql-streaming-standard.html"><span>FlatSQL streaming standard</span></a></li>
|
|
76
|
+
<li><a href="./secrets-capability.html"><span>Credential lanes</span></a></li>
|
|
77
|
+
<li><a href="./protocol-installation.html" aria-current="page"><span>Protocol installation</span></a></li>
|
|
78
|
+
<li><a href="./gpu-module-abi.html"><span>GPU module ABI</span></a></li>
|
|
79
|
+
<li><a href="./module-bundle-runtime-plan.html"><span>Module bundle runtime</span></a></li>
|
|
80
|
+
<li><a href="./isomorphic-sdn-runtime-plan.html"><span>Isomorphic SDN runtime</span></a></li>
|
|
81
|
+
<li><a href="./node-red-default-node-parity.html"><span>Node-RED node parity</span></a></li>
|
|
82
|
+
</ul>
|
|
83
|
+
</nav>
|
|
84
|
+
<main class="doc" id="main">
|
|
85
|
+
<h1>Protocol installation</h1>
|
|
86
|
+
<p>This SDK now separates protocol identity from deployment-time routing.</p>
|
|
87
|
+
<p>That split matters because module artifacts are portable, compiled, and signable, while deployment endpoints are environment-specific.</p>
|
|
88
|
+
<h2 id="canonical-manifest"><a class="anchor" href="#canonical-manifest" aria-hidden="true">#</a>Canonical Manifest</h2>
|
|
89
|
+
<p>Hosted protocol declarations belong in <code>manifest.protocols</code>.</p>
|
|
90
|
+
<p>Those declarations describe what a module can host or dial:</p>
|
|
91
|
+
<ul>
|
|
92
|
+
<li><code>protocolId</code></li>
|
|
93
|
+
<li><code>methodId</code></li>
|
|
94
|
+
<li><code>inputPortId</code></li>
|
|
95
|
+
<li><code>outputPortId</code></li>
|
|
96
|
+
<li><code>wireId</code></li>
|
|
97
|
+
<li><code>transportKind</code></li>
|
|
98
|
+
<li><code>role</code></li>
|
|
99
|
+
<li><code>specUri</code></li>
|
|
100
|
+
<li><code>autoInstall</code></li>
|
|
101
|
+
<li><code>advertise</code></li>
|
|
102
|
+
<li><code>discoveryKey</code></li>
|
|
103
|
+
<li><code>defaultPort</code></li>
|
|
104
|
+
<li><code>requireSecureTransport</code></li>
|
|
105
|
+
</ul>
|
|
106
|
+
<p>These fields are embedded in the compiled <code>PluginManifest.fbs</code> bytes and are part of the canonical module contract.</p>
|
|
107
|
+
<h2 id="deployment-metadata"><a class="anchor" href="#deployment-metadata" aria-hidden="true">#</a>Deployment Metadata</h2>
|
|
108
|
+
<p>Concrete deployment routing does <strong>not</strong> belong in the canonical manifest.</p>
|
|
109
|
+
<p>Examples:</p>
|
|
110
|
+
<ul>
|
|
111
|
+
<li>concrete multiaddrs</li>
|
|
112
|
+
<li>resolved listen ports</li>
|
|
113
|
+
<li>selected peer IDs</li>
|
|
114
|
+
<li>deployment URLs</li>
|
|
115
|
+
<li>interface-keyed input bindings</li>
|
|
116
|
+
<li>scheduler bindings</li>
|
|
117
|
+
<li>hosted service bindings</li>
|
|
118
|
+
<li>request-time auth policy</li>
|
|
119
|
+
<li>publication, pinning, retention, and archive policy</li>
|
|
120
|
+
</ul>
|
|
121
|
+
<p>Those values vary per environment and should not change the identity of a signed <code>.wasm</code> artifact.</p>
|
|
122
|
+
<p>Instead, attach them as a deployment-plan payload inside the bundle <code>MBL</code> record carried by the appended <code>REC</code> trailer.</p>
|
|
123
|
+
<p>Deployment plans should use <code>protocolId</code> as the required identifier for a resolved protocol installation. <code>wireId</code> is optional deployment metadata for legacy transports that still expose it, not a required routing key.</p>
|
|
124
|
+
<p>Deployment input and publication bindings should reference <code>manifest.externalInterfaces[].interfaceId</code>. That keeps deployment routing tied to the declared module contract instead of transport-specific <code>topic</code> or <code>wireId</code> hints.</p>
|
|
125
|
+
<p>The standard bundle entry is:</p>
|
|
126
|
+
<ul>
|
|
127
|
+
<li><code>entryId</code>: <code>deployment-plan</code></li>
|
|
128
|
+
<li><code>sectionName</code>: <code>sds.deployment</code></li>
|
|
129
|
+
<li><code>payloadEncoding</code>: <code>json-utf8</code></li>
|
|
130
|
+
<li><code>mediaType</code>: <code>application/vnd.space-data.module.deployment+json</code></li>
|
|
131
|
+
</ul>
|
|
132
|
+
<h2 id="public-helpers"><a class="anchor" href="#public-helpers" aria-hidden="true">#</a>Public Helpers</h2>
|
|
133
|
+
<p>Use <code>space-data-module-sdk/deployment</code> to work with that payload:</p>
|
|
134
|
+
<ul>
|
|
135
|
+
<li><code>normalizeDeploymentPlan(...)</code></li>
|
|
136
|
+
<li><code>validateDeploymentPlan(...)</code></li>
|
|
137
|
+
<li><code>createDeploymentPlanBundleEntry(...)</code></li>
|
|
138
|
+
<li><code>findDeploymentPlanEntry(...)</code></li>
|
|
139
|
+
<li><code>readDeploymentPlanFromBundle(...)</code></li>
|
|
140
|
+
</ul>
|
|
141
|
+
<h2 id="example-manifest-protocol"><a class="anchor" href="#example-manifest-protocol" aria-hidden="true">#</a>Example Manifest Protocol</h2>
|
|
142
|
+
<div class="codeblock"><div class="codeblock-head">json</div><pre><code>{
|
|
143
|
+
"protocols": [
|
|
144
|
+
{
|
|
145
|
+
"protocolId": "sgp4-stream",
|
|
146
|
+
"methodId": "propagate",
|
|
147
|
+
"inputPortId": "request",
|
|
148
|
+
"outputPortId": "state",
|
|
149
|
+
"wireId": "/sdn/sgp4/1.0.0",
|
|
150
|
+
"transportKind": "libp2p",
|
|
151
|
+
"role": "handle",
|
|
152
|
+
"specUri": "https://spacedatastandards.org/#/schemas/PNM",
|
|
153
|
+
"autoInstall": true,
|
|
154
|
+
"advertise": true,
|
|
155
|
+
"discoveryKey": "sgp4-stream",
|
|
156
|
+
"defaultPort": 443,
|
|
157
|
+
"requireSecureTransport": true
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
}</code></pre></div>
|
|
161
|
+
<h2 id="example-deployment-plan"><a class="anchor" href="#example-deployment-plan" aria-hidden="true">#</a>Example Deployment Plan</h2>
|
|
162
|
+
<div class="codeblock"><div class="codeblock-head">json</div><pre><code>{
|
|
163
|
+
"formatVersion": 1,
|
|
164
|
+
"pluginId": "com.example.sgp4",
|
|
165
|
+
"version": "1.2.3",
|
|
166
|
+
"protocolInstallations": [
|
|
167
|
+
{
|
|
168
|
+
"protocolId": "sgp4-stream",
|
|
169
|
+
"transportKind": "libp2p",
|
|
170
|
+
"role": "handle",
|
|
171
|
+
"peerId": "12D3KooW...",
|
|
172
|
+
"listenMultiaddrs": [
|
|
173
|
+
"/ip4/127.0.0.1/tcp/14080/ws/p2p/12D3KooW..."
|
|
174
|
+
],
|
|
175
|
+
"advertisedMultiaddrs": [
|
|
176
|
+
"/dns4/sgp4.example.test/tcp/443/wss/p2p/12D3KooW..."
|
|
177
|
+
],
|
|
178
|
+
"nodeInfoUrl": "https://sgp4.example.test/api/node/info"
|
|
179
|
+
}
|
|
180
|
+
],
|
|
181
|
+
"inputBindings": [
|
|
182
|
+
{
|
|
183
|
+
"bindingId": "catalog-feed",
|
|
184
|
+
"interfaceId": "catalog-pubsub",
|
|
185
|
+
"targetMethodId": "propagate",
|
|
186
|
+
"targetInputPortId": "request",
|
|
187
|
+
"sourceKind": "pubsub"
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
"scheduleBindings": [
|
|
191
|
+
{
|
|
192
|
+
"scheduleId": "poll-upstream",
|
|
193
|
+
"bindingMode": "local",
|
|
194
|
+
"targetMethodId": "propagate",
|
|
195
|
+
"targetInputPortId": "request",
|
|
196
|
+
"scheduleKind": "cron",
|
|
197
|
+
"cron": "*/15 * * * *"
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
"serviceBindings": [
|
|
201
|
+
{
|
|
202
|
+
"serviceId": "https-query",
|
|
203
|
+
"bindingMode": "delegated",
|
|
204
|
+
"serviceKind": "http-server",
|
|
205
|
+
"routePath": "/api/sgp4",
|
|
206
|
+
"method": "GET",
|
|
207
|
+
"remoteUrl": "https://gateway.example.test/api/sgp4",
|
|
208
|
+
"authPolicyId": "approved-keys"
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"authPolicies": [
|
|
212
|
+
{
|
|
213
|
+
"policyId": "approved-keys",
|
|
214
|
+
"bindingMode": "delegated",
|
|
215
|
+
"targetKind": "service",
|
|
216
|
+
"targetId": "https-query",
|
|
217
|
+
"walletProfileId": "orbpro-default",
|
|
218
|
+
"trustMapId": "approved-operators",
|
|
219
|
+
"allowServerKeys": ["ed25519:..."]
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"publicationBindings": [
|
|
223
|
+
{
|
|
224
|
+
"publicationId": "state-catalog",
|
|
225
|
+
"interfaceId": "state-catalog-pubsub",
|
|
226
|
+
"bindingMode": "local",
|
|
227
|
+
"sourceKind": "method-output",
|
|
228
|
+
"sourceMethodId": "propagate",
|
|
229
|
+
"sourceOutputPortId": "state",
|
|
230
|
+
"schemaName": "CAT.fbs",
|
|
231
|
+
"emitPnm": true,
|
|
232
|
+
"emitFlatbufferArchive": true,
|
|
233
|
+
"archivePath": "/data/catalog/cat.bin",
|
|
234
|
+
"queryInterfaceId": "state-query-api",
|
|
235
|
+
"recordRangeStartField": "startIndex",
|
|
236
|
+
"recordRangeStopField": "stopIndex"
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
}</code></pre></div>
|
|
240
|
+
<h2 id="identity-rules"><a class="anchor" href="#identity-rules" aria-hidden="true">#</a>Identity Rules</h2>
|
|
241
|
+
<ul>
|
|
242
|
+
<li><code>wireId</code> identifies the network protocol.</li>
|
|
243
|
+
<li><code>specUri</code> identifies the message or schema contract.</li>
|
|
244
|
+
<li>multiaddrs identify one deployment instance of that protocol.</li>
|
|
245
|
+
<li><code>interfaceId</code> identifies the declared module boundary used by deployment input/publication bindings.</li>
|
|
246
|
+
<li>deployment plans should resolve installed protocol surfaces by <code>protocolId</code>; include <code>wireId</code> only when a host integration still needs that legacy hint.</li>
|
|
247
|
+
</ul>
|
|
248
|
+
<p>Do not treat those as interchangeable.</p>
|
|
249
|
+
|
|
250
|
+
<p class="doc-footer">
|
|
251
|
+
Source of truth for this page:
|
|
252
|
+
<code>docs/protocol-installation.md</code>. Regenerate with
|
|
253
|
+
<code>npm run build:docs</code>.
|
|
254
|
+
</p>
|
|
255
|
+
</main>
|
|
256
|
+
<nav class="rail" aria-label="On this page"><h2>On this page</h2><ul><li><a class="depth-2" href="#canonical-manifest">Canonical Manifest</a></li>
|
|
257
|
+
<li><a class="depth-2" href="#deployment-metadata">Deployment Metadata</a></li>
|
|
258
|
+
<li><a class="depth-2" href="#public-helpers">Public Helpers</a></li>
|
|
259
|
+
<li><a class="depth-2" href="#example-manifest-protocol">Example Manifest Protocol</a></li>
|
|
260
|
+
<li><a class="depth-2" href="#example-deployment-plan">Example Deployment Plan</a></li>
|
|
261
|
+
<li><a class="depth-2" href="#identity-rules">Identity Rules</a></li></ul></nav>
|
|
262
|
+
</div>
|
|
263
|
+
<section id="stack" class="section" aria-labelledby="stack-title">
|
|
264
|
+
<div class="section-head">
|
|
265
|
+
<p class="eyebrow">SDN Stack</p>
|
|
266
|
+
<h2 id="stack-title">Connected sites</h2>
|
|
267
|
+
</div>
|
|
268
|
+
<div class="link-list">
|
|
269
|
+
<a href="https://spacedatastandards.org/">
|
|
270
|
+
<span>Standards</span>
|
|
271
|
+
<small>Canonical schemas, record contracts, and generated bindings.</small>
|
|
272
|
+
</a>
|
|
273
|
+
<a href="https://digitalarsenal.github.io/flatbuffers/">
|
|
274
|
+
<span>FlatBuffers</span>
|
|
275
|
+
<small>Binary encoding, schema tooling, and runtime documentation.</small>
|
|
276
|
+
</a>
|
|
277
|
+
<a href="https://digitalarsenal.github.io/flatsql/">
|
|
278
|
+
<span>FlatSQL</span>
|
|
279
|
+
<small>SQL-style queries over FlatBuffer-backed datasets and streams.</small>
|
|
280
|
+
</a>
|
|
281
|
+
<a href="https://spacedatanetwork.org/">
|
|
282
|
+
<span>SDN</span>
|
|
283
|
+
<small>Distributed publication, discovery, delivery, and marketplace infrastructure.</small>
|
|
284
|
+
</a>
|
|
285
|
+
<a href="https://digitalarsenal.github.io/space-data-module-sdk/" class="active">
|
|
286
|
+
<span>Module SDK</span>
|
|
287
|
+
<small>WASM module packaging, validation, and host compatibility tooling.</small>
|
|
288
|
+
</a>
|
|
289
|
+
</div>
|
|
290
|
+
</section>
|
|
291
|
+
<footer class="site-footer">
|
|
292
|
+
Space Data Module SDK — Apache-2.0. Every ABI page renders a Markdown
|
|
293
|
+
source in <code>docs/</code>; edit the Markdown, never the HTML.
|
|
294
|
+
</footer>
|
|
295
|
+
</body>
|
|
296
|
+
</html>
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<meta name="description" content="The last step of the integrator path: turn a signed artifact into something a" />
|
|
7
|
+
<title>Publication and listing — Space Data Module SDK</title>
|
|
8
|
+
<link rel="stylesheet" href="./styles.css" />
|
|
9
|
+
<!-- SDN_CONSUMER_ASSETS_START -->
|
|
10
|
+
<link rel="stylesheet" href="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" crossorigin="anonymous">
|
|
11
|
+
<script defer src="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" crossorigin="anonymous" data-sdn-wallet-public-client="v1"></script>
|
|
12
|
+
<script defer src="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.52fde607eee38ffa116188201f50258ed50bd18c9f06c1af9678f763147a8fe5.js" integrity="sha384-dgeojhJ8vTszHXIbv7O7nZcEzqD10oUYYJjBmPrV7+kLQEUlXLQD4ek5Q7HOFiO5" crossorigin="anonymous" data-nav-style-url="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.36a36359ce18322185e9ff179f88175bab67d5ad84a14d9c08a54f2ff27267e7.css" data-nav-style-integrity="sha384-c4M8Fg+kYaeOYYtJVr7jJsde24IhSWkWaRyAOHEZU9jozhRck089aw+mnHwxymds" data-wallet-client-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" data-wallet-client-integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" data-wallet-style-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" data-wallet-style-integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" data-wallet-client-id="sdn-module-sdk-pages-v1" data-wallet-callback-uri="https://digitalarsenal.github.io/space-data-module-sdk/wallet-callback.html" data-wallet-registry-sha256="e1ce6fe903c9700484a8a87d96581c8cad97063dabf63030b4518a31a3bdaa93"></script>
|
|
13
|
+
<!-- SDN_CONSUMER_ASSETS_END -->
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<a class="skip-link" href="#main">Skip to content</a>
|
|
17
|
+
<sdn-stack-nav active="module-sdk"></sdn-stack-nav>
|
|
18
|
+
<header class="site-header">
|
|
19
|
+
<a class="site-brand" href="./">Space Data Module SDK</a>
|
|
20
|
+
<nav class="header-links" aria-label="Site">
|
|
21
|
+
<a href="./byo-wasm-quickstart.html">Quickstart</a>
|
|
22
|
+
<a href="./conformance.html">Conformance</a>
|
|
23
|
+
<a href="https://github.com/DigitalArsenal/space-data-module-sdk">GitHub</a>
|
|
24
|
+
<a class="stack-button" href="#stack">Stack</a>
|
|
25
|
+
</nav>
|
|
26
|
+
</header>
|
|
27
|
+
<div class="shell">
|
|
28
|
+
<nav class="sidebar" id="sidebar" aria-label="Documentation">
|
|
29
|
+
<h2>Start here</h2><ul>
|
|
30
|
+
<li><a href="./index.html"><span>Harness family matrix</span></a></li>
|
|
31
|
+
<li><a href="./byo-wasm-quickstart.html"><span>BYO-wasm quickstart</span></a></li>
|
|
32
|
+
<li><a href="./conformance.html"><span>Conformance kit</span></a></li>
|
|
33
|
+
<li><a href="./protect-and-sign.html"><span>Protect and sign</span></a></li>
|
|
34
|
+
<li><a href="./publication-submission.html" aria-current="page"><span>Publication and listing</span></a></li>
|
|
35
|
+
</ul>
|
|
36
|
+
<h2>Dynamics</h2><ul>
|
|
37
|
+
<li><a href="./families/propagator.html"><span>Propagator</span><span class="tag tag-shipped">shipped</span></a></li>
|
|
38
|
+
<li><a href="./families/maneuver.html"><span>Maneuver</span><span class="tag tag-experimental">experimental</span></a></li>
|
|
39
|
+
<li><a href="./families/propulsion.html"><span>Propulsion</span><span class="tag tag-planned">planned</span></a></li>
|
|
40
|
+
<li><a href="./families/attitude.html"><span>Attitude</span><span class="tag tag-planned">planned</span></a></li>
|
|
41
|
+
<li><a href="./families/gnc.html"><span>GNC</span><span class="tag tag-planned">planned</span></a></li>
|
|
42
|
+
</ul>
|
|
43
|
+
<h2>Environment and interaction</h2><ul>
|
|
44
|
+
<li><a href="./families/rf.html"><span>RF</span><span class="tag tag-designed">designed</span></a></li>
|
|
45
|
+
<li><a href="./families/sensor.html"><span>Sensor</span><span class="tag tag-planned">planned</span></a></li>
|
|
46
|
+
<li><a href="./families/signature.html"><span>Signature</span><span class="tag tag-planned">planned</span></a></li>
|
|
47
|
+
<li><a href="./families/environment.html"><span>Environment</span><span class="tag tag-planned">planned</span></a></li>
|
|
48
|
+
<li><a href="./families/obstruction.html"><span>Obstruction</span><span class="tag tag-designed">designed</span></a></li>
|
|
49
|
+
</ul>
|
|
50
|
+
<h2>Event physics</h2><ul>
|
|
51
|
+
<li><a href="./families/breakup.html"><span>Breakup</span><span class="tag tag-planned">planned</span></a></li>
|
|
52
|
+
<li><a href="./families/reentry.html"><span>Reentry</span><span class="tag tag-planned">planned</span></a></li>
|
|
53
|
+
<li><a href="./families/conjunction.html"><span>Conjunction</span><span class="tag tag-designed">designed</span></a></li>
|
|
54
|
+
<li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
|
|
55
|
+
</ul>
|
|
56
|
+
<h2>Estimation, data and logic</h2><ul>
|
|
57
|
+
<li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
|
|
58
|
+
<li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
|
|
59
|
+
<li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
|
|
60
|
+
<li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
|
|
61
|
+
<li><a href="./families/behavior.html"><span>Behavior</span><span class="tag tag-planned">planned</span></a></li>
|
|
62
|
+
</ul>
|
|
63
|
+
<h2>Runtime contract</h2><ul>
|
|
64
|
+
<li><a href="./events-abi.html"><span>Event locator ABI</span></a></li>
|
|
65
|
+
<li><a href="./module-publication-standard.html"><span>Module publication standard</span></a></li>
|
|
66
|
+
<li><a href="./browser-wasmedge-isomorphic.html"><span>Browser / WasmEdge isomorphism</span></a></li>
|
|
67
|
+
<li><a href="./isomorphic-pthreads.html"><span>Isomorphic pthreads</span></a></li>
|
|
68
|
+
<li><a href="./tri-runtime-parity.html"><span>Tri-runtime parity</span></a></li>
|
|
69
|
+
<li><a href="./tri-runtime-parity-gate.html"><span>Tri-runtime parity gate</span></a></li>
|
|
70
|
+
<li><a href="./testing-harness.html"><span>Testing harness</span></a></li>
|
|
71
|
+
<li><a href="./language-runtime-matrix.html"><span>Language and runtime matrix</span></a></li>
|
|
72
|
+
</ul>
|
|
73
|
+
<h2>Host surfaces</h2><ul>
|
|
74
|
+
<li><a href="./flatsql-host-contract.html"><span>FlatSQL host contract</span></a></li>
|
|
75
|
+
<li><a href="./flatsql-streaming-standard.html"><span>FlatSQL streaming standard</span></a></li>
|
|
76
|
+
<li><a href="./secrets-capability.html"><span>Credential lanes</span></a></li>
|
|
77
|
+
<li><a href="./protocol-installation.html"><span>Protocol installation</span></a></li>
|
|
78
|
+
<li><a href="./gpu-module-abi.html"><span>GPU module ABI</span></a></li>
|
|
79
|
+
<li><a href="./module-bundle-runtime-plan.html"><span>Module bundle runtime</span></a></li>
|
|
80
|
+
<li><a href="./isomorphic-sdn-runtime-plan.html"><span>Isomorphic SDN runtime</span></a></li>
|
|
81
|
+
<li><a href="./node-red-default-node-parity.html"><span>Node-RED node parity</span></a></li>
|
|
82
|
+
</ul>
|
|
83
|
+
</nav>
|
|
84
|
+
<main class="doc" id="main">
|
|
85
|
+
<h1>Publication and listing</h1>
|
|
86
|
+
<p>The last step of the integrator path: turn a signed artifact into something a consumer can discover, fetch and load. Part of this is implemented and part of it is still being built, and this page separates the two explicitly.</p>
|
|
87
|
+
<h2 id="what-is-implemented-today"><a class="anchor" href="#what-is-implemented-today" aria-hidden="true">#</a>What is implemented today</h2>
|
|
88
|
+
<p><strong>The published artifact layout.</strong> A protected artifact carries its records in a trailer:</p>
|
|
89
|
+
<div class="codeblock"><pre><code>protected-payload-bytes || REC-flatbuffer-bytes || uint32le(REC length) || "$REC"</code></pre></div>
|
|
90
|
+
<p><code>REC</code>, <code>MBL</code>, <code>PNM</code> and <code>ENC</code> are Space Data Standards FlatBuffer record types. The SDK consumes the generated message classes; the schemas are ratified at <code>spacedatastandards.org</code>. The full contract — which record carries the manifest, which carries the bundle metadata, which carries the publication notice, and which carries the encryption envelope — is the <a href="./module-publication-standard.html">module publication standard</a>.</p>
|
|
91
|
+
<p><strong>The artifact primitives.</strong> <code>protect</code>, <code>sign</code> and <code>verify</code> are real commands with real flags. See <a href="./protect-and-sign.html">Protect and sign</a>.</p>
|
|
92
|
+
<p><strong>Post-publication loadability is gated.</strong> The tri-runtime parity gate carries a fixture for the <em>published</em> form of a module — the same artifact after its signature and manifest records have been appended as a trailing custom section — so the record-stripping and instantiation path is exercised by the gate, not assumed. See the <a href="./tri-runtime-parity-gate.html">parity gate</a>.</p>
|
|
93
|
+
<p><strong>Package distribution.</strong> The publication standard also covers delivery through conventional package ecosystems (npm, PyPI, Maven Central, NuGet, Go modules, crates.io, Swift Package Manager) for the language bindings that accompany a module.</p>
|
|
94
|
+
<h2 id="what-is-still-being-built"><a class="anchor" href="#what-is-still-being-built" aria-hidden="true">#</a>What is still being built</h2>
|
|
95
|
+
<p>These are checked absences in the SDK today, not roadmap decoration:</p>
|
|
96
|
+
<ul>
|
|
97
|
+
<li><strong>No listing-submission command.</strong> There is no <code>publish</code>, <code>submit</code> or <code>list</code> subcommand. The CLI offers artifact-level primitives only.</li>
|
|
98
|
+
<li><strong>No storefront or marketplace workflow in this repository.</strong> A module marketplace is a program in the wider stack; no listing code lives here.</li>
|
|
99
|
+
<li><strong>No manifest injection for foreign-compiled binaries.</strong> A BYO vendor's artifact cannot yet be stamped with a manifest by a tool. See the <a href="./byo-wasm-quickstart.html">BYO-wasm quickstart</a>.</li>
|
|
100
|
+
</ul>
|
|
101
|
+
<h2 id="the-escorted-path-which-works-now"><a class="anchor" href="#the-escorted-path-which-works-now" aria-hidden="true">#</a>The escorted path, which works now</h2>
|
|
102
|
+
<p>Until self-serve submission lands, a vendor can complete the whole path with help:</p>
|
|
103
|
+
<ol>
|
|
104
|
+
<li>The vendor builds <code>module.wasm</code> on the pinned toolchain and supplies the manifest JSON alongside it.</li>
|
|
105
|
+
<li>Conformance and the parity gate are run against the artifact — the vendor can run both themselves and attach the output, or hand over the artifact and have them run.</li>
|
|
106
|
+
<li>The artifact is protected and signed, and <code>verify</code> is run against the published bytes with the intended trusted key set.</li>
|
|
107
|
+
<li>The publication records are attached and the module is listed by hand.</li>
|
|
108
|
+
</ol>
|
|
109
|
+
<p>Nothing in that sequence requires the vendor to have access to a private repository, and every gate in it is a real command whose output is the evidence.</p>
|
|
110
|
+
<h2 id="submission-checklist"><a class="anchor" href="#submission-checklist" aria-hidden="true">#</a>Submission checklist</h2>
|
|
111
|
+
<p>Before handing over an artifact, confirm each of these:</p>
|
|
112
|
+
<div class="table-wrap"><table><thead><tr><th>Check</th><th>Command or evidence</th></tr></thead><tbody><tr><td>Built on the pinned toolchain</td><td>Link flags include <code>-Wl,--shared-memory</code> and <code>-Wl,--max-memory=2147483648</code></td></tr><tr><td>No Emscripten anywhere in the build</td><td>Build log; the parity gate's import classifier will catch it</td></tr><tr><td>Family ABI conformance passes</td><td><code>space-data-module conformance <family> --artifact <path></code></td></tr><tr><td>Tri-runtime parity passes</td><td><code>space-data-module parity --wasm <path> --fixture <path> --lanes browser,wasmedge,docker-wasmedge</code></td></tr><tr><td>Manifest declares family, invoke surface, runtime targets, record types</td><td>The manifest JSON</td></tr><tr><td>Signed with the intended key</td><td><code>space-data-module verify --wasm <path> --trusted <hex> --require-signature</code></td></tr><tr><td>Teardown does not leak</td><td>The conformance leak cycles reach steady state</td></tr></tbody></table></div>
|
|
113
|
+
|
|
114
|
+
<p class="doc-footer">
|
|
115
|
+
Source of truth for this page:
|
|
116
|
+
<code>docs/publication-submission.md</code>. Regenerate with
|
|
117
|
+
<code>npm run build:docs</code>.
|
|
118
|
+
</p>
|
|
119
|
+
</main>
|
|
120
|
+
<nav class="rail" aria-label="On this page"><h2>On this page</h2><ul><li><a class="depth-2" href="#what-is-implemented-today">What is implemented today</a></li>
|
|
121
|
+
<li><a class="depth-2" href="#what-is-still-being-built">What is still being built</a></li>
|
|
122
|
+
<li><a class="depth-2" href="#the-escorted-path-which-works-now">The escorted path, which works now</a></li>
|
|
123
|
+
<li><a class="depth-2" href="#submission-checklist">Submission checklist</a></li></ul></nav>
|
|
124
|
+
</div>
|
|
125
|
+
<section id="stack" class="section" aria-labelledby="stack-title">
|
|
126
|
+
<div class="section-head">
|
|
127
|
+
<p class="eyebrow">SDN Stack</p>
|
|
128
|
+
<h2 id="stack-title">Connected sites</h2>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="link-list">
|
|
131
|
+
<a href="https://spacedatastandards.org/">
|
|
132
|
+
<span>Standards</span>
|
|
133
|
+
<small>Canonical schemas, record contracts, and generated bindings.</small>
|
|
134
|
+
</a>
|
|
135
|
+
<a href="https://digitalarsenal.github.io/flatbuffers/">
|
|
136
|
+
<span>FlatBuffers</span>
|
|
137
|
+
<small>Binary encoding, schema tooling, and runtime documentation.</small>
|
|
138
|
+
</a>
|
|
139
|
+
<a href="https://digitalarsenal.github.io/flatsql/">
|
|
140
|
+
<span>FlatSQL</span>
|
|
141
|
+
<small>SQL-style queries over FlatBuffer-backed datasets and streams.</small>
|
|
142
|
+
</a>
|
|
143
|
+
<a href="https://spacedatanetwork.org/">
|
|
144
|
+
<span>SDN</span>
|
|
145
|
+
<small>Distributed publication, discovery, delivery, and marketplace infrastructure.</small>
|
|
146
|
+
</a>
|
|
147
|
+
<a href="https://digitalarsenal.github.io/space-data-module-sdk/" class="active">
|
|
148
|
+
<span>Module SDK</span>
|
|
149
|
+
<small>WASM module packaging, validation, and host compatibility tooling.</small>
|
|
150
|
+
</a>
|
|
151
|
+
</div>
|
|
152
|
+
</section>
|
|
153
|
+
<footer class="site-footer">
|
|
154
|
+
Space Data Module SDK — Apache-2.0. Every ABI page renders a Markdown
|
|
155
|
+
source in <code>docs/</code>; edit the Markdown, never the HTML.
|
|
156
|
+
</footer>
|
|
157
|
+
</body>
|
|
158
|
+
</html>
|