diff --git a/README.md b/README.md
index cbf6c87..8c7f555 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# @bitte-ai/react
-This package contains React helpers for interacting with Bitte Wallet.
+This package contains React helpers for interacting with Bitte Wallet and other NEAR wallets.
@@ -8,60 +8,210 @@ This package contains React helpers for interacting with Bitte Wallet.
-
## Summary
-- [Installing](#Installing)
-
-- [BitteWalletContextProvider (default)](#bittewalletcontextprovider) : The default Bitte Wallet provider
-
+- [Installing](#installing)
+- [Wallet Selection](#wallet-selection)
+- [BitteWalletContextProvider](#bittewalletcontextprovider)
+- [Available Wallets](#available-wallets)
+- [Usage Examples](#usage-examples)
+- [Legacy API](#legacy-api)
+- [Troubleshooting](#troubleshooting)
# Installing
### NPM:
-```
+```bash
npm install @bitte-ai/react
npm install @near-wallet-selector/modal-ui
```
### Yarn:
-```
+```bash
yarn add @bitte-ai/react
yarn add @near-wallet-selector/modal-ui
```
### PNPM:
-```
+```bash
pnpm install @bitte-ai/react
pnpm install @near-wallet-selector/modal-ui
```
+# Wallet Selection
+
+You can now easily choose which wallets to display by using the `enabledWallets` prop. This gives developers full control over the wallet selection experience.
+
+## Available Wallets
+
+The following wallets are supported:
+
+- `"intear"` - Intear Wallet
+- `"hot"` - Here Wallet (formerly HOT Wallet)
+- `"okx"` - OKX Wallet
+- `"bitte"` - Bitte Wallet
+- `"meteor"` - Meteor Wallet
+- `"mynear"` - MyNEAR Wallet
+
# BitteWalletContextProvider
-the default way of interacting with Bitte Wallet is using the BitteWalletContextProvider
+The default way of interacting with Bitte Wallet is using the BitteWalletContextProvider.
+
+## Properties:
+
+**network**: `"mainnet" | "testnet"` - The NEAR network to connect to
+
+**enabledWallets**: `WalletName[]` - Array of wallet names to display (recommended)
+
+**additionalWallets**: `WalletModuleFactory[]` - Extra wallets setup
+
+**contractAddress**: `string` - Contract address for wallet connection
+**onlyBitteWallet**: `boolean` - Legacy prop to show only Bitte Wallet
-## properties:
+**walletUrl**: `string` - Custom Bitte Wallet URL
-**network** : ` mainnet | testnet`
+# Usage Examples
-**additionalWallets** : `WalletModuleFactory[] extra wallets setup`
+## Basic Wallet Selection (Recommended)
```typescript
import "@near-wallet-selector/modal-ui/styles.css";
-import { BitteWalletContextProvider } from '@bitte-ai/react'
+import { BitteWalletContextProvider, useBitteWallet, WalletName } from '@bitte-ai/react';
+
+// Select only the wallets you want to show
+const enabledWallets: WalletName[] = ['intear', 'hot', 'okx', 'bitte'];
+
+function MyApp() {
+ return (
+
+
+
+ );
+}
+
+function WalletConnector() {
+ const { connect, disconnect, isConnected, accounts } = useBitteWallet();
+
+ return (
+
+ {!isConnected ? (
+
+ ) : (
+
+
Connected: {accounts[0]?.accountId}
+
+
+ )}
+
+ );
+}
+```
+
+## All Available Wallets
+
+```typescript
+const allWallets: WalletName[] = ['intear', 'hot', 'okx', 'bitte', 'meteor', 'mynear'];
+
+
+
+
+```
+
+## Only Specific Wallets
+
+```typescript
+// Only show Bitte and Intear wallets
+const selectedWallets: WalletName[] = ['bitte', 'intear'];
+
+
+
+
+```
+
+## Combining with Additional Wallets
+
+```typescript
+import { setupCustomWallet } from 'custom-wallet';
+
+const myWallets: WalletName[] = ['bitte', 'intear', 'meteor'];
+
+
+```
+
+## TypeScript Support
+
+The `WalletName` type ensures you only use supported wallet names:
+
+```typescript
+import { WalletName } from '@bitte-ai/react';
+
+// ✅ This works
+const validWallets: WalletName[] = ['intear', 'bitte', 'meteor'];
+
+// ❌ TypeScript error - 'invalid' is not a valid wallet name
+const invalidWallets: WalletName[] = ['intear', 'invalid'];
+```
+
+# Legacy API
+
+The previous API is still supported for backwards compatibility:
+
+## Using onlyBitteWallet
+
+```typescript
+
-
+
+```
+
+## Using additionalWallets Only
+```typescript
+import { setupSomeCustomWallet } from 'some-custom-wallet';
+
+
+
+
```
+## Important Notes
+
+- If you don't specify `enabledWallets`, the default wallets (`meteor`, `mynear`, `hot`) plus `bitte` will be used
+- If you specify an empty `enabledWallets` array, no wallets will be shown
+- The `enabledWallets` option takes precedence over `onlyBitteWallet` when both are provided
+- Additional wallets from `additionalWallets` will always be included regardless of the `enabledWallets` setting
+
# Troubleshooting
The wallet runs only on client-side.
diff --git a/package.json b/package.json
index ccee694..5ce716c 100644
--- a/package.json
+++ b/package.json
@@ -49,9 +49,11 @@
"@bitte-ai/wallet": "0.8.2",
"@near-wallet-selector/core": "^9.5.1",
"@near-wallet-selector/here-wallet": "^9.5.1",
+ "@near-wallet-selector/intear-wallet": "^9.5.1",
"@near-wallet-selector/meteor-wallet": "^9.5.1",
"@near-wallet-selector/modal-ui": "^9.5.1",
"@near-wallet-selector/my-near-wallet": "^9.5.1",
+ "@near-wallet-selector/okx-wallet": "^9.5.1",
"buffer": "^6.0.3",
"react": "^19.1.1",
"react-dom": "^19.1.1"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c28cfe8..c890217 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -21,6 +21,9 @@ importers:
'@near-wallet-selector/here-wallet':
specifier: ^9.5.1
version: 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(bn.js@4.12.2)(borsh@2.0.0)(near-api-js@5.1.1)
+ '@near-wallet-selector/intear-wallet':
+ specifier: ^9.5.1
+ version: 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))
'@near-wallet-selector/meteor-wallet':
specifier: ^9.5.1
version: 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/tokens@2.3.0)(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/utils@1.1.0)
@@ -30,6 +33,9 @@ importers:
'@near-wallet-selector/my-near-wallet':
specifier: ^9.5.1
version: 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))
+ '@near-wallet-selector/okx-wallet':
+ specifier: ^9.5.1
+ version: 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))
buffer:
specifier: ^6.0.3
version: 6.0.3
@@ -419,6 +425,9 @@ packages:
'@near-wallet-selector/here-wallet@9.5.1':
resolution: {integrity: sha512-DCb4Mrkdd3NF4wLDuRJkE7SBa+r3JXVIKFECpgGaaqmYZQLr0k7bxDJMPsgaFLRe5ag8uqqFR2StWl8Ok1YEtg==}
+ '@near-wallet-selector/intear-wallet@9.5.1':
+ resolution: {integrity: sha512-ODfH1gH75qTFQ3SJlEuPzToBZCNyC4vyFATb3J10Xo2fuv0tQEVprQFzHV99849XJYqk3Z7Yu3R6xma+FoMcZw==}
+
'@near-wallet-selector/meteor-wallet@9.5.1':
resolution: {integrity: sha512-38LOWbyrrBLxPf8CrK09RXESCXv+nhS3yQb/z8fFHdOFJrSumyKIq+p+zOhXcM16tYOcGX+ydM0BSXUkj+keJA==}
@@ -431,6 +440,9 @@ packages:
'@near-wallet-selector/my-near-wallet@9.5.1':
resolution: {integrity: sha512-AdhIX9zSYHJveTAN05dgARwVFtJWhkALQItYz551duSruusVyWjP2rLA10xYBipm/kK0BSyOId6rQxjAY2TsBQ==}
+ '@near-wallet-selector/okx-wallet@9.5.1':
+ resolution: {integrity: sha512-3kgn1lWIQyuYgqhGSFVCAfsV7hZh/HcQCA3ENMwyQupACFdRmDlCLb3mOeOYpDrmGcjSYUSvVA63KIoA6lnyoA==}
+
'@near-wallet-selector/wallet-utils@8.10.2':
resolution: {integrity: sha512-B+mQBpkQ0PwDsxLw+tiju3u5cDFxKCQntTl9G1oTkKpDUiUmOZfzlKYM0s549WicNUqIVvCLQyicMhgIfLunQw==}
peerDependencies:
@@ -855,6 +867,9 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-mobile@4.0.0:
+ resolution: {integrity: sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==}
+
is-my-ip-valid@1.0.1:
resolution: {integrity: sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==}
@@ -1775,6 +1790,17 @@ snapshots:
- encoding
- near-api-js
+ '@near-wallet-selector/intear-wallet@9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))':
+ dependencies:
+ '@near-wallet-selector/core': 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(near-api-js@5.0.0)
+ '@near-wallet-selector/wallet-utils': 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(near-api-js@5.0.0)
+ near-api-js: 5.0.0
+ transitivePeerDependencies:
+ - '@near-js/crypto'
+ - '@near-js/keystores'
+ - '@near-js/transactions'
+ - encoding
+
'@near-wallet-selector/meteor-wallet@9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/tokens@2.3.0)(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/utils@1.1.0)':
dependencies:
'@meteorwallet/sdk': 1.0.24(@near-js/tokens@2.3.0)(@near-js/utils@1.1.0)(near-api-js@5.0.0)
@@ -1813,6 +1839,17 @@ snapshots:
- '@near-js/transactions'
- encoding
+ '@near-wallet-selector/okx-wallet@9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))':
+ dependencies:
+ '@near-wallet-selector/core': 9.5.1(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/keystores@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5))(@near-js/transactions@2.2.5(@near-js/crypto@2.2.5(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(@near-js/types@2.2.5)(@near-js/utils@1.1.0))(near-api-js@5.0.0)
+ is-mobile: 4.0.0
+ near-api-js: 5.0.0
+ transitivePeerDependencies:
+ - '@near-js/crypto'
+ - '@near-js/keystores'
+ - '@near-js/transactions'
+ - encoding
+
'@near-wallet-selector/wallet-utils@8.10.2(near-api-js@5.1.1)':
dependencies:
'@near-wallet-selector/core': 8.10.2(near-api-js@5.1.1)
@@ -2182,6 +2219,8 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
+ is-mobile@4.0.0: {}
+
is-my-ip-valid@1.0.1: {}
is-my-json-valid@2.20.6:
diff --git a/src/BitteWalletContext.tsx b/src/BitteWalletContext.tsx
index f9d340e..26c1e8e 100644
--- a/src/BitteWalletContext.tsx
+++ b/src/BitteWalletContext.tsx
@@ -8,7 +8,10 @@ import React, {
useState,
} from "react";
import { BitteWalletAuth } from "./wallet/bitte-wallet";
-import type { WalletSelectorComponents } from "./wallet/bitte-wallet";
+import type {
+ WalletSelectorComponents,
+ WalletName,
+} from "./wallet/bitte-wallet";
import type {
WalletSelector,
@@ -41,6 +44,7 @@ interface ContextProviderType {
additionalWallets?: Array;
onlyBitteWallet?: boolean;
walletUrl?: string;
+ enabledWallets?: WalletName[];
}
export const BitteWalletContext = createContext(
@@ -54,6 +58,7 @@ export const BitteWalletContextProvider: React.FC = ({
additionalWallets,
onlyBitteWallet,
walletUrl,
+ enabledWallets,
}): JSX.Element => {
const [errorMessage, setErrorMessage] = useState(null);
const [components, setComponents] = useState(
@@ -85,7 +90,11 @@ export const BitteWalletContextProvider: React.FC = ({
return await setupBitteWalletSelector(
isOnlyBitteWallet,
selectedNetwork,
- { additionalWallets: additionalWallets },
+ {
+ additionalWallets: additionalWallets,
+ enabledWallets: enabledWallets,
+ },
+ selectedContract,
walletUrl,
);
};
diff --git a/src/index.ts b/src/index.ts
index 48dbd15..99a8153 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,5 +1,6 @@
export * from "./BitteWalletContext";
export * from "./hooks/useNearPrice";
+export type { WalletName } from "./wallet/bitte-wallet";
export type {
Wallet,
WalletModuleFactory,
diff --git a/src/wallet/bitte-wallet.ts b/src/wallet/bitte-wallet.ts
index c018b97..192fcb1 100644
--- a/src/wallet/bitte-wallet.ts
+++ b/src/wallet/bitte-wallet.ts
@@ -24,6 +24,8 @@ import { setupBitteWallet } from "@bitte-ai/wallet";
import { setupMeteorWallet } from "@near-wallet-selector/meteor-wallet";
import { setupHereWallet } from "@near-wallet-selector/here-wallet";
import { setupMyNearWallet } from "@near-wallet-selector/my-near-wallet";
+import { setupIntearWallet } from "@near-wallet-selector/intear-wallet";
+import { setupOKXWallet } from "@near-wallet-selector/okx-wallet";
const SUPPORT =
"- further help available on our telegram channel: https://t.me/mintdev";
@@ -33,12 +35,44 @@ export const ERROR_MESSAGES = {
WALLET_CONNECTION_NOT_FOUND: `Wallet connection not received after ${WALLET_CONNECTION_TIMEOUT}ms - ${SUPPORT}`,
};
+// Supported wallet configurations
+export type WalletName =
+ | "intear"
+ | "hot"
+ | "okx"
+ | "bitte"
+ | "meteor"
+ | "mynear";
+
+export const WALLET_MODULES: Record WalletModuleFactory> = {
+ intear: () => setupIntearWallet(),
+ hot: () => setupHereWallet(), // "hot" maps to HereWallet
+ okx: () => setupOKXWallet(),
+ bitte: () => setupBitteWallet() as WalletModuleFactory,
+ meteor: () => setupMeteorWallet(),
+ mynear: () => setupMyNearWallet(),
+};
+
+// Default supported wallets (backwards compatibility)
export const SUPPORTED_NEAR_WALLETS: Array = [
setupMeteorWallet(),
setupMyNearWallet(),
setupHereWallet(),
];
+// Helper function to get wallet modules from names
+export const getWalletModulesFromNames = (
+ walletNames: WalletName[],
+): Array => {
+ return walletNames.map((name) => {
+ const moduleFactory = WALLET_MODULES[name];
+ if (!moduleFactory) {
+ throw new Error(`Unsupported wallet: ${name}`);
+ }
+ return moduleFactory();
+ });
+};
+
export type WalletSelectorComponents = {
selector: WalletSelector;
modal: WalletSelectorModal;
@@ -55,40 +89,51 @@ const walletUrls = {
export const BitteWalletAuth = {
walletSelectorComponents: {
- selector: null,
- modal: null,
+ selector: null as WalletSelector | null,
+ modal: null as WalletSelectorModal | null,
},
setupBitteWalletSelector: async (
onlyBitteWallet = false,
network?: "testnet" | "mainnet",
- options?: { additionalWallets?: Array },
+ options?: {
+ additionalWallets?: Array;
+ enabledWallets?: WalletName[];
+ },
contractAddress?: string,
walletUrl?: string,
): Promise => {
- if (onlyBitteWallet === false) {
- BitteWalletAuth.walletSelectorComponents.selector =
- await setupWalletSelector({
- network: network || "mainnet",
- modules: [
- setupBitteWallet() as WalletModuleFactory,
- ...(options?.additionalWallets || []),
- ...SUPPORTED_NEAR_WALLETS,
- ],
- });
+ // Determine which wallets to include
+ const walletModules: Array = [];
+
+ if (options?.enabledWallets && options.enabledWallets.length > 0) {
+ // Use enabledWallets if specified
+ walletModules.push(...getWalletModulesFromNames(options.enabledWallets));
+ } else if (onlyBitteWallet === false) {
+ // Legacy behavior: include Bitte + default wallets
+ walletModules.push(
+ setupBitteWallet() as WalletModuleFactory,
+ ...SUPPORTED_NEAR_WALLETS,
+ );
} else {
- BitteWalletAuth.walletSelectorComponents.selector =
- await setupWalletSelector({
- network: network || "mainnet",
- modules: [
- setupBitteWallet({
- walletUrl:
- walletUrl || walletUrls[network as "mainnet" | "testnet"],
- }) as WalletModuleFactory,
- ...(options?.additionalWallets || []),
- ],
- });
+ // Only Bitte wallet
+ walletModules.push(
+ setupBitteWallet({
+ walletUrl: walletUrl || walletUrls[network as "mainnet" | "testnet"],
+ }) as WalletModuleFactory,
+ );
}
+ // Add any additional wallets
+ if (options?.additionalWallets) {
+ walletModules.push(...options.additionalWallets);
+ }
+
+ BitteWalletAuth.walletSelectorComponents.selector =
+ await setupWalletSelector({
+ network: network || "mainnet",
+ modules: walletModules,
+ });
+
BitteWalletAuth.walletSelectorComponents.modal = setupModal(
BitteWalletAuth.walletSelectorComponents.selector,
{
@@ -96,19 +141,35 @@ export const BitteWalletAuth = {
},
);
- return BitteWalletAuth.walletSelectorComponents;
+ return BitteWalletAuth.walletSelectorComponents as WalletSelectorComponents;
},
setupWalletSelectorComponents: async (
- network?,
- contractAddress?,
- options?: { additionalWallets?: Array },
+ network?: "testnet" | "mainnet",
+ contractAddress?: string,
+ options?: {
+ additionalWallets?: Array;
+ enabledWallets?: WalletName[];
+ },
): Promise => {
+ // Determine which wallets to include
+ const walletModules: Array = [];
+
+ if (options?.enabledWallets && options.enabledWallets.length > 0) {
+ // Use enabledWallets if specified
+ walletModules.push(...getWalletModulesFromNames(options.enabledWallets));
+ } else {
+ // Default behavior: use SUPPORTED_NEAR_WALLETS
+ walletModules.push(...SUPPORTED_NEAR_WALLETS);
+ }
+
+ // Add any additional wallets
+ if (options?.additionalWallets) {
+ walletModules.push(...options.additionalWallets);
+ }
+
const selector = await setupWalletSelector({
- network: network,
- modules: [
- ...SUPPORTED_NEAR_WALLETS,
- ...(options?.additionalWallets || []),
- ],
+ network: network || "mainnet",
+ modules: walletModules,
});
const modal = setupModal(selector, {
@@ -119,7 +180,7 @@ export const BitteWalletAuth = {
selector,
modal,
};
- return BitteWalletAuth.walletSelectorComponents;
+ return BitteWalletAuth.walletSelectorComponents as WalletSelectorComponents;
},
SetupNotCalledError: class extends Error {
constructor(message?: string) {
@@ -129,6 +190,11 @@ export const BitteWalletAuth = {
},
ConnectionTimeoutError: class extends Error {
message: string;
+ constructor(message?: string) {
+ super(message);
+ this.message = message || "";
+ this.name = "ConnectionTimeoutError";
+ }
},
validateWalletComponentsAreSetup: (): void => {
if (!BitteWalletAuth.walletSelectorComponents.selector) {
@@ -139,17 +205,19 @@ export const BitteWalletAuth = {
},
registerWalletAccountsSubscriber: (
callback: (accounts: AccountState[]) => void,
- ): Subscription => {
+ ): any => {
BitteWalletAuth.validateWalletComponentsAreSetup();
- return BitteWalletAuth.walletSelectorComponents.selector.store.observable
+ return (
+ BitteWalletAuth.walletSelectorComponents.selector!.store.observable as any
+ )
.pipe(
- map((state: any) => state.accounts),
- distinctUntilChanged(),
+ (map as any)((state: any) => state.accounts),
+ (distinctUntilChanged as any)(),
)
.subscribe(callback);
},
- timerReference: null,
+ timerReference: null as any,
pollForWalletConnection: async (): Promise => {
BitteWalletAuth.validateWalletComponentsAreSetup();
// clear any existing timer
@@ -157,11 +225,13 @@ export const BitteWalletAuth = {
const tryToResolveAccountsFromState = (
resolve: (value: AccountState[]) => void,
- reject: (err: ConnectionTimeoutError) => void,
+ reject: (
+ err: InstanceType,
+ ) => void,
elapsed = 0,
): void => {
const { accounts } =
- BitteWalletAuth.walletSelectorComponents.selector.store.getState() ||
+ BitteWalletAuth.walletSelectorComponents.selector!.store.getState() ||
{};
// accounts present in state
@@ -172,7 +242,7 @@ export const BitteWalletAuth = {
// timed out
if (elapsed > WALLET_CONNECTION_TIMEOUT) {
reject(
- new ConnectionTimeoutError(
+ new BitteWalletAuth.ConnectionTimeoutError(
ERROR_MESSAGES.WALLET_CONNECTION_NOT_FOUND,
),
);
@@ -198,18 +268,18 @@ export const BitteWalletAuth = {
getWallet: async (): Promise => {
BitteWalletAuth.validateWalletComponentsAreSetup();
- return await BitteWalletAuth.walletSelectorComponents.selector.wallet();
+ return await BitteWalletAuth.walletSelectorComponents.selector!.wallet();
},
connectWalletSelector: (): void => {
BitteWalletAuth.validateWalletComponentsAreSetup();
- BitteWalletAuth.walletSelectorComponents.modal.show();
+ BitteWalletAuth.walletSelectorComponents.modal!.show();
},
disconnectFromWalletSelector: async (): Promise => {
BitteWalletAuth.validateWalletComponentsAreSetup();
const wallet =
- await BitteWalletAuth.walletSelectorComponents.selector.wallet();
+ await BitteWalletAuth.walletSelectorComponents.selector!.wallet();
wallet.signOut();
},
getVerifiedOwner: async (
@@ -220,7 +290,7 @@ export const BitteWalletAuth = {
const { message, callbackUrl, meta } = params;
const wallet =
- await BitteWalletAuth.walletSelectorComponents.selector.wallet();
+ await BitteWalletAuth.walletSelectorComponents.selector!.wallet();
const owner = (await wallet.verifyOwner({
message: message,
@@ -228,11 +298,11 @@ export const BitteWalletAuth = {
meta: meta,
})) as VerifiedOwner;
- return owner;
+ return owner!;
},
signMessage: async (params: VerifyOwnerParams): Promise => {
const owner = await BitteWalletAuth.getVerifiedOwner(params);
- return owner;
+ return owner!;
},
};