From 20849d03a305d08e730886d0eff4ccc3e54ed0ad Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 14:07:44 -0400 Subject: [PATCH 01/12] chore(deps): bump @dashevo/evo-sdk to 4.0.0-rc.2 Raise the credit withdrawal amount to 1000000 to meet the protocol minimum. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../identity-withdraw-credits.mjs | 2 +- package-lock.json | 30 +++++++++---------- package.json | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/1-Identities-and-Names/identity-withdraw-credits.mjs b/1-Identities-and-Names/identity-withdraw-credits.mjs index a614c4f..c2c0ffa 100644 --- a/1-Identities-and-Names/identity-withdraw-credits.mjs +++ b/1-Identities-and-Names/identity-withdraw-credits.mjs @@ -9,7 +9,7 @@ console.log('Identity balance before withdrawal:', identity.balance); // Default: testnet faucet address. Replace or override via WITHDRAWAL_ADDRESS. const toAddress = process.env.WITHDRAWAL_ADDRESS || 'yXWJGWuD4VBRMp9n2MtXQbGpgSeWyTRHme'; -const amount = 190000n; // Credits to withdraw +const amount = 1000000n; // Credits to withdraw (protocol minimum) const amountDash = Number(amount) / (1000 * 100000000); console.log(`Withdrawing ${amount} credits (${amountDash} DASH)`); diff --git a/package-lock.json b/package-lock.json index b68e554..2b693fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "4.0-rc", "license": "MIT", "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "dotenv": "17.3.1" }, "devDependencies": { @@ -32,20 +32,20 @@ } }, "node_modules/@dashevo/evo-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-xB/NCuXBZ5wxwo2C9ES6KuSIDZSgQ7+GgFWc8yFKGBMmu9cFZYLFFdB53Ghw3BbOmB2rmIyMhYibMYD/QOb0cQ==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-SR823jh4OE19dxNbRPMukGZXj7MTa01af0rXIW1MvO/khN5Mn9Wp4nzzPRRPGXzG74RA46bimyJAhFxqdUz0eQ==", "dependencies": { - "@dashevo/wasm-sdk": "4.0.0-rc.1" + "@dashevo/wasm-sdk": "4.0.0-rc.2" }, "engines": { "node": ">=18.18" } }, "node_modules/@dashevo/wasm-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-1GMlBjSbxHdY/+gT5kTbV3ZqYGCU9rd2rCcD216LcIzjlraoOQJ/ub24q8b2oUadaOrAOceXYDeAUVcg7sE4jg==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-nQH7qVcCz28ePj9TJD7NNfrqEs+YlxtSmUxnCcU8HYZ9A9i3dgW0kU9tCo4RO6mUbnEEausymfy/2rc6nXIhhQ==", "engines": { "node": ">=18.18" } @@ -1947,17 +1947,17 @@ "dev": true }, "@dashevo/evo-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-xB/NCuXBZ5wxwo2C9ES6KuSIDZSgQ7+GgFWc8yFKGBMmu9cFZYLFFdB53Ghw3BbOmB2rmIyMhYibMYD/QOb0cQ==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-SR823jh4OE19dxNbRPMukGZXj7MTa01af0rXIW1MvO/khN5Mn9Wp4nzzPRRPGXzG74RA46bimyJAhFxqdUz0eQ==", "requires": { - "@dashevo/wasm-sdk": "4.0.0-rc.1" + "@dashevo/wasm-sdk": "4.0.0-rc.2" } }, "@dashevo/wasm-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-1GMlBjSbxHdY/+gT5kTbV3ZqYGCU9rd2rCcD216LcIzjlraoOQJ/ub24q8b2oUadaOrAOceXYDeAUVcg7sE4jg==" + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-nQH7qVcCz28ePj9TJD7NNfrqEs+YlxtSmUxnCcU8HYZ9A9i3dgW0kU9tCo4RO6mUbnEEausymfy/2rc6nXIhhQ==" }, "@eslint-community/eslint-utils": { "version": "4.4.0", diff --git a/package.json b/package.json index 33cdc92..0a5e07b 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/dashpay/platform-tutorials#readme", "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "dotenv": "17.3.1" }, "devDependencies": { From cd9dfabb850e3fd57507a63257283a8214d55b64 Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 14:08:47 -0400 Subject: [PATCH 02/12] chore(dashmint-lab): bump @dashevo/evo-sdk to 4.0.0-rc.2 Align the dashmint-lite.html esm.sh import with the React app's pinned version. Co-Authored-By: Claude Opus 4.8 (1M context) --- example-apps/dashmint-lab/package-lock.json | 39 ++++--------------- example-apps/dashmint-lab/package.json | 2 +- .../dashmint-lab/public/dashmint-lite.html | 2 +- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/example-apps/dashmint-lab/package-lock.json b/example-apps/dashmint-lab/package-lock.json index e1b9476..5a9aa92 100644 --- a/example-apps/dashmint-lab/package-lock.json +++ b/example-apps/dashmint-lab/package-lock.json @@ -8,7 +8,7 @@ "name": "dashmint-lab", "version": "0.0.0", "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "@tailwindcss/vite": "^4.2.2", "react": "^19.2.4", "react-dom": "^19.2.4", @@ -437,47 +437,24 @@ } }, "node_modules/@dashevo/evo-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-xB/NCuXBZ5wxwo2C9ES6KuSIDZSgQ7+GgFWc8yFKGBMmu9cFZYLFFdB53Ghw3BbOmB2rmIyMhYibMYD/QOb0cQ==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-SR823jh4OE19dxNbRPMukGZXj7MTa01af0rXIW1MvO/khN5Mn9Wp4nzzPRRPGXzG74RA46bimyJAhFxqdUz0eQ==", "dependencies": { - "@dashevo/wasm-sdk": "4.0.0-rc.1" + "@dashevo/wasm-sdk": "4.0.0-rc.2" }, "engines": { "node": ">=18.18" } }, "node_modules/@dashevo/wasm-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-1GMlBjSbxHdY/+gT5kTbV3ZqYGCU9rd2rCcD216LcIzjlraoOQJ/ub24q8b2oUadaOrAOceXYDeAUVcg7sE4jg==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-nQH7qVcCz28ePj9TJD7NNfrqEs+YlxtSmUxnCcU8HYZ9A9i3dgW0kU9tCo4RO6mUbnEEausymfy/2rc6nXIhhQ==", "engines": { "node": ">=18.18" } }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", diff --git a/example-apps/dashmint-lab/package.json b/example-apps/dashmint-lab/package.json index 905395d..f71b24a 100644 --- a/example-apps/dashmint-lab/package.json +++ b/example-apps/dashmint-lab/package.json @@ -18,7 +18,7 @@ "preview": "vite preview" }, "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "@tailwindcss/vite": "^4.2.2", "react": "^19.2.4", "react-dom": "^19.2.4", diff --git a/example-apps/dashmint-lab/public/dashmint-lite.html b/example-apps/dashmint-lab/public/dashmint-lite.html index 9f8e131..bb7836a 100644 --- a/example-apps/dashmint-lab/public/dashmint-lite.html +++ b/example-apps/dashmint-lab/public/dashmint-lite.html @@ -119,7 +119,7 @@

