2026-10-07 02:21:22 -07:00
|
|
|
{ pkgs, core }:
|
|
|
|
|
let
|
|
|
|
|
workerd = import ./workerd.nix { inherit pkgs; };
|
2026-10-07 20:28:19 -07:00
|
|
|
sandbox = import ./sandbox.nix {
|
|
|
|
|
inherit pkgs;
|
|
|
|
|
runtime = workerd;
|
|
|
|
|
executable = "${workerd}/bin/workerd";
|
|
|
|
|
};
|
|
|
|
|
nativeProbe =
|
|
|
|
|
pkgs.runCommand "quixos-restricted-native-probe"
|
|
|
|
|
{
|
|
|
|
|
nativeBuildInputs = [ pkgs.stdenv.cc ];
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
mkdir -p "$out/bin"
|
|
|
|
|
$CC -O2 -Wall -Wextra -Werror ${./sandbox-probe.c} -o "$out/bin/probe"
|
|
|
|
|
'';
|
|
|
|
|
nativeProbeSandbox = import ./sandbox.nix {
|
|
|
|
|
inherit pkgs;
|
|
|
|
|
runtime = nativeProbe;
|
|
|
|
|
executable = "${nativeProbe}/bin/probe";
|
|
|
|
|
};
|
2026-10-07 21:14:55 -07:00
|
|
|
identityLauncher =
|
|
|
|
|
pkgs.runCommand "quixos-restricted-identity-launcher"
|
|
|
|
|
{
|
|
|
|
|
nativeBuildInputs = [ pkgs.stdenv.cc ];
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
mkdir -p "$out/bin"
|
|
|
|
|
$CC -O2 -Wall -Wextra -Werror ${./identity-launcher.c} \
|
|
|
|
|
-DSANDBOX_EXECUTABLE='"${sandbox}/bin/quixos-restricted-sandbox"' \
|
|
|
|
|
-o "$out/bin/quixos-restricted-engine"
|
|
|
|
|
'';
|
2026-10-07 02:21:22 -07:00
|
|
|
# Transaction-port/value adapters do not need the browser's CRDT/Wasm engine.
|
|
|
|
|
# Keep this surface explicit; it is bundled into checked restricted handlers.
|
|
|
|
|
sdk = pkgs.runCommand "quixos-restricted-sdk" { nativeBuildInputs = [ pkgs.esbuild ]; } ''
|
|
|
|
|
mkdir -p "$out"
|
|
|
|
|
cat > entry.mjs <<'JS'
|
|
|
|
|
export {definePortableRegistry,QxReject} from '${core}/dist/portable.js';
|
|
|
|
|
export {encodeArgument,decodeArgument,canonicalJson,parseJson} from '${core}/dist/value.js';
|
|
|
|
|
export {workspaceId,operationId,objectId,entryId,hashIdentity} from '${core}/dist/identity.js';
|
|
|
|
|
export {reference} from '${core}/dist/references.js';
|
|
|
|
|
export {CodecError,ExecutionError} from '${core}/dist/limits.js';
|
|
|
|
|
JS
|
|
|
|
|
esbuild entry.mjs --bundle --platform=neutral --format=esm --target=es2024 --outfile="$out/core.mjs"
|
|
|
|
|
'';
|
|
|
|
|
runtime =
|
|
|
|
|
pkgs.runCommand "quixos-restricted-execution" { nativeBuildInputs = [ pkgs.makeWrapper ]; }
|
|
|
|
|
''
|
|
|
|
|
mkdir -p "$out/lib" "$out/bin"
|
|
|
|
|
cp ${./service.mjs} "$out/lib/service.mjs"
|
|
|
|
|
cp ${./worker.mjs} "$out/lib/worker.mjs"
|
|
|
|
|
makeWrapper ${pkgs.nodejs_24}/bin/node "$out/bin/quixos-restricted-registry" \
|
|
|
|
|
--add-flags "$out/lib/service.mjs" \
|
|
|
|
|
--set QUIXOS_RESTRICTED_WORKERD ${workerd}/bin/workerd \
|
2026-10-07 20:28:19 -07:00
|
|
|
--set QUIXOS_RESTRICTED_SANDBOX ${sandbox}/bin/quixos-restricted-sandbox \
|
2026-10-07 02:21:22 -07:00
|
|
|
--set QUIXOS_RESTRICTED_WORKER "$out/lib/worker.mjs"
|
|
|
|
|
'';
|
|
|
|
|
qualification =
|
|
|
|
|
pkgs.runCommand "quixos-restricted-execution-qualification"
|
|
|
|
|
{
|
|
|
|
|
nativeBuildInputs = [ pkgs.nodejs_24 ];
|
|
|
|
|
QUIXOS_TEST_WORKERD = "${workerd}/bin/workerd";
|
|
|
|
|
QUIXOS_TEST_SDK = "${sdk}/core.mjs";
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
node --test ${./.}/service.test.mjs
|
|
|
|
|
touch "$out"
|
|
|
|
|
'';
|
|
|
|
|
in
|
|
|
|
|
{
|
|
|
|
|
inherit
|
|
|
|
|
workerd
|
2026-10-07 20:28:19 -07:00
|
|
|
sandbox
|
2026-10-07 21:14:55 -07:00
|
|
|
identityLauncher
|
2026-10-07 20:28:19 -07:00
|
|
|
nativeProbeSandbox
|
2026-10-07 02:21:22 -07:00
|
|
|
sdk
|
|
|
|
|
runtime
|
|
|
|
|
qualification
|
|
|
|
|
;
|
|
|
|
|
}
|