From: Chris Duncan Date: Wed, 17 Sep 2025 14:58:32 +0000 (-0700) Subject: Change Ledger package dependencies to optional peers provided by consumer and move... X-Git-Tag: v0.10.5~12^2~49 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=8045ea05afec01a1f109494a65e41d0237142f19;p=libnemo.git Change Ledger package dependencies to optional peers provided by consumer and move Ledger initialization to a function of the Tools module. --- diff --git a/package-lock.json b/package-lock.json index 5a54ec9..ba6a61a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@types/w3c-web-hid": "^1.0.6", "@types/w3c-web-usb": "^1.0.12", "@types/web-bluetooth": "^0.0.21", + "buffer": "^6.0.3", "esbuild": "^0.25.9", "fake-indexeddb": "^6.2.2", "typescript": "^5.9.2" @@ -24,11 +25,25 @@ "type": "nano", "url": "nano:nano_1zosoqs47yt47bnfg7sdf46kj7asn58b7uzm9ek95jw7ccatq37898u1zoso" }, - "optionalDependencies": { + "peerDependencies": { "@ledgerhq/hw-transport-web-ble": "^6.29.10", "@ledgerhq/hw-transport-webhid": "^6.30.6", "@ledgerhq/hw-transport-webusb": "^6.29.10", "buffer": "^6.0.3" + }, + "peerDependenciesMeta": { + "@ledgerhq/hw-transport-web-ble": { + "optional": true + }, + "@ledgerhq/hw-transport-webhid": { + "optional": true + }, + "@ledgerhq/hw-transport-webusb": { + "optional": true + }, + "buffer": { + "optional": true + } } }, "node_modules/@babel/code-frame": { @@ -498,86 +513,6 @@ "node": ">=18" } }, - "node_modules/@ledgerhq/devices": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.5.1.tgz", - "integrity": "sha512-oW75YQQiP2muHveXTuwSAze6CBxJ7jOYILhFiJbsVzmgLPVqtdw4s0bJJlOBft4Aup67yNAjboFCIU7kTYQBFg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@ledgerhq/errors": "^6.25.0", - "@ledgerhq/logs": "^6.13.0", - "rxjs": "^7.8.1", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/errors": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.25.0.tgz", - "integrity": "sha512-9cU0dgUyq3Adb1bHAjJnbwl+r+4WBjuPq0k+/DbBNpuYHwcz2xKtRIjLimUJyACjHti3iWwRt1sFcbQDDdI08w==", - "license": "Apache-2.0", - "optional": true - }, - "node_modules/@ledgerhq/hw-transport": { - "version": "6.31.10", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.10.tgz", - "integrity": "sha512-ruNtkTPMO3rFCaSM+oPTOXXerzxWFZF43pAHVAHhsjiQGhLWzLSkMc7qBEpWIpZPubKRAbWSXR2zXBIJPNy8oQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "8.5.1", - "@ledgerhq/errors": "^6.25.0", - "@ledgerhq/logs": "^6.13.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-web-ble": { - "version": "6.29.10", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-web-ble/-/hw-transport-web-ble-6.29.10.tgz", - "integrity": "sha512-c4MrXSS4UfPsq0Qk7C1bLGXp7OnQtifDswaEQpvjoOQ57fArObh5rpYzUuBxNPHhwh/3zNcqIWNkR0oe4ugP5Q==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "8.5.1", - "@ledgerhq/errors": "^6.25.0", - "@ledgerhq/hw-transport": "^6.31.10", - "@ledgerhq/logs": "^6.13.0", - "rxjs": "^7.8.1" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid": { - "version": "6.30.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.30.6.tgz", - "integrity": "sha512-AOzjFv5n1OTMfvEInAZRfLO11G5zfG8pB5zhmjK5d/mVQfFNcKsLZNAC2h4OZZMBtUy8UTT3n03z93e6k6n4pQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "8.5.1", - "@ledgerhq/errors": "^6.25.0", - "@ledgerhq/hw-transport": "^6.31.10", - "@ledgerhq/logs": "^6.13.0" - } - }, - "node_modules/@ledgerhq/hw-transport-webusb": { - "version": "6.29.10", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.29.10.tgz", - "integrity": "sha512-3op7ipyZrM/Gg2qUBUM6tGKgYVh7k3hvXPE7z4i5ElAFHBdM5XMI4OD2cfl38XE0fij1dk/NCpKntOekIL7lmA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@ledgerhq/devices": "8.5.1", - "@ledgerhq/errors": "^6.25.0", - "@ledgerhq/hw-transport": "^6.31.10", - "@ledgerhq/logs": "^6.13.0" - } - }, - "node_modules/@ledgerhq/logs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.13.0.tgz", - "integrity": "sha512-4+qRW2Pc8V+btL0QEmdB2X+uyx0kOWMWE1/LWsq5sZy3Q5tpi4eItJS6mB0XL3wGW59RQ+8bchNQQ1OW/va8Og==", - "license": "Apache-2.0", - "optional": true - }, "node_modules/@puppeteer/browsers": { "version": "2.10.10", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", @@ -608,9 +543,9 @@ "optional": true }, "node_modules/@types/node": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.0.tgz", - "integrity": "sha512-y1dMvuvJspJiPSDZUQ+WMBvF7dpnEqN4x9DDC9ie5Fs/HUZJA3wFp7EhHoVaKX/iI0cRoECV8X2jL8zi0xrHCg==", + "version": "24.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.1.tgz", + "integrity": "sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q==", "devOptional": true, "license": "MIT", "dependencies": { @@ -720,9 +655,9 @@ } }, "node_modules/bare-events": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.1.tgz", - "integrity": "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", + "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", "license": "Apache-2.0", "optional": true }, @@ -807,6 +742,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -821,8 +757,7 @@ "url": "https://feross.org/support" } ], - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/basic-ftp": { "version": "5.0.5", @@ -838,6 +773,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "funding": [ { "type": "github", @@ -853,7 +789,6 @@ } ], "license": "MIT", - "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -1150,16 +1085,6 @@ "node": ">=0.10.0" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -1281,6 +1206,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -1295,8 +1221,7 @@ "url": "https://feross.org/support" } ], - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/import-fresh": { "version": "3.3.1", @@ -1565,9 +1490,9 @@ } }, "node_modules/puppeteer": { - "version": "24.21.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.21.0.tgz", - "integrity": "sha512-JNY9JluUXepKzqKoPHsNVsrkpRRTare8geNP2L8YMkFHOKIvWSki/yUL9l2VJpani49epEHLpVg+zDcbTYibWA==", + "version": "24.22.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.22.0.tgz", + "integrity": "sha512-QabGIvu7F0hAMiKGHZCIRHMb6UoH0QAJA2OaqxEU2tL5noXPrxUcotg2l3ttOA4p1PFnVIGkr6PXRAWlM2evVQ==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, @@ -1576,7 +1501,7 @@ "chromium-bidi": "8.0.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1495869", - "puppeteer-core": "24.21.0", + "puppeteer-core": "24.22.0", "typed-query-selector": "^2.12.0" }, "bin": { @@ -1587,9 +1512,9 @@ } }, "node_modules/puppeteer-core": { - "version": "24.21.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.21.0.tgz", - "integrity": "sha512-WR4FehOs4XJ8OSp7MkGyVB4mfMs9Q6t8Y48TxiTCRxc8G2lJ5OKYPJvgU80dtKl+aIqIbdcNTgIooY49S5SsmA==", + "version": "24.22.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.22.0.tgz", + "integrity": "sha512-oUeWlIg0pMz8YM5pu0uqakM+cCyYyXkHBxx9di9OUELu9X9+AYrNGGRLK9tNME3WfN3JGGqQIH3b4/E9LGek/w==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1625,16 +1550,6 @@ "node": ">=4" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -1742,9 +1657,9 @@ } }, "node_modules/tar-fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.0.tgz", - "integrity": "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "license": "MIT", "optional": true, "dependencies": { diff --git a/package.json b/package.json index 381176d..6b0fd3f 100644 --- a/package.json +++ b/package.json @@ -60,21 +60,36 @@ "dependencies": { "nano-pow": "^5.1.6" }, - "optionalDependencies": { - "@ledgerhq/hw-transport-web-ble": "^6.29.10", - "@ledgerhq/hw-transport-webhid": "^6.30.6", - "@ledgerhq/hw-transport-webusb": "^6.29.10", - "buffer": "^6.0.3" - }, "devDependencies": { "@types/node": "^24.5.0", "@types/w3c-web-hid": "^1.0.6", "@types/w3c-web-usb": "^1.0.12", "@types/web-bluetooth": "^0.0.21", + "buffer": "^6.0.3", "esbuild": "^0.25.9", "fake-indexeddb": "^6.2.2", "typescript": "^5.9.2" }, + "peerDependencies": { + "@ledgerhq/hw-transport-web-ble": "^6.29.10", + "@ledgerhq/hw-transport-webhid": "^6.30.6", + "@ledgerhq/hw-transport-webusb": "^6.29.10", + "buffer": "^6.0.3" + }, + "peerDependenciesMeta": { + "@ledgerhq/hw-transport-web-ble": { + "optional": true + }, + "@ledgerhq/hw-transport-webhid": { + "optional": true + }, + "@ledgerhq/hw-transport-webusb": { + "optional": true + }, + "buffer": { + "optional": true + } + }, "type": "module", "exports": { ".": { diff --git a/src/lib/ledger.ts b/src/lib/ledger.ts index e5000f3..43ae63d 100644 --- a/src/lib/ledger.ts +++ b/src/lib/ledger.ts @@ -1,7 +1,6 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { ledgerUSBVendorId } from '@ledgerhq/devices' import { default as TransportBLE } from '@ledgerhq/hw-transport-web-ble' import { default as TransportHID } from '@ledgerhq/hw-transport-webhid' import { default as TransportUSB } from '@ledgerhq/hw-transport-webusb' diff --git a/src/lib/tools.ts b/src/lib/tools.ts index 7ab2c9f..6c862ab 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -110,6 +110,11 @@ function hash (data: string | string[], encoding?: 'hex', format?: 'hex'): strin : hash.digest() } +async function ledger (): Promise { + const { Ledger } = await import('./ledger') + return Ledger +} + /** * Signs arbitrary strings with a private key using the Ed25519 signature scheme. * The strings are first hashed to a 32-byte value using BLAKE2b. @@ -207,4 +212,4 @@ export async function verify (key: string | Uint8Array, signature: } } -export const Tools = { convert, hash, sign, sweep, verify } +export const Tools = { convert, hash, ledger, sign, sweep, verify } diff --git a/src/main.ts b/src/main.ts index 317289d..432b4b9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,16 +9,10 @@ import { Rpc } from './lib/rpc' import { Tools } from './lib/tools' import { Wallet } from './lib/wallet' -let Ledger: typeof import('./lib/ledger').Ledger -try { - Ledger = (await import('./lib/ledger')).Ledger -} catch { } - export { Account, Blake2b, Block, - Ledger, Rolodex, Rpc, Tools, diff --git a/src/types.d.ts b/src/types.d.ts index 4ed9995..31ea1f4 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,8 +1,6 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -import { ledgerUSBVendorId } from '@ledgerhq/devices' - /** * Represents a single Nano address and the associated public key. To include the * matching private key, it must be known at the time of object instantiation. @@ -479,7 +477,7 @@ interface LedgerSignResponse extends LedgerResponse { */ export declare class Ledger { #private - static get UsbVendorId (): typeof ledgerUSBVendorId + static get UsbVendorId (): 0x2c97 /** * Check which transport protocols are supported by the browser and return the * transport type according to the following priorities: HID, Bluetooth, USB. diff --git a/tsconfig.json b/tsconfig.json index 116fc9c..2f159a0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,16 +6,20 @@ "declarationDir": "./types", "downlevelIteration": false, "emitDeclarationOnly": true, - "esModuleInterop": true, + "esModuleInterop": false, "forceConsistentCasingInFileNames": true, "isolatedModules": true, - "module": "ESNext", - "moduleResolution": "Bundler", + "module": "es2022", + "moduleResolution": "bundler", "noErrorTruncation": true, "noFallthroughCasesInSwitch": true, "rootDir": "src", "strict": true, - "target": "ESNext" + "target": "es2022", + "lib": [ + "DOM", + "ES2022" + ] }, "include": [ "src/**/*"