@getpara/solana-wallet-connectors 0.1.0

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.
@@ -0,0 +1,3 @@
1
+ export { SolanaExternalWalletProvider, SolanaExternalWalletContext } from './providers/SolanaExternalWalletContext.js';
2
+ export { ParaSolanaProvider } from './providers/ParaSolanaProvider.js';
3
+ export * from './wallets/connectors/index.js';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { SolanaExternalWalletProvider, SolanaExternalWalletContext } from './providers/SolanaExternalWalletContext.js';
2
+ export { ParaSolanaProvider } from './providers/ParaSolanaProvider.js';
3
+ export * from './wallets/connectors/index.js';
@@ -0,0 +1,39 @@
1
+ import { ReactNode } from 'react';
2
+ import { WalletList } from '../types/Wallet.js';
3
+ import { type ConnectionConfig } from '@solana/web3.js';
4
+ import { Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';
5
+ export declare const defaultWallet: {
6
+ wallets: any[];
7
+ };
8
+ export declare const ParaSolanaContext: import("react").Context<{
9
+ wallets: WalletList;
10
+ }>;
11
+ interface ParaSolanaProviderProps {
12
+ children: ReactNode;
13
+ wallets: WalletList;
14
+ /** Endpoint passed to the ConnectionProvider
15
+ * Ref: https://solana-labs.github.io/solana-web3.js/classes/Connection.html
16
+ */
17
+ endpoint: string;
18
+ /** Optional config for the Connection Provider
19
+ * Ref: https://solana-labs.github.io/solana-web3.js/types/ConnectionConfig.html
20
+ */
21
+ connectionConfig?: ConnectionConfig;
22
+ /** App identity for the Solana mobile wallet adapter
23
+ * Ref: https://docs.solanamobile.com/reference/typescript/mobile-wallet-adapter#web3mobilewalletauthorize
24
+ */
25
+ appIdentity: {
26
+ name?: string;
27
+ uri?: string;
28
+ icon?: string;
29
+ };
30
+ /** Chain to use for the Solana mobile wallet adapter
31
+ * Ref: https://docs.solanamobile.com/reference/typescript/mobile-wallet-adapter#web3mobilewalletauthorize
32
+ */
33
+ chain: Chain;
34
+ }
35
+ export declare function ParaSolanaProvider({ children, wallets: walletFns, endpoint, appIdentity, chain, connectionConfig, }: ParaSolanaProviderProps): import("react/jsx-runtime").JSX.Element;
36
+ export declare const useParaSolana: () => {
37
+ wallets: WalletList;
38
+ };
39
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useMemo, useState } from 'react';
3
+ import { ConnectionProvider, WalletProvider as SolanaWalletProvider } from '@solana/wallet-adapter-react';
4
+ import { useExternalWalletProviderStore } from '@getpara/react-sdk';
5
+ import { SolanaExternalWalletContext, SolanaExternalWalletProvider } from './SolanaExternalWalletContext.js';
6
+ import { createDefaultAddressSelector, createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler, SolanaMobileWalletAdapter, } from '@solana-mobile/wallet-adapter-mobile';
7
+ export const defaultWallet = {
8
+ wallets: [],
9
+ };
10
+ export const ParaSolanaContext = createContext(defaultWallet);
11
+ export function ParaSolanaProvider({ children, wallets: walletFns, endpoint, appIdentity, chain, connectionConfig, }) {
12
+ const updateExternalWalletProviderState = useExternalWalletProviderStore(state => state.updateState);
13
+ const SolanaProvider = useExternalWalletProviderStore(state => state.SolanaProvider);
14
+ const solanaContext = useExternalWalletProviderStore(state => state.solanaContext);
15
+ const [shouldAutoConnect, setShouldAutoConnect] = useState(true);
16
+ // Only auto connect on initial render, after that rely on our connect function
17
+ useEffect(() => {
18
+ setShouldAutoConnect(false);
19
+ }, []);
20
+ useEffect(() => {
21
+ if (!solanaContext || !SolanaProvider) {
22
+ updateExternalWalletProviderState({
23
+ SolanaProvider: SolanaExternalWalletProvider,
24
+ solanaContext: SolanaExternalWalletContext,
25
+ });
26
+ }
27
+ }, []);
28
+ const value = useMemo(() => ({ wallets: walletFns }), [walletFns]);
29
+ if (!solanaContext || !SolanaProvider) {
30
+ return null;
31
+ }
32
+ return (_jsx(ConnectionProvider, { endpoint: endpoint, config: connectionConfig, children: _jsx(SolanaWalletProvider, { wallets: [
33
+ new SolanaMobileWalletAdapter({
34
+ addressSelector: createDefaultAddressSelector(),
35
+ appIdentity,
36
+ authorizationResultCache: createDefaultAuthorizationResultCache(),
37
+ chain,
38
+ onWalletNotFound: createDefaultWalletNotFoundHandler(),
39
+ }),
40
+ ], localStorageKey: "paraSolanaExternal", autoConnect: shouldAutoConnect, children: _jsx(ParaSolanaContext.Provider, { value: value, children: children }) }) }));
41
+ }
42
+ export const useParaSolana = () => useContext(ParaSolanaContext);
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from 'react';
2
+ import { CommonWallet } from '../types/CommonTypes.js';
3
+ import ParaWeb from '@getpara/web-sdk';
4
+ export declare const defaultSolanaExternalWallet: {
5
+ wallets: any[];
6
+ disconnect: () => Promise<void>;
7
+ };
8
+ export declare const SolanaExternalWalletContext: import("react").Context<{
9
+ wallets: CommonWallet[];
10
+ disconnect: () => Promise<void>;
11
+ }>;
12
+ interface SolanaExternalWalletProviderProps {
13
+ children: ReactNode;
14
+ para: ParaWeb;
15
+ onSwitchWallet: (args: {
16
+ address?: string;
17
+ error?: string;
18
+ }) => void;
19
+ }
20
+ export declare function SolanaExternalWalletProvider({ children, para, onSwitchWallet }: SolanaExternalWalletProviderProps): import("react/jsx-runtime").JSX.Element;
21
+ export {};
@@ -0,0 +1,125 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { createContext, useEffect, useMemo } from 'react';
12
+ import { useWallet } from '@solana/wallet-adapter-react';
13
+ import { WalletReadyState } from '@solana/wallet-adapter-base';
14
+ import { useParaSolana } from './ParaSolanaProvider.js';
15
+ import { WalletType } from '@getpara/web-sdk';
16
+ export const defaultSolanaExternalWallet = {
17
+ wallets: [],
18
+ disconnect: () => Promise.resolve(),
19
+ };
20
+ export const SolanaExternalWalletContext = createContext(defaultSolanaExternalWallet);
21
+ export function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
22
+ const { wallets: adapters, select: selectWallet, disconnect: _disconnect, publicKey: solanaAddress, wallet, connecting, } = useWallet();
23
+ const { wallets: walletFns } = useParaSolana();
24
+ const reset = () => __awaiter(this, void 0, void 0, function* () {
25
+ yield _disconnect();
26
+ yield para.logout();
27
+ });
28
+ const login = (address, providerName) => __awaiter(this, void 0, void 0, function* () {
29
+ try {
30
+ yield para.externalWalletLogin({ address, type: WalletType.SOLANA, provider: providerName });
31
+ }
32
+ catch (err) {
33
+ yield reset();
34
+ throw 'Error logging you in. Please try again.';
35
+ }
36
+ });
37
+ const switchWallet = (address) => __awaiter(this, void 0, void 0, function* () {
38
+ var _a;
39
+ let error;
40
+ // If we're calling switch wallet with no address, treat it as if the user disconnected the wallet from the app and logout to reset the Para instance.
41
+ if (!address) {
42
+ yield para.logout();
43
+ }
44
+ else {
45
+ try {
46
+ yield login(address, (_a = wallet === null || wallet === void 0 ? void 0 : wallet.adapter) === null || _a === void 0 ? void 0 : _a.name);
47
+ }
48
+ catch (err) {
49
+ error = err;
50
+ }
51
+ }
52
+ onSwitchWallet({ address, error });
53
+ });
54
+ useEffect(() => {
55
+ var _a;
56
+ const storedExternalWallet = para.externalWallets[(_a = solanaAddress === null || solanaAddress === void 0 ? void 0 : solanaAddress.toString()) !== null && _a !== void 0 ? _a : ''];
57
+ if (!!solanaAddress && !storedExternalWallet) {
58
+ reset();
59
+ }
60
+ }, []);
61
+ useEffect(() => {
62
+ var _a, _b;
63
+ const storedExternalWallet = para.externalWallets[(_b = (_a = para.currentExternalWalletAddresses) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : ''];
64
+ // If the user is using an external Solana wallet we want to watch for wallet changes and log them in to a different user when the wallet changes
65
+ if (!connecting &&
66
+ (storedExternalWallet === null || storedExternalWallet === void 0 ? void 0 : storedExternalWallet.type) === WalletType.SOLANA &&
67
+ (storedExternalWallet === null || storedExternalWallet === void 0 ? void 0 : storedExternalWallet.address) !== (solanaAddress === null || solanaAddress === void 0 ? void 0 : solanaAddress.toString())) {
68
+ switchWallet(solanaAddress === null || solanaAddress === void 0 ? void 0 : solanaAddress.toString());
69
+ }
70
+ }, [solanaAddress, connecting]);
71
+ const connect = (adapter) => __awaiter(this, void 0, void 0, function* () {
72
+ yield _disconnect();
73
+ if (!adapter) {
74
+ return { address: undefined, error: 'Adapter not found.' };
75
+ }
76
+ selectWallet(adapter.name);
77
+ // Using a timeout here to ensure the selectWallet function sets the wallet completely before connecting.
78
+ // Without this there was a race condition where connect wasn't correctly listening to the adapters connect event.
79
+ yield new Promise(resolve => setTimeout(resolve, 100));
80
+ let address;
81
+ let error;
82
+ try {
83
+ yield adapter.connect();
84
+ address = adapter.publicKey.toString();
85
+ if (address) {
86
+ try {
87
+ yield login(address, adapter.name);
88
+ }
89
+ catch (err) {
90
+ yield _disconnect();
91
+ address = undefined;
92
+ error = err;
93
+ }
94
+ }
95
+ }
96
+ catch (err) {
97
+ switch (err.message) {
98
+ case 'User aborted.':
99
+ case 'Approval Denied':
100
+ case 'You canceled this request.': {
101
+ error = 'Connection request rejected';
102
+ break;
103
+ }
104
+ default: {
105
+ error = 'An unknown error occurred';
106
+ break;
107
+ }
108
+ }
109
+ }
110
+ return { address, error };
111
+ });
112
+ const getAdapter = (name) => { var _a; return (_a = adapters.find(a => (a.adapter.name === 'Mobile Wallet Adapter' ? a : a.adapter.name === name ? a : false))) === null || _a === void 0 ? void 0 : _a.adapter; };
113
+ const wallets = walletFns.map(walletFn => {
114
+ const metaData = walletFn();
115
+ const adapter = getAdapter(metaData.name);
116
+ return Object.assign({ connect: () => connect(adapter), connectMobile: () => connect(adapter), getQrUri: () => '', type: WalletType.SOLANA, installed: adapter && ((adapter === null || adapter === void 0 ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter === null || adapter === void 0 ? void 0 : adapter.readyState) === WalletReadyState.Loadable) }, metaData);
117
+ });
118
+ const disconnect = () => __awaiter(this, void 0, void 0, function* () {
119
+ yield _disconnect();
120
+ // The solana library seems to keep some state hanging around that will auto receonnect the same wallet if the window isn't refreshed and the wallet connector is selected again in the modal.
121
+ // Refreshing here after a disconnect fixes the issue.
122
+ typeof window !== undefined && (window === null || window === void 0 ? void 0 : window.location.reload());
123
+ });
124
+ return (_jsx(SolanaExternalWalletContext.Provider, { value: useMemo(() => ({ wallets, disconnect }), [wallets, disconnect]), children: children }));
125
+ }
@@ -0,0 +1,22 @@
1
+ export type WalletMetadata = {
2
+ id: string;
3
+ name: string;
4
+ iconUrl: string;
5
+ installed?: boolean;
6
+ isExtension?: boolean;
7
+ isMobile?: boolean;
8
+ isWeb?: boolean;
9
+ downloadUrl?: string;
10
+ getQrUri?: () => Promise<string>;
11
+ };
12
+ export type CommonWallet = {
13
+ connect: () => Promise<{
14
+ address?: string;
15
+ error?: string;
16
+ }>;
17
+ connectMobile: (isManualWalletConnect?: boolean) => Promise<{
18
+ address?: string;
19
+ error?: string;
20
+ }>;
21
+ type: 'EVM' | 'SOLANA' | 'COSMOS';
22
+ } & WalletMetadata;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { WalletMetadata } from './CommonTypes.js';
2
+ export type Wallet = {
3
+ getUri?: (uri: string) => string;
4
+ } & WalletMetadata;
5
+ export type CreateWalletFn = () => Wallet;
6
+ export type WalletList = CreateWalletFn[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Wallet } from '../../../types/Wallet.js';
2
+ export declare const backpackWallet: () => Wallet;
@@ -0,0 +1,12 @@
1
+ import { icon } from './backpackIcon.js';
2
+ export const backpackWallet = () => {
3
+ return {
4
+ id: 'backpack',
5
+ name: 'Backpack',
6
+ iconUrl: icon,
7
+ isExtension: true,
8
+ isMobile: true,
9
+ getUri: () => '',
10
+ downloadUrl: 'https://backpack.app/download',
11
+ };
12
+ };
@@ -0,0 +1 @@
1
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==";
@@ -0,0 +1 @@
1
+ export const icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==';
@@ -0,0 +1,2 @@
1
+ import { Wallet } from '../../../types/Wallet.js';
2
+ export declare const glowWallet: () => Wallet;
@@ -0,0 +1,12 @@
1
+ import { icon } from './glowIcon.js';
2
+ export const glowWallet = () => {
3
+ return {
4
+ id: 'glow',
5
+ name: 'Glow',
6
+ iconUrl: icon,
7
+ isExtension: true,
8
+ isMobile: true,
9
+ getUri: () => '',
10
+ downloadUrl: 'https://glow.app',
11
+ };
12
+ };
@@ -0,0 +1 @@
1
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzN18xMjEwKSI+CiAgICA8cGF0aCBkPSJNMjAuNDE2MiAyMC41NTQxQzE4LjE3MzggMjIuNzY1OCAxNS4xNDk2IDI0LjAwNCAxMiAyNEM4Ljg1NzU3IDI0LjAwNDcgNS44Mzk2NSAyMi43NzE5IDMuNTk5MjQgMjAuNTY4NEM4LjUxMzI5IDE2LjY5NzkgMTUuNDk2NiAxNi42OTM0IDIwLjQxNjIgMjAuNTU0MVpNMjAuNTU0MSAyMC40MTYyQzIyLjc2NTggMTguMTczOCAyNC4wMDQgMTUuMTQ5NiAyNCAxMkMyNCA4LjcyOTQ4IDIyLjY5MTggNS43NjU2MSAyMC41NzA2IDMuNjAwMzRDMTYuNjk3OSA4LjUyODczIDE2LjY5MzQgMTUuNDk3NyAyMC41NTQxIDIwLjQxNjJaTTIwLjQzMzkgMy40NjM1NkMxNS41MDc3IDcuMzQ0MDYgOC41MDIyNiA3LjMzODU1IDMuNTgwNDggMy40NDkyMkM1LjgyMzA2IDEuMjM1MjkgOC44NDg3MSAtMC4wMDQyMjQ3NCAxMiAxLjA4MTk0ZS0wNUMxNS4yODcxIDEuMDgxOTRlLTA1IDE4LjI2NjQgMS4zMjI1NiAyMC40MzM5IDMuNDYzNTZaTTMuNDQ5MjIgMy41ODA0OEMxLjIzNTI5IDUuODIzMDYgLTAuMDA0MjI0NzQgOC44NDg3MSAxLjA4MTk0ZS0wNSAxMkMxLjA4MTk0ZS0wNSAxNS4yODgyIDEuMzIyNTYgMTguMjY2NCAzLjQ2MzU2IDIwLjQzMzlDNy4zNDQwNiAxNS41MDc3IDcuMzM4NTUgOC41MDIyNiAzLjQ0OTIyIDMuNTgwNDhaIiBmaWxsPSIjQ0M2MkQ1Ii8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDM3XzEyMTAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
@@ -0,0 +1 @@
1
+ export const icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzN18xMjEwKSI+CiAgICA8cGF0aCBkPSJNMjAuNDE2MiAyMC41NTQxQzE4LjE3MzggMjIuNzY1OCAxNS4xNDk2IDI0LjAwNCAxMiAyNEM4Ljg1NzU3IDI0LjAwNDcgNS44Mzk2NSAyMi43NzE5IDMuNTk5MjQgMjAuNTY4NEM4LjUxMzI5IDE2LjY5NzkgMTUuNDk2NiAxNi42OTM0IDIwLjQxNjIgMjAuNTU0MVpNMjAuNTU0MSAyMC40MTYyQzIyLjc2NTggMTguMTczOCAyNC4wMDQgMTUuMTQ5NiAyNCAxMkMyNCA4LjcyOTQ4IDIyLjY5MTggNS43NjU2MSAyMC41NzA2IDMuNjAwMzRDMTYuNjk3OSA4LjUyODczIDE2LjY5MzQgMTUuNDk3NyAyMC41NTQxIDIwLjQxNjJaTTIwLjQzMzkgMy40NjM1NkMxNS41MDc3IDcuMzQ0MDYgOC41MDIyNiA3LjMzODU1IDMuNTgwNDggMy40NDkyMkM1LjgyMzA2IDEuMjM1MjkgOC44NDg3MSAtMC4wMDQyMjQ3NCAxMiAxLjA4MTk0ZS0wNUMxNS4yODcxIDEuMDgxOTRlLTA1IDE4LjI2NjQgMS4zMjI1NiAyMC40MzM5IDMuNDYzNTZaTTMuNDQ5MjIgMy41ODA0OEMxLjIzNTI5IDUuODIzMDYgLTAuMDA0MjI0NzQgOC44NDg3MSAxLjA4MTk0ZS0wNSAxMkMxLjA4MTk0ZS0wNSAxNS4yODgyIDEuMzIyNTYgMTguMjY2NCAzLjQ2MzU2IDIwLjQzMzlDNy4zNDQwNiAxNS41MDc3IDcuMzM4NTUgOC41MDIyNiAzLjQ0OTIyIDMuNTgwNDhaIiBmaWxsPSIjQ0M2MkQ1Ii8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDM3XzEyMTAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+';
@@ -0,0 +1,4 @@
1
+ import { phantomWallet } from './phantom/phantom.js';
2
+ import { glowWallet } from './glow/glow.js';
3
+ import { backpackWallet } from './backpack/backpack.js';
4
+ export { phantomWallet, glowWallet, backpackWallet };
@@ -0,0 +1,4 @@
1
+ import { phantomWallet } from './phantom/phantom.js';
2
+ import { glowWallet } from './glow/glow.js';
3
+ import { backpackWallet } from './backpack/backpack.js';
4
+ export { phantomWallet, glowWallet, backpackWallet };
@@ -0,0 +1,2 @@
1
+ import { Wallet } from '../../../types/Wallet.js';
2
+ export declare const phantomWallet: () => Wallet;
@@ -0,0 +1,12 @@
1
+ import { icon } from './phantomIcon.js';
2
+ export const phantomWallet = () => {
3
+ return {
4
+ id: 'phantom',
5
+ name: 'Phantom',
6
+ iconUrl: icon,
7
+ isExtension: true,
8
+ isMobile: true,
9
+ getUri: () => '',
10
+ downloadUrl: 'https://phantom.app/download',
11
+ };
12
+ };
@@ -0,0 +1 @@
1
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzNl85NDApIj4KICAgIDxwYXRoIGQ9Ik0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAzNl85NDApIi8+CiAgICA8cGF0aCBkPSJNMjAuODgyMyAxMS44ODk3SDE4Ljc1NUMxOC43NTUgNy41MzIyMyAxNS4yMjgyIDQgMTAuODc3MyA0QzYuNTgwMzcgNCAzLjA4Njg5IDcuNDQ1NzYgMy4wMDEzOSAxMS43Mjg2QzIuOTEyOTMgMTYuMTU1NyA3LjA2MDAxIDIwIDExLjQ4MDkgMjBIMTIuMDM3QzE1LjkzNDUgMjAgMjEuMTU4NSAxNi45NDQzIDIxLjk3NDcgMTMuMjIxMUMyMi4xMjU0IDEyLjUzNDggMjEuNTg0MSAxMS44ODk3IDIwLjg4MjMgMTEuODg5N1pNNy43MTU5NiAxMi4wODM4QzcuNzE1OTYgMTIuNjY2NSA3LjI0MDA5IDEzLjE0MzEgNi42NTgyNyAxMy4xNDMxQzYuMDc2NDQgMTMuMTQzMSA1LjYwMDYgMTIuNjY2MyA1LjYwMDYgMTIuMDgzOFYxMC4zNzAxQzUuNjAwNiA5Ljc4NzQ0IDYuMDc2NDQgOS4zMTA4NCA2LjY1ODI3IDkuMzEwODRDNy4yNDAwOSA5LjMxMDg0IDcuNzE1OTYgOS43ODc0NCA3LjcxNTk2IDEwLjM3MDFWMTIuMDgzOFpNMTEuMzg4NiAxMi4wODM4QzExLjM4ODYgMTIuNjY2NSAxMC45MTI4IDEzLjE0MzEgMTAuMzMxIDEzLjE0MzFDOS43NDkxNCAxMy4xNDMxIDkuMjczMzIgMTIuNjY2MyA5LjI3MzMyIDEyLjA4MzhWMTAuMzcwMUM5LjI3MzMyIDkuNzg3NDQgOS43NDkzNSA5LjMxMDg0IDEwLjMzMSA5LjMxMDg0QzEwLjkxMjggOS4zMTA4NCAxMS4zODg2IDkuNzg3NDQgMTEuMzg4NiAxMC4zNzAxVjEyLjA4MzhaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTAzNl85NDApIi8+CiAgPC9nPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzEwMzZfOTQwIiB4MT0iMTIiIHkxPSIwIiB4Mj0iMTIiIHkyPSIyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTM0QkIxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU1MUJGOSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xMDM2Xzk0MCIgeDE9IjEyLjUiIHkxPSI0IiB4Mj0iMTIuNSIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMC44MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcDBfMTAzNl85NDAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
@@ -0,0 +1 @@
1
+ export const icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzNl85NDApIj4KICAgIDxwYXRoIGQ9Ik0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAzNl85NDApIi8+CiAgICA8cGF0aCBkPSJNMjAuODgyMyAxMS44ODk3SDE4Ljc1NUMxOC43NTUgNy41MzIyMyAxNS4yMjgyIDQgMTAuODc3MyA0QzYuNTgwMzcgNCAzLjA4Njg5IDcuNDQ1NzYgMy4wMDEzOSAxMS43Mjg2QzIuOTEyOTMgMTYuMTU1NyA3LjA2MDAxIDIwIDExLjQ4MDkgMjBIMTIuMDM3QzE1LjkzNDUgMjAgMjEuMTU4NSAxNi45NDQzIDIxLjk3NDcgMTMuMjIxMUMyMi4xMjU0IDEyLjUzNDggMjEuNTg0MSAxMS44ODk3IDIwLjg4MjMgMTEuODg5N1pNNy43MTU5NiAxMi4wODM4QzcuNzE1OTYgMTIuNjY2NSA3LjI0MDA5IDEzLjE0MzEgNi42NTgyNyAxMy4xNDMxQzYuMDc2NDQgMTMuMTQzMSA1LjYwMDYgMTIuNjY2MyA1LjYwMDYgMTIuMDgzOFYxMC4zNzAxQzUuNjAwNiA5Ljc4NzQ0IDYuMDc2NDQgOS4zMTA4NCA2LjY1ODI3IDkuMzEwODRDNy4yNDAwOSA5LjMxMDg0IDcuNzE1OTYgOS43ODc0NCA3LjcxNTk2IDEwLjM3MDFWMTIuMDgzOFpNMTEuMzg4NiAxMi4wODM4QzExLjM4ODYgMTIuNjY2NSAxMC45MTI4IDEzLjE0MzEgMTAuMzMxIDEzLjE0MzFDOS43NDkxNCAxMy4xNDMxIDkuMjczMzIgMTIuNjY2MyA5LjI3MzMyIDEyLjA4MzhWMTAuMzcwMUM5LjI3MzMyIDkuNzg3NDQgOS43NDkzNSA5LjMxMDg0IDEwLjMzMSA5LjMxMDg0QzEwLjkxMjggOS4zMTA4NCAxMS4zODg2IDkuNzg3NDQgMTEuMzg4NiAxMC4zNzAxVjEyLjA4MzhaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTAzNl85NDApIi8+CiAgPC9nPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzEwMzZfOTQwIiB4MT0iMTIiIHkxPSIwIiB4Mj0iMTIiIHkyPSIyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTM0QkIxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU1MUJGOSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xMDM2Xzk0MCIgeDE9IjEyLjUiIHkxPSI0IiB4Mj0iMTIuNSIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMC44MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcDBfMTAzNl85NDAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+';
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@getpara/solana-wallet-connectors",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": "./dist/index.js",
9
+ "./connectors": "./dist/wallets/connectors/index.js"
10
+ },
11
+ "dependencies": {
12
+ "@getpara/react-sdk": "0.1.0"
13
+ },
14
+ "scripts": {
15
+ "build": "rm -rf dist && tsc",
16
+ "test": "vitest run --coverage"
17
+ },
18
+ "devDependencies": {
19
+ "@solana-mobile/wallet-adapter-mobile": "2.1.3",
20
+ "@solana/wallet-adapter-base": "0.9.23",
21
+ "@solana/wallet-adapter-react": "0.15.35",
22
+ "@solana/wallet-adapter-walletconnect": "0.1.16",
23
+ "@types/react": "^18.0.31",
24
+ "@types/react-dom": "^18.2.7",
25
+ "typescript": "^5.4.3"
26
+ },
27
+ "peerDependencies": {
28
+ "@solana-mobile/wallet-adapter-mobile": "2.1.x",
29
+ "@solana/wallet-adapter-base": "0.9.x",
30
+ "@solana/wallet-adapter-react": "0.15.x",
31
+ "@solana/wallet-adapter-walletconnect": "0.1.x",
32
+ "react": ">=18",
33
+ "react-dom": ">=18"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "package.json"
38
+ ],
39
+ "gitHead": "625aaa94001a5461dcde8d6775c3b73f3862c76c"
40
+ }