{"_id":"@gemini-wallet/core","_rev":"9-47103fe126311a8fc314e57b61763e11","name":"@gemini-wallet/core","dist-tags":{"latest":"0.3.2"},"versions":{"0.0.1":{"name":"@gemini-wallet/core","version":"0.0.1","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"author":{"name":"Gemini"},"license":"MIT","_id":"@gemini-wallet/core@0.0.1","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"}],"homepage":"https://github.com/gemini/gemini-wallet-core","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"dist":{"shasum":"8e4fc40cbf1d5443037476d8dffd145197b48240","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.0.1.tgz","fileCount":16,"integrity":"sha512-wf2A25LAjKVi2Kymuq3i/sHkbN3lNSS+aXeu1mMVGwQj4d0XVVMHMX3YMfbtUpu5yk9zWu6diTAQB4hTlvmaZQ==","signatures":[{"sig":"MEQCICdZ28ieNUlDM5JBSh0cNnfe5TKY3fwd0xSAxZik4FEdAiBkL4JUZS6fgfvYF74oY0b6eJmGRkEbxnORN/kMWjTibg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51195},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"11a32a65fed9ae646c1db229467da125a1db4702","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint ./src","test":"vitest run","build":"tsup src/index.ts --format cjs,esm --dts --clean","lint:fix":"eslint ./src --fix","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"repository":{"url":"git+https://github.com/gemini/gemini-wallet-core.git","type":"git"},"_npmVersion":"10.9.0","description":"Core SDK for Gemini Wallet integration with popup communication","directories":{},"_nodeVersion":"23.3.0","dependencies":{"eventemitter3":"5.0.1","@metamask/rpc-errors":"7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","eslint":"^8.57.0","vitest":"^2.0.5","typescript":"^5.5.3","@types/node":"^20.14.9","@vitest/coverage-v8":"^2.0.5"},"peerDependencies":{"viem":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.0.1_1752590654835_0.7575454468583798","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@gemini-wallet/core","version":"0.1.0","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"author":{"name":"Gemini"},"license":"MIT","_id":"@gemini-wallet/core@0.1.0","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"homepage":"https://github.com/gemini/gemini-wallet-core","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"dist":{"shasum":"3cc4ca006afcb8b6e60ecd83d7d129b6e4d54a62","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.1.0.tgz","fileCount":53,"integrity":"sha512-LSZXBgynLDP6Q56SetYvwqoPb4rCPdbSCwXFn6ozsan3r36uv64OEi+yeduOH8cM4wj6TFj1qkti+f/GlikiVQ==","signatures":[{"sig":"MEUCIQCdozo2zlp30JfRRF5PJZBvod+ajQjhqfB/usWIRbtjAQIgPI2+cdtTQTYlZjEm8U/iUKMrdm8/IM94WaCpISZmjlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131375},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"f25fac3972261c7946d476b3725444b005d946d6","scripts":{"dev":"bun build src/index.ts --outdir dist --target node --format esm --watch","lint":"eslint src/**/*.ts","test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --target node --format esm && tsc --emitDeclarationOnly --declaration --declarationMap --outDir dist","lint:fix":"eslint src/**/*.ts --fix","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"repository":{"url":"git+https://github.com/gemini/gemini-wallet-core.git","type":"git"},"_npmVersion":"11.1.0","description":"Core SDK for Gemini Wallet integration with popup communication","directories":{},"_nodeVersion":"23.3.0","dependencies":{"eventemitter3":"5.0.1","@metamask/rpc-errors":"7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":">=9.27.0","globals":"^16.3.0","prettier":"^3.6.2","@eslint/js":"^9.33.0","typescript":"^5.5.3","@types/node":"^20.14.9","typescript-eslint":"^8.39.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.39.0","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.39.0","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"viem":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1754692346712_0.3868382712035774","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@gemini-wallet/core","version":"0.1.1","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"author":{"name":"Gemini"},"license":"MIT","_id":"@gemini-wallet/core@0.1.1","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"homepage":"https://github.com/gemini/gemini-wallet-core","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"dist":{"shasum":"b191fec04c8c45d89eebec909b9ff58f520fba8a","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.1.1.tgz","fileCount":53,"integrity":"sha512-97Ktv+vZszADHdu6hS/B5tRfOqebwGNyD2Pfvmo1kK8d54UsNZtC22D8LJEueXqgVbq5PeSn0jv88uav3t1fHg==","signatures":[{"sig":"MEUCIGfwKuH2qQAWCC9pu7RwRAr40iFZ70aMDCnhUSw1QkCsAiEAqD/Bi3um8Z+LJex5quz/230Lkb4WXI7imp04qvfNrts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132182},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"f25fac3972261c7946d476b3725444b005d946d6","scripts":{"dev":"bun build src/index.ts --outdir dist --target node --format esm --watch","lint":"eslint src/**/*.ts","test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --target node --format esm && tsc --emitDeclarationOnly --declaration --declarationMap --outDir dist","lint:fix":"eslint src/**/*.ts --fix","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"repository":{"url":"git+https://github.com/gemini/gemini-wallet-core.git","type":"git"},"_npmVersion":"11.1.0","description":"Core SDK for Gemini Wallet integration with popup communication","directories":{},"_nodeVersion":"23.3.0","dependencies":{"eventemitter3":"5.0.1","@metamask/rpc-errors":"7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":">=9.27.0","globals":"^16.3.0","prettier":"^3.6.2","@eslint/js":"^9.33.0","typescript":"^5.5.3","@types/node":"^20.14.9","typescript-eslint":"^8.39.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.39.0","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.39.0","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"viem":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.1_1754693559164_0.026240000361173133","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@gemini-wallet/core","version":"0.2.0","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"author":{"name":"Gemini"},"license":"MIT","_id":"@gemini-wallet/core@0.2.0","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"homepage":"https://github.com/gemini/gemini-wallet-core","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"dist":{"shasum":"6d7c82614d811f7f23b4018808684a39e0dd111f","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.2.0.tgz","fileCount":61,"integrity":"sha512-vv9aozWnKrrPWQ3vIFcWk7yta4hQW1Ie0fsNNPeXnjAxkbXr2hqMagEptLuMxpEP2W3mnRu05VDNKzcvAuuZDw==","signatures":[{"sig":"MEQCIFsg41IToTyYVkFBIO0T58v8X3UhjlCgep5phvUdys8sAiAPK3ITPK9WNwT6CfKjiJnx3uyluQq4p0JGQqxRxCqLqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285371},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"045b48254b0e0d694cc7b73fe1823a24584e7c20","scripts":{"dev":"bun build src/index.ts --outdir dist --target node --format esm --watch","lint":"eslint src/**/*.ts","test":"bun test","build":"rm -rf dist && bun build src/index.ts --outdir dist --target node --format esm && tsc --emitDeclarationOnly --declaration --declarationMap --outDir dist","lint:fix":"eslint src/**/*.ts --fix","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"repository":{"url":"git+https://github.com/gemini/gemini-wallet-core.git","type":"git"},"_npmVersion":"11.1.0","description":"Core SDK for Gemini Wallet integration with popup communication","directories":{},"_nodeVersion":"23.3.0","dependencies":{"eventemitter3":"5.0.1","@metamask/rpc-errors":"7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":">=9.27.0","globals":"^16.3.0","prettier":"^3.6.2","@eslint/js":"^9.33.0","typescript":"^5.5.3","@types/node":"^20.14.9","typescript-eslint":"^8.39.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.39.0","eslint-plugin-sort-keys-fix":"^1.1.2","@typescript-eslint/eslint-plugin":"^8.39.0","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"viem":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1755021492648_0.962282214736607","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@gemini-wallet/core","version":"0.3.0","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"author":{"name":"Gemini"},"license":"MIT","_id":"@gemini-wallet/core@0.3.0","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"homepage":"https://keys.gemini.com","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"dist":{"shasum":"7868149b39cf168e18f19397d4b79659e5f2f0da","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.3.0.tgz","fileCount":73,"integrity":"sha512-zmjYC+80o7HqqosJapCXyo2LGfLsEMS4kANdv67r7SdCJDj/j9JbbHcBRm8T+IebyfrcIsUSeCYlLshKt8piwA==","signatures":[{"sig":"MEUCIQCuB4s/ZmrS19Sb90dHIWXgxKarYo7/Fe2uaEBT+Y/iKwIgQ87Fjdc6BxQq6nuan51aNrYmEPIP3dzXBNPG7xOdiyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405722},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"dfdb22b3d7b25da108a2811a0404e2da06968a53","scripts":{"dev":"bun build src/index.ts --outdir dist --target node --format esm --watch","lint":"eslint src/**/*.ts","test":"bun test","build":"bun run build.config.ts","lint:fix":"eslint src/**/*.ts --fix","typecheck":"tsc --noEmit","build:prod":"NODE_ENV=production bun run build.config.ts --production"},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"repository":{"url":"git+https://github.com/gemini/gemini-wallet-core.git","type":"git"},"_npmVersion":"10.9.2","description":"Core SDK for Gemini Wallet integration with popup communication","directories":{},"_nodeVersion":"22.13.1","dependencies":{"eventemitter3":"5.0.1","@metamask/rpc-errors":"7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.33.0","typescript":"^5.5.3","@types/node":"^20.14.9","@gemini-wallet/eslint-config":"workspace:*"},"peerDependencies":{"viem":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1757433819419_0.8630449638404445","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@gemini-wallet/core","version":"0.3.1","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"author":{"name":"Gemini"},"license":"MIT","_id":"@gemini-wallet/core@0.3.1","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"homepage":"https://keys.gemini.com","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"dist":{"shasum":"3a990b7d35cdb42c9a27b58853c4fa60f9a3ecbd","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.3.1.tgz","fileCount":39,"integrity":"sha512-XP+/NRAaRV7Adlt6aFxrF/3a0i3qpxFTSVm/dzG+mceXTSgIGOUUT65w69ttLQ/GWEcAEQL/hKoV6PFAJA/DmQ==","signatures":[{"sig":"MEQCIHuzQup0yjO0oQf8Q5ACGQt05t/yEQjuGpRgTF/adxUEAiAmWANn1fzp7uU3+xV7Lqxj/z0vLqx1ipQEwttbqmKWRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gemini-wallet%2fcore@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":390178},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"49b12d779dce509d16b5131ce1f0fdbc9c991a0e","scripts":{"dev":"dotenv -e .env.local -- tsup --watch","lint":"eslint ./src","test":"bun test","build":"dotenv -e .env.production -- tsup","lint:ci":"eslint --max-warnings 0 ./src","lint:fix":"eslint ./src --fix","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"repository":{"url":"git+https://github.com/gemini/gemini-wallet-core.git","type":"git"},"_npmVersion":"10.9.2","description":"Core SDK for Gemini Wallet integration with popup communication","directories":{},"_nodeVersion":"22.13.1","dependencies":{"eventemitter3":"5.0.1","@metamask/rpc-errors":"7.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","eslint":"9.33.0","vitest":"3.2.4","globals":"16.3.0","prettier":"3.6.2","@eslint/js":"9.33.0","dotenv-cli":"10.0.0","typescript":"5.5.3","@types/node":"22.13.0","@eslint/eslintrc":"3.3.1","typescript-eslint":"8.40.0","eslint-config-turbo":"2.5.6","eslint-plugin-react":"7.37.5","eslint-plugin-import":"2.32.0","esbuild-plugin-replace":"1.4.0","eslint-config-prettier":"10.1.8","eslint-plugin-jsx-a11y":"6.10.2","eslint-plugin-prettier":"5.5.4","eslint-plugin-only-warn":"1.1.0","@next/eslint-plugin-next":"15.4.7","eslint-plugin-react-hooks":"5.2.0","eslint-plugin-sort-keys-fix":"1.1.2","eslint-plugin-simple-import-sort":"12.1.1"},"peerDependencies":{"viem":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.1_1761250429476_0.4806023978280751","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@gemini-wallet/core","version":"0.3.2","description":"Core SDK for Gemini Wallet integration with popup communication","main":"./dist/index.cjs","types":"./dist/index.d.ts","type":"module","repository":{"type":"git","url":"git+https://github.com/gemini/gemini-wallet-core.git"},"homepage":"https://keys.gemini.com","bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"license":"MIT","author":{"name":"Gemini"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"build":"dotenv -e .env.production -- tsup","dev":"dotenv -e .env.local -- tsup --watch","typecheck":"tsc --noEmit","lint":"eslint ./src","lint:ci":"eslint --max-warnings 0 ./src","lint:fix":"eslint ./src --fix","test":"bun test"},"dependencies":{"@metamask/rpc-errors":"7.0.2","eventemitter3":"5.0.1"},"devDependencies":{"@eslint/eslintrc":"3.3.1","@eslint/js":"9.38.0","@types/node":"22.13.0","dotenv-cli":"10.0.0","esbuild-plugin-replace":"1.4.0","eslint":"9.38.0","eslint-config-prettier":"10.1.8","eslint-config-turbo":"2.5.6","eslint-plugin-import":"2.32.0","eslint-plugin-only-warn":"1.1.0","eslint-plugin-prettier":"5.5.4","eslint-plugin-simple-import-sort":"12.1.1","eslint-plugin-sort-keys-fix":"1.1.2","globals":"16.4.0","prettier":"3.6.2","tsup":"8.5.0","typescript":"5.5.3","typescript-eslint":"8.40.0","vitest":"3.2.4"},"peerDependencies":{"viem":">=2.0.0"},"keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"module":"./dist/index.js","_id":"@gemini-wallet/core@0.3.2","gitHead":"26f05badfe4c1e57eb173c38bd93afd4c623ee85","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Z4aHi3ECFf5oWYWM3F1rW83GJfB9OvhBYPTmb5q+VyK3uvzvS48lwo+jwh2eOoCRWEuT/crpb9Vwp2QaS5JqgQ==","shasum":"fd6fd2df91d50be6c1a832c46379453e933a352e","tarball":"https://registry.npmjs.org/@gemini-wallet/core/-/core-0.3.2.tgz","fileCount":39,"unpackedSize":446620,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gemini-wallet%2fcore@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDEJgxVhrZwGrA2ADsH0DdtyqOcJKqZa6UB+HCPAE32eAiAd1pdqP1LsfJ/l+ntkcLYGSCEDK//1+XqOi62aa7JCtw=="}]},"_npmUser":{"name":"mikelxc","email":"mike000708@me.com"},"directories":{},"maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.3.2_1762792267761_0.3549454139360426"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-15T14:44:14.729Z","modified":"2025-11-10T16:31:08.457Z","0.0.1":"2025-07-15T14:44:15.092Z","0.1.0":"2025-08-08T22:32:26.920Z","0.1.1":"2025-08-08T22:52:39.381Z","0.2.0":"2025-08-12T17:58:12.901Z","0.3.0":"2025-09-09T16:03:39.589Z","0.3.1":"2025-10-23T20:13:49.694Z","0.3.2":"2025-11-10T16:31:07.979Z"},"bugs":{"url":"https://github.com/gemini/gemini-wallet-core/issues"},"author":{"name":"Gemini"},"license":"MIT","homepage":"https://keys.gemini.com","keywords":["gemini","wallet","sdk","ethereum","web3","crypto"],"repository":{"type":"git","url":"git+https://github.com/gemini/gemini-wallet-core.git"},"description":"Core SDK for Gemini Wallet integration with popup communication","maintainers":[{"name":"mikelxc","email":"mike000708@me.com"},{"name":"schnogz","email":"andrew.mark.schneider@gmail.com"},{"name":"fuller-gemini","email":"andrew.fuller@gemini.com"}],"readme":"# @gemini-wallet/core\n\nComplete SDK for integrating with Gemini Wallet, providing wallet connection, transaction signing, and EVM provider functionality.\n\n## Overview\n\n`@gemini-wallet/core` is a comprehensive wallet SDK that provides everything needed to integrate Gemini Wallet into your application. It includes a complete EVM-compatible provider, wallet connection management, secure storage, and seamless popup-based user interactions.\n\n## Features\n\n- 🔗 **EVM Provider**: Complete Ethereum provider implementation (EIP-1193 compatible)\n- 🔒 **Secure Communication**: PostMessage-based cross-origin communication\n- 🪟 **Popup Management**: Automatic popup window lifecycle management\n- 💾 **Storage Layer**: Persistent storage with localStorage fallback\n- 🔄 **Event-Driven**: Promise-based request/response pattern with event emitters\n- ⛓️ **Multi-Chain**: Support for Ethereum, Polygon, Base, Arbitrum, and testnets\n- 🖊️ **Sign Operations**: Message signing and EIP-712 typed data signing\n- 💸 **Transaction Support**: Send transactions with built-in error handling\n- 🌐 **Cross-Platform**: Works in web browsers and React Native\n- ⚡ **Lightweight**: Minimal dependencies for optimal bundle size\n\n## Installation\n\n```bash\nbun add @gemini-wallet/core\n# or\nnpm install @gemini-wallet/core\n# or\nyarn add @gemini-wallet/core\n# or\npnpm add @gemini-wallet/core\n```\n\n## ⚠️ YOU MIGHT NOT NEED THIS\n\n**For most applications, you should use Wagmi's built-in Gemini connector instead:**\n\n```typescript\nimport { gemini } from \"wagmi/connectors\";\nimport { createConfig } from \"wagmi\";\n\nconst config = createConfig({\n  connectors: [\n    gemini({\n      appMetadata: {\n        name: \"My DApp\",\n        url: \"https://mydapp.com\",\n        icon: \"https://mydapp.com/icon.png\",\n      },\n    }),\n  ],\n  // ... rest of wagmi config\n});\n```\n\n> 🎯 **Wagmi Integration**: Gemini Wallet is available as a default connector in wagmi@2.16.3+ & @wagmi/connectors@5.9.3+\n> 📚 **Wagmi Docs**: [https://wagmi.sh/core/api/connectors/gemini](https://wagmi.sh/core/api/connectors/gemini)  \n> ⭐ **Status**: Readily available\n\n## Usage\n\nThis core SDK provides multiple integration levels for advanced use cases:\n\n### 🚀 Level 1: EVM Provider (Recommended for Custom Implementations)\n\nUse when you need direct provider access or aren't using Wagmi:\n\n```typescript\nimport { GeminiWalletProvider } from \"@gemini-wallet/core\";\n\nconst provider = new GeminiWalletProvider({\n  appMetadata: {\n    name: \"My DApp\",\n    url: \"https://mydapp.com\",\n    icon: \"https://mydapp.com/icon.png\",\n  },\n  chain: { id: 42161 }, // Arbitrum One\n});\n\n// Connect and get accounts\nconst accounts = await provider.request({\n  method: \"eth_requestAccounts\",\n});\n\n// Send transaction\nconst txHash = await provider.request({\n  method: \"eth_sendTransaction\",\n  params: [\n    {\n      from: accounts[0],\n      to: \"0x742E4C3B7dcD26e7Ca95C0Ad2F38C61f6F02C4c0\",\n      value: \"0x38D7EA4C68000\", // 0.001 ETH\n    },\n  ],\n});\n\n// Listen for events\nprovider.on(\"accountsChanged\", (accounts) => {\n  console.log(\"Accounts changed:\", accounts);\n});\n```\n\n### ⚡ Level 2: Direct Wallet API\n\nUse the wallet class for fine-grained control:\n\n```typescript\nimport { GeminiWallet } from \"@gemini-wallet/core\";\n\nconst wallet = new GeminiWallet({\n  appMetadata: {\n    name: \"My DApp\",\n    url: \"https://mydapp.com\",\n    icon: \"https://mydapp.com/icon.png\",\n  },\n  chain: { id: 42161 },\n});\n\n// Connect\nconst accounts = await wallet.connect();\n\n// Send transaction with error handling\nconst result = await wallet.sendTransaction({\n  to: \"0x742E4C3B7dcD26e7Ca95C0Ad2F38C61f6F02C4c0\",\n  value: \"1000000000000000000\", // 1 ETH in wei\n});\n\nif (result.error) {\n  console.error(\"Transaction failed:\", result.error);\n} else {\n  console.log(\"Transaction hash:\", result.hash);\n}\n```\n\n### ⚙️ Level 3: Low-Level Communication\n\nFor maximum control over the popup communication:\n\n```typescript\nimport { Communicator, GeminiSdkEvent } from \"@gemini-wallet/core\";\n\nconst communicator = new Communicator({\n  appMetadata: {\n    name: \"My DApp\",\n    url: \"https://mydapp.com\",\n    icon: \"https://mydapp.com/icon.png\",\n  },\n});\n\n// Send connect request\nconst response = await communicator.postRequestAndWaitForResponse({\n  event: GeminiSdkEvent.SDK_CONNECT,\n  requestId: crypto.randomUUID(),\n  chainId: 42161,\n  origin: window.location.origin,\n});\n\nconsole.log(\"Connected address:\", response.data.address);\n\n// Listen for specific events\ncommunicator\n  .onMessage((message) => message.event === GeminiSdkEvent.SDK_DISCONNECT)\n  .then(() => {\n    console.log(\"User disconnected\");\n  });\n```\n\n## API Reference\n\n### GeminiWalletProvider\n\nEIP-1193 compatible Ethereum provider implementation.\n\n```typescript\ninterface GeminiProviderConfig {\n  appMetadata: AppMetadata;\n  chain: Chain;\n  onDisconnectCallback?: () => void;\n  storage?: IStorage;\n}\n```\n\n#### Methods\n\n- `request<T>(args: RpcRequestArgs): Promise<T>` - Send RPC requests\n- `disconnect(): Promise<void>` - Disconnect wallet\n- `openSettings(): Promise<void>` - Open wallet settings\n\n#### Events\n\n- `accountsChanged` - Emitted when accounts change\n- `chainChanged` - Emitted when chain changes\n- `connect` - Emitted on connection\n- `disconnect` - Emitted on disconnection\n\n### GeminiWallet\n\nDirect wallet interface for advanced use cases.\n\n```typescript\ninterface GeminiWalletConfig {\n  appMetadata: AppMetadata;\n  chain?: Chain;\n  onDisconnectCallback?: () => void;\n  storage?: IStorage;\n}\n```\n\n#### Methods\n\n- `connect(): Promise<Address[]>` - Connect to wallet\n- `sendTransaction(tx: TransactionRequest): Promise<SendTransactionResponse>` - Send transaction\n- `signData(params: SignMessageParameters): Promise<SignMessageResponse>` - Sign message\n- `signTypedData(params: SignTypedDataParameters): Promise<SignTypedDataResponse>` - Sign typed data\n- `switchChain(params: SwitchChainParameters): Promise<string | null>` - Switch chains\n- `openSettings(): Promise<void>` - Open wallet settings\n\n### GeminiStorage\n\nStorage interface for persisting wallet state.\n\n```typescript\ninterface IStorage {\n  setItem(key: string, value: string): Promise<void>;\n  getItem(key: string): Promise<string | null>;\n  removeItem(key: string): Promise<void>;\n  storeObject<T>(key: string, item: T): Promise<void>;\n  loadObject<T>(key: string, fallback: T): Promise<T>;\n}\n```\n\n### Communicator\n\nLow-level communication class.\n\n```typescript\ninterface CommunicatorConfigParams {\n  appMetadata: AppMetadata;\n  onDisconnectCallback?: () => void;\n}\n```\n\n#### Methods\n\n- `postMessage(message: GeminiSdkMessage): Promise<void>` - Send message\n- `postRequestAndWaitForResponse<M, R>(request: GeminiSdkMessage): Promise<R>` - Send request and wait\n- `onMessage<M, R>(predicate: (message: Partial<M>) => boolean): Promise<R>` - Listen for messages\n- `waitForPopupLoaded(): Promise<Window>` - Wait for popup to load\n\n### Message Types\n\n#### GeminiSdkEvent\n\nEnumeration of all supported events:\n\n- `POPUP_LOADED` - Popup window has loaded\n- `POPUP_UNLOADED` - Popup window was closed\n- `POPUP_APP_CONTEXT` - App metadata sent to popup\n- `SDK_CONNECT` - Connect wallet request\n- `SDK_DISCONNECT` - Disconnect wallet request\n- `SDK_SEND_TRANSACTION` - Send transaction request\n- `SDK_SIGN_MESSAGE` - Sign message request\n- `SDK_SIGN_TYPED_DATA` - Sign typed data request\n- `SDK_SWITCH_CHAIN` - Switch chain request\n- `ACCOUNTS_CHANGED` - Accounts changed event\n- `CHAIN_CHANGED` - Chain changed event\n- `DISCONNECT` - Disconnect event\n\n### Supported Chains\n\nGemini Wallet supports the following networks:\n\n**Mainnets:**\n\n- Ethereum (1)\n- Arbitrum One (42161) - Default\n- OP Mainnet (10)\n- Base (8453)\n- Polygon (137)\n\n**Testnets:**\n\n- Sepolia (11155111)\n- Arbitrum Sepolia (421614)\n- OP Sepolia (11155420)\n- Base Sepolia (84532)\n- Polygon Amoy (80002)\n\n### Constants\n\n- `SDK_BACKEND_URL`: `\"https://keys.gemini.com\"`\n- `DEFAULT_CHAIN_ID`: `42161` (Arbitrum One)\n- `SUPPORTED_CHAIN_IDS`: Array of supported chain IDs\n- `POPUP_WIDTH`: `420`\n- `POPUP_HEIGHT`: `650`\n\n## Security Considerations\n\n1. **Origin Validation**: All messages are validated against the expected origin\n2. **Request ID Matching**: Responses are matched to requests using unique IDs\n3. **User Consent**: All actions require explicit user approval in the popup\n4. **No Private Keys**: The SDK never handles private keys directly\n\n## Browser Support\n\n- Chrome/Edge 80+\n- Firefox 78+\n- Safari 14+\n- Opera 67+\n\n## Try Gemini Wallet\n\nExperience Gemini Wallet in action:\n\n🔗 **[keys.gemini.com](https://keys.gemini.com)** - Try the wallet interface and see how the SDK integrations work\n\n## Integration Examples\n\nThe core SDK enables various integration patterns:\n\n- ✅ EIP-1193 compatible provider for any web3 library\n- ✅ Custom storage implementations for mobile platforms\n- ✅ Event-driven architecture with TypeScript support\n- ✅ Multi-chain support with automatic chain switching\n- ✅ Error handling with user-friendly error messages\n\n## Development\n\nThis project uses [Bun](https://bun.sh) as the package manager and build tool.\n\n### Setup\n\n```bash\n# Install dependencies\nbun install\n\n# Run tests\nbun test\n\n# Run tests in watch mode\nbun test --watch\n\n# Type checking\nbun run typecheck\n\n# Build the package\nbun run build\n\n# Development mode (watch mode)\nbun run dev\n```\n\n### Available Scripts\n\n- `bun run build` - Build the package for production\n- `bun run dev` - Build in watch mode for development\n- `bun run test` - Run tests\n- `bun run test:watch` - Run tests in watch mode\n- `bun run typecheck` - Run TypeScript type checking\n- `bun run lint` - Run ESLint (requires configuration)\n- `bun run lint:fix` - Fix ESLint issues automatically\n\n### Build Output\n\nThe build process generates:\n\n- `dist/index.js` - ESM bundle for Node.js\n- `dist/index.d.ts` - TypeScript declarations\n- `dist/*.d.ts.map` - Source maps for declarations\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","readmeFilename":"README.md"}