space-data-module-sdk 0.8.4 → 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 +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 +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
@@ -1,175 +1,10 @@
1
- import * as flatbuffers from "flatbuffers/mjs/flatbuffers.js";
2
-
3
- import { DrainPolicy } from "../generated/orbpro/manifest/drain-policy.js";
4
- import { TypedArenaBuffer } from "../generated/orbpro/stream/typed-arena-buffer.js";
5
-
6
- function toByteBuffer(data) {
7
- if (data instanceof flatbuffers.ByteBuffer) {
8
- return data;
9
- }
10
- return new flatbuffers.ByteBuffer(data);
11
- }
12
-
13
- class StreamInvokeRequest {
14
- constructor() {
15
- this.bb = null;
16
- this.bb_pos = 0;
17
- }
18
-
19
- __init(i, bb) {
20
- this.bb_pos = i;
21
- this.bb = bb;
22
- return this;
23
- }
24
-
25
- static getRootAsStreamInvokeRequest(bb, obj) {
26
- return (obj || new StreamInvokeRequest()).__init(
27
- bb.readInt32(bb.position()) + bb.position(),
28
- bb,
29
- );
30
- }
31
-
32
- static startStreamInvokeRequest(builder) {
33
- builder.startObject(4);
34
- }
35
-
36
- static addMethodId(builder, methodIdOffset) {
37
- builder.addFieldOffset(0, methodIdOffset, 0);
38
- }
39
-
40
- static addInputs(builder, inputsOffset) {
41
- builder.addFieldOffset(1, inputsOffset, 0);
42
- }
43
-
44
- static createInputsVector(builder, data) {
45
- builder.startVector(4, data.length, 4);
46
- for (let i = data.length - 1; i >= 0; i -= 1) {
47
- builder.addOffset(data[i]);
48
- }
49
- return builder.endVector();
50
- }
51
-
52
- static addOutputStreamCap(builder, outputStreamCap) {
53
- builder.addFieldInt32(2, outputStreamCap, 0);
54
- }
55
-
56
- static addDrainPolicy(builder, drainPolicy) {
57
- builder.addFieldInt8(3, drainPolicy, DrainPolicy.DRAIN_UNTIL_YIELD);
58
- }
59
-
60
- static endStreamInvokeRequest(builder) {
61
- const offset = builder.endObject();
62
- builder.requiredField(offset, 4);
63
- return offset;
64
- }
65
- }
66
-
67
- class StreamInvokeRequestT {
68
- constructor(
69
- methodId = null,
70
- inputs = [],
71
- outputStreamCap = 0,
72
- drainPolicy = DrainPolicy.DRAIN_UNTIL_YIELD,
73
- ) {
74
- this.methodId = methodId;
75
- this.inputs = inputs;
76
- this.outputStreamCap = outputStreamCap;
77
- this.drainPolicy = drainPolicy;
78
- }
79
-
80
- pack(builder) {
81
- const methodId =
82
- this.methodId !== null ? builder.createString(this.methodId) : 0;
83
- const inputs = StreamInvokeRequest.createInputsVector(
84
- builder,
85
- builder.createObjectOffsetList(this.inputs),
86
- );
87
- StreamInvokeRequest.startStreamInvokeRequest(builder);
88
- StreamInvokeRequest.addMethodId(builder, methodId);
89
- StreamInvokeRequest.addInputs(builder, inputs);
90
- StreamInvokeRequest.addOutputStreamCap(builder, this.outputStreamCap);
91
- StreamInvokeRequest.addDrainPolicy(builder, this.drainPolicy);
92
- return StreamInvokeRequest.endStreamInvokeRequest(builder);
93
- }
94
- }
95
-
96
- class StreamInvokeResponse {
97
- constructor() {
98
- this.bb = null;
99
- this.bb_pos = 0;
100
- }
101
-
102
- __init(i, bb) {
103
- this.bb_pos = i;
104
- this.bb = bb;
105
- return this;
106
- }
107
-
108
- static getRootAsStreamInvokeResponse(bb, obj) {
109
- return (obj || new StreamInvokeResponse()).__init(
110
- bb.readInt32(bb.position()) + bb.position(),
111
- bb,
112
- );
113
- }
114
-
115
- outputs(index, obj) {
116
- const offset = this.bb.__offset(this.bb_pos, 4);
117
- return offset
118
- ? (obj || new TypedArenaBuffer()).__init(
119
- this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4),
120
- this.bb,
121
- )
122
- : null;
123
- }
124
-
125
- outputsLength() {
126
- const offset = this.bb.__offset(this.bb_pos, 4);
127
- return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
128
- }
129
-
130
- backlogRemaining() {
131
- const offset = this.bb.__offset(this.bb_pos, 6);
132
- return offset ? this.bb.readUint32(this.bb_pos + offset) : 0;
133
- }
134
-
135
- yielded() {
136
- const offset = this.bb.__offset(this.bb_pos, 8);
137
- return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;
138
- }
139
-
140
- errorCode() {
141
- const offset = this.bb.__offset(this.bb_pos, 10);
142
- return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
143
- }
144
-
145
- errorMessage(optionalEncoding) {
146
- const offset = this.bb.__offset(this.bb_pos, 12);
147
- return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
148
- }
149
-
150
- unpack() {
151
- return {
152
- outputs: this.bb.createObjList(this.outputs.bind(this), this.outputsLength()),
153
- backlogRemaining: this.backlogRemaining(),
154
- yielded: this.yielded(),
155
- errorCode: this.errorCode(),
156
- errorMessage: this.errorMessage(),
157
- };
158
- }
159
- }
160
-
161
- export function encodeStreamInvokeRequest(request) {
162
- const normalized =
163
- request instanceof StreamInvokeRequestT
164
- ? request
165
- : Object.assign(new StreamInvokeRequestT(), request);
166
- const builder = new flatbuffers.Builder(1024);
167
- builder.finish(normalized.pack(builder));
168
- return builder.asUint8Array();
169
- }
170
-
171
- export function decodeStreamInvokeResponse(data) {
172
- return StreamInvokeResponse.getRootAsStreamInvokeResponse(
173
- toByteBuffer(data),
174
- ).unpack();
175
- }
1
+ // Subsumed by the generated-schema flow codecs (WS12.2): the hand-rolled
2
+ // StreamInvoke flatbuffer classes that used to live here duplicated the
3
+ // generated orbpro/plugin StreamInvokeRequest/Response tables. Kept as a thin
4
+ // re-export for any deep importers.
5
+ export {
6
+ encodeStreamInvokeRequest,
7
+ decodeStreamInvokeResponse,
8
+ decodeStreamInvokeRequest,
9
+ encodeStreamInvokeResponse,
10
+ } from "../flow/flowCodec.js";
@@ -0,0 +1,6 @@
1
+ {
2
+ "//": "THE single source of truth for the WasmEdge runtime pin. The native lane (host-embedded / local wasmedge binary) and the Docker parity lane both read THIS version and must match it exactly; the parity harness fails loudly on drift. The Docker image tag is DERIVED from this version (never written anywhere else), so the host/container pin pair bumps together by editing one string. Keep in sync with the node host's verified runtime (space-data-network scripts/install-wasmedge.sh + build-static-wasmedge.sh, currently 0.16.4 per loop C.9: fixes libwasmedge atomic-wait defects proven broken on 0.14.x).",
3
+ "wasmedgeVersion": "0.16.4",
4
+ "dockerImageRepository": "space-data-module-sdk/parity-wasmedge",
5
+ "dockerfile": "docker/wasmedge-parity.Dockerfile"
6
+ }
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Worker module harness — the async in-WASM host bridge (WS6.1).
3
+ *
4
+ * Runs a guest WASM module inside a Worker so its synchronous
5
+ * `space_data_module_host.call` hostcalls can block (Atomics.wait on a
6
+ * SharedArrayBuffer channel) while async host capabilities — http, ipfs,
7
+ * storage, pubsub, timers, filesystem — resolve on this (controlling)
8
+ * thread. The plain browser harness runs guests on the main thread, where
9
+ * blocking is impossible, so async operations throw
10
+ * `... is not available in the synchronous hostcall ABI`.
11
+ *
12
+ * const harness = await createWorkerModuleHarness({ wasmSource, host });
13
+ * await harness.callExport("guest_fn"); // guest may hostcall http.request
14
+ * await harness.invoke({ methodId, ... }); // full invoke surface, proxied
15
+ * await harness.destroy();
16
+ *
17
+ * Requirements: SharedArrayBuffer + Worker. In browsers the page must be
18
+ * cross-origin isolated (COOP+COEP). In Node, worker_threads is used.
19
+ */
20
+
21
+ import { createBrowserHost } from "../host/browserHost.js";
22
+ import { createAsyncHostDispatcher } from "../host/abi.js";
23
+ import {
24
+ createSabHostcallBuffer,
25
+ createSabHostcallServer,
26
+ DEFAULT_SAB_HOSTCALL_RESPONSE_BYTES,
27
+ } from "../host/sabHostcallChannel.js";
28
+ import { WASI_THREAD_HOSTCALL_MESSAGE } from "../host/wasiThreadWorkerRuntime.js";
29
+
30
+ const WORKER_URL = new URL("./workerModuleHarnessWorker.js", import.meta.url);
31
+
32
+ function randomChannelToken() {
33
+ const bytes = new Uint8Array(16);
34
+ if (typeof globalThis.crypto?.getRandomValues === "function") {
35
+ globalThis.crypto.getRandomValues(bytes);
36
+ } else {
37
+ for (let index = 0; index < bytes.length; index += 1) {
38
+ bytes[index] = Math.floor(Math.random() * 256);
39
+ }
40
+ }
41
+ return [...bytes].map((value) => value.toString(16).padStart(2, "0")).join("");
42
+ }
43
+
44
+ function isNodeRuntime() {
45
+ return (
46
+ typeof process !== "undefined" &&
47
+ typeof process.versions?.node === "string" &&
48
+ typeof window === "undefined"
49
+ );
50
+ }
51
+
52
+ async function spawnWorker(workerUrl) {
53
+ if (isNodeRuntime()) {
54
+ const { Worker: NodeWorker } = await import("node:worker_threads");
55
+ const worker = new NodeWorker(workerUrl);
56
+ return {
57
+ post: (message) => worker.postMessage(message),
58
+ on: (handler) => worker.on("message", handler),
59
+ terminate: () => worker.terminate(),
60
+ // Keep the process free to exit if the caller forgets destroy().
61
+ unref: () => worker.unref?.(),
62
+ };
63
+ }
64
+ if (typeof Worker !== "function") {
65
+ throw new Error("Worker is unavailable; the worker module harness requires it.");
66
+ }
67
+ const worker = new Worker(workerUrl, { type: "module" });
68
+ return {
69
+ post: (message) => worker.postMessage(message),
70
+ on: (handler) => {
71
+ worker.onmessage = (event) => handler(event.data);
72
+ },
73
+ terminate: () => worker.terminate(),
74
+ unref: () => {},
75
+ };
76
+ }
77
+
78
+ function toBytes(source, label) {
79
+ if (source instanceof Uint8Array) return new Uint8Array(source);
80
+ if (source instanceof ArrayBuffer) return new Uint8Array(source.slice(0));
81
+ throw new TypeError(
82
+ `${label} must be a Uint8Array or ArrayBuffer (the worker harness ships bytes to the worker).`,
83
+ );
84
+ }
85
+
86
+ /**
87
+ * @param {object} options
88
+ * @param {Uint8Array|ArrayBuffer} options.wasmSource module bytes
89
+ * @param {object} [options.host] host servicing guest hostcalls (default createBrowserHost(hostOptions))
90
+ * @param {object} [options.hostOptions] options for the default host
91
+ * @param {(operation: string, params: any) => Promise<any>} [options.dispatchHost] dispatch override
92
+ * @param {number} [options.maxHostcallResponseBytes] SAB channel capacity (default 4 MiB)
93
+ * @param {number} [options.hostcallTimeoutMs] worker-side Atomics.wait timeout (default 120s)
94
+ * @param {URL|string} [options.workerUrl] worker entry override (bundlers / served pages)
95
+ * @param {object} [options.harnessOptions] structured-clonable options forwarded to the in-worker
96
+ * createBrowserModuleHarness (surface, args, env, allowRawInvoke, logOutput, ...)
97
+ */
98
+ export async function createWorkerModuleHarness(options = {}) {
99
+ const wasmBytes = toBytes(options.wasmSource, "wasmSource");
100
+ const host = options.host ?? createBrowserHost(options.hostOptions);
101
+ const dispatch = options.dispatchHost ?? createAsyncHostDispatcher(host);
102
+ const buffer = createSabHostcallBuffer({
103
+ maxResponseBytes: options.maxHostcallResponseBytes,
104
+ });
105
+ const server = createSabHostcallServer({ buffer, dispatch });
106
+ if (typeof BroadcastChannel !== "function") {
107
+ throw new Error(
108
+ "BroadcastChannel is unavailable; nested pthread hostcalls require it.",
109
+ );
110
+ }
111
+ const threadHostcallToken = randomChannelToken();
112
+ const threadHostcallChannelName =
113
+ `sdm.thread-hostcall.${threadHostcallToken}.${randomChannelToken()}`;
114
+ const threadHostcallChannel = new BroadcastChannel(threadHostcallChannelName);
115
+ const threadHostcallServers = new WeakMap();
116
+ threadHostcallChannel.onmessage = (event) => {
117
+ const message = event.data ?? {};
118
+ if (
119
+ message.type !== WASI_THREAD_HOSTCALL_MESSAGE ||
120
+ message.token !== threadHostcallToken ||
121
+ !(message.buffer instanceof SharedArrayBuffer)
122
+ ) {
123
+ return;
124
+ }
125
+ let nestedServer = threadHostcallServers.get(message.buffer);
126
+ if (!nestedServer) {
127
+ nestedServer = createSabHostcallServer({
128
+ buffer: message.buffer,
129
+ dispatch,
130
+ });
131
+ threadHostcallServers.set(message.buffer, nestedServer);
132
+ }
133
+ void nestedServer.handleRequest(message);
134
+ };
135
+ const port = await spawnWorker(options.workerUrl ?? WORKER_URL);
136
+
137
+ let nextId = 1;
138
+ const pending = new Map();
139
+ let readyResolve;
140
+ let readyReject;
141
+ const ready = new Promise((resolve, reject) => {
142
+ readyResolve = resolve;
143
+ readyReject = reject;
144
+ });
145
+ let destroyed = false;
146
+
147
+ port.on((message) => {
148
+ if (!message || typeof message !== "object") return;
149
+ switch (message.type) {
150
+ case "worker-online":
151
+ port.post({
152
+ type: "init",
153
+ wasmBytes,
154
+ buffer,
155
+ hostcallTimeoutMs: options.hostcallTimeoutMs,
156
+ harnessOptions: {
157
+ ...(options.harnessOptions ?? {}),
158
+ enableBrowserWasiThreads:
159
+ options.harnessOptions?.enableBrowserWasiThreads !== false,
160
+ threadHostcallChannel: {
161
+ channelName: threadHostcallChannelName,
162
+ token: threadHostcallToken,
163
+ maxResponseBytes: Number.isInteger(
164
+ options.maxHostcallResponseBytes,
165
+ )
166
+ ? options.maxHostcallResponseBytes
167
+ : DEFAULT_SAB_HOSTCALL_RESPONSE_BYTES,
168
+ timeoutMs: options.hostcallTimeoutMs,
169
+ },
170
+ },
171
+ });
172
+ return;
173
+ case "ready":
174
+ readyResolve({ exports: message.exports, runtime: message.runtime });
175
+ return;
176
+ case "init-error": {
177
+ const error = new Error(message.error?.message ?? "Worker init failed");
178
+ error.name = message.error?.name ?? "Error";
179
+ readyReject(error);
180
+ return;
181
+ }
182
+ case "hostcall":
183
+ // Serviced asynchronously; the worker blocks on the SAB until done.
184
+ server.handleRequest(message);
185
+ return;
186
+ case "result": {
187
+ const entry = pending.get(message.id);
188
+ if (!entry) return;
189
+ pending.delete(message.id);
190
+ if (message.ok) {
191
+ entry.resolve(message.value);
192
+ } else {
193
+ const error = new Error(message.error?.message ?? "Worker command failed");
194
+ error.name = message.error?.name ?? "Error";
195
+ error.code = message.error?.code ?? null;
196
+ entry.reject(error);
197
+ }
198
+ return;
199
+ }
200
+ default:
201
+ }
202
+ });
203
+
204
+ function send(command) {
205
+ if (destroyed) {
206
+ return Promise.reject(new Error("Worker harness is destroyed."));
207
+ }
208
+ const id = nextId++;
209
+ return new Promise((resolve, reject) => {
210
+ pending.set(id, { resolve, reject });
211
+ port.post({ ...command, id });
212
+ });
213
+ }
214
+
215
+ const { exports, runtime } = await ready;
216
+
217
+ return {
218
+ runtime: { kind: "worker", inner: runtime },
219
+ host,
220
+ buffer,
221
+ exports,
222
+ callExport: (name, ...args) => send({ type: "callExport", name, args }),
223
+ invoke: (request) => send({ type: "invoke", request }),
224
+ invokeRaw: (requestBytes) => send({ type: "invokeRaw", requestBytes }),
225
+ readMemory: (ptr, length) => send({ type: "readMemory", ptr, length }),
226
+ readManifest: () => send({ type: "readManifest" }),
227
+ async destroy() {
228
+ if (destroyed) return;
229
+ destroyed = true;
230
+ for (const entry of pending.values()) {
231
+ entry.reject(new Error("Worker harness destroyed."));
232
+ }
233
+ pending.clear();
234
+ try {
235
+ await port.terminate();
236
+ } catch {
237
+ // termination is best-effort
238
+ }
239
+ threadHostcallChannel.close();
240
+ },
241
+ };
242
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Worker entry for the async-hostcall module harness.
3
+ *
4
+ * Runs the guest WASM inside this worker via createBrowserModuleHarness with
5
+ * a SAB-channel hostcall dispatch: guest `space_data_module_host.call`
6
+ * invocations block this thread on Atomics.wait while the controlling thread
7
+ * services the async host operation (http/ipfs/storage/pubsub/...).
8
+ *
9
+ * Runs under both browser module Workers and Node worker_threads.
10
+ */
11
+
12
+ import { createBrowserModuleHarness } from "./browserModuleHarness.js";
13
+ import { createSabHostcallClientDispatch } from "../host/sabHostcallChannel.js";
14
+
15
+ async function resolvePort() {
16
+ if (
17
+ typeof self !== "undefined" &&
18
+ typeof self.postMessage === "function" &&
19
+ typeof window === "undefined" &&
20
+ !(typeof process !== "undefined" && process?.versions?.node)
21
+ ) {
22
+ return {
23
+ post: (message) => self.postMessage(message),
24
+ on: (handler) => {
25
+ self.onmessage = (event) => handler(event.data);
26
+ },
27
+ };
28
+ }
29
+ const { parentPort } = await import("node:worker_threads");
30
+ if (!parentPort) {
31
+ throw new Error("workerModuleHarnessWorker must run inside a Worker.");
32
+ }
33
+ return {
34
+ post: (message) => parentPort.postMessage(message),
35
+ on: (handler) => parentPort.on("message", handler),
36
+ };
37
+ }
38
+
39
+ function serializeWorkerError(error) {
40
+ return {
41
+ name: error?.name ?? "Error",
42
+ message: error?.message ?? String(error),
43
+ stack: error?.stack ?? null,
44
+ code: error?.code ?? null,
45
+ };
46
+ }
47
+
48
+ function detachInvokeFrame(frame = {}) {
49
+ const {
50
+ arenaLease: _arenaLease,
51
+ arenaGeneration: _arenaGeneration,
52
+ generation: _generation,
53
+ ...detached
54
+ } = frame;
55
+ return {
56
+ ...detached,
57
+ payload: new Uint8Array(frame.payload ?? new Uint8Array()),
58
+ };
59
+ }
60
+
61
+ function detachInvokeResponse(response = {}) {
62
+ const outputs = (response.outputs ?? response.outputFrames ?? []).map(
63
+ detachInvokeFrame,
64
+ );
65
+ const {
66
+ arenaLease,
67
+ outputs: _outputs,
68
+ outputFrames: _outputFrames,
69
+ payloadArena,
70
+ ...detached
71
+ } = response;
72
+ try {
73
+ return {
74
+ ...detached,
75
+ outputs,
76
+ outputFrames: outputs,
77
+ payloadArena: new Uint8Array(payloadArena ?? new Uint8Array()),
78
+ };
79
+ } finally {
80
+ arenaLease?.close?.();
81
+ }
82
+ }
83
+
84
+ const port = await resolvePort();
85
+ let harness = null;
86
+
87
+ async function handleInit(message) {
88
+ const dispatch = createSabHostcallClientDispatch({
89
+ buffer: message.buffer,
90
+ timeoutMs: message.hostcallTimeoutMs,
91
+ postRequest: (request) => port.post({ type: "hostcall", ...request }),
92
+ });
93
+ const harnessOptions = {
94
+ ...(message.harnessOptions ?? {}),
95
+ wasmSource:
96
+ message.wasmBytes instanceof Uint8Array
97
+ ? message.wasmBytes
98
+ : new Uint8Array(message.wasmBytes),
99
+ hostcallDispatch: dispatch,
100
+ };
101
+ harness = await createBrowserModuleHarness(harnessOptions);
102
+ const exportNames = Object.keys(harness.instance.exports);
103
+ port.post({
104
+ type: "ready",
105
+ exports: exportNames,
106
+ runtime: harness.runtime,
107
+ });
108
+ }
109
+
110
+ async function handleCommand(message) {
111
+ if (!harness) {
112
+ throw new Error("Worker harness is not initialized.");
113
+ }
114
+ switch (message.type) {
115
+ case "callExport": {
116
+ const fn = harness.instance.exports[message.name];
117
+ if (typeof fn !== "function") {
118
+ throw new Error(`Guest export "${message.name}" is not a function.`);
119
+ }
120
+ return fn(...(message.args ?? []));
121
+ }
122
+ case "invoke":
123
+ return detachInvokeResponse(await harness.invoke(message.request));
124
+ case "invokeRaw":
125
+ return harness.invokeRaw(
126
+ message.requestBytes instanceof Uint8Array
127
+ ? message.requestBytes
128
+ : new Uint8Array(message.requestBytes),
129
+ );
130
+ case "readMemory": {
131
+ const memory = harness.memory ?? harness.instance.exports.memory;
132
+ if (!memory) {
133
+ throw new Error("Guest module exposes no memory.");
134
+ }
135
+ return new Uint8Array(memory.buffer, message.ptr, message.length).slice();
136
+ }
137
+ case "readManifest":
138
+ return harness.readManifest();
139
+ default:
140
+ throw new Error(`Unknown worker harness command: ${message.type}`);
141
+ }
142
+ }
143
+
144
+ port.on(async (message) => {
145
+ if (!message || typeof message !== "object") return;
146
+ if (message.type === "init") {
147
+ try {
148
+ await handleInit(message);
149
+ } catch (error) {
150
+ port.post({ type: "init-error", error: serializeWorkerError(error) });
151
+ }
152
+ return;
153
+ }
154
+ if (message.type === "destroy") {
155
+ try {
156
+ harness?.destroy();
157
+ } finally {
158
+ port.post({ type: "destroyed" });
159
+ }
160
+ return;
161
+ }
162
+ if (typeof message.id !== "number") return;
163
+ try {
164
+ const value = await handleCommand(message);
165
+ port.post({ type: "result", id: message.id, ok: true, value });
166
+ } catch (error) {
167
+ port.post({
168
+ type: "result",
169
+ id: message.id,
170
+ ok: false,
171
+ error: serializeWorkerError(error),
172
+ });
173
+ }
174
+ });
175
+
176
+ port.post({ type: "worker-online" });
@@ -1,11 +1,14 @@
1
1
  export {
2
+ createMarketplaceContentAad,
2
3
  decryptProtectedBytes,
3
4
  decryptPublicationRecordCollection,
4
5
  decryptBytesFromEnvelope,
6
+ decryptMarketplaceContentKeyWrap,
5
7
  decryptJsonFromEnvelope,
6
8
  encryptBytesForRecipient,
7
9
  encryptJsonForRecipient,
8
10
  generateX25519Keypair,
11
+ protectMarketplaceContent,
9
12
  } from "./pki.js";
10
13
 
11
14
  export {