space-data-module-sdk 0.8.3 → 0.8.5

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 +26 -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 +716 -10
  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 +299 -11
  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,323 @@
1
+ import { PluginManifestT } from "../generated/orbpro/manifest.js";
2
+ import { decodePluginManifestPman } from "../flow/flowCodec.js";
3
+ import { buildLegacySdnMetadata } from "../compat/sdnLegacy.js";
4
+
5
+ const textDecoder = new TextDecoder();
6
+ const textEncoder = new TextEncoder();
7
+
8
+ function asManifest(manifest) {
9
+ if (manifest instanceof PluginManifestT) {
10
+ return manifest;
11
+ }
12
+ if (
13
+ manifest instanceof Uint8Array ||
14
+ manifest instanceof ArrayBuffer ||
15
+ ArrayBuffer.isView(manifest)
16
+ ) {
17
+ return decodePluginManifestPman(manifest);
18
+ }
19
+ return Object.assign(new PluginManifestT(), manifest);
20
+ }
21
+
22
+ function asArray(value) {
23
+ return Array.isArray(value) ? value : [];
24
+ }
25
+
26
+ function asString(value) {
27
+ if (value === null || value === undefined) {
28
+ return null;
29
+ }
30
+ if (typeof value === "string") {
31
+ return value;
32
+ }
33
+ if (value instanceof Uint8Array) {
34
+ return textDecoder.decode(value);
35
+ }
36
+ return String(value);
37
+ }
38
+
39
+ function unique(values) {
40
+ return Array.from(new Set(values.filter(Boolean)));
41
+ }
42
+
43
+ function escapeCStringBytes(value) {
44
+ return Array.from(
45
+ textEncoder.encode(value),
46
+ (byte) => `\\x${byte.toString(16).padStart(2, "0")}`,
47
+ ).join("");
48
+ }
49
+
50
+ function resolveRequestMethodId(manifest, explicitMethodId) {
51
+ const declaredMethodIds = unique(
52
+ asArray(manifest.protocols).map((protocol) => asString(protocol?.methodId)),
53
+ );
54
+
55
+ if (explicitMethodId) {
56
+ const normalizedMethodId = asString(explicitMethodId);
57
+ if (
58
+ declaredMethodIds.length > 0 &&
59
+ !declaredMethodIds.includes(normalizedMethodId)
60
+ ) {
61
+ throw new Error(
62
+ `Requested legacy handle_request binding "${normalizedMethodId}" is not declared by the manifest protocols.`,
63
+ );
64
+ }
65
+ return normalizedMethodId;
66
+ }
67
+
68
+ if (declaredMethodIds.length <= 1) {
69
+ return declaredMethodIds[0] ?? null;
70
+ }
71
+
72
+ throw new Error(
73
+ "Manifest declares multiple protocol methods; requestMethodId is required because legacy plugin_handle_request can only bind one canonical method.",
74
+ );
75
+ }
76
+
77
+ function getMethodTableEntry(methodTable, methodId) {
78
+ if (!methodId) {
79
+ return null;
80
+ }
81
+ if (methodTable instanceof Map) {
82
+ return methodTable.get(methodId) ?? null;
83
+ }
84
+ if (typeof methodTable === "object" && methodTable !== null) {
85
+ return methodTable[methodId] ?? null;
86
+ }
87
+ return null;
88
+ }
89
+
90
+ function collectCronBindings(manifest, methodTable) {
91
+ const methodIds = unique(
92
+ asArray(manifest.timers).map((timer) => asString(timer?.methodId)),
93
+ );
94
+
95
+ return methodIds.map((methodId) => {
96
+ const entry = getMethodTableEntry(methodTable, methodId);
97
+ if (!entry?.cronSymbol) {
98
+ throw new Error(
99
+ `Manifest timer method "${methodId}" is missing a cronSymbol in the SDN shim method table.`,
100
+ );
101
+ }
102
+ return {
103
+ methodId,
104
+ cronSymbol: asString(entry.cronSymbol),
105
+ };
106
+ });
107
+ }
108
+
109
+ function renderExternDeclarations(requestBinding, cronBindings) {
110
+ const lines = [];
111
+ if (requestBinding?.requestSymbol) {
112
+ lines.push(
113
+ `extern int32_t ${requestBinding.requestSymbol}(const uint8_t* request_ptr, size_t request_len, const char* host_ptr, uint8_t* output_ptr, size_t output_cap, size_t* output_len_ptr);`,
114
+ );
115
+ }
116
+ for (const binding of cronBindings) {
117
+ lines.push(
118
+ `extern int32_t ${binding.cronSymbol}(const uint8_t* input_ptr, size_t input_len, uint8_t* output_ptr, size_t output_cap, size_t* output_len_ptr);`,
119
+ );
120
+ }
121
+ return unique(lines).join("\n");
122
+ }
123
+
124
+ function renderCronDispatch(cronBindings) {
125
+ if (cronBindings.length === 0) {
126
+ return ` (void)input_ptr;
127
+ (void)input_len;
128
+ (void)output_ptr;
129
+ (void)output_cap;
130
+ return ORBPRO_SDN_ERR_UNKNOWN_METHOD;`;
131
+ }
132
+
133
+ return cronBindings
134
+ .map(
135
+ (
136
+ binding,
137
+ index,
138
+ ) => `${index === 0 ? " if" : " else if"} (orbpro_sdn_method_equals(method_ptr, method_len, "${binding.methodId}")) {
139
+ size_t output_len = 0;
140
+ const int32_t status = ${binding.cronSymbol}(
141
+ input_ptr,
142
+ input_len,
143
+ output_ptr,
144
+ output_cap,
145
+ &output_len);
146
+ if (status != 0) {
147
+ return status;
148
+ }
149
+ if (output_len > output_cap) {
150
+ return ORBPRO_SDN_ERR_OUTPUT_TOO_LARGE;
151
+ }
152
+ return (int32_t)output_len;
153
+ }`,
154
+ )
155
+ .concat(" return ORBPRO_SDN_ERR_UNKNOWN_METHOD;")
156
+ .join("\n");
157
+ }
158
+
159
+ export function generateLegacySdnShimSource(options = {}) {
160
+ const {
161
+ manifest,
162
+ methodTable = {},
163
+ requestMethodId = undefined,
164
+ metadataOptions = {},
165
+ } = options;
166
+
167
+ const normalizedManifest = asManifest(manifest);
168
+ const pluginId = asString(normalizedManifest.pluginId);
169
+ if (!pluginId) {
170
+ throw new Error(
171
+ "Cannot generate SDN shims for a manifest without pluginId.",
172
+ );
173
+ }
174
+
175
+ const resolvedRequestMethodId = resolveRequestMethodId(
176
+ normalizedManifest,
177
+ requestMethodId,
178
+ );
179
+ const requestBinding = resolvedRequestMethodId
180
+ ? {
181
+ methodId: resolvedRequestMethodId,
182
+ requestSymbol: asString(
183
+ getMethodTableEntry(methodTable, resolvedRequestMethodId)
184
+ ?.requestSymbol,
185
+ ),
186
+ }
187
+ : null;
188
+
189
+ if (
190
+ resolvedRequestMethodId &&
191
+ (!requestBinding?.requestSymbol ||
192
+ requestBinding.requestSymbol.length === 0)
193
+ ) {
194
+ throw new Error(
195
+ `Manifest request method "${resolvedRequestMethodId}" is missing a requestSymbol in the SDN shim method table.`,
196
+ );
197
+ }
198
+
199
+ const cronBindings = collectCronBindings(normalizedManifest, methodTable);
200
+ const externDeclarations = renderExternDeclarations(
201
+ requestBinding,
202
+ cronBindings,
203
+ );
204
+ const metadataJson = JSON.stringify(
205
+ buildLegacySdnMetadata(normalizedManifest, metadataOptions),
206
+ );
207
+ const metadataLiteral = escapeCStringBytes(metadataJson);
208
+ const protocolComments = asArray(normalizedManifest.protocols)
209
+ .map((protocol) => {
210
+ const protocolId = asString(protocol?.protocolId) ?? "<unnamed>";
211
+ const methodId = asString(protocol?.methodId) ?? "<unset>";
212
+ return ` * ${protocolId} -> ${methodId}`;
213
+ })
214
+ .join("\n");
215
+ const timerComments = asArray(normalizedManifest.timers)
216
+ .map((timer) => {
217
+ const timerId = asString(timer?.timerId) ?? "<unnamed>";
218
+ const methodId = asString(timer?.methodId) ?? "<unset>";
219
+ return ` * ${timerId} -> ${methodId}`;
220
+ })
221
+ .join("\n");
222
+
223
+ return `/**
224
+ * SDN compatibility shims for ${pluginId}
225
+ *
226
+ * Generated by @orbpro/integration-sdk from the canonical OrbPro manifest.
227
+ * These exports are legacy host adapters, not the canonical plugin ABI.
228
+ *
229
+ * Legacy plugin_handle_request binding:
230
+ * ${resolvedRequestMethodId ?? "<stubbed>"}
231
+ *
232
+ * Declared protocol routes:
233
+ ${protocolComments || " * <none>"}
234
+ *
235
+ * Declared cron routes:
236
+ ${timerComments || " * <none>"}
237
+ */
238
+
239
+ #include <stddef.h>
240
+ #include <stdint.h>
241
+ #include <string.h>
242
+
243
+ #ifdef __EMSCRIPTEN__
244
+ #include <emscripten/emscripten.h>
245
+ #else
246
+ #define EMSCRIPTEN_KEEPALIVE
247
+ #endif
248
+
249
+ #define ORBPRO_SDN_ERR_BAD_ARG (-1)
250
+ #define ORBPRO_SDN_ERR_METADATA_BUFFER_TOO_SMALL (-2)
251
+ #define ORBPRO_SDN_ERR_UNKNOWN_METHOD (-3)
252
+ #define ORBPRO_SDN_ERR_REQUEST_UNAVAILABLE (-4)
253
+ #define ORBPRO_SDN_ERR_OUTPUT_TOO_LARGE (-5)
254
+
255
+ ${externDeclarations || "/* No external handler declarations were required. */"}
256
+
257
+ static const char ORBPRO_SDN_METADATA_JSON[] = "${metadataLiteral}";
258
+ static const size_t ORBPRO_SDN_METADATA_JSON_LEN = sizeof(ORBPRO_SDN_METADATA_JSON) - 1;
259
+
260
+ static int orbpro_sdn_method_equals(const char* method_ptr, size_t method_len, const char* expected) {
261
+ const size_t expected_len = strlen(expected);
262
+ return method_ptr != NULL &&
263
+ expected_len == method_len &&
264
+ memcmp(method_ptr, expected, method_len) == 0;
265
+ }
266
+
267
+ EMSCRIPTEN_KEEPALIVE
268
+ int32_t plugin_get_metadata(uint8_t* output, size_t output_size) {
269
+ if (output == NULL) {
270
+ return ORBPRO_SDN_ERR_BAD_ARG;
271
+ }
272
+ if (output_size < ORBPRO_SDN_METADATA_JSON_LEN) {
273
+ return ORBPRO_SDN_ERR_METADATA_BUFFER_TOO_SMALL;
274
+ }
275
+ memcpy(output, ORBPRO_SDN_METADATA_JSON, ORBPRO_SDN_METADATA_JSON_LEN);
276
+ return (int32_t)ORBPRO_SDN_METADATA_JSON_LEN;
277
+ }
278
+
279
+ EMSCRIPTEN_KEEPALIVE
280
+ int32_t plugin_handle_request(
281
+ const uint8_t* request_ptr,
282
+ size_t request_len,
283
+ const char* host_ptr,
284
+ uint8_t* output_ptr,
285
+ size_t output_cap,
286
+ size_t* output_len_ptr) {
287
+ if (output_len_ptr == NULL) {
288
+ return ORBPRO_SDN_ERR_BAD_ARG;
289
+ }
290
+ *output_len_ptr = 0;
291
+ ${
292
+ requestBinding?.requestSymbol
293
+ ? ` return ${requestBinding.requestSymbol}(
294
+ request_ptr,
295
+ request_len,
296
+ host_ptr,
297
+ output_ptr,
298
+ output_cap,
299
+ output_len_ptr);`
300
+ : ` (void)request_ptr;
301
+ (void)request_len;
302
+ (void)host_ptr;
303
+ (void)output_ptr;
304
+ (void)output_cap;
305
+ return ORBPRO_SDN_ERR_REQUEST_UNAVAILABLE;`
306
+ }
307
+ }
308
+
309
+ EMSCRIPTEN_KEEPALIVE
310
+ int32_t plugin_cron(
311
+ const char* method_ptr,
312
+ size_t method_len,
313
+ const uint8_t* input_ptr,
314
+ size_t input_len,
315
+ uint8_t* output_ptr,
316
+ size_t output_cap) {
317
+ if (method_ptr == NULL) {
318
+ return ORBPRO_SDN_ERR_BAD_ARG;
319
+ }
320
+ ${renderCronDispatch(cronBindings)}
321
+ }
322
+ `;
323
+ }
@@ -0,0 +1,150 @@
1
+ // Resolves the WASI-threads (wasm32-wasip1-threads) toolchain used to build
2
+ // isomorphic pthreads module artifacts.
3
+ //
4
+ // WHY WASI-THREADS AND NOT EMSCRIPTEN -pthread:
5
+ // Emscripten's `-pthread` (even with -s STANDALONE_WASM=1) emits the browser-
6
+ // only Web Worker + postMessage thread model: the wasm imports
7
+ // `env.__pthread_create_js` and `env._emscripten_*` mailbox/postMessage hooks
8
+ // and has NO wasi thread-spawn contract. That artifact CANNOT spawn threads
9
+ // under WasmEdge (there is no JS runtime to satisfy those imports). WasmEdge's
10
+ // actual thread mechanism is wasi-threads: the guest imports `wasi.thread-spawn`
11
+ // and exports `wasi_thread_start`, over an imported shared memory. Compiling
12
+ // with clang `--target=wasm32-wasip1-threads -pthread` produces exactly that
13
+ // contract, which threads under WasmEdge AND loads in the browser via a
14
+ // wasi-threads (SharedArrayBuffer + Worker) shim. See docs/isomorphic-pthreads.md.
15
+
16
+ import { execFileSync } from "node:child_process";
17
+ import { existsSync, readdirSync } from "node:fs";
18
+ import path from "node:path";
19
+
20
+ const DEFAULT_TARGET = "wasm32-wasip1-threads";
21
+ // The compiler-rt builtins for the threads target live under this normalized
22
+ // triple inside the resource dir.
23
+ const RESOURCE_TRIPLE = "wasm32-unknown-wasip1-threads";
24
+ // The threads libc/libc++ live under this triple inside the sysroot.
25
+ const SYSROOT_TRIPLE = "wasm32-wasip1-threads";
26
+
27
+ function firstExisting(candidates, probe) {
28
+ for (const candidate of candidates) {
29
+ if (!candidate) continue;
30
+ try {
31
+ if (existsSync(probe(candidate))) {
32
+ return candidate;
33
+ }
34
+ } catch {
35
+ // ignore and keep searching
36
+ }
37
+ }
38
+ return null;
39
+ }
40
+
41
+ function globVersionedRoots(cellarDir, tail) {
42
+ try {
43
+ return readdirSync(cellarDir)
44
+ .map((entry) => path.join(cellarDir, entry, tail))
45
+ .sort()
46
+ .reverse();
47
+ } catch {
48
+ return [];
49
+ }
50
+ }
51
+
52
+ function resolveSysroot() {
53
+ if (process.env.SDN_WASI_SYSROOT) {
54
+ return process.env.SDN_WASI_SYSROOT;
55
+ }
56
+ const candidates = [
57
+ "/opt/homebrew/share/wasi-sysroot",
58
+ "/usr/local/share/wasi-sysroot",
59
+ "/opt/wasi-sdk/share/wasi-sysroot",
60
+ ...globVersionedRoots("/opt/homebrew/Cellar/wasi-libc", "share/wasi-sysroot"),
61
+ ];
62
+ return firstExisting(candidates, (root) =>
63
+ path.join(root, "lib", SYSROOT_TRIPLE, "libc.a"),
64
+ );
65
+ }
66
+
67
+ function resolveResourceDir() {
68
+ if (process.env.SDN_WASI_RESOURCE_DIR) {
69
+ return process.env.SDN_WASI_RESOURCE_DIR;
70
+ }
71
+ const candidates = [
72
+ "/opt/homebrew/share/wasi-runtimes",
73
+ "/usr/local/share/wasi-runtimes",
74
+ ...globVersionedRoots(
75
+ "/opt/homebrew/Cellar/wasi-runtimes",
76
+ "share/wasi-runtimes",
77
+ ),
78
+ ];
79
+ return firstExisting(candidates, (root) =>
80
+ path.join(root, "lib", RESOURCE_TRIPLE, "libclang_rt.builtins.a"),
81
+ );
82
+ }
83
+
84
+ let cachedToolchain;
85
+
86
+ /**
87
+ * Resolve the wasi-threads toolchain. Returns a descriptor with the C/C++ driver
88
+ * commands and the target/sysroot/resource-dir args that must be applied to
89
+ * every compile and the final link. Throws a clear, actionable error (listing
90
+ * the env overrides) when the toolchain or its threads sysroot is unavailable.
91
+ *
92
+ * Env overrides: SDN_WASI_CLANG, SDN_WASI_CLANGXX, SDN_WASI_TARGET,
93
+ * SDN_WASI_SYSROOT, SDN_WASI_RESOURCE_DIR.
94
+ */
95
+ export function resolveWasiThreadsToolchain(options = {}) {
96
+ if (cachedToolchain && !options.force) {
97
+ return cachedToolchain;
98
+ }
99
+ const clang = process.env.SDN_WASI_CLANG || "wasm32-wasi-clang";
100
+ const clangxx = process.env.SDN_WASI_CLANGXX || "wasm32-wasi-clang++";
101
+ const target = process.env.SDN_WASI_TARGET || DEFAULT_TARGET;
102
+ const sysroot = resolveSysroot();
103
+ const resourceDir = resolveResourceDir();
104
+
105
+ const failures = [];
106
+ try {
107
+ execFileSync(clangxx, ["--version"], { stdio: "ignore" });
108
+ } catch (error) {
109
+ if (error?.code === "ENOENT") {
110
+ failures.push(
111
+ `WASI clang driver "${clangxx}" was not found on PATH (override with SDN_WASI_CLANGXX).`,
112
+ );
113
+ } else {
114
+ failures.push(
115
+ `WASI clang driver "${clangxx}" could not be executed: ${error?.message ?? error}.`,
116
+ );
117
+ }
118
+ }
119
+ if (!sysroot) {
120
+ failures.push(
121
+ `A wasi-threads sysroot (containing lib/${SYSROOT_TRIPLE}/libc.a) was not found (override with SDN_WASI_SYSROOT).`,
122
+ );
123
+ }
124
+ if (failures.length > 0) {
125
+ throw new Error(
126
+ "Cannot build the isomorphic-pthreads (wasi-threads) artifact: " +
127
+ `${failures.join(" ")} Install a wasi-sdk / wasi-libc+wasi-runtimes toolchain ` +
128
+ "with the wasm32-wasip1-threads target (e.g. `brew install wasi-libc wasi-runtimes` " +
129
+ "or a wasi-sdk release), or set the SDN_WASI_* env overrides.",
130
+ );
131
+ }
132
+
133
+ const toolchainArgs = [`--target=${target}`, `--sysroot=${sysroot}`];
134
+ if (resourceDir) {
135
+ toolchainArgs.push(`-resource-dir=${resourceDir}`);
136
+ }
137
+
138
+ cachedToolchain = {
139
+ clang,
140
+ clangxx,
141
+ target,
142
+ sysroot,
143
+ resourceDir,
144
+ toolchainArgs,
145
+ describe() {
146
+ return `${clangxx} ${toolchainArgs.join(" ")}`;
147
+ },
148
+ };
149
+ return cachedToolchain;
150
+ }
@@ -42,7 +42,7 @@ export async function validateArtifactWithStandards(options = {}) {
42
42
  const baseReport = await validatePluginArtifact(options);
43
43
  const standards = await validateManifestAgainstStandardsCatalog(
44
44
  options.manifest,
45
- { sourceName: baseReport.sourceName },
45
+ { ...options, sourceName: baseReport.sourceName },
46
46
  );
47
47
  return mergeReport(baseReport, standards.issues);
48
48
  }
@@ -61,3 +61,13 @@ export {
61
61
  validatePluginArtifact,
62
62
  validatePluginManifest,
63
63
  };
64
+
65
+ export {
66
+ manifestDeclaresHostBoundaryBlindness,
67
+ WildcardJustificationKind,
68
+ } from "./pluginCompliance.js";
69
+ export {
70
+ isLegacyWildcardPort,
71
+ LegacyWildcardPortLedger,
72
+ LEGACY_WILDCARD_LEDGER_FROZEN_ON,
73
+ } from "./legacyWildcardPorts.js";