sdn-flow 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/SKILLS.md +7 -0
- package/.claude/skills/sdn-plugin-abi-compliance/SKILL.md +56 -0
- package/.claude/todo/001-js-host-startup-and-deno.md +85 -0
- package/LICENSE +21 -0
- package/README.md +223 -0
- package/bin/sdn-flow-host.js +169 -0
- package/docs/.nojekyll +0 -0
- package/docs/ARCHITECTURE.md +200 -0
- package/docs/HOST_CAPABILITY_MODEL.md +317 -0
- package/docs/PLUGIN_ARCHITECTURE.md +145 -0
- package/docs/PLUGIN_COMPATIBILITY.md +61 -0
- package/docs/PLUGIN_COMPLIANCE_CHECKS.md +82 -0
- package/docs/PLUGIN_MANIFEST.md +94 -0
- package/docs/css/style.css +465 -0
- package/docs/index.html +218 -0
- package/docs/js/app.mjs +751 -0
- package/docs/js/editor-panel.mjs +203 -0
- package/docs/js/flow-canvas.mjs +515 -0
- package/docs/js/flow-model.mjs +391 -0
- package/docs/js/workers/emception.worker.js +146 -0
- package/docs/js/workers/pyodide.worker.js +134 -0
- package/native/flow_source_generator.cpp +1958 -0
- package/package.json +67 -0
- package/schemas/FlowRuntimeAbi.fbs +91 -0
- package/src/auth/canonicalize.js +5 -0
- package/src/auth/index.js +11 -0
- package/src/auth/permissions.js +8 -0
- package/src/compiler/CppFlowSourceGenerator.js +475 -0
- package/src/compiler/EmceptionCompilerAdapter.js +244 -0
- package/src/compiler/SignedArtifactCatalog.js +152 -0
- package/src/compiler/index.js +8 -0
- package/src/compiler/nativeFlowSourceGeneratorTool.js +144 -0
- package/src/compliance/index.js +13 -0
- package/src/compliance/pluginCompliance.js +11 -0
- package/src/deploy/FlowDeploymentClient.js +532 -0
- package/src/deploy/index.js +8 -0
- package/src/designer/FlowDesignerSession.js +158 -0
- package/src/designer/index.js +2 -0
- package/src/designer/requirements.js +184 -0
- package/src/generated/runtimeAbiLayouts.js +544 -0
- package/src/host/appHost.js +105 -0
- package/src/host/autoHost.js +113 -0
- package/src/host/browserHostAdapters.js +108 -0
- package/src/host/compiledFlowRuntimeHost.js +703 -0
- package/src/host/constants.js +55 -0
- package/src/host/dependencyRuntime.js +227 -0
- package/src/host/descriptorAbi.js +351 -0
- package/src/host/fetchService.js +237 -0
- package/src/host/httpHostAdapters.js +280 -0
- package/src/host/index.js +91 -0
- package/src/host/installedFlowHost.js +885 -0
- package/src/host/invocationAbi.js +440 -0
- package/src/host/normalize.js +372 -0
- package/src/host/packageManagers.js +369 -0
- package/src/host/profile.js +134 -0
- package/src/host/runtimeAbi.js +106 -0
- package/src/host/workspace.js +895 -0
- package/src/index.js +8 -0
- package/src/runtime/FlowRuntime.js +273 -0
- package/src/runtime/MethodRegistry.js +295 -0
- package/src/runtime/constants.js +44 -0
- package/src/runtime/index.js +19 -0
- package/src/runtime/normalize.js +377 -0
- package/src/transport/index.js +7 -0
- package/src/transport/pki.js +7 -0
- package/src/utils/crypto.js +7 -0
- package/src/utils/encoding.js +65 -0
- package/src/utils/wasmCrypto.js +69 -0
- package/tools/run-plugin-compliance-check.mjs +153 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export const HostedRuntimeKind = Object.freeze({
|
|
2
|
+
FLOW: "flow",
|
|
3
|
+
PLUGIN: "plugin",
|
|
4
|
+
SERVICE: "service",
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
export const HostedRuntimeAuthority = Object.freeze({
|
|
8
|
+
LOCAL: "local",
|
|
9
|
+
REMOTE: "remote",
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const HostedRuntimeStartupPhase = Object.freeze({
|
|
13
|
+
BOOTSTRAP: "bootstrap",
|
|
14
|
+
EARLY: "early",
|
|
15
|
+
SESSION: "session",
|
|
16
|
+
ON_DEMAND: "on-demand",
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const HostedRuntimeBindingDirection = Object.freeze({
|
|
20
|
+
LISTEN: "listen",
|
|
21
|
+
DIAL: "dial",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const HostedRuntimeTransport = Object.freeze({
|
|
25
|
+
SAME_APP: "same-app",
|
|
26
|
+
DIRECT: "direct",
|
|
27
|
+
WEBRTC: "webrtc",
|
|
28
|
+
SDN_PROTOCOL: "sdn-protocol",
|
|
29
|
+
HTTP: "http",
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const HostedRuntimeAdapter = Object.freeze({
|
|
33
|
+
SDN_JS: "sdn-js",
|
|
34
|
+
HOST_INTERNAL: "host-internal",
|
|
35
|
+
GO_SDN: "go-sdn",
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const HostedRuntimeEngine = Object.freeze({
|
|
39
|
+
NODE: "node",
|
|
40
|
+
DENO: "deno",
|
|
41
|
+
BUN: "bun",
|
|
42
|
+
BROWSER: "browser",
|
|
43
|
+
WASI: "wasi",
|
|
44
|
+
GO: "go",
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export default {
|
|
48
|
+
HostedRuntimeAdapter,
|
|
49
|
+
HostedRuntimeEngine,
|
|
50
|
+
HostedRuntimeAuthority,
|
|
51
|
+
HostedRuntimeBindingDirection,
|
|
52
|
+
HostedRuntimeKind,
|
|
53
|
+
HostedRuntimeStartupPhase,
|
|
54
|
+
HostedRuntimeTransport,
|
|
55
|
+
};
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { bindCompiledDescriptorAbi } from "./descriptorAbi.js";
|
|
2
|
+
|
|
3
|
+
function resolveDependencyImportObject(imports, descriptor) {
|
|
4
|
+
if (typeof imports === "function") {
|
|
5
|
+
return imports(descriptor) ?? {};
|
|
6
|
+
}
|
|
7
|
+
if (imports instanceof Map) {
|
|
8
|
+
return (
|
|
9
|
+
imports.get(descriptor.dependencyId) ??
|
|
10
|
+
imports.get(descriptor.pluginId) ??
|
|
11
|
+
imports.get("default") ??
|
|
12
|
+
{}
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
if (imports && typeof imports === "object") {
|
|
16
|
+
return (
|
|
17
|
+
imports[descriptor.dependencyId] ??
|
|
18
|
+
imports[descriptor.pluginId] ??
|
|
19
|
+
imports.default ??
|
|
20
|
+
{}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function resolveNamedExport(exports, symbol) {
|
|
27
|
+
if (!symbol) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return exports?.[symbol] ?? exports?.[`_${symbol}`] ?? null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function toUint8Array(data) {
|
|
34
|
+
if (data instanceof Uint8Array) {
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
if (ArrayBuffer.isView(data)) {
|
|
38
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
39
|
+
}
|
|
40
|
+
if (data instanceof ArrayBuffer) {
|
|
41
|
+
return new Uint8Array(data);
|
|
42
|
+
}
|
|
43
|
+
throw new TypeError("Expected Uint8Array, ArrayBufferView, or ArrayBuffer.");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function cloneBytes(memory, offset, size) {
|
|
47
|
+
const base = Number(offset) >>> 0;
|
|
48
|
+
const length = Number(size) >>> 0;
|
|
49
|
+
if (length === 0) {
|
|
50
|
+
return new Uint8Array();
|
|
51
|
+
}
|
|
52
|
+
return new Uint8Array(new Uint8Array(memory.buffer, base, length));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function writeBytes(memory, pointer, data) {
|
|
56
|
+
const bytes = new Uint8Array(memory.buffer);
|
|
57
|
+
bytes.set(toUint8Array(data), Number(pointer) >>> 0);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function getWasmExports(instanceResult) {
|
|
61
|
+
if (instanceResult?.instance?.exports) {
|
|
62
|
+
return instanceResult.instance.exports;
|
|
63
|
+
}
|
|
64
|
+
if (instanceResult?.exports) {
|
|
65
|
+
return instanceResult.exports;
|
|
66
|
+
}
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function createRawStreamInvoker(dependency) {
|
|
71
|
+
const { resolvedExports, memory } = dependency;
|
|
72
|
+
if (
|
|
73
|
+
typeof resolvedExports?.streamInvoke !== "function" ||
|
|
74
|
+
typeof resolvedExports?.malloc !== "function" ||
|
|
75
|
+
typeof resolvedExports?.free !== "function" ||
|
|
76
|
+
!memory
|
|
77
|
+
) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return function invokeRawStream(requestBytes) {
|
|
81
|
+
const request = toUint8Array(requestBytes);
|
|
82
|
+
const requestSize = request.length;
|
|
83
|
+
const requestPointer =
|
|
84
|
+
requestSize > 0 ? Number(resolvedExports.malloc(requestSize)) >>> 0 : 0;
|
|
85
|
+
const sizePointer = Number(resolvedExports.malloc(4)) >>> 0;
|
|
86
|
+
const view = new DataView(memory.buffer);
|
|
87
|
+
try {
|
|
88
|
+
if (requestSize > 0) {
|
|
89
|
+
writeBytes(memory, requestPointer, request);
|
|
90
|
+
}
|
|
91
|
+
view.setUint32(sizePointer, 0, true);
|
|
92
|
+
const responsePointer =
|
|
93
|
+
Number(
|
|
94
|
+
resolvedExports.streamInvoke(requestPointer, requestSize, sizePointer),
|
|
95
|
+
) >>> 0;
|
|
96
|
+
const responseSize = view.getUint32(sizePointer, true);
|
|
97
|
+
const responseBytes =
|
|
98
|
+
responsePointer !== 0 && responseSize > 0
|
|
99
|
+
? cloneBytes(memory, responsePointer, responseSize)
|
|
100
|
+
: new Uint8Array();
|
|
101
|
+
if (responsePointer !== 0) {
|
|
102
|
+
resolvedExports.free(responsePointer);
|
|
103
|
+
}
|
|
104
|
+
return responseBytes;
|
|
105
|
+
} finally {
|
|
106
|
+
if (requestPointer !== 0) {
|
|
107
|
+
resolvedExports.free(requestPointer);
|
|
108
|
+
}
|
|
109
|
+
resolvedExports.free(sizePointer);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export async function instantiateEmbeddedDependencies({
|
|
115
|
+
artifact,
|
|
116
|
+
instance = null,
|
|
117
|
+
wasmExports = null,
|
|
118
|
+
memory = null,
|
|
119
|
+
imports = {},
|
|
120
|
+
instantiate = WebAssembly.instantiate,
|
|
121
|
+
} = {}) {
|
|
122
|
+
if (typeof instantiate !== "function") {
|
|
123
|
+
throw new TypeError(
|
|
124
|
+
"instantiateEmbeddedDependencies requires an instantiate function.",
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
const bound = await bindCompiledDescriptorAbi({
|
|
128
|
+
artifact,
|
|
129
|
+
instance,
|
|
130
|
+
wasmExports,
|
|
131
|
+
memory,
|
|
132
|
+
});
|
|
133
|
+
const descriptors = bound.readAllDependencyDescriptors();
|
|
134
|
+
const instantiated = [];
|
|
135
|
+
for (let index = 0; index < descriptors.length; index += 1) {
|
|
136
|
+
const descriptor = descriptors[index];
|
|
137
|
+
const importObject = resolveDependencyImportObject(imports, descriptor);
|
|
138
|
+
const instantiatedModule = await instantiate(descriptor.wasmBytes, importObject);
|
|
139
|
+
const exports = getWasmExports(instantiatedModule);
|
|
140
|
+
instantiated.push({
|
|
141
|
+
index,
|
|
142
|
+
dependencyId: descriptor.dependencyId,
|
|
143
|
+
pluginId: descriptor.pluginId,
|
|
144
|
+
descriptor,
|
|
145
|
+
importObject,
|
|
146
|
+
module: instantiatedModule?.module ?? null,
|
|
147
|
+
instance: instantiatedModule?.instance ?? instantiatedModule ?? null,
|
|
148
|
+
exports,
|
|
149
|
+
resolvedExports: {
|
|
150
|
+
init: resolveNamedExport(exports, descriptor.initSymbol),
|
|
151
|
+
destroy: resolveNamedExport(exports, descriptor.destroySymbol),
|
|
152
|
+
malloc: resolveNamedExport(exports, descriptor.mallocSymbol),
|
|
153
|
+
free: resolveNamedExport(exports, descriptor.freeSymbol),
|
|
154
|
+
streamInvoke: resolveNamedExport(exports, descriptor.streamInvokeSymbol),
|
|
155
|
+
manifestBytes: resolveNamedExport(
|
|
156
|
+
exports,
|
|
157
|
+
descriptor.manifestBytesSymbol,
|
|
158
|
+
),
|
|
159
|
+
manifestSize: resolveNamedExport(exports, descriptor.manifestSizeSymbol),
|
|
160
|
+
},
|
|
161
|
+
memory: exports?.memory ?? null,
|
|
162
|
+
});
|
|
163
|
+
instantiated[index].invokeRawStream = createRawStreamInvoker(instantiated[index]);
|
|
164
|
+
instantiated[index].cloneBytes = (offset, size) =>
|
|
165
|
+
cloneBytes(instantiated[index].memory, offset, size);
|
|
166
|
+
instantiated[index].release = (pointer) => {
|
|
167
|
+
if (!pointer || typeof instantiated[index].resolvedExports.free !== "function") {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return instantiated[index].resolvedExports.free(Number(pointer) >>> 0);
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
...bound,
|
|
175
|
+
descriptors,
|
|
176
|
+
instantiated,
|
|
177
|
+
byDependencyId: new Map(
|
|
178
|
+
instantiated.map((dependency) => [dependency.dependencyId, dependency]),
|
|
179
|
+
),
|
|
180
|
+
byPluginId: new Map(
|
|
181
|
+
instantiated.map((dependency) => [dependency.pluginId, dependency]),
|
|
182
|
+
),
|
|
183
|
+
getDependency(binding = {}) {
|
|
184
|
+
if (binding.dependencyId && this.byDependencyId.has(binding.dependencyId)) {
|
|
185
|
+
return this.byDependencyId.get(binding.dependencyId);
|
|
186
|
+
}
|
|
187
|
+
if (binding.pluginId && this.byPluginId.has(binding.pluginId)) {
|
|
188
|
+
return this.byPluginId.get(binding.pluginId);
|
|
189
|
+
}
|
|
190
|
+
const normalizedIndex = Number(binding.index ?? binding.dependencyIndex);
|
|
191
|
+
if (Number.isInteger(normalizedIndex) && normalizedIndex >= 0) {
|
|
192
|
+
return this.instantiated[normalizedIndex] ?? null;
|
|
193
|
+
}
|
|
194
|
+
return null;
|
|
195
|
+
},
|
|
196
|
+
initializeDependency(binding = {}, ...args) {
|
|
197
|
+
const dependency = this.getDependency(binding);
|
|
198
|
+
if (!dependency?.resolvedExports?.init) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
return dependency.resolvedExports.init(...args);
|
|
202
|
+
},
|
|
203
|
+
destroyDependency(binding = {}, ...args) {
|
|
204
|
+
const dependency = this.getDependency(binding);
|
|
205
|
+
if (!dependency?.resolvedExports?.destroy) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
return dependency.resolvedExports.destroy(...args);
|
|
209
|
+
},
|
|
210
|
+
initializeAll(...args) {
|
|
211
|
+
return this.instantiated.map((dependency) =>
|
|
212
|
+
dependency.resolvedExports.init
|
|
213
|
+
? dependency.resolvedExports.init(...args)
|
|
214
|
+
: null,
|
|
215
|
+
);
|
|
216
|
+
},
|
|
217
|
+
destroyAll(...args) {
|
|
218
|
+
return this.instantiated.map((dependency) =>
|
|
219
|
+
dependency.resolvedExports.destroy
|
|
220
|
+
? dependency.resolvedExports.destroy(...args)
|
|
221
|
+
: null,
|
|
222
|
+
);
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export default instantiateEmbeddedDependencies;
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import {
|
|
2
|
+
bindCompiledRuntimeAbi,
|
|
3
|
+
DefaultRequiredRuntimeExportRoles,
|
|
4
|
+
} from "./runtimeAbi.js";
|
|
5
|
+
import {
|
|
6
|
+
FlowNodeDispatchDescriptorLayout,
|
|
7
|
+
SignedArtifactDependencyDescriptorLayout,
|
|
8
|
+
} from "../generated/runtimeAbiLayouts.js";
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
FlowNodeDispatchDescriptorLayout,
|
|
12
|
+
SignedArtifactDependencyDescriptorLayout,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const DefaultRequiredDescriptorExportRoles = Object.freeze([
|
|
16
|
+
...DefaultRequiredRuntimeExportRoles,
|
|
17
|
+
"nodeDispatchDescriptorsSymbol",
|
|
18
|
+
"nodeDispatchDescriptorCountSymbol",
|
|
19
|
+
"dependencyDescriptorsSymbol",
|
|
20
|
+
"dependencyCountSymbol",
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
function resolveMemory(bound, explicitMemory = null) {
|
|
24
|
+
const memory =
|
|
25
|
+
explicitMemory ??
|
|
26
|
+
bound?.wasmExports?.memory ??
|
|
27
|
+
bound?.artifact?.wasmMemory ??
|
|
28
|
+
null;
|
|
29
|
+
if (!memory || !(memory.buffer instanceof ArrayBuffer)) {
|
|
30
|
+
throw new Error(
|
|
31
|
+
"Compiled descriptor ABI requires a WebAssembly.Memory export.",
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
return memory;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function readCString(memory, pointer) {
|
|
38
|
+
if (!pointer) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const bytes = new Uint8Array(memory.buffer);
|
|
42
|
+
let end = pointer >>> 0;
|
|
43
|
+
while (end < bytes.length && bytes[end] !== 0) {
|
|
44
|
+
end += 1;
|
|
45
|
+
}
|
|
46
|
+
return new TextDecoder().decode(bytes.subarray(pointer >>> 0, end));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function cloneBytes(memory, offset, size) {
|
|
50
|
+
const base = Number(offset) >>> 0;
|
|
51
|
+
const length = Number(size) >>> 0;
|
|
52
|
+
if (length === 0) {
|
|
53
|
+
return new Uint8Array();
|
|
54
|
+
}
|
|
55
|
+
const bytes = new Uint8Array(memory.buffer, base, length);
|
|
56
|
+
return new Uint8Array(bytes);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function readNodeDispatchDescriptor(memory, pointer) {
|
|
60
|
+
if (!pointer) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const view = new DataView(memory.buffer);
|
|
64
|
+
const base = pointer >>> 0;
|
|
65
|
+
const nodeIdPointer = view.getUint32(
|
|
66
|
+
base + FlowNodeDispatchDescriptorLayout.fields.nodeIdPointer.offset,
|
|
67
|
+
true,
|
|
68
|
+
);
|
|
69
|
+
const dependencyIdPointer = view.getUint32(
|
|
70
|
+
base + FlowNodeDispatchDescriptorLayout.fields.dependencyIdPointer.offset,
|
|
71
|
+
true,
|
|
72
|
+
);
|
|
73
|
+
const pluginIdPointer = view.getUint32(
|
|
74
|
+
base + FlowNodeDispatchDescriptorLayout.fields.pluginIdPointer.offset,
|
|
75
|
+
true,
|
|
76
|
+
);
|
|
77
|
+
const methodIdPointer = view.getUint32(
|
|
78
|
+
base + FlowNodeDispatchDescriptorLayout.fields.methodIdPointer.offset,
|
|
79
|
+
true,
|
|
80
|
+
);
|
|
81
|
+
const dispatchModelPointer = view.getUint32(
|
|
82
|
+
base + FlowNodeDispatchDescriptorLayout.fields.dispatchModelPointer.offset,
|
|
83
|
+
true,
|
|
84
|
+
);
|
|
85
|
+
const entrypointPointer = view.getUint32(
|
|
86
|
+
base + FlowNodeDispatchDescriptorLayout.fields.entrypointPointer.offset,
|
|
87
|
+
true,
|
|
88
|
+
);
|
|
89
|
+
const manifestBytesSymbolPointer = view.getUint32(
|
|
90
|
+
base + FlowNodeDispatchDescriptorLayout.fields.manifestBytesSymbolPointer.offset,
|
|
91
|
+
true,
|
|
92
|
+
);
|
|
93
|
+
const manifestSizeSymbolPointer = view.getUint32(
|
|
94
|
+
base + FlowNodeDispatchDescriptorLayout.fields.manifestSizeSymbolPointer.offset,
|
|
95
|
+
true,
|
|
96
|
+
);
|
|
97
|
+
const initSymbolPointer = view.getUint32(
|
|
98
|
+
base + FlowNodeDispatchDescriptorLayout.fields.initSymbolPointer.offset,
|
|
99
|
+
true,
|
|
100
|
+
);
|
|
101
|
+
const destroySymbolPointer = view.getUint32(
|
|
102
|
+
base + FlowNodeDispatchDescriptorLayout.fields.destroySymbolPointer.offset,
|
|
103
|
+
true,
|
|
104
|
+
);
|
|
105
|
+
const mallocSymbolPointer = view.getUint32(
|
|
106
|
+
base + FlowNodeDispatchDescriptorLayout.fields.mallocSymbolPointer.offset,
|
|
107
|
+
true,
|
|
108
|
+
);
|
|
109
|
+
const freeSymbolPointer = view.getUint32(
|
|
110
|
+
base + FlowNodeDispatchDescriptorLayout.fields.freeSymbolPointer.offset,
|
|
111
|
+
true,
|
|
112
|
+
);
|
|
113
|
+
const streamInvokeSymbolPointer = view.getUint32(
|
|
114
|
+
base + FlowNodeDispatchDescriptorLayout.fields.streamInvokeSymbolPointer.offset,
|
|
115
|
+
true,
|
|
116
|
+
);
|
|
117
|
+
return {
|
|
118
|
+
nodeIdPointer,
|
|
119
|
+
nodeIndex: view.getUint32(
|
|
120
|
+
base + FlowNodeDispatchDescriptorLayout.fields.nodeIndex.offset,
|
|
121
|
+
true,
|
|
122
|
+
),
|
|
123
|
+
dependencyIdPointer,
|
|
124
|
+
dependencyIndex: view.getUint32(
|
|
125
|
+
base + FlowNodeDispatchDescriptorLayout.fields.dependencyIndex.offset,
|
|
126
|
+
true,
|
|
127
|
+
),
|
|
128
|
+
pluginIdPointer,
|
|
129
|
+
methodIdPointer,
|
|
130
|
+
dispatchModelPointer,
|
|
131
|
+
entrypointPointer,
|
|
132
|
+
manifestBytesSymbolPointer,
|
|
133
|
+
manifestSizeSymbolPointer,
|
|
134
|
+
initSymbolPointer,
|
|
135
|
+
destroySymbolPointer,
|
|
136
|
+
mallocSymbolPointer,
|
|
137
|
+
freeSymbolPointer,
|
|
138
|
+
streamInvokeSymbolPointer,
|
|
139
|
+
nodeId: readCString(memory, nodeIdPointer),
|
|
140
|
+
dependencyId: readCString(memory, dependencyIdPointer),
|
|
141
|
+
pluginId: readCString(memory, pluginIdPointer),
|
|
142
|
+
methodId: readCString(memory, methodIdPointer),
|
|
143
|
+
dispatchModel: readCString(memory, dispatchModelPointer),
|
|
144
|
+
entrypoint: readCString(memory, entrypointPointer),
|
|
145
|
+
manifestBytesSymbol: readCString(memory, manifestBytesSymbolPointer),
|
|
146
|
+
manifestSizeSymbol: readCString(memory, manifestSizeSymbolPointer),
|
|
147
|
+
initSymbol: readCString(memory, initSymbolPointer),
|
|
148
|
+
destroySymbol: readCString(memory, destroySymbolPointer),
|
|
149
|
+
mallocSymbol: readCString(memory, mallocSymbolPointer),
|
|
150
|
+
freeSymbol: readCString(memory, freeSymbolPointer),
|
|
151
|
+
streamInvokeSymbol: readCString(memory, streamInvokeSymbolPointer),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function readSignedArtifactDependencyDescriptor(memory, pointer) {
|
|
156
|
+
if (!pointer) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const view = new DataView(memory.buffer);
|
|
160
|
+
const base = pointer >>> 0;
|
|
161
|
+
const dependencyIdPointer = view.getUint32(
|
|
162
|
+
base +
|
|
163
|
+
SignedArtifactDependencyDescriptorLayout.fields.dependencyIdPointer.offset,
|
|
164
|
+
true,
|
|
165
|
+
);
|
|
166
|
+
const pluginIdPointer = view.getUint32(
|
|
167
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.pluginIdPointer.offset,
|
|
168
|
+
true,
|
|
169
|
+
);
|
|
170
|
+
const versionPointer = view.getUint32(
|
|
171
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.versionPointer.offset,
|
|
172
|
+
true,
|
|
173
|
+
);
|
|
174
|
+
const sha256Pointer = view.getUint32(
|
|
175
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.sha256Pointer.offset,
|
|
176
|
+
true,
|
|
177
|
+
);
|
|
178
|
+
const signaturePointer = view.getUint32(
|
|
179
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.signaturePointer.offset,
|
|
180
|
+
true,
|
|
181
|
+
);
|
|
182
|
+
const signerPublicKeyPointer = view.getUint32(
|
|
183
|
+
base +
|
|
184
|
+
SignedArtifactDependencyDescriptorLayout.fields.signerPublicKeyPointer.offset,
|
|
185
|
+
true,
|
|
186
|
+
);
|
|
187
|
+
const entrypointPointer = view.getUint32(
|
|
188
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.entrypointPointer.offset,
|
|
189
|
+
true,
|
|
190
|
+
);
|
|
191
|
+
const manifestBytesSymbolPointer = view.getUint32(
|
|
192
|
+
base +
|
|
193
|
+
SignedArtifactDependencyDescriptorLayout.fields.manifestBytesSymbolPointer.offset,
|
|
194
|
+
true,
|
|
195
|
+
);
|
|
196
|
+
const manifestSizeSymbolPointer = view.getUint32(
|
|
197
|
+
base +
|
|
198
|
+
SignedArtifactDependencyDescriptorLayout.fields.manifestSizeSymbolPointer.offset,
|
|
199
|
+
true,
|
|
200
|
+
);
|
|
201
|
+
const initSymbolPointer = view.getUint32(
|
|
202
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.initSymbolPointer.offset,
|
|
203
|
+
true,
|
|
204
|
+
);
|
|
205
|
+
const destroySymbolPointer = view.getUint32(
|
|
206
|
+
base +
|
|
207
|
+
SignedArtifactDependencyDescriptorLayout.fields.destroySymbolPointer.offset,
|
|
208
|
+
true,
|
|
209
|
+
);
|
|
210
|
+
const mallocSymbolPointer = view.getUint32(
|
|
211
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.mallocSymbolPointer.offset,
|
|
212
|
+
true,
|
|
213
|
+
);
|
|
214
|
+
const freeSymbolPointer = view.getUint32(
|
|
215
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.freeSymbolPointer.offset,
|
|
216
|
+
true,
|
|
217
|
+
);
|
|
218
|
+
const streamInvokeSymbolPointer = view.getUint32(
|
|
219
|
+
base +
|
|
220
|
+
SignedArtifactDependencyDescriptorLayout.fields.streamInvokeSymbolPointer.offset,
|
|
221
|
+
true,
|
|
222
|
+
);
|
|
223
|
+
const wasmBytesPointer = view.getUint32(
|
|
224
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.wasmBytesPointer.offset,
|
|
225
|
+
true,
|
|
226
|
+
);
|
|
227
|
+
const wasmSize = view.getUint32(
|
|
228
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.wasmSize.offset,
|
|
229
|
+
true,
|
|
230
|
+
);
|
|
231
|
+
const manifestBytesPointer = view.getUint32(
|
|
232
|
+
base +
|
|
233
|
+
SignedArtifactDependencyDescriptorLayout.fields.manifestBytesPointer.offset,
|
|
234
|
+
true,
|
|
235
|
+
);
|
|
236
|
+
const manifestSize = view.getUint32(
|
|
237
|
+
base + SignedArtifactDependencyDescriptorLayout.fields.manifestSize.offset,
|
|
238
|
+
true,
|
|
239
|
+
);
|
|
240
|
+
return {
|
|
241
|
+
dependencyIdPointer,
|
|
242
|
+
pluginIdPointer,
|
|
243
|
+
versionPointer,
|
|
244
|
+
sha256Pointer,
|
|
245
|
+
signaturePointer,
|
|
246
|
+
signerPublicKeyPointer,
|
|
247
|
+
entrypointPointer,
|
|
248
|
+
manifestBytesSymbolPointer,
|
|
249
|
+
manifestSizeSymbolPointer,
|
|
250
|
+
initSymbolPointer,
|
|
251
|
+
destroySymbolPointer,
|
|
252
|
+
mallocSymbolPointer,
|
|
253
|
+
freeSymbolPointer,
|
|
254
|
+
streamInvokeSymbolPointer,
|
|
255
|
+
wasmBytesPointer,
|
|
256
|
+
wasmSize,
|
|
257
|
+
manifestBytesPointer,
|
|
258
|
+
manifestSize,
|
|
259
|
+
dependencyId: readCString(memory, dependencyIdPointer),
|
|
260
|
+
pluginId: readCString(memory, pluginIdPointer),
|
|
261
|
+
version: readCString(memory, versionPointer),
|
|
262
|
+
sha256: readCString(memory, sha256Pointer),
|
|
263
|
+
signature: readCString(memory, signaturePointer),
|
|
264
|
+
signerPublicKey: readCString(memory, signerPublicKeyPointer),
|
|
265
|
+
entrypoint: readCString(memory, entrypointPointer),
|
|
266
|
+
manifestBytesSymbol: readCString(memory, manifestBytesSymbolPointer),
|
|
267
|
+
manifestSizeSymbol: readCString(memory, manifestSizeSymbolPointer),
|
|
268
|
+
initSymbol: readCString(memory, initSymbolPointer),
|
|
269
|
+
destroySymbol: readCString(memory, destroySymbolPointer),
|
|
270
|
+
mallocSymbol: readCString(memory, mallocSymbolPointer),
|
|
271
|
+
freeSymbol: readCString(memory, freeSymbolPointer),
|
|
272
|
+
streamInvokeSymbol: readCString(memory, streamInvokeSymbolPointer),
|
|
273
|
+
wasmBytes: cloneBytes(memory, wasmBytesPointer, wasmSize),
|
|
274
|
+
manifestBytes: cloneBytes(memory, manifestBytesPointer, manifestSize),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export async function bindCompiledDescriptorAbi({
|
|
279
|
+
artifact,
|
|
280
|
+
instance = null,
|
|
281
|
+
wasmExports = null,
|
|
282
|
+
memory = null,
|
|
283
|
+
requiredRoles = DefaultRequiredDescriptorExportRoles,
|
|
284
|
+
} = {}) {
|
|
285
|
+
const bound = await bindCompiledRuntimeAbi({
|
|
286
|
+
artifact,
|
|
287
|
+
instance,
|
|
288
|
+
wasmExports,
|
|
289
|
+
requiredRoles,
|
|
290
|
+
});
|
|
291
|
+
const resolvedMemory = resolveMemory(bound, memory);
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
...bound,
|
|
295
|
+
memory: resolvedMemory,
|
|
296
|
+
readNodeDispatchDescriptor(pointer) {
|
|
297
|
+
return readNodeDispatchDescriptor(resolvedMemory, pointer);
|
|
298
|
+
},
|
|
299
|
+
readDependencyDescriptor(pointer) {
|
|
300
|
+
return readSignedArtifactDependencyDescriptor(resolvedMemory, pointer);
|
|
301
|
+
},
|
|
302
|
+
getNodeDispatchDescriptorsPointer() {
|
|
303
|
+
return Number(bound.resolvedByRole.nodeDispatchDescriptorsSymbol()) >>> 0;
|
|
304
|
+
},
|
|
305
|
+
getNodeDispatchDescriptorCount() {
|
|
306
|
+
return (
|
|
307
|
+
Number(bound.resolvedByRole.nodeDispatchDescriptorCountSymbol()) >>> 0
|
|
308
|
+
);
|
|
309
|
+
},
|
|
310
|
+
getDependencyDescriptorsPointer() {
|
|
311
|
+
return Number(bound.resolvedByRole.dependencyDescriptorsSymbol()) >>> 0;
|
|
312
|
+
},
|
|
313
|
+
getDependencyDescriptorCount() {
|
|
314
|
+
return Number(bound.resolvedByRole.dependencyCountSymbol()) >>> 0;
|
|
315
|
+
},
|
|
316
|
+
readNodeDispatchDescriptorAt(index) {
|
|
317
|
+
const normalizedIndex = Number(index) >>> 0;
|
|
318
|
+
if (normalizedIndex >= this.getNodeDispatchDescriptorCount()) {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
return this.readNodeDispatchDescriptor(
|
|
322
|
+
this.getNodeDispatchDescriptorsPointer() +
|
|
323
|
+
normalizedIndex * FlowNodeDispatchDescriptorLayout.size,
|
|
324
|
+
);
|
|
325
|
+
},
|
|
326
|
+
readDependencyDescriptorAt(index) {
|
|
327
|
+
const normalizedIndex = Number(index) >>> 0;
|
|
328
|
+
if (normalizedIndex >= this.getDependencyDescriptorCount()) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
return this.readDependencyDescriptor(
|
|
332
|
+
this.getDependencyDescriptorsPointer() +
|
|
333
|
+
normalizedIndex * SignedArtifactDependencyDescriptorLayout.size,
|
|
334
|
+
);
|
|
335
|
+
},
|
|
336
|
+
readAllNodeDispatchDescriptors() {
|
|
337
|
+
return Array.from(
|
|
338
|
+
{ length: this.getNodeDispatchDescriptorCount() },
|
|
339
|
+
(_unused, index) => this.readNodeDispatchDescriptorAt(index),
|
|
340
|
+
);
|
|
341
|
+
},
|
|
342
|
+
readAllDependencyDescriptors() {
|
|
343
|
+
return Array.from(
|
|
344
|
+
{ length: this.getDependencyDescriptorCount() },
|
|
345
|
+
(_unused, index) => this.readDependencyDescriptorAt(index),
|
|
346
|
+
);
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export default bindCompiledDescriptorAbi;
|