From 7ad28f10e7f9dd66b1736cee4efc9490195c3208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Mon, 3 Nov 2025 21:13:37 +0100 Subject: [PATCH 1/2] Update @typeberry/lib --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07765be..a4baa83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@radix-ui/react-tooltip": "^1.1.7", "@reduxjs/toolkit": "^2.9.0", "@tanstack/react-virtual": "^3.10.9", - "@typeberry/lib": "^0.1.0", + "@typeberry/lib": "^0.2.0", "@typeberry/spectool-wasm": "0.23.0", "@uiw/react-codemirror": "^4.25.1", "class-variance-authority": "^0.7.1", @@ -3515,9 +3515,9 @@ } }, "node_modules/@typeberry/lib": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@typeberry/lib/-/lib-0.1.0.tgz", - "integrity": "sha512-zijGu08W6OBe4dk70TfjCmB3u4c0YcWi0jMCOpCSDEjMP1lyJKGu1cxGHvJfkmnRxmsyKLta/S6h8NpRC7oiOA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@typeberry/lib/-/lib-0.2.0.tgz", + "integrity": "sha512-YIx/y2dhpoSVVErqSLv0tpxazbyYq41kkq6/YuigVe1jAXCM1hmGnIb5YPAqHSOIqqWXdOX7NJowtq/vNEZnUw==", "license": "MPL-2.0" }, "node_modules/@typeberry/spectool-wasm": { diff --git a/package.json b/package.json index 30291c3..2c4fe03 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@radix-ui/react-tooltip": "^1.1.7", "@reduxjs/toolkit": "^2.9.0", "@tanstack/react-virtual": "^3.10.9", - "@typeberry/lib": "^0.1.0", + "@typeberry/lib": "^0.2.0", "@typeberry/spectool-wasm": "0.23.0", "@uiw/react-codemirror": "^4.25.1", "class-variance-authority": "^0.7.1", From d2d35c07c64b9f82310883c98be976f6265b0d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Mon, 3 Nov 2025 21:26:05 +0100 Subject: [PATCH 2/2] Fix loading & updating meta-based pvms. --- src/components/PvmSelect/index.tsx | 46 +++++++++++++++++++---------- src/store/debugger/debuggerSlice.ts | 4 +-- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/components/PvmSelect/index.tsx b/src/components/PvmSelect/index.tsx index 7cfd657..11743d5 100644 --- a/src/components/PvmSelect/index.tsx +++ b/src/components/PvmSelect/index.tsx @@ -18,6 +18,7 @@ import { setSelectedPvms, } from "@/store/debugger/debuggerSlice.ts"; import { SerializedFile, serializeFile } from "@/lib/utils.ts"; +import { logger } from "@/utils/loggerService"; interface WasmMetadata { name: string; @@ -37,6 +38,9 @@ export interface SelectedPvmWithPayload { label: string; params?: { file?: SerializedFile; + /** Metadata url. */ + metaUrl?: string; + /** WASM blob url. */ url?: string; }; removable?: boolean; @@ -131,6 +135,7 @@ export const PvmSelect = () => { id, type: PvmTypes.WASM_URL, params: { + metaUrl: url, url: path.join(url, "../", wasmMetadata.wasmBlobUrl), }, label: `${id} v${wasmMetadata.version}` as string, @@ -167,27 +172,36 @@ export const PvmSelect = () => { Promise.all( pvmsWithPayload.map(async (pvm) => { if (pvm.type === PvmTypes.WASM_URL) { - if (pvm.params?.url) { - const metadata = await fetchWasmMetadata(pvm.params.url); - if (!metadata) { - throw new Error("Invalid metadata"); + if (pvm.params?.metaUrl) { + try { + const metadata = await fetchWasmMetadata(pvm.params.metaUrl); + if (!metadata) { + throw new Error("Invalid metadata"); + } + return { + ...pvm, + id: pvm.id, + type: PvmTypes.WASM_URL, + params: { + ...pvmsWithPayload.find((p) => p.id === pvm.id)?.params, + url: path.join(pvm.params.metaUrl, "../", metadata.wasmBlobUrl).replace("https:/", "https://"), // TODO: check why the http protocol path is getting messed up + }, + label: `${metadata.name} v${metadata.version}` as string, + }; + } catch (e) { + logger.error(`Error while updating ${pvm.id}: ${e}`, { error: e }); } - return { - id: pvm.id, - type: PvmTypes.WASM_URL, - params: { - ...pvmsWithPayload.find((p) => p.id === pvm.id)?.params, - url: path.join(pvm.params.url, "../", metadata.wasmBlobUrl).replace("https:/", "https://"), // TODO: check why the http protocol path is getting messed up - }, - label: `${metadata.name} v${metadata.version}` as string, - }; } } return pvm; }), - ).then((values) => { - dispatch(setPvmOptions(values)); - }); + ) + .then((values) => { + dispatch(setPvmOptions(values)); + }) + .catch((e) => { + logger.error(`Unable to fetch PVM: ${e}`, { error: e }); + }); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); diff --git a/src/store/debugger/debuggerSlice.ts b/src/store/debugger/debuggerSlice.ts index 951c8ef..fd8491e 100644 --- a/src/store/debugger/debuggerSlice.ts +++ b/src/store/debugger/debuggerSlice.ts @@ -54,14 +54,14 @@ const initialState: DebuggerState = { { id: AvailablePvms.POLKAVM, type: PvmTypes.WASM_URL, - params: { url: "https://todr.me/polkavm/pvm-metadata.json" }, + params: { metaUrl: "https://todr.me/polkavm/pvm-metadata.json" }, label: "PolkaVM", }, { id: AvailablePvms.ANANAS, type: PvmTypes.WASM_URL, params: { - url: "https://todr.me/anan-as/pvm-metadata.json", + metaUrl: "https://todr.me/anan-as/pvm-metadata.json", }, label: "Anan-AS", },