diff --git a/examples/example-react/package.json b/examples/example-react/package.json index 6824baf..74998c5 100644 --- a/examples/example-react/package.json +++ b/examples/example-react/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@casperdash/usewallet": "workspace:*", + "@casperdash/usewallet-evm": "workspace:*", "@hookform/resolvers": "^3.1.1", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.0.2", @@ -25,7 +26,8 @@ "sonner": "^0.6.2", "tailwind-merge": "^1.14.0", "tailwindcss-animate": "^1.0.6", - "zod": "^3.21.4" + "zod": "^3.21.4", + "viem": "^1.19.4" }, "devDependencies": { "@types/node": "18.11.10", diff --git a/examples/example-react/src/App.tsx b/examples/example-react/src/App.tsx index f177aab..20ebbf9 100644 --- a/examples/example-react/src/App.tsx +++ b/examples/example-react/src/App.tsx @@ -15,6 +15,7 @@ import CasperDashWebButton from './components/ConnectButton/CasperDashWebButton' import CasperWalletButton from './components/ConnectButton/CasperWalletButton'; import { Button } from './components/ui/Button'; import { FormTabs } from './components/Form/FormTabs'; +import MetaMaskButton from './components/ConnectButton/MetaMaskButton'; function App() { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -93,6 +94,8 @@ function App() {
+
+ )} diff --git a/examples/example-react/src/client/index.ts b/examples/example-react/src/client/index.ts new file mode 100644 index 0000000..085ac0f --- /dev/null +++ b/examples/example-react/src/client/index.ts @@ -0,0 +1,7 @@ +import { createWalletClient, custom } from 'viem'; +import { mainnet } from 'viem/chains'; + +export const client = createWalletClient({ + chain: mainnet, + transport: custom(window.ethereum!), +}); diff --git a/examples/example-react/src/components/ConnectButton/MetaMaskButton.tsx b/examples/example-react/src/components/ConnectButton/MetaMaskButton.tsx new file mode 100644 index 0000000..535a4d9 --- /dev/null +++ b/examples/example-react/src/components/ConnectButton/MetaMaskButton.tsx @@ -0,0 +1,23 @@ +import { EVMConnector } from '@casperdash/usewallet-evm'; +import { + useConnect, +} from '@casperdash/usewallet'; + +import { Button } from '../ui/Button'; + + +export const MetaMaskButton = () => { + const { connect } = useConnect({ + connector: new EVMConnector({}), + }); + + return ( +
+ +
+ ); +}; + +export default MetaMaskButton; diff --git a/examples/example-react/src/main.tsx b/examples/example-react/src/main.tsx index 101d54b..1724d1c 100644 --- a/examples/example-react/src/main.tsx +++ b/examples/example-react/src/main.tsx @@ -8,12 +8,18 @@ import { import React from 'react'; import ReactDOM from 'react-dom/client'; import { CasperLedgerConnector } from '@casperdash/usewallet-ledger'; +import { EVMConnector } from '@casperdash/usewallet-evm'; import App from './App'; import '../app/globals.css'; const client = createClient({ - connectors: [new CasperSignerConnector(), new CasperDashConnector(), new CasperWalletConnector(), new CasperLedgerConnector()], + connectors: [ + new CasperSignerConnector(), + new CasperDashConnector(), + new CasperWalletConnector(), + new CasperLedgerConnector(), + new EVMConnector()], // autoConnect: true, }); diff --git a/packages/evm/package.json b/packages/evm/package.json new file mode 100644 index 0000000..59511aa --- /dev/null +++ b/packages/evm/package.json @@ -0,0 +1,48 @@ +{ + "name": "@casperdash/usewallet-evm", + "version": "1.0.3", + "description": "A React hook for interacting with the Casper Network via Ledger", + "repository": { + "type": "git", + "url": "https://github.com/CasperDash/useWallet.git", + "directory": "packages/ledger" + }, + "homepage": "https://usewallet.casperdash.io/", + "contributors": [ + "dev " + ], + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc && vite build --mode development", + "dev": "tsup src/index.ts --watch", + "start": "pnpm build -- --watch" + }, + "keywords": [], + "author": "", + "license": "MIT", + "dependencies": { + "@ledgerhq/hw-transport-webusb": "^6.27.19", + "@zondax/ledger-casper": "^2.6.1", + "casper-js-sdk": "^2.15.3", + "@casperdash/usewallet-core": "workspace:*", + "@tanstack/query-core": "^4.35.3", + "@tanstack/react-query": "^4.35.3", + "typedjson": "^1.8.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "viem": "^1.19.4" + }, + "devDependencies": { + "@testing-library/react": "^13.4.0", + "@types/react": "18.0.26", + "typescript": ">=5.2.2", + "@rollup/plugin-inject": "5.0.3", + "vite": "^4.4.9", + "@vitejs/plugin-react-swc": "3.3.2", + "vite-plugin-dts": "^3.5.4", + "vite-plugin-node-polyfills": "^0.14.1" + } +} diff --git a/packages/evm/src/client.ts b/packages/evm/src/client.ts new file mode 100644 index 0000000..65e9944 --- /dev/null +++ b/packages/evm/src/client.ts @@ -0,0 +1,14 @@ +import { createWalletClient, custom } from 'viem'; +import { mainnet } from 'viem/chains'; + +declare global { + interface Window { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ethereum: any; + } +} + +export const client = createWalletClient({ + chain: mainnet, + transport: custom(window.ethereum), +}); diff --git a/packages/evm/src/evm.ts b/packages/evm/src/evm.ts new file mode 100644 index 0000000..eeb7206 --- /dev/null +++ b/packages/evm/src/evm.ts @@ -0,0 +1,114 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import TransportWebUSB from '@ledgerhq/hw-transport-webusb'; +import { JsonTypes } from 'typedjson'; +import { + Connector, + Deploy, +} from '@casperdash/usewallet-core'; +import { WalletClient } from 'viem'; + +import { client } from './client'; + + +type EVMConnectorOptions = { + enableDebugLogs?: boolean; + getEventProvider?: () => EventProvider; +}; + +type Provider = WalletClient; +type EventProvider = Window; + +export class EVMConnector extends Connector< +Provider, +Window, +EVMConnectorOptions +> { + public isReady!: boolean; + public readonly id: string = 'evm'; + public transport!: TransportWebUSB; + public casperApp?: Provider; + public accountIndex?: string; + + constructor({ + options: defaultOptions, + }: { options?: EVMConnectorOptions } = {}) { + const options = { + name: 'EVM', + ...defaultOptions, + }; + + super({ options }); + } + + public async getProvider(): Promise { + return client; + } + + /** + * > This function returns the event provider that was passed in the options object + * @returns The event provider + */ + public async getEventProvider(): Promise { + throw new Error('Method not implemented.'); + } + + public async isConnected(): Promise { + const publicKey = await this.getActivePublicKey(); + + return !!publicKey; + } + + public async disconnect(): Promise { + // Do nothing + return; + } + + public async connect(): Promise { + const provider = await this.getProvider(); + + await provider.requestAddresses(); + } + + public async getActivePublicKey(): Promise { + const accounts = await (await this.getProvider()).getAddresses(); + + if (!accounts.length) { + throw new Error('No accounts found'); + } + + return accounts[0]; + } + + public async signMessage(message: string, signingPublicKeyHex?: string): Promise { + const account = signingPublicKeyHex || await this.getActivePublicKey(); + const provider = await this.getProvider(); + + return provider.signMessage({ + account: account as `0x${string}`, + message, + }); + } + + public async sign( + deploy: { deploy: JsonTypes }, + signingPublicKeyHex: string, + _targetPublicKeyHex: string, + ): Promise { + throw new Error('Method not implemented.'); + } + + public onConnected(_event: CustomEventInit): void { + throw new Error('Method not implemented.'); + } + + /** + * It emits a custom event called 'casper:disconnect' + */ + public onDisconnected(): void { + throw new Error('Method not implemented.'); + } + + public onActiveKeyChanged(_event: CustomEventInit): void { + throw new Error('Method not implemented.'); + } +} diff --git a/packages/evm/src/index.ts b/packages/evm/src/index.ts new file mode 100644 index 0000000..5a4ecbf --- /dev/null +++ b/packages/evm/src/index.ts @@ -0,0 +1 @@ +export * from './evm'; diff --git a/packages/evm/tsconfig.json b/packages/evm/tsconfig.json new file mode 100644 index 0000000..827e3c0 --- /dev/null +++ b/packages/evm/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "declaration": true, + "rootDir": "./src" + }, + "include": [ "**/*.ts" ], + "exclude": ["node_modules", "dist"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/evm/tsconfig.node.json b/packages/evm/tsconfig.node.json new file mode 100644 index 0000000..c3dfa0f --- /dev/null +++ b/packages/evm/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "exclude": ["node_modules", "dist"], +} diff --git a/packages/evm/vite.config.js b/packages/evm/vite.config.js new file mode 100644 index 0000000..7c0a76f --- /dev/null +++ b/packages/evm/vite.config.js @@ -0,0 +1,24 @@ +import { resolve } from 'path'; + +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + dts(), + ], + build: { + lib: { + entry: resolve(__dirname, 'src/index.ts'), + name: 'index', + fileName: 'index', + }, + rollupOptions: { + external: ['react'], + output: { + format: 'esm', + }, + }, + }, +}); diff --git a/packages/ledger/vite.config.js b/packages/ledger/vite.config.js index cf254bf..b186e1b 100644 --- a/packages/ledger/vite.config.js +++ b/packages/ledger/vite.config.js @@ -2,7 +2,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vite'; import { nodePolyfills } from 'vite-plugin-node-polyfills'; -import inject from '@rollup/plugin-inject'; import dts from 'vite-plugin-dts'; // https://vitejs.dev/config/ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc8b445..ff39096 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,6 +108,9 @@ importers: '@casperdash/usewallet': specifier: workspace:* version: link:../../packages/react + '@casperdash/usewallet-evm': + specifier: workspace:* + version: link:../../packages/evm '@casperdash/usewallet-ledger': specifier: workspace:* version: link:../../packages/ledger @@ -153,6 +156,9 @@ importers: tailwindcss-animate: specifier: ^1.0.6 version: 1.0.7(tailwindcss@3.3.3) + viem: + specifier: ^1.19.4 + version: 1.19.4(typescript@4.9.4)(zod@3.22.2) zod: specifier: ^3.21.4 version: 3.22.2 @@ -250,6 +256,64 @@ importers: specifier: '>=4.9.4' version: 4.9.4 + packages/evm: + dependencies: + '@casperdash/usewallet-core': + specifier: workspace:* + version: link:../core + '@ledgerhq/hw-transport-webusb': + specifier: ^6.27.19 + version: 6.27.19 + '@tanstack/query-core': + specifier: ^4.35.3 + version: 4.35.3 + '@tanstack/react-query': + specifier: ^4.35.3 + version: 4.35.3(react-dom@18.2.0)(react@18.2.0) + '@zondax/ledger-casper': + specifier: ^2.6.1 + version: 2.6.1 + casper-js-sdk: + specifier: ^2.15.3 + version: 2.15.3 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + typedjson: + specifier: ^1.8.0 + version: 1.8.0 + viem: + specifier: ^1.19.4 + version: 1.19.4(typescript@5.2.2) + devDependencies: + '@rollup/plugin-inject': + specifier: 5.0.3 + version: 5.0.3 + '@testing-library/react': + specifier: ^13.4.0 + version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + '@types/react': + specifier: 18.0.26 + version: 18.0.26 + '@vitejs/plugin-react-swc': + specifier: 3.3.2 + version: 3.3.2(vite@4.4.9) + typescript: + specifier: '>=5.2.2' + version: 5.2.2 + vite: + specifier: ^4.4.9 + version: 4.4.9(@types/node@18.11.10) + vite-plugin-dts: + specifier: ^3.5.4 + version: 3.5.4(typescript@5.2.2)(vite@4.4.9) + vite-plugin-node-polyfills: + specifier: ^0.14.1 + version: 0.14.1(vite@4.4.9) + packages/ledger: dependencies: '@casperdash/usewallet-core': @@ -341,6 +405,10 @@ importers: packages: + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -537,7 +605,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - dev: false /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} @@ -1716,6 +1783,12 @@ packages: '@noble/hashes': 1.3.1 dev: false + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + /@noble/ed25519@1.7.3: resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} dev: false @@ -1725,6 +1798,11 @@ packages: engines: {node: '>= 16'} dev: false + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} dev: false @@ -2134,23 +2212,31 @@ packages: string-argv: 0.3.1 dev: true - /@scure/base@1.1.1: - resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} dev: false /@scure/bip32@1.3.1: resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: '@noble/curves': 1.1.0 - '@noble/hashes': 1.3.1 - '@scure/base': 1.1.1 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: false + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 dev: false /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: - '@noble/hashes': 1.3.1 - '@scure/base': 1.1.1 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 dev: false /@sinclair/typebox@0.27.8: @@ -2438,7 +2524,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.22.6 '@types/aria-query': 5.0.1 aria-query: 5.1.3 chalk: 4.1.2 @@ -2457,7 +2543,7 @@ packages: react: optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.22.6 '@testing-library/dom': 8.20.0 '@types/react-dom': 18.0.10 react: 18.2.0 @@ -2964,6 +3050,25 @@ packages: vue-template-compiler: 2.7.14 dev: true + /@vue/language-core@1.8.13(typescript@5.2.2): + resolution: {integrity: sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.10.1 + '@volar/source-map': 1.10.1 + '@vue/compiler-dom': 3.3.4 + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + minimatch: 9.0.3 + muggle-string: 0.3.1 + typescript: 5.2.2 + vue-template-compiler: 2.7.14 + dev: true + /@vue/reactivity@3.3.4: resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} dependencies: @@ -2983,6 +3088,15 @@ packages: - typescript dev: true + /@vue/typescript@1.8.13(typescript@5.2.2): + resolution: {integrity: sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==} + dependencies: + '@volar/typescript': 1.10.1 + '@vue/language-core': 1.8.13(typescript@5.2.2) + transitivePeerDependencies: + - typescript + dev: true + /@zondax/ledger-casper@2.6.1: resolution: {integrity: sha512-Zk+DOVK9G9Gyt7ua9x/G5iVVSlNfp1l+Tek+7+MoqP5aTr4YznBJIhdnPD8yYSxEEZZLs8Q0tV0TyfsXeRokQw==} dependencies: @@ -2995,6 +3109,35 @@ packages: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true + /abitype@0.9.8(typescript@4.9.4)(zod@3.22.2): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 4.9.4 + zod: 3.22.2 + dev: false + + /abitype@0.9.8(typescript@5.2.2): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.2.2 + dev: false + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: @@ -6269,6 +6412,14 @@ packages: ws: 7.5.9 dev: false + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} @@ -6644,7 +6795,7 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /magic-string@0.30.3: @@ -9765,7 +9916,6 @@ packages: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true - dev: true /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} @@ -9773,6 +9923,11 @@ packages: hasBin: true dev: true + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + /ufo@1.3.0: resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==} dev: true @@ -10093,6 +10248,52 @@ packages: vfile-message: 4.0.2 dev: false + /viem@1.19.4(typescript@4.9.4)(zod@3.22.2): + resolution: {integrity: sha512-CvAVaOzxlu3Q/cpfrYvTRMBIPDMAkLu8aFmHLqU1Bg25DyUxp9xwoF1Ljp38q7/Rosm1OPFQ4y6K64v/VwoumQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@4.9.4)(zod@3.22.2) + isows: 1.0.3(ws@8.13.0) + typescript: 4.9.4 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /viem@1.19.4(typescript@5.2.2): + resolution: {integrity: sha512-CvAVaOzxlu3Q/cpfrYvTRMBIPDMAkLu8aFmHLqU1Bg25DyUxp9xwoF1Ljp38q7/Rosm1OPFQ4y6K64v/VwoumQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@5.2.2) + isows: 1.0.3(ws@8.13.0) + typescript: 5.2.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + /vite-node@0.34.5(@types/node@18.11.10): resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==} engines: {node: '>=v14.18.0'} @@ -10139,6 +10340,30 @@ packages: - supports-color dev: true + /vite-plugin-dts@3.5.4(typescript@5.2.2)(vite@4.4.9): + resolution: {integrity: sha512-BJLBj1Vg9kV7ZMXAULT9UGogrElwz5s+k8TzC7LsFkHv5Jy90OWnHKUp8qm7sypu2pkF5pTJ5McUuHudnT0Imw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@microsoft/api-extractor': 7.37.0 + '@rollup/pluginutils': 5.0.2 + '@vue/language-core': 1.8.13(typescript@5.2.2) + debug: 4.3.4 + kolorist: 1.8.0 + typescript: 5.2.2 + vite: 4.4.9(@types/node@18.11.10) + vue-tsc: 1.8.13(typescript@5.2.2) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + dev: true + /vite-plugin-node-polyfills@0.14.1(vite@4.4.9): resolution: {integrity: sha512-S5ofYUkXea/d94AHzDwiTA7Pv/yEwzagnjgVEuBZdy7E72GBfK17qpljAlyK3CD+CRcDzAwwl/4bEjKdvZmTGQ==} peerDependencies: @@ -10340,10 +10565,22 @@ packages: dependencies: '@vue/language-core': 1.8.13(typescript@4.9.4) '@vue/typescript': 1.8.13(typescript@4.9.4) - semver: 7.3.8 + semver: 7.5.4 typescript: 4.9.4 dev: true + /vue-tsc@1.8.13(typescript@5.2.2): + resolution: {integrity: sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@vue/language-core': 1.8.13(typescript@5.2.2) + '@vue/typescript': 1.8.13(typescript@5.2.2) + semver: 7.5.4 + typescript: 5.2.2 + dev: true + /w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -10533,6 +10770,19 @@ packages: optional: true dev: true + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} diff --git a/tsconfig.json b/tsconfig.json index 946fccf..0838656 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,8 @@ "@casperdash/usewallet/*": ["packages/react/src/*"], "@casperdash/usewallet-ledger": ["packages/ledger/src"], "@casperdash/usewallet-ledger/*": ["packages/ledger/src/*"], + "@casperdash/usewallet-evm": ["packages/evm/src"], + "@casperdash/usewallet-evm/*": ["packages/evm/src/*"], }, "resolveJsonModule": true, "skipLibCheck": true,