Browse cards

// package and serves it as a browser-native ES module. Pinned to the same // version the React app at ../package.json depends on so both UIs behave // identically against the same testnet contract. - import { EvoSDK } from 'https://esm.sh/@dashevo/evo-sdk@3.1.0-dev.6'; + import { EvoSDK } from 'https://esm.sh/@dashevo/evo-sdk@4.0.0-rc.2'; // The token-enabled "card" data contract is already published on testnet by // the React app. Anyone querying with the same contract id hits the same From c9b4333bb2f0ee10434955136dc2339609e431c9 Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 14:09:48 -0400 Subject: [PATCH 03/12] test(dashmint-lab): select purchasable listing by Buy button in e2e auth flow Owner-chip string matching broke when the test identity has a DPNS name (the chip shows "@username" instead of the truncated identity id). Detect a buyable listing via its "Buy" button instead, and accept the disabled "Insufficient credits" state as a valid mounted-modal outcome. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../dashmint-lab/test/e2e/auth.spec.ts | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/example-apps/dashmint-lab/test/e2e/auth.spec.ts b/example-apps/dashmint-lab/test/e2e/auth.spec.ts index 2f1533f..94eb5c2 100644 --- a/example-apps/dashmint-lab/test/e2e/auth.spec.ts +++ b/example-apps/dashmint-lab/test/e2e/auth.spec.ts @@ -80,15 +80,6 @@ test.describe("Authenticated flows (auth-gated)", () => { }) => { await loginViaModal(page); - // Read the truncated identity id from the IdentityCard so we can skip - // self-listings. - const myIdSnippet = await page - .locator("aside") - .getByText(/[1-9A-HJ-NP-Za-km-z]{6}…[1-9A-HJ-NP-Za-km-z]{6}/) - .first() - .textContent(); - const myPrefix = myIdSnippet?.split("…")[0]?.trim(); - await page.getByRole("button", { name: "Marketplace" }).click(); await expect(page.getByText(/loading…/i)).toBeHidden({ timeout: 90_000 }); @@ -98,10 +89,16 @@ test.describe("Authenticated flows (auth-gated)", () => { test.skip(true, "Marketplace is empty."); } + // A listing the test identity could purchase is exactly one rendered with + // a "Buy" button — CardTile only shows it for non-owner listings (owned + // listings get "Sell"/"Edit price" instead). Selecting by this button + // sidesteps owner-chip string matching, which breaks when the test + // identity has a DPNS name (the chip shows "@username", not the truncated + // identity id we used to compare against). let target = -1; for (let i = 0; i < count; i += 1) { - const text = await cards.nth(i).innerText(); - if (!myPrefix || !text.includes(myPrefix)) { + const buyBtn = cards.nth(i).getByRole("button", { name: /^buy$/i }); + if (await buyBtn.isVisible().catch(() => false)) { target = i; break; } @@ -122,7 +119,13 @@ test.describe("Authenticated flows (auth-gated)", () => { await expect( dialog.getByText(/\d[\d,]*\s*(cr|credits)/i).first(), ).toBeVisible(); - await expect(dialog.getByRole("button", { name: /^Buy/ })).toBeVisible(); + // The primary button is enabled "Buy" for an affordable listing, or + // disabled "Insufficient credits" when the listing's price exceeds the + // test identity's balance (PurchaseModal does the affordability check, not + // CardTile). Either state confirms the modal mounted correctly. + await expect( + dialog.getByRole("button", { name: /^(Buy|Insufficient credits)$/ }), + ).toBeVisible(); await dialog.getByRole("button", { name: /^Cancel$/ }).click(); await expect(dialog).toBeHidden(); From d13257c45944ce716ad8eaf79d97c5c8773007b5 Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 14:14:44 -0400 Subject: [PATCH 04/12] chore(dashproof-lab): bump @dashevo/evo-sdk to 4.0.0-rc.2 Align the dashproof-lite.html esm.sh import with the React app's pinned version. Co-Authored-By: Claude Opus 4.8 (1M context) --- example-apps/dashproof-lab/package-lock.json | 39 ++++--------------- example-apps/dashproof-lab/package.json | 2 +- .../dashproof-lab/public/dashproof-lite.html | 2 +- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/example-apps/dashproof-lab/package-lock.json b/example-apps/dashproof-lab/package-lock.json index 30f015e..df9ae0e 100644 --- a/example-apps/dashproof-lab/package-lock.json +++ b/example-apps/dashproof-lab/package-lock.json @@ -8,7 +8,7 @@ "name": "dashproof-lab", "version": "0.0.0", "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "@tailwindcss/vite": "^4.2.2", "react": "^19.2.4", "react-dom": "^19.2.4", @@ -437,47 +437,24 @@ } }, "node_modules/@dashevo/evo-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-xB/NCuXBZ5wxwo2C9ES6KuSIDZSgQ7+GgFWc8yFKGBMmu9cFZYLFFdB53Ghw3BbOmB2rmIyMhYibMYD/QOb0cQ==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-SR823jh4OE19dxNbRPMukGZXj7MTa01af0rXIW1MvO/khN5Mn9Wp4nzzPRRPGXzG74RA46bimyJAhFxqdUz0eQ==", "dependencies": { - "@dashevo/wasm-sdk": "4.0.0-rc.1" + "@dashevo/wasm-sdk": "4.0.0-rc.2" }, "engines": { "node": ">=18.18" } }, "node_modules/@dashevo/wasm-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-1GMlBjSbxHdY/+gT5kTbV3ZqYGCU9rd2rCcD216LcIzjlraoOQJ/ub24q8b2oUadaOrAOceXYDeAUVcg7sE4jg==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-nQH7qVcCz28ePj9TJD7NNfrqEs+YlxtSmUxnCcU8HYZ9A9i3dgW0kU9tCo4RO6mUbnEEausymfy/2rc6nXIhhQ==", "engines": { "node": ">=18.18" } }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", diff --git a/example-apps/dashproof-lab/package.json b/example-apps/dashproof-lab/package.json index 38e7f66..05cbadd 100644 --- a/example-apps/dashproof-lab/package.json +++ b/example-apps/dashproof-lab/package.json @@ -19,7 +19,7 @@ "preview": "vite preview" }, "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "@tailwindcss/vite": "^4.2.2", "react": "^19.2.4", "react-dom": "^19.2.4", diff --git a/example-apps/dashproof-lab/public/dashproof-lite.html b/example-apps/dashproof-lab/public/dashproof-lite.html index a9e10f5..1631115 100644 --- a/example-apps/dashproof-lab/public/dashproof-lite.html +++ b/example-apps/dashproof-lab/public/dashproof-lite.html @@ -120,7 +120,7 @@

History by chainId

// package and serves it as a browser-native ES module. Pinned to the same // version the React app at ../package.json depends on so both UIs behave // identically against the same testnet contract. - import { EvoSDK } from 'https://esm.sh/@dashevo/evo-sdk@3.1.0-dev.1'; + import { EvoSDK } from 'https://esm.sh/@dashevo/evo-sdk@4.0.0-rc.2'; // The "anchor" data contract is already published on testnet by the React app. // Anyone querying with the same contract id hits the same documents. From aa0adc5968c8f49953f584b78d1e70bf225a940f Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 16:36:21 -0400 Subject: [PATCH 05/12] chore(dashnote): bump @dashevo/evo-sdk to 4.0.0-rc.2 Align the dashnote-lite.html esm.sh import with the React app's pinned version. Co-Authored-By: Claude Opus 4.8 (1M context) --- example-apps/dashnote/package-lock.json | 39 ++++--------------- example-apps/dashnote/package.json | 2 +- .../dashnote/public/dashnote-lite.html | 2 +- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/example-apps/dashnote/package-lock.json b/example-apps/dashnote/package-lock.json index 2b5adfc..61bc084 100644 --- a/example-apps/dashnote/package-lock.json +++ b/example-apps/dashnote/package-lock.json @@ -8,7 +8,7 @@ "name": "dashnote", "version": "0.0.0", "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "@tailwindcss/vite": "^4.2.2", "react": "^19.2.4", "react-dom": "^19.2.4", @@ -437,47 +437,24 @@ } }, "node_modules/@dashevo/evo-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-xB/NCuXBZ5wxwo2C9ES6KuSIDZSgQ7+GgFWc8yFKGBMmu9cFZYLFFdB53Ghw3BbOmB2rmIyMhYibMYD/QOb0cQ==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-SR823jh4OE19dxNbRPMukGZXj7MTa01af0rXIW1MvO/khN5Mn9Wp4nzzPRRPGXzG74RA46bimyJAhFxqdUz0eQ==", "dependencies": { - "@dashevo/wasm-sdk": "4.0.0-rc.1" + "@dashevo/wasm-sdk": "4.0.0-rc.2" }, "engines": { "node": ">=18.18" } }, "node_modules/@dashevo/wasm-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-1GMlBjSbxHdY/+gT5kTbV3ZqYGCU9rd2rCcD216LcIzjlraoOQJ/ub24q8b2oUadaOrAOceXYDeAUVcg7sE4jg==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-nQH7qVcCz28ePj9TJD7NNfrqEs+YlxtSmUxnCcU8HYZ9A9i3dgW0kU9tCo4RO6mUbnEEausymfy/2rc6nXIhhQ==", "engines": { "node": ">=18.18" } }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", diff --git a/example-apps/dashnote/package.json b/example-apps/dashnote/package.json index 4c3021f..6016701 100644 --- a/example-apps/dashnote/package.json +++ b/example-apps/dashnote/package.json @@ -18,7 +18,7 @@ "preview": "vite preview" }, "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "@tailwindcss/vite": "^4.2.2", "react": "^19.2.4", "react-dom": "^19.2.4", diff --git a/example-apps/dashnote/public/dashnote-lite.html b/example-apps/dashnote/public/dashnote-lite.html index 4227bc0..3a3f29b 100644 --- a/example-apps/dashnote/public/dashnote-lite.html +++ b/example-apps/dashnote/public/dashnote-lite.html @@ -129,7 +129,7 @@

Get note by ID

// package and serves it as a browser-native ES module. Pinned to the same // version the React app at ../package.json depends on so both UIs behave // identically against the same testnet contract. - import { EvoSDK } from 'https://esm.sh/@dashevo/evo-sdk@3.1.0-dev.1'; + import { EvoSDK } from 'https://esm.sh/@dashevo/evo-sdk@4.0.0-rc.2'; // The "note" data contract is already published on testnet by the React app. // Anyone querying with the same contract id hits the same documents. From d2d170200acd4db9ab9adcae1ba94ca471850a27 Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 16:37:04 -0400 Subject: [PATCH 06/12] test(dashnote): harden e2e flows against toasts, eventual consistency, and fixture coupling - returnToList best-effort waits for sonner toasts to clear before clicking "Back to notes", since a lingering success toast overlays the header and intercepts the click. - waitForSaveComplete matches both "Save" and "Create note", because the button only flips to "Save" once the post-create reload re-selects the note by id, which can lag behind testnet eventual consistency. - deleteNoteByTitle waits for the confirmation dialog to close after confirming the delete. - The mobile delete-flow test opens whichever note is listed first, scoped to a note-row container so it can't latch onto the sidebar hamburger, instead of coupling to a specific fixture title. Co-Authored-By: Claude Opus 4.8 (1M context) --- example-apps/dashnote/test/e2e/fixtures.ts | 15 +++++++++++- example-apps/dashnote/test/e2e/notes.spec.ts | 25 ++++++++++++-------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/example-apps/dashnote/test/e2e/fixtures.ts b/example-apps/dashnote/test/e2e/fixtures.ts index 539cb9b..193256b 100644 --- a/example-apps/dashnote/test/e2e/fixtures.ts +++ b/example-apps/dashnote/test/e2e/fixtures.ts @@ -204,6 +204,11 @@ export async function returnToList(page: Page) { if (!isMobile(page)) return; const back = page.getByRole("button", { name: /back to notes/i }); if (await back.isVisible().catch(() => false)) { + // A lingering sonner success toast (e.g. "Note saved") renders above the + // header and intercepts pointer events on "Back to notes". Best-effort + // wait for it to auto-dismiss before clicking; don't fail cleanup if it + // outlives the wait. + await waitForToastsToClear(page).catch(() => {}); await back.click(); } // List view shows the Search input; wait for it to render. @@ -242,7 +247,14 @@ export async function waitForSaveComplete(page: Page) { return; } - await expect(page.getByRole("button", { name: /^save$/i })).toBeDisabled({ + // The button reads "Create note" while the editor still has selectedId === + // "new" and only flips to "Save" once the post-create reload re-selects the + // note by its real id — which can lag behind testnet eventual consistency. + // Either way the editor is clean once the button is disabled (dirty=false), + // so match both labels rather than waiting on the id flip. + await expect( + page.getByRole("button", { name: /^(save|create note)$/i }), + ).toBeDisabled({ timeout: 60_000, }); } @@ -305,6 +317,7 @@ export async function deleteNoteByTitle(page: Page, title: string) { await expect(confirmDialog).toBeVisible(); await waitForToastsToClear(page); await confirmDialog.getByRole("button", { name: /^delete$/i }).click(); + await expect(confirmDialog).toBeHidden({ timeout: 60_000 }); // Item leaves the list after reloadNotes resolves. await expect(page.locator("button", { hasText: title })).toHaveCount(0, { diff --git a/example-apps/dashnote/test/e2e/notes.spec.ts b/example-apps/dashnote/test/e2e/notes.spec.ts index 6221a2e..a3a492d 100644 --- a/example-apps/dashnote/test/e2e/notes.spec.ts +++ b/example-apps/dashnote/test/e2e/notes.spec.ts @@ -228,23 +228,28 @@ test("mobile: editor note actions delete flow opens confirmation", async ({ ); await returnToList(page); - await expect( - page.locator("button", { hasText: SEARCH_FIXTURE_BETA }).first(), - ).toBeVisible({ timeout: 60_000 }); - await page - .locator("button", { hasText: SEARCH_FIXTURE_BETA }) + // This test only verifies the actions → Delete → confirm-dialog flow, so it + // doesn't matter which note is opened — open whichever the list shows first. + // Scope to a note-row container so the row's "Open {title}" button can't + // collide with the sidebar's "Open menu" hamburger. + const firstNote = page + .locator('[data-testid^="note-row-foreground-"]') .first() - .click(); - await expect(page.getByLabel("Title")).toHaveValue(SEARCH_FIXTURE_BETA); - - await page.getByRole("button", { name: /note actions/i }).click(); + .locator('[aria-label^="Open "]'); + await expect(firstNote).toBeVisible({ timeout: 60_000 }); + await firstNote.click(); + // Editor opened on a note: the actions trigger is only rendered when a + // note is selected. + const actionsTrigger = page.getByRole("button", { name: /note actions/i }); + await expect(actionsTrigger).toBeVisible(); + + await actionsTrigger.click(); const actions = page.getByRole("dialog", { name: /note actions/i }); await expect(actions).toBeVisible(); await actions.getByRole("button", { name: /^delete$/i }).click(); const confirmDialog = page.getByRole("dialog", { name: /delete note/i }); await expect(confirmDialog).toBeVisible(); - await expect(confirmDialog.getByText(SEARCH_FIXTURE_BETA)).toBeVisible(); await confirmDialog.getByRole("button", { name: /^cancel$/i }).click(); await expect(confirmDialog).toBeHidden(); }); From 5541a1ce1165e0b37d6ea6f4381f76c11e2432ae Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 16:40:34 -0400 Subject: [PATCH 07/12] chore(dashnote-starter): bump @dashevo/evo-sdk to 4.0.0-rc.2 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../dashnote-starter/package-lock.json | 41 ++++--------------- example-apps/dashnote-starter/package.json | 2 +- 2 files changed, 9 insertions(+), 34 deletions(-) diff --git a/example-apps/dashnote-starter/package-lock.json b/example-apps/dashnote-starter/package-lock.json index 847a5ab..4aa910d 100644 --- a/example-apps/dashnote-starter/package-lock.json +++ b/example-apps/dashnote-starter/package-lock.json @@ -8,7 +8,7 @@ "name": "dashnote-starter", "version": "0.0.0", "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "react": "^19.2.4", "react-dom": "^19.2.4" }, @@ -270,49 +270,24 @@ } }, "node_modules/@dashevo/evo-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-xB/NCuXBZ5wxwo2C9ES6KuSIDZSgQ7+GgFWc8yFKGBMmu9cFZYLFFdB53Ghw3BbOmB2rmIyMhYibMYD/QOb0cQ==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/evo-sdk/-/evo-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-SR823jh4OE19dxNbRPMukGZXj7MTa01af0rXIW1MvO/khN5Mn9Wp4nzzPRRPGXzG74RA46bimyJAhFxqdUz0eQ==", "dependencies": { - "@dashevo/wasm-sdk": "4.0.0-rc.1" + "@dashevo/wasm-sdk": "4.0.0-rc.2" }, "engines": { "node": ">=18.18" } }, "node_modules/@dashevo/wasm-sdk": { - "version": "4.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.1.tgz", - "integrity": "sha512-1GMlBjSbxHdY/+gT5kTbV3ZqYGCU9rd2rCcD216LcIzjlraoOQJ/ub24q8b2oUadaOrAOceXYDeAUVcg7sE4jg==", + "version": "4.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@dashevo/wasm-sdk/-/wasm-sdk-4.0.0-rc.2.tgz", + "integrity": "sha512-nQH7qVcCz28ePj9TJD7NNfrqEs+YlxtSmUxnCcU8HYZ9A9i3dgW0kU9tCo4RO6mUbnEEausymfy/2rc6nXIhhQ==", "engines": { "node": ">=18.18" } }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", diff --git a/example-apps/dashnote-starter/package.json b/example-apps/dashnote-starter/package.json index 3f902e6..25ef596 100644 --- a/example-apps/dashnote-starter/package.json +++ b/example-apps/dashnote-starter/package.json @@ -14,7 +14,7 @@ "preview": "vite preview" }, "dependencies": { - "@dashevo/evo-sdk": "4.0.0-rc.1", + "@dashevo/evo-sdk": "4.0.0-rc.2", "react": "^19.2.4", "react-dom": "^19.2.4" }, From 456968363379db1ed3d7f909cbaa477a412476f7 Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 17:06:55 -0400 Subject: [PATCH 08/12] chore(deps): refresh example app lockfile transitives Co-Authored-By: Claude Opus 4.8 (1M context) --- example-apps/dashmint-lab/package-lock.json | 37 +++++++++++++++-- .../dashnote-starter/package-lock.json | 40 +++++++++++++++++-- example-apps/dashnote/package-lock.json | 37 +++++++++++++++-- example-apps/dashproof-lab/package-lock.json | 37 +++++++++++++++-- 4 files changed, 139 insertions(+), 12 deletions(-) diff --git a/example-apps/dashmint-lab/package-lock.json b/example-apps/dashmint-lab/package-lock.json index 5a9aa92..b95d19e 100644 --- a/example-apps/dashmint-lab/package-lock.json +++ b/example-apps/dashmint-lab/package-lock.json @@ -456,9 +456,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, "dependencies": { @@ -986,6 +986,37 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", diff --git a/example-apps/dashnote-starter/package-lock.json b/example-apps/dashnote-starter/package-lock.json index 4aa910d..411ab44 100644 --- a/example-apps/dashnote-starter/package-lock.json +++ b/example-apps/dashnote-starter/package-lock.json @@ -289,9 +289,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "dev": true, "license": "MIT", "optional": true, @@ -824,6 +824,40 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", diff --git a/example-apps/dashnote/package-lock.json b/example-apps/dashnote/package-lock.json index 61bc084..3f629e2 100644 --- a/example-apps/dashnote/package-lock.json +++ b/example-apps/dashnote/package-lock.json @@ -456,9 +456,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, "dependencies": { @@ -986,6 +986,37 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", diff --git a/example-apps/dashproof-lab/package-lock.json b/example-apps/dashproof-lab/package-lock.json index df9ae0e..74ecd70 100644 --- a/example-apps/dashproof-lab/package-lock.json +++ b/example-apps/dashproof-lab/package-lock.json @@ -456,9 +456,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, "dependencies": { @@ -986,6 +986,37 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", From c1ab1178cd6eb4388a5eae13c7289caf41e3e2c2 Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 17:35:59 -0400 Subject: [PATCH 09/12] chore(deps): refresh example app lockfile transitives Co-Authored-By: Claude Opus 4.8 (1M context) --- example-apps/dashmint-lab/package-lock.json | 41 ++++++++++++++++++++ example-apps/dashnote/package-lock.json | 41 ++++++++++++++++++++ example-apps/dashproof-lab/package-lock.json | 41 ++++++++++++++++++++ 3 files changed, 123 insertions(+) diff --git a/example-apps/dashmint-lab/package-lock.json b/example-apps/dashmint-lab/package-lock.json index b95d19e..2faa151 100644 --- a/example-apps/dashmint-lab/package-lock.json +++ b/example-apps/dashmint-lab/package-lock.json @@ -1273,6 +1273,47 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", diff --git a/example-apps/dashnote/package-lock.json b/example-apps/dashnote/package-lock.json index 3f629e2..7b783ba 100644 --- a/example-apps/dashnote/package-lock.json +++ b/example-apps/dashnote/package-lock.json @@ -1273,6 +1273,47 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", diff --git a/example-apps/dashproof-lab/package-lock.json b/example-apps/dashproof-lab/package-lock.json index 74ecd70..4ae4097 100644 --- a/example-apps/dashproof-lab/package-lock.json +++ b/example-apps/dashproof-lab/package-lock.json @@ -1273,6 +1273,47 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", From 74582a0b0e8b9a6401bc3ca880d32c28ff672f4b Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 16 Jun 2026 17:40:48 -0400 Subject: [PATCH 10/12] ci(dashnote-e2e): bump Node from 20 to 24 Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/dashnote-e2e.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dashnote-e2e.yml b/.github/workflows/dashnote-e2e.yml index 75eb8fd..f69d20c 100644 --- a/.github/workflows/dashnote-e2e.yml +++ b/.github/workflows/dashnote-e2e.yml @@ -45,7 +45,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: '20' + node-version: 24 - name: Install dashnote dependencies run: npm ci @@ -107,7 +107,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: '20' + node-version: 24 - name: Install dashnote dependencies run: npm ci From 35a1d45f56d5d66e841324ccb95d53bd92910a78 Mon Sep 17 00:00:00 2001 From: thephez Date: Wed, 17 Jun 2026 09:40:15 -0400 Subject: [PATCH 11/12] chore: pin Node to 22.22 via .nvmrc and engines Add a repo-root .nvmrc and an engines.node range (>=22.22.0 <22.23.0) to the root and every example-app package.json, then point all CI workflows at node-version-file: .nvmrc instead of a hardcoded version so local and CI toolchains stay in lockstep. Each workflow also logs node/npm versions for diagnostics. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/dashnote-e2e.yml | 14 +++- .github/workflows/test-tutorials.yml | 12 ++- .nvmrc | 1 + example-apps/dashmint-lab/package-lock.json | 80 ++++++++++++++----- example-apps/dashmint-lab/package.json | 3 + .../dashnote-starter/package-lock.json | 41 +++++++--- example-apps/dashnote-starter/package.json | 3 + example-apps/dashnote/package-lock.json | 80 ++++++++++++++----- example-apps/dashnote/package.json | 3 + example-apps/dashproof-lab/package-lock.json | 80 ++++++++++++++----- example-apps/dashproof-lab/package.json | 3 + package-lock.json | 9 +-- package.json | 3 + 13 files changed, 245 insertions(+), 87 deletions(-) create mode 100644 .nvmrc diff --git a/.github/workflows/dashnote-e2e.yml b/.github/workflows/dashnote-e2e.yml index f69d20c..5f781ce 100644 --- a/.github/workflows/dashnote-e2e.yml +++ b/.github/workflows/dashnote-e2e.yml @@ -45,7 +45,12 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: 24 + node-version-file: .nvmrc + + - name: Show Node/npm versions + run: | + node -v + npm -v - name: Install dashnote dependencies run: npm ci @@ -107,7 +112,12 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: 24 + node-version-file: .nvmrc + + - name: Show Node/npm versions + run: | + node -v + npm -v - name: Install dashnote dependencies run: npm ci diff --git a/.github/workflows/test-tutorials.yml b/.github/workflows/test-tutorials.yml index ae68954..e50f4db 100644 --- a/.github/workflows/test-tutorials.yml +++ b/.github/workflows/test-tutorials.yml @@ -35,7 +35,11 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: '20' + node-version-file: .nvmrc + - name: Show Node/npm versions + run: | + node -v + npm -v - run: npm ci - name: Run read-only tutorial tests env: @@ -56,7 +60,11 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: '20' + node-version-file: .nvmrc + - name: Show Node/npm versions + run: | + node -v + npm -v - run: npm ci - name: Run read-write tutorial tests env: diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..f766ee8 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22.22 diff --git a/example-apps/dashmint-lab/package-lock.json b/example-apps/dashmint-lab/package-lock.json index 2faa151..4baf95d 100644 --- a/example-apps/dashmint-lab/package-lock.json +++ b/example-apps/dashmint-lab/package-lock.json @@ -35,6 +35,9 @@ "typescript-eslint": "^8.58.0", "vite": "^8.0.4", "vitest": "^4.1.5" + }, + "engines": { + "node": ">=22.22.0 <22.23.0" } }, "node_modules/@asamuzakjp/css-color": { @@ -89,7 +92,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -407,7 +409,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -431,7 +432,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -455,12 +455,36 @@ "node": ">=18.18" } }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1273,6 +1297,25 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "inBundle": true, @@ -1424,7 +1467,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/chai": { "version": "5.2.3", @@ -1464,7 +1508,6 @@ "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -1475,7 +1518,6 @@ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1486,7 +1528,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -1536,7 +1577,6 @@ "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", @@ -1819,7 +1859,6 @@ "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.8", @@ -1964,7 +2003,6 @@ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2015,6 +2053,7 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -2048,6 +2087,7 @@ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -2132,7 +2172,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -2327,6 +2366,7 @@ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -2345,7 +2385,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dotenv": { "version": "17.4.2", @@ -2429,7 +2470,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3020,7 +3060,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -3414,6 +3453,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -3658,7 +3698,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3758,6 +3797,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -3773,6 +3813,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -3795,7 +3836,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3805,7 +3845,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3818,7 +3857,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/resolve-from": { "version": "4.0.0", @@ -4149,7 +4189,6 @@ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4235,7 +4274,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -4328,7 +4366,6 @@ "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.1.8", "@vitest/mocker": "4.1.8", @@ -4582,7 +4619,6 @@ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/example-apps/dashmint-lab/package.json b/example-apps/dashmint-lab/package.json index f71b24a..995feb8 100644 --- a/example-apps/dashmint-lab/package.json +++ b/example-apps/dashmint-lab/package.json @@ -5,6 +5,9 @@ "private": true, "version": "0.0.0", "type": "module", + "engines": { + "node": ">=22.22.0 <22.23.0" + }, "scripts": { "dev": "vite", "build": "tsc -b && vite build", diff --git a/example-apps/dashnote-starter/package-lock.json b/example-apps/dashnote-starter/package-lock.json index 411ab44..ec5fd90 100644 --- a/example-apps/dashnote-starter/package-lock.json +++ b/example-apps/dashnote-starter/package-lock.json @@ -26,6 +26,9 @@ "typescript": "~6.0.2", "typescript-eslint": "^8.58.0", "vite": "^8.0.4" + }, + "engines": { + "node": ">=22.22.0 <22.23.0" } }, "node_modules/@babel/code-frame": { @@ -59,7 +62,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -288,6 +290,31 @@ "node": ">=18.18" } }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", @@ -295,6 +322,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -930,7 +958,6 @@ "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -941,7 +968,6 @@ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1001,7 +1027,6 @@ "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", @@ -1284,7 +1309,6 @@ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1393,7 +1417,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -1583,7 +1606,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2544,7 +2566,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -2622,7 +2643,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -2815,7 +2835,6 @@ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2902,7 +2921,6 @@ "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -3027,7 +3045,6 @@ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/example-apps/dashnote-starter/package.json b/example-apps/dashnote-starter/package.json index 25ef596..a212d59 100644 --- a/example-apps/dashnote-starter/package.json +++ b/example-apps/dashnote-starter/package.json @@ -5,6 +5,9 @@ "private": true, "version": "0.0.0", "type": "module", + "engines": { + "node": ">=22.22.0 <22.23.0" + }, "scripts": { "dev": "vite", "build": "tsc -b && vite build", diff --git a/example-apps/dashnote/package-lock.json b/example-apps/dashnote/package-lock.json index 7b783ba..21fb44e 100644 --- a/example-apps/dashnote/package-lock.json +++ b/example-apps/dashnote/package-lock.json @@ -35,6 +35,9 @@ "typescript-eslint": "^8.58.0", "vite": "^8.0.4", "vitest": "^4.1.5" + }, + "engines": { + "node": ">=22.22.0 <22.23.0" } }, "node_modules/@asamuzakjp/css-color": { @@ -89,7 +92,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -407,7 +409,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -431,7 +432,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -455,12 +455,36 @@ "node": ">=18.18" } }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1273,6 +1297,25 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "inBundle": true, @@ -1424,7 +1467,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/chai": { "version": "5.2.3", @@ -1464,7 +1508,6 @@ "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -1475,7 +1518,6 @@ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1486,7 +1528,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -1536,7 +1577,6 @@ "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", @@ -1819,7 +1859,6 @@ "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.8", @@ -1964,7 +2003,6 @@ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2015,6 +2053,7 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -2048,6 +2087,7 @@ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -2132,7 +2172,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -2327,6 +2366,7 @@ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -2345,7 +2385,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dotenv": { "version": "17.4.2", @@ -2429,7 +2470,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3020,7 +3060,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -3414,6 +3453,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -3658,7 +3698,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3758,6 +3797,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -3773,6 +3813,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -3795,7 +3836,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3805,7 +3845,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3818,7 +3857,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/resolve-from": { "version": "4.0.0", @@ -4149,7 +4189,6 @@ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4235,7 +4274,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -4328,7 +4366,6 @@ "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.1.8", "@vitest/mocker": "4.1.8", @@ -4582,7 +4619,6 @@ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/example-apps/dashnote/package.json b/example-apps/dashnote/package.json index 6016701..ff1e784 100644 --- a/example-apps/dashnote/package.json +++ b/example-apps/dashnote/package.json @@ -5,6 +5,9 @@ "private": true, "version": "0.0.0", "type": "module", + "engines": { + "node": ">=22.22.0 <22.23.0" + }, "scripts": { "dev": "vite", "build": "tsc -b && vite build", diff --git a/example-apps/dashproof-lab/package-lock.json b/example-apps/dashproof-lab/package-lock.json index 4ae4097..2b33ca8 100644 --- a/example-apps/dashproof-lab/package-lock.json +++ b/example-apps/dashproof-lab/package-lock.json @@ -35,6 +35,9 @@ "typescript-eslint": "^8.58.0", "vite": "^8.0.4", "vitest": "^4.1.5" + }, + "engines": { + "node": ">=22.22.0 <22.23.0" } }, "node_modules/@asamuzakjp/css-color": { @@ -89,7 +92,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -407,7 +409,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -431,7 +432,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -455,12 +455,36 @@ "node": ">=18.18" } }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1273,6 +1297,25 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { "version": "1.2.1", "inBundle": true, @@ -1424,7 +1467,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/chai": { "version": "5.2.3", @@ -1464,7 +1508,6 @@ "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -1475,7 +1518,6 @@ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1486,7 +1528,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -1536,7 +1577,6 @@ "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", @@ -1819,7 +1859,6 @@ "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.8", @@ -1964,7 +2003,6 @@ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2015,6 +2053,7 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -2048,6 +2087,7 @@ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -2132,7 +2172,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -2327,6 +2366,7 @@ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -2345,7 +2385,8 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dotenv": { "version": "17.4.2", @@ -2429,7 +2470,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3020,7 +3060,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -3414,6 +3453,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -3658,7 +3698,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3758,6 +3797,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -3773,6 +3813,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -3795,7 +3836,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3805,7 +3845,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3818,7 +3857,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/resolve-from": { "version": "4.0.0", @@ -4149,7 +4189,6 @@ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4235,7 +4274,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -4328,7 +4366,6 @@ "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.1.8", "@vitest/mocker": "4.1.8", @@ -4582,7 +4619,6 @@ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/example-apps/dashproof-lab/package.json b/example-apps/dashproof-lab/package.json index 05cbadd..17de50e 100644 --- a/example-apps/dashproof-lab/package.json +++ b/example-apps/dashproof-lab/package.json @@ -5,6 +5,9 @@ "private": true, "version": "0.0.0", "type": "module", + "engines": { + "node": ">=22.22.0 <22.23.0" + }, "scripts": { "dev": "vite", "build": "tsc -b && vite build", diff --git a/package-lock.json b/package-lock.json index 2b693fc..4d9c008 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,9 @@ "mocha": "11.7.5", "prettier": "3.8.1", "typescript": "4.9.5" + }, + "engines": { + "node": ">=22.22.0 <22.23.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -332,7 +335,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -633,7 +635,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", @@ -2157,8 +2158,7 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "peer": true + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -2360,7 +2360,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, - "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", diff --git a/package.json b/package.json index 0a5e07b..2f609bb 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ }, "author": "thephez", "license": "MIT", + "engines": { + "node": ">=22.22.0 <22.23.0" + }, "bugs": { "url": "https://github.com/dashpay/platform-tutorials/issues" }, From 83d01a6122d309996f1dcbb341551c79641da925 Mon Sep 17 00:00:00 2001 From: thephez Date: Wed, 17 Jun 2026 09:41:01 -0400 Subject: [PATCH 12/12] ci: use .nvmrc node version in dependency-update and deploy workflows Point the remaining workflows at node-version-file: .nvmrc instead of a hardcoded version so all CI runs on the repo-pinned Node, and log node/npm versions for diagnostics. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/dependency-update.yml | 7 ++++++- .github/workflows/deploy-example-apps.yml | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dependency-update.yml b/.github/workflows/dependency-update.yml index 4956661..337bb90 100644 --- a/.github/workflows/dependency-update.yml +++ b/.github/workflows/dependency-update.yml @@ -22,7 +22,12 @@ jobs: - name: Set up Node.js uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: '20' + node-version-file: .nvmrc + + - name: Show Node/npm versions + run: | + node -v + npm -v # Step 3: Install dependencies - name: Install Dependencies diff --git a/.github/workflows/deploy-example-apps.yml b/.github/workflows/deploy-example-apps.yml index 46ac58d..043685e 100644 --- a/.github/workflows/deploy-example-apps.yml +++ b/.github/workflows/deploy-example-apps.yml @@ -70,10 +70,15 @@ jobs: - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 24 + node-version-file: .nvmrc cache: npm cache-dependency-path: example-apps/${{ matrix.app }}/package-lock.json + - name: Show Node/npm versions + run: | + node -v + npm -v + - name: Install run: npm ci working-directory: example-apps/${{ matrix.app }} @@ -113,7 +118,12 @@ jobs: - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 24 + node-version-file: .nvmrc + + - name: Show Node/npm versions + run: | + node -v + npm -v - name: Download all built apps uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1