space-data-module-sdk 0.8.4 → 0.8.6

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 (354) hide show
  1. package/README.md +117 -20
  2. package/bin/space-data-module.js +263 -0
  3. package/docs/.nojekyll +1 -0
  4. package/docs/AGENTS.md +34 -0
  5. package/docs/architecture.svg +141 -0
  6. package/docs/browser-wasmedge-isomorphic.md +179 -0
  7. package/docs/flatsql-streaming-standard.md +341 -0
  8. package/docs/gpu-module-abi.md +193 -0
  9. package/docs/index.html +125 -0
  10. package/docs/isomorphic-pthreads.md +188 -0
  11. package/docs/isomorphic-sdn-runtime-plan.md +167 -0
  12. package/docs/language-runtime-matrix.md +82 -0
  13. package/docs/manifest-structure.svg +114 -0
  14. package/docs/module-bundle-runtime-plan.md +19 -0
  15. package/docs/module-lifecycle.svg +70 -0
  16. package/docs/module-publication-standard.md +540 -0
  17. package/docs/node-red-default-node-parity.md +88 -0
  18. package/docs/protocol-installation.md +196 -0
  19. package/docs/secrets-capability.md +152 -0
  20. package/docs/styles.css +288 -0
  21. package/docs/testing-harness.md +408 -0
  22. package/docs/tri-runtime-parity.md +132 -0
  23. package/docs/wallet-callback.html +2 -0
  24. package/package.json +25 -6
  25. package/schemas/HttpRequestAbi.fbs +41 -0
  26. package/schemas/HttpResponseAbi.fbs +36 -0
  27. package/schemas/PluginManifest.fbs +2 -1
  28. package/src/AGENTS.md +1 -1
  29. package/src/app/codec.js +548 -0
  30. package/src/app/index.js +6 -0
  31. package/src/browser.js +5 -0
  32. package/src/bundle/constants.js +1 -0
  33. package/src/bundle/index.js +15 -0
  34. package/src/bundle/sigdomain.js +179 -0
  35. package/src/bundle/signing.js +767 -0
  36. package/src/bundle/wasm.js +3 -2
  37. package/src/capabilities.js +3 -0
  38. package/src/compat/index.js +7 -0
  39. package/src/compat/sdnLegacy.js +449 -0
  40. package/src/compiler/compileModule.js +556 -55
  41. package/src/compiler/flatcSupport.js +41 -27
  42. package/src/compiler/index.d.ts +2 -0
  43. package/src/compiler/index.js +18 -0
  44. package/src/compiler/invokeGlue.js +1212 -183
  45. package/src/compiler/pthreadArtifactGuard.js +910 -0
  46. package/src/compiler/sdnShimGenerator.js +323 -0
  47. package/src/compiler/wasiThreadsToolchain.js +150 -0
  48. package/src/compliance/index.js +11 -1
  49. package/src/compliance/legacyWildcardPorts.js +228 -0
  50. package/src/compliance/pluginCompliance.js +1000 -96
  51. package/src/field-stream/index.d.ts +31 -0
  52. package/src/field-stream/index.js +119 -0
  53. package/src/flow/dependencyStreamBridge.js +234 -0
  54. package/src/flow/flatsqlLinkShim.js +304 -0
  55. package/src/flow/flowCodec.js +107 -0
  56. package/src/flow/flowCompiler.js +2900 -0
  57. package/src/flow/flowRuntimeHost.js +877 -0
  58. package/src/flow/index.d.ts +117 -0
  59. package/src/flow/index.js +31 -0
  60. package/src/flow/isomorphicFlowHost.js +384 -0
  61. package/src/flow/jsFlowRuntime.js +275 -0
  62. package/src/flow/normalize.js +294 -0
  63. package/src/flow/runtime-src/flow_runtime.cpp +1699 -0
  64. package/src/flow/vendor/sdn-flow/MethodRegistry.js +400 -0
  65. package/src/flow/vendor/sdn-flow/constants.js +39 -0
  66. package/src/flow/vendor/sdn-flow/index.js +29 -0
  67. package/src/flow/vendor/sdn-flow/normalize.js +506 -0
  68. package/src/flow/vendor/sdn-flow/wasmCompatibility.js +189 -0
  69. package/src/generated/http/cpp/HttpRequestAbi_generated.h +285 -0
  70. package/src/generated/http/cpp/HttpResponseAbi_generated.h +192 -0
  71. package/src/generated/http/sdn/http/http-header.js +53 -0
  72. package/src/generated/http/sdn/http/http-header.ts +67 -0
  73. package/src/generated/http/sdn/http/http-request.js +132 -0
  74. package/src/generated/http/sdn/http/http-request.ts +179 -0
  75. package/src/generated/http/sdn/http/http-response.js +144 -0
  76. package/src/generated/http/sdn/http/http-response.ts +168 -0
  77. package/src/generated/http/sdn/http.js +11 -0
  78. package/src/generated/http/sdn/http.ts +4 -0
  79. package/src/generated/orbpro/flow/backpressure-policy.d.ts +12 -0
  80. package/src/generated/orbpro/flow/backpressure-policy.d.ts.map +1 -0
  81. package/src/generated/orbpro/flow/backpressure-policy.js +17 -0
  82. package/src/generated/orbpro/flow/backpressure-policy.js.map +1 -0
  83. package/src/generated/orbpro/flow/backpressure-policy.ts +15 -0
  84. package/src/generated/orbpro/flow/flow-bundle-manifest.d.ts +142 -0
  85. package/src/generated/orbpro/flow/flow-bundle-manifest.d.ts.map +1 -0
  86. package/src/generated/orbpro/flow/flow-bundle-manifest.js +304 -0
  87. package/src/generated/orbpro/flow/flow-bundle-manifest.js.map +1 -0
  88. package/src/generated/orbpro/flow/flow-bundle-manifest.ts +399 -0
  89. package/src/generated/orbpro/flow/flow-edge.d.ts +113 -0
  90. package/src/generated/orbpro/flow/flow-edge.d.ts.map +1 -0
  91. package/src/generated/orbpro/flow/flow-edge.js +221 -0
  92. package/src/generated/orbpro/flow/flow-edge.js.map +1 -0
  93. package/src/generated/orbpro/flow/flow-edge.ts +292 -0
  94. package/src/generated/orbpro/flow/flow-node.d.ts +80 -0
  95. package/src/generated/orbpro/flow/flow-node.d.ts.map +1 -0
  96. package/src/generated/orbpro/flow/flow-node.js +158 -0
  97. package/src/generated/orbpro/flow/flow-node.js.map +1 -0
  98. package/src/generated/orbpro/flow/flow-node.ts +202 -0
  99. package/src/generated/orbpro/flow/flow-program.d.ts +164 -0
  100. package/src/generated/orbpro/flow/flow-program.d.ts.map +1 -0
  101. package/src/generated/orbpro/flow/flow-program.js +350 -0
  102. package/src/generated/orbpro/flow/flow-program.js.map +1 -0
  103. package/src/generated/orbpro/flow/flow-program.ts +477 -0
  104. package/src/generated/orbpro/flow/flow-trigger.d.ts +108 -0
  105. package/src/generated/orbpro/flow/flow-trigger.d.ts.map +1 -0
  106. package/src/generated/orbpro/flow/flow-trigger.js +207 -0
  107. package/src/generated/orbpro/flow/flow-trigger.js.map +1 -0
  108. package/src/generated/orbpro/flow/flow-trigger.ts +276 -0
  109. package/src/generated/orbpro/flow/node-kind.d.ts +13 -0
  110. package/src/generated/orbpro/flow/node-kind.d.ts.map +1 -0
  111. package/src/generated/orbpro/flow/node-kind.js +16 -0
  112. package/src/generated/orbpro/flow/node-kind.js.map +1 -0
  113. package/src/generated/orbpro/{invoke.ts → flow/node-kind.ts} +12 -2
  114. package/src/generated/orbpro/flow/plugin-version-binding.d.ts +52 -0
  115. package/src/generated/orbpro/flow/plugin-version-binding.d.ts.map +1 -0
  116. package/src/generated/orbpro/flow/plugin-version-binding.js +85 -0
  117. package/src/generated/orbpro/flow/plugin-version-binding.js.map +1 -0
  118. package/src/generated/orbpro/flow/plugin-version-binding.ts +121 -0
  119. package/src/generated/orbpro/flow/schema-hash-binding.d.ts +70 -0
  120. package/src/generated/orbpro/flow/schema-hash-binding.d.ts.map +1 -0
  121. package/src/generated/orbpro/flow/schema-hash-binding.js +143 -0
  122. package/src/generated/orbpro/flow/schema-hash-binding.js.map +1 -0
  123. package/src/generated/orbpro/flow/schema-hash-binding.ts +189 -0
  124. package/src/generated/orbpro/flow/trigger-binding.d.ts +71 -0
  125. package/src/generated/orbpro/flow/trigger-binding.d.ts.map +1 -0
  126. package/src/generated/orbpro/flow/trigger-binding.js +142 -0
  127. package/src/generated/orbpro/flow/trigger-binding.js.map +1 -0
  128. package/src/generated/orbpro/flow/trigger-binding.ts +181 -0
  129. package/src/generated/orbpro/flow/trigger-kind.d.ts +14 -0
  130. package/src/generated/orbpro/flow/trigger-kind.d.ts.map +1 -0
  131. package/src/generated/orbpro/flow/trigger-kind.js +17 -0
  132. package/src/generated/orbpro/flow/trigger-kind.js.map +1 -0
  133. package/src/generated/orbpro/flow/trigger-kind.ts +17 -0
  134. package/src/generated/orbpro/flow.d.ts +21 -0
  135. package/src/generated/orbpro/flow.d.ts.map +1 -0
  136. package/src/generated/orbpro/flow.js +23 -0
  137. package/src/generated/orbpro/flow.js.map +1 -0
  138. package/src/generated/orbpro/flow.ts +24 -0
  139. package/src/generated/orbpro/manifest/capability-kind.d.ts +2 -1
  140. package/src/generated/orbpro/manifest/capability-kind.js +1 -0
  141. package/src/generated/orbpro/manifest/capability-kind.ts +1 -0
  142. package/src/generated/orbpro/plugin/stream-invoke-request.d.ts +93 -0
  143. package/src/generated/orbpro/plugin/stream-invoke-request.js +160 -0
  144. package/src/generated/orbpro/plugin/stream-invoke-request.ts +211 -0
  145. package/src/generated/orbpro/plugin/stream-invoke-response.d.ts +99 -0
  146. package/src/generated/orbpro/plugin/stream-invoke-response.js +175 -0
  147. package/src/generated/orbpro/plugin/stream-invoke-response.ts +226 -0
  148. package/src/generated/orbpro/plugin.js +8 -0
  149. package/src/generated/orbpro/stream.d.ts +12 -0
  150. package/src/generated/orbpro/stream.js +14 -0
  151. package/src/generated/orbpro/stream.ts +15 -0
  152. package/src/generated/spacedatastandards/plg/EntryFunction.d.ts +52 -0
  153. package/src/generated/spacedatastandards/plg/EntryFunction.d.ts.map +1 -0
  154. package/src/generated/spacedatastandards/plg/EntryFunction.js +106 -0
  155. package/src/generated/spacedatastandards/plg/EntryFunction.ts +162 -0
  156. package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.d.ts +90 -0
  157. package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.d.ts.map +1 -0
  158. package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.js +189 -0
  159. package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.ts +270 -0
  160. package/src/generated/spacedatastandards/plg/PLG.d.ts +492 -0
  161. package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -0
  162. package/src/generated/spacedatastandards/plg/PLG.js +1139 -0
  163. package/src/generated/spacedatastandards/plg/PLG.ts +1600 -0
  164. package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.d.ts +63 -0
  165. package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.d.ts.map +1 -0
  166. package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.js +138 -0
  167. package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.ts +189 -0
  168. package/src/generated/spacedatastandards/plg/PLGBuildArtifact.d.ts +41 -0
  169. package/src/generated/spacedatastandards/plg/PLGBuildArtifact.d.ts.map +1 -0
  170. package/src/generated/spacedatastandards/plg/PLGBuildArtifact.js +104 -0
  171. package/src/generated/spacedatastandards/plg/PLGBuildArtifact.ts +151 -0
  172. package/src/generated/spacedatastandards/plg/PLGFlowEdge.d.ts +68 -0
  173. package/src/generated/spacedatastandards/plg/PLGFlowEdge.d.ts.map +1 -0
  174. package/src/generated/spacedatastandards/plg/PLGFlowEdge.js +124 -0
  175. package/src/generated/spacedatastandards/plg/PLGFlowEdge.ts +184 -0
  176. package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.d.ts +58 -0
  177. package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.d.ts.map +1 -0
  178. package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.js +126 -0
  179. package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.ts +161 -0
  180. package/src/generated/spacedatastandards/plg/PLGFlowNode.d.ts +82 -0
  181. package/src/generated/spacedatastandards/plg/PLGFlowNode.d.ts.map +1 -0
  182. package/src/generated/spacedatastandards/plg/PLGFlowNode.js +164 -0
  183. package/src/generated/spacedatastandards/plg/PLGFlowNode.ts +244 -0
  184. package/src/generated/spacedatastandards/plg/PLGFlowTrigger.d.ts +55 -0
  185. package/src/generated/spacedatastandards/plg/PLGFlowTrigger.d.ts.map +1 -0
  186. package/src/generated/spacedatastandards/plg/PLGFlowTrigger.js +105 -0
  187. package/src/generated/spacedatastandards/plg/PLGFlowTrigger.ts +162 -0
  188. package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.d.ts +42 -0
  189. package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.d.ts.map +1 -0
  190. package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.js +83 -0
  191. package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.ts +127 -0
  192. package/src/generated/spacedatastandards/plg/PLGHostCapability.d.ts +36 -0
  193. package/src/generated/spacedatastandards/plg/PLGHostCapability.d.ts.map +1 -0
  194. package/src/generated/spacedatastandards/plg/PLGHostCapability.js +90 -0
  195. package/src/generated/spacedatastandards/plg/PLGHostCapability.ts +127 -0
  196. package/src/generated/spacedatastandards/plg/PLGMethodManifest.d.ts +53 -0
  197. package/src/generated/spacedatastandards/plg/PLGMethodManifest.d.ts.map +1 -0
  198. package/src/generated/spacedatastandards/plg/PLGMethodManifest.js +153 -0
  199. package/src/generated/spacedatastandards/plg/PLGMethodManifest.ts +210 -0
  200. package/src/generated/spacedatastandards/plg/PLGPortManifest.d.ts +70 -0
  201. package/src/generated/spacedatastandards/plg/PLGPortManifest.d.ts.map +1 -0
  202. package/src/generated/spacedatastandards/plg/PLGPortManifest.js +149 -0
  203. package/src/generated/spacedatastandards/plg/PLGPortManifest.ts +212 -0
  204. package/src/generated/spacedatastandards/plg/PLGProtocolSpec.d.ts +73 -0
  205. package/src/generated/spacedatastandards/plg/PLGProtocolSpec.d.ts.map +1 -0
  206. package/src/generated/spacedatastandards/plg/PLGProtocolSpec.js +199 -0
  207. package/src/generated/spacedatastandards/plg/PLGProtocolSpec.ts +292 -0
  208. package/src/generated/spacedatastandards/plg/PLGTimerSpec.d.ts +40 -0
  209. package/src/generated/spacedatastandards/plg/PLGTimerSpec.d.ts.map +1 -0
  210. package/src/generated/spacedatastandards/plg/PLGTimerSpec.js +103 -0
  211. package/src/generated/spacedatastandards/plg/PLGTimerSpec.ts +148 -0
  212. package/src/generated/spacedatastandards/plg/PluginCapability.d.ts +41 -0
  213. package/src/generated/spacedatastandards/plg/PluginCapability.d.ts.map +1 -0
  214. package/src/generated/spacedatastandards/plg/PluginCapability.js +82 -0
  215. package/src/generated/spacedatastandards/plg/{plugin-capability.ts → PluginCapability.ts} +55 -18
  216. package/src/generated/spacedatastandards/plg/PluginDependency.d.ts +42 -0
  217. package/src/generated/spacedatastandards/plg/PluginDependency.d.ts.map +1 -0
  218. package/src/generated/spacedatastandards/plg/PluginDependency.js +80 -0
  219. package/src/generated/spacedatastandards/plg/PluginDependency.ts +124 -0
  220. package/src/generated/spacedatastandards/plg/TAB.d.ts +85 -0
  221. package/src/generated/spacedatastandards/plg/TAB.d.ts.map +1 -0
  222. package/src/generated/spacedatastandards/plg/TAB.js +173 -0
  223. package/src/generated/spacedatastandards/plg/TAB.ts +228 -0
  224. package/src/generated/spacedatastandards/plg/bufferMutability.d.ts +18 -0
  225. package/src/generated/spacedatastandards/plg/bufferMutability.d.ts.map +1 -0
  226. package/src/generated/spacedatastandards/plg/bufferMutability.js +20 -0
  227. package/src/generated/spacedatastandards/plg/bufferMutability.ts +23 -0
  228. package/src/generated/spacedatastandards/plg/bufferOwnership.d.ts +18 -0
  229. package/src/generated/spacedatastandards/plg/bufferOwnership.d.ts.map +1 -0
  230. package/src/generated/spacedatastandards/plg/bufferOwnership.js +20 -0
  231. package/src/generated/spacedatastandards/plg/bufferOwnership.ts +23 -0
  232. package/src/generated/spacedatastandards/plg/drainBehavior.d.ts +20 -0
  233. package/src/generated/spacedatastandards/plg/drainBehavior.d.ts.map +1 -0
  234. package/src/generated/spacedatastandards/plg/drainBehavior.js +22 -0
  235. package/src/generated/spacedatastandards/plg/drainBehavior.ts +25 -0
  236. package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.d.ts +10 -0
  237. package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.d.ts.map +1 -0
  238. package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.js +12 -0
  239. package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.ts +13 -0
  240. package/src/generated/spacedatastandards/plg/hostCapabilityKind.d.ts +51 -0
  241. package/src/generated/spacedatastandards/plg/hostCapabilityKind.d.ts.map +1 -0
  242. package/src/generated/spacedatastandards/plg/hostCapabilityKind.js +53 -0
  243. package/src/generated/spacedatastandards/plg/hostCapabilityKind.ts +55 -0
  244. package/src/generated/spacedatastandards/plg/invokeSurfaceKind.d.ts +15 -0
  245. package/src/generated/spacedatastandards/plg/invokeSurfaceKind.d.ts.map +1 -0
  246. package/src/generated/spacedatastandards/plg/invokeSurfaceKind.js +17 -0
  247. package/src/generated/spacedatastandards/plg/invokeSurfaceKind.ts +19 -0
  248. package/src/generated/spacedatastandards/plg/main.d.ts +29 -0
  249. package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -0
  250. package/src/generated/spacedatastandards/plg/main.js +30 -0
  251. package/src/generated/spacedatastandards/plg/main.ts +32 -0
  252. package/src/generated/spacedatastandards/plg/payloadWireFormat.d.ts +17 -0
  253. package/src/generated/spacedatastandards/plg/payloadWireFormat.d.ts.map +1 -0
  254. package/src/generated/spacedatastandards/plg/payloadWireFormat.js +19 -0
  255. package/src/generated/spacedatastandards/plg/payloadWireFormat.ts +21 -0
  256. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +82 -0
  257. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -0
  258. package/src/generated/spacedatastandards/plg/pluginCategory.js +84 -0
  259. package/src/generated/spacedatastandards/plg/pluginCategory.ts +103 -0
  260. package/src/generated/spacedatastandards/plg/publicationState.d.ts +18 -0
  261. package/src/generated/spacedatastandards/plg/publicationState.d.ts.map +1 -0
  262. package/src/generated/spacedatastandards/plg/publicationState.js +20 -0
  263. package/src/generated/spacedatastandards/plg/purchaseTier.d.ts +18 -0
  264. package/src/generated/spacedatastandards/plg/purchaseTier.d.ts.map +1 -0
  265. package/src/generated/spacedatastandards/plg/purchaseTier.js +20 -0
  266. package/src/host/AGENTS.md +2 -2
  267. package/src/host/abi.js +53 -66
  268. package/src/host/browserHost.js +355 -8
  269. package/src/host/cpp/keyslotClient.hpp +231 -0
  270. package/src/host/cpp/secretsClient.hpp +583 -0
  271. package/src/host/hostcallWire.js +183 -0
  272. package/src/host/index.js +2 -0
  273. package/src/host/isomorphicLoader.js +44 -7
  274. package/src/host/nodeHost.js +227 -8
  275. package/src/host/sabHostcallChannel.js +206 -0
  276. package/src/host/timerDriver.js +203 -0
  277. package/src/host/wasiShim.js +41 -1
  278. package/src/host/wasiThreadBrowserWorker.mjs +48 -0
  279. package/src/host/wasiThreadHost.js +393 -0
  280. package/src/host/wasiThreadWorker.mjs +32 -0
  281. package/src/host/wasiThreadWorkerRuntime.js +93 -0
  282. package/src/http/index.js +339 -0
  283. package/src/index.d.ts +725 -11
  284. package/src/index.js +4 -0
  285. package/src/invoke/codec.js +1202 -128
  286. package/src/invoke/index.js +5 -1
  287. package/src/licensing/index.d.ts +2 -0
  288. package/src/licensing/index.js +2 -0
  289. package/src/licensing/records.js +287 -8
  290. package/src/manifest/codec.js +62 -14
  291. package/src/manifest/index.js +2 -0
  292. package/src/manifest/legacyToPlg.js +164 -25
  293. package/src/manifest/normalize.js +1 -0
  294. package/src/manifest/plgCodec.js +1303 -62
  295. package/src/manifest/typeRefs.js +162 -24
  296. package/src/runtime/compiledRuntimeAbi.js +47 -0
  297. package/src/runtime/compiledRuntimeAbi.json +33 -0
  298. package/src/runtime/index.d.ts +32 -0
  299. package/src/runtime/index.js +1 -0
  300. package/src/runtime-host/index.js +3 -0
  301. package/src/runtime-host/methodRegistry.js +55 -0
  302. package/src/standards/index.js +200 -56
  303. package/src/standards/sharedCatalog.js +16 -0
  304. package/src/testing/browserModuleHarness.js +604 -31
  305. package/src/testing/docker/wasmedge-parity.Dockerfile +39 -0
  306. package/src/testing/index.d.ts +151 -0
  307. package/src/testing/index.js +21 -0
  308. package/src/testing/native/wasmedge_emscripten_pthread_runner.c +25 -1
  309. package/src/testing/parityBrowserRunner.js +138 -0
  310. package/src/testing/parityHarness.js +616 -0
  311. package/src/testing/parityLanes.js +537 -0
  312. package/src/testing/processInvoke.js +29 -21
  313. package/src/testing/streamInvokeCodec.js +10 -175
  314. package/src/testing/wasmedgePin.json +6 -0
  315. package/src/testing/workerModuleHarness.js +242 -0
  316. package/src/testing/workerModuleHarnessWorker.js +176 -0
  317. package/src/transport/index.js +3 -0
  318. package/src/transport/pki.js +352 -14
  319. package/src/transport/records.js +16 -7
  320. package/src/utils/ecdsaDer.js +106 -0
  321. package/src/utils/wasmCrypto.js +0 -43
  322. package/templates/gpu-module/README.md +48 -0
  323. package/templates/gpu-module/include/space_data_gpu_abi.h +122 -0
  324. package/templates/gpu-module/manifest.json +84 -0
  325. package/schemas/PluginInvokeRequest.fbs +0 -18
  326. package/schemas/PluginInvokeResponse.fbs +0 -30
  327. package/schemas/spacedatastandards/PLG.fbs +0 -191
  328. package/src/generated/orbpro/invoke/plugin-invoke-request.d.ts +0 -51
  329. package/src/generated/orbpro/invoke/plugin-invoke-request.d.ts.map +0 -1
  330. package/src/generated/orbpro/invoke/plugin-invoke-request.js +0 -131
  331. package/src/generated/orbpro/invoke/plugin-invoke-request.js.map +0 -1
  332. package/src/generated/orbpro/invoke/plugin-invoke-request.ts +0 -173
  333. package/src/generated/orbpro/invoke/plugin-invoke-response.d.ts +0 -76
  334. package/src/generated/orbpro/invoke/plugin-invoke-response.d.ts.map +0 -1
  335. package/src/generated/orbpro/invoke/plugin-invoke-response.js +0 -184
  336. package/src/generated/orbpro/invoke/plugin-invoke-response.js.map +0 -1
  337. package/src/generated/orbpro/invoke/plugin-invoke-response.ts +0 -243
  338. package/src/generated/orbpro/invoke.d.ts +0 -3
  339. package/src/generated/orbpro/invoke.js +0 -5
  340. package/src/generated/spacedatastandards/plg/entry-function.js +0 -86
  341. package/src/generated/spacedatastandards/plg/entry-function.ts +0 -119
  342. package/src/generated/spacedatastandards/plg/index.js +0 -16
  343. package/src/generated/spacedatastandards/plg/index.ts +0 -11
  344. package/src/generated/spacedatastandards/plg/plg.js +0 -657
  345. package/src/generated/spacedatastandards/plg/plg.ts +0 -924
  346. package/src/generated/spacedatastandards/plg/plugin-capability.js +0 -66
  347. package/src/generated/spacedatastandards/plg/plugin-category.js +0 -15
  348. package/src/generated/spacedatastandards/plg/plugin-category.ts +0 -53
  349. package/src/generated/spacedatastandards/plg/plugin-dependency.js +0 -63
  350. package/src/generated/spacedatastandards/plg/plugin-dependency.ts +0 -86
  351. package/src/generated/spacedatastandards/plg/publication-state.js +0 -9
  352. package/src/generated/spacedatastandards/plg/purchase-tier.js +0 -9
  353. /package/src/generated/spacedatastandards/plg/{publication-state.ts → publicationState.ts} +0 -0
  354. /package/src/generated/spacedatastandards/plg/{purchase-tier.ts → purchaseTier.ts} +0 -0
@@ -0,0 +1,39 @@
1
+ # Tri-runtime parity harness: Docker WasmEdge lane image.
2
+ #
3
+ # The WasmEdge version is NOT pinned here — it is injected from
4
+ # src/testing/wasmedgePin.json (the single pin source) via --build-arg by
5
+ # the parity harness (`ensureDockerParityImage`). Building this file by hand
6
+ # with a different version produces an image the harness will reject at
7
+ # version-check time.
8
+ FROM ubuntu:24.04
9
+
10
+ ARG WASMEDGE_VERSION
11
+ RUN test -n "${WASMEDGE_VERSION}" || (echo "WASMEDGE_VERSION build-arg is required (injected from src/testing/wasmedgePin.json)" && exit 1)
12
+
13
+ RUN apt-get update \
14
+ && apt-get install -y --no-install-recommends curl ca-certificates \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ RUN set -eux; \
18
+ arch="$(uname -m)"; \
19
+ case "${arch}" in \
20
+ x86_64) triple="manylinux_2_28_x86_64" ;; \
21
+ aarch64) triple="manylinux_2_28_aarch64" ;; \
22
+ *) echo "unsupported architecture: ${arch}"; exit 1 ;; \
23
+ esac; \
24
+ curl -sSfL \
25
+ "https://github.com/WasmEdge/WasmEdge/releases/download/${WASMEDGE_VERSION}/WasmEdge-${WASMEDGE_VERSION}-${triple}.tar.gz" \
26
+ -o /tmp/wasmedge.tar.gz; \
27
+ mkdir -p /opt/wasmedge; \
28
+ # The manylinux release tarballs are rootless (bin/, lib64/, include/ at
29
+ # the archive top level) — extract as-is, no component stripping.
30
+ tar -xzf /tmp/wasmedge.tar.gz -C /opt/wasmedge; \
31
+ rm /tmp/wasmedge.tar.gz; \
32
+ LD_LIBRARY_PATH=/opt/wasmedge/lib64:/opt/wasmedge/lib /opt/wasmedge/bin/wasmedge --version
33
+
34
+ ENV PATH="/opt/wasmedge/bin:${PATH}" \
35
+ LD_LIBRARY_PATH="/opt/wasmedge/lib64:/opt/wasmedge/lib"
36
+
37
+ # The parity harness always runs this image with an explicit wasmedge argv
38
+ # (flags + guest module + guest args) so the container is a pure runtime shell.
39
+ ENTRYPOINT ["wasmedge"]
@@ -8,6 +8,9 @@ import type {
8
8
  export interface HarnessInputFrame {
9
9
  portId?: string | null;
10
10
  typeRef?: PayloadTypeRef | null;
11
+ alignment?: number;
12
+ offset?: number;
13
+ size?: number;
11
14
  payload?: Uint8Array | ArrayBuffer | ArrayBufferView | string | null;
12
15
  }
13
16
 
@@ -187,6 +190,12 @@ export interface PluginInvokeProcessClient {
187
190
  invokeRaw(requestBytes: Uint8Array | ArrayBuffer | ArrayBufferView): Promise<Uint8Array>;
188
191
  invoke(request: {
189
192
  methodId?: string | null;
193
+ /**
194
+ * Browser direct invoke requires this to be a full view of the active
195
+ * SharedArrayBuffer-backed module memory; foreign arenas and
196
+ * payload-bearing frames are rejected.
197
+ */
198
+ externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
190
199
  inputs?: HarnessInputFrame[];
191
200
  }): Promise<{
192
201
  statusCode: number;
@@ -250,6 +259,7 @@ export interface ModuleHarness {
250
259
  invokeRaw(requestBytes: Uint8Array | ArrayBuffer | ArrayBufferView): Promise<Uint8Array>;
251
260
  invoke(request: {
252
261
  methodId?: string | null;
262
+ externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
253
263
  inputs?: HarnessInputFrame[];
254
264
  }): Promise<{
255
265
  statusCode: number;
@@ -339,8 +349,24 @@ export interface BrowserModuleHarness {
339
349
  invokeRaw(
340
350
  requestBytes: Uint8Array | ArrayBuffer | ArrayBufferView,
341
351
  ): Promise<Uint8Array>;
352
+ invokeDirect(request: {
353
+ methodId?: string | null;
354
+ /**
355
+ * Browser direct invoke requires this to be a full view of the active
356
+ * SharedArrayBuffer-backed module memory; foreign arenas and
357
+ * payload-bearing frames are rejected.
358
+ */
359
+ externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
360
+ inputs?: HarnessInputFrame[];
361
+ }): Promise<{
362
+ statusCode: number;
363
+ errorCode?: string | null;
364
+ errorMessage?: string | null;
365
+ outputs: HarnessInputFrame[];
366
+ }>;
342
367
  invoke(request: {
343
368
  methodId?: string | null;
369
+ externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
344
370
  inputs?: HarnessInputFrame[];
345
371
  }): Promise<{
346
372
  statusCode: number;
@@ -418,11 +444,18 @@ export function createBrowserModuleHarness(options?: {
418
444
  hostOptions?: unknown;
419
445
  args?: string[];
420
446
  env?: Record<string, string>;
447
+ manifest?: Record<string, unknown>;
421
448
  surface?: "direct" | "command";
422
449
  performance?: {
423
450
  now(): number;
424
451
  timeOrigin: number;
425
452
  };
453
+ wasmMemory?: WebAssembly.Memory;
454
+ memory?: WebAssembly.Memory;
455
+ sharedMemory?: boolean;
456
+ allowRawInvoke?: boolean;
457
+ initialMemoryBytes?: number;
458
+ maximumMemoryBytes?: number;
426
459
  logOutput?: boolean;
427
460
  }): Promise<BrowserModuleHarness>;
428
461
 
@@ -446,3 +479,121 @@ export function buildWasmEdgeEmscriptenPthreadRunner(options: {
446
479
  output?: string;
447
480
  cwd?: string;
448
481
  }): Promise<string>;
482
+
483
+ // --- Tri-runtime parity harness (browser / WasmEdge / Docker WasmEdge) -------
484
+
485
+ export declare const PARITY_LANES: readonly ["browser", "wasmedge", "docker-wasmedge"];
486
+ export type ParityLaneName = (typeof PARITY_LANES)[number];
487
+
488
+ export declare const ParityExitClass: Readonly<{
489
+ Ok: "ok";
490
+ GuestError: "guest-error";
491
+ Trap: "trap";
492
+ HarnessFailure: "harness-failure";
493
+ }>;
494
+
495
+ export interface WasmEdgePin {
496
+ wasmedgeVersion: string;
497
+ dockerImageRepository: string;
498
+ dockerImage: string;
499
+ dockerfilePath: string;
500
+ dockerfileContextDir: string;
501
+ pinPath: string;
502
+ }
503
+
504
+ export interface ParityPlanCase {
505
+ id: string;
506
+ stdinBytes: Uint8Array;
507
+ env: Record<string, string>;
508
+ args: readonly string[];
509
+ expect: "ok" | "guest-error" | "trap" | null;
510
+ threadCounts: readonly number[];
511
+ }
512
+
513
+ export interface ParityPlan {
514
+ name: string;
515
+ threadEnvVar: string;
516
+ cases: readonly ParityPlanCase[];
517
+ }
518
+
519
+ export interface ParityRunResult {
520
+ lane?: ParityLaneName;
521
+ caseId: string;
522
+ threadCount: number;
523
+ exitClass: string;
524
+ exitDetail?: string | null;
525
+ stdout: Uint8Array;
526
+ stderr?: Uint8Array;
527
+ stateFiles?: Record<string, string> | null;
528
+ }
529
+
530
+ export interface ParityFailure {
531
+ caseId?: string;
532
+ kind: string;
533
+ message: string;
534
+ }
535
+
536
+ export interface ParityReport {
537
+ ok: boolean;
538
+ fixture: string;
539
+ wasmPath: string;
540
+ artifactSha256: string;
541
+ moduleSha256: string;
542
+ pin: string;
543
+ lanes: Array<{ lane: string; runs: number; durationMs: number }>;
544
+ cases: string[];
545
+ comparisons: number;
546
+ failures: ParityFailure[];
547
+ runs: Array<{
548
+ lane: string;
549
+ caseId: string;
550
+ threadCount: number;
551
+ exitClass: string;
552
+ exitDetail: string | null;
553
+ stdoutSha256: string;
554
+ stdoutLength: number;
555
+ }>;
556
+ }
557
+
558
+ export declare function loadWasmEdgePin(): WasmEdgePin;
559
+ export declare function assertWasmEdgeVersionMatchesPin(
560
+ versionOutput: string,
561
+ pin: WasmEdgePin,
562
+ context: string,
563
+ ): string;
564
+ export declare function normalizeParityFixture(
565
+ fixture: unknown,
566
+ options?: { fixtureDir?: string },
567
+ ): Promise<ParityPlan>;
568
+ export declare function loadParityFixture(fixturePath: string): Promise<ParityPlan>;
569
+ export declare function diffParityRuns(
570
+ plan: ParityPlan,
571
+ runs: ParityRunResult[],
572
+ ): { ok: boolean; failures: ParityFailure[]; comparisons: number };
573
+ export declare function formatParityReport(report: ParityReport): string;
574
+ export declare function runParityHarness(options: {
575
+ wasmPath: string;
576
+ plan?: ParityPlan;
577
+ fixturePath?: string;
578
+ lanes?: string[];
579
+ laneRunners?: Record<string, (context: unknown) => Promise<ParityRunResult[]>>;
580
+ injectDivergence?: string;
581
+ chromeBinary?: string;
582
+ wasmedgeBinary?: string;
583
+ dockerBinary?: string;
584
+ dockerPlatform?: string;
585
+ autoBuildDockerImage?: boolean;
586
+ allowSingleLane?: boolean;
587
+ timeoutMs?: number;
588
+ log?: (line: string) => void;
589
+ }): Promise<ParityReport>;
590
+
591
+ export declare const defaultParityLaneRunners: Readonly<
592
+ Record<ParityLaneName, (context: unknown) => Promise<ParityRunResult[]>>
593
+ >;
594
+ export declare function ensureDockerParityImage(context: unknown): Promise<string>;
595
+ export declare function resolveChromeBinary(context?: unknown): Promise<string>;
596
+ export declare function resolveWasmEdgeBinary(context?: unknown): Promise<string>;
597
+ export declare function runBrowserLane(context: unknown): Promise<ParityRunResult[]>;
598
+ export declare function runDockerWasmEdgeLane(context: unknown): Promise<ParityRunResult[]>;
599
+ export declare function runNativeWasmEdgeLane(context: unknown): Promise<ParityRunResult[]>;
@@ -11,6 +11,7 @@ export {
11
11
  createBrowserModuleHarness,
12
12
  detectArtifactProfile,
13
13
  } from "./browserModuleHarness.js";
14
+ export { createWorkerModuleHarness } from "./workerModuleHarness.js";
14
15
  export {
15
16
  buildWasmEdgeSpawnEnv,
16
17
  createPluginInvokeProcessClient,
@@ -27,6 +28,26 @@ export {
27
28
  resolveModuleHarnessLaunchPlan,
28
29
  } from "./moduleHarness.js";
29
30
  export { createModuleFlatBufferStreamPump } from "./moduleFlatbufferStreamPump.js";
31
+ export {
32
+ PARITY_LANES,
33
+ ExitClass as ParityExitClass,
34
+ assertWasmEdgeVersionMatchesPin,
35
+ diffParityRuns,
36
+ formatParityReport,
37
+ loadParityFixture,
38
+ loadWasmEdgePin,
39
+ normalizeParityFixture,
40
+ runParityHarness,
41
+ } from "./parityHarness.js";
42
+ export {
43
+ defaultParityLaneRunners,
44
+ ensureDockerParityImage,
45
+ resolveChromeBinary,
46
+ resolveWasmEdgeBinary,
47
+ runBrowserLane,
48
+ runDockerWasmEdgeLane,
49
+ runNativeWasmEdgeLane,
50
+ } from "./parityLanes.js";
30
51
 
31
52
  const CapabilitySurfaceMatrix = Object.freeze({
32
53
  logging: Object.freeze({
@@ -1493,6 +1493,31 @@ static bool invoke_optional_module_init(
1493
1493
  WasmEdge_ExecutorContext *executor,
1494
1494
  WasmEdge_ModuleInstanceContext *module,
1495
1495
  bool service_mode) {
1496
+ // Reactor artifacts (the isomorphic-pthreads wasi-threads default, built with
1497
+ // -mexec-model=reactor) export `_initialize` and NO `_start`. `_initialize`
1498
+ // runs the global constructors AND the WASI reactor init; it is the canonical,
1499
+ // complete init entry. It MUST be invoked or global ctors never execute under
1500
+ // WasmEdge (static registration / std::once / SDS + FlatSQL statics silently
1501
+ // stay uninitialized). This applies in BOTH the service_mode (resident plugin)
1502
+ // and one-shot paths. Command modules (which export `_start`) keep their
1503
+ // EXISTING behavior exactly: the `_initialize` branch is only taken when there
1504
+ // is no `_start`.
1505
+ WasmEdge_FunctionInstanceContext *start = find_function(module, "_start");
1506
+ if (start == NULL) {
1507
+ WasmEdge_FunctionInstanceContext *initialize =
1508
+ find_function(module, "_initialize");
1509
+ if (initialize != NULL) {
1510
+ return invoke_function(
1511
+ executor,
1512
+ initialize,
1513
+ NULL,
1514
+ 0,
1515
+ NULL,
1516
+ 0,
1517
+ "_initialize");
1518
+ }
1519
+ }
1520
+
1496
1521
  if (service_mode) {
1497
1522
  WasmEdge_FunctionInstanceContext *ctors =
1498
1523
  find_function(module, "__wasm_call_ctors");
@@ -1509,7 +1534,6 @@ static bool invoke_optional_module_init(
1509
1534
  return true;
1510
1535
  }
1511
1536
 
1512
- WasmEdge_FunctionInstanceContext *start = find_function(module, "_start");
1513
1537
  if (start != NULL) {
1514
1538
  return invoke_function(executor, start, NULL, 0, NULL, 0, "_start");
1515
1539
  }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Browser-side entry for the tri-runtime parity harness.
3
+ *
4
+ * esbuild-bundled by parityLanes.js and served to a REAL headless Chrome
5
+ * behind COOP/COEP headers (cross-origin isolated, SharedArrayBuffer-capable).
6
+ * Never executed under jsdom — jsdom masks Illegal-invocation and threading
7
+ * realities, which is exactly what this lane exists to catch.
8
+ *
9
+ * Protocol with the lane server (same origin):
10
+ * GET /plan -> {threadEnvVar, cases:[{id, stdinBase64, env, args, threadCounts}]}
11
+ * GET /module.wasm -> the ONE isomorphic artifact
12
+ * POST /done -> {runs:[...]} on completion or {fatal} on runner failure
13
+ */
14
+
15
+ import { createBrowserModuleHarness } from "./browserModuleHarness.js";
16
+
17
+ const OK = "ok";
18
+ const GUEST_ERROR = "guest-error";
19
+ const TRAP = "trap";
20
+
21
+ function base64ToBytes(value) {
22
+ const binary = atob(String(value ?? ""));
23
+ const bytes = new Uint8Array(binary.length);
24
+ for (let index = 0; index < binary.length; index += 1) {
25
+ bytes[index] = binary.charCodeAt(index);
26
+ }
27
+ return bytes;
28
+ }
29
+
30
+ function bytesToBase64(bytes) {
31
+ let binary = "";
32
+ const chunk = 0x8000;
33
+ for (let index = 0; index < bytes.length; index += chunk) {
34
+ binary += String.fromCharCode(...bytes.subarray(index, index + chunk));
35
+ }
36
+ return btoa(binary);
37
+ }
38
+
39
+ function classifyBrowserError(error) {
40
+ // WasiExitError with code 0 is swallowed inside the harness; reaching here
41
+ // with one means a real nonzero guest exit.
42
+ if (error?.name === "WasiExitError") {
43
+ return { exitClass: GUEST_ERROR, exitDetail: `exit=${error.code}` };
44
+ }
45
+ return {
46
+ exitClass: TRAP,
47
+ exitDetail: `${error?.name ?? "Error"}: ${error?.message ?? String(error)}`,
48
+ };
49
+ }
50
+
51
+ export async function runParityPlanInBrowser({ baseUrl = "" } = {}) {
52
+ const status = globalThis.document?.getElementById?.("status") ?? null;
53
+ const setStatus = (text) => {
54
+ if (status) status.textContent = text;
55
+ };
56
+
57
+ const [planResponse, moduleResponse] = await Promise.all([
58
+ fetch(`${baseUrl}/plan`),
59
+ fetch(`${baseUrl}/module.wasm`),
60
+ ]);
61
+ if (!planResponse.ok || !moduleResponse.ok) {
62
+ throw new Error("parity browser runner: failed to fetch plan or module.");
63
+ }
64
+ const plan = await planResponse.json();
65
+ const moduleBytes = new Uint8Array(await moduleResponse.arrayBuffer());
66
+
67
+ if (globalThis.crossOriginIsolated !== true) {
68
+ throw new Error(
69
+ "parity browser runner: page is not cross-origin isolated (COOP/COEP missing) — SAB-backed thread parity cannot be validated.",
70
+ );
71
+ }
72
+
73
+ const runs = [];
74
+ for (const planCase of plan.cases) {
75
+ const stdinBytes = base64ToBytes(planCase.stdinBase64);
76
+ for (const threadCount of planCase.threadCounts) {
77
+ setStatus(`case ${planCase.id} @ ${threadCount} thread(s)`);
78
+ let exitClass = OK;
79
+ let exitDetail = null;
80
+ let stdout = new Uint8Array(0);
81
+ let stderr = new Uint8Array(0);
82
+ let harness = null;
83
+ try {
84
+ harness = await createBrowserModuleHarness({
85
+ wasmSource: moduleBytes.slice(),
86
+ surface: "command",
87
+ args: planCase.args,
88
+ env: {
89
+ ...planCase.env,
90
+ [plan.threadEnvVar]: String(threadCount),
91
+ },
92
+ });
93
+ stdout = await harness.invokeRaw(stdinBytes);
94
+ stderr = harness.wasi?.stderr ?? new Uint8Array(0);
95
+ } catch (error) {
96
+ ({ exitClass, exitDetail } = classifyBrowserError(error));
97
+ } finally {
98
+ try {
99
+ harness?.destroy?.();
100
+ } catch {
101
+ /* teardown must never mask the run result */
102
+ }
103
+ }
104
+ runs.push({
105
+ caseId: planCase.id,
106
+ threadCount,
107
+ exitClass,
108
+ exitDetail,
109
+ stdoutBase64: bytesToBase64(stdout),
110
+ stderrBase64: bytesToBase64(stderr),
111
+ });
112
+ }
113
+ }
114
+ setStatus(`done: ${runs.length} run(s)`);
115
+ return runs;
116
+ }
117
+
118
+ async function postDone(body) {
119
+ await fetch("/done", {
120
+ method: "POST",
121
+ headers: { "Content-Type": "application/json" },
122
+ body: JSON.stringify(body),
123
+ });
124
+ }
125
+
126
+ // Auto-run only inside a real browser page (the served runner). Node imports
127
+ // of this module (tests, bundlers) never auto-run.
128
+ if (
129
+ typeof globalThis.document !== "undefined" &&
130
+ typeof globalThis.window !== "undefined" &&
131
+ globalThis.__SDM_PARITY_AUTORUN__ !== false
132
+ ) {
133
+ runParityPlanInBrowser({})
134
+ .then((runs) => postDone({ runs }))
135
+ .catch((error) =>
136
+ postDone({ fatal: `${error?.name ?? "Error"}: ${error?.message ?? error}` }),
137
+ );
138
+ }