diff --git a/packages/extension/package.json b/packages/extension/package.json index 44b71c416..dc242daa0 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -1,6 +1,6 @@ { "name": "@enkryptcom/extension", - "version": "2.4.2", + "version": "2.4.3", "private": true, "type": "module", "scripts": { diff --git a/packages/extension/src/providers/bitcoin/methods/btc_requestAccounts.ts b/packages/extension/src/providers/bitcoin/methods/btc_requestAccounts.ts index 394677409..24d557fda 100644 --- a/packages/extension/src/providers/bitcoin/methods/btc_requestAccounts.ts +++ b/packages/extension/src/providers/bitcoin/methods/btc_requestAccounts.ts @@ -4,17 +4,21 @@ import { ProviderRPCRequest } from '@/types/provider'; import { WindowPromise } from '@/libs/window-promise'; import AccountState from '../libs/accounts-state'; import { getCustomError } from '@/libs/error'; +import openOnboard from '@/libs/utils/open-onboard'; +import { throttle } from 'lodash'; + let isAccountAccessPending = false; +const throttledOpenOnboard = throttle(() => openOnboard(), 10000); const pendingPromises: { payload: ProviderRPCRequest; res: CallbackFunction; }[] = []; -const method: MiddlewareFunction = function ( +const method: MiddlewareFunction = async function ( this: BitcoinProvider, payload: ProviderRPCRequest, res, next, -): void { +): Promise { if (payload.method !== 'btc_requestAccounts') return next(); else { if (isAccountAccessPending) { @@ -25,6 +29,7 @@ const method: MiddlewareFunction = function ( return; } isAccountAccessPending = true; + const isInitialized = await this.KeyRing.isInitialized(); const handleRemainingPromises = () => { isAccountAccessPending = false; if (pendingPromises.length) { @@ -38,6 +43,11 @@ const method: MiddlewareFunction = function ( ) => { if (_payload.options && _payload.options.domain) { isAccountAccessPending = true; + if (!isInitialized) { + _res(getCustomError('Enkrypt not initialized')); + throttledOpenOnboard(); + return handleRemainingPromises(); + } const accountsState = new AccountState(); accountsState .getApprovedAddresses(_payload.options.domain) diff --git a/packages/extension/src/providers/ethereum/networks/aa.ts b/packages/extension/src/providers/ethereum/networks/aa.ts index f004fe8e5..4d3e1d661 100644 --- a/packages/extension/src/providers/ethereum/networks/aa.ts +++ b/packages/extension/src/providers/ethereum/networks/aa.ts @@ -14,7 +14,7 @@ const artheraOptions: EvmNetworkOptions = { isTestNetwork: false, currencyName: 'AA', currencyNameLong: 'Arthera', - node: 'wss://ws.arthera.net', + node: 'https://rpc.arthera.net', icon, activityHandler: wrapActivityHandler(EtherscanActivity), }; diff --git a/packages/extension/src/providers/ethereum/networks/aat.ts b/packages/extension/src/providers/ethereum/networks/aat.ts index 3505ec767..60d67f57f 100644 --- a/packages/extension/src/providers/ethereum/networks/aat.ts +++ b/packages/extension/src/providers/ethereum/networks/aat.ts @@ -14,7 +14,7 @@ const artheraTestOptions: EvmNetworkOptions = { isTestNetwork: true, currencyName: 'AA', currencyNameLong: 'Arthera', - node: 'wss://ws-test.arthera.net', + node: 'https://rpc-test.arthera.net', icon, activityHandler: wrapActivityHandler(EtherscanActivity), }; diff --git a/packages/extension/src/providers/kadena/methods/kda_requestAccounts.ts b/packages/extension/src/providers/kadena/methods/kda_requestAccounts.ts index 7305c70d6..578bd2d75 100644 --- a/packages/extension/src/providers/kadena/methods/kda_requestAccounts.ts +++ b/packages/extension/src/providers/kadena/methods/kda_requestAccounts.ts @@ -13,22 +13,26 @@ import KadenaProvider from '..'; import AccountState from '../libs/accounts-state'; import { KadenaNetworks } from '../types'; import { getNetworkInfo } from '../libs/network'; +import openOnboard from '@/libs/utils/open-onboard'; +import { throttle } from 'lodash'; let isAccountAccessPending = false; +const throttledOpenOnboard = throttle(() => openOnboard(), 10000); const pendingPromises: { payload: ProviderRPCRequest; res: CallbackFunction; }[] = []; -const method: MiddlewareFunction = function ( +const method: MiddlewareFunction = async function ( this: KadenaProvider, payload: ProviderRPCRequest, res, next, -): void { +): Promise { if (payload.method !== 'kda_requestAccounts') return next(); else { + const isInitialized = await this.KeyRing.isInitialized(); if (isAccountAccessPending) { pendingPromises.push({ payload, @@ -95,6 +99,11 @@ const method: MiddlewareFunction = function ( ) => { if (_payload.options && _payload.options.domain) { isAccountAccessPending = true; + if (!isInitialized) { + _res(getCustomError('Enkrypt not initialized')); + throttledOpenOnboard(); + return handleRemainingPromises(); + } const accountsState = new AccountState(); accountsState diff --git a/packages/extension/src/providers/polkadot/methods/dot_accounts_get.ts b/packages/extension/src/providers/polkadot/methods/dot_accounts_get.ts index 3591aff6c..9b21553d2 100644 --- a/packages/extension/src/providers/polkadot/methods/dot_accounts_get.ts +++ b/packages/extension/src/providers/polkadot/methods/dot_accounts_get.ts @@ -9,20 +9,25 @@ import PublicKeyRing from '@/libs/keyring/public-keyring'; import AccountState from '../libs/accounts-state'; import { ProviderRPCRequest } from '@/types/provider'; import { getCustomError } from '@/libs/error'; +import openOnboard from '@/libs/utils/open-onboard'; +import { throttle } from 'lodash'; let isAccountAccessPending = false; +const throttledOpenOnboard = throttle(() => openOnboard(), 10000); const pendingPromises: { payload: ProviderRPCRequest; res: CallbackFunction; }[] = []; -const method: MiddlewareFunction = function ( +const method: MiddlewareFunction = async function ( this: SubstrateProvider, payload: ProviderRPCRequest, res, next, -): void { +): Promise { if (payload.method !== 'dot_accounts_get') return next(); else { + const isInitialized = await this.KeyRing.isInitialized(); + if (isAccountAccessPending) { pendingPromises.push({ payload, @@ -59,6 +64,11 @@ const method: MiddlewareFunction = function ( ) => { if (_payload.options && _payload.options.domain) { isAccountAccessPending = true; + if (!isInitialized) { + _res(getCustomError('Enkrypt not initialized')); + throttledOpenOnboard(); + return handleRemainingPromises(); + } const accountsState = new AccountState(); accountsState.isApproved(_payload.options.domain).then(isApproved => { if (isApproved) { diff --git a/packages/extension/src/providers/solana/methods/sol_connect.ts b/packages/extension/src/providers/solana/methods/sol_connect.ts index 646f9d599..0ef4f52fc 100644 --- a/packages/extension/src/providers/solana/methods/sol_connect.ts +++ b/packages/extension/src/providers/solana/methods/sol_connect.ts @@ -3,18 +3,22 @@ import { ProviderRPCRequest } from '@/types/provider'; import { WindowPromise } from '@/libs/window-promise'; import AccountState from '../libs/accounts-state'; import { getCustomError } from '@/libs/error'; +import openOnboard from '@/libs/utils/open-onboard'; +import { throttle } from 'lodash'; + import SolanaProvider from '..'; let isAccountAccessPending = false; +const throttledOpenOnboard = throttle(() => openOnboard(), 10000); const pendingPromises: { payload: ProviderRPCRequest; res: CallbackFunction; }[] = []; -const method: MiddlewareFunction = function ( +const method: MiddlewareFunction = async function ( this: SolanaProvider, payload: ProviderRPCRequest, res, next, -): void { +): Promise { if (payload.method !== 'sol_connect') return next(); else { if (isAccountAccessPending) { @@ -25,6 +29,7 @@ const method: MiddlewareFunction = function ( return; } isAccountAccessPending = true; + const isInitialized = await this.KeyRing.isInitialized(); const handleRemainingPromises = () => { isAccountAccessPending = false; if (pendingPromises.length) { @@ -38,6 +43,12 @@ const method: MiddlewareFunction = function ( ) => { if (_payload.options && _payload.options.domain) { isAccountAccessPending = true; + if (!isInitialized) { + _res(getCustomError('Enkrypt not initialized')); + throttledOpenOnboard(); + return handleRemainingPromises(); + } + const accountsState = new AccountState(); accountsState .getApprovedAddresses(_payload.options.domain)