{"_id":"@wonderland/walletless","_rev":"6-3093658047b7d18e41abd003d0cf5afd","name":"@wonderland/walletless","dist-tags":{"latest":"1.2.0","snapshot":"0.0.0-snapshot.33207c96"},"versions":{"0.0.0":{"name":"@wonderland/walletless","version":"0.0.0","license":"MIT","_id":"@wonderland/walletless@0.0.0","maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"dist":{"shasum":"b13e3b33d22d095a981521d1dc23af0933bf786d","tarball":"https://registry.npmjs.org/@wonderland/walletless/-/walletless-0.0.0.tgz","fileCount":5,"integrity":"sha512-ogBneF2zK9KXn2sGS1FAsWA4LXfl2E1zQHGXx3BkGrp9Hn2cT82GXKLyxs1dU6fFY7HKepdyyLOudlPta0X+gA==","signatures":[{"sig":"MEQCIDT1Pffl2SBm++ZDWMX7rnX2iS2Dt6+r/Vnx8Ro/6NuoAiBO4gNtFxwUwwR7LNAoFhbnIWgXJezeikSsMuY7yHRCMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":669},"main":"index.js","types":"index.d.ts","gitHead":"18a9575df403f1242c9241dba45906e94b7271b1","scripts":{"publish:park":"npm publish --tag snapshot --access public"},"_npmUser":{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},"_npmVersion":"10.9.2","description":"Placeholder package. Real code coming soon.","directories":{},"_nodeVersion":"22.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/walletless_0.0.0_1767899994957_0.056626026697444765","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-snapshot.1d7f5420":{"name":"@wonderland/walletless","version":"0.0.0-snapshot.1d7f5420","keywords":["ethereum","e2e","testing","wagmi","viem","provider","eip-1193"],"author":{"name":"Wonderland"},"license":"MIT","_id":"@wonderland/walletless@0.0.0-snapshot.1d7f5420","maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"homepage":"https://github.com/defi-wonderland/walletless#readme","bugs":{"url":"https://github.com/defi-wonderland/walletless/issues"},"dist":{"shasum":"eaca99f4757bbbd4fb809dea16a6e279b5069742","tarball":"https://registry.npmjs.org/@wonderland/walletless/-/walletless-0.0.0-snapshot.1d7f5420.tgz","fileCount":23,"integrity":"sha512-lXVbMw7jI2ZShUZQlPVx3UR5g6IP17nLSyPc/SytCU9f/OohHmW7Z5B/8LFVdpbxE3Tusg1QYYkb8hrG8X9ZQA==","signatures":[{"sig":"MEUCIC+ZlaOeOJkTYgCJcTbKc4v/+HHUQO61ikosN8Hg+1OsAiEAhruLLyNoMa3NNg9SiMWV9y7/erQshKY+rvk2wddEk+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@wonderland%2fwalletless@0.0.0-snapshot.1d7f5420","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94344},"main":"./dist/src/index.js","pnpm":{"overrides":{"esbuild@<=0.24.2":">=0.25.0","@metamask/sdk@>=0.16.0 <=0.33.0":">=0.33.1","@metamask/sdk-communication-layer@>=0.16.0 <=0.33.0":">=0.33.1"}},"type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"1d7f5420e4fd0521f4cdc13216a3851072dd9c83","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.{js,ts,json}\"","test":"vitest run --config vitest.config.ts --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","format":"prettier --check \"{src,test}/**/*.{js,ts,json}\"","prepare":"husky","lint:fix":"pnpm lint --fix","test:cov":"vitest run --config vitest.config.ts --coverage","format:fix":"prettier --write \"{src,test}/**/*.{js,ts,json}\"","check-types":"tsc --noEmit -p ./tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e1a78d66-79af-400d-b5df-07c1502fb862"}},"repository":{"url":"git+https://github.com/defi-wonderland/walletless.git","type":"git"},"_npmVersion":"11.5.2","description":"Virtual EIP-1193 provider for E2E testing with Wagmi connector","directories":{"src":"src"},"lint-staged":{"*":"prettier --write --ignore-unknown","package.json":"sort-package-json","*.js,*.ts,*.json":"eslint --fix"},"_nodeVersion":"20.19.6","dependencies":{"viem":"2.43.5","wagmi":"3.2.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","readmeFilename":"README.md","devDependencies":{"husky":"9.1.5","eslint":"8.56.0","vitest":"2.1.9","prettier":"3.3.3","commitlint":"19.4.1","typescript":"5.5.4","@types/node":"20.3.1","lint-staged":"15.2.10","sort-package-json":"2.10.1","@vitest/coverage-v8":"2.1.9","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@typescript-eslint/parser":"7.18.0","@commitlint/config-conventional":"19.4.1","@typescript-eslint/eslint-plugin":"7.18.0","@ianvs/prettier-plugin-sort-imports":"4.3.1"},"peerDependencies":{"viem":">=2.0.0","wagmi":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/walletless_0.0.0-snapshot.1d7f5420_1767900512889_0.6484996582930838","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@wonderland/walletless","version":"1.0.0","keywords":["ethereum","e2e","testing","wagmi","viem","provider","eip-1193"],"author":{"name":"Wonderland"},"license":"MIT","_id":"@wonderland/walletless@1.0.0","maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"homepage":"https://github.com/defi-wonderland/walletless#readme","bugs":{"url":"https://github.com/defi-wonderland/walletless/issues"},"dist":{"shasum":"54523b460281f7ff3ec1d2839376611eb11ee8ce","tarball":"https://registry.npmjs.org/@wonderland/walletless/-/walletless-1.0.0.tgz","fileCount":23,"integrity":"sha512-aYY2f+0XzKtTqiXLEgrhPk3U3cewJzJH+EWnpulv/EHrlujjipzpXxM64dBP1TMSEt2t32OH77qEUWCiQLaxUA==","signatures":[{"sig":"MEUCIHHr54i1MxosHeneSiYLuDyvZKzbgmRZVIWi8EUQ00roAiEA5kMX5YbW6JQ/PNAWSGMTGqY1hvR8h6N9/xxQaOnDulg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@wonderland%2fwalletless@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96820},"main":"./dist/src/index.js","pnpm":{"overrides":{"esbuild@<=0.24.2":">=0.25.0","@metamask/sdk@>=0.16.0 <=0.33.0":">=0.33.1","@metamask/sdk-communication-layer@>=0.16.0 <=0.33.0":">=0.33.1"}},"type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"3d782b9a25836c37465384b1f854103ff3521b1f","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.{js,ts,json}\"","test":"vitest run --config vitest.config.ts --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","format":"prettier --check \"{src,test}/**/*.{js,ts,json}\"","prepare":"husky","lint:fix":"pnpm lint --fix","test:cov":"vitest run --config vitest.config.ts --coverage","format:fix":"prettier --write \"{src,test}/**/*.{js,ts,json}\"","check-types":"tsc --noEmit -p ./tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e1a78d66-79af-400d-b5df-07c1502fb862"}},"repository":{"url":"git+https://github.com/defi-wonderland/walletless.git","type":"git"},"_npmVersion":"11.5.2","description":"Virtual EIP-1193 provider for E2E testing with Wagmi connector","directories":{"src":"src"},"lint-staged":{"*":"prettier --write --ignore-unknown","package.json":"sort-package-json","*.js,*.ts,*.json":"eslint --fix"},"_nodeVersion":"20.19.6","dependencies":{"viem":"2.43.5","wagmi":"3.2.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"husky":"9.1.5","eslint":"8.56.0","vitest":"2.1.9","prettier":"3.3.3","commitlint":"19.4.1","typescript":"5.5.4","@types/node":"20.3.1","lint-staged":"15.2.10","sort-package-json":"2.10.1","@vitest/coverage-v8":"2.1.9","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@typescript-eslint/parser":"7.18.0","@commitlint/config-conventional":"19.4.1","@typescript-eslint/eslint-plugin":"7.18.0","@ianvs/prettier-plugin-sort-imports":"4.3.1"},"peerDependencies":{"viem":">=2.0.0","wagmi":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/walletless_1.0.0_1767968384650_0.2188909869614979","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@wonderland/walletless","version":"1.1.0","keywords":["ethereum","e2e","testing","wagmi","viem","provider","eip-1193"],"author":{"name":"Wonderland"},"license":"MIT","_id":"@wonderland/walletless@1.1.0","maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"homepage":"https://github.com/defi-wonderland/walletless#readme","bugs":{"url":"https://github.com/defi-wonderland/walletless/issues"},"dist":{"shasum":"a8efe8805490ad13141addda1c7e5f8b54e333a3","tarball":"https://registry.npmjs.org/@wonderland/walletless/-/walletless-1.1.0.tgz","fileCount":23,"integrity":"sha512-P00T9rYqKzwqIOigiURtcZ0Vh0x1kqy/VXQjpPUPxrv2GUrmH9cuAKCjnfBl+VBF0+JkXr0EEtWEJhy+kUvVOw==","signatures":[{"sig":"MEYCIQC8xzDLRneYqKRaTDqaOBF/Vux9/a0uF2xjDoDFYn4CHwIhAK4oUJkwvddlZx3uiLC/Px5JnnOyt+DXKueLYX8q+Ch7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@wonderland%2fwalletless@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107884},"main":"./dist/src/index.js","pnpm":{"overrides":{"esbuild@<=0.24.2":">=0.25.0","@metamask/sdk@>=0.16.0 <=0.33.0":">=0.33.1","@metamask/sdk-communication-layer@>=0.16.0 <=0.33.0":">=0.33.1"}},"type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"5d37e76d3d2118ce528319ce134e6c052a58ca68","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.{js,ts,json}\"","test":"vitest run --config vitest.config.ts --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","format":"prettier --check \"{src,test}/**/*.{js,ts,json}\"","prepare":"husky","lint:fix":"pnpm lint --fix","test:cov":"vitest run --config vitest.config.ts --coverage","format:fix":"prettier --write \"{src,test}/**/*.{js,ts,json}\"","check-types":"tsc --noEmit -p ./tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e1a78d66-79af-400d-b5df-07c1502fb862"}},"repository":{"url":"git+https://github.com/defi-wonderland/walletless.git","type":"git"},"_npmVersion":"11.5.2","description":"Virtual EIP-1193 provider for E2E testing with Wagmi connector","directories":{"src":"src"},"lint-staged":{"*":"prettier --write --ignore-unknown","package.json":"sort-package-json","*.js,*.ts,*.json":"eslint --fix"},"_nodeVersion":"20.19.6","dependencies":{"viem":"2.43.5","wagmi":"3.2.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","devDependencies":{"husky":"9.1.5","eslint":"8.56.0","vitest":"2.1.9","prettier":"3.3.3","commitlint":"19.4.1","typescript":"5.5.4","@types/node":"20.3.1","lint-staged":"15.2.10","sort-package-json":"2.10.1","@vitest/coverage-v8":"2.1.9","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@typescript-eslint/parser":"7.18.0","@commitlint/config-conventional":"19.4.1","@typescript-eslint/eslint-plugin":"7.18.0","@ianvs/prettier-plugin-sort-imports":"4.3.1"},"peerDependencies":{"viem":">=2.0.0","wagmi":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/walletless_1.1.0_1768328773184_0.41773582240530427","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-snapshot.33207c96":{"name":"@wonderland/walletless","version":"0.0.0-snapshot.33207c96","keywords":["ethereum","e2e","testing","wagmi","viem","provider","eip-1193"],"author":{"name":"Wonderland"},"license":"MIT","_id":"@wonderland/walletless@0.0.0-snapshot.33207c96","maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"homepage":"https://github.com/defi-wonderland/walletless#readme","bugs":{"url":"https://github.com/defi-wonderland/walletless/issues"},"dist":{"shasum":"4543dc6da1a6fcb82344721f1992363179431e6f","tarball":"https://registry.npmjs.org/@wonderland/walletless/-/walletless-0.0.0-snapshot.33207c96.tgz","fileCount":27,"integrity":"sha512-881xVYl3asm1Dn/DLq5Q/W/otgXex+4GfZbI1/w2KCR5SPDFbzLn8bI7HwOFySqTb3LkR7VoGQkFzLj7nvtFiQ==","signatures":[{"sig":"MEYCIQCzGRRdBixQTD6d/vg0yPESdM1+kLWy2ysJUNCuUBSeHQIhALIrdZLztsFwyvgzedLyB6MtRMnBKF03N4qaharo3wyw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@wonderland%2fwalletless@0.0.0-snapshot.33207c96","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111570},"main":"./dist/src/index.js","pnpm":{"overrides":{"esbuild@<=0.24.2":">=0.25.0","@metamask/sdk@>=0.16.0 <=0.33.0":">=0.33.1","@metamask/sdk-communication-layer@>=0.16.0 <=0.33.0":">=0.33.1"}},"type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"33207c9685519e744a2052b3c7789583685dab88","private":false,"scripts":{"lint":"eslint \"{src,test}/**/*.{js,ts,json}\"","test":"vitest run --config vitest.config.ts --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","format":"prettier --check \"{src,test}/**/*.{js,ts,json}\"","prepare":"husky","lint:fix":"pnpm lint --fix","test:cov":"vitest run --config vitest.config.ts --coverage","format:fix":"prettier --write \"{src,test}/**/*.{js,ts,json}\"","check-types":"tsc --noEmit -p ./tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e1a78d66-79af-400d-b5df-07c1502fb862"}},"repository":{"url":"git+https://github.com/defi-wonderland/walletless.git","type":"git"},"_npmVersion":"11.5.2","description":"Virtual EIP-1193 provider for E2E testing with Wagmi connector","directories":{"src":"src"},"lint-staged":{"*":"prettier --write --ignore-unknown","package.json":"sort-package-json","*.js,*.ts,*.json":"eslint --fix"},"_nodeVersion":"20.20.0","dependencies":{"viem":"2.43.5","wagmi":"3.2.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.1","readmeFilename":"README.md","devDependencies":{"husky":"9.1.5","eslint":"8.56.0","vitest":"2.1.9","prettier":"3.3.3","commitlint":"19.4.1","typescript":"5.5.4","@types/node":"20.3.1","lint-staged":"15.2.10","sort-package-json":"2.10.1","@vitest/coverage-v8":"2.1.9","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@typescript-eslint/parser":"7.18.0","@commitlint/config-conventional":"19.4.1","@typescript-eslint/eslint-plugin":"7.18.0","@ianvs/prettier-plugin-sort-imports":"4.3.1"},"peerDependencies":{"viem":">=2.0.0","wagmi":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/walletless_0.0.0-snapshot.33207c96_1770751111486_0.00945360293191988","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@wonderland/walletless","version":"1.2.0","private":false,"description":"Virtual EIP-1193 provider for E2E testing with Wagmi connector","keywords":["ethereum","e2e","testing","wagmi","viem","provider","eip-1193"],"homepage":"https://github.com/defi-wonderland/walletless#readme","repository":{"type":"git","url":"git+https://github.com/defi-wonderland/walletless.git"},"license":"MIT","author":{"name":"Wonderland"},"type":"module","main":"./dist/src/index.js","types":"./dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"directories":{"src":"src"},"scripts":{"build":"tsc -p tsconfig.build.json","check-types":"tsc --noEmit -p ./tsconfig.json","clean":"rm -rf dist","format":"prettier --check \"{src,test}/**/*.{js,ts,json}\"","format:fix":"prettier --write \"{src,test}/**/*.{js,ts,json}\"","lint":"eslint \"{src,test}/**/*.{js,ts,json}\"","lint:fix":"pnpm lint --fix","prepare":"husky","test":"vitest run --config vitest.config.ts --passWithNoTests","test:cov":"vitest run --config vitest.config.ts --coverage"},"lint-staged":{"*":"prettier --write --ignore-unknown","*.js,*.ts,*.json":"eslint --fix","package.json":"sort-package-json"},"dependencies":{"viem":"2.43.5","wagmi":"3.2.0"},"devDependencies":{"@commitlint/config-conventional":"19.4.1","@ianvs/prettier-plugin-sort-imports":"4.3.1","@types/node":"20.3.1","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","@vitest/coverage-v8":"2.1.9","commitlint":"19.4.1","eslint":"8.56.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","husky":"9.1.5","lint-staged":"15.2.10","prettier":"3.3.3","sort-package-json":"2.10.1","typescript":"5.5.4","vitest":"2.1.9"},"peerDependencies":{"viem":">=2.0.0","wagmi":">=2.0.0"},"packageManager":"pnpm@9.7.1","engines":{"node":">=20"},"pnpm":{"overrides":{"esbuild@<=0.24.2":">=0.25.0","@metamask/sdk-communication-layer@>=0.16.0 <=0.33.0":">=0.33.1","@metamask/sdk@>=0.16.0 <=0.33.0":">=0.33.1"}},"_id":"@wonderland/walletless@1.2.0","gitHead":"e4e376aa55f5e56201decc31c96ccf01447209df","bugs":{"url":"https://github.com/defi-wonderland/walletless/issues"},"_nodeVersion":"20.20.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-e0zX5uOq65XBJ0KcBgd7rGY2JWsqugHw1FJQsY3EKqsfXVmPpBlH9Fk7DHlDS6C1uDQv6R4uSQl5oNCe0h+l8Q==","shasum":"8490af9b2052b874b7a511c4429c646a2ab59fe7","tarball":"https://registry.npmjs.org/@wonderland/walletless/-/walletless-1.2.0.tgz","fileCount":27,"unpackedSize":111552,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@wonderland%2fwalletless@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG1v6yNEpTW9mzPvFtAam1qiPvU8RxQvPCJFg3ZpIeV/AiEAotPC1ULrhpTzyZjrJGj8JIS2CO7clg+4KJynkm+hucY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e1a78d66-79af-400d-b5df-07c1502fb862"}},"maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/walletless_1.2.0_1770934550399_0.47277965251109233"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-08T19:19:54.873Z","modified":"2026-02-12T22:15:51.191Z","0.0.0":"2026-01-08T19:19:55.091Z","0.0.0-snapshot.1d7f5420":"2026-01-08T19:28:33.027Z","1.0.0":"2026-01-09T14:19:44.790Z","1.1.0":"2026-01-13T18:26:13.339Z","0.0.0-snapshot.33207c96":"2026-02-10T19:18:31.661Z","1.2.0":"2026-02-12T22:15:50.604Z"},"bugs":{"url":"https://github.com/defi-wonderland/walletless/issues"},"author":{"name":"Wonderland"},"license":"MIT","homepage":"https://github.com/defi-wonderland/walletless#readme","keywords":["ethereum","e2e","testing","wagmi","viem","provider","eip-1193"],"repository":{"type":"git","url":"git+https://github.com/defi-wonderland/walletless.git"},"description":"Virtual EIP-1193 provider for E2E testing with Wagmi connector","maintainers":[{"name":"turtlemoji","email":"turtlemoji@protonmail.com"},{"name":"0xgorilla","email":"gori@wonderland.xyz"}],"readme":"# @wonderland/walletless\n\n[![image](https://img.shields.io/npm/v/@wonderland/walletless.svg?style=flat-square)](https://www.npmjs.org/package/@wonderland/walletless)\n\nLightweight E2E Provider for Web3 DApps - A virtual EIP-1193 provider that enables deterministic, high-performance E2E testing.\n\n## Overview\n\nThis library provides a **man-in-the-middle injected provider**. Your DApp keeps using the EIP-1193 interface, while reads go to [Anvil](https://getfoundry.sh/anvil/reference) and writes are signed locally.\n\n### How It Works\n\n```mermaid\ngraph LR\n    DApp[\"DApp UI\"]\n    CP1[\"E2E Provider\"]\n    CP2[\"E2E Provider\"]\n    SIGN[\"Sign logic / Impersonation\"]\n    ANVIL[\"Anvil RPC\"]\n\n    DApp -->|Read| CP1\n    CP1 -->|eth_call, eth_getBalance, ...| ANVIL\n\n    DApp -->|Write| CP2\n    CP2 -->|eth_sendTx, eth_sign, ...| SIGN\n    SIGN --> ANVIL\n```\n\n**Read operations** (`eth_call`, `eth_getBalance`, …) → forwarded to Anvil RPC  \n**Write operations** (`eth_sendTransaction`, `eth_sign`, …) → signed locally, then sent to Anvil  \nYou get production-realistic chains with test-level control.\n\n## Advantages\n\n-   **Incredible Test Speed**: No browser extension overhead, controlled RPC latency, fully virtualized wallet interactions\n-   **Framework Agnostic**: Works with Cypress, Playwright, Selenium, or any E2E testing tool\n-   **Zero External Dependencies**: Built entirely on viem types and native fetch\n-   **Total Control**: Simulate edge cases like RPC errors, specific error codes, delayed signatures, chain switching failures\n-   **CI/CD Friendly**: Runs effortlessly in headless browsers and Docker containers\n\n## Benchmarks\n\nReal-world performance comparison using identical test suites on the same Next.js boilerplate:\n\n| Metric | Synpress | Walletless | Speedup |\n| ------ | -------: | ---------: | ------: |\n| Real   |   34.50s |      2.10s | **16x** |\n| User   |   24.24s |      2.98s |  **8x** |\n| Sys    |    5.34s |      0.75s |  **7x** |\n\n**Test suite:**\n\n1. Connect wallet via RainbowKit modal\n2. Connect + execute 1 ETH transfer\n\n## Installation\n\n```bash\npnpm add @wonderland/walletless\n```\n\n## Usage\n\n### Wagmi (plug-and-play)\n\n```typescript\nimport { e2eConnector } from \"@wonderland/walletless\";\nimport { createConfig, http } from \"wagmi\";\nimport { mainnet } from \"wagmi/chains\";\n\nconst isE2E = process.env.CI === \"true\";\n\nexport const config = createConfig({\n    chains: [mainnet],\n    connectors: isE2E\n        ? [e2eConnector()]\n        : [\n              /* real wallets */\n          ],\n    transports: {\n        [mainnet.id]: isE2E ? http(\"http://localhost:8545\") : http(),\n    },\n});\n```\n\n#### Multichain configuration\n\n```typescript\nimport { e2eConnector } from \"@wonderland/walletless\";\nimport { createConfig, http } from \"wagmi\";\nimport { arbitrum, mainnet } from \"wagmi/chains\";\n\nexport const config = createConfig({\n    chains: [mainnet, arbitrum],\n    connectors: [\n        e2eConnector({\n            chains: [mainnet, arbitrum],\n            rpcUrls: {\n                1: \"http://localhost:8545\",\n                42161: \"http://localhost:8546\",\n            },\n            account: \"0xYourPrivateKey...\",\n            debug: true,\n        }),\n    ],\n    transports: {\n        [mainnet.id]: http(\"http://localhost:8545\"),\n        [arbitrum.id]: http(\"http://localhost:8546\"),\n    },\n});\n```\n\n### Standalone provider\n\n```typescript\nimport { createE2EProvider } from \"@wonderland/walletless\";\nimport { mainnet } from \"viem/chains\";\n\nconst provider = createE2EProvider();\n\n// Use the provider directly\nconst accounts = await provider.request({ method: \"eth_requestAccounts\" });\nconst balance = await provider.request({\n    method: \"eth_getBalance\",\n    params: [accounts[0], \"latest\"],\n});\n```\n\n### Test control methods (recommended)\n\nThe provider object exposes control methods directly. This is the **recommended API**, especially for E2E tests where the provider lives in the browser and you interact via `page.evaluate()`.\n\n```typescript\nimport { ANVIL_ACCOUNTS, createE2EProvider } from \"@wonderland/walletless\";\n\nconst provider = createE2EProvider();\n\n// Switch signing account by index (0-9)\nprovider.setSigningAccount(0); // First Anvil account\nprovider.setSigningAccount(5); // Sixth Anvil account\n\n// Switch by Anvil address (looks up matching private key)\nprovider.setSigningAccount(\"0x70997970C51812dc3A010C7d01b50e0d17dc79C8\");\n\n// Switch by raw private key\nprovider.setSigningAccount(\"0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d\");\n\n// Switch chain\nprovider.setChain(42161); // Arbitrum\n\n// Reject signatures (throws 4001 \"User Rejected Request\" error)\nprovider.setRejectSignature(true);\n\n// Reject transactions (throws 4001 \"User Rejected Request\" error)\nprovider.setRejectTransaction(true);\n\n// Disconnect (emits disconnect event)\nprovider.disconnect();\n\n// Access Anvil accounts directly\nconsole.log(ANVIL_ACCOUNTS[0].address); // 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\nconsole.log(ANVIL_ACCOUNTS[0].privateKey);\n```\n\n#### Using with Playwright (browser context)\n\nWhen testing with Playwright, expose the provider on `window` and call methods via `page.evaluate()`:\n\n```typescript\n// In your app setup (e.g. wagmi config)\nconst provider = createE2EProvider({ ... });\n(window as any).__e2eTestProvider = provider;\n\n// In your Playwright test\nawait page.evaluate(() => {\n    window.__e2eTestProvider.setRejectTransaction(true);\n});\n// Now the next transaction attempt will throw a 4001 error\n\nawait page.evaluate(() => {\n    window.__e2eTestProvider.setSigningAccount(3);\n});\n// Now the provider uses the 4th Anvil account\n```\n\n### Test control helpers (standalone functions)\n\nStandalone helper functions are also available. They delegate to the provider methods above and are useful when you have a direct reference to the provider in the same JS context.\n\n```typescript\nimport {\n    createE2EProvider,\n    disconnect,\n    setChain,\n    setRejectSignature,\n    setRejectTransaction,\n    setSigningAccount,\n} from \"@wonderland/walletless\";\n\nconst provider = createE2EProvider();\n\nsetSigningAccount(provider, 0);\nsetChain(provider, 42161);\nsetRejectSignature(provider, true);\nsetRejectTransaction(provider, true);\ndisconnect(provider);\n```\n\n### Multichain + chain switching\n\n```typescript\nimport { createE2EProvider, setChain } from \"@wonderland/walletless\";\nimport { arbitrum, mainnet, optimism } from \"viem/chains\";\n\n// Create provider with multiple chains and per-chain RPC URLs\nconst provider = createE2EProvider({\n    chains: [mainnet, arbitrum, optimism],\n    rpcUrls: {\n        1: \"http://localhost:8545\",\n        42161: \"http://localhost:8546\",\n        10: \"http://localhost:8547\",\n    },\n});\n\n// Get current chain (first in array is default)\nconst chainId = await provider.request({ method: \"eth_chainId\" });\nconsole.log(chainId); // \"0x1\" (mainnet)\n\n// Switch to Arbitrum - provider now uses arbitrum RPC URL\nsetChain(provider, arbitrum.id);\n\n// Verify switch\nconst newChainId = await provider.request({ method: \"eth_chainId\" });\nconsole.log(newChainId); // \"0xa4b1\" (Arbitrum)\n\n// Switching to unsupported chain throws an error\ntry {\n    setChain(provider, 137); // Polygon - not in chains array\n} catch (e) {\n    console.log(e.message); // \"Chain 137 is not supported. Supported chains: 1, 42161, 10\"\n}\n```\n\n### Wagmi connector with external provider (test control)\n\nChain switching validates the target chain, updates the RPC URL, recreates the wallet client, updates state, and emits `chainChanged`.\n\nWhen you need to switch accounts or chains during tests while using the wagmi connector, pass your provider to the connector:\n\n```typescript\nimport {\n    createE2EProvider,\n    e2eConnector,\n    setChain,\n    setSigningAccount,\n} from \"@wonderland/walletless\";\nimport { createConfig, http } from \"wagmi\";\nimport { arbitrum, mainnet } from \"wagmi/chains\";\n\n// Create provider externally so you can control it\nconst provider = createE2EProvider({\n    chains: [mainnet, arbitrum],\n    rpcUrls: {\n        1: \"http://localhost:8545\",\n        42161: \"http://localhost:8546\",\n    },\n});\n\nexport const config = createConfig({\n    chains: [mainnet, arbitrum],\n    connectors: [e2eConnector({ provider })],\n    transports: {\n        [mainnet.id]: http(\"http://localhost:8545\"),\n        [arbitrum.id]: http(\"http://localhost:8546\"),\n    },\n});\n\n// In your tests, switch accounts - wagmi will be notified automatically\nsetSigningAccount(provider, 3); // Switch to 4th Anvil account\n\n// Switch chains during tests (also switches RPC endpoint)\nsetChain(provider, arbitrum.id); // Switch to Arbitrum\n```\n\n> **Note:** If your wagmi config is created inside a React component (common with RainbowKit or dynamic chain setups), you'll need to use `useRef` to maintain a stable provider reference. Otherwise, each re-render creates a new provider instance, and calls to `setSigningAccount()` won't affect the provider that wagmi is actually using.\n\n## Test runner example (Playwright)\n\n```typescript\n// tests/swap.spec.ts\nimport { expect, test } from \"@playwright/test\";\n\ntest(\"should swap tokens\", async ({ page }) => {\n    await page.goto(\"/swap\");\n\n    await page.getByTestId(\"token-input\").fill(\"1.0\");\n    await page.getByTestId(\"swap-button\").click();\n\n    // Transaction is automatically signed and executed\n    await expect(page.locator('[data-testid=\"success-message\"]')).toBeVisible();\n});\n```\n\n### As a RainbowKit custom Wallet\n\nTo instantiate an e2eWallet compatible with rainbowkit, you can do the following :\n\n```typescript\nimport { Wallet, WalletDetailsParams } from \"@rainbow-me/rainbowkit\";\nimport { e2eConnector } from \"@wonderland/walletless\";\n\nexport const e2eWallet = (): Wallet => ({\n    id: \"e2e\",\n    name: \"E2E Test Wallet\",\n    iconUrl:\n        'data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><rect fill=\"%234F46E5\" width=\"100\" height=\"100\" rx=\"20\"/><text x=\"50\" y=\"65\" font-size=\"50\" text-anchor=\"middle\" fill=\"white\">E2E</text></svg>',\n    iconBackground: \"#4F46E5\",\n    installed: true,\n    createConnector: (walletDetails: WalletDetailsParams) => {\n        // Create the E2E connector (this returns a CreateConnectorFn)\n        const connector = e2eConnector({\n            rpcUrls: {\n                [sepolia.id]: \"http://localhost:8545\",\n                [mainnet.id]: \"http://localhost:8546\",\n            },\n            chains: [sepolia, mainnet],\n        });\n\n        // Wrap it in the format expected by RainbowKit\n        return createConnector((config) => ({\n            ...connector(config),\n            ...walletDetails,\n        }));\n    },\n});\n```\n\nIt will create a custom rainbowkit wallet using walletless as connector. Then your wagmi config would look like this:\n\n```typescript\nconst connectors = connectorsForWallets(\n    [\n        {\n            groupName: \"Recommended\",\n            wallets: isE2E ? [e2eWallet] : [injectedWallet],\n        },\n    ],\n    {\n        appName: \"Web3 React boilerplate\",\n        projectId: PROJECT_ID,\n    },\n);\n\nexport const config = createConfig({\n    chains: [sepolia, mainnet],\n    transports: {\n        [sepolia.id]: isE2E ? http(\"http://localhost:8545\") : http(),\n        [mainnet.id]: isE2E ? http(\"http://localhost:8546\") : http(),\n    },\n    connectors,\n    // ...rest of your wagmi config...\n});\n```\n\n## Configuration\n\n### E2EConnectorParameters (Wagmi)\n\nThe connector accepts **either** a pre-constructed provider **or** configuration options:\n\n**Option 1: Pass a provider** (recommended when you need `setSigningAccount()`)\n\n| Parameter  | Type          | Description                                   |\n| ---------- | ------------- | --------------------------------------------- |\n| `provider` | `E2EProvider` | Pre-constructed provider for external control |\n\n**Option 2: Let the connector create the provider internally**\n\n| Parameter | Type                     | Default                        | Description                                                                       |\n| --------- | ------------------------ | ------------------------------ | --------------------------------------------------------------------------------- |\n| `chains`  | `Chain[]`                | `[mainnet]`                    | Supported chains (first chain is default)                                         |\n| `rpcUrls` | `Record<number, string>` | `{}`                           | Per-chain RPC URLs mapping chainId to URL. Falls back to `http://localhost:8545`. |\n| `account` | `Hex \\| Account`         | Anvil's first test private key | Private key or viem Account for signing                                           |\n| `debug`   | `boolean`                | `false`                        | Enable debug logging                                                              |\n\n### E2EProviderConfig (Standalone)\n\nAll parameters are optional with sensible Anvil defaults:\n\n| Parameter | Type                     | Default                        | Description                                                                       |\n| --------- | ------------------------ | ------------------------------ | --------------------------------------------------------------------------------- |\n| `chains`  | `Chain[]`                | `[mainnet]`                    | Supported chains (first chain is default)                                         |\n| `rpcUrls` | `Record<number, string>` | `{}`                           | Per-chain RPC URLs mapping chainId to URL. Falls back to `http://localhost:8545`. |\n| `account` | `Hex \\| Account`         | Anvil's first test private key | Private key or viem Account for signing                                           |\n| `debug`   | `boolean`                | `false`                        | Enable debug logging                                                              |\n\n### setSigningAccount Input Types\n\n| Input Type   | Example                                     | Description                        |\n| ------------ | ------------------------------------------- | ---------------------------------- |\n| Index (0-9)  | `setSigningAccount(provider, 0)`            | Use Anvil's nth default account    |\n| Address      | `setSigningAccount(provider, \"0x70997...\")` | Look up matching Anvil account     |\n| Private Key  | `setSigningAccount(provider, \"0x59c69...\")` | Use any private key (66 chars)     |\n| viem Account | `setSigningAccount(provider, viemAccount)`  | Use a viem Account object directly |\n\n## Anvil Reference\n\nThis library is designed to work by default with [Anvil](https://getfoundry.sh/anvil/reference), a fast local Ethereum development node from Foundry.\n\n### Installing Foundry\n\n```bash\n# Install Foundry (includes anvil, forge, cast, chisel)\ncurl -L https://foundry.paradigm.xyz | bash\n\n# Run foundryup to install the latest version\nfoundryup\n\n# Verify installation\nanvil --version\n```\n\n### Basic Usage\n\n```bash\n# Start Anvil with defaults (port 8545, 10 accounts, 10000 ETH each, chainId 31337)\nanvil\n```\n\n### Forking a Chain\n\n```bash\n# Fork mainnet\nanvil --fork-url https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY\n\n# Fork at a specific block\nanvil --fork-url https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY --fork-block-number 19000000\n\n# Fork Arbitrum\nanvil --fork-url https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY --chain-id 42161\n```\n\n### Changing the Port\n\n```bash\n# Single fork on custom port\nanvil --port 8546\n\n# Multiple forks (run in separate terminals)\nanvil --port 8545 --fork-url https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY   # Mainnet\nanvil --port 8546 --fork-url https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY   # Arbitrum\nanvil --port 8547 --fork-url https://opt-mainnet.g.alchemy.com/v2/YOUR_KEY   # Optimism\n```\n\n### Chain Configuration\n\n```bash\n# Set chain ID (useful when not forking)\nanvil --chain-id 1337\n\n# Set block time (auto-mining interval in seconds)\nanvil --block-time 12\n\n# Disable auto-mining (mine on demand)\nanvil --no-mining\n```\n\n### Account Configuration\n\n```bash\n# Generate 20 accounts with 50000 ETH each\nanvil --accounts 20 --balance 50000\n\n# Use custom mnemonic\nanvil --mnemonic \"test test test test test test test test test test test junk\"\n```\n\nFor the full reference, see the [Anvil documentation](https://getfoundry.sh/anvil/reference).\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build\npnpm build\n\n# Run tests\npnpm test\n\n# Lint\npnpm lint\n\n# Format\npnpm format:fix\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines before submitting a PR.\n","readmeFilename":"README.md"}