From 987e0ae4b03a8deafe007798338ec4bccc80a295 Mon Sep 17 00:00:00 2001
From: raul-oliveira
Date: Mon, 25 May 2026 13:50:49 -0300
Subject: [PATCH] =?UTF-8?q?feat:=20Web3Auth=20social=20login=20(Google=20+?=
=?UTF-8?q?=20Apple)=20=E2=80=94=20single-key=20wallet?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Adds a third option on Welcome → WalletType ("Sign in with social") that
bootstraps a single-key Hathor wallet from a Web3Auth-derived private key,
delegating OAuth + mandatory MFA to the Web3Auth-hosted webview opened in
an Electron BrowserWindow popup.
Scope (PR1 of three):
- Web3Auth no-modal SDK + auth-adapter, lazy singleton in sagas/web3auth.js.
- Network-aware config (testnet Sapphire Devnet today; mainnet placeholder).
- Reuses the Hathor custom verifier (hathor-google) so the derived key is
the same across desktop and mobile. Apple gated on appleClientId.
- New Web3AuthLogin screen (Google + Apple + Email cards; Email inert until
the JWT verifier ships in PR3).
- ChoosePin (Signin) Web3Auth branch persists encrypted privateKey via
LOCAL_STORE.initWeb3AuthStorage; subsequent unlocks are PIN-only.
- startWallet saga branch constructs HathorWallet({privateKey, scanPolicy:
SINGLE_ADDRESS}), forces useWalletService=false, registers external
signer.
- LockedWallet, reset, Reown, Navigation, Settings, WalletAddress gated on
isSingleKeyWallet selector so single-key UI invariants hold.
- Web3AuthErrorDialog classifies SDK errors into 7 buckets with localized
copy and a Try-again affordance.
- Electron main process whitelists Web3Auth + Google + Apple OAuth hosts via
setWindowOpenHandler with sandboxed contextIsolation partition.
- Webpack node:crypto + webcrypto polyfill (NodeProtocolUrlPlugin + custom
ESM crypto shim) — required by the Web3Auth SDK chain.
- Gated by web3auth-desktop.rollout Unleash flag, default false.
- QA scenarios documented in qa/QA.md (10 cases).
Wallet-lib: this PR currently consumes @hathor/wallet-lib via yalc from
HathorNetwork/hathor-wallet-lib#1093. It MUST switch to the published
@hathor/wallet-lib@^3.2.0 before merge.
Spec: docs/superpowers/specs/2026-05-22-web3auth-desktop-design.md
Plan: docs/superpowers/plans/2026-05-22-web3auth-pr1-google-apple-login.md
---
config-overrides.js | 12 +-
lavamoat/webpack/policy.json | 696 ++++-
locale/texts.pot | 423 +++-
package-lock.json | 2931 +++++++++++++++++-----
package.json | 6 +-
public/electron.js | 27 +
qa/QA.md | 98 +
src/App.js | 12 +
src/actions/index.js | 25 +
src/assets/web3auth-providers/apple.svg | 3 +
src/assets/web3auth-providers/email.svg | 3 +
src/assets/web3auth-providers/google.svg | 6 +
src/components/Navigation.js | 10 +-
src/components/WalletAddress.js | 10 +-
src/components/Web3AuthErrorDialog.js | 124 +
src/constants.js | 36 +
src/index.module.scss | 2 +
src/reducers/index.js | 17 +
src/sagas/reown.js | 4 +
src/sagas/wallet.js | 133 +-
src/sagas/web3auth.js | 257 ++
src/screens/LockedWallet.js | 10 +-
src/screens/Settings.js | 12 +-
src/screens/Signin.js | 98 +-
src/screens/WalletType.js | 18 +-
src/screens/Web3AuthLogin.js | 146 ++
src/screens/Web3AuthRecovery.js | 33 +
src/storage.js | 65 +-
src/styles/web3auth.scss | 77 +
src/web3auth-crypto-shim.js | 74 +
30 files changed, 4574 insertions(+), 794 deletions(-)
create mode 100644 qa/QA.md
create mode 100644 src/assets/web3auth-providers/apple.svg
create mode 100644 src/assets/web3auth-providers/email.svg
create mode 100644 src/assets/web3auth-providers/google.svg
create mode 100644 src/components/Web3AuthErrorDialog.js
create mode 100644 src/sagas/web3auth.js
create mode 100644 src/screens/Web3AuthLogin.js
create mode 100644 src/screens/Web3AuthRecovery.js
create mode 100644 src/styles/web3auth.scss
create mode 100644 src/web3auth-crypto-shim.js
diff --git a/config-overrides.js b/config-overrides.js
index 3a5f58bc2..3cf3ce1e7 100644
--- a/config-overrides.js
+++ b/config-overrides.js
@@ -9,6 +9,7 @@ const webpack = require('webpack');
const LavaMoatPlugin = require('@lavamoat/webpack')
const path = require('path');
const stdLibBrowser = require('node-stdlib-browser');
+const { NodeProtocolUrlPlugin } = require('node-stdlib-browser/helpers/webpack/plugin');
module.exports = function override(config, env) {
// Enable source maps for better debugging
@@ -34,7 +35,9 @@ module.exports = function override(config, env) {
fallback: {
buffer: require.resolve('buffer/'),
assert: stdLibBrowser.assert,
- crypto: stdLibBrowser.crypto,
+ // Custom shim that wraps crypto-browserify and adds the `webcrypto`
+ // export required by the Web3Auth SDK. See src/web3auth-crypto-shim.js.
+ crypto: path.resolve(__dirname, 'src/web3auth-crypto-shim.js'),
path: stdLibBrowser.path,
process: stdLibBrowser.process,
stream: stdLibBrowser.stream,
@@ -136,7 +139,12 @@ module.exports = function override(config, env) {
new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
process: stdLibBrowser.process
- })
+ }),
+ // Strip the `node:` scheme prefix from imports (e.g. `node:crypto` ->
+ // `crypto`) so the existing browser fallbacks above resolve.
+ // Required by the Web3Auth SDK (see sagas/web3auth.js) which uses the
+ // `node:` scheme for Node.js built-ins.
+ NodeProtocolUrlPlugin()
];
// Only add LavaMoat in production because LavaMoat does not work with the
diff --git a/lavamoat/webpack/policy.json b/lavamoat/webpack/policy.json
index 77651a9f5..8b1c97c47 100644
--- a/lavamoat/webpack/policy.json
+++ b/lavamoat/webpack/policy.json
@@ -1,5 +1,18 @@
{
"resources": {
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>@ethereumjs/rlp": {
+ "globals": {
+ "TextEncoder": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>@ethereumjs/rlp": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography": true,
+ "@walletconnect/core>events": true
+ }
+ },
"@walletconnect/utils>@ethersproject/hash>@ethersproject/address": {
"packages": {
"@walletconnect/utils>@ethersproject/hash>@ethersproject/bignumber": true,
@@ -93,6 +106,7 @@
"setTimeout": true
},
"packages": {
+ "$root$": true,
"react-redux>@babel/runtime": true,
"node-stdlib-browser>assert": true,
"axios": true,
@@ -100,7 +114,6 @@
"@hathor/wallet-lib>bitcore-mnemonic": true,
"node-stdlib-browser>browserify-zlib": true,
"buffer": true,
- "node-stdlib-browser>crypto-browserify": true,
"@hathor/wallet-lib>crypto-js": true,
"@walletconnect/core>events": true,
"@hathor/wallet-lib>isomorphic-ws": true,
@@ -124,6 +137,7 @@
"setTimeout": true
},
"packages": {
+ "$root$": true,
"react-redux>@babel/runtime": true,
"node-stdlib-browser>assert": true,
"axios": true,
@@ -131,7 +145,6 @@
"@hathor/wallet-lib>bitcore-mnemonic": true,
"node-stdlib-browser>browserify-zlib": true,
"buffer": true,
- "node-stdlib-browser>crypto-browserify": true,
"@hathor/wallet-lib>crypto-js": true,
"@walletconnect/core>events": true,
"@hathor/wallet-lib>isomorphic-ws": true,
@@ -141,6 +154,28 @@
"@hathor/wallet-lib>zod": true
}
},
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography>@noble/curves": {
+ "globals": {
+ "TextEncoder": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography>@noble/curves>@noble/hashes": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography>@noble/curves>@noble/hashes": {
+ "globals": {
+ "TextEncoder": true
+ },
+ "packages": {
+ "$root$": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography>@noble/hashes": {
+ "globals": {
+ "TextEncoder": true
+ }
+ },
"redux-saga>@redux-saga/core": {
"globals": {
"console.error": true,
@@ -559,6 +594,344 @@
"@walletconnect/utils>@stablelib/hkdf>@stablelib/wipe": true
}
},
+ "@web3auth/base>@toruslabs/base-controllers": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>@web3auth/auth": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers": {
+ "globals": {
+ "Buffer.from": true,
+ "Response": true,
+ "URL": true,
+ "URLSearchParams": true,
+ "clearInterval": true,
+ "clearTimeout": true,
+ "close": true,
+ "document.documentElement.clientHeight": true,
+ "document.documentElement.clientWidth": true,
+ "fetch": true,
+ "innerHeight": true,
+ "innerWidth": true,
+ "location": true,
+ "navigator": true,
+ "open": true,
+ "screen.height": true,
+ "screen.width": true,
+ "screenLeft": true,
+ "screenTop": true,
+ "screenX": true,
+ "screenY": true,
+ "setInterval": true,
+ "setTimeout": true,
+ "structuredClone": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util": true,
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel": true,
+ "@web3auth/no-modal>@web3auth/base>@toruslabs/http-helpers": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-utils": true,
+ "@web3auth/base>@toruslabs/base-controllers>bignumber.js": true,
+ "@web3auth/base>@web3auth/auth>bowser": true,
+ "buffer": true,
+ "@web3auth/base>jwt-decode": true,
+ "@web3auth/base>loglevel": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/base-session-manager": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/base-session-manager>@toruslabs/http-helpers": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel": {
+ "globals": {
+ "BroadcastChannel": true,
+ "Buffer.from": true,
+ "IDBKeyRange.bound": true,
+ "addEventListener": true,
+ "dispatchEvent": true,
+ "document": true,
+ "fetch": true,
+ "indexedDB": true,
+ "localStorage": true,
+ "mozIndexedDB": true,
+ "msIndexedDB": true,
+ "navigator.userAgent.toLowerCase": true,
+ "removeEventListener": true,
+ "setTimeout": true,
+ "webkitIndexedDB": true
+ },
+ "packages": {
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel>@toruslabs/metadata-helpers": true,
+ "buffer": true,
+ "@web3auth/base>loglevel": true,
+ "@web3auth/base>@toruslabs/base-controllers>@toruslabs/broadcast-channel>oblivious-set": true,
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel>@toruslabs/eccrypto": {
+ "globals": {
+ "Buffer.alloc": true,
+ "Buffer.concat": true,
+ "Buffer.from": true,
+ "Buffer.isBuffer": true,
+ "crypto": true,
+ "msCrypto": true
+ },
+ "packages": {
+ "$root$": true,
+ "buffer": true,
+ "@walletconnect/utils>elliptic": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/eccrypto": {
+ "globals": {
+ "Buffer.alloc": true,
+ "Buffer.concat": true,
+ "Buffer.from": true,
+ "Buffer.isBuffer": true,
+ "crypto": true,
+ "msCrypto": true
+ },
+ "packages": {
+ "$root$": true,
+ "buffer": true,
+ "@walletconnect/utils>elliptic": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/eccrypto": {
+ "globals": {
+ "Buffer.alloc": true,
+ "Buffer.concat": true,
+ "Buffer.from": true,
+ "Buffer.isBuffer": true,
+ "crypto": true,
+ "msCrypto": true
+ },
+ "packages": {
+ "$root$": true,
+ "buffer": true,
+ "@walletconnect/utils>elliptic": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/base-session-manager>@toruslabs/http-helpers": {
+ "globals": {
+ "URL": true,
+ "clearTimeout": true,
+ "fetch": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>lodash.merge": true,
+ "@web3auth/base>loglevel": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/metadata-helpers>@toruslabs/http-helpers": {
+ "globals": {
+ "URL": true,
+ "clearTimeout": true,
+ "fetch": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>lodash.merge": true,
+ "@web3auth/base>loglevel": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/secure-pub-sub>@toruslabs/http-helpers": {
+ "globals": {
+ "URL": true,
+ "clearTimeout": true,
+ "fetch": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>lodash.merge": true,
+ "@web3auth/base>loglevel": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base>@toruslabs/http-helpers": {
+ "globals": {
+ "URL": true,
+ "clearTimeout": true,
+ "fetch": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>lodash.merge": true,
+ "@web3auth/base>loglevel": true
+ }
+ },
+ "@web3auth/openlogin-adapter>@web3auth/base>@toruslabs/http-helpers": {
+ "globals": {
+ "URL": true,
+ "clearTimeout": true,
+ "fetch": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>lodash.merge": true,
+ "@web3auth/base>loglevel": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel>@toruslabs/metadata-helpers": {
+ "globals": {
+ "Buffer.from": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers>@toruslabs/broadcast-channel>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@web3auth/base>@toruslabs/http-helpers": true,
+ "buffer": true,
+ "@walletconnect/utils>elliptic": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography": true,
+ "@lavamoat/webpack>json-stable-stringify": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/metadata-helpers": {
+ "globals": {
+ "Buffer.from": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/metadata-helpers>@toruslabs/http-helpers": true,
+ "buffer": true,
+ "@walletconnect/utils>elliptic": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography": true,
+ "@lavamoat/webpack>json-stable-stringify": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/metadata-helpers": {
+ "globals": {
+ "Buffer.from": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/secure-pub-sub>@toruslabs/http-helpers": true,
+ "buffer": true,
+ "@walletconnect/utils>elliptic": true,
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography": true,
+ "@lavamoat/webpack>json-stable-stringify": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc": {
+ "globals": {
+ "addEventListener": true,
+ "console.error": true,
+ "console.warn": true,
+ "location.origin": true,
+ "removeEventListener": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>@web3auth/auth>end-of-stream": true,
+ "@walletconnect/core>events": true,
+ "@web3auth/base>@web3auth/auth>fast-safe-stringify": true,
+ "@web3auth/base>@web3auth/auth>once": true,
+ "@web3auth/base>@web3auth/auth>pump": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc>readable-stream": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager": {
+ "globals": {
+ "Buffer.from": true,
+ "URL": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/base-session-manager": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager>@toruslabs/metadata-helpers": true,
+ "buffer": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin-utils": {
+ "globals": {
+ "localStorage": true,
+ "sessionStorage": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-utils>@toruslabs/constants": true,
+ "@web3auth/base>@web3auth/auth>base64url": true,
+ "@web3auth/base>@web3auth/auth>color": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin": {
+ "globals": {
+ "Buffer.from": true,
+ "URL": true,
+ "URLSearchParams": true,
+ "clearInterval": true,
+ "console.log": true,
+ "document.documentElement.clientHeight": true,
+ "document.documentElement.clientWidth": true,
+ "history.replaceState": true,
+ "history.state": true,
+ "innerHeight": true,
+ "innerWidth": true,
+ "location.hash.substring": true,
+ "location.host": true,
+ "location.href": true,
+ "location.origin": true,
+ "location.pathname": true,
+ "location.protocol": true,
+ "location.replace": true,
+ "location.search.slice": true,
+ "navigator.userAgent": true,
+ "open": true,
+ "screen.height": true,
+ "screen.width": true,
+ "screenLeft": true,
+ "screenTop": true,
+ "screenX": true,
+ "screenY": true,
+ "setInterval": true,
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/constants": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/metadata-helpers": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/openlogin-session-manager": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-utils": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/secure-pub-sub": true,
+ "@web3auth/base>@web3auth/auth>bowser": true,
+ "buffer": true,
+ "@walletconnect/core>events": true,
+ "@web3auth/base>loglevel": true,
+ "@web3auth/base>ts-custom-error": true
+ }
+ },
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/secure-pub-sub": {
+ "globals": {
+ "Buffer.from": true,
+ "document": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/eccrypto": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/secure-pub-sub>@toruslabs/http-helpers": true,
+ "@web3auth/no-modal>@toruslabs/openlogin>@toruslabs/metadata-helpers": true,
+ "buffer": true,
+ "@web3auth/base>loglevel": true,
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client": true
+ }
+ },
"@walletconnect/core": {
"globals": {
"AbortController": true,
@@ -764,6 +1137,97 @@
"@walletconnect/core>@walletconnect/window-getters": true
}
},
+ "@web3auth/base>@web3auth/auth": {
+ "globals": {
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@walletconnect/core>events": true,
+ "@lavamoat/webpack>json-stable-stringify": true,
+ "@web3auth/base>loglevel": true,
+ "@web3auth/base>@web3auth/auth>readable-stream": true
+ }
+ },
+ "@web3auth/base": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>ts-custom-error": true
+ }
+ },
+ "@web3auth/base-provider": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/base>@toruslabs/base-controllers": true,
+ "@web3auth/base>@web3auth/auth": true,
+ "@web3auth/base": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base-provider": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@web3auth/base-provider>@toruslabs/base-controllers": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc": true,
+ "@web3auth/no-modal>@web3auth/base": true,
+ "@web3auth/base-provider>json-rpc-random-id": true
+ }
+ },
+ "@web3auth/no-modal>@web3auth/base": {
+ "globals": {
+ "URL": true,
+ "localStorage.getItem": true,
+ "localStorage.removeItem": true,
+ "localStorage.setItem": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@web3auth/base>@toruslabs/constants": true,
+ "@web3auth/no-modal>@web3auth/base>@toruslabs/http-helpers": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-utils": true,
+ "@web3auth/base>jwt-decode": true,
+ "@web3auth/base>loglevel": true,
+ "@web3auth/base>ts-custom-error": true
+ }
+ },
+ "@web3auth/openlogin-adapter>@web3auth/base": {
+ "globals": {
+ "URL": true,
+ "localStorage.getItem": true,
+ "localStorage.removeItem": true,
+ "localStorage.setItem": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/openlogin-adapter>@web3auth/base>@toruslabs/constants": true,
+ "@web3auth/openlogin-adapter>@web3auth/base>@toruslabs/http-helpers": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-utils": true,
+ "@web3auth/base>jwt-decode": true,
+ "@web3auth/base>loglevel": true,
+ "@web3auth/base>ts-custom-error": true
+ }
+ },
+ "@web3auth/no-modal": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc": true,
+ "@web3auth/no-modal>@web3auth/base-provider": true,
+ "@web3auth/no-modal>@web3auth/base": true,
+ "@web3auth/openlogin-adapter": true,
+ "@web3auth/no-modal>lodash.clonedeep": true,
+ "@web3auth/no-modal>lodash.merge": true
+ }
+ },
+ "@web3auth/openlogin-adapter": {
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-utils": true,
+ "@web3auth/no-modal>@toruslabs/openlogin": true,
+ "@web3auth/openlogin-adapter>@web3auth/base": true,
+ "@web3auth/no-modal>lodash.merge": true
+ }
+ },
"node-stdlib-browser>crypto-browserify>public-encrypt>parse-asn1>asn1.js": {
"packages": {
"@hathor/wallet-lib>bitcore-lib>bn.js": true,
@@ -824,6 +1288,21 @@
"cypress>@cypress/request>safe-buffer": true
}
},
+ "@web3auth/base>@web3auth/auth>base64url": {
+ "globals": {
+ "Buffer.alloc": true,
+ "Buffer.from": true,
+ "Buffer.isBuffer": true
+ },
+ "packages": {
+ "buffer": true
+ }
+ },
+ "@web3auth/base>@toruslabs/base-controllers>bignumber.js": {
+ "globals": {
+ "crypto": true
+ }
+ },
"@hathor/wallet-lib>bitcore-lib": {
"globals": {
"Buffer": true,
@@ -835,13 +1314,13 @@
"process.browser": true
},
"packages": {
+ "$root$": true,
"node-stdlib-browser>assert": true,
"@hathor/wallet-lib>bitcore-lib>bech32": true,
"@hathor/wallet-lib>bitcore-lib>bn.js": true,
"@hathor/wallet-lib>bitcore-lib>bs58": true,
"buffer": true,
"@hathor/wallet-lib>bitcore-lib>buffer-compare": true,
- "node-stdlib-browser>crypto-browserify": true,
"@walletconnect/utils>elliptic": true,
"@hathor/wallet-lib>bitcore-lib>inherits": true,
"cypress>lodash": true,
@@ -856,9 +1335,9 @@
"Buffer.isBuffer": true
},
"packages": {
+ "$root$": true,
"@hathor/wallet-lib>bitcore-lib": true,
"buffer": true,
- "node-stdlib-browser>crypto-browserify": true,
"@hathor/wallet-lib>bitcore-mnemonic>unorm": true
}
},
@@ -912,6 +1391,11 @@
"popper.js": true
}
},
+ "@web3auth/base>@web3auth/auth>bowser": {
+ "globals": {
+ "define": true
+ }
+ },
"@walletconnect/utils>elliptic>brorand": {
"globals": {
"crypto": true,
@@ -953,7 +1437,7 @@
"packages": {
"node-stdlib-browser>crypto-browserify>public-encrypt>browserify-rsa>bn.js": true,
"buffer": true,
- "node-stdlib-browser>crypto-browserify>randombytes": true
+ "ttag-cli>serialize-javascript>randombytes": true
}
},
"node-stdlib-browser>crypto-browserify>browserify-sign": {
@@ -1019,6 +1503,12 @@
"npm-run-all>string.prototype.padend>call-bind>set-function-length": true
}
},
+ "@lavamoat/webpack>json-stable-stringify>call-bound": {
+ "packages": {
+ "npm-run-all>string.prototype.padend>call-bind>call-bind-apply-helpers": true,
+ "eslint-plugin-react>array-includes>get-intrinsic": true
+ }
+ },
"node-stdlib-browser>crypto-browserify>create-hash>cipher-base": {
"packages": {
"@hathor/wallet-lib>bitcore-lib>inherits": true,
@@ -1089,7 +1579,7 @@
"node-stdlib-browser>crypto-browserify>diffie-hellman": true,
"node-stdlib-browser>crypto-browserify>pbkdf2": true,
"node-stdlib-browser>crypto-browserify>public-encrypt": true,
- "node-stdlib-browser>crypto-browserify>randombytes": true,
+ "ttag-cli>serialize-javascript>randombytes": true,
"node-stdlib-browser>crypto-browserify>randomfill": true
}
},
@@ -1100,6 +1590,19 @@
"msCrypto": true
}
},
+ "cypress>debug": {
+ "globals": {
+ "console": true,
+ "document": true,
+ "localStorage": true,
+ "navigator": true,
+ "process": true
+ },
+ "packages": {
+ "cypress>debug>ms": true,
+ "process": true
+ }
+ },
"npm-run-all>string.prototype.padend>define-properties>define-data-property": {
"packages": {
"npm-run-all>string.prototype.padend>call-bind>es-define-property": true,
@@ -1146,7 +1649,7 @@
"@hathor/wallet-lib>bitcore-lib>bn.js": true,
"buffer": true,
"node-stdlib-browser>crypto-browserify>diffie-hellman>miller-rabin": true,
- "node-stdlib-browser>crypto-browserify>randombytes": true
+ "ttag-cli>serialize-javascript>randombytes": true
}
},
"eslint-plugin-react>array-includes>get-intrinsic>get-proto>dunder-proto": {
@@ -1166,6 +1669,53 @@
"@walletconnect/utils>elliptic>minimalistic-crypto-utils": true
}
},
+ "@web3auth/base>@web3auth/auth>end-of-stream": {
+ "globals": {
+ "process.nextTick": true
+ },
+ "packages": {
+ "@web3auth/base>@web3auth/auth>once": true,
+ "process": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>engine.io-client": {
+ "globals": {
+ "Headers": true,
+ "WebTransport": true,
+ "XMLHttpRequest": true,
+ "addEventListener": true,
+ "attachEvent": true,
+ "document": true,
+ "fetch": true,
+ "location": true,
+ "navigator": true,
+ "removeEventListener": true
+ },
+ "packages": {
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>@socket.io/component-emitter": true,
+ "cypress>debug": true,
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>engine.io-client>engine.io-parser": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>engine.io-client>engine.io-parser": {
+ "globals": {
+ "Blob": true,
+ "FileReader": true,
+ "TextDecoder": true,
+ "TextEncoder": true,
+ "TransformStream": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography": {
+ "globals": {
+ "TextDecoder": true,
+ "crypto": true,
+ "module": true
+ },
+ "packages": {
+ "@web3auth/base>@web3auth/auth>@ethereumjs/util>ethereum-cryptography>@noble/hashes": true
+ }
+ },
"@walletconnect/core>events": {
"globals": {
"console": true
@@ -1213,7 +1763,7 @@
"npm-run-all>string.prototype.padend>call-bind>es-define-property": true
}
},
- "eslint-plugin-react>array-includes>is-string>has-tostringtag": {
+ "ttag-cli>koa>is-generator-function>has-tostringtag": {
"packages": {
"eslint-plugin-react>es-iterator-helpers>has-symbols": true
}
@@ -1264,7 +1814,7 @@
"node-stdlib-browser>util>is-arguments": {
"packages": {
"npm-run-all>string.prototype.padend>call-bind": true,
- "eslint-plugin-react>array-includes>is-string>has-tostringtag": true
+ "ttag-cli>koa>is-generator-function>has-tostringtag": true
}
},
"npm-run-all>string.prototype.padend>es-abstract>is-callable": {
@@ -1272,9 +1822,9 @@
"document": true
}
},
- "node-stdlib-browser>util>is-generator-function": {
+ "ttag-cli>koa>is-generator-function": {
"packages": {
- "eslint-plugin-react>array-includes>is-string>has-tostringtag": true
+ "ttag-cli>koa>is-generator-function>has-tostringtag": true
}
},
"node-stdlib-browser>assert>is-nan": {
@@ -1289,7 +1839,7 @@
"npm-run-all>string.prototype.padend>call-bind": true,
"node-stdlib-browser>util>is-typed-array>for-each": true,
"eslint-plugin-react>object.hasown>es-abstract>gopd": true,
- "eslint-plugin-react>array-includes>is-string>has-tostringtag": true
+ "ttag-cli>koa>is-generator-function>has-tostringtag": true
}
},
"@hathor/wallet-lib>isomorphic-ws": {
@@ -1312,11 +1862,35 @@
"process": true
}
},
+ "@lavamoat/webpack>json-stable-stringify": {
+ "packages": {
+ "npm-run-all>string.prototype.padend>call-bind": true,
+ "@lavamoat/webpack>json-stable-stringify>call-bound": true,
+ "@lavamoat/webpack>json-stable-stringify>isarray": true,
+ "@lavamoat/webpack>json-stable-stringify>jsonify": true,
+ "@lavamoat/webpack>json-stable-stringify>object-keys": true
+ }
+ },
+ "@web3auth/base>jwt-decode": {
+ "globals": {
+ "atob": true
+ }
+ },
"cypress>lodash": {
"globals": {
"define": true
}
},
+ "@web3auth/base>loglevel": {
+ "globals": {
+ "console": true,
+ "define": true,
+ "document.cookie": true,
+ "localStorage": true,
+ "log": "write",
+ "navigator": true
+ }
+ },
"node-stdlib-browser>crypto-browserify>create-hash>md5.js": {
"packages": {
"node-stdlib-browser>crypto-browserify>browserify-sign>hash-base": true,
@@ -1360,6 +1934,19 @@
"@lavamoat/webpack>json-stable-stringify>object-keys": true
}
},
+ "@web3auth/base>@toruslabs/base-controllers>@toruslabs/broadcast-channel>oblivious-set": {
+ "globals": {
+ "setTimeout": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>once": {
+ "packages": {
+ "@web3auth/base>@web3auth/auth>once>wrappy": true
+ }
+ },
"node-stdlib-browser>crypto-browserify>public-encrypt>parse-asn1": {
"packages": {
"node-stdlib-browser>crypto-browserify>public-encrypt>parse-asn1>asn1.js": true,
@@ -1434,10 +2021,20 @@
"node-stdlib-browser>crypto-browserify>public-encrypt>browserify-rsa": true,
"node-stdlib-browser>crypto-browserify>create-hash": true,
"node-stdlib-browser>crypto-browserify>public-encrypt>parse-asn1": true,
- "node-stdlib-browser>crypto-browserify>randombytes": true,
+ "ttag-cli>serialize-javascript>randombytes": true,
"cypress>@cypress/request>safe-buffer": true
}
},
+ "@web3auth/base>@web3auth/auth>pump": {
+ "globals": {
+ "process": true
+ },
+ "packages": {
+ "@web3auth/base>@web3auth/auth>end-of-stream": true,
+ "@web3auth/base>@web3auth/auth>once": true,
+ "process": true
+ }
+ },
"node-stdlib-browser>url>punycode": {
"globals": {
"define": true
@@ -1471,7 +2068,7 @@
"setTimeout": true
}
},
- "node-stdlib-browser>crypto-browserify>randombytes": {
+ "ttag-cli>serialize-javascript>randombytes": {
"globals": {
"crypto": true,
"msCrypto": true,
@@ -1491,7 +2088,7 @@
},
"packages": {
"process": true,
- "node-stdlib-browser>crypto-browserify>randombytes": true,
+ "ttag-cli>serialize-javascript>randombytes": true,
"cypress>@cypress/request>safe-buffer": true
}
},
@@ -1605,6 +2202,40 @@
"react": true
}
},
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc>readable-stream": {
+ "globals": {
+ "AbortController": true,
+ "AbortSignal": true,
+ "AggregateError": true,
+ "Blob": true,
+ "queueMicrotask": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "ttag-cli>gettext-parser>readable-stream>abort-controller": true,
+ "buffer": true,
+ "@walletconnect/core>events": true,
+ "process": true,
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc>readable-stream>string_decoder": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>readable-stream": {
+ "globals": {
+ "AbortController": true,
+ "AbortSignal": true,
+ "AggregateError": true,
+ "Blob": true,
+ "queueMicrotask": true
+ },
+ "packages": {
+ "react-redux>@babel/runtime": true,
+ "ttag-cli>gettext-parser>readable-stream>abort-controller": true,
+ "buffer": true,
+ "@walletconnect/core>events": true,
+ "process": true,
+ "@web3auth/base>@web3auth/auth>readable-stream>string_decoder": true
+ }
+ },
"node-stdlib-browser>crypto-browserify>browserify-sign>readable-stream": {
"globals": {
"process.browser": true,
@@ -1730,6 +2361,27 @@
"npm-run-all>string.prototype.padend>es-abstract>object-inspect": true
}
},
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client": {
+ "globals": {
+ "location": true
+ },
+ "packages": {
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>@socket.io/component-emitter": true,
+ "cypress>debug": true,
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>engine.io-client": true,
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>socket.io-parser": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>socket.io-parser": {
+ "globals": {
+ "Blob": true,
+ "File": true
+ },
+ "packages": {
+ "@web3auth/base>@web3auth/auth>@toruslabs/secure-pub-sub>socket.io-client>@socket.io/component-emitter": true,
+ "cypress>debug": true
+ }
+ },
"node-stdlib-browser>stream-browserify": {
"packages": {
"@walletconnect/core>events": true,
@@ -1742,6 +2394,16 @@
"node-stdlib-browser>string_decoder>safe-buffer": true
}
},
+ "@web3auth/no-modal>@toruslabs/openlogin-jrpc>readable-stream>string_decoder": {
+ "packages": {
+ "cypress>@cypress/request>safe-buffer": true
+ }
+ },
+ "@web3auth/base>@web3auth/auth>readable-stream>string_decoder": {
+ "packages": {
+ "cypress>@cypress/request>safe-buffer": true
+ }
+ },
"react-copy-to-clipboard>copy-to-clipboard>toggle-selection": {
"globals": {
"document.activeElement": true,
@@ -1849,7 +2511,7 @@
"packages": {
"node-stdlib-browser>util>inherits": true,
"node-stdlib-browser>util>is-arguments": true,
- "node-stdlib-browser>util>is-generator-function": true,
+ "ttag-cli>koa>is-generator-function": true,
"node-stdlib-browser>util>is-typed-array": true,
"process": true,
"node-stdlib-browser>util>which-typed-array": true
@@ -1914,7 +2576,7 @@
"npm-run-all>string.prototype.padend>call-bind": true,
"node-stdlib-browser>util>is-typed-array>for-each": true,
"eslint-plugin-react>object.hasown>es-abstract>gopd": true,
- "eslint-plugin-react>array-includes>is-string>has-tostringtag": true,
+ "ttag-cli>koa>is-generator-function>has-tostringtag": true,
"node-stdlib-browser>util>is-typed-array": true
}
},
diff --git a/locale/texts.pot b/locale/texts.pot
index 14c2f7715..ea5899803 100644
--- a/locale/texts.pot
+++ b/locale/texts.pot
@@ -29,12 +29,12 @@ msgstr ""
#: src/components/PinPad.js:65
#: src/components/nano-contract/ModalSelectAddressToSignData.js:83
#: src/screens/ChoosePassphrase.js:76
-#: src/screens/LockedWallet.js:66
+#: src/screens/LockedWallet.js:68
msgid "Invalid PIN"
msgstr ""
#: src/screens/ChoosePassphrase.js:83
-#: src/screens/Settings.js:389
+#: src/screens/Settings.js:394
#. Everything is fine, so show confirm modal
msgid "Set a passphrase"
msgstr ""
@@ -63,7 +63,7 @@ msgstr ""
#: src/components/NetworkSettingsForm.js:167
#: src/screens/ChoosePassphrase.js:157
-#: src/screens/LockedWallet.js:116
+#: src/screens/LockedWallet.js:124
msgid "PIN"
msgstr ""
@@ -89,7 +89,7 @@ msgid ""
"passphrase, you will never have access to your tokens again."
msgstr ""
-#: src/components/ModalTokenImport.js:375
+#: src/components/ModalTokenImport.js:388
#: src/components/nano-contract/ModalChangeAddress.js:106
#: src/screens/ChoosePassphrase.js:174
#: src/screens/SentryPermission.js:89
@@ -371,7 +371,7 @@ msgstr ""
msgid "Create an NFT"
msgstr ""
-#: src/components/ModalTokenImport.js:297
+#: src/components/ModalTokenImport.js:310
#: src/screens/CustomTokens.js:90
msgid "Register a token"
msgstr ""
@@ -389,12 +389,12 @@ msgid "Words separated by single space"
msgstr ""
#: src/components/BackButton.js:29
-#: src/components/ModalTokenImport.js:413
+#: src/components/ModalTokenImport.js:426
#: src/components/PinPasswordWrapper.js:60
#: src/screens/LoadWallet.js:147
#: src/screens/NewWallet.js:149
#: src/screens/NewWallet.js:162
-#: src/screens/Signin.js:45
+#: src/screens/Signin.js:115
#: src/screens/SoftwareWalletWarning.js:55
#: src/screens/StartHardwareWallet.js:181
msgid "Back"
@@ -410,7 +410,7 @@ msgstr ""
#: src/components/ModalUnhandledError.js:99
#: src/screens/LoadWalletFailed.js:72
-#: src/screens/Settings.js:391
+#: src/screens/Settings.js:411
msgid "Reset wallet"
msgstr ""
@@ -442,17 +442,17 @@ msgstr ""
msgid "**Transactions found:** ${ transactionsFound }"
msgstr ""
-#: src/screens/LockedWallet.js:114
+#: src/screens/LockedWallet.js:122
msgid "Your wallet is locked. Please write down your PIN to unlock it."
msgstr ""
#: src/components/ModalConfirmClearStorage.js:58
#: src/components/ModalResetAllData.js:137
-#: src/screens/LockedWallet.js:120
+#: src/screens/LockedWallet.js:128
msgid "Reset all data"
msgstr ""
-#: src/screens/LockedWallet.js:130
+#: src/screens/LockedWallet.js:138
msgid "Unlock"
msgstr ""
@@ -669,7 +669,7 @@ msgstr ""
#: src/components/ModalLedgerResetTokenSignatures.js:122
#: src/components/ModalLedgerSignToken.js:243
#: src/components/ModalSendSuccess.js:87
-#: src/components/ModalTokenImport.js:531
+#: src/components/ModalTokenImport.js:535
#: src/components/Reown/ErrorDetailModal.js:121
#: src/components/Reown/FeedbackModal.js:96
#: src/components/Reown/GenericErrorFeedbackModal.js:58
@@ -787,81 +787,81 @@ msgstr ""
msgid "I allow Hathor Wallet to report error information to Hathor team."
msgstr ""
-#: src/screens/Settings.js:97
+#: src/screens/Settings.js:102
msgid "Complete action on your hardware wallet"
msgstr ""
-#: src/screens/Settings.js:100
+#: src/screens/Settings.js:105
msgid "You can set your passphrase directly on your hardware wallet."
msgstr ""
-#: src/screens/Settings.js:102
+#: src/screens/Settings.js:107
msgid "|fn:More info| about this on Ledger."
msgstr ""
-#: src/screens/Settings.js:167
+#: src/screens/Settings.js:172
msgid "Turn notifications off"
msgstr ""
-#: src/screens/Settings.js:168
+#: src/screens/Settings.js:173
msgid "Are you sure you don't want to receive wallet notifications?"
msgstr ""
-#: src/screens/Settings.js:170
+#: src/screens/Settings.js:175
msgid "Turn notifications on"
msgstr ""
-#: src/screens/Settings.js:171
+#: src/screens/Settings.js:176
msgid "Are you sure you want to receive wallet notifications?"
msgstr ""
-#: src/screens/Settings.js:192
+#: src/screens/Settings.js:197
msgid "Show zero-balance tokens"
msgstr ""
-#: src/screens/Settings.js:193
+#: src/screens/Settings.js:198
msgid "Are you sure you want to show all tokens, including those with zero balance?"
msgstr ""
-#: src/screens/Settings.js:195
+#: src/screens/Settings.js:200
msgid "Hide zero-balance tokens"
msgstr ""
-#: src/screens/Settings.js:196
+#: src/screens/Settings.js:201
msgid "Are you sure you want to hide tokens with zero balance?"
msgstr ""
#: src/components/ModalError.js:35
-#: src/screens/Settings.js:319
+#: src/screens/Settings.js:324
msgid "Error"
msgstr ""
-#: src/screens/Settings.js:320
+#: src/screens/Settings.js:325
msgid "Failed to change address mode. Please try again."
msgstr ""
-#: src/screens/Settings.js:337
+#: src/screens/Settings.js:342
msgid "General Settings"
msgstr ""
-#: src/screens/Settings.js:340
+#: src/screens/Settings.js:345
msgid "Network:"
msgstr ""
-#: src/screens/Settings.js:341
+#: src/screens/Settings.js:346
msgid "Connected to"
msgstr ""
#: src/components/TokenGeneralInfo.js:154
-#: src/screens/Settings.js:345
#: src/screens/Settings.js:350
-#: src/screens/Settings.js:361
-#: src/screens/Settings.js:369
-#: src/screens/Settings.js:376
+#: src/screens/Settings.js:355
+#: src/screens/Settings.js:366
+#: src/screens/Settings.js:374
+#: src/screens/Settings.js:381
msgid "Change"
msgstr ""
-#: src/screens/Settings.js:348
+#: src/screens/Settings.js:353
msgid "Allow notifications:"
msgstr ""
@@ -870,9 +870,9 @@ msgstr ""
#: src/components/Reown/modals/BaseNanoContractModal.js:85
#: src/components/Reown/modals/GetUtxosModal.js:157
#: src/components/TokenGeneralInfo.js:151
-#: src/screens/Settings.js:349
-#: src/screens/Settings.js:360
-#: src/screens/Settings.js:368
+#: src/screens/Settings.js:354
+#: src/screens/Settings.js:365
+#: src/screens/Settings.js:373
msgid "Yes"
msgstr ""
@@ -881,102 +881,116 @@ msgstr ""
#: src/components/Reown/modals/BaseNanoContractModal.js:85
#: src/components/Reown/modals/GetUtxosModal.js:157
#: src/components/TokenGeneralInfo.js:152
-#: src/screens/Settings.js:349
-#: src/screens/Settings.js:360
-#: src/screens/Settings.js:368
+#: src/screens/Settings.js:354
+#: src/screens/Settings.js:365
+#: src/screens/Settings.js:373
msgid "No"
msgstr ""
-#: src/screens/Settings.js:356
+#: src/screens/Settings.js:361
msgid "Advanced Settings"
msgstr ""
-#: src/screens/Settings.js:359
+#: src/screens/Settings.js:364
msgid "Hide zero-balance tokens:"
msgstr ""
-#: src/screens/Settings.js:363
+#: src/screens/Settings.js:368
msgid ""
"When selected, any tokens with a balance of zero will not be displayed "
"anywhere in the wallet."
msgstr ""
-#: src/screens/Settings.js:367
+#: src/screens/Settings.js:372
msgid "Automatically report bugs to Hathor:"
msgstr ""
-#: src/screens/Settings.js:373
+#: src/screens/Settings.js:378
msgid "Address Mode:"
msgstr ""
-#: src/screens/Settings.js:374
+#: src/screens/Settings.js:379
msgid "Single address"
msgstr ""
-#: src/screens/Settings.js:374
+#: src/screens/Settings.js:379
msgid "Multi address"
msgstr ""
-#: src/screens/Settings.js:382
+#: src/screens/Settings.js:387
msgid "Reown:"
msgstr ""
-#: src/screens/Settings.js:383
+#: src/screens/Settings.js:388
#, javascript-format
msgid "Connected Sessions: ${ connectedSessionsCount }"
msgstr ""
-#: src/screens/Settings.js:384
+#: src/screens/Settings.js:389
msgid "Manage sessions"
msgstr ""
-#: src/components/ModalTokenImport.js:419
-#: src/screens/Settings.js:387
+#: src/components/ModalTokenImport.js:432
+#: src/screens/Settings.js:392
msgid "Import tokens"
msgstr ""
-#: src/screens/Settings.js:388
+#: src/screens/Settings.js:393
msgid "Export registered tokens"
msgstr ""
-#: src/screens/Settings.js:390
+#: src/screens/Settings.js:395
msgid "Untrust all tokens on Ledger"
msgstr ""
-#: src/screens/Settings.js:399
+#: src/screens/Settings.js:403
msgid "Unique identifier:"
msgstr ""
#: src/components/ModalAddressQRCode.js:101
#: src/components/Reown/CreateTokenRequestData.js:64
#: src/components/TokenGeneralInfo.js:177
-#: src/components/WalletAddress.js:180
-#: src/screens/Settings.js:399
+#: src/components/WalletAddress.js:184
+#: src/screens/Settings.js:403
#: src/screens/atomic-swap/EditSwap.js:97
#: src/screens/atomic-swap/EditSwap.js:111
msgid "Copy to clipboard"
msgstr ""
-#: src/screens/Settings.js:402
+#: src/screens/Settings.js:406
msgid "Date and time:"
msgstr ""
+#: src/screens/Settings.js:411
+#, javascript-format
+msgid "Sign out of your Hathor account ${ displayEmail }"
+msgstr ""
+
+#: src/screens/Settings.js:416
+msgid "Terms of Service"
+msgstr ""
+
+#: src/screens/Settings.js:417
+msgid "Privacy Policy"
+msgstr ""
+
#: src/components/TxData.js:1114
-#: src/components/WalletAddress.js:200
-#: src/screens/Settings.js:410
+#: src/components/WalletAddress.js:204
+#: src/screens/Settings.js:420
#: src/screens/atomic-swap/EditSwap.js:596
msgid "Copied to clipboard!"
msgstr ""
-#: src/screens/Signin.js:43
+#: src/screens/Signin.js:113
msgid "You can start a new wallet or import data from a wallet that already exists."
msgstr ""
-#: src/screens/Signin.js:46
+#: src/screens/Signin.js:116
+#: src/screens/Web3AuthLogin.js:119
msgid "New wallet"
msgstr ""
-#: src/screens/Signin.js:47
+#: src/screens/Signin.js:117
msgid "Import wallet"
msgstr ""
@@ -991,6 +1005,7 @@ msgstr ""
#: src/components/ModalLedgerResetTokenSignatures.js:121
#: src/components/ModalTransactionOverview.js:353
+#: src/components/Web3AuthErrorDialog.js:93
#: src/screens/StartHardwareWallet.js:153
#: src/screens/TransactionDetail.js:161
#: src/screens/VersionError.js:58
@@ -1116,11 +1131,11 @@ msgstr ""
msgid "try again"
msgstr ""
-#: src/screens/WalletType.js:76
+#: src/screens/WalletType.js:87
msgid "Hathor Wallet supports two types of wallet: software and hardware."
msgstr ""
-#: src/screens/WalletType.js:78
+#: src/screens/WalletType.js:89
msgid ""
"|bold:Hardware wallets| are dedicated external devices that store your "
"private information. We currently support the Ledger hardware wallet and "
@@ -1128,21 +1143,25 @@ msgid ""
"about how to use the ledger app with Hathor Wallet check out |fn:this page|."
msgstr ""
-#: src/screens/WalletType.js:85
+#: src/screens/WalletType.js:96
msgid ""
"**Software wallets**, on the other hand, store the information on your "
"computer."
msgstr ""
-#: src/screens/WalletType.js:87
+#: src/screens/WalletType.js:98
msgid "Hardware wallet"
msgstr ""
-#: src/screens/WalletType.js:88
+#: src/screens/WalletType.js:99
msgid "Software wallet"
msgstr ""
-#: src/screens/WalletType.js:100
+#: src/screens/WalletType.js:103
+msgid "Sign in with social"
+msgstr ""
+
+#: src/screens/WalletType.js:116
msgid "Ledger disconnected! Either the app was closed or the connection was lost!"
msgstr ""
@@ -1185,6 +1204,48 @@ msgstr ""
msgid "Backup done with success!"
msgstr ""
+#: src/screens/Web3AuthLogin.js:75
+msgid "Sign in to Hathor"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:85
+msgid "Continue with Google"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:93
+msgid "Apple sign-in coming soon"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:96
+msgid "Continue with Apple"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:103
+msgid "Email sign-in coming soon"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:106
+msgid "Continue with Email"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:111
+msgid "OR"
+msgstr ""
+
+#: src/screens/Web3AuthLogin.js:116
+msgid "Import with seed words"
+msgstr ""
+
+#: src/screens/Web3AuthRecovery.js:25
+msgid "Recovery"
+msgstr ""
+
+#: src/screens/Web3AuthRecovery.js:26
+msgid ""
+"Web3Auth recovery is managed through the Web3Auth-hosted recovery portal. A "
+"direct link from this screen will be added in a follow-up."
+msgstr ""
+
#: src/screens/Welcome.js:76
msgid "Welcome to Hathor Wallet!"
msgstr ""
@@ -1557,24 +1618,24 @@ msgstr ""
msgid "Error getting nano contract state."
msgstr ""
-#: src/sagas/networkSettings.js:61
+#: src/sagas/networkSettings.js:69
msgid "Invalid node."
msgstr ""
-#: src/sagas/networkSettings.js:142
+#: src/sagas/networkSettings.js:174
msgid "Error updating network settings."
msgstr ""
-#: src/sagas/reown.js:510
+#: src/sagas/reown.js:514
msgid "Insufficient funds to complete the transaction."
msgstr ""
-#: src/sagas/reown.js:1137
+#: src/sagas/reown.js:1141
#. Show error modal to user
msgid "Network Mismatch"
msgstr ""
-#: src/sagas/reown.js:1138
+#: src/sagas/reown.js:1142
#. Show error modal to user
#, javascript-format
msgid ""
@@ -1582,7 +1643,7 @@ msgid ""
"wallet is connected to ${ walletNetwork }."
msgstr ""
-#: src/sagas/tokens.js:415
+#: src/sagas/tokens.js:424
msgid "An error occurred while fetching this token data"
msgstr ""
@@ -1769,57 +1830,57 @@ msgstr ""
msgid "Configuration string"
msgstr ""
-#: src/components/ModalAddressMode.js:62
+#: src/components/ModalAddressMode.js:64
msgid "Address Mode"
msgstr ""
-#: src/components/ModalAddressMode.js:69
+#: src/components/ModalAddressMode.js:71
msgid "You can set your wallet to "
msgstr ""
-#: src/components/ModalAddressMode.js:69
+#: src/components/ModalAddressMode.js:71
msgid "single or multi address mode"
msgstr ""
-#: src/components/ModalAddressMode.js:71
+#: src/components/ModalAddressMode.js:73
msgid "You can switch anytime in the settings."
msgstr ""
-#: src/components/ModalAddressMode.js:87
+#: src/components/ModalAddressMode.js:89
msgid "Single Address"
msgstr ""
-#: src/components/ModalAddressMode.js:90
+#: src/components/ModalAddressMode.js:92
msgid "Your wallet will use only one address (index 0)."
msgstr ""
-#: src/components/ModalAddressMode.js:92
+#: src/components/ModalAddressMode.js:94
msgid "Easier to manage and compatible with all dApps."
msgstr ""
-#: src/components/ModalAddressMode.js:108
+#: src/components/ModalAddressMode.js:110
msgid "Multi Address"
msgstr ""
-#: src/components/ModalAddressMode.js:111
+#: src/components/ModalAddressMode.js:113
msgid "Your wallet will let you generate multiple addresses."
msgstr ""
-#: src/components/ModalAddressMode.js:113
+#: src/components/ModalAddressMode.js:115
msgid "Useful for advanced users."
msgstr ""
-#: src/components/ModalAddressMode.js:121
+#: src/components/ModalAddressMode.js:123
msgid ""
"You can't switch to single address mode because other addresses in your "
"wallet are already in use."
msgstr ""
-#: src/components/ModalAddressMode.js:123
+#: src/components/ModalAddressMode.js:125
msgid "Learn more"
msgstr ""
-#: src/components/ModalAddressMode.js:137
+#: src/components/ModalAddressMode.js:139
msgid "Save preferences"
msgstr ""
@@ -1829,7 +1890,7 @@ msgid "Address copied to clipboard!"
msgstr ""
#: src/components/ModalAddressQRCode.js:91
-#: src/components/WalletAddress.js:154
+#: src/components/WalletAddress.js:158
msgid "Address to receive tokens"
msgstr ""
@@ -2115,88 +2176,92 @@ msgstr ""
msgid "Ok"
msgstr ""
-#: src/components/ModalTokenImport.js:201
+#: src/components/ModalTokenImport.js:219
msgid "Unknown error"
msgstr ""
-#: src/components/ModalTokenImport.js:264
+#: src/components/ModalTokenImport.js:277
msgid ""
"Some tokens are hidden because \"hide zero-balance tokens\" is enabled. You "
"can change this on settings."
msgstr ""
-#: src/components/ModalTokenImport.js:274
+#: src/components/ModalTokenImport.js:287
#. -- Render helpers -------------------------------------------------------
msgid "Loading token details..."
msgstr ""
-#: src/components/ModalTokenImport.js:281
+#: src/components/ModalTokenImport.js:294
msgid "We didn't find any unregistered tokens linked to your wallet."
msgstr ""
-#: src/components/ModalTokenImport.js:284
+#: src/components/ModalTokenImport.js:297
msgid "You can register a new one manually."
msgstr ""
-#: src/components/ModalTokenImport.js:346
+#: src/components/ModalTokenImport.js:359
msgid "Select the tokens you want to add to your wallet."
msgstr ""
-#: src/components/ModalTokenImport.js:350
+#: src/components/ModalTokenImport.js:363
#, javascript-format
msgid ""
"Could not load details for ${ fetchErrorCount } token(s). They are shown "
"with partial information but can still be imported."
msgstr ""
-#: src/components/ModalTokenImport.js:359
-#: src/components/ModalTokenImport.js:362
+#: src/components/ModalTokenImport.js:372
+#: src/components/ModalTokenImport.js:375
msgid "Deselect all"
msgstr ""
-#: src/components/ModalTokenImport.js:359
-#: src/components/ModalTokenImport.js:362
+#: src/components/ModalTokenImport.js:372
+#: src/components/ModalTokenImport.js:375
msgid "Select all"
msgstr ""
-#: src/components/ModalTokenImport.js:384
+#: src/components/ModalTokenImport.js:397
msgid "You are about to add these tokens to your wallet:"
msgstr ""
-#: src/components/ModalTokenImport.js:406
+#: src/components/ModalTokenImport.js:419
msgid "Only add tokens you recognize."
msgstr ""
-#: src/components/ModalTokenImport.js:430
+#: src/components/ModalTokenImport.js:441
msgid "Registering selected tokens..."
msgstr ""
-#: src/components/ModalTokenImport.js:444
+#: src/components/ModalTokenImport.js:448
msgid "New tokens added!"
msgstr ""
-#: src/components/ModalTokenImport.js:453
+#: src/components/ModalTokenImport.js:457
msgid "Some tokens failed to register:"
msgstr ""
-#: src/components/ModalTokenImport.js:475
+#: src/components/ModalTokenImport.js:479
#: src/components/Reown/FeedbackModal.js:81
msgid "Retry"
msgstr ""
-#: src/components/ModalTokenImport.js:518
+#: src/components/ModalTokenImport.js:522
msgid "No tokens available to import"
msgstr ""
-#: src/components/ModalTokenImport.js:519
+#: src/components/ModalTokenImport.js:523
msgid "Confirm Import"
msgstr ""
-#: src/components/ModalTokenImport.js:520
+#: src/components/ModalTokenImport.js:524
msgid "Tokens added"
msgstr ""
#: src/components/ModalTokenImport.js:525
+msgid "Registering tokens"
+msgstr ""
+
+#: src/components/ModalTokenImport.js:529
msgid "Tokens found"
msgstr ""
@@ -2332,31 +2397,31 @@ msgstr ""
msgid "Register token"
msgstr ""
-#: src/components/Navigation.js:58
+#: src/components/Navigation.js:62
msgid "Wallet"
msgstr ""
-#: src/components/Navigation.js:61
+#: src/components/Navigation.js:65
msgid "Send tokens"
msgstr ""
-#: src/components/Navigation.js:64
+#: src/components/Navigation.js:68
msgid "Custom tokens"
msgstr ""
-#: src/components/Navigation.js:67
+#: src/components/Navigation.js:71
msgid "NFTs"
msgstr ""
-#: src/components/Navigation.js:70
+#: src/components/Navigation.js:74
msgid "Atomic Swap"
msgstr ""
-#: src/components/Navigation.js:73
+#: src/components/Navigation.js:77
msgid "Public Explorer"
msgstr ""
-#: src/components/Navigation.js:76
+#: src/components/Navigation.js:80
msgid "Nano Contract"
msgstr ""
@@ -3026,43 +3091,43 @@ msgstr ""
msgid "Software Wallet"
msgstr ""
-#: src/components/WalletAddress.js:93
+#: src/components/WalletAddress.js:95
msgid "Validate address on Ledger"
msgstr ""
-#: src/components/WalletAddress.js:141
+#: src/components/WalletAddress.js:143
msgid "Validate that the address below is the same presented on the Ledger screen."
msgstr ""
-#: src/components/WalletAddress.js:142
+#: src/components/WalletAddress.js:144
msgid "Press both buttons on your Ledger in case the address is valid."
msgstr ""
-#: src/components/WalletAddress.js:158
+#: src/components/WalletAddress.js:162
msgid "Generate new address"
msgstr ""
-#: src/components/WalletAddress.js:158
+#: src/components/WalletAddress.js:162
msgid "Get new address"
msgstr ""
-#: src/components/WalletAddress.js:163
+#: src/components/WalletAddress.js:167
msgid "QR Code"
msgstr ""
-#: src/components/WalletAddress.js:163
+#: src/components/WalletAddress.js:167
msgid "Get qrcode"
msgstr ""
-#: src/components/WalletAddress.js:168
+#: src/components/WalletAddress.js:172
msgid "See all addresses"
msgstr ""
-#: src/components/WalletAddress.js:190
+#: src/components/WalletAddress.js:194
msgid "Show full address"
msgstr ""
-#: src/components/WalletAddress.js:201
+#: src/components/WalletAddress.js:205
msgid "You must use an old address before generating new ones"
msgstr ""
@@ -3084,6 +3149,100 @@ msgstr ""
msgid "Transaction history"
msgstr ""
+#: src/components/Web3AuthErrorDialog.js:20
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Connection problem"
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:21
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Could not reach Web3Auth. Check your internet connection and try again."
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:25
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Sign-in temporarily unavailable"
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:26
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid ""
+"There is a configuration issue with Web3Auth. The Hathor team has been "
+"notified."
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:30
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Set up a recovery factor"
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:31
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid ""
+"Hathor wallets require a recovery factor to protect your funds. You can "
+"configure it in the next step."
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:35
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Could not derive your wallet"
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:36
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Something went wrong while preparing your wallet. Please contact support."
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:40
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Sign-in failed"
+msgstr ""
+
+#: src/components/Web3AuthErrorDialog.js:41
+#. *
+#. * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+#. * intentionally absent: the saga swallows it silently before reaching this
+#. * component, so any errorType reaching us is a real failure worth surfacing.
+#.
+msgid "Something unexpected happened. Please try again."
+msgstr ""
+
#: src/components/tokens/TokenDelegate.js:47
#: src/components/tokens/TokenDelegate.js:74
#: src/components/tokens/TokenDelegate.js:102
@@ -3767,21 +3926,21 @@ msgid "Register Nano Contract"
msgstr ""
#: src/components/Reown/modals/BaseNanoContractModal.js:233
-#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:71
-#: src/components/Reown/modals/SendNanoContractTxModal.js:37
+#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:74
+#: src/components/Reown/modals/SendNanoContractTxModal.js:41
#: src/components/Reown/modals/SendTransactionModal.js:247
msgid "Accept Transaction"
msgstr ""
#: src/components/Reown/modals/BaseNanoContractModal.js:234
#: src/components/Reown/modals/ConnectModal.js:37
-#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:72
+#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:75
#: src/components/Reown/modals/CreateTokenModal.js:56
#: src/components/Reown/modals/GetAddressClientModal.js:95
#: src/components/Reown/modals/GetAddressModal.js:53
#: src/components/Reown/modals/GetBalanceModal.js:66
#: src/components/Reown/modals/GetUtxosModal.js:187
-#: src/components/Reown/modals/SendNanoContractTxModal.js:38
+#: src/components/Reown/modals/SendNanoContractTxModal.js:42
#: src/components/Reown/modals/SendTransactionModal.js:246
#: src/components/Reown/modals/SignMessageModal.js:27
#: src/components/Reown/modals/SignOracleDataModal.js:40
@@ -3817,14 +3976,14 @@ msgstr ""
msgid "This dApp would like to:"
msgstr ""
-#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:19
+#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:21
#. *
#. * Component for Token Data Card
#.
msgid "Create Token Data"
msgstr ""
-#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:70
+#: src/components/Reown/modals/CreateNanoContractCreateTokenTxModal.js:73
msgid "CREATE NANO CONTRACT & TOKEN"
msgstr ""
@@ -3963,7 +4122,7 @@ msgstr ""
msgid "Share UTXOs Information"
msgstr ""
-#: src/components/Reown/modals/SendNanoContractTxModal.js:36
+#: src/components/Reown/modals/SendNanoContractTxModal.js:40
msgid "NEW NANO CONTRACT TRANSACTION"
msgstr ""
diff --git a/package-lock.json b/package-lock.json
index 2e376fbb4..b7d5ed1c5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,13 +10,17 @@
"hasInstallScript": true,
"dependencies": {
"@hathor/hathor-rpc-handler": "4.4.0",
- "@hathor/wallet-lib": "3.1.1",
+ "@hathor/wallet-lib": "file:.yalc/@hathor/wallet-lib",
"@ledgerhq/hw-transport-node-hid": "6.28.1",
"@reduxjs/toolkit": "2.2.3",
"@reown/walletkit": "1.1.2",
"@sentry/electron": "3.0.7",
"@walletconnect/core": "2.17.3",
"@walletconnect/utils": "2.17.3",
+ "@web3auth/auth-adapter": "^9.7.0",
+ "@web3auth/base": "^9.7.0",
+ "@web3auth/base-provider": "^9.7.0",
+ "@web3auth/no-modal": "^8.12.4",
"axios": "1.7.7",
"babel-polyfill": "6.26.0",
"bootstrap": "4.6.1",
@@ -73,6 +77,47 @@
"npm": ">=10.0.0"
}
},
+ ".yalc/@hathor/wallet-lib": {
+ "version": "3.1.1",
+ "license": "MIT",
+ "dependencies": {
+ "axios": "1.7.7",
+ "bitcore-lib": "8.25.10",
+ "bitcore-mnemonic": "8.25.10",
+ "buffer": "6.0.3",
+ "crypto-js": "4.2.0",
+ "isomorphic-ws": "5.0.0",
+ "lodash": "4.17.21",
+ "queue-microtask": "1.2.3",
+ "ws": "8.17.1",
+ "zod": "3.23.8"
+ },
+ "engines": {
+ "node": ">=22.0.0",
+ "npm": ">=10.0.0"
+ }
+ },
+ ".yalc/@hathor/wallet-lib/node_modules/ws": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "license": "MIT",
+ "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
+ }
+ }
+ },
"node_modules/@aashutoshrathi/word-wrap": {
"version": "1.2.6",
"license": "MIT",
@@ -2853,6 +2898,31 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
+ "node_modules/@ethereumjs/rlp": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz",
+ "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==",
+ "license": "MPL-2.0",
+ "bin": {
+ "rlp": "bin/rlp.cjs"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ethereumjs/util": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz",
+ "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "@ethereumjs/rlp": "^5.0.2",
+ "ethereum-cryptography": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@ethersproject/abstract-provider": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
@@ -3292,47 +3362,8 @@
}
},
"node_modules/@hathor/wallet-lib": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@hathor/wallet-lib/-/wallet-lib-3.1.1.tgz",
- "integrity": "sha512-D1ZC7IxVd9DtycgqSnVNByGnQiTJLNoUlgk8sBlCKmVMO3AehNo3t6PVkyXEUA2DOjW/rACqPVbYBPiprbPR0g==",
- "license": "MIT",
- "dependencies": {
- "axios": "1.7.7",
- "bitcore-lib": "8.25.10",
- "bitcore-mnemonic": "8.25.10",
- "buffer": "6.0.3",
- "crypto-js": "4.2.0",
- "isomorphic-ws": "5.0.0",
- "lodash": "4.17.21",
- "queue-microtask": "1.2.3",
- "ws": "8.17.1",
- "zod": "3.23.8"
- },
- "engines": {
- "node": ">=22.0.0",
- "npm": ">=10.0.0"
- }
- },
- "node_modules/@hathor/wallet-lib/node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "license": "MIT",
- "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
- }
- }
+ "resolved": ".yalc/@hathor/wallet-lib",
+ "link": true
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
@@ -4453,6 +4484,42 @@
"eslint-scope": "5.1.1"
}
},
+ "node_modules/@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.4.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/curves/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"license": "MIT",
@@ -4482,6 +4549,22 @@
"node": ">= 8"
}
},
+ "node_modules/@nx/nx-linux-x64-gnu": {
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.4.tgz",
+ "integrity": "sha512-MSu+xVNdR95tuuO+eL/a/ZeMlhfrZ627On5xaCZXnJ+lFxNg/S4nlKZQk0Eq5hYALCd/GKgFGasRdlRdOtvGPg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"license": "MIT",
@@ -4686,10 +4769,83 @@
"version": "1.0.1",
"license": "MIT"
},
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.60.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz",
+ "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
"node_modules/@rushstack/eslint-patch": {
"version": "1.10.3",
"license": "MIT"
},
+ "node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
+ "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.4.0",
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
+ "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/@sentry-internal/feedback": {
"version": "7.99.0",
"dev": true,
@@ -5203,6 +5359,12 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+ "license": "MIT"
+ },
"node_modules/@stablelib/aead": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz",
@@ -5876,444 +6038,1146 @@
"node": ">= 10"
}
},
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
+ "node_modules/@toruslabs/base-controllers": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-7.4.0.tgz",
+ "integrity": "sha512-Qu6ov8fbKsF+PX8K6wSLBpT6pyBpDO+kGFc7pIbFP1zZU6JCyaD9c8ddfsWRr0ZOIWHzznjrYSbP/UZ0r3fZDA==",
"license": "ISC",
+ "dependencies": {
+ "@ethereumjs/util": "^9.1.0",
+ "@toruslabs/broadcast-channel": "^11.0.0",
+ "@toruslabs/http-helpers": "^7.0.0",
+ "@web3auth/auth": "^9.6.4",
+ "async-mutex": "^0.5.0",
+ "bignumber.js": "^9.1.2",
+ "bowser": "^2.11.0",
+ "jwt-decode": "^4.0.0",
+ "loglevel": "^1.9.2"
+ },
"engines": {
- "node": ">=10.13.0"
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/aria-query": {
- "version": "5.0.4",
- "dev": true,
- "license": "MIT"
+ "node_modules/@toruslabs/base-controllers/node_modules/@sentry/core": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.2.tgz",
+ "integrity": "sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=14.18"
+ }
},
- "node_modules/@types/babel__core": {
- "version": "7.20.5",
+ "node_modules/@toruslabs/base-controllers/node_modules/@sentry/types": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.55.2.tgz",
+ "integrity": "sha512-6MH7sKopaAY1XAIoOirjkkhHZfH3TBuIyErtUH29jvHcdHQFQPk42vX82jBL6csGB8wbsHCWjrBh6y2KqtaknA==",
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
+ "@sentry/core": "8.55.2"
+ },
+ "engines": {
+ "node": ">=14.18"
}
},
- "node_modules/@types/babel__generator": {
- "version": "7.6.8",
+ "node_modules/@toruslabs/base-controllers/node_modules/@toruslabs/http-helpers": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-7.0.1.tgz",
+ "integrity": "sha512-9LqvgH/JfMtgZSzRqSutDfXZ5gw6+hziByYgzOzLGTO3WcqALAKCcO+icvcNI/NCw8HW4xpTM2xZIEkkEcFYPg==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.0.0"
+ "deepmerge": "^4.3.1",
+ "loglevel": "^1.9.2"
+ },
+ "engines": {
+ "node": ">=20.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^8.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@types/babel__template": {
- "version": "7.4.4",
- "license": "MIT",
+ "node_modules/@toruslabs/base-session-manager": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/base-session-manager/-/base-session-manager-3.1.1.tgz",
+ "integrity": "sha512-/awg0VbJcfcdJTB2zYdnoFkNGOioODvBc7i3vfxR6lRpFvVwndYPwbD870bgRiSUt9hSee8pSfokejnjDZGpew==",
+ "license": "ISC",
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@toruslabs/http-helpers": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/babel__traverse": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
- "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
+ "node_modules/@toruslabs/base-session-manager/node_modules/@sentry/types": {
+ "version": "7.120.4",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.4.tgz",
+ "integrity": "sha512-cUq2hSSe6/qrU6oZsEP4InMI5VVdD86aypE+ENrQ6eZEVLTCYm1w6XhW1NvIu3UuWh7gZec4a9J7AFpYxki88Q==",
"license": "MIT",
- "dependencies": {
- "@babel/types": "^7.20.7"
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/body-parser": {
- "version": "1.19.5",
+ "node_modules/@toruslabs/base-session-manager/node_modules/@toruslabs/http-helpers": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz",
+ "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==",
"license": "MIT",
"dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
+ "lodash.merge": "^4.6.2",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^7.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@types/bonjour": {
- "version": "3.5.13",
+ "node_modules/@toruslabs/broadcast-channel": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-11.0.0.tgz",
+ "integrity": "sha512-nnM5yjQGzmCiie37G4Ks+5VsPjMrcY/81tga5ASb/u5TbZhSPQUw0CSW42Q9uBtR8sZbsHU06cPZ8j0z6LeAUg==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@babel/runtime": "^7.24.7",
+ "@toruslabs/eccrypto": "^5.0.0",
+ "@toruslabs/metadata-helpers": "^6.0.0",
+ "loglevel": "^1.9.1",
+ "oblivious-set": "1.4.0",
+ "socket.io-client": "^4.7.5",
+ "unload": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@types/cacheable-request": {
- "version": "6.0.3",
- "dev": true,
+ "node_modules/@toruslabs/constants": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-14.2.0.tgz",
+ "integrity": "sha512-Mb5EfYNSPyvvw5s1JXnpZwritCgp4NmLni1imTqrSKGV3yikYhUn1ufyLMAHGnBBgv4AuMIXBIe3EpJJ+SpA0g==",
"license": "MIT",
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
+ },
+ "node_modules/@toruslabs/eccrypto": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-5.0.4.tgz",
+ "integrity": "sha512-5PrSe2sn5Ed0u/2oRFtKaGOYpXJS+rJQXlYqxzy7Tbe2wLPCJh5/hZ3yStLfZmrYjHlWYwUx3AIpL/pUOOSU4w==",
+ "license": "CC0-1.0",
"dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "^3.1.4",
- "@types/node": "*",
- "@types/responselike": "^1.0.0"
+ "elliptic": "^6.5.5"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@types/connect": {
- "version": "3.4.38",
+ "node_modules/@toruslabs/ffjavascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/ffjavascript/-/ffjavascript-4.0.0.tgz",
+ "integrity": "sha512-sGPKK0xZ7KDLOsVc8/rCb83iCT1xD12+yfl3eoVNppr4vMcPJcXGwqpw4r1nP3Ln10UHvTCduxjUr3axdoxOSw==",
+ "license": "GPL-3.0",
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ }
+ },
+ "node_modules/@toruslabs/metadata-helpers": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-6.0.0.tgz",
+ "integrity": "sha512-WHmCpvmZHJtkhiAi13GVeLgpfh6dTm7Z1ugCwRmtTq60rSVYO/euVJxzLRgEnWFMlyM1KFOPJXvd68dWuiYXTA==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@toruslabs/eccrypto": "^5.0.0",
+ "@toruslabs/http-helpers": "^7.0.0",
+ "elliptic": "^6.5.5",
+ "ethereum-cryptography": "^2.2.0",
+ "json-stable-stringify": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/connect-history-api-fallback": {
- "version": "1.5.4",
+ "node_modules/@toruslabs/metadata-helpers/node_modules/@sentry/core": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.2.tgz",
+ "integrity": "sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==",
"license": "MIT",
- "dependencies": {
- "@types/express-serve-static-core": "*",
- "@types/node": "*"
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=14.18"
}
},
- "node_modules/@types/debug": {
- "version": "4.1.10",
- "dev": true,
+ "node_modules/@toruslabs/metadata-helpers/node_modules/@sentry/types": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.55.2.tgz",
+ "integrity": "sha512-6MH7sKopaAY1XAIoOirjkkhHZfH3TBuIyErtUH29jvHcdHQFQPk42vX82jBL6csGB8wbsHCWjrBh6y2KqtaknA==",
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@types/ms": "*"
+ "@sentry/core": "8.55.2"
+ },
+ "engines": {
+ "node": ">=14.18"
}
},
- "node_modules/@types/eslint": {
- "version": "8.56.10",
+ "node_modules/@toruslabs/metadata-helpers/node_modules/@toruslabs/http-helpers": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-7.0.1.tgz",
+ "integrity": "sha512-9LqvgH/JfMtgZSzRqSutDfXZ5gw6+hziByYgzOzLGTO3WcqALAKCcO+icvcNI/NCw8HW4xpTM2xZIEkkEcFYPg==",
"license": "MIT",
"dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
+ "deepmerge": "^4.3.1",
+ "loglevel": "^1.9.2"
+ },
+ "engines": {
+ "node": ">=20.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^8.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "license": "MIT",
+ "node_modules/@toruslabs/openlogin": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/openlogin/-/openlogin-8.2.1.tgz",
+ "integrity": "sha512-2X1s6dg8PhF/eXjKChkEHhKNO27gx7pjdUD7moMwu+YNm3+SJWJtt+bJWNbHIvWKHcCsms7nC8Pn3RZ8arOEQg==",
+ "license": "ISC",
"dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
+ "@toruslabs/constants": "^13.2.0",
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/metadata-helpers": "^5.1.0",
+ "@toruslabs/openlogin-session-manager": "^3.1.1",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "@toruslabs/secure-pub-sub": "^0.2.0",
+ "bowser": "^2.11.0",
+ "events": "^3.3.0",
+ "loglevel": "^1.9.1",
+ "ts-custom-error": "^3.3.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/estree": {
- "version": "1.0.5",
- "license": "MIT"
+ "node_modules/@toruslabs/openlogin-jrpc": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-8.3.0.tgz",
+ "integrity": "sha512-1OdSkUXGXJobkkMIJHuf+XzwmUB4ROy6uQfPEJ3NXvNj84+N4hNpvC4JPg7VoWBHdfCba9cv6QnQsVArlwai4A==",
+ "license": "ISC",
+ "dependencies": {
+ "end-of-stream": "^1.4.4",
+ "events": "^3.3.0",
+ "fast-safe-stringify": "^2.1.1",
+ "once": "^1.4.0",
+ "pump": "^3.0.0",
+ "readable-stream": "^4.5.2"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
},
- "node_modules/@types/express": {
- "version": "4.17.21",
+ "node_modules/@toruslabs/openlogin-jrpc/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
"license": "MIT",
"dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.33",
- "@types/qs": "*",
- "@types/serve-static": "*"
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/@types/express-serve-static-core": {
- "version": "4.19.5",
+ "node_modules/@toruslabs/openlogin-jrpc/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"license": "MIT",
"dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
+ "safe-buffer": "~5.2.0"
}
},
- "node_modules/@types/formidable": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.2.8.tgz",
- "integrity": "sha512-6psvrUy5VDYb+yaPJReF1WrRsz+FBwyJutK9Twz1Efa27tm07bARNIkK2B8ZPWq80dXqpKfrxTO96xrtPp+AuA==",
- "dev": true,
- "license": "MIT",
+ "node_modules/@toruslabs/openlogin-session-manager": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-session-manager/-/openlogin-session-manager-3.1.1.tgz",
+ "integrity": "sha512-hikBX7CdiWCTNNfsiacPM9O+2Ysf6ULcn9E4og9BVSt4brduUQoa9ioNY6G5m0eH/xQCzRsLpSRGNuOPTBJm3w==",
+ "license": "ISC",
"dependencies": {
- "@types/node": "*"
+ "@toruslabs/base-session-manager": "^3.1.1",
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/metadata-helpers": "5.1.0"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/fs-extra": {
- "version": "9.0.13",
- "dev": true,
+ "node_modules/@toruslabs/openlogin-session-manager/node_modules/@sentry/types": {
+ "version": "7.120.4",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.4.tgz",
+ "integrity": "sha512-cUq2hSSe6/qrU6oZsEP4InMI5VVdD86aypE+ENrQ6eZEVLTCYm1w6XhW1NvIu3UuWh7gZec4a9J7AFpYxki88Q==",
"license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@toruslabs/openlogin-session-manager/node_modules/@toruslabs/eccrypto": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-4.0.0.tgz",
+ "integrity": "sha512-Z3EINkbsgJx1t6jCDVIJjLSUEGUtNIeDjhMWmeDGOWcP/+v/yQ1hEvd1wfxEz4q5WqIHhevacmPiVxiJ4DljGQ==",
+ "license": "CC0-1.0",
"dependencies": {
- "@types/node": "*"
+ "elliptic": "^6.5.4"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@types/graceful-fs": {
- "version": "4.1.9",
+ "node_modules/@toruslabs/openlogin-session-manager/node_modules/@toruslabs/http-helpers": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz",
+ "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "lodash.merge": "^4.6.2",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^7.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.1",
+ "node_modules/@toruslabs/openlogin-session-manager/node_modules/@toruslabs/metadata-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-5.1.0.tgz",
+ "integrity": "sha512-7fdqKuWUaJT/ng+PlqrA4XKkn8Dij4JJozfv/4gHTi0f/6JFncpzIces09jTV70hCf0JIsTCvIDlzKOdJ+aeZg==",
"license": "MIT",
"dependencies": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/http-helpers": "^6.1.0",
+ "elliptic": "^6.5.5",
+ "ethereum-cryptography": "^2.1.3",
+ "json-stable-stringify": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/html-minifier-terser": {
- "version": "6.1.0",
- "license": "MIT"
- },
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/http-errors": {
- "version": "2.0.4",
- "license": "MIT"
+ "node_modules/@toruslabs/openlogin-utils": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-8.2.1.tgz",
+ "integrity": "sha512-NSOtj61NZe7w9qbd92cYwMlE/1UwPGtDH02NfUjoEEc3p1yD5U2cLZjdSwsnAgjGNgRqVomXpND4hii12lI/ew==",
+ "license": "ISC",
+ "dependencies": {
+ "@toruslabs/constants": "^13.2.0",
+ "base64url": "^3.0.1",
+ "color": "^4.2.3"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
},
- "node_modules/@types/http-proxy": {
- "version": "1.17.14",
+ "node_modules/@toruslabs/openlogin-utils/node_modules/@toruslabs/constants": {
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-13.4.0.tgz",
+ "integrity": "sha512-CjmnMQ5Oj0bqSBGkhv7Xm3LciGJDHwe4AJ1LF6mijlP+QcCnUM5I6kVp60j7zZ/r0DT7nIEiuHHHczGpCZor0A==",
"license": "MIT",
- "dependencies": {
- "@types/node": "*"
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.6",
- "license": "MIT"
+ "node_modules/@toruslabs/openlogin/node_modules/@sentry/types": {
+ "version": "7.120.4",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.4.tgz",
+ "integrity": "sha512-cUq2hSSe6/qrU6oZsEP4InMI5VVdD86aypE+ENrQ6eZEVLTCYm1w6XhW1NvIu3UuWh7gZec4a9J7AFpYxki88Q==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.3",
+ "node_modules/@toruslabs/openlogin/node_modules/@toruslabs/constants": {
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-13.4.0.tgz",
+ "integrity": "sha512-CjmnMQ5Oj0bqSBGkhv7Xm3LciGJDHwe4AJ1LF6mijlP+QcCnUM5I6kVp60j7zZ/r0DT7nIEiuHHHczGpCZor0A==",
"license": "MIT",
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
+ },
+ "node_modules/@toruslabs/openlogin/node_modules/@toruslabs/eccrypto": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-4.0.0.tgz",
+ "integrity": "sha512-Z3EINkbsgJx1t6jCDVIJjLSUEGUtNIeDjhMWmeDGOWcP/+v/yQ1hEvd1wfxEz4q5WqIHhevacmPiVxiJ4DljGQ==",
+ "license": "CC0-1.0",
"dependencies": {
- "@types/istanbul-lib-coverage": "*"
+ "elliptic": "^6.5.4"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.4",
+ "node_modules/@toruslabs/openlogin/node_modules/@toruslabs/http-helpers": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz",
+ "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==",
"license": "MIT",
"dependencies": {
- "@types/istanbul-lib-report": "*"
+ "lodash.merge": "^4.6.2",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^7.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "license": "MIT"
- },
- "node_modules/@types/keyv": {
- "version": "3.1.4",
- "dev": true,
+ "node_modules/@toruslabs/openlogin/node_modules/@toruslabs/metadata-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-5.1.0.tgz",
+ "integrity": "sha512-7fdqKuWUaJT/ng+PlqrA4XKkn8Dij4JJozfv/4gHTi0f/6JFncpzIces09jTV70hCf0JIsTCvIDlzKOdJ+aeZg==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/http-helpers": "^6.1.0",
+ "elliptic": "^6.5.5",
+ "ethereum-cryptography": "^2.1.3",
+ "json-stable-stringify": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/linkify-it": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/markdown-it": {
- "version": "12.2.3",
- "dev": true,
+ "node_modules/@toruslabs/openlogin/node_modules/@toruslabs/secure-pub-sub": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/secure-pub-sub/-/secure-pub-sub-0.2.0.tgz",
+ "integrity": "sha512-pkpEbeJaGHYUFj7M3lVYfzUFSX+54Vfb4M+IB+RagNpWviTp/rUQ+hy+vcFKkuuwsxZ5NDnucHzb7+XJmdLTmA==",
"license": "MIT",
"dependencies": {
- "@types/linkify-it": "*",
- "@types/mdurl": "*"
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/http-helpers": "^6.1.0",
+ "@toruslabs/metadata-helpers": "^5.1.0",
+ "loglevel": "^1.9.1",
+ "socket.io-client": "^4.7.4"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@types/mdurl": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT"
+ "node_modules/@toruslabs/secure-pub-sub": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/secure-pub-sub/-/secure-pub-sub-1.1.0.tgz",
+ "integrity": "sha512-OFN0Zsa37+c9aStHd4wzau+IYPY+gve9fBPDuPSIuS06cz/bov39DvCP0LaTQUKxK4eQMZENcPu6PeyBvQYQQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@toruslabs/constants": "^14.1.1",
+ "@toruslabs/eccrypto": "^5.0.0",
+ "@toruslabs/http-helpers": "^7.0.0",
+ "@toruslabs/metadata-helpers": "^6.0.0",
+ "loglevel": "^1.9.1",
+ "socket.io-client": "^4.7.5"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
},
- "node_modules/@types/mime": {
- "version": "1.3.5",
- "license": "MIT"
+ "node_modules/@toruslabs/secure-pub-sub/node_modules/@sentry/core": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.2.tgz",
+ "integrity": "sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=14.18"
+ }
},
- "node_modules/@types/ms": {
- "version": "0.7.33",
- "dev": true,
- "license": "MIT"
+ "node_modules/@toruslabs/secure-pub-sub/node_modules/@sentry/types": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.55.2.tgz",
+ "integrity": "sha512-6MH7sKopaAY1XAIoOirjkkhHZfH3TBuIyErtUH29jvHcdHQFQPk42vX82jBL6csGB8wbsHCWjrBh6y2KqtaknA==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@sentry/core": "8.55.2"
+ },
+ "engines": {
+ "node": ">=14.18"
+ }
},
- "node_modules/@types/node": {
- "version": "17.0.39",
- "license": "MIT"
+ "node_modules/@toruslabs/secure-pub-sub/node_modules/@toruslabs/http-helpers": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-7.0.1.tgz",
+ "integrity": "sha512-9LqvgH/JfMtgZSzRqSutDfXZ5gw6+hziByYgzOzLGTO3WcqALAKCcO+icvcNI/NCw8HW4xpTM2xZIEkkEcFYPg==",
+ "license": "MIT",
+ "dependencies": {
+ "deepmerge": "^4.3.1",
+ "loglevel": "^1.9.2"
+ },
+ "engines": {
+ "node": ">=20.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^8.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
+ }
},
- "node_modules/@types/node-forge": {
- "version": "1.3.11",
+ "node_modules/@toruslabs/session-manager": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/session-manager/-/session-manager-3.2.0.tgz",
+ "integrity": "sha512-t+EGFZhn8pxZ5Gjhxr99qNmK20zZD/RYEMRROBuwsETyy/QU17H6dKhqIb306GjmwUPkz2VKKTtJcOg9Ifijuw==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@toruslabs/constants": "^14.1.1",
+ "@toruslabs/eccrypto": "^5.0.4",
+ "@toruslabs/http-helpers": "^7.0.0",
+ "@toruslabs/metadata-helpers": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-linux-x64-gnu": "^4.24.4"
}
},
- "node_modules/@types/parse-json": {
- "version": "4.0.0",
- "license": "MIT"
+ "node_modules/@toruslabs/session-manager/node_modules/@sentry/core": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.2.tgz",
+ "integrity": "sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=14.18"
+ }
},
- "node_modules/@types/plist": {
- "version": "3.0.4",
- "dev": true,
+ "node_modules/@toruslabs/session-manager/node_modules/@sentry/types": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.55.2.tgz",
+ "integrity": "sha512-6MH7sKopaAY1XAIoOirjkkhHZfH3TBuIyErtUH29jvHcdHQFQPk42vX82jBL6csGB8wbsHCWjrBh6y2KqtaknA==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
- "@types/node": "*",
- "xmlbuilder": ">=11.0.1"
+ "@sentry/core": "8.55.2"
+ },
+ "engines": {
+ "node": ">=14.18"
}
},
- "node_modules/@types/prettier": {
- "version": "2.7.3",
- "license": "MIT"
+ "node_modules/@toruslabs/session-manager/node_modules/@toruslabs/http-helpers": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-7.0.1.tgz",
+ "integrity": "sha512-9LqvgH/JfMtgZSzRqSutDfXZ5gw6+hziByYgzOzLGTO3WcqALAKCcO+icvcNI/NCw8HW4xpTM2xZIEkkEcFYPg==",
+ "license": "MIT",
+ "dependencies": {
+ "deepmerge": "^4.3.1",
+ "loglevel": "^1.9.2"
+ },
+ "engines": {
+ "node": ">=20.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^8.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
+ }
},
- "node_modules/@types/prop-types": {
- "version": "15.7.5",
- "license": "MIT"
+ "node_modules/@toruslabs/starkware-crypto": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/starkware-crypto/-/starkware-crypto-4.0.1.tgz",
+ "integrity": "sha512-AhnXUscFN2+oLeQuOEbi8vvrQnxUKnE0USWpg7eFHmqUBV8kg6+PAFiWsvJ01+GMQPTMKhKZHyMysxW5AFHc6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "assert": "^2.1.0",
+ "bip39": "^3.1.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "^6.6.1",
+ "enc-utils": "^3.0.0",
+ "ethereum-cryptography": "^2.2.1",
+ "hash.js": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
},
- "node_modules/@types/q": {
- "version": "1.5.8",
+ "node_modules/@toruslabs/starkware-crypto/node_modules/bn.js": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz",
+ "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==",
"license": "MIT"
},
- "node_modules/@types/qs": {
- "version": "6.9.15",
- "license": "MIT"
+ "node_modules/@toruslabs/tweetnacl-js": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@toruslabs/tweetnacl-js/-/tweetnacl-js-1.0.4.tgz",
+ "integrity": "sha512-h8fVemW5pstsKbm/fTx+y61dZkh5Pepy/92lsyKp83KErf96jT+w4LGx4nEgeAVrdYQDTLg2tO7vu/boEb23Iw==",
+ "license": "Unlicense"
},
- "node_modules/@types/range-parser": {
- "version": "1.2.7",
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "dev": true,
"license": "MIT"
},
- "node_modules/@types/react": {
- "version": "18.3.18",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz",
- "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
"license": "MIT",
"dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.0.2"
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
- "node_modules/@types/react-dom": {
- "version": "18.2.17",
- "dev": true,
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.8",
"license": "MIT",
"dependencies": {
- "@types/react": "*"
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/@types/react-redux": {
- "version": "7.1.24",
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
"license": "MIT",
"dependencies": {
- "@types/hoist-non-react-statics": "^3.3.0",
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0",
- "redux": "^4.0.0"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/@types/resolve": {
- "version": "1.17.1",
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
+ "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@babel/types": "^7.20.7"
}
},
- "node_modules/@types/responselike": {
- "version": "1.0.3",
- "dev": true,
+ "node_modules/@types/body-parser": {
+ "version": "1.19.5",
"license": "MIT",
"dependencies": {
+ "@types/connect": "*",
"@types/node": "*"
}
},
- "node_modules/@types/retry": {
- "version": "0.12.0",
- "license": "MIT"
- },
- "node_modules/@types/semver": {
- "version": "7.5.8",
- "license": "MIT"
- },
- "node_modules/@types/send": {
- "version": "0.17.4",
+ "node_modules/@types/bonjour": {
+ "version": "3.5.13",
"license": "MIT",
"dependencies": {
- "@types/mime": "^1",
"@types/node": "*"
}
},
- "node_modules/@types/serve-index": {
- "version": "1.9.4",
+ "node_modules/@types/cacheable-request": {
+ "version": "6.0.3",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@types/express": "*"
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "^3.1.4",
+ "@types/node": "*",
+ "@types/responselike": "^1.0.0"
}
},
- "node_modules/@types/serve-static": {
- "version": "1.15.7",
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
"license": "MIT",
"dependencies": {
- "@types/http-errors": "*",
- "@types/node": "*",
- "@types/send": "*"
+ "@types/node": "*"
}
},
- "node_modules/@types/sinonjs__fake-timers": {
- "version": "8.1.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sizzle": {
- "version": "2.3.9",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sockjs": {
- "version": "0.3.36",
+ "node_modules/@types/connect-history-api-fallback": {
+ "version": "1.5.4",
"license": "MIT",
"dependencies": {
+ "@types/express-serve-static-core": "*",
"@types/node": "*"
}
},
- "node_modules/@types/stack-utils": {
- "version": "2.0.3",
- "license": "MIT"
- },
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "license": "MIT"
- },
- "node_modules/@types/verror": {
- "version": "1.10.8",
+ "node_modules/@types/debug": {
+ "version": "4.1.10",
"dev": true,
"license": "MIT",
- "optional": true
- },
- "node_modules/@types/w3c-web-usb": {
- "version": "1.0.10",
- "license": "MIT"
+ "dependencies": {
+ "@types/ms": "*"
+ }
},
- "node_modules/@types/ws": {
- "version": "8.5.10",
+ "node_modules/@types/eslint": {
+ "version": "8.56.10",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@types/estree": "*",
+ "@types/json-schema": "*"
}
},
- "node_modules/@types/yargs": {
- "version": "16.0.9",
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
"license": "MIT",
"dependencies": {
- "@types/yargs-parser": "*"
+ "@types/eslint": "*",
+ "@types/estree": "*"
}
},
- "node_modules/@types/yargs-parser": {
- "version": "21.0.3",
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
"license": "MIT"
},
- "node_modules/@types/yauzl": {
- "version": "2.10.0",
- "dev": true,
+ "node_modules/@types/express": {
+ "version": "4.17.21",
"license": "MIT",
- "optional": true,
"dependencies": {
- "@types/node": "*"
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
}
},
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.62.0",
+ "node_modules/@types/express-serve-static-core": {
+ "version": "4.19.5",
"license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.4.0",
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@types/formidable": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.2.8.tgz",
+ "integrity": "sha512-6psvrUy5VDYb+yaPJReF1WrRsz+FBwyJutK9Twz1Efa27tm07bARNIkK2B8ZPWq80dXqpKfrxTO96xrtPp+AuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/fs-extra": {
+ "version": "9.0.13",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.9",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "node_modules/@types/html-minifier-terser": {
+ "version": "6.1.0",
+ "license": "MIT"
+ },
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/http-errors": {
+ "version": "2.0.4",
+ "license": "MIT"
+ },
+ "node_modules/@types/http-proxy": {
+ "version": "1.17.14",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "license": "MIT"
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "license": "MIT"
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "license": "MIT"
+ },
+ "node_modules/@types/keyv": {
+ "version": "3.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "12.2.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "*",
+ "@types/mdurl": "*"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "license": "MIT"
+ },
+ "node_modules/@types/ms": {
+ "version": "0.7.33",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "17.0.39",
+ "license": "MIT"
+ },
+ "node_modules/@types/node-forge": {
+ "version": "1.3.11",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "license": "MIT"
+ },
+ "node_modules/@types/plist": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*",
+ "xmlbuilder": ">=11.0.1"
+ }
+ },
+ "node_modules/@types/prettier": {
+ "version": "2.7.3",
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "license": "MIT"
+ },
+ "node_modules/@types/q": {
+ "version": "1.5.8",
+ "license": "MIT"
+ },
+ "node_modules/@types/qs": {
+ "version": "6.9.15",
+ "license": "MIT"
+ },
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.18",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz",
+ "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.17",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-redux": {
+ "version": "7.1.24",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hoist-non-react-statics": "^3.3.0",
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0",
+ "redux": "^4.0.0"
+ }
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.17.1",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/responselike": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/retry": {
+ "version": "0.12.0",
+ "license": "MIT"
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "license": "MIT"
+ },
+ "node_modules/@types/send": {
+ "version": "0.17.4",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/serve-index": {
+ "version": "1.9.4",
+ "license": "MIT",
+ "dependencies": {
+ "@types/express": "*"
+ }
+ },
+ "node_modules/@types/serve-static": {
+ "version": "1.15.7",
+ "license": "MIT",
+ "dependencies": {
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.9",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/sockjs": {
+ "version": "0.3.36",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "license": "MIT"
+ },
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "license": "MIT"
+ },
+ "node_modules/@types/verror": {
+ "version": "1.10.8",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/@types/w3c-web-usb": {
+ "version": "1.0.10",
+ "license": "MIT"
+ },
+ "node_modules/@types/ws": {
+ "version": "8.5.10",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/yargs": {
+ "version": "16.0.9",
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.3",
+ "license": "MIT"
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.62.0",
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
"@typescript-eslint/scope-manager": "5.62.0",
"@typescript-eslint/type-utils": "5.62.0",
"@typescript-eslint/utils": "5.62.0",
@@ -6375,387 +7239,974 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.62.0",
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "@typescript-eslint/utils": "5.62.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.62.0",
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "license": "ISC"
+ },
+ "node_modules/@walletconnect/core": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.3.tgz",
+ "integrity": "sha512-57uv0FW4L6H/tmkb1kS2nG41MDguyDgZbGR58nkDUd1TO/HydyiTByVOhFzIxgN331cnY/1G1rMaKqncgdnOFA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@walletconnect/heartbeat": "1.2.2",
+ "@walletconnect/jsonrpc-provider": "1.0.14",
+ "@walletconnect/jsonrpc-types": "1.0.4",
+ "@walletconnect/jsonrpc-utils": "1.0.8",
+ "@walletconnect/jsonrpc-ws-connection": "1.0.16",
+ "@walletconnect/keyvaluestorage": "1.1.1",
+ "@walletconnect/logger": "2.1.2",
+ "@walletconnect/relay-api": "1.0.11",
+ "@walletconnect/relay-auth": "1.0.4",
+ "@walletconnect/safe-json": "1.0.2",
+ "@walletconnect/time": "1.0.2",
+ "@walletconnect/types": "2.17.3",
+ "@walletconnect/utils": "2.17.3",
+ "@walletconnect/window-getters": "1.0.1",
+ "events": "3.3.0",
+ "lodash.isequal": "4.5.0",
+ "uint8arrays": "3.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@walletconnect/core/node_modules/uint8arrays": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz",
+ "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==",
+ "license": "MIT",
+ "dependencies": {
+ "multiformats": "^9.4.2"
+ }
+ },
+ "node_modules/@walletconnect/environment": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz",
+ "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==",
+ "dependencies": {
+ "tslib": "1.14.1"
+ }
+ },
+ "node_modules/@walletconnect/events": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz",
+ "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==",
+ "dependencies": {
+ "keyvaluestorage-interface": "^1.0.0",
+ "tslib": "1.14.1"
+ }
+ },
+ "node_modules/@walletconnect/heartbeat": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz",
+ "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==",
+ "license": "MIT",
+ "dependencies": {
+ "@walletconnect/events": "^1.0.1",
+ "@walletconnect/time": "^1.0.2",
+ "events": "^3.3.0"
+ }
+ },
+ "node_modules/@walletconnect/jsonrpc-provider": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz",
+ "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==",
+ "license": "MIT",
+ "dependencies": {
+ "@walletconnect/jsonrpc-utils": "^1.0.8",
+ "@walletconnect/safe-json": "^1.0.2",
+ "events": "^3.3.0"
+ }
+ },
+ "node_modules/@walletconnect/jsonrpc-types": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz",
+ "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "events": "^3.3.0",
+ "keyvaluestorage-interface": "^1.0.0"
+ }
+ },
+ "node_modules/@walletconnect/jsonrpc-utils": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz",
+ "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==",
+ "dependencies": {
+ "@walletconnect/environment": "^1.0.1",
+ "@walletconnect/jsonrpc-types": "^1.0.3",
+ "tslib": "1.14.1"
+ }
+ },
+ "node_modules/@walletconnect/jsonrpc-ws-connection": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz",
+ "integrity": "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@walletconnect/jsonrpc-utils": "^1.0.6",
+ "@walletconnect/safe-json": "^1.0.2",
+ "events": "^3.3.0",
+ "ws": "^7.5.1"
+ }
+ },
+ "node_modules/@walletconnect/keyvaluestorage": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz",
+ "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==",
+ "dependencies": {
+ "@walletconnect/safe-json": "^1.0.1",
+ "idb-keyval": "^6.2.1",
+ "unstorage": "^1.9.0"
+ },
+ "peerDependencies": {
+ "@react-native-async-storage/async-storage": "1.x"
},
"peerDependenciesMeta": {
- "typescript": {
+ "@react-native-async-storage/async-storage": {
"optional": true
}
}
},
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "license": "MIT",
+ "node_modules/@walletconnect/logger": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz",
+ "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "@walletconnect/safe-json": "^1.0.2",
+ "pino": "7.11.0"
}
},
- "node_modules/@typescript-eslint/type-utils": {
- "version": "5.62.0",
- "license": "MIT",
+ "node_modules/@walletconnect/relay-api": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz",
+ "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==",
"dependencies": {
- "@typescript-eslint/typescript-estree": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
- "debug": "^4.3.4",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "@walletconnect/jsonrpc-types": "^1.0.2"
}
},
- "node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node_modules/@walletconnect/relay-auth": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz",
+ "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==",
+ "dependencies": {
+ "@stablelib/ed25519": "^1.0.2",
+ "@stablelib/random": "^1.0.1",
+ "@walletconnect/safe-json": "^1.0.1",
+ "@walletconnect/time": "^1.0.2",
+ "tslib": "1.14.1",
+ "uint8arrays": "^3.0.0"
}
},
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "license": "BSD-2-Clause",
+ "node_modules/@walletconnect/safe-json": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz",
+ "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "tslib": "1.14.1"
}
},
- "node_modules/@typescript-eslint/utils": {
- "version": "5.62.0",
- "license": "MIT",
+ "node_modules/@walletconnect/sign-client": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.3.tgz",
+ "integrity": "sha512-OzOWxRTfVGCHU3OOF6ibPkgPfDpivFJjuknfcOUt9PYWpTAv6YKOmT4cyfBPhc7llruyHpV44fYbykMcLIvEcg==",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "@walletconnect/core": "2.17.3",
+ "@walletconnect/events": "1.0.1",
+ "@walletconnect/heartbeat": "1.2.2",
+ "@walletconnect/jsonrpc-utils": "1.0.8",
+ "@walletconnect/logger": "2.1.2",
+ "@walletconnect/time": "1.0.2",
+ "@walletconnect/types": "2.17.3",
+ "@walletconnect/utils": "2.17.3",
+ "events": "3.3.0"
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "license": "MIT",
+ "node_modules/@walletconnect/time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz",
+ "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "tslib": "1.14.1"
}
},
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "license": "ISC"
- },
- "node_modules/@walletconnect/core": {
+ "node_modules/@walletconnect/types": {
"version": "2.17.3",
- "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.3.tgz",
- "integrity": "sha512-57uv0FW4L6H/tmkb1kS2nG41MDguyDgZbGR58nkDUd1TO/HydyiTByVOhFzIxgN331cnY/1G1rMaKqncgdnOFA==",
+ "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.3.tgz",
+ "integrity": "sha512-5eFxnbZGJJx0IQyCS99qz+OvozpLJJYfVG96dEHGgbzZMd+C9V1eitYqVClx26uX6V+WQVqVwjpD2Dyzie++Wg==",
"license": "Apache-2.0",
"dependencies": {
+ "@walletconnect/events": "1.0.1",
"@walletconnect/heartbeat": "1.2.2",
- "@walletconnect/jsonrpc-provider": "1.0.14",
"@walletconnect/jsonrpc-types": "1.0.4",
- "@walletconnect/jsonrpc-utils": "1.0.8",
- "@walletconnect/jsonrpc-ws-connection": "1.0.16",
"@walletconnect/keyvaluestorage": "1.1.1",
"@walletconnect/logger": "2.1.2",
+ "events": "3.3.0"
+ }
+ },
+ "node_modules/@walletconnect/utils": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.3.tgz",
+ "integrity": "sha512-tG77UpZNeLYgeOwViwWnifpyBatkPlpKSSayhN0gcjY1lZAUNqtYslpm4AdTxlrA3pL61MnyybXgWYT5eZjarw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ethersproject/hash": "5.7.0",
+ "@ethersproject/transactions": "5.7.0",
+ "@stablelib/chacha20poly1305": "1.0.1",
+ "@stablelib/hkdf": "1.0.1",
+ "@stablelib/random": "1.0.2",
+ "@stablelib/sha256": "1.0.1",
+ "@stablelib/x25519": "1.0.3",
+ "@walletconnect/jsonrpc-utils": "1.0.8",
+ "@walletconnect/keyvaluestorage": "1.1.1",
"@walletconnect/relay-api": "1.0.11",
"@walletconnect/relay-auth": "1.0.4",
"@walletconnect/safe-json": "1.0.2",
"@walletconnect/time": "1.0.2",
"@walletconnect/types": "2.17.3",
- "@walletconnect/utils": "2.17.3",
"@walletconnect/window-getters": "1.0.1",
- "events": "3.3.0",
- "lodash.isequal": "4.5.0",
+ "@walletconnect/window-metadata": "1.0.1",
+ "detect-browser": "5.3.0",
+ "elliptic": "6.6.1",
+ "query-string": "7.1.3",
"uint8arrays": "3.1.0"
+ }
+ },
+ "node_modules/@walletconnect/utils/node_modules/uint8arrays": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz",
+ "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==",
+ "license": "MIT",
+ "dependencies": {
+ "multiformats": "^9.4.2"
+ }
+ },
+ "node_modules/@walletconnect/window-getters": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz",
+ "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==",
+ "dependencies": {
+ "tslib": "1.14.1"
+ }
+ },
+ "node_modules/@walletconnect/window-metadata": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz",
+ "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==",
+ "dependencies": {
+ "@walletconnect/window-getters": "^1.0.1",
+ "tslib": "1.14.1"
+ }
+ },
+ "node_modules/@web3auth/auth": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/auth/-/auth-9.6.4.tgz",
+ "integrity": "sha512-Y1Swyg8mWCuSt93AY3AZIAwCC/WoaxTD6dYOW/A8j6srUOqiHtM2Dr/EvnhPoqOF1QYlA+0nzrwA/Vr/HYD0aw==",
+ "license": "MIT",
+ "dependencies": {
+ "@ethereumjs/util": "^9.1.0",
+ "@toruslabs/constants": "^14.2.0",
+ "@toruslabs/ffjavascript": "^4.0.0",
+ "@toruslabs/metadata-helpers": "^6.0.0",
+ "@toruslabs/secure-pub-sub": "^1.1.0",
+ "@toruslabs/session-manager": "^3.2.0",
+ "@toruslabs/starkware-crypto": "^4.0.1",
+ "@toruslabs/tweetnacl-js": "^1.0.4",
+ "base64url": "^3.0.1",
+ "bip39": "^3.1.0",
+ "bn.js": "^5.2.1",
+ "bowser": "^2.11.0",
+ "color": "^4.2.3",
+ "enc-utils": "^3.0.0",
+ "end-of-stream": "^1.4.4",
+ "events": "^3.3.0",
+ "fast-safe-stringify": "^2.1.1",
+ "json-stable-stringify": "^1.1.1",
+ "loglevel": "^1.9.2",
+ "once": "^1.4.0",
+ "pump": "^3.0.2",
+ "readable-stream": "^4.5.2",
+ "ts-custom-error": "^3.3.1",
+ "typed-emitter": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "optionalDependencies": {
+ "@nx/nx-linux-x64-gnu": "^20.2.2",
+ "@rollup/rollup-linux-x64-gnu": "^4.28.1"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
+ },
+ "node_modules/@web3auth/auth-adapter": {
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/@web3auth/auth-adapter/-/auth-adapter-9.7.0.tgz",
+ "integrity": "sha512-pjjaTZcn593avmpBvF4sKWEaxpr/eTQjuGqq6/o0RKi67IfD5HTsSREqgiBU1eM+ytPaKglKdPbKwXRgy7oHyQ==",
+ "license": "ISC",
+ "dependencies": {
+ "@web3auth/auth": "^9.6.4",
+ "@web3auth/base": "^9.7.0",
+ "@web3auth/base-provider": "^9.7.0",
+ "deepmerge": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x"
+ }
+ },
+ "node_modules/@web3auth/auth/node_modules/bn.js": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz",
+ "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==",
+ "license": "MIT"
+ },
+ "node_modules/@web3auth/auth/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@web3auth/auth/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/@web3auth/base": {
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/@web3auth/base/-/base-9.7.0.tgz",
+ "integrity": "sha512-lfKnszNhNQNP2Kwd363Hj28d5MxA7pa6zjS1sDR1XLkC0rrzd8psfNQu056y8Q7ZP9FGRGdhPyz5PVE89xtL4w==",
+ "license": "ISC",
+ "dependencies": {
+ "@toruslabs/base-controllers": "^7.2.1",
+ "@toruslabs/constants": "^14.2.0",
+ "@toruslabs/http-helpers": "^7.0.0",
+ "@web3auth/auth": "^9.6.4",
+ "jwt-decode": "^4.0.0",
+ "loglevel": "^1.9.2",
+ "ts-custom-error": "^3.3.1"
},
"engines": {
- "node": ">=18"
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x"
}
},
- "node_modules/@walletconnect/core/node_modules/uint8arrays": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz",
- "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==",
- "license": "MIT",
+ "node_modules/@web3auth/base-provider": {
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-9.7.0.tgz",
+ "integrity": "sha512-UqtdbtEU8zf4NJhQjfB0fdCsNu/ZdDZ8ntT7vDKciDNTg/+53z4CmWbI9q6NChZMDwg89tWngoqPF1Q0XsIlzw==",
+ "license": "ISC",
"dependencies": {
- "multiformats": "^9.4.2"
+ "@toruslabs/base-controllers": "^7.2.1",
+ "@web3auth/auth": "^9.6.4",
+ "@web3auth/base": "^9.7.0",
+ "json-rpc-random-id": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@walletconnect/environment": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz",
- "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==",
- "dependencies": {
- "tslib": "1.14.1"
+ "node_modules/@web3auth/base/node_modules/@sentry/core": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.2.tgz",
+ "integrity": "sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=14.18"
}
},
- "node_modules/@walletconnect/events": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz",
- "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==",
+ "node_modules/@web3auth/base/node_modules/@sentry/types": {
+ "version": "8.55.2",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.55.2.tgz",
+ "integrity": "sha512-6MH7sKopaAY1XAIoOirjkkhHZfH3TBuIyErtUH29jvHcdHQFQPk42vX82jBL6csGB8wbsHCWjrBh6y2KqtaknA==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "keyvaluestorage-interface": "^1.0.0",
- "tslib": "1.14.1"
+ "@sentry/core": "8.55.2"
+ },
+ "engines": {
+ "node": ">=14.18"
}
},
- "node_modules/@walletconnect/heartbeat": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz",
- "integrity": "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==",
+ "node_modules/@web3auth/base/node_modules/@toruslabs/http-helpers": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-7.0.1.tgz",
+ "integrity": "sha512-9LqvgH/JfMtgZSzRqSutDfXZ5gw6+hziByYgzOzLGTO3WcqALAKCcO+icvcNI/NCw8HW4xpTM2xZIEkkEcFYPg==",
"license": "MIT",
"dependencies": {
- "@walletconnect/events": "^1.0.1",
- "@walletconnect/time": "^1.0.2",
- "events": "^3.3.0"
+ "deepmerge": "^4.3.1",
+ "loglevel": "^1.9.2"
+ },
+ "engines": {
+ "node": ">=20.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^8.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@walletconnect/jsonrpc-provider": {
- "version": "1.0.14",
- "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz",
- "integrity": "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==",
- "license": "MIT",
+ "node_modules/@web3auth/no-modal": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/no-modal/-/no-modal-8.12.4.tgz",
+ "integrity": "sha512-iJj3qXGB1exnOSaJ+8iSNbvfsvubefu+1G+vt1iiiinX0zKX0OGJM1zR5XQsdtwPpgzZHYiA57RLxiSGxKtB1g==",
+ "deprecated": "Not supported. Pls upgrade",
+ "license": "ISC",
"dependencies": {
- "@walletconnect/jsonrpc-utils": "^1.0.8",
- "@walletconnect/safe-json": "^1.0.2",
- "events": "^3.3.0"
+ "@toruslabs/openlogin": "^8.2.1",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "@web3auth/base": "^8.12.4",
+ "@web3auth/base-provider": "^8.12.4",
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.merge": "^4.6.2"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@web3auth/openlogin-adapter": "^8.x",
+ "@web3auth/wallet-connect-v2-adapter": "^8.x"
+ },
+ "peerDependenciesMeta": {
+ "@web3auth/openlogin-adapter": {
+ "optional": true
+ },
+ "@web3auth/wallet-connect-v2-adapter": {
+ "optional": true
+ }
}
},
- "node_modules/@walletconnect/jsonrpc-types": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz",
- "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==",
+ "node_modules/@web3auth/no-modal/node_modules/@sentry/types": {
+ "version": "7.120.4",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.4.tgz",
+ "integrity": "sha512-cUq2hSSe6/qrU6oZsEP4InMI5VVdD86aypE+ENrQ6eZEVLTCYm1w6XhW1NvIu3UuWh7gZec4a9J7AFpYxki88Q==",
"license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@web3auth/no-modal/node_modules/@toruslabs/base-controllers": {
+ "version": "5.11.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-5.11.0.tgz",
+ "integrity": "sha512-5AsGOlpf3DRIsd6PzEemBoRq+o2OhgSFXj5LZD6gXcBlfe0OpF+ydJb7Q8rIt5wwpQLNJCs8psBUbqIv7ukD2w==",
+ "license": "ISC",
"dependencies": {
- "events": "^3.3.0",
- "keyvaluestorage-interface": "^1.0.0"
+ "@ethereumjs/util": "^9.0.3",
+ "@toruslabs/broadcast-channel": "^10.0.2",
+ "@toruslabs/http-helpers": "^6.1.1",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "async-mutex": "^0.5.0",
+ "bignumber.js": "^9.1.2",
+ "bowser": "^2.11.0",
+ "jwt-decode": "^4.0.0",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@walletconnect/jsonrpc-utils": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz",
- "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==",
+ "node_modules/@web3auth/no-modal/node_modules/@toruslabs/broadcast-channel": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-10.0.2.tgz",
+ "integrity": "sha512-aZbKNgV/OhiTKSdxBTGO86xRdeR7Ct1vkB8yeyXRX32moARhZ69uJQL49jKh4cWKV3VeijrL9XvKdn5bzgHQZg==",
+ "license": "MIT",
"dependencies": {
- "@walletconnect/environment": "^1.0.1",
- "@walletconnect/jsonrpc-types": "^1.0.3",
- "tslib": "1.14.1"
+ "@babel/runtime": "^7.24.0",
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/metadata-helpers": "^5.1.0",
+ "loglevel": "^1.9.1",
+ "oblivious-set": "1.4.0",
+ "socket.io-client": "^4.7.5",
+ "unload": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@walletconnect/jsonrpc-ws-connection": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz",
- "integrity": "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==",
+ "node_modules/@web3auth/no-modal/node_modules/@toruslabs/constants": {
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-13.4.0.tgz",
+ "integrity": "sha512-CjmnMQ5Oj0bqSBGkhv7Xm3LciGJDHwe4AJ1LF6mijlP+QcCnUM5I6kVp60j7zZ/r0DT7nIEiuHHHczGpCZor0A==",
"license": "MIT",
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
+ },
+ "node_modules/@web3auth/no-modal/node_modules/@toruslabs/eccrypto": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-4.0.0.tgz",
+ "integrity": "sha512-Z3EINkbsgJx1t6jCDVIJjLSUEGUtNIeDjhMWmeDGOWcP/+v/yQ1hEvd1wfxEz4q5WqIHhevacmPiVxiJ4DljGQ==",
+ "license": "CC0-1.0",
"dependencies": {
- "@walletconnect/jsonrpc-utils": "^1.0.6",
- "@walletconnect/safe-json": "^1.0.2",
- "events": "^3.3.0",
- "ws": "^7.5.1"
+ "elliptic": "^6.5.4"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@walletconnect/keyvaluestorage": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz",
- "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==",
+ "node_modules/@web3auth/no-modal/node_modules/@toruslabs/http-helpers": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz",
+ "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==",
+ "license": "MIT",
"dependencies": {
- "@walletconnect/safe-json": "^1.0.1",
- "idb-keyval": "^6.2.1",
- "unstorage": "^1.9.0"
+ "lodash.merge": "^4.6.2",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
},
"peerDependencies": {
- "@react-native-async-storage/async-storage": "1.x"
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^7.x"
},
"peerDependenciesMeta": {
- "@react-native-async-storage/async-storage": {
+ "@sentry/types": {
"optional": true
}
}
},
- "node_modules/@walletconnect/logger": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz",
- "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==",
+ "node_modules/@web3auth/no-modal/node_modules/@toruslabs/metadata-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-5.1.0.tgz",
+ "integrity": "sha512-7fdqKuWUaJT/ng+PlqrA4XKkn8Dij4JJozfv/4gHTi0f/6JFncpzIces09jTV70hCf0JIsTCvIDlzKOdJ+aeZg==",
+ "license": "MIT",
"dependencies": {
- "@walletconnect/safe-json": "^1.0.2",
- "pino": "7.11.0"
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/http-helpers": "^6.1.0",
+ "elliptic": "^6.5.5",
+ "ethereum-cryptography": "^2.1.3",
+ "json-stable-stringify": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@walletconnect/relay-api": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz",
- "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==",
+ "node_modules/@web3auth/no-modal/node_modules/@web3auth/base": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/base/-/base-8.12.4.tgz",
+ "integrity": "sha512-RyHF3KZ0SwTglj1CSPo1tp3s9dZKqaDwvmCN48wgJsC288tAFGvZyqFTqeM10WX56OwUcLBrRl4w7oHpYJ8uXg==",
+ "deprecated": "Not supported. Pls upgrade",
+ "license": "ISC",
"dependencies": {
- "@walletconnect/jsonrpc-types": "^1.0.2"
+ "@toruslabs/constants": "^13.4.0",
+ "@toruslabs/http-helpers": "^6.1.1",
+ "@toruslabs/openlogin": "^8.2.1",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "jwt-decode": "^4.0.0",
+ "loglevel": "^1.9.1",
+ "ts-custom-error": "^3.3.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x"
}
},
- "node_modules/@walletconnect/relay-auth": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz",
- "integrity": "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==",
+ "node_modules/@web3auth/no-modal/node_modules/@web3auth/base-provider": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-8.12.4.tgz",
+ "integrity": "sha512-LXhc0h/EG9FWGg86+CiLOi2XyZl9rm/fzJmuX8aP7bQbGz+TfbtSIX+0hZvYTAXJnj7vcHCMUj+hwh8hKn6W0A==",
+ "license": "ISC",
"dependencies": {
- "@stablelib/ed25519": "^1.0.2",
- "@stablelib/random": "^1.0.1",
- "@walletconnect/safe-json": "^1.0.1",
- "@walletconnect/time": "^1.0.2",
- "tslib": "1.14.1",
- "uint8arrays": "^3.0.0"
+ "@toruslabs/base-controllers": "^5.10.0",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@web3auth/base": "^8.12.4",
+ "json-rpc-random-id": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@walletconnect/safe-json": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz",
- "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==",
+ "node_modules/@web3auth/openlogin-adapter": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/openlogin-adapter/-/openlogin-adapter-8.12.4.tgz",
+ "integrity": "sha512-bxvq6hwzbgkaYOXxzJPJmhPrBoQTxBhVdgMqPLGkvQT2Izg8IV+uic+xOfjp4Ng663N3l2HV4yx0qCqdYCHj/w==",
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "tslib": "1.14.1"
+ "@toruslabs/openlogin": "^8.2.1",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "@web3auth/base": "^8.12.4",
+ "@web3auth/base-provider": "^8.12.4",
+ "lodash.merge": "^4.6.2"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x"
}
},
- "node_modules/@walletconnect/sign-client": {
- "version": "2.17.3",
- "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.3.tgz",
- "integrity": "sha512-OzOWxRTfVGCHU3OOF6ibPkgPfDpivFJjuknfcOUt9PYWpTAv6YKOmT4cyfBPhc7llruyHpV44fYbykMcLIvEcg==",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@sentry/types": {
+ "version": "7.120.4",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.4.tgz",
+ "integrity": "sha512-cUq2hSSe6/qrU6oZsEP4InMI5VVdD86aypE+ENrQ6eZEVLTCYm1w6XhW1NvIu3UuWh7gZec4a9J7AFpYxki88Q==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@toruslabs/base-controllers": {
+ "version": "5.11.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-5.11.0.tgz",
+ "integrity": "sha512-5AsGOlpf3DRIsd6PzEemBoRq+o2OhgSFXj5LZD6gXcBlfe0OpF+ydJb7Q8rIt5wwpQLNJCs8psBUbqIv7ukD2w==",
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@walletconnect/core": "2.17.3",
- "@walletconnect/events": "1.0.1",
- "@walletconnect/heartbeat": "1.2.2",
- "@walletconnect/jsonrpc-utils": "1.0.8",
- "@walletconnect/logger": "2.1.2",
- "@walletconnect/time": "1.0.2",
- "@walletconnect/types": "2.17.3",
- "@walletconnect/utils": "2.17.3",
- "events": "3.3.0"
+ "@ethereumjs/util": "^9.0.3",
+ "@toruslabs/broadcast-channel": "^10.0.2",
+ "@toruslabs/http-helpers": "^6.1.1",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "async-mutex": "^0.5.0",
+ "bignumber.js": "^9.1.2",
+ "bowser": "^2.11.0",
+ "jwt-decode": "^4.0.0",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@walletconnect/time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz",
- "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@toruslabs/broadcast-channel": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-10.0.2.tgz",
+ "integrity": "sha512-aZbKNgV/OhiTKSdxBTGO86xRdeR7Ct1vkB8yeyXRX32moARhZ69uJQL49jKh4cWKV3VeijrL9XvKdn5bzgHQZg==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "tslib": "1.14.1"
+ "@babel/runtime": "^7.24.0",
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/metadata-helpers": "^5.1.0",
+ "loglevel": "^1.9.1",
+ "oblivious-set": "1.4.0",
+ "socket.io-client": "^4.7.5",
+ "unload": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@walletconnect/types": {
- "version": "2.17.3",
- "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.3.tgz",
- "integrity": "sha512-5eFxnbZGJJx0IQyCS99qz+OvozpLJJYfVG96dEHGgbzZMd+C9V1eitYqVClx26uX6V+WQVqVwjpD2Dyzie++Wg==",
- "license": "Apache-2.0",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@toruslabs/constants": {
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-13.4.0.tgz",
+ "integrity": "sha512-CjmnMQ5Oj0bqSBGkhv7Xm3LciGJDHwe4AJ1LF6mijlP+QcCnUM5I6kVp60j7zZ/r0DT7nIEiuHHHczGpCZor0A==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
+ }
+ },
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@toruslabs/eccrypto": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-4.0.0.tgz",
+ "integrity": "sha512-Z3EINkbsgJx1t6jCDVIJjLSUEGUtNIeDjhMWmeDGOWcP/+v/yQ1hEvd1wfxEz4q5WqIHhevacmPiVxiJ4DljGQ==",
+ "license": "CC0-1.0",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@walletconnect/events": "1.0.1",
- "@walletconnect/heartbeat": "1.2.2",
- "@walletconnect/jsonrpc-types": "1.0.4",
- "@walletconnect/keyvaluestorage": "1.1.1",
- "@walletconnect/logger": "2.1.2",
- "events": "3.3.0"
+ "elliptic": "^6.5.4"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
}
},
- "node_modules/@walletconnect/utils": {
- "version": "2.17.3",
- "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.3.tgz",
- "integrity": "sha512-tG77UpZNeLYgeOwViwWnifpyBatkPlpKSSayhN0gcjY1lZAUNqtYslpm4AdTxlrA3pL61MnyybXgWYT5eZjarw==",
- "license": "Apache-2.0",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@toruslabs/http-helpers": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz",
+ "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@ethersproject/hash": "5.7.0",
- "@ethersproject/transactions": "5.7.0",
- "@stablelib/chacha20poly1305": "1.0.1",
- "@stablelib/hkdf": "1.0.1",
- "@stablelib/random": "1.0.2",
- "@stablelib/sha256": "1.0.1",
- "@stablelib/x25519": "1.0.3",
- "@walletconnect/jsonrpc-utils": "1.0.8",
- "@walletconnect/keyvaluestorage": "1.1.1",
- "@walletconnect/relay-api": "1.0.11",
- "@walletconnect/relay-auth": "1.0.4",
- "@walletconnect/safe-json": "1.0.2",
- "@walletconnect/time": "1.0.2",
- "@walletconnect/types": "2.17.3",
- "@walletconnect/window-getters": "1.0.1",
- "@walletconnect/window-metadata": "1.0.1",
- "detect-browser": "5.3.0",
- "elliptic": "6.6.1",
- "query-string": "7.1.3",
- "uint8arrays": "3.1.0"
+ "lodash.merge": "^4.6.2",
+ "loglevel": "^1.9.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x",
+ "@sentry/types": "^7.x"
+ },
+ "peerDependenciesMeta": {
+ "@sentry/types": {
+ "optional": true
+ }
}
},
- "node_modules/@walletconnect/utils/node_modules/uint8arrays": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz",
- "integrity": "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@toruslabs/metadata-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-5.1.0.tgz",
+ "integrity": "sha512-7fdqKuWUaJT/ng+PlqrA4XKkn8Dij4JJozfv/4gHTi0f/6JFncpzIces09jTV70hCf0JIsTCvIDlzKOdJ+aeZg==",
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "multiformats": "^9.4.2"
+ "@toruslabs/eccrypto": "^4.0.0",
+ "@toruslabs/http-helpers": "^6.1.0",
+ "elliptic": "^6.5.5",
+ "ethereum-cryptography": "^2.1.3",
+ "json-stable-stringify": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
- "node_modules/@walletconnect/window-getters": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz",
- "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@web3auth/base": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/base/-/base-8.12.4.tgz",
+ "integrity": "sha512-RyHF3KZ0SwTglj1CSPo1tp3s9dZKqaDwvmCN48wgJsC288tAFGvZyqFTqeM10WX56OwUcLBrRl4w7oHpYJ8uXg==",
+ "deprecated": "Not supported. Pls upgrade",
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "tslib": "1.14.1"
+ "@toruslabs/constants": "^13.4.0",
+ "@toruslabs/http-helpers": "^6.1.1",
+ "@toruslabs/openlogin": "^8.2.1",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@toruslabs/openlogin-utils": "^8.2.1",
+ "jwt-decode": "^4.0.0",
+ "loglevel": "^1.9.1",
+ "ts-custom-error": "^3.3.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.x"
}
},
- "node_modules/@walletconnect/window-metadata": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz",
- "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==",
+ "node_modules/@web3auth/openlogin-adapter/node_modules/@web3auth/base-provider": {
+ "version": "8.12.4",
+ "resolved": "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-8.12.4.tgz",
+ "integrity": "sha512-LXhc0h/EG9FWGg86+CiLOi2XyZl9rm/fzJmuX8aP7bQbGz+TfbtSIX+0hZvYTAXJnj7vcHCMUj+hwh8hKn6W0A==",
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@walletconnect/window-getters": "^1.0.1",
- "tslib": "1.14.1"
+ "@toruslabs/base-controllers": "^5.10.0",
+ "@toruslabs/openlogin-jrpc": "^8.3.0",
+ "@web3auth/base": "^8.12.4",
+ "json-rpc-random-id": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=18.x",
+ "npm": ">=9.x"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "7.x"
}
},
"node_modules/@webassemblyjs/ast": {
@@ -6907,7 +8358,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"event-target-shim": "^5.0.0"
@@ -8616,7 +10066,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
"integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"is-nan": "^1.3.2",
@@ -8657,6 +10106,21 @@
"node": ">=0.12.0"
}
},
+ "node_modules/async-mutex": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz",
+ "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/async-mutex/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
"node_modules/asynciterator.prototype": {
"version": "1.0.0",
"license": "MIT",
@@ -9260,6 +10724,15 @@
],
"license": "MIT"
},
+ "node_modules/base64url": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/batch": {
"version": "0.6.1",
"license": "MIT"
@@ -9299,6 +10772,15 @@
"node": "*"
}
},
+ "node_modules/bignumber.js": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
+ "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/binary-extensions": {
"version": "2.2.0",
"license": "MIT",
@@ -9313,6 +10795,15 @@
"file-uri-to-path": "1.0.0"
}
},
+ "node_modules/bip39": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz",
+ "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==",
+ "license": "ISC",
+ "dependencies": {
+ "@noble/hashes": "^1.2.0"
+ }
+ },
"node_modules/bitcore-lib": {
"version": "8.25.10",
"resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.25.10.tgz",
@@ -9488,6 +10979,12 @@
"popper.js": "^1.16.1"
}
},
+ "node_modules/bowser": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz",
+ "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==",
+ "license": "MIT"
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"license": "MIT",
@@ -10043,7 +11540,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@@ -10448,6 +11944,19 @@
"version": "1.0.2",
"license": "MIT"
},
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
"node_modules/color-convert": {
"version": "1.9.3",
"license": "MIT",
@@ -10459,6 +11968,34 @@
"version": "1.1.3",
"license": "MIT"
},
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
"node_modules/colord": {
"version": "2.9.3",
"license": "MIT"
@@ -11564,7 +13101,9 @@
"license": "MIT"
},
"node_modules/debug": {
- "version": "4.4.0",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -11627,7 +13166,9 @@
"license": "MIT"
},
"node_modules/deepmerge": {
- "version": "4.2.2",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -12565,6 +14106,16 @@
"node": ">= 4"
}
},
+ "node_modules/enc-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/enc-utils/-/enc-utils-3.0.0.tgz",
+ "integrity": "sha512-e57t/Z2HzWOLwOp7DZcV0VMEY8t7ptWwsxyp6kM2b2zrk6JqIpXxzkruHAMiBsy5wg9jp/183GdiRXCvBtzsYg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-typedarray": "1.0.0",
+ "typedarray-to-buffer": "3.1.5"
+ }
+ },
"node_modules/encodeurl": {
"version": "1.0.2",
"license": "MIT",
@@ -12598,6 +14149,49 @@
"once": "^1.4.0"
}
},
+ "node_modules/engine.io-client": {
+ "version": "6.6.5",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.5.tgz",
+ "integrity": "sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.20.1",
+ "xmlhttprequest-ssl": "~2.1.1"
+ }
+ },
+ "node_modules/engine.io-client/node_modules/ws": {
+ "version": "8.20.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz",
+ "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==",
+ "license": "MIT",
+ "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
+ }
+ }
+ },
+ "node_modules/engine.io-parser": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+ "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/enhanced-resolve": {
"version": "5.17.0",
"license": "MIT",
@@ -13882,11 +15476,34 @@
"node": ">= 0.6"
}
},
+ "node_modules/ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
+ }
+ },
+ "node_modules/ethereum-cryptography/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -14205,6 +15822,12 @@
"node": ">=6"
}
},
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "license": "MIT"
+ },
"node_modules/fastq": {
"version": "1.17.1",
"license": "ISC",
@@ -15955,7 +17578,6 @@
},
"node_modules/is-arguments": {
"version": "1.1.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
@@ -16193,7 +17815,6 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
"integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3"
@@ -18775,6 +20396,12 @@
"version": "2.3.1",
"license": "MIT"
},
+ "node_modules/json-rpc-random-id": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz",
+ "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==",
+ "license": "ISC"
+ },
"node_modules/json-schema": {
"version": "0.4.0",
"license": "(AFL-2.1 OR BSD-3-Clause)"
@@ -18787,7 +20414,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
"integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
@@ -18811,7 +20437,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
"license": "MIT"
},
"node_modules/json-stringify-safe": {
@@ -18840,7 +20465,6 @@
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
"integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
- "dev": true,
"license": "Public Domain",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -18914,6 +20538,15 @@
"setimmediate": "^1.0.5"
}
},
+ "node_modules/jwt-decode": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz",
+ "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/keygrip": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
@@ -19364,6 +20997,12 @@
"version": "4.17.21",
"license": "MIT"
},
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+ "license": "MIT"
+ },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"license": "MIT"
@@ -19530,6 +21169,19 @@
"node": ">=8"
}
},
+ "node_modules/loglevel": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
+ "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ },
+ "funding": {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/loglevel"
+ }
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"license": "MIT",
@@ -20519,7 +22171,6 @@
},
"node_modules/object-is": {
"version": "1.1.5",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
@@ -21583,6 +23234,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/oblivious-set": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.4.0.tgz",
+ "integrity": "sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/obuf": {
"version": "1.1.2",
"license": "MIT"
@@ -23490,7 +25150,6 @@
},
"node_modules/process": {
"version": "0.11.10",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
@@ -23604,7 +25263,9 @@
}
},
"node_modules/pump": {
- "version": "3.0.0",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz",
+ "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
"license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
@@ -25739,6 +27400,21 @@
],
"license": "MIT"
},
+ "node_modules/simple-swizzle": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
+ "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
+ "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
+ "license": "MIT"
+ },
"node_modules/simple-update-notifier": {
"version": "2.0.0",
"dev": true,
@@ -25817,6 +27493,34 @@
"npm": ">= 3.0.0"
}
},
+ "node_modules/socket.io-client": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
+ "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-client": "~6.6.1",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-parser": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz",
+ "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/sockjs": {
"version": "0.3.24",
"license": "MIT",
@@ -27435,6 +29139,15 @@
"version": "1.0.1",
"license": "MIT"
},
+ "node_modules/ts-custom-error": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz",
+ "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"license": "Apache-2.0"
@@ -27920,6 +29633,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/typed-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
+ "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
+ "license": "MIT",
+ "optionalDependencies": {
+ "rxjs": "*"
+ }
+ },
"node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"license": "MIT",
@@ -28106,6 +29828,15 @@
"uuid": "dist/bin/uuid"
}
},
+ "node_modules/unload": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/unload/-/unload-2.4.1.tgz",
+ "integrity": "sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==",
+ "license": "Apache-2.0",
+ "funding": {
+ "url": "https://github.com/sponsors/pubkey"
+ }
+ },
"node_modules/unorm": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
@@ -28336,7 +30067,6 @@
"version": "0.12.5",
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
"integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
- "dev": true,
"dependencies": {
"inherits": "^2.0.3",
"is-arguments": "^1.0.4",
@@ -28365,8 +30095,7 @@
"node_modules/util/node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/utila": {
"version": "0.4.0",
@@ -29416,6 +31145,14 @@
"dev": true,
"license": "Apache-2.0"
},
+ "node_modules/xmlhttprequest-ssl": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+ "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/xtend": {
"version": "4.0.2",
"dev": true,
diff --git a/package.json b/package.json
index 2bb43a288..3451ad07c 100644
--- a/package.json
+++ b/package.json
@@ -38,13 +38,17 @@
},
"dependencies": {
"@hathor/hathor-rpc-handler": "4.4.0",
- "@hathor/wallet-lib": "3.1.1",
+ "@hathor/wallet-lib": "file:.yalc/@hathor/wallet-lib",
"@ledgerhq/hw-transport-node-hid": "6.28.1",
"@reduxjs/toolkit": "2.2.3",
"@reown/walletkit": "1.1.2",
"@sentry/electron": "3.0.7",
"@walletconnect/core": "2.17.3",
"@walletconnect/utils": "2.17.3",
+ "@web3auth/auth-adapter": "^9.7.0",
+ "@web3auth/base": "^9.7.0",
+ "@web3auth/base-provider": "^9.7.0",
+ "@web3auth/no-modal": "^8.12.4",
"axios": "1.7.7",
"babel-polyfill": "6.26.0",
"bootstrap": "4.6.1",
diff --git a/public/electron.js b/public/electron.js
index d29e68da7..088cfd65e 100644
--- a/public/electron.js
+++ b/public/electron.js
@@ -71,6 +71,33 @@ function createWindow () {
// Adding wallet version to user agent, so we can get in all request headers
mainWindow.webContents.setUserAgent(mainWindow.webContents.getUserAgent() + ' HathorWallet/' + constants.versionNumber);
+ mainWindow.webContents.setWindowOpenHandler(({ url }) => {
+ // Allow the Web3Auth OAuth popup (and follow-up provider redirects).
+ const isAuthHost = (
+ url.startsWith('https://auth.web3auth.io/')
+ || url.startsWith('https://accounts.google.com/')
+ || url.startsWith('https://appleid.apple.com/')
+ );
+ if (!isAuthHost) {
+ return { action: 'deny' };
+ }
+ return {
+ action: 'allow',
+ overrideBrowserWindowOptions: {
+ width: 480,
+ height: 720,
+ frame: true,
+ autoHideMenuBar: true,
+ webPreferences: {
+ nodeIntegration: false,
+ contextIsolation: true,
+ sandbox: true,
+ partition: 'persist:web3auth',
+ },
+ },
+ };
+ });
+
mainWindow.once('ready-to-show', () => {
mainWindow.show()
})
diff --git a/qa/QA.md b/qa/QA.md
new file mode 100644
index 000000000..cc921dada
--- /dev/null
+++ b/qa/QA.md
@@ -0,0 +1,98 @@
+# Hathor Desktop Wallet — QA
+
+This document captures manual QA scenarios required before releasing the desktop wallet.
+Run all scenarios on the target platforms before sign-off.
+
+## Web3Auth Social Login
+
+Run on testnet first. Mainnet scenarios are gated on the Web3Auth Mainnet project
+provisioning.
+
+### Setup
+
+- Toggle `web3auth-desktop.rollout` ON in Unleash (or use the local fallback by
+ editing `FEATURE_TOGGLE_DEFAULTS` in `src/constants.js` and rebuilding).
+- Sign out of any existing wallet so the Welcome → WalletType flow is reachable.
+
+### Scenario 1 — Happy path: first-time login
+
+1. Click `Sign in with social`.
+2. Click `Continue with Google`.
+3. Complete Google OAuth in the popup BrowserWindow.
+4. Complete MFA setup (mandatory) in the Web3Auth-hosted webview.
+5. Set a PIN and password.
+6. Verify the wallet dashboard loads.
+7. Receive 1 HTR on testnet from a faucet.
+8. Send 0.5 HTR back to the faucet.
+
+Expected: each step completes without errors. Sentry receives no error events.
+
+### Scenario 2 — Restart and unlock with PIN
+
+1. Quit the app (Cmd+Q).
+2. Relaunch.
+3. Verify the LockedWallet screen appears (PIN prompt, no seed words).
+4. Enter PIN.
+5. Verify the dashboard reappears with the same balance as before.
+
+### Scenario 3 — Sign out and back in
+
+1. From Settings, click `Sign out of your Hathor account `.
+2. Confirm.
+3. From Welcome → WalletType, click `Sign in with social` → `Continue with Google`.
+ (MFA is NOT prompted this time.)
+4. Set a new PIN.
+5. Verify the same Hathor address as before is shown in `Receive`.
+
+### Scenario 4 — Cancel OAuth popup
+
+1. Click `Continue with Google`, close the popup without authenticating.
+2. Expected: silent return to the social login screen, no error dialog.
+
+### Scenario 5 — Offline
+
+1. Disable the network.
+2. Click `Continue with Google`.
+3. Expected: `Web3AuthErrorDialog` with "Connection problem" copy and a Try again
+ button.
+
+### Scenario 6 — Abort MFA setup
+
+1. Click `Continue with Google`, complete Google OAuth, then close the MFA webview
+ without configuring a factor.
+2. Expected: `Web3AuthErrorDialog` with "Set up a recovery factor" copy.
+
+### Scenario 7 — Feature toggle off (with existing wallet)
+
+1. With a Web3Auth wallet active, sign out.
+2. Disable `web3auth-desktop.rollout`.
+3. Open the app — the WalletType screen is reachable, and the `Sign in with social`
+ button is NOT shown.
+4. Sign in with social again is not possible. But if the user had NOT signed out, the
+ LockedWallet screen would still be reachable and the wallet could be unlocked with
+ PIN. (Verify by retesting with a wallet that was not signed out.)
+
+### Scenario 8 — Cross-platform key portability
+
+1. Sign in via Web3Auth on the desktop wallet (testnet).
+2. Note the address shown in `Receive`.
+3. Sign in via the mobile wallet using the same Google account on testnet.
+4. Verify the same address is displayed.
+
+### Scenario 9 — Mainnet (when provisioned)
+
+1. Switch the Hathor network to mainnet in Settings.
+2. Attempt social login.
+3. Until provisioned: `Web3AuthErrorDialog` shows "Sign-in temporarily unavailable".
+4. Once provisioned: same as Scenario 1 but on mainnet.
+
+### Scenario 10 — Single-key UI invariants
+
+1. Sign in via Web3Auth.
+2. Verify the following menu entries are NOT visible:
+ - Reown / WalletConnect (in Settings)
+ - Atomic Swap (in top navigation)
+ - Nano Contract (in top navigation)
+3. Open the `Receive` screen — verify the "Generate new address" button is NOT shown.
+4. Settings → reset row label reads "Sign out of your Hathor account <email>",
+ not "Reset wallet".
diff --git a/src/App.js b/src/App.js
index b12672169..2568491dd 100644
--- a/src/App.js
+++ b/src/App.js
@@ -57,6 +57,9 @@ import LOCAL_STORE from './storage';
import { getGlobalWallet } from "./modules/wallet";
import ReownConnect from './screens/ReownConnect';
import NetworkSettingsRecovery from './screens/NetworkSettingsRecovery';
+import Web3AuthLogin from './screens/Web3AuthLogin';
+import Web3AuthRecovery from './screens/Web3AuthRecovery';
+import { restoreWeb3AuthState } from './sagas/web3auth';
function Root() {
const {
@@ -85,6 +88,13 @@ function Root() {
}
}, [ledgerClosed]);
+ // Restore Web3Auth identity (walletType + email) from localStorage on boot
+ // so the rest of the app can branch on walletType without waiting on saga
+ // hydration. See sagas/web3auth.js#restoreWeb3AuthState.
+ useEffect(() => {
+ restoreWeb3AuthState(dispatch);
+ }, [dispatch]);
+
/**
* Initializes the application, including:
* - LocalStorage migration
@@ -215,6 +225,8 @@ function Root() {
} />} />
} loaded={false} />} />
} loaded={false} />} />
+ } />
+ } />
} loaded={false} />} />
} />} />
} />
diff --git a/src/actions/index.js b/src/actions/index.js
index ffcf449a1..503d811e5 100644
--- a/src/actions/index.js
+++ b/src/actions/index.js
@@ -52,6 +52,8 @@ export const types = {
FEATURE_TOGGLE_INITIALIZED: 'FEATURE_TOGGLE_INITIALIZED',
SET_FEATURE_TOGGLES: 'SET_FEATURE_TOGGLES',
SET_UNLEASH_CLIENT: 'SET_UNLEASH_CLIENT',
+ SET_WALLET_TYPE: 'SET_WALLET_TYPE',
+ SET_WEB3AUTH_EMAIL: 'SET_WEB3AUTH_EMAIL',
UPDATE_TX_HISTORY: 'UPDATE_TX_HISTORY',
SET_NATIVE_TOKEN_DATA: 'SET_NATIVE_TOKEN_DATA',
ADD_REGISTERED_TOKENS: 'ADD_REGISTERED_TOKENS',
@@ -1094,3 +1096,26 @@ export const newUnknownTokensFound = (tokenUids) => ({
type: types.NEW_UNKNOWN_TOKENS_FOUND,
payload: { tokenUids },
});
+
+/**
+ * Set the active wallet type — software (seed), hardware (Ledger), or web3auth.
+ * The value is also persisted to localStorage by the Web3Auth flow (see
+ * src/sagas/web3auth.js) so the app can restore it on startup.
+ *
+ * @param {'software'|'hardware'|'web3auth'|null} walletType
+ */
+export const setWalletType = (walletType) => ({
+ type: types.SET_WALLET_TYPE,
+ payload: walletType,
+});
+
+/**
+ * Set the email address of the user signed in via Web3Auth. Persisted alongside
+ * walletType in localStorage; null when the wallet is not a Web3Auth wallet.
+ *
+ * @param {string|null} email
+ */
+export const setWeb3authEmail = (email) => ({
+ type: types.SET_WEB3AUTH_EMAIL,
+ payload: email,
+});
diff --git a/src/assets/web3auth-providers/apple.svg b/src/assets/web3auth-providers/apple.svg
new file mode 100644
index 000000000..b2f290c21
--- /dev/null
+++ b/src/assets/web3auth-providers/apple.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/web3auth-providers/email.svg b/src/assets/web3auth-providers/email.svg
new file mode 100644
index 000000000..f8f9cec06
--- /dev/null
+++ b/src/assets/web3auth-providers/email.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/web3auth-providers/google.svg b/src/assets/web3auth-providers/google.svg
new file mode 100644
index 000000000..8e0558efa
--- /dev/null
+++ b/src/assets/web3auth-providers/google.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/components/Navigation.js b/src/components/Navigation.js
index 00462fab7..91a2bb423 100644
--- a/src/components/Navigation.js
+++ b/src/components/Navigation.js
@@ -15,6 +15,7 @@ import helpers from '../utils/helpers';
import { useSelector } from 'react-redux';
import { FEATURE_TOGGLE_DEFAULTS, NANO_CONTRACTS_FEATURE_TOGGLE } from '../constants';
import { get } from 'lodash';
+import { isSingleKeyWallet } from '../reducers';
/**
* Component that shows a navigation bar with the menu options
@@ -24,12 +25,15 @@ import { get } from 'lodash';
function Navigation() {
const useAtomicSwap = useSelector(state => state.useAtomicSwap);
const featureToggles = useSelector(state => state.featureToggles);
+ const isWeb3Auth = useSelector(isSingleKeyWallet);
const nanoEnabledDefault = get(FEATURE_TOGGLE_DEFAULTS, NANO_CONTRACTS_FEATURE_TOGGLE, false)
const nanoEnabledFeatureToggle = get(featureToggles, NANO_CONTRACTS_FEATURE_TOGGLE, nanoEnabledDefault);
const fullNodeNanoEnabled = useSelector(state => state.serverInfo.nanoContractsEnabled);
// To enable nano contract navigation, the unleash feature toggle must
- // be enabled and the full node must support it as well
- const nanoEnabled = nanoEnabledFeatureToggle && fullNodeNanoEnabled;
+ // be enabled and the full node must support it as well. Single-key (web3auth)
+ // wallets cannot derive the additional addresses these features require.
+ const nanoEnabled = nanoEnabledFeatureToggle && fullNodeNanoEnabled && !isWeb3Auth;
+ const atomicSwapEnabled = useAtomicSwap && !isWeb3Auth;
/**
* Method called when user clicked on Explorer menu
@@ -66,7 +70,7 @@ function Navigation() {
{t`NFTs`}
- {useAtomicSwap &&
+ {atomicSwapEnabled &&
{t`Atomic Swap`}
}
diff --git a/src/components/WalletAddress.js b/src/components/WalletAddress.js
index 5e16ccf4f..3a42ca9d6 100644
--- a/src/components/WalletAddress.js
+++ b/src/components/WalletAddress.js
@@ -16,6 +16,7 @@ import { sharedAddressUpdate } from '../actions/index';
import { GlobalModalContext, MODAL_TYPES } from './GlobalModal';
import LOCAL_STORE from '../storage';
import { getGlobalWallet } from '../modules/wallet';
+import { isSingleKeyWallet } from '../reducers';
const mapDispatchToProps = dispatch => {
return {
@@ -28,6 +29,7 @@ const mapStateToProps = (state) => {
lastSharedAddress: state.lastSharedAddress,
lastSharedIndex: state.lastSharedIndex,
addressMode: state.addressMode,
+ isWeb3Auth: isSingleKeyWallet(state),
};
};
@@ -148,23 +150,25 @@ export class WalletAddress extends React.Component {
render() {
const renderAddress = () => {
const isSingleAddress = this.props.addressMode === ADDRESS_MODE.SINGLE;
+ const { isWeb3Auth } = this.props;
+ const showGenerateNewAddress = !isSingleAddress && !isWeb3Auth;
return (
{t`Address to receive tokens`}
{showAddressString()}
- {(!LOCAL_STORE.isHardwareWallet() && !isSingleAddress) &&
+ {(!LOCAL_STORE.isHardwareWallet() && !isSingleAddress && !isWeb3Auth) &&
{t`See all addresses`}
}
diff --git a/src/components/Web3AuthErrorDialog.js b/src/components/Web3AuthErrorDialog.js
new file mode 100644
index 000000000..f565efd5d
--- /dev/null
+++ b/src/components/Web3AuthErrorDialog.js
@@ -0,0 +1,124 @@
+/**
+ * Copyright (c) Hathor Labs and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React, { useEffect, useRef } from 'react';
+import { t } from 'ttag';
+import { WEB3AUTH_ERROR_TYPES } from '../sagas/web3auth';
+import { useGlobalModalContext, MODAL_TYPES } from './GlobalModal';
+
+/**
+ * Copy + observability tag for each Web3Auth error variant. USER_CANCELLED is
+ * intentionally absent: the saga swallows it silently before reaching this
+ * component, so any errorType reaching us is a real failure worth surfacing.
+ */
+const COPY = {
+ [WEB3AUTH_ERROR_TYPES.NETWORK]: {
+ title: () => t`Connection problem`,
+ body: () => t`Could not reach Web3Auth. Check your internet connection and try again.`,
+ sentryTag: 'network',
+ },
+ [WEB3AUTH_ERROR_TYPES.VERIFIER_CONFIG]: {
+ title: () => t`Sign-in temporarily unavailable`,
+ body: () => t`There is a configuration issue with Web3Auth. The Hathor team has been notified.`,
+ sentryTag: 'config',
+ },
+ [WEB3AUTH_ERROR_TYPES.MFA_REQUIRED]: {
+ title: () => t`Set up a recovery factor`,
+ body: () => t`Hathor wallets require a recovery factor to protect your funds. You can configure it in the next step.`,
+ sentryTag: 'mfa',
+ },
+ [WEB3AUTH_ERROR_TYPES.KEY_DERIVATION]: {
+ title: () => t`Could not derive your wallet`,
+ body: () => t`Something went wrong while preparing your wallet. Please contact support.`,
+ sentryTag: 'key',
+ },
+ [WEB3AUTH_ERROR_TYPES.UNKNOWN]: {
+ title: () => t`Sign-in failed`,
+ body: () => t`Something unexpected happened. Please try again.`,
+ sentryTag: 'unknown',
+ },
+};
+
+/**
+ * Web3Auth error dialog.
+ *
+ * Built on top of the project's GlobalModal (MODAL_TYPES.ALERT → ModalAlert).
+ * Each error type maps to a copy pair (title + body) and an observability tag.
+ * Logs the error context on mount so the team has telemetry even when the
+ * user dismisses without action.
+ *
+ * Behavior:
+ * - Mount: show the alert modal with retry button.
+ * - Click "Try again": call onRetry, then close the modal.
+ * - Dismiss any other way (Bootstrap "hidden.bs.modal" hook): call onCancel.
+ * - Unmount: ensure the modal is hidden.
+ *
+ * Because GlobalModal auto-injects an onClose handler that fires on every
+ * Bootstrap "hidden.bs.modal" event (including the one triggered by the
+ * primary button), we use a ref flag to ensure onRetry and onCancel are
+ * mutually exclusive.
+ *
+ * @param {object} props
+ * @param {string} props.errorType One of WEB3AUTH_ERROR_TYPES values
+ * @param {Function} [props.onRetry] Called when the user taps "Try again"
+ * @param {Function} [props.onCancel] Called when the user dismisses the dialog
+ */
+function Web3AuthErrorDialog({ errorType, onRetry, onCancel }) {
+ const { showModal, hideModal } = useGlobalModalContext();
+ const copy = COPY[errorType] || COPY[WEB3AUTH_ERROR_TYPES.UNKNOWN];
+ // Latch flag: when the user clicks "Try again" we route through onRetry and
+ // suppress the auto-injected onClose (which would otherwise fire onCancel
+ // too because the primary button calls $.modal('hide') internally).
+ const retriedRef = useRef(false);
+
+ useEffect(() => {
+ retriedRef.current = false;
+
+ // Observability hook. Sentry forwarding is left to the existing logger
+ // (sentry breadcrumbs); we just emit a tagged log here.
+ // eslint-disable-next-line no-console
+ console.warn('[web3auth] error dialog shown', {
+ errorType,
+ category: copy.sentryTag,
+ });
+
+ showModal(MODAL_TYPES.ALERT, {
+ id: 'web3authErrorModal',
+ title: copy.title(),
+ body: {copy.body()}
,
+ buttonName: t`Try again`,
+ handleButton: () => {
+ retriedRef.current = true;
+ hideModal();
+ if (typeof onRetry === 'function') {
+ onRetry();
+ }
+ },
+ // ModalAlert wires the GlobalModal-injected onClose to Bootstrap's
+ // hidden.bs.modal event, so this fires on backdrop click, ESC, or after
+ // the primary button hides the modal. Skip the cancel path if a retry
+ // already happened.
+ onClose: () => {
+ if (retriedRef.current) {
+ retriedRef.current = false;
+ return;
+ }
+ if (typeof onCancel === 'function') {
+ onCancel();
+ }
+ },
+ });
+
+ return () => {
+ hideModal();
+ };
+ }, [errorType]);
+
+ return null;
+}
+
+export default Web3AuthErrorDialog;
diff --git a/src/constants.js b/src/constants.js
index 6d7cf6ab2..588e17e16 100644
--- a/src/constants.js
+++ b/src/constants.js
@@ -229,6 +229,7 @@ export const NANO_CONTRACTS_FEATURE_TOGGLE = 'nano-contracts-desktop.rollout';
export const REOWN_FEATURE_TOGGLE = 'wallet-desktop-reown.rollout';
export const FEE_TOKEN_FEATURE_TOGGLE = 'fee-based-tokens-desktop.rollout';
export const SINGLE_ADDRESS_FEATURE_TOGGLE = 'single-address-desktop.rollout';
+export const WEB3AUTH_FEATURE_TOGGLE = 'web3auth-desktop.rollout';
export const FEATURE_TOGGLE_DEFAULTS = {
[WALLET_SERVICE_FEATURE_TOGGLE]: false,
@@ -237,8 +238,43 @@ export const FEATURE_TOGGLE_DEFAULTS = {
[REOWN_FEATURE_TOGGLE]: false,
[FEE_TOKEN_FEATURE_TOGGLE]: false,
[SINGLE_ADDRESS_FEATURE_TOGGLE]: false,
+ [WEB3AUTH_FEATURE_TOGGLE]: false,
};
+/**
+ * Web3Auth project configuration per Hathor network.
+ *
+ * The verifier is Hathor-owned and shared with the mobile wallet so the same
+ * Google account derives the same Hathor address on both platforms. The
+ * googleClientId is the Hathor-owned Google OAuth client registered in the
+ * Web3Auth dashboard under the `hathor-google` custom verifier.
+ *
+ * Mainnet entries are placeholders; getWeb3AuthConfig throws a controlled
+ * error if a user tries to log in on mainnet before the dashboard is set up.
+ */
+export const WEB3AUTH_CONFIG = {
+ testnet: {
+ clientId: 'BLQbTFHmFa4TpQwAKEnBsf9ZArKB8R_hP3gKjBdSrF48fSmzo3ES-KpoaAvX7JMaa1PvefbD5yEXgRrgsiQiauQ',
+ network: 'sapphire_devnet',
+ verifier: 'hathor-google',
+ googleClientId: '206408356798-lmqb7i1n1vr6e761479q146sfqgnvue8.apps.googleusercontent.com',
+ appleVerifier: 'hathor-apple',
+ appleClientId: null,
+ },
+ mainnet: {
+ clientId: null,
+ network: 'sapphire_mainnet',
+ verifier: 'hathor-google',
+ googleClientId: null,
+ appleVerifier: 'hathor-apple',
+ appleClientId: null,
+ },
+};
+
+// Storage keys are registered in src/storage.js storageKeys array in T4.
+export const WEB3AUTH_WALLET_TYPE_KEY = 'localstorage:web3auth:walletType';
+export const WEB3AUTH_EMAIL_KEY = 'localstorage:web3auth:email';
+
/**
* This property filters the full exported scss properties and exposes only the ones
* relevant to the javascript context.
diff --git a/src/index.module.scss b/src/index.module.scss
index f24893f29..9bde3eb33 100644
--- a/src/index.module.scss
+++ b/src/index.module.scss
@@ -1319,3 +1319,5 @@ div .nc-token-balance:not(:last-child) {
}
}
}
+
+@import 'styles/web3auth';
diff --git a/src/reducers/index.js b/src/reducers/index.js
index ac3d5de73..2455c7248 100644
--- a/src/reducers/index.js
+++ b/src/reducers/index.js
@@ -123,6 +123,10 @@ const initialState = {
useWalletService: false,
// Address mode: ADDRESS_MODE.SINGLE or ADDRESS_MODE.MULTI
addressMode: null,
+ // Active wallet type: 'software' | 'hardware' | 'web3auth' | null
+ walletType: null,
+ // Email of the user signed in via Web3Auth; null when not a Web3Auth wallet
+ web3authEmail: null,
// Promise to be resolved when the user inputs his PIN correctly on the LockedWallet screen
lockWalletPromise: null,
// Track if the Ledger device app was closed while the wallet was loaded.
@@ -500,6 +504,11 @@ const rootReducer = (state = initialState, action) => {
return onUnregisteredTokensClean(state);
case types.SET_ADDRESS_MODE:
return { ...state, addressMode: action.payload };
+ case types.SET_WALLET_TYPE:
+ return { ...state, walletType: action.payload };
+
+ case types.SET_WEB3AUTH_EMAIL:
+ return { ...state, web3authEmail: action.payload };
case types.TOKEN_REGISTER_REQUESTED:
return onTokenRegisterRequested(state, action);
case types.TOKEN_REGISTER_SUCCESS:
@@ -1680,4 +1689,12 @@ export const onTokenRegisterFailed = (state, { payload }) => {
};
};
+/**
+ * Returns true when the loaded wallet is a Web3Auth single-key wallet.
+ *
+ * Use to gate UI features that don't make sense for single-key wallets
+ * (e.g., "generate new address", NanoContract menus, Reown — until PR2).
+ */
+export const isSingleKeyWallet = (state) => state.walletType === 'web3auth';
+
export default rootReducer;
diff --git a/src/sagas/reown.js b/src/sagas/reown.js
index 2f5cf39c2..231bd251e 100644
--- a/src/sagas/reown.js
+++ b/src/sagas/reown.js
@@ -119,6 +119,10 @@ function extractErrorDetails(error) {
* @returns {boolean} True if the Reown feature is enabled, false otherwise
*/
function* isReownEnabled() {
+ const walletType = yield select((state) => state.walletType);
+ if (walletType === 'web3auth') {
+ return false; // Reown is enabled for Web3Auth wallets in PR2.
+ }
const reownEnabled = yield call(checkForFeatureFlag, REOWN_FEATURE_TOGGLE);
return reownEnabled;
}
diff --git a/src/sagas/wallet.js b/src/sagas/wallet.js
index 54c2f1e69..3c71baebd 100644
--- a/src/sagas/wallet.js
+++ b/src/sagas/wallet.js
@@ -67,6 +67,8 @@ import {
setAddressMode,
setFeatureToggles,
newUnknownTokensFound,
+ setWalletType,
+ setWeb3authEmail,
} from '../actions';
import {
specificTypeAndPayload,
@@ -76,6 +78,7 @@ import {
} from './helpers';
import { fetchTokenData, restoreTokensForNetwork } from './tokens';
import { updateUnleashClientContext } from './featureToggle';
+import { web3authLogout } from './web3auth';
import walletUtils from '../utils/wallet';
import tokensUtils from '../utils/tokens';
import nanoUtils from '../utils/nanoContracts';
@@ -154,12 +157,35 @@ export function* startWallet(action) {
password,
xpub,
hardware,
+ privateKey,
+ publicKey,
+ walletType,
} = action.payload;
let xpriv = null;
yield put(loadingAddresses(true));
- if (hardware) {
+ // Web3Auth branch: bypass wallet-service and force single-address policy.
+ // Read access data here (when storage is already initialized) to detect
+ // restore mode where no privateKey is in payload but the persisted access
+ // data has `singleKeyMode === true`.
+ const earlyStorage = LOCAL_STORE.getStorage();
+ const earlyAccessData = earlyStorage
+ ? yield call([earlyStorage, 'getAccessData'])
+ : null;
+ const isWeb3AuthFirstLogin = Boolean(privateKey);
+ const isWeb3AuthRestore = (
+ !privateKey
+ && !words
+ && !xpub
+ && earlyAccessData?.singleKeyMode === true
+ );
+ const isWeb3Auth = isWeb3AuthFirstLogin || isWeb3AuthRestore;
+
+ if (isWeb3Auth) {
+ // Storage was set up by Signin via initWeb3AuthStorage on first login,
+ // or persisted from a previous session on restore. Do not re-init.
+ } else if (hardware) {
// We need to ensure that the hardware wallet storage is always generated here since we may be
// starting the wallet with a second device and so we cannot trust the xpub saved on storage.
yield LOCAL_STORE.initHWStorage(xpub);
@@ -177,20 +203,32 @@ export function* startWallet(action) {
// we sync after wallet.start. Persistence of the address mode to
// localStorage is therefore deferred to after the connection.
const network = yield select((state) => state.networkSettings.data.network);
- const singleAddressFeatureEnabled = yield call(checkForFeatureFlag, SINGLE_ADDRESS_FEATURE_TOGGLE);
- const storedAddressMode = walletUtils.getAddressMode(network);
- const attemptedAddressMode = decideAddressMode({ singleAddressFeatureEnabled, storedAddressMode });
+ let scanPolicy;
+ let attemptedAddressMode;
+ if (isWeb3Auth) {
+ // Web3Auth single-key wallets are single-address by construction.
+ scanPolicy = { policy: SCANNING_POLICY.SINGLE_ADDRESS };
+ attemptedAddressMode = ADDRESS_MODE.SINGLE;
+ } else {
+ const singleAddressFeatureEnabled = yield call(checkForFeatureFlag, SINGLE_ADDRESS_FEATURE_TOGGLE);
+ const storedAddressMode = walletUtils.getAddressMode(network);
+
+ attemptedAddressMode = decideAddressMode({ singleAddressFeatureEnabled, storedAddressMode });
- const scanPolicy = attemptedAddressMode === ADDRESS_MODE.SINGLE
- ? { policy: SCANNING_POLICY.SINGLE_ADDRESS }
- : { policy: SCANNING_POLICY.GAP_LIMIT, gapLimit: hathorLibConstants.GAP_LIMIT };
+ scanPolicy = attemptedAddressMode === ADDRESS_MODE.SINGLE
+ ? { policy: SCANNING_POLICY.SINGLE_ADDRESS }
+ : { policy: SCANNING_POLICY.GAP_LIMIT, gapLimit: hathorLibConstants.GAP_LIMIT };
+ }
// We are offline, the connection object is yet to be created
yield put(isOnlineUpdate({ isOnline: false }));
- // For now, the wallet service does not support hardware wallet, so default to the old facade
- const useWalletService = hardware ? false : yield call(isWalletServiceEnabled);
+ // For now, the wallet service does not support hardware wallet, so default to the old facade.
+ // Web3Auth single-key wallets are also not supported by wallet-service yet (RFC #46 §1.9 defers).
+ const useWalletService = (isWeb3Auth || hardware)
+ ? false
+ : yield call(isWalletServiceEnabled);
const enableAtomicSwap = yield call(isAtomicSwapEnabled);
let customTokens = [];
@@ -250,23 +288,57 @@ export function* startWallet(action) {
dispatch(reloadingWallet());
};
- if (!(words || xpub)) {
- const accessData = yield storage.getAccessData();
- xpriv = cryptoUtils.decryptData(accessData.mainKey, pin);
- }
-
- const walletConfig = {
- seed: words,
- xpriv,
- xpub,
- passphrase,
- connection,
- beforeReloadCallback,
- storage,
- scanPolicy,
- };
+ if (isWeb3Auth) {
+ // First-login: privateKey + publicKey come from action.payload.
+ // Restore: decrypt the persisted singleKeyPrivateKey using the pin and
+ // pass it back to the HathorWallet constructor — the constructor
+ // requires exactly one of seed/xpriv/xpub/privateKey, so we cannot
+ // construct without it even when storage already has the access data.
+ let restoredPrivateKey;
+ let restoredPublicKey;
+ if (isWeb3AuthRestore) {
+ restoredPrivateKey = yield call([storage, 'getSingleKeyPrivateKey'], pin);
+ // earlyAccessData was read above; singleKeyPublicKey holds the
+ // persisted DER-hex public key set by generateAccessDataFromPrivateKey.
+ // It is optional — the HathorWallet constructor derives it from
+ // privateKey when omitted — but passing it lets the constructor
+ // validate the pair.
+ restoredPublicKey = earlyAccessData?.singleKeyPublicKey;
+ }
+ const walletConfig = {
+ privateKey: isWeb3AuthFirstLogin ? privateKey : restoredPrivateKey,
+ publicKey: isWeb3AuthFirstLogin ? publicKey : restoredPublicKey,
+ connection,
+ beforeReloadCallback,
+ storage,
+ scanPolicy,
+ };
+ wallet = new HathorWallet(walletConfig);
+ // Register the unified getSignatureForTx as the external signer.
+ // It detects `singleKeyMode` internally and routes to single-key signing
+ // via buildSigningKeyResolver; for HD wallets it derives from xpriv.
+ wallet.setExternalTxSigningMethod(async (tx, walletStorage, pinCode) => (
+ transactionUtils.getSignatureForTx(tx, walletStorage, pinCode)
+ ));
+ } else {
+ if (!(words || xpub)) {
+ const accessData = yield storage.getAccessData();
+ xpriv = cryptoUtils.decryptData(accessData.mainKey, pin);
+ }
- wallet = new HathorWallet(walletConfig);
+ const walletConfig = {
+ seed: words,
+ xpriv,
+ xpub,
+ passphrase,
+ connection,
+ beforeReloadCallback,
+ storage,
+ scanPolicy,
+ };
+
+ wallet = new HathorWallet(walletConfig);
+ }
}
setGlobalWallet(wallet);
@@ -837,6 +909,17 @@ export function* refreshSharedAddress() {
export function* onWalletReset() {
const wallet = getGlobalWallet();
+ // Web3Auth cleanup: terminate the SDK session and clear the Redux
+ // identity (walletType + email). Idempotent: safe to call for non-web3auth
+ // wallets (logout is a no-op when no SDK session exists, and the action
+ // dispatches just overwrite already-null state). The persisted
+ // WEB3AUTH_WALLET_TYPE_KEY / WEB3AUTH_EMAIL_KEY entries are erased by the
+ // LOCAL_STORE.resetStorage() call below, since both keys are registered in
+ // the storage layer's storageKeys list.
+ yield call(web3authLogout);
+ yield put(setWalletType(null));
+ yield put(setWeb3authEmail(null));
+
localStorage.removeItem(IGNORE_WS_TOGGLE_FLAG);
// Clear per-network address mode preferences. LOCAL_STORE.resetStorage()
// only removes keys in its static storageKeys list, but addressMode keys
diff --git a/src/sagas/web3auth.js b/src/sagas/web3auth.js
new file mode 100644
index 000000000..d5d1fb5c0
--- /dev/null
+++ b/src/sagas/web3auth.js
@@ -0,0 +1,257 @@
+/**
+ * Copyright (c) Hathor Labs and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { Web3AuthNoModal } from '@web3auth/no-modal';
+import { CHAIN_NAMESPACES, WALLET_ADAPTERS } from '@web3auth/base';
+import { CommonPrivateKeyProvider } from '@web3auth/base-provider';
+import { AuthAdapter } from '@web3auth/auth-adapter';
+import { PrivateKey } from 'bitcore-lib';
+import {
+ WEB3AUTH_CONFIG,
+ WEB3AUTH_WALLET_TYPE_KEY,
+ WEB3AUTH_EMAIL_KEY,
+} from '../constants';
+import { setWalletType, setWeb3authEmail } from '../actions';
+import LOCAL_STORE from '../storage';
+
+let web3authInstance = null;
+
+export const WEB3AUTH_ERROR_TYPES = Object.freeze({
+ USER_CANCELLED: 'user_cancelled',
+ NETWORK: 'network',
+ VERIFIER_CONFIG: 'verifier_config',
+ MFA_REQUIRED: 'mfa_required',
+ KEY_DERIVATION: 'key_derivation',
+ UNKNOWN: 'unknown',
+});
+
+/**
+ * Map a Web3Auth SDK error to one of the WEB3AUTH_ERROR_TYPES values.
+ *
+ * The SDK does not expose a stable error enum; we string-match on message
+ * patterns we have observed in practice. Unknown patterns fall back to UNKNOWN
+ * so the observability layer can surface new cases.
+ */
+export function classifyWeb3AuthError(err) {
+ if (!err) return WEB3AUTH_ERROR_TYPES.UNKNOWN;
+ const msg = String(err.message || err).toLowerCase();
+
+ if (
+ msg.includes('user closed')
+ || msg.includes('user_cancelled')
+ || msg.includes('user cancelled')
+ ) {
+ return WEB3AUTH_ERROR_TYPES.USER_CANCELLED;
+ }
+ if (msg.includes('network') || msg.includes('timeout') || msg.includes('fetch')) {
+ return WEB3AUTH_ERROR_TYPES.NETWORK;
+ }
+ if (
+ msg.includes('verifier')
+ || msg.includes('jwt')
+ || msg.includes('invalid_token')
+ || msg.includes('not configured for')
+ ) {
+ return WEB3AUTH_ERROR_TYPES.VERIFIER_CONFIG;
+ }
+ if (msg.includes('mfa') || msg.includes('factor')) {
+ return WEB3AUTH_ERROR_TYPES.MFA_REQUIRED;
+ }
+ if (msg.includes('invalid') && msg.includes('key')) {
+ return WEB3AUTH_ERROR_TYPES.KEY_DERIVATION;
+ }
+ return WEB3AUTH_ERROR_TYPES.UNKNOWN;
+}
+
+/**
+ * Select the Web3Auth config matching the current Hathor network.
+ *
+ * Throws a controlled error if the matching entry is incomplete (e.g., mainnet
+ * has not been provisioned in the dashboard yet). Callers surface the error to
+ * the user instead of silently logging into the wrong project.
+ *
+ * @param {'testnet'|'mainnet'} hathorNetwork
+ */
+export function getWeb3AuthConfig(hathorNetwork) {
+ const cfg = WEB3AUTH_CONFIG[hathorNetwork];
+ if (!cfg) {
+ throw new Error(`Unknown Hathor network: ${hathorNetwork}`);
+ }
+ if (!cfg.clientId || !cfg.googleClientId) {
+ throw new Error(
+ `Web3Auth is not configured for ${hathorNetwork} yet. `
+ + 'Please contact support.'
+ );
+ }
+ return cfg;
+}
+
+/**
+ * Lazy singleton: build the Web3Auth SDK on first use.
+ *
+ * Top-level SDK construction must be avoided because it touches crypto
+ * primitives that may not yet be initialized when the module is first
+ * imported. Subsequent calls return the cached instance.
+ *
+ * @param {'testnet'|'mainnet'} hathorNetwork
+ * @returns {Promise}
+ */
+async function getWeb3AuthInstance(hathorNetwork) {
+ if (web3authInstance) return web3authInstance;
+
+ const cfg = getWeb3AuthConfig(hathorNetwork);
+
+ const privateKeyProvider = new CommonPrivateKeyProvider({
+ config: {
+ chainConfig: {
+ chainNamespace: CHAIN_NAMESPACES.OTHER,
+ chainId: '0x1',
+ rpcTarget: 'https://node1.mainnet.hathor.network/v1a/',
+ displayName: 'Hathor Network',
+ ticker: 'HTR',
+ tickerName: 'Hathor',
+ },
+ },
+ });
+
+ web3authInstance = new Web3AuthNoModal({
+ clientId: cfg.clientId,
+ web3AuthNetwork: cfg.network,
+ privateKeyProvider,
+ });
+
+ const authAdapter = new AuthAdapter({
+ adapterSettings: {
+ uxMode: 'popup',
+ loginConfig: {
+ google: {
+ verifier: cfg.verifier,
+ typeOfLogin: 'google',
+ clientId: cfg.googleClientId,
+ },
+ ...(cfg.appleClientId
+ ? {
+ apple: {
+ verifier: cfg.appleVerifier,
+ typeOfLogin: 'apple',
+ clientId: cfg.appleClientId,
+ },
+ }
+ : {}),
+ },
+ mfaLevel: 'mandatory',
+ },
+ privateKeyProvider,
+ });
+ web3authInstance.configureAdapter(authAdapter);
+
+ await web3authInstance.init();
+ return web3authInstance;
+}
+
+/**
+ * Perform social login via Web3Auth.
+ *
+ * Triggers the OAuth popup, requires MFA setup on first login, and returns the
+ * raw secp256k1 private key plus the user's email. Throws when the user
+ * cancels, the network is unreachable, or the verifier rejects the JWT.
+ *
+ * @param {'google'|'apple'} provider
+ * @param {'testnet'|'mainnet'} hathorNetwork
+ * @returns {Promise<{ privateKey: string, email: string }>}
+ */
+export async function web3authLogin(provider, hathorNetwork) {
+ const web3auth = await getWeb3AuthInstance(hathorNetwork);
+ await web3auth.connectTo(WALLET_ADAPTERS.AUTH, {
+ loginProvider: provider,
+ curve: 'secp256k1',
+ mfaLevel: 'mandatory',
+ });
+
+ const userInfo = await web3auth.getUserInfo();
+ const email = userInfo?.email || userInfo?.name || '';
+ const privateKey = await web3auth.provider.request({ method: 'private_key' });
+
+ return { privateKey, email };
+}
+
+/**
+ * Derive the 33-byte compressed public key hex from a raw private key hex.
+ *
+ * The wallet-lib will also derive this internally; we precompute it so the
+ * caller can pass both privateKey + publicKey into HathorWallet and into
+ * initWeb3AuthStorage, matching the API the wallet-lib's
+ * generateAccessDataFromPrivateKey expects.
+ *
+ * @param {string} privateKeyHex
+ * @returns {string} compressed public key hex
+ */
+export function derivePublicKey(privateKeyHex) {
+ return new PrivateKey(privateKeyHex).toPublicKey().toString();
+}
+
+/**
+ * Persist Web3Auth identity to localStorage and Redux.
+ *
+ * Called immediately after a successful login so a subsequent app restart
+ * restores the walletType + email and lets the user unlock with PIN alone.
+ *
+ * @param {Function} dispatch Redux dispatch
+ * @param {'web3auth'} walletType
+ * @param {string} email
+ */
+export function persistWeb3AuthState(dispatch, walletType, email) {
+ LOCAL_STORE.setItem(WEB3AUTH_WALLET_TYPE_KEY, walletType);
+ if (email) {
+ LOCAL_STORE.setItem(WEB3AUTH_EMAIL_KEY, email);
+ }
+ dispatch(setWalletType(walletType));
+ dispatch(setWeb3authEmail(email));
+}
+
+/**
+ * Restore walletType + email from localStorage into Redux on app startup.
+ *
+ * @param {Function} dispatch Redux dispatch
+ */
+export function restoreWeb3AuthState(dispatch) {
+ const walletType = LOCAL_STORE.getItem(WEB3AUTH_WALLET_TYPE_KEY);
+ const email = LOCAL_STORE.getItem(WEB3AUTH_EMAIL_KEY);
+ if (walletType) dispatch(setWalletType(walletType));
+ if (email) dispatch(setWeb3authEmail(email));
+}
+
+/**
+ * Log out of Web3Auth: clears the SDK session and drops the singleton.
+ *
+ * Idempotent: calling when no session exists is a no-op. Errors are swallowed
+ * (logged) because logout failures must not prevent the wallet-side reset
+ * from completing.
+ */
+export async function web3authLogout() {
+ try {
+ if (web3authInstance) {
+ await web3authInstance.logout();
+ }
+ } catch (err) {
+ // eslint-disable-next-line no-console
+ console.warn('[web3auth] logout error', err);
+ }
+ web3authInstance = null;
+}
+
+/**
+ * Remove walletType + email from localStorage and reset Redux state.
+ *
+ * @param {Function} dispatch Redux dispatch
+ */
+export function cleanWeb3AuthState(dispatch) {
+ LOCAL_STORE.removeItem(WEB3AUTH_WALLET_TYPE_KEY);
+ LOCAL_STORE.removeItem(WEB3AUTH_EMAIL_KEY);
+ dispatch(setWalletType(null));
+ dispatch(setWeb3authEmail(null));
+}
diff --git a/src/screens/LockedWallet.js b/src/screens/LockedWallet.js
index a48823214..736572020 100644
--- a/src/screens/LockedWallet.js
+++ b/src/screens/LockedWallet.js
@@ -15,6 +15,7 @@ import { GlobalModalContext, MODAL_TYPES } from '../components/GlobalModal';
import { resolveLockWalletPromise, startWalletRequested, walletReset } from '../actions';
import { colors } from '../constants';
import LOCAL_STORE from '../storage';
+import { isSingleKeyWallet } from '../reducers';
/**
* When wallet is locked show this screen and ask for PIN to unlock the wallet
@@ -32,6 +33,7 @@ function LockedWallet() {
const formRef = useRef(null);
const context = useContext(GlobalModalContext);
const lockWalletPromise = useSelector(state => state.lockWalletPromise);
+ const isWeb3Auth = useSelector(isSingleKeyWallet);
const dispatch = useDispatch();
const navigate = useNavigate();
@@ -83,7 +85,13 @@ function LockedWallet() {
setLoading(true);
- dispatch(startWalletRequested({ pin }));
+ if (isWeb3Auth) {
+ // Web3Auth single-key wallet: the saga's restore branch decrypts the
+ // persisted singleKeyPrivateKey using the PIN — no seed/xpub needed.
+ dispatch(startWalletRequested({ pin }));
+ } else {
+ dispatch(startWalletRequested({ pin }));
+ }
}
/**
diff --git a/src/screens/Settings.js b/src/screens/Settings.js
index 4bfaf5a24..3fe80df1b 100644
--- a/src/screens/Settings.js
+++ b/src/screens/Settings.js
@@ -23,6 +23,7 @@ import { PRIVACY_POLICY_URL, TERMS_OF_SERVICE_URL, REOWN_FEATURE_TOGGLE, SINGLE_
import { walletReset, reloadWalletRequested } from '../actions';
import { getGlobalWallet } from '../modules/wallet';
import LOCAL_STORE from '../storage';
+import { isSingleKeyWallet } from '../reducers';
/**
* Settings screen
@@ -54,6 +55,9 @@ function Settings() {
const singleAddressEnabled = useSelector(state => state.featureToggles[SINGLE_ADDRESS_FEATURE_TOGGLE]);
const addressMode = useSelector(state => state.addressMode);
const network = useSelector(state => state.networkSettings.data.network);
+ const isWeb3Auth = useSelector(isSingleKeyWallet);
+ const web3authEmail = useSelector((state) => state.web3authEmail);
+ const displayEmail = web3authEmail || '';
const connectedSessionsCount = Object.keys(reownSessions).length;
const isHardwareWallet = LOCAL_STORE.isHardwareWallet();
@@ -378,7 +382,7 @@ function Settings() {
)}
- {!useWalletService && reownEnabled && (
+ {!useWalletService && reownEnabled && !isWeb3Auth && (
{t`Reown:`} {' '}
{t`Connected Sessions: ${connectedSessionsCount}`}
@@ -402,7 +406,11 @@ function Settings() {
setShowTimestamp(!showTimestamp)}>{t`Date and time:`} {showTimestamp ? hathorLib.dateFormatter.dateToTimestamp(now) : now.toString()}
- {!isHardwareWallet && {t`Reset wallet`} }
+ {!isHardwareWallet && (
+
+ {isWeb3Auth ? t`Sign out of your Hathor account ${displayEmail}` : t`Reset wallet`}
+
+ )}
diff --git a/src/screens/Signin.js b/src/screens/Signin.js
index 7ae904eb9..59e757765 100644
--- a/src/screens/Signin.js
+++ b/src/screens/Signin.js
@@ -5,21 +5,37 @@
* LICENSE file in the root directory of this source tree.
*/
-import React from 'react';
+import React, { useState } from 'react';
import { t } from 'ttag'
+import { useDispatch } from 'react-redux';
+import { useLocation, useNavigate } from 'react-router-dom';
import logo from '../assets/images/hathor-logo.png';
import InitialImages from '../components/InitialImages';
-import { useNavigate } from 'react-router-dom';
+import ChoosePassword from '../components/ChoosePassword';
+import ChoosePin from '../components/ChoosePin';
+import LOCAL_STORE from '../storage';
+import { startWalletRequested } from '../actions';
/**
- * Screen used to select between create a new wallet or import an old one
+ * Screen used to select between create a new wallet or import an old one.
+ *
+ * When reached from the Web3Auth flow, `location.state.walletType === 'web3auth'`
+ * triggers a PIN + password mini-flow that bootstraps a single-key wallet from
+ * the social-login private key, instead of showing the menu options.
*
* @memberof Screens
*/
function Signin() {
const navigate = useNavigate();
+ const dispatch = useDispatch();
+ const location = useLocation();
+ const web3authState = location.state || {};
+ const isWeb3AuthFlow = web3authState.walletType === 'web3auth';
+
+ const [askPIN, setAskPIN] = useState(false);
+ const [password, setPassword] = useState('');
/**
* Go to the new wallet screen
@@ -35,17 +51,81 @@ function Signin() {
navigate('/load_wallet/');
}
+ /**
+ * User succeeded on choosing a password in the Web3Auth flow, advance to PIN.
+ * @param {string} newPassword New password, already validated
+ */
+ const passwordSuccess = (newPassword) => {
+ setPassword(newPassword);
+ setAskPIN(true);
+ }
+
+ /**
+ * Going back from the Choose PIN component to Choose Password.
+ */
+ const pinBack = () => {
+ setAskPIN(false);
+ }
+
+ /**
+ * Going back from the Choose Password component returns to the Web3Auth
+ * provider picker so the user can pick a different login method.
+ */
+ const passwordBack = () => {
+ navigate('/web3auth_login/');
+ }
+
+ /**
+ * After choosing a PIN, persist the Web3Auth single-key storage, dispatch
+ * the wallet start, and forward to the loading screen. `replace: true`
+ * drops the navigation state so a subsequent navigate(-1) cannot leak the
+ * privateKey back into the URL history.
+ * @param {string} newPin New pin, already validated
+ */
+ const pinSuccess = async (newPin) => {
+ const { privateKey, publicKey } = web3authState;
+ LOCAL_STORE.unlock();
+ await LOCAL_STORE.initWeb3AuthStorage(privateKey, publicKey, newPin, password);
+ LOCAL_STORE.markBackupDone();
+ LOCAL_STORE.open();
+ dispatch(startWalletRequested({
+ privateKey,
+ publicKey,
+ pin: newPin,
+ password,
+ walletType: 'web3auth',
+ }));
+ // Clear sensitive in-memory copy of the password.
+ setPassword('');
+ navigate('/loading_addresses/', { replace: true });
+ }
+
+ const renderWeb3AuthFlow = () => {
+ if (askPIN) {
+ return
;
+ }
+ return
;
+ }
+
+ const renderMenu = () => {
+ return (
+ <>
+
{t`You can start a new wallet or import data from a wallet that already exists.`}
+
+ navigate(-1)} type="button" className="btn btn-secondary">{t`Back`}
+ {t`New wallet`}
+ {t`Import wallet`}
+
+ >
+ );
+ }
+
return (
-
{t`You can start a new wallet or import data from a wallet that already exists.`}
-
- navigate(-1)} type="button" className="btn btn-secondary">{t`Back`}
- {t`New wallet`}
- {t`Import wallet`}
-
+ {isWeb3AuthFlow ? renderWeb3AuthFlow() : renderMenu()}
diff --git a/src/screens/WalletType.js b/src/screens/WalletType.js
index 395cf7098..c747f2428 100644
--- a/src/screens/WalletType.js
+++ b/src/screens/WalletType.js
@@ -18,7 +18,7 @@ import { useDispatch, useSelector } from 'react-redux';
import { updateLedgerClosed } from '../actions/index';
import LOCAL_STORE from '../storage';
import { useNavigate } from 'react-router-dom';
-import { LEDGER_GUIDE_URL } from '../constants';
+import { LEDGER_GUIDE_URL, WEB3AUTH_FEATURE_TOGGLE } from '../constants';
import helpers from '../utils/helpers';
/**
@@ -30,6 +30,9 @@ function WalletType() {
const navigate = useNavigate();
const dispatch = useDispatch();
const ledgerClosed = useSelector((state) => state.ledgerWasClosed);
+ const web3authEnabled = useSelector(
+ (state) => state.featureToggles?.[WEB3AUTH_FEATURE_TOGGLE] || false
+ );
useEffect(() => {
// Update Sentry when user started wallet now
@@ -55,6 +58,14 @@ function WalletType() {
navigate('/hardware_wallet/');
}
+ /**
+ * Go to the Web3Auth login screen (Sign in with social).
+ */
+ const goToWeb3AuthLogin = () => {
+ LOCAL_STORE.setHardwareWallet(false);
+ navigate('/web3auth_login/');
+ }
+
/**
* Method called to open ledger guide
*
@@ -87,6 +98,11 @@ function WalletType() {
{t`Hardware wallet`}
{t`Software wallet`}
+ {web3authEnabled && (
+
+ {t`Sign in with social`}
+
+ )}
diff --git a/src/screens/Web3AuthLogin.js b/src/screens/Web3AuthLogin.js
new file mode 100644
index 000000000..a095befa0
--- /dev/null
+++ b/src/screens/Web3AuthLogin.js
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) Hathor Labs and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React, { useState } from 'react';
+import { useDispatch } from 'react-redux';
+import { useNavigate } from 'react-router-dom';
+import { t } from 'ttag';
+import {
+ web3authLogin,
+ derivePublicKey,
+ persistWeb3AuthState,
+ classifyWeb3AuthError,
+ WEB3AUTH_ERROR_TYPES,
+} from '../sagas/web3auth';
+import { WEB3AUTH_CONFIG } from '../constants';
+import LOCAL_STORE from '../storage';
+import Web3AuthErrorDialog from '../components/Web3AuthErrorDialog';
+import logo from '../assets/images/hathor-logo.png';
+import googleLogo from '../assets/web3auth-providers/google.svg';
+import appleLogo from '../assets/web3auth-providers/apple.svg';
+import emailIcon from '../assets/web3auth-providers/email.svg';
+
+/**
+ * Choose a social provider to sign in via Web3Auth.
+ *
+ * Renders three provider cards — Google (active), Apple (active when
+ * configured), Email (inert, wired in PR3) — followed by a divider and the
+ * existing seed-words / new-wallet entry points.
+ *
+ * @memberof Screens
+ */
+function Web3AuthLogin() {
+ const dispatch = useDispatch();
+ const navigate = useNavigate();
+ // Read network straight from LOCAL_STORE — the Redux network slice is only
+ // hydrated from localStorage after a wallet starts (App.js#loadStorageState),
+ // so before login it still holds the mainnet default regardless of the user's
+ // selection in NetworkSettingsRecovery.
+ const persistedNetwork = LOCAL_STORE.getNetworkSettings()?.network || 'mainnet';
+ const network = persistedNetwork;
+ const cfg = WEB3AUTH_CONFIG[network] || WEB3AUTH_CONFIG.testnet;
+ const appleEnabled = Boolean(cfg.appleClientId);
+
+ const [errorType, setErrorType] = useState(null);
+ const [loading, setLoading] = useState(false);
+
+ const handleSocialLogin = async (provider) => {
+ if (loading) return;
+ setLoading(true);
+ try {
+ const { privateKey, email } = await web3authLogin(provider, network);
+ const publicKey = derivePublicKey(privateKey);
+ persistWeb3AuthState(dispatch, 'web3auth', email);
+ navigate('/signin/', {
+ state: { privateKey, publicKey, email, walletType: 'web3auth' },
+ });
+ } catch (err) {
+ const type = classifyWeb3AuthError(err);
+ // eslint-disable-next-line no-console
+ console.error('[web3auth] login failed', { provider, network, type, err });
+ if (type === WEB3AUTH_ERROR_TYPES.USER_CANCELLED) {
+ // Silent: user closed the OAuth popup intentionally.
+ return;
+ }
+ setErrorType(type);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ const goToSeedImport = () => navigate('/wallet_type/');
+ const goToNewWallet = () => navigate('/new_wallet/');
+
+ return (
+
+
+
+
+
{t`Sign in to Hathor`}
+
+
+
handleSocialLogin('google')}
+ disabled={loading}
+ >
+
+ {t`Continue with Google`}
+
+
+
appleEnabled && handleSocialLogin('apple')}
+ disabled={!appleEnabled || loading}
+ title={appleEnabled ? '' : t`Apple sign-in coming soon`}
+ >
+
+ {t`Continue with Apple`}
+
+
+
+
+ {t`Continue with Email`}
+
+
+
+
+ {t`OR`}
+
+
+
+
+ {t`Import with seed words`}
+
+
+ {t`New wallet`}
+
+
+
+
+
+ {errorType && (
+
{
+ setErrorType(null);
+ }}
+ onCancel={() => setErrorType(null)}
+ />
+ )}
+
+ );
+}
+
+export default Web3AuthLogin;
diff --git a/src/screens/Web3AuthRecovery.js b/src/screens/Web3AuthRecovery.js
new file mode 100644
index 000000000..00ad2ea41
--- /dev/null
+++ b/src/screens/Web3AuthRecovery.js
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) Hathor Labs and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React from 'react';
+import { t } from 'ttag';
+
+/**
+ * Placeholder for the Web3Auth recovery flow.
+ *
+ * The actual recovery copy and link to the Web3Auth-hosted factor management
+ * webview is deferred to a follow-up. PR1 just registers the route so links
+ * pointing here from Settings (when added later) don't 404.
+ *
+ * @memberof Screens
+ */
+function Web3AuthRecovery() {
+ return (
+
+
+
+
{t`Recovery`}
+
{t`Web3Auth recovery is managed through the Web3Auth-hosted recovery portal. A direct link from this screen will be added in a follow-up.`}
+
+
+
+ );
+}
+
+export default Web3AuthRecovery;
diff --git a/src/storage.js b/src/storage.js
index 0b713130a..10814dbe4 100644
--- a/src/storage.js
+++ b/src/storage.js
@@ -7,7 +7,11 @@
import CryptoJS from 'crypto-js';
import { MemoryStore, Storage, walletUtils, config, cryptoUtils, WalletType } from "@hathor/wallet-lib";
-import { VERSION } from "./constants";
+import {
+ VERSION,
+ WEB3AUTH_WALLET_TYPE_KEY,
+ WEB3AUTH_EMAIL_KEY,
+} from "./constants";
export const WALLET_VERSION_KEY = 'localstorage:version';
// This key holds the storage version to indicate the migration strategy
@@ -44,6 +48,8 @@ export const storageKeys = [
REGISTERED_TOKENS_KEY,
REGISTERED_NANOCONTRACTS_KEY,
NETWORK_TOKENS_KEY,
+ WEB3AUTH_WALLET_TYPE_KEY,
+ WEB3AUTH_EMAIL_KEY,
];
class HybridStore extends MemoryStore {
@@ -325,6 +331,63 @@ export class LocalStorageStore {
return storage;
}
+ /**
+ * Initialize the local storage for a Web3Auth single-key wallet.
+ *
+ * Generates access data containing the encrypted privateKey via
+ * walletUtils.generateAccessDataFromPrivateKey, persists it through the
+ * HybridStore (which also saves to localStorage), and marks the wallet as
+ * non-hardware and started. Mirrors the seed-based initStorage flow so the
+ * rest of the app sees a normally-initialized wallet, except access data
+ * carries `singleKeyMode: true` and `singleKeyPrivateKey` instead of `mainKey`.
+ *
+ * @param {string} privateKey 32-byte hex private key from Web3Auth
+ * @param {string} publicKey 33-byte compressed public key hex
+ * @param {string} pin User PIN, used to encrypt the privateKey at rest
+ * @param {string} password User password (kept for API parity with
+ * initStorage; currently unused by generateAccessDataFromPrivateKey).
+ * @returns {Promise} the initialized storage instance
+ */
+ async initWeb3AuthStorage(privateKey, publicKey, pin, password) {
+ this._storage = null;
+ this.setHardwareWallet(false);
+ const accessData = walletUtils.generateAccessDataFromPrivateKey(
+ privateKey,
+ publicKey,
+ { pin, password }
+ );
+ this.setItem(ACCESS_DATA_KEY, accessData);
+ const storage = this.getStorage();
+ await storage.saveAccessData(accessData);
+ this._storage = storage;
+ this.markWalletAsStarted();
+ this.updateStorageVersion();
+ return storage;
+ }
+
+ /**
+ * Decrypt and return the raw Web3Auth private key from access data.
+ * Thin wrapper over the wallet-lib's storage.getSingleKeyPrivateKey.
+ *
+ * @param {string} pin User PIN
+ * @returns {Promise} 32-byte hex private key
+ */
+ async getWeb3AuthPrivateKey(pin) {
+ const storage = this.getStorage();
+ return storage.getSingleKeyPrivateKey(pin);
+ }
+
+ /**
+ * Return the cached Web3Auth public key from access data.
+ *
+ * @returns {Promise} 33-byte compressed public key hex
+ */
+ async getWeb3AuthPublicKey() {
+ const storage = this.getStorage();
+ const accessData = await storage.getAccessData();
+ return accessData?.singleKeyPublicKey;
+ }
+
/**
* Get a Storage instance for the loaded wallet.
* @returns {Storage|null} Storage instance if the wallet is loaded.
diff --git a/src/styles/web3auth.scss b/src/styles/web3auth.scss
new file mode 100644
index 000000000..dee436ec6
--- /dev/null
+++ b/src/styles/web3auth.scss
@@ -0,0 +1,77 @@
+/**
+ * Web3Auth social login screen styles.
+ *
+ * Expects the following variables to be defined by the importing file:
+ * $purpleHathor, $purpleHathorHover
+ */
+
+.web3auth-login {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+
+ &__cards {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ gap: 1rem;
+ width: 100%;
+ margin-top: 2rem;
+ }
+
+ &__card {
+ flex: 1 1 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 1.5rem 1rem;
+ border: 1px solid $purpleHathor;
+ border-radius: 0.5rem;
+ background-color: white;
+ transition: box-shadow 0.15s ease-in-out;
+ cursor: pointer;
+
+ &:hover:not(:disabled) {
+ box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.08);
+ }
+
+ &:disabled {
+ opacity: 0.4;
+ cursor: not-allowed;
+ }
+ }
+
+ &__card-logo {
+ width: 2.5rem;
+ height: 2.5rem;
+ margin-bottom: 0.75rem;
+ }
+
+ &__divider {
+ width: 100%;
+ text-align: center;
+ margin: 1.5rem 0;
+ position: relative;
+ color: #6c757d;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 0;
+ right: 0;
+ height: 1px;
+ background-color: #ddd;
+ z-index: 0;
+ }
+
+ span {
+ position: relative;
+ background-color: white;
+ padding: 0 0.75rem;
+ z-index: 1;
+ }
+ }
+}
diff --git a/src/web3auth-crypto-shim.js b/src/web3auth-crypto-shim.js
new file mode 100644
index 000000000..9fef8b5cc
--- /dev/null
+++ b/src/web3auth-crypto-shim.js
@@ -0,0 +1,74 @@
+/**
+ * Copyright (c) Hathor Labs and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * Crypto shim for the Web3Auth SDK in the renderer.
+ *
+ * Webpack's `node:` scheme plugin (see config-overrides.js) rewrites
+ * `node:crypto` to `crypto`, which webpack resolves to this shim via the
+ * `fallback.crypto` alias. The shim re-exports every symbol crypto-browserify
+ * provides and additionally exposes:
+ * - `webcrypto`: the browser's WebCrypto API (globalThis.crypto), needed by
+ * newer @web3auth modules.
+ * - a default export pointing at the whole module, needed by nested older
+ * `@toruslabs/eccrypto` builds that do `import nodeCrypto from 'crypto'`.
+ *
+ * Other consumers (bitcore-lib, etc.) keep working because every
+ * crypto-browserify named export is re-exported unchanged.
+ */
+import cryptoBrowserify from 'crypto-browserify';
+
+const webcrypto = typeof globalThis !== 'undefined' && globalThis.crypto
+ ? globalThis.crypto
+ : undefined;
+
+export const {
+ randomBytes,
+ rng,
+ pseudoRandomBytes,
+ prng,
+ createHash,
+ Hash,
+ createHmac,
+ Hmac,
+ getHashes,
+ pbkdf2,
+ pbkdf2Sync,
+ Cipher,
+ createCipher,
+ Cipheriv,
+ createCipheriv,
+ Decipher,
+ createDecipher,
+ Decipheriv,
+ createDecipheriv,
+ getCiphers,
+ listCiphers,
+ DiffieHellmanGroup,
+ createDiffieHellmanGroup,
+ getDiffieHellman,
+ createDiffieHellman,
+ DiffieHellman,
+ createSign,
+ Sign,
+ createVerify,
+ Verify,
+ createECDH,
+ publicEncrypt,
+ privateEncrypt,
+ publicDecrypt,
+ privateDecrypt,
+ randomFill,
+ randomFillSync,
+} = cryptoBrowserify;
+
+export { webcrypto };
+
+export default {
+ ...cryptoBrowserify,
+ webcrypto,
+};