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,506 @@
1
+ import {
2
+ BackpressurePolicy,
3
+ DrainPolicy,
4
+ ExternalInterfaceDirection,
5
+ NodeKind,
6
+ TriggerKind,
7
+ } from "./constants.js";
8
+ import {
9
+ DefaultInvokeExports,
10
+ DefaultManifestExports,
11
+ InvokeSurface,
12
+ } from "../../../runtime/index.js";
13
+
14
+ function normalizeString(value, fallback = null) {
15
+ if (value === null || value === undefined) {
16
+ return fallback;
17
+ }
18
+ const normalized = String(value).trim();
19
+ return normalized.length > 0 ? normalized : fallback;
20
+ }
21
+
22
+ function normalizeArray(values) {
23
+ return Array.isArray(values) ? values : [];
24
+ }
25
+
26
+ function normalizeInvokeSurface(value, fallback = null) {
27
+ const normalized = normalizeString(value, null);
28
+ if (
29
+ normalized === InvokeSurface.DIRECT ||
30
+ normalized === InvokeSurface.COMMAND
31
+ ) {
32
+ return normalized;
33
+ }
34
+ return fallback;
35
+ }
36
+
37
+ function normalizeDependencyInvokeSurface(dependency = {}) {
38
+ const declaredSurfaces = normalizeDependencyInvokeSurfaces(dependency);
39
+ if (declaredSurfaces.includes(InvokeSurface.DIRECT)) {
40
+ return InvokeSurface.DIRECT;
41
+ }
42
+ if (declaredSurfaces.includes(InvokeSurface.COMMAND)) {
43
+ return InvokeSurface.COMMAND;
44
+ }
45
+ return declaredSurfaces[0] ?? InvokeSurface.DIRECT;
46
+ }
47
+
48
+ function normalizeDependencyInvokeSurfaces(dependency = {}) {
49
+ const declaredSurfaces = normalizeArray(
50
+ dependency.invokeSurfaces ?? dependency.invoke_surfaces,
51
+ )
52
+ .map((surface) => normalizeInvokeSurface(surface, null))
53
+ .filter(Boolean);
54
+ if (declaredSurfaces.length > 0) {
55
+ return Array.from(new Set(declaredSurfaces));
56
+ }
57
+ const explicitSurface = normalizeInvokeSurface(
58
+ dependency.invokeSurface ?? dependency.invoke_surface,
59
+ null,
60
+ );
61
+ if (explicitSurface) {
62
+ return [explicitSurface];
63
+ }
64
+ return [InvokeSurface.DIRECT];
65
+ }
66
+
67
+ function normalizeDependencyRuntimeExports(dependency = {}) {
68
+ const runtimeExports =
69
+ dependency.runtimeExports ?? dependency.runtime_exports ?? {};
70
+ const invokeSurface = normalizeDependencyInvokeSurface(dependency);
71
+ const directInvokeDefaults =
72
+ invokeSurface === InvokeSurface.DIRECT
73
+ ? {
74
+ mallocSymbol: DefaultInvokeExports.allocSymbol,
75
+ freeSymbol: DefaultInvokeExports.freeSymbol,
76
+ streamInvokeSymbol: DefaultInvokeExports.invokeSymbol,
77
+ }
78
+ : {
79
+ mallocSymbol: null,
80
+ freeSymbol: null,
81
+ streamInvokeSymbol: null,
82
+ };
83
+ return {
84
+ initSymbol: normalizeString(
85
+ runtimeExports.initSymbol ?? runtimeExports.init_symbol,
86
+ null,
87
+ ),
88
+ destroySymbol: normalizeString(
89
+ runtimeExports.destroySymbol ?? runtimeExports.destroy_symbol,
90
+ null,
91
+ ),
92
+ mallocSymbol:
93
+ normalizeString(
94
+ runtimeExports.mallocSymbol ?? runtimeExports.malloc_symbol,
95
+ null,
96
+ ) ?? directInvokeDefaults.mallocSymbol,
97
+ freeSymbol:
98
+ normalizeString(
99
+ runtimeExports.freeSymbol ?? runtimeExports.free_symbol,
100
+ null,
101
+ ) ?? directInvokeDefaults.freeSymbol,
102
+ streamInvokeSymbol:
103
+ normalizeString(
104
+ runtimeExports.streamInvokeSymbol ??
105
+ runtimeExports.stream_invoke_symbol,
106
+ null,
107
+ ) ?? directInvokeDefaults.streamInvokeSymbol,
108
+ };
109
+ }
110
+
111
+ function normalizeTypeRef(typeRef = {}) {
112
+ return {
113
+ schemaName: normalizeString(
114
+ typeRef.schemaName ?? typeRef.schema_name,
115
+ null,
116
+ ),
117
+ fileIdentifier: normalizeString(
118
+ typeRef.fileIdentifier ?? typeRef.file_identifier,
119
+ null,
120
+ ),
121
+ schemaHash: normalizeArray(typeRef.schemaHash ?? typeRef.schema_hash),
122
+ acceptsAnyFlatbuffer:
123
+ typeRef.acceptsAnyFlatbuffer ?? typeRef.accepts_any_flatbuffer ?? false,
124
+ wireFormat: normalizeString(
125
+ typeRef.wireFormat ?? typeRef.wire_format,
126
+ null,
127
+ ),
128
+ rootTypeName: normalizeString(
129
+ typeRef.rootTypeName ?? typeRef.root_type_name,
130
+ null,
131
+ ),
132
+ fixedStringLength: Number.isFinite(
133
+ Number(typeRef.fixedStringLength ?? typeRef.fixed_string_length),
134
+ )
135
+ ? Math.max(
136
+ 0,
137
+ Math.trunc(
138
+ Number(typeRef.fixedStringLength ?? typeRef.fixed_string_length),
139
+ ),
140
+ )
141
+ : null,
142
+ byteLength: Number.isFinite(
143
+ Number(typeRef.byteLength ?? typeRef.byte_length),
144
+ )
145
+ ? Math.max(
146
+ 0,
147
+ Math.trunc(Number(typeRef.byteLength ?? typeRef.byte_length)),
148
+ )
149
+ : null,
150
+ requiredAlignment: Number.isFinite(
151
+ Number(typeRef.requiredAlignment ?? typeRef.required_alignment),
152
+ )
153
+ ? Math.max(
154
+ 0,
155
+ Math.trunc(
156
+ Number(typeRef.requiredAlignment ?? typeRef.required_alignment),
157
+ ),
158
+ )
159
+ : null,
160
+ };
161
+ }
162
+
163
+ function normalizeAcceptedTypeSet(typeSet = {}) {
164
+ return {
165
+ setId: normalizeString(typeSet.setId ?? typeSet.set_id, null),
166
+ allowedTypes: normalizeArray(
167
+ typeSet.allowedTypes ?? typeSet.allowed_types,
168
+ ).map(normalizeTypeRef),
169
+ description: normalizeString(typeSet.description, null),
170
+ };
171
+ }
172
+
173
+ function normalizeExternalInterface(externalInterface = {}) {
174
+ return {
175
+ interfaceId: normalizeString(
176
+ externalInterface.interfaceId ?? externalInterface.interface_id,
177
+ "",
178
+ ),
179
+ kind: normalizeString(externalInterface.kind, null),
180
+ direction:
181
+ normalizeString(externalInterface.direction, null) ??
182
+ ExternalInterfaceDirection.BIDIRECTIONAL,
183
+ capability: normalizeString(externalInterface.capability, null),
184
+ resource: normalizeString(externalInterface.resource, null),
185
+ protocolId: normalizeString(
186
+ externalInterface.protocolId ?? externalInterface.protocol_id,
187
+ null,
188
+ ),
189
+ topic: normalizeString(externalInterface.topic, null),
190
+ path: normalizeString(externalInterface.path, null),
191
+ description: normalizeString(externalInterface.description, null),
192
+ required: externalInterface.required !== false,
193
+ acceptedTypes: normalizeArray(
194
+ externalInterface.acceptedTypes ?? externalInterface.accepted_types,
195
+ ).map(normalizeTypeRef),
196
+ properties:
197
+ externalInterface.properties &&
198
+ typeof externalInterface.properties === "object"
199
+ ? { ...externalInterface.properties }
200
+ : {},
201
+ };
202
+ }
203
+
204
+ function normalizeArtifactDependency(dependency = {}) {
205
+ return {
206
+ dependencyId: normalizeString(
207
+ dependency.dependencyId ?? dependency.dependency_id,
208
+ "",
209
+ ),
210
+ pluginId: normalizeString(
211
+ dependency.pluginId ?? dependency.plugin_id,
212
+ null,
213
+ ),
214
+ version: normalizeString(dependency.version, null),
215
+ artifactId: normalizeString(
216
+ dependency.artifactId ?? dependency.artifact_id,
217
+ null,
218
+ ),
219
+ artifactUri: normalizeString(
220
+ dependency.artifactUri ?? dependency.artifact_uri,
221
+ null,
222
+ ),
223
+ mediaType:
224
+ normalizeString(dependency.mediaType ?? dependency.media_type, null) ??
225
+ "application/wasm",
226
+ sha256: normalizeString(dependency.sha256, null),
227
+ manifestHash: normalizeString(
228
+ dependency.manifestHash ?? dependency.manifest_hash,
229
+ null,
230
+ ),
231
+ signature: normalizeString(dependency.signature, null),
232
+ signerPublicKey: normalizeString(
233
+ dependency.signerPublicKey ?? dependency.signer_public_key,
234
+ null,
235
+ ),
236
+ entrypoint: normalizeString(dependency.entrypoint, null),
237
+ requiredCapabilities: normalizeArray(
238
+ dependency.requiredCapabilities ?? dependency.required_capabilities,
239
+ )
240
+ .map((value) => normalizeString(value, null))
241
+ .filter(Boolean),
242
+ invokeSurface: normalizeDependencyInvokeSurface(dependency),
243
+ invokeSurfaces: normalizeDependencyInvokeSurfaces(dependency),
244
+ exports: normalizeArray(dependency.exports)
245
+ .map((value) => normalizeString(value, null))
246
+ .filter(Boolean),
247
+ manifestExports: {
248
+ bytesSymbol:
249
+ normalizeString(
250
+ dependency.manifestExports?.bytesSymbol ??
251
+ dependency.manifest_exports?.bytes_symbol,
252
+ null,
253
+ ) ?? DefaultManifestExports.pluginBytesSymbol,
254
+ sizeSymbol:
255
+ normalizeString(
256
+ dependency.manifestExports?.sizeSymbol ??
257
+ dependency.manifest_exports?.size_symbol,
258
+ null,
259
+ ) ?? DefaultManifestExports.pluginSizeSymbol,
260
+ },
261
+ runtimeExports: normalizeDependencyRuntimeExports(dependency),
262
+ metadata:
263
+ dependency.metadata && typeof dependency.metadata === "object"
264
+ ? { ...dependency.metadata }
265
+ : {},
266
+ };
267
+ }
268
+
269
+ function normalizePort(port = {}) {
270
+ return {
271
+ portId: normalizeString(port.portId ?? port.port_id, ""),
272
+ displayName: normalizeString(port.displayName ?? port.display_name, null),
273
+ acceptedTypeSets: normalizeArray(
274
+ port.acceptedTypeSets ?? port.accepted_type_sets,
275
+ ).map(normalizeAcceptedTypeSet),
276
+ minStreams: Math.max(0, Number(port.minStreams ?? port.min_streams ?? 1)),
277
+ maxStreams: Math.max(0, Number(port.maxStreams ?? port.max_streams ?? 1)),
278
+ required: port.required !== false,
279
+ description: normalizeString(port.description, null),
280
+ };
281
+ }
282
+
283
+ function normalizeMethod(method = {}) {
284
+ return {
285
+ methodId: normalizeString(method.methodId ?? method.method_id, ""),
286
+ displayName: normalizeString(
287
+ method.displayName ?? method.display_name,
288
+ null,
289
+ ),
290
+ inputPorts: normalizeArray(method.inputPorts ?? method.input_ports).map(
291
+ normalizePort,
292
+ ),
293
+ outputPorts: normalizeArray(method.outputPorts ?? method.output_ports).map(
294
+ normalizePort,
295
+ ),
296
+ maxBatch: Math.max(1, Number(method.maxBatch ?? method.max_batch ?? 1)),
297
+ drainPolicy:
298
+ normalizeString(method.drainPolicy ?? method.drain_policy, null) ??
299
+ DrainPolicy.DRAIN_UNTIL_YIELD,
300
+ description: normalizeString(method.description, null),
301
+ };
302
+ }
303
+
304
+ export function normalizeManifest(manifest = {}) {
305
+ return {
306
+ pluginId: normalizeString(manifest.pluginId ?? manifest.plugin_id, ""),
307
+ name: normalizeString(manifest.name, null),
308
+ version: normalizeString(manifest.version, null),
309
+ pluginFamily: normalizeString(
310
+ manifest.pluginFamily ?? manifest.plugin_family,
311
+ null,
312
+ ),
313
+ methods: normalizeArray(manifest.methods).map(normalizeMethod),
314
+ capabilities: normalizeArray(manifest.capabilities),
315
+ timers: normalizeArray(manifest.timers),
316
+ protocols: normalizeArray(manifest.protocols),
317
+ schemasUsed: normalizeArray(
318
+ manifest.schemasUsed ?? manifest.schemas_used,
319
+ ).map(normalizeTypeRef),
320
+ externalInterfaces: normalizeArray(
321
+ manifest.externalInterfaces ?? manifest.external_interfaces,
322
+ ).map(normalizeExternalInterface),
323
+ buildArtifacts: normalizeArray(
324
+ manifest.buildArtifacts ?? manifest.build_artifacts,
325
+ ),
326
+ abiVersion: Number(manifest.abiVersion ?? manifest.abi_version ?? 1),
327
+ invokeSurfaces: normalizeArray(
328
+ manifest.invokeSurfaces ?? manifest.invoke_surfaces,
329
+ )
330
+ .map((surface) => normalizeInvokeSurface(surface, null))
331
+ .filter(Boolean),
332
+ runtimeTargets: normalizeArray(
333
+ manifest.runtimeTargets ?? manifest.runtime_targets,
334
+ )
335
+ .map((target) => normalizeString(target, null))
336
+ .filter(Boolean),
337
+ runtimeTargetClass: normalizeString(
338
+ manifest.runtimeTargetClass ?? manifest.runtime_target_class,
339
+ null,
340
+ ),
341
+ standardRuntimeTarget: normalizeString(
342
+ manifest.standardRuntimeTarget ?? manifest.standard_runtime_target,
343
+ null,
344
+ ),
345
+ manifestBuffer: manifest.manifestBuffer ?? manifest.manifest_buffer ?? null,
346
+ manifestExports: {
347
+ bytesSymbol:
348
+ normalizeString(
349
+ manifest.manifestExports?.bytesSymbol ??
350
+ manifest.manifest_exports?.bytes_symbol,
351
+ null,
352
+ ) ?? DefaultManifestExports.pluginBytesSymbol,
353
+ sizeSymbol:
354
+ normalizeString(
355
+ manifest.manifestExports?.sizeSymbol ??
356
+ manifest.manifest_exports?.size_symbol,
357
+ null,
358
+ ) ?? DefaultManifestExports.pluginSizeSymbol,
359
+ },
360
+ };
361
+ }
362
+
363
+ function normalizeTrigger(trigger = {}) {
364
+ return {
365
+ triggerId: normalizeString(trigger.triggerId ?? trigger.trigger_id, ""),
366
+ kind: normalizeString(trigger.kind, null) ?? TriggerKind.MANUAL,
367
+ source: normalizeString(trigger.source, null),
368
+ protocolId: normalizeString(
369
+ trigger.protocolId ?? trigger.protocol_id,
370
+ null,
371
+ ),
372
+ defaultIntervalMs: Number(
373
+ trigger.defaultIntervalMs ?? trigger.default_interval_ms ?? 0,
374
+ ),
375
+ acceptedTypes: normalizeArray(
376
+ trigger.acceptedTypes ?? trigger.accepted_types,
377
+ ).map(normalizeTypeRef),
378
+ description: normalizeString(trigger.description, null),
379
+ };
380
+ }
381
+
382
+ function normalizeNode(node = {}) {
383
+ return {
384
+ nodeId: normalizeString(node.nodeId ?? node.node_id, ""),
385
+ pluginId: normalizeString(node.pluginId ?? node.plugin_id, ""),
386
+ methodId: normalizeString(node.methodId ?? node.method_id, ""),
387
+ kind: normalizeString(node.kind, null) ?? NodeKind.TRANSFORM,
388
+ drainPolicy:
389
+ normalizeString(node.drainPolicy ?? node.drain_policy, null) ??
390
+ DrainPolicy.DRAIN_UNTIL_YIELD,
391
+ timeSliceMicros: Number(
392
+ node.timeSliceMicros ?? node.time_slice_micros ?? 0,
393
+ ),
394
+ };
395
+ }
396
+
397
+ function normalizeEdge(edge = {}) {
398
+ return {
399
+ edgeId: normalizeString(edge.edgeId ?? edge.edge_id, ""),
400
+ fromNodeId: normalizeString(edge.fromNodeId ?? edge.from_node_id, ""),
401
+ fromPortId: normalizeString(edge.fromPortId ?? edge.from_port_id, ""),
402
+ toNodeId: normalizeString(edge.toNodeId ?? edge.to_node_id, ""),
403
+ toPortId: normalizeString(edge.toPortId ?? edge.to_port_id, ""),
404
+ acceptedTypes: normalizeArray(
405
+ edge.acceptedTypes ?? edge.accepted_types,
406
+ ).map(normalizeTypeRef),
407
+ backpressurePolicy:
408
+ normalizeString(
409
+ edge.backpressurePolicy ?? edge.backpressure_policy,
410
+ null,
411
+ ) ?? BackpressurePolicy.QUEUE,
412
+ queueDepth: Math.max(0, Number(edge.queueDepth ?? edge.queue_depth ?? 1)),
413
+ };
414
+ }
415
+
416
+ function normalizeTriggerBinding(binding = {}) {
417
+ return {
418
+ triggerId: normalizeString(binding.triggerId ?? binding.trigger_id, ""),
419
+ targetNodeId: normalizeString(
420
+ binding.targetNodeId ?? binding.target_node_id,
421
+ "",
422
+ ),
423
+ targetPortId: normalizeString(
424
+ binding.targetPortId ?? binding.target_port_id,
425
+ "",
426
+ ),
427
+ backpressurePolicy:
428
+ normalizeString(
429
+ binding.backpressurePolicy ?? binding.backpressure_policy,
430
+ null,
431
+ ) ?? BackpressurePolicy.QUEUE,
432
+ queueDepth: Math.max(
433
+ 0,
434
+ Number(binding.queueDepth ?? binding.queue_depth ?? 1),
435
+ ),
436
+ };
437
+ }
438
+
439
+ export function normalizeProgram(program = {}) {
440
+ return {
441
+ programId: normalizeString(program.programId ?? program.program_id, ""),
442
+ name: normalizeString(program.name, null),
443
+ version: normalizeString(program.version, null),
444
+ runtimeTargets: normalizeArray(
445
+ program.runtimeTargets ?? program.runtime_targets,
446
+ )
447
+ .map((target) => normalizeString(target, null))
448
+ .filter(Boolean),
449
+ runtimeTargetClass: normalizeString(
450
+ program.runtimeTargetClass ?? program.runtime_target_class,
451
+ null,
452
+ ),
453
+ standardRuntimeTarget: normalizeString(
454
+ program.standardRuntimeTarget ?? program.standard_runtime_target,
455
+ null,
456
+ ),
457
+ nodes: normalizeArray(program.nodes).map(normalizeNode),
458
+ edges: normalizeArray(program.edges).map(normalizeEdge),
459
+ triggers: normalizeArray(program.triggers).map(normalizeTrigger),
460
+ triggerBindings: normalizeArray(
461
+ program.triggerBindings ?? program.trigger_bindings,
462
+ ).map(normalizeTriggerBinding),
463
+ requiredPlugins: normalizeArray(
464
+ program.requiredPlugins ?? program.required_plugins,
465
+ )
466
+ .map((pluginId) => normalizeString(pluginId, null))
467
+ .filter(Boolean),
468
+ externalInterfaces: normalizeArray(
469
+ program.externalInterfaces ?? program.external_interfaces,
470
+ ).map(normalizeExternalInterface),
471
+ artifactDependencies: normalizeArray(
472
+ program.artifactDependencies ?? program.artifact_dependencies,
473
+ ).map(normalizeArtifactDependency),
474
+ editor:
475
+ program.editor && typeof program.editor === "object"
476
+ ? structuredClone(program.editor)
477
+ : null,
478
+ description: normalizeString(program.description, null),
479
+ };
480
+ }
481
+
482
+ export function normalizeFrame(frame = {}, defaultPortId = null) {
483
+ const normalized = {
484
+ typeRef: normalizeTypeRef(frame.typeRef ?? frame.type_ref ?? {}),
485
+ portId:
486
+ normalizeString(frame.portId ?? frame.port_id, null) ?? defaultPortId,
487
+ alignment: Math.max(1, Number(frame.alignment ?? 8)),
488
+ offset: Math.max(0, Number(frame.offset ?? 0)),
489
+ size: Math.max(0, Number(frame.size ?? 0)),
490
+ ownership: normalizeString(frame.ownership, null),
491
+ generation: Number(frame.generation ?? 0),
492
+ mutability: normalizeString(frame.mutability, null),
493
+ traceId: frame.traceId ?? frame.trace_id ?? null,
494
+ streamId: Number(frame.streamId ?? frame.stream_id ?? 0),
495
+ sequence: frame.sequence ?? 0,
496
+ endOfStream: frame.endOfStream ?? frame.end_of_stream ?? false,
497
+ payload: frame.payload ?? null,
498
+ metadata:
499
+ frame.metadata && typeof frame.metadata === "object"
500
+ ? structuredClone(frame.metadata)
501
+ : null,
502
+ };
503
+ return normalized;
504
+ }
505
+
506
+ export { normalizeExternalInterface, normalizeArtifactDependency };
@@ -0,0 +1,189 @@
1
+ export const FLOW_WASM_WASMEDGE_IMPORT_MODULES = Object.freeze([
2
+ "wasi_snapshot_preview1",
3
+ ]);
4
+
5
+ function getMemoryFromResolver(getMemory = null) {
6
+ if (typeof getMemory !== "function") {
7
+ return null;
8
+ }
9
+ const memory = getMemory();
10
+ return memory && memory.buffer instanceof ArrayBuffer ? memory : null;
11
+ }
12
+
13
+ function writeCompatU32(getMemory, pointer, value) {
14
+ const memory = getMemoryFromResolver(getMemory);
15
+ if (!memory || !pointer) {
16
+ return;
17
+ }
18
+ new DataView(memory.buffer).setUint32(Number(pointer) >>> 0, Number(value) >>> 0, true);
19
+ }
20
+
21
+ function writeCompatU64(getMemory, pointer, value) {
22
+ const memory = getMemoryFromResolver(getMemory);
23
+ if (!memory || !pointer) {
24
+ return;
25
+ }
26
+ new DataView(memory.buffer).setBigUint64(Number(pointer) >>> 0, BigInt(value), true);
27
+ }
28
+
29
+ export function createDefaultWasiPreview1CompatImports({ getMemory } = {}) {
30
+ return {
31
+ wasi_snapshot_preview1: {
32
+ args_sizes_get() {
33
+ return 0;
34
+ },
35
+ args_get() {
36
+ return 0;
37
+ },
38
+ proc_exit() {
39
+ return 0;
40
+ },
41
+ fd_close() {
42
+ return 0;
43
+ },
44
+ fd_seek(_fd, _offsetLow, _offsetHigh, _whence, newOffsetPtr) {
45
+ writeCompatU64(getMemory, newOffsetPtr, 0n);
46
+ return 0;
47
+ },
48
+ fd_write(_fd, iovs, iovsLen, bytesWrittenPtr) {
49
+ const memory = getMemoryFromResolver(getMemory);
50
+ if (!memory) {
51
+ writeCompatU32(getMemory, bytesWrittenPtr, 0);
52
+ return 0;
53
+ }
54
+ const view = new DataView(memory.buffer);
55
+ let written = 0;
56
+ for (let index = 0; index < Number(iovsLen ?? 0); index += 1) {
57
+ const base = (Number(iovs) >>> 0) + index * 8;
58
+ written += view.getUint32(base + 4, true);
59
+ }
60
+ writeCompatU32(getMemory, bytesWrittenPtr, written);
61
+ return 0;
62
+ },
63
+ },
64
+ };
65
+ }
66
+
67
+ export function mergeWasmImportObjects(base = {}, extra = {}) {
68
+ const merged = { ...(base ?? {}) };
69
+ for (const [moduleName, moduleValue] of Object.entries(extra ?? {})) {
70
+ const existing = merged[moduleName];
71
+ if (
72
+ existing &&
73
+ typeof existing === "object" &&
74
+ !Array.isArray(existing) &&
75
+ moduleValue &&
76
+ typeof moduleValue === "object" &&
77
+ !Array.isArray(moduleValue)
78
+ ) {
79
+ merged[moduleName] = {
80
+ ...existing,
81
+ ...moduleValue,
82
+ };
83
+ continue;
84
+ }
85
+ merged[moduleName] = moduleValue;
86
+ }
87
+ return merged;
88
+ }
89
+
90
+ function toWasmModule(value) {
91
+ if (value instanceof WebAssembly.Module) {
92
+ return value;
93
+ }
94
+ if (value instanceof Uint8Array) {
95
+ return new WebAssembly.Module(value);
96
+ }
97
+ if (value instanceof ArrayBuffer) {
98
+ return new WebAssembly.Module(new Uint8Array(value));
99
+ }
100
+ if (ArrayBuffer.isView(value)) {
101
+ return new WebAssembly.Module(
102
+ new Uint8Array(value.buffer, value.byteOffset, value.byteLength),
103
+ );
104
+ }
105
+ return null;
106
+ }
107
+
108
+ export function listWasmImportModules(value) {
109
+ const module = toWasmModule(value);
110
+ if (!module) {
111
+ return [];
112
+ }
113
+ return Array.from(
114
+ new Set(
115
+ WebAssembly.Module.imports(module)
116
+ .map((entry) => String(entry?.module ?? "").trim())
117
+ .filter(Boolean),
118
+ ),
119
+ ).sort();
120
+ }
121
+
122
+ export function describeFlowWasmImportContract(value) {
123
+ try {
124
+ const modules = listWasmImportModules(value);
125
+ const wasiOnly = modules.every((moduleName) =>
126
+ FLOW_WASM_WASMEDGE_IMPORT_MODULES.includes(moduleName),
127
+ );
128
+ return {
129
+ valid: true,
130
+ modules,
131
+ compatibilityProfile: wasiOnly ? "wasmedge-compatible" : "custom",
132
+ isWasmEdgeCompatible: wasiOnly,
133
+ isHostCompatible: wasiOnly,
134
+ };
135
+ } catch (error) {
136
+ return {
137
+ valid: false,
138
+ modules: [],
139
+ compatibilityProfile: "invalid",
140
+ isWasmEdgeCompatible: false,
141
+ isHostCompatible: false,
142
+ error,
143
+ };
144
+ }
145
+ }
146
+
147
+ export function assertSupportedFlowWasmImportContract(
148
+ value,
149
+ { sourceName = "Compiled flow artifact" } = {},
150
+ ) {
151
+ const contract = describeFlowWasmImportContract(value);
152
+ if (!contract.valid) {
153
+ return contract;
154
+ }
155
+ const unsupportedModules = contract.modules.filter(
156
+ (moduleName) => !FLOW_WASM_WASMEDGE_IMPORT_MODULES.includes(moduleName),
157
+ );
158
+ if (unsupportedModules.length > 0) {
159
+ throw new Error(
160
+ `${sourceName} imports unsupported guest modules ${unsupportedModules.join(", ")}. Supported modules: ${FLOW_WASM_WASMEDGE_IMPORT_MODULES.join(", ")}.`,
161
+ );
162
+ }
163
+ return contract;
164
+ }
165
+
166
+ export function filterImportObjectToWasmModules(imports = {}, modules = []) {
167
+ if (!imports || typeof imports !== "object") {
168
+ return {};
169
+ }
170
+ const moduleSet = new Set(
171
+ Array.isArray(modules) ? modules.filter(Boolean) : [],
172
+ );
173
+ if (moduleSet.size === 0) {
174
+ return {};
175
+ }
176
+ return Object.fromEntries(
177
+ Object.entries(imports).filter(([moduleName]) => moduleSet.has(moduleName)),
178
+ );
179
+ }
180
+
181
+ export default {
182
+ FLOW_WASM_WASMEDGE_IMPORT_MODULES,
183
+ assertSupportedFlowWasmImportContract,
184
+ createDefaultWasiPreview1CompatImports,
185
+ describeFlowWasmImportContract,
186
+ filterImportObjectToWasmModules,
187
+ listWasmImportModules,
188
+ mergeWasmImportObjects,
189
+ };