]> git.codecow.com Git - libnemo.git/commitdiff
Change Ledger package dependencies to optional peers provided by consumer and move...
authorChris Duncan <chris@zoso.dev>
Wed, 17 Sep 2025 14:58:32 +0000 (07:58 -0700)
committerChris Duncan <chris@zoso.dev>
Wed, 17 Sep 2025 14:58:32 +0000 (07:58 -0700)
package-lock.json
package.json
src/lib/ledger.ts
src/lib/tools.ts
src/main.ts
src/types.d.ts
tsconfig.json

index 5a54ec97102a67c710a74b299d67acda9e52a97d..ba6a61a0c1cb9aca0802757ca971802ca93f2876 100644 (file)
@@ -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"
                                "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": {
                                "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",
                        "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": {
                        }
                },
                "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
                },
                        "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",
                                        "url": "https://feross.org/support"
                                }
                        ],
-                       "license": "MIT",
-                       "optional": true
+                       "license": "MIT"
                },
                "node_modules/basic-ftp": {
                        "version": "5.0.5",
                        "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",
                                }
                        ],
                        "license": "MIT",
-                       "optional": true,
                        "dependencies": {
                                "base64-js": "^1.3.1",
                                "ieee754": "^1.2.1"
                                "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",
                        "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",
                                        "url": "https://feross.org/support"
                                }
                        ],
-                       "license": "BSD-3-Clause",
-                       "optional": true
+                       "license": "BSD-3-Clause"
                },
                "node_modules/import-fresh": {
                        "version": "3.3.1",
                        }
                },
                "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,
                                "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": {
                        }
                },
                "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": {
                                "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",
                        }
                },
                "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": {
index 381176d68b227250b74446daae3ad6b3263b40a0..6b0fd3fcbda22947494e5f8501933d4d531d16f7 100644 (file)
        "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": {
                ".": {
index e5000f3b99a2d63806a2e7918405e7e290806695..43ae63dc98e484d69bd12e2c9ecc0df8fcbab4b6 100644 (file)
@@ -1,7 +1,6 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! 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'
index 7ab2c9fc30f2d648776986ff02772432f358a06a..6c862ab6953f19daafa9398cb9ecf94d37b13045 100644 (file)
@@ -110,6 +110,11 @@ function hash (data: string | string[], encoding?: 'hex', format?: 'hex'): strin
                : hash.digest()
 }
 
+async function ledger (): Promise<typeof import('./ledger').Ledger> {
+       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<ArrayBuffer>, signature:
        }
 }
 
-export const Tools = { convert, hash, sign, sweep, verify }
+export const Tools = { convert, hash, ledger, sign, sweep, verify }
index 317289dbe282ffcb243b3cda5c83dd67eb0ac9ad..432b4b9ac89e79f4aaac15c3a17fafc2c1f9466d 100644 (file)
@@ -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,
index 4ed99950f778703d76fb3410ea66119999571be2..31ea1f40fb063f10135401c42aceee0dab39e442 100644 (file)
@@ -1,8 +1,6 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! 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.
index 116fc9cf8ea4ec6aedb2db5ab4c8a07129e8e13f..2f159a0b57cf7e751b1bdafb7ebbb38d2cf32305 100644 (file)
@@ -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/**/*"