@injectivelabs/wallet-evm 1.15.21 → 1.15.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,10 @@
1
- import { TxRaw, TxResponse, DirectSignResponse, AminoSignResponse } from '@injectivelabs/sdk-ts';
1
+ import { TxRaw, TxResponse, AminoSignResponse, DirectSignResponse } from '@injectivelabs/sdk-ts';
2
2
  import { ErrorContext, ThrownException } from '@injectivelabs/exceptions';
3
- import { Wallet, StdSignDoc, WalletDeviceType, BaseConcreteStrategy, SendTransactionOptions, ConcreteWalletStrategy, ConcreteWalletStrategyArgs, ConcreteEthereumWalletStrategyArgs } from '@injectivelabs/wallet-base';
3
+ import { Wallet, StdSignDoc, WalletDeviceType, BaseConcreteStrategy, SendTransactionOptions, BrowserEip1993Provider, ConcreteWalletStrategy, ConcreteWalletStrategyArgs, ConcreteEthereumWalletStrategyArgs } from '@injectivelabs/wallet-base';
4
4
  import { AccountAddress, EthereumChainId } from '@injectivelabs/ts-types';
5
5
  export declare class EvmWallet extends BaseConcreteStrategy implements ConcreteWalletStrategy {
6
6
  wallet?: Wallet;
7
+ evmProviders: Partial<Record<Wallet, BrowserEip1993Provider>>;
7
8
  constructor(args: (ConcreteWalletStrategyArgs | ConcreteEthereumWalletStrategyArgs) & {
8
9
  wallet: Wallet;
9
10
  });
@@ -10,11 +10,37 @@ const utils_1 = require("@injectivelabs/utils");
10
10
  const index_js_1 = require("./utils/index.js");
11
11
  class EvmWallet extends wallet_base_2.BaseConcreteStrategy {
12
12
  wallet;
13
+ evmProviders = {};
13
14
  constructor(args) {
14
15
  super(args);
15
16
  if (!(0, wallet_base_1.isEvmBrowserWallet)(args.wallet)) {
16
17
  throw new exceptions_1.WalletException(new Error(`Evm Wallet for ${(0, utils_1.capitalize)(args.wallet)} is not supported.`));
17
18
  }
19
+ if (!(0, sdk_ts_1.isServerSide)()) {
20
+ window.addEventListener('eip6963:announceProvider', (announcement) => {
21
+ const event = announcement;
22
+ const walletName = event.detail.info.name.toLowerCase();
23
+ if (walletName === wallet_base_2.Wallet.Metamask.toLowerCase()) {
24
+ this.evmProviders[wallet_base_2.Wallet.Metamask] = event.detail.provider;
25
+ }
26
+ if (walletName === wallet_base_2.Wallet.Rainbow.toLowerCase()) {
27
+ this.evmProviders[wallet_base_2.Wallet.Rainbow] = event.detail.provider;
28
+ }
29
+ if (walletName === wallet_base_2.Wallet.Phantom.toLowerCase()) {
30
+ this.evmProviders[wallet_base_2.Wallet.Phantom] = event.detail.provider;
31
+ }
32
+ if (walletName === wallet_base_2.Wallet.OkxWallet.toLowerCase()) {
33
+ this.evmProviders[wallet_base_2.Wallet.OkxWallet] = event.detail.provider;
34
+ }
35
+ if (walletName === wallet_base_2.Wallet.BitGet.toLowerCase()) {
36
+ this.evmProviders[wallet_base_2.Wallet.BitGet] = event.detail.provider;
37
+ }
38
+ if (walletName === wallet_base_2.Wallet.TrustWallet.toLowerCase()) {
39
+ this.evmProviders[wallet_base_2.Wallet.TrustWallet] = event.detail.provider;
40
+ }
41
+ });
42
+ window.dispatchEvent(new Event('eip6963:requestProvider'));
43
+ }
18
44
  this.wallet = args.wallet;
19
45
  }
20
46
  EvmWalletException(error, context) {
@@ -33,6 +59,9 @@ class EvmWallet extends wallet_base_2.BaseConcreteStrategy {
33
59
  if (this.wallet === wallet_base_2.Wallet.TrustWallet) {
34
60
  return new exceptions_1.TrustWalletException(error, context);
35
61
  }
62
+ if (this.wallet === wallet_base_2.Wallet.Rainbow) {
63
+ return new exceptions_1.RainbowWalletException(error, context);
64
+ }
36
65
  return new exceptions_1.WalletException(error, context);
37
66
  }
38
67
  async getWalletDeviceType() {
@@ -215,7 +244,11 @@ class EvmWallet extends wallet_base_2.BaseConcreteStrategy {
215
244
  ethereum.on('accountsChanged', callback);
216
245
  }
217
246
  async getEthereum() {
218
- const provider = this.wallet === wallet_base_2.Wallet.Metamask
247
+ const evmProvider = this.evmProviders[this.wallet];
248
+ if (evmProvider) {
249
+ return evmProvider;
250
+ }
251
+ const backUpProvider = this.wallet === wallet_base_2.Wallet.Metamask
219
252
  ? await (0, index_js_1.getMetamaskProvider)()
220
253
  : this.wallet === wallet_base_2.Wallet.Phantom
221
254
  ? await (0, index_js_1.getPhantomProvider)()
@@ -225,15 +258,17 @@ class EvmWallet extends wallet_base_2.BaseConcreteStrategy {
225
258
  ? await (0, index_js_1.getOkxWalletProvider)()
226
259
  : this.wallet === wallet_base_2.Wallet.TrustWallet
227
260
  ? await (0, index_js_1.getTrustWalletProvider)()
228
- : undefined;
229
- if (!provider) {
261
+ : this.wallet === wallet_base_2.Wallet.Rainbow
262
+ ? await (0, index_js_1.getRainbowProvider)()
263
+ : undefined;
264
+ if (!backUpProvider) {
230
265
  throw this.EvmWalletException(new Error(`Please install the ${this.wallet} wallet extension.`), {
231
266
  code: exceptions_1.UnspecifiedErrorCode,
232
267
  type: exceptions_1.ErrorType.WalletNotInstalledError,
233
268
  contextModule: wallet_base_2.WalletAction.GetAccounts,
234
269
  });
235
270
  }
236
- return provider;
271
+ return backUpProvider;
237
272
  }
238
273
  }
239
274
  exports.EvmWallet = EvmWallet;
@@ -1,5 +1,6 @@
1
1
  export { getOkxWalletProvider } from './Okx.js';
2
2
  export { getBitGetProvider } from './bitget.js';
3
3
  export { getPhantomProvider } from './phantom.js';
4
+ export { getRainbowProvider } from './rainbow.js';
4
5
  export { getMetamaskProvider } from './metamask.js';
5
6
  export { getTrustWalletProvider } from './trustWallet.js';
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTrustWalletProvider = exports.getMetamaskProvider = exports.getPhantomProvider = exports.getBitGetProvider = exports.getOkxWalletProvider = void 0;
3
+ exports.getTrustWalletProvider = exports.getMetamaskProvider = exports.getRainbowProvider = exports.getPhantomProvider = exports.getBitGetProvider = exports.getOkxWalletProvider = void 0;
4
4
  var Okx_js_1 = require("./Okx.js");
5
5
  Object.defineProperty(exports, "getOkxWalletProvider", { enumerable: true, get: function () { return Okx_js_1.getOkxWalletProvider; } });
6
6
  var bitget_js_1 = require("./bitget.js");
7
7
  Object.defineProperty(exports, "getBitGetProvider", { enumerable: true, get: function () { return bitget_js_1.getBitGetProvider; } });
8
8
  var phantom_js_1 = require("./phantom.js");
9
9
  Object.defineProperty(exports, "getPhantomProvider", { enumerable: true, get: function () { return phantom_js_1.getPhantomProvider; } });
10
+ var rainbow_js_1 = require("./rainbow.js");
11
+ Object.defineProperty(exports, "getRainbowProvider", { enumerable: true, get: function () { return rainbow_js_1.getRainbowProvider; } });
10
12
  var metamask_js_1 = require("./metamask.js");
11
13
  Object.defineProperty(exports, "getMetamaskProvider", { enumerable: true, get: function () { return metamask_js_1.getMetamaskProvider; } });
12
14
  var trustWallet_js_1 = require("./trustWallet.js");
@@ -0,0 +1,4 @@
1
+ import { BrowserEip1993Provider } from '@injectivelabs/wallet-base';
2
+ export declare function getRainbowProvider({ timeout }?: {
3
+ timeout: number;
4
+ }): Promise<BrowserEip1993Provider>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRainbowProvider = getRainbowProvider;
4
+ const sdk_ts_1 = require("@injectivelabs/sdk-ts");
5
+ const $window = ((0, sdk_ts_1.isServerSide)()
6
+ ? {}
7
+ : window);
8
+ async function getRainbowProvider({ timeout } = { timeout: 3000 }) {
9
+ const provider = getRainbowWalletFromWindow();
10
+ if (provider) {
11
+ return provider;
12
+ }
13
+ return listenForRainbowWalletInitialized({
14
+ timeout,
15
+ });
16
+ }
17
+ async function listenForRainbowWalletInitialized({ timeout } = { timeout: 3000 }) {
18
+ return new Promise((resolve) => {
19
+ const handleInitialization = () => {
20
+ resolve(getRainbowWalletFromWindow());
21
+ };
22
+ $window.addEventListener('rainbow#initialized', handleInitialization, {
23
+ once: true,
24
+ });
25
+ setTimeout(() => {
26
+ $window.removeEventListener('rainbow#initialized', handleInitialization);
27
+ resolve(null);
28
+ }, timeout);
29
+ });
30
+ }
31
+ function getRainbowWalletFromWindow() {
32
+ const injectedProviderExist = typeof window !== 'undefined' &&
33
+ (typeof $window.ethereum !== 'undefined' ||
34
+ typeof $window.rainbow !== 'undefined');
35
+ // No injected providers exist.
36
+ if (!injectedProviderExist) {
37
+ return;
38
+ }
39
+ if ($window.rainbow) {
40
+ return $window.rainbow;
41
+ }
42
+ if ($window.ethereum.isRainbow) {
43
+ return $window.ethereum;
44
+ }
45
+ if ($window.providers) {
46
+ return $window.providers.find((p) => p.isRainbow);
47
+ }
48
+ return;
49
+ }
@@ -1,9 +1,10 @@
1
- import { TxRaw, TxResponse, DirectSignResponse, AminoSignResponse } from '@injectivelabs/sdk-ts';
1
+ import { TxRaw, TxResponse, AminoSignResponse, DirectSignResponse } from '@injectivelabs/sdk-ts';
2
2
  import { ErrorContext, ThrownException } from '@injectivelabs/exceptions';
3
- import { Wallet, StdSignDoc, WalletDeviceType, BaseConcreteStrategy, SendTransactionOptions, ConcreteWalletStrategy, ConcreteWalletStrategyArgs, ConcreteEthereumWalletStrategyArgs } from '@injectivelabs/wallet-base';
3
+ import { Wallet, StdSignDoc, WalletDeviceType, BaseConcreteStrategy, SendTransactionOptions, BrowserEip1993Provider, ConcreteWalletStrategy, ConcreteWalletStrategyArgs, ConcreteEthereumWalletStrategyArgs } from '@injectivelabs/wallet-base';
4
4
  import { AccountAddress, EthereumChainId } from '@injectivelabs/ts-types';
5
5
  export declare class EvmWallet extends BaseConcreteStrategy implements ConcreteWalletStrategy {
6
6
  wallet?: Wallet;
7
+ evmProviders: Partial<Record<Wallet, BrowserEip1993Provider>>;
7
8
  constructor(args: (ConcreteWalletStrategyArgs | ConcreteEthereumWalletStrategyArgs) & {
8
9
  wallet: Wallet;
9
10
  });
@@ -1,17 +1,43 @@
1
1
  /* eslint-disable class-methods-use-this */
2
2
  import { isEvmBrowserWallet } from '@injectivelabs/wallet-base';
3
- import { toUtf8, TxGrpcApi, } from '@injectivelabs/sdk-ts';
4
- import { ErrorType, WalletException, BitGetException, MetamaskException, OkxWalletException, UnspecifiedErrorCode, TransactionException, TrustWalletException, } from '@injectivelabs/exceptions';
3
+ import { toUtf8, TxGrpcApi, isServerSide, } from '@injectivelabs/sdk-ts';
4
+ import { ErrorType, WalletException, BitGetException, MetamaskException, OkxWalletException, UnspecifiedErrorCode, TransactionException, TrustWalletException, RainbowWalletException, } from '@injectivelabs/exceptions';
5
5
  import { Wallet, WalletAction, WalletDeviceType, WalletEventListener, BaseConcreteStrategy, } from '@injectivelabs/wallet-base';
6
6
  import { sleep, capitalize } from '@injectivelabs/utils';
7
- import { getBitGetProvider, getPhantomProvider, getMetamaskProvider, getOkxWalletProvider, getTrustWalletProvider, } from './utils/index.js';
7
+ import { getBitGetProvider, getPhantomProvider, getRainbowProvider, getMetamaskProvider, getOkxWalletProvider, getTrustWalletProvider, } from './utils/index.js';
8
8
  export class EvmWallet extends BaseConcreteStrategy {
9
9
  wallet;
10
+ evmProviders = {};
10
11
  constructor(args) {
11
12
  super(args);
12
13
  if (!isEvmBrowserWallet(args.wallet)) {
13
14
  throw new WalletException(new Error(`Evm Wallet for ${capitalize(args.wallet)} is not supported.`));
14
15
  }
16
+ if (!isServerSide()) {
17
+ window.addEventListener('eip6963:announceProvider', (announcement) => {
18
+ const event = announcement;
19
+ const walletName = event.detail.info.name.toLowerCase();
20
+ if (walletName === Wallet.Metamask.toLowerCase()) {
21
+ this.evmProviders[Wallet.Metamask] = event.detail.provider;
22
+ }
23
+ if (walletName === Wallet.Rainbow.toLowerCase()) {
24
+ this.evmProviders[Wallet.Rainbow] = event.detail.provider;
25
+ }
26
+ if (walletName === Wallet.Phantom.toLowerCase()) {
27
+ this.evmProviders[Wallet.Phantom] = event.detail.provider;
28
+ }
29
+ if (walletName === Wallet.OkxWallet.toLowerCase()) {
30
+ this.evmProviders[Wallet.OkxWallet] = event.detail.provider;
31
+ }
32
+ if (walletName === Wallet.BitGet.toLowerCase()) {
33
+ this.evmProviders[Wallet.BitGet] = event.detail.provider;
34
+ }
35
+ if (walletName === Wallet.TrustWallet.toLowerCase()) {
36
+ this.evmProviders[Wallet.TrustWallet] = event.detail.provider;
37
+ }
38
+ });
39
+ window.dispatchEvent(new Event('eip6963:requestProvider'));
40
+ }
15
41
  this.wallet = args.wallet;
16
42
  }
17
43
  EvmWalletException(error, context) {
@@ -30,6 +56,9 @@ export class EvmWallet extends BaseConcreteStrategy {
30
56
  if (this.wallet === Wallet.TrustWallet) {
31
57
  return new TrustWalletException(error, context);
32
58
  }
59
+ if (this.wallet === Wallet.Rainbow) {
60
+ return new RainbowWalletException(error, context);
61
+ }
33
62
  return new WalletException(error, context);
34
63
  }
35
64
  async getWalletDeviceType() {
@@ -212,7 +241,11 @@ export class EvmWallet extends BaseConcreteStrategy {
212
241
  ethereum.on('accountsChanged', callback);
213
242
  }
214
243
  async getEthereum() {
215
- const provider = this.wallet === Wallet.Metamask
244
+ const evmProvider = this.evmProviders[this.wallet];
245
+ if (evmProvider) {
246
+ return evmProvider;
247
+ }
248
+ const backUpProvider = this.wallet === Wallet.Metamask
216
249
  ? await getMetamaskProvider()
217
250
  : this.wallet === Wallet.Phantom
218
251
  ? await getPhantomProvider()
@@ -222,14 +255,16 @@ export class EvmWallet extends BaseConcreteStrategy {
222
255
  ? await getOkxWalletProvider()
223
256
  : this.wallet === Wallet.TrustWallet
224
257
  ? await getTrustWalletProvider()
225
- : undefined;
226
- if (!provider) {
258
+ : this.wallet === Wallet.Rainbow
259
+ ? await getRainbowProvider()
260
+ : undefined;
261
+ if (!backUpProvider) {
227
262
  throw this.EvmWalletException(new Error(`Please install the ${this.wallet} wallet extension.`), {
228
263
  code: UnspecifiedErrorCode,
229
264
  type: ErrorType.WalletNotInstalledError,
230
265
  contextModule: WalletAction.GetAccounts,
231
266
  });
232
267
  }
233
- return provider;
268
+ return backUpProvider;
234
269
  }
235
270
  }
@@ -1,5 +1,6 @@
1
1
  export { getOkxWalletProvider } from './Okx.js';
2
2
  export { getBitGetProvider } from './bitget.js';
3
3
  export { getPhantomProvider } from './phantom.js';
4
+ export { getRainbowProvider } from './rainbow.js';
4
5
  export { getMetamaskProvider } from './metamask.js';
5
6
  export { getTrustWalletProvider } from './trustWallet.js';
@@ -1,5 +1,6 @@
1
1
  export { getOkxWalletProvider } from './Okx.js';
2
2
  export { getBitGetProvider } from './bitget.js';
3
3
  export { getPhantomProvider } from './phantom.js';
4
+ export { getRainbowProvider } from './rainbow.js';
4
5
  export { getMetamaskProvider } from './metamask.js';
5
6
  export { getTrustWalletProvider } from './trustWallet.js';
@@ -0,0 +1,4 @@
1
+ import { BrowserEip1993Provider } from '@injectivelabs/wallet-base';
2
+ export declare function getRainbowProvider({ timeout }?: {
3
+ timeout: number;
4
+ }): Promise<BrowserEip1993Provider>;
@@ -0,0 +1,46 @@
1
+ import { isServerSide } from '@injectivelabs/sdk-ts';
2
+ const $window = (isServerSide()
3
+ ? {}
4
+ : window);
5
+ export async function getRainbowProvider({ timeout } = { timeout: 3000 }) {
6
+ const provider = getRainbowWalletFromWindow();
7
+ if (provider) {
8
+ return provider;
9
+ }
10
+ return listenForRainbowWalletInitialized({
11
+ timeout,
12
+ });
13
+ }
14
+ async function listenForRainbowWalletInitialized({ timeout } = { timeout: 3000 }) {
15
+ return new Promise((resolve) => {
16
+ const handleInitialization = () => {
17
+ resolve(getRainbowWalletFromWindow());
18
+ };
19
+ $window.addEventListener('rainbow#initialized', handleInitialization, {
20
+ once: true,
21
+ });
22
+ setTimeout(() => {
23
+ $window.removeEventListener('rainbow#initialized', handleInitialization);
24
+ resolve(null);
25
+ }, timeout);
26
+ });
27
+ }
28
+ function getRainbowWalletFromWindow() {
29
+ const injectedProviderExist = typeof window !== 'undefined' &&
30
+ (typeof $window.ethereum !== 'undefined' ||
31
+ typeof $window.rainbow !== 'undefined');
32
+ // No injected providers exist.
33
+ if (!injectedProviderExist) {
34
+ return;
35
+ }
36
+ if ($window.rainbow) {
37
+ return $window.rainbow;
38
+ }
39
+ if ($window.ethereum.isRainbow) {
40
+ return $window.ethereum;
41
+ }
42
+ if ($window.providers) {
43
+ return $window.providers.find((p) => p.isRainbow);
44
+ }
45
+ return;
46
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@injectivelabs/wallet-evm",
3
3
  "description": "EVM wallet strategies for use with @injectivelabs/wallet-core.",
4
- "version": "1.15.21",
4
+ "version": "1.15.22",
5
5
  "sideEffects": false,
6
6
  "type": "module",
7
7
  "author": {
@@ -56,17 +56,17 @@
56
56
  "start": "node dist/index.js"
57
57
  },
58
58
  "dependencies": {
59
- "@injectivelabs/exceptions": "^1.15.18",
60
- "@injectivelabs/networks": "^1.15.19",
61
- "@injectivelabs/sdk-ts": "^1.15.21",
62
- "@injectivelabs/ts-types": "^1.15.19",
63
- "@injectivelabs/utils": "^1.15.19",
64
- "@injectivelabs/wallet-base": "^1.15.21"
59
+ "@injectivelabs/exceptions": "^1.15.19",
60
+ "@injectivelabs/networks": "^1.15.20",
61
+ "@injectivelabs/sdk-ts": "^1.15.22",
62
+ "@injectivelabs/ts-types": "^1.15.20",
63
+ "@injectivelabs/utils": "^1.15.20",
64
+ "@injectivelabs/wallet-base": "^1.15.22"
65
65
  },
66
66
  "devDependencies": {
67
67
  "shx": "^0.3.3"
68
68
  },
69
- "gitHead": "2c15bac69ae75a5e7036cc64469a720452b414ac",
69
+ "gitHead": "3c10a76aa66dec3c20e234db53280fd8ced12c11",
70
70
  "typedoc": {
71
71
  "entryPoint": "./src/index.ts",
72
72
  "readmeFile": "./README.md",