From ad84e0e87ac62e6327a134c8f6fc6e6b1437dbe5 Mon Sep 17 00:00:00 2001 From: Maksym H Date: Mon, 27 Apr 2026 13:05:58 +0100 Subject: [PATCH] to latest of sdk --- CHANGELOG.md | 10 +++++++ package.json | 8 +++--- pnpm-lock.yaml | 43 +++++++++++++++--------------- src/browser/host-runtime.ts | 53 ++++++++++++++++--------------------- test/test-product.ts | 8 +++--- 5 files changed, 63 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 000540a..9cafb57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 0.7.2 + +### Fixed + +- **Permission handler uses single `RemotePermission`** — upstream 0.7.2 refined the spec to use a single `RemotePermission` per request (not batched array). The test host now matches. + +### Changed + +- **Dependencies** — `@novasamatech/host-api`, `host-container`, `product-sdk` → ^0.7.2. Upstream changes include ABI-stable method ordering, notification permission gate, and restored deprecated JSON-RPC methods for backward compatibility. + ## 0.7.1 ### Fixed diff --git a/package.json b/package.json index 7b39da1..ecf7cfd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@parity/host-api-test-sdk", - "version": "0.7.1", + "version": "0.7.2", "description": "Lightweight test host for Spektr product E2E testing — embeds dapps with auto-signing dev accounts, no Docker needed", "license": "MIT", "repository": { @@ -42,11 +42,11 @@ } }, "dependencies": { - "@novasamatech/host-api": "0.7.0" + "@novasamatech/host-api": "^0.7.2" }, "devDependencies": { - "@novasamatech/host-container": "0.7.0", - "@novasamatech/product-sdk": "^0.7.0", + "@novasamatech/host-container": "^0.7.2", + "@novasamatech/product-sdk": "^0.7.2", "@polkadot/keyring": "^14.0.0", "@polkadot/types": "^16.0.0", "@polkadot/util": "^14.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd5d9ac..d90e976 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,18 +9,18 @@ importers: .: dependencies: '@novasamatech/host-api': - specifier: 0.7.0 - version: 0.7.0 + specifier: ^0.7.2 + version: 0.7.2 '@playwright/test': specifier: '>=1.0.0' version: 1.58.2 devDependencies: '@novasamatech/host-container': - specifier: 0.7.0 - version: 0.7.0(esbuild@0.25.12)(rxjs@7.8.2) + specifier: ^0.7.2 + version: 0.7.2(esbuild@0.25.12)(rxjs@7.8.2) '@novasamatech/product-sdk': - specifier: ^0.7.0 - version: 0.7.0(@polkadot/api@16.5.6)(@polkadot/util@14.0.1)(esbuild@0.25.12)(rxjs@7.8.2) + specifier: ^0.7.2 + version: 0.7.2(@polkadot/api@16.5.6)(@polkadot/util@14.0.1)(esbuild@0.25.12)(rxjs@7.8.2) '@polkadot/keyring': specifier: ^14.0.0 version: 14.0.1(@polkadot/util-crypto@14.0.1(@polkadot/util@14.0.1))(@polkadot/util@14.0.1) @@ -232,17 +232,17 @@ packages: resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} engines: {node: '>= 20.19.0'} - '@novasamatech/host-api@0.7.0': - resolution: {integrity: sha512-iKlhY1es9mwMNFoYvDrDm1R3HZH6Decgj/28WYz/LpGjywv2zhxGiK9JBoxNSsBaURbXsE8cXK/hrcl7+qEyXg==} + '@novasamatech/host-api@0.7.2': + resolution: {integrity: sha512-5ArbQ1dz0BGAlcdFQ9Iz4HAog4NjmuIavDsaM83dhAkDRk3zPjalbnOQuNd91yvPZkVxWAPy4XXUaDYE9xq4Xg==} - '@novasamatech/host-container@0.7.0': - resolution: {integrity: sha512-IBiJ5pOIwnrgMaET/dISpob4BPe32edRbYWttE9XXiDkCoxNNW7Kf0qH92YleXF1WM1z3mNnw/my5OdZoTN9hg==} + '@novasamatech/host-container@0.7.2': + resolution: {integrity: sha512-nfWRe/e9eK+a0tl5Nv+TCAaMeUAKzVSkGI4Y3GYagM0BaP8u4n7oENEg16IBPWXjVc3RST4NRtzNRAop8knxJw==} - '@novasamatech/product-sdk@0.7.0': - resolution: {integrity: sha512-bVsFiEfczjt/fc+gPgvFXlQzyJJNaXF+F7J72kj0qWQESkJQ1BUI9TSVmuRYE385QjcI8VlrllPUatDp5EhRnQ==} + '@novasamatech/product-sdk@0.7.2': + resolution: {integrity: sha512-gYOwgihIY5u3JMRYYJT0MwddHuiZvS41vJ6QED2d1sCZkGdo5B0r6nQuzdlUVxDIwJ7eqiwAywTPe8PvCHh/MA==} - '@novasamatech/scale@0.7.0': - resolution: {integrity: sha512-JSeLpvrDtHZ6hdYhPCFp4omugHZnqoWBlzaxXKV5IuUx2zDz7q20dh0oxz4Si/mU51zsoQWaGLLJXQ6gTUuFEA==} + '@novasamatech/scale@0.7.2': + resolution: {integrity: sha512-3OXqVdKeX/Y+3Mf+gytxd6cuo+4YrWeZeQbFg/8dNrxwtLo14XsfUXZKRwuKje5i5oN3/RQrRFgXW/0IuGjaWQ==} '@playwright/test@1.58.2': resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} @@ -1308,19 +1308,20 @@ snapshots: '@noble/hashes@2.2.0': {} - '@novasamatech/host-api@0.7.0': + '@novasamatech/host-api@0.7.2': dependencies: - '@novasamatech/scale': 0.7.0 + '@novasamatech/scale': 0.7.2 nanoevents: 9.1.0 nanoid: 5.1.9 neverthrow: 8.2.0 scale-ts: 1.6.1 - '@novasamatech/host-container@0.7.0(esbuild@0.25.12)(rxjs@7.8.2)': + '@novasamatech/host-container@0.7.2(esbuild@0.25.12)(rxjs@7.8.2)': dependencies: '@noble/hashes': 2.2.0 - '@novasamatech/host-api': 0.7.0 + '@novasamatech/host-api': 0.7.2 nanoid: 5.1.9 + neverthrow: 8.2.0 polkadot-api: 2.0.2(esbuild@0.25.12)(rxjs@7.8.2) transitivePeerDependencies: - bufferutil @@ -1329,9 +1330,9 @@ snapshots: - supports-color - utf-8-validate - '@novasamatech/product-sdk@0.7.0(@polkadot/api@16.5.6)(@polkadot/util@14.0.1)(esbuild@0.25.12)(rxjs@7.8.2)': + '@novasamatech/product-sdk@0.7.2(@polkadot/api@16.5.6)(@polkadot/util@14.0.1)(esbuild@0.25.12)(rxjs@7.8.2)': dependencies: - '@novasamatech/host-api': 0.7.0 + '@novasamatech/host-api': 0.7.2 '@polkadot-api/json-rpc-provider-proxy': 0.4.0 '@polkadot/extension-inject': 0.63.1(@polkadot/api@16.5.6)(@polkadot/util@14.0.1) neverthrow: 8.2.0 @@ -1345,7 +1346,7 @@ snapshots: - supports-color - utf-8-validate - '@novasamatech/scale@0.7.0': + '@novasamatech/scale@0.7.2': dependencies: '@polkadot-api/utils': 0.4.0 scale-ts: 1.6.1 diff --git a/src/browser/host-runtime.ts b/src/browser/host-runtime.ts index 9273117..8112313 100644 --- a/src/browser/host-runtime.ts +++ b/src/browser/host-runtime.ts @@ -289,41 +289,34 @@ function setupContainer( }); // ── Permissions ───────────────────────────────────────────── - // Matches real host behavior: product must request permission - // before gated operations (e.g. signing requires TransactionSubmit). container.handlePermission((params, { ok }) => { - // params is now RemotePermission[] (batched). Approve if all pass. - let allApproved = true; - for (const perm of params) { - let approved: boolean; - if (permissionBehavior === "approve-all") { - approved = true; - } else if (permissionBehavior === "reject-all") { - approved = false; - } else { - approved = permissionBehavior(perm.tag, perm.value); - } + // params is a single RemotePermission { tag, value } + let approved: boolean; + if (permissionBehavior === "approve-all") { + approved = true; + } else if (permissionBehavior === "reject-all") { + approved = false; + } else { + approved = permissionBehavior(params.tag, params.value); + } - if (approved) { - grantedPermissions.add(perm.tag); - } else { - allApproved = false; - } + if (approved) { + grantedPermissions.add(params.tag); + } - permissionLog.push({ - tag: perm.tag, - value: perm.value, - approved, - timestamp: Date.now(), - }); + permissionLog.push({ + tag: params.tag, + value: params.value, + approved, + timestamp: Date.now(), + }); - console.log( - `[test-host] Permission ${approved ? "granted" : "denied"}:`, - perm.tag, - ); - } - return ok(allApproved); + console.log( + `[test-host] Permission ${approved ? "granted" : "denied"}:`, + params.tag, + ); + return ok(approved); }); // ── Device permissions ───────────────────────────────────────── diff --git a/test/test-product.ts b/test/test-product.ts index 7ce4e45..0a12ecd 100644 --- a/test/test-product.ts +++ b/test/test-product.ts @@ -123,9 +123,9 @@ async function init() { async requestChainSubmit(): Promise { try { - const r = await hostApi.permission(enumValue('v1', [ + const r = await hostApi.permission(enumValue('v1', { tag: 'ChainSubmit' as const, value: undefined }, - ])); + )); if (r.isOk()) { return { ok: true, approved: r.value.value }; } @@ -137,9 +137,9 @@ async function init() { async requestRemote(url: string): Promise { try { - const r = await hostApi.permission(enumValue('v1', [ + const r = await hostApi.permission(enumValue('v1', { tag: 'Remote' as const, value: [url] }, - ])); + )); if (r.isOk()) { return { ok: true, approved: r.value.value }; }