@getpara/solana-wallet-connectors 1.11.0 → 2.0.0-alpha.10

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.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
- export { SolanaExternalWalletProvider, SolanaExternalWalletContext } from './providers/SolanaExternalWalletContext.js';
1
+ export { SolanaExternalWalletContext } from './providers/SolanaExternalWalletContext.js';
2
+ export type { SolanaExternalWalletContextType } from './providers/SolanaExternalWalletContext.js';
2
3
  export { ParaSolanaProvider } from './providers/ParaSolanaProvider.js';
4
+ export type { ParaSolanaProviderConfig, ParaSolanaProviderProps } from './providers/ParaSolanaProvider.js';
3
5
  export * from './wallets/connectors/index.js';
6
+ export type { WalletList } from './types/Wallet.js';
package/dist/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  "use client";
2
- import { SolanaExternalWalletProvider, SolanaExternalWalletContext } from "./providers/SolanaExternalWalletContext.js";
2
+ import { SolanaExternalWalletContext } from "./providers/SolanaExternalWalletContext.js";
3
3
  import { ParaSolanaProvider } from "./providers/ParaSolanaProvider.js";
4
4
  export * from "./wallets/connectors/index.js";
5
5
  export {
6
6
  ParaSolanaProvider,
7
- SolanaExternalWalletContext,
8
- SolanaExternalWalletProvider
7
+ SolanaExternalWalletContext
9
8
  };
@@ -1,16 +1,9 @@
1
- import { ReactNode } from 'react';
1
+ import { PropsWithChildren } from 'react';
2
2
  import { WalletList } from '../types/Wallet.js';
3
- import ParaWeb from '@getpara/react-sdk';
3
+ import { SolanaExternalWalletProviderConfig } from './SolanaExternalWalletContext.js';
4
4
  import { type ConnectionConfig } from '@solana/web3.js';
5
5
  import { Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';
6
- export declare const defaultWallet: {
7
- wallets: any[];
8
- };
9
- export declare const ParaSolanaContext: import("react").Context<{
10
- wallets: WalletList;
11
- }>;
12
- interface ParaSolanaProviderProps {
13
- children: ReactNode;
6
+ export interface ParaSolanaProviderConfig {
14
7
  wallets: WalletList;
15
8
  /** Endpoint passed to the ConnectionProvider
16
9
  * Ref: https://solana-labs.github.io/solana-web3.js/classes/Connection.html
@@ -32,10 +25,9 @@ interface ParaSolanaProviderProps {
32
25
  * Ref: https://docs.solanamobile.com/reference/typescript/mobile-wallet-adapter#web3mobilewalletauthorize
33
26
  */
34
27
  chain: Chain;
35
- para?: ParaWeb;
36
28
  }
37
- export declare function ParaSolanaProvider({ children, wallets: walletFns, endpoint, appIdentity, chain, connectionConfig, para: _para, }: ParaSolanaProviderProps): import("react/jsx-runtime").JSX.Element;
38
- export declare const useParaSolana: () => {
39
- wallets: WalletList;
29
+ export type ParaSolanaProviderProps = {
30
+ config: ParaSolanaProviderConfig;
31
+ internalConfig: SolanaExternalWalletProviderConfig;
40
32
  };
41
- export {};
33
+ export declare function ParaSolanaProvider({ children, config, internalConfig }: ParaSolanaProviderProps & PropsWithChildren): import("react/jsx-runtime").JSX.Element;
@@ -1,68 +1,39 @@
1
1
  "use client";
2
- var __async = (__this, __arguments, generator) => {
3
- return new Promise((resolve, reject) => {
4
- var fulfilled = (value) => {
5
- try {
6
- step(generator.next(value));
7
- } catch (e) {
8
- reject(e);
9
- }
10
- };
11
- var rejected = (value) => {
12
- try {
13
- step(generator.throw(value));
14
- } catch (e) {
15
- reject(e);
16
- }
17
- };
18
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
19
- step((generator = generator.apply(__this, __arguments)).next());
20
- });
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
21
19
  };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
21
  import { jsx } from "react/jsx-runtime";
23
- import { createContext, useContext, useEffect, useMemo, useState } from "react";
22
+ import { useMemo } from "react";
24
23
  import { ConnectionProvider, WalletProvider as SolanaWalletProvider } from "@solana/wallet-adapter-react";
25
- import { useClient, useExternalWalletProviderStore } from "@getpara/react-sdk";
26
- import { SolanaExternalWalletContext, SolanaExternalWalletProvider } from "./SolanaExternalWalletContext.js";
24
+ import { SolanaExternalWalletProvider } from "./SolanaExternalWalletContext.js";
27
25
  import {
28
26
  createDefaultAddressSelector,
29
27
  createDefaultAuthorizationResultCache,
30
28
  createDefaultWalletNotFoundHandler,
31
29
  SolanaMobileWalletAdapter
32
30
  } from "@solana-mobile/wallet-adapter-mobile";
33
- const defaultWallet = {
34
- wallets: []
35
- };
36
- const ParaSolanaContext = createContext(defaultWallet);
37
- function ParaSolanaProvider({
38
- children,
39
- wallets: walletFns,
40
- endpoint,
41
- appIdentity,
42
- chain,
43
- connectionConfig,
44
- para: _para
45
- }) {
46
- const updateExternalWalletProviderState = useExternalWalletProviderStore((state) => state.updateState);
47
- const SolanaProvider = useExternalWalletProviderStore((state) => state.SolanaProvider);
48
- const solanaContext = useExternalWalletProviderStore((state) => state.solanaContext);
49
- const [shouldAutoConnect, setShouldAutoConnect] = useState(true);
50
- const para = _para != null ? _para : useClient();
51
- useEffect(() => {
52
- setShouldAutoConnect(false);
53
- }, []);
54
- useEffect(() => {
55
- if (!solanaContext || !SolanaProvider) {
56
- updateExternalWalletProviderState({
57
- SolanaProvider: SolanaExternalWalletProvider,
58
- solanaContext: SolanaExternalWalletContext
59
- });
60
- }
61
- }, []);
62
- const value = useMemo(() => ({ wallets: walletFns }), [walletFns]);
63
- if (!solanaContext || !SolanaProvider) {
64
- return null;
65
- }
31
+ function ParaSolanaProvider({ children, config, internalConfig }) {
32
+ const { wallets: walletFns, endpoint, appIdentity, chain, connectionConfig } = config;
33
+ const solanaExternalWalletProviderProps = useMemo(
34
+ () => __spreadValues({ wallets: walletFns }, internalConfig),
35
+ [walletFns, internalConfig]
36
+ );
66
37
  return /* @__PURE__ */ jsx(ConnectionProvider, { endpoint, config: connectionConfig, children: /* @__PURE__ */ jsx(
67
38
  SolanaWalletProvider,
68
39
  {
@@ -76,27 +47,11 @@ function ParaSolanaProvider({
76
47
  })
77
48
  ],
78
49
  localStorageKey: "paraSolanaExternal",
79
- autoConnect: (adapter) => __async(this, null, function* () {
80
- var _a;
81
- const hasParaExternalWallet = (_a = Object.values(para.externalWallets)) == null ? void 0 : _a.find((w) => w.name === adapter.name);
82
- if (shouldAutoConnect && hasParaExternalWallet) {
83
- if (!para.isExternalWalletAuth) {
84
- return true;
85
- } else if (para.isExternalWalletAuth && (yield para.isFullyLoggedIn())) {
86
- return true;
87
- }
88
- return false;
89
- }
90
- return false;
91
- }),
92
- children: /* @__PURE__ */ jsx(ParaSolanaContext.Provider, { value, children })
50
+ autoConnect: true,
51
+ children: /* @__PURE__ */ jsx(SolanaExternalWalletProvider, __spreadProps(__spreadValues({}, solanaExternalWalletProviderProps), { children }))
93
52
  }
94
53
  ) });
95
54
  }
96
- const useParaSolana = () => useContext(ParaSolanaContext);
97
55
  export {
98
- ParaSolanaContext,
99
- ParaSolanaProvider,
100
- defaultWallet,
101
- useParaSolana
56
+ ParaSolanaProvider
102
57
  };
@@ -1,13 +1,8 @@
1
- import { ReactNode } from 'react';
1
+ import { PropsWithChildren } from 'react';
2
2
  import ParaWeb from '@getpara/web-sdk';
3
- import { CommonWallet } from '@getpara/react-sdk';
4
- export declare const defaultSolanaExternalWallet: {
5
- wallets: any[];
6
- disconnect: () => Promise<void>;
7
- signMessage: () => Promise<{}>;
8
- signVerificationMessage: () => Promise<{}>;
9
- };
10
- export declare const SolanaExternalWalletContext: import("react").Context<{
3
+ import { WalletList } from '../types/Wallet.js';
4
+ import { TExternalWallet, type CommonWallet } from '@getpara/react-common';
5
+ export type SolanaExternalWalletContextType = {
11
6
  wallets: CommonWallet[];
12
7
  disconnect: () => Promise<void>;
13
8
  signMessage: (message: string) => Promise<{
@@ -19,14 +14,18 @@ export declare const SolanaExternalWalletContext: import("react").Context<{
19
14
  signature?: string;
20
15
  error?: string;
21
16
  }>;
22
- }>;
23
- interface SolanaExternalWalletProviderProps {
24
- children: ReactNode;
25
- para: ParaWeb;
26
- onSwitchWallet: (args: {
17
+ };
18
+ export declare const SolanaExternalWalletContext: import("react").Context<SolanaExternalWalletContextType>;
19
+ export type SolanaExternalWalletProviderConfig = {
20
+ onSwitchWallet?: (args: {
27
21
  address?: string;
28
22
  error?: string;
29
23
  }) => void;
30
- }
31
- export declare function SolanaExternalWalletProvider({ children, para, onSwitchWallet }: SolanaExternalWalletProviderProps): import("react/jsx-runtime").JSX.Element;
24
+ para: ParaWeb;
25
+ walletsWithFullAuth: TExternalWallet[];
26
+ };
27
+ type SolanaExternalWalletProviderConfigFull = {
28
+ wallets: WalletList;
29
+ } & SolanaExternalWalletProviderConfig;
30
+ export declare function SolanaExternalWalletProvider({ children, wallets: walletFns, onSwitchWallet, para, walletsWithFullAuth, }: SolanaExternalWalletProviderConfigFull & PropsWithChildren): import("react/jsx-runtime").JSX.Element;
32
31
  export {};
@@ -39,9 +39,6 @@ import { jsx } from "react/jsx-runtime";
39
39
  import { createContext, useEffect, useMemo, useRef } from "react";
40
40
  import { useWallet } from "@solana/wallet-adapter-react";
41
41
  import { WalletReadyState } from "@solana/wallet-adapter-base";
42
- import { useParaSolana } from "./ParaSolanaProvider.js";
43
- import { WalletType } from "@getpara/web-sdk";
44
- import { useExternalWalletProviderStore } from "@getpara/react-sdk";
45
42
  import bs58 from "bs58";
46
43
  const defaultSolanaExternalWallet = {
47
44
  wallets: [],
@@ -50,7 +47,13 @@ const defaultSolanaExternalWallet = {
50
47
  signVerificationMessage: () => Promise.resolve({})
51
48
  };
52
49
  const SolanaExternalWalletContext = createContext(defaultSolanaExternalWallet);
53
- function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
50
+ function SolanaExternalWalletProvider({
51
+ children,
52
+ wallets: walletFns,
53
+ onSwitchWallet,
54
+ para,
55
+ walletsWithFullAuth
56
+ }) {
54
57
  const {
55
58
  wallets: adapters,
56
59
  select: selectWallet,
@@ -58,26 +61,26 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
58
61
  publicKey: solanaAddress,
59
62
  wallet,
60
63
  connecting,
61
- signMessage: solanaSignMessage,
62
- connected
64
+ connected,
65
+ signMessage: solanaSignMessage
63
66
  } = useWallet();
64
- const { wallets: walletFns } = useParaSolana();
65
- const fullAuthWallets = useExternalWalletProviderStore((state) => state.fullAuthWallets);
66
67
  const verificationMessage = useRef();
67
68
  const reset = () => __async(this, null, function* () {
68
69
  yield _disconnect();
69
70
  yield para.logout();
70
71
  });
71
- const login = (address, providerName) => __async(this, null, function* () {
72
+ const login = (_0) => __async(this, [_0], function* ({ address, providerName }) {
72
73
  var _a, _b;
73
74
  try {
74
- return yield para.externalWalletLogin({
75
- address,
76
- type: WalletType.SOLANA,
77
- provider: providerName,
78
- withFullParaAuth: fullAuthWallets == null ? void 0 : fullAuthWallets.includes(
79
- (_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : ""
80
- )
75
+ return yield para.loginExternalWallet({
76
+ externalWallet: {
77
+ address,
78
+ type: "SOLANA",
79
+ provider: providerName,
80
+ withFullParaAuth: walletsWithFullAuth == null ? void 0 : walletsWithFullAuth.includes(
81
+ (_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : ""
82
+ )
83
+ }
81
84
  });
82
85
  } catch (err) {
83
86
  yield reset();
@@ -91,7 +94,7 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
91
94
  yield para.logout();
92
95
  } else {
93
96
  try {
94
- yield login(address, (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name);
97
+ yield login({ address, providerName: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name });
95
98
  } catch (err) {
96
99
  error = err;
97
100
  }
@@ -107,16 +110,21 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
107
110
  }, []);
108
111
  useEffect(() => {
109
112
  const storedExternalWallet = Object.values(para.externalWallets || {})[0];
110
- if (!connecting && (storedExternalWallet == null ? void 0 : storedExternalWallet.type) === WalletType.SOLANA && (storedExternalWallet == null ? void 0 : storedExternalWallet.address) !== (solanaAddress == null ? void 0 : solanaAddress.toString())) {
113
+ if (!connecting && (!wallet || (wallet == null ? void 0 : wallet.adapter.connected)) && (storedExternalWallet == null ? void 0 : storedExternalWallet.type) === "SOLANA" && (storedExternalWallet == null ? void 0 : storedExternalWallet.address) !== (solanaAddress == null ? void 0 : solanaAddress.toString())) {
111
114
  switchWallet(solanaAddress == null ? void 0 : solanaAddress.toString());
112
115
  }
113
- }, [solanaAddress, connecting]);
116
+ }, [solanaAddress, connecting, wallet]);
114
117
  const signMessage = (message) => __async(this, null, function* () {
118
+ var _a;
115
119
  try {
116
120
  const encodedMessage = new TextEncoder().encode(message);
117
121
  const signature = yield solanaSignMessage(encodedMessage);
118
122
  return {
119
- address: solanaAddress.toString(),
123
+ externalWallet: {
124
+ address: solanaAddress.toString(),
125
+ type: "SOLANA",
126
+ provider: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name
127
+ },
120
128
  signature: bs58.encode(signature)
121
129
  };
122
130
  } catch (e) {
@@ -133,23 +141,20 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
133
141
  const connect = (adapter) => __async(this, null, function* () {
134
142
  yield _disconnect();
135
143
  if (!adapter) {
136
- return { address: void 0, error: "Adapter not found.", userExists: false, isVerified: false };
144
+ return { error: "Adapter not found." };
137
145
  }
138
146
  selectWallet(adapter.name);
139
147
  yield new Promise((resolve) => setTimeout(resolve, 100));
140
148
  let address;
141
149
  let error;
142
- let userExists = false;
143
- let isVerified = false;
150
+ let authState;
144
151
  try {
145
152
  yield adapter.connect();
146
153
  address = adapter.publicKey.toString();
147
154
  if (address) {
148
155
  try {
149
- const loginResp = yield login(address, adapter.name);
150
- userExists = loginResp.userExists;
151
- isVerified = loginResp.isVerified;
152
- verificationMessage.current = loginResp.signatureVerificationMessage;
156
+ authState = yield login({ address, providerName: adapter.name });
157
+ verificationMessage.current = authState.stage === "verify" ? authState.signatureVerificationMessage : void 0;
153
158
  } catch (err) {
154
159
  yield _disconnect();
155
160
  address = void 0;
@@ -170,12 +175,13 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
170
175
  }
171
176
  }
172
177
  }
173
- return { address, error, userExists, isVerified };
178
+ return { address, error, authState };
174
179
  });
175
180
  const getAdapter = (name) => {
176
181
  var _a;
177
182
  return (_a = adapters.find((a) => a.adapter.name === "Mobile Wallet Adapter" ? a : a.adapter.name === name ? a : false)) == null ? void 0 : _a.adapter;
178
183
  };
184
+ const getWallet = (name) => wallets.find((w) => w.name === name);
179
185
  const wallets = walletFns.map((walletFn) => {
180
186
  const metaData = walletFn();
181
187
  const adapter = getAdapter(metaData.name);
@@ -183,11 +189,10 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
183
189
  connect: () => connect(adapter),
184
190
  connectMobile: () => connect(adapter),
185
191
  getQrUri: () => "",
186
- type: WalletType.SOLANA,
192
+ type: "SOLANA",
187
193
  installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable)
188
194
  }, metaData);
189
195
  });
190
- const getWallet = (name) => wallets.find((w) => w.name === name);
191
196
  const disconnect = () => __async(this, null, function* () {
192
197
  yield _disconnect();
193
198
  if (connected) {
@@ -207,6 +212,5 @@ function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
207
212
  }
208
213
  export {
209
214
  SolanaExternalWalletContext,
210
- SolanaExternalWalletProvider,
211
- defaultSolanaExternalWallet
215
+ SolanaExternalWalletProvider
212
216
  };
@@ -1,4 +1,4 @@
1
- import { WalletMetadata } from '@getpara/react-sdk';
1
+ import { type WalletMetadata } from '@getpara/react-common';
2
2
  export type Wallet = {
3
3
  getUri?: (uri: string) => string;
4
4
  } & WalletMetadata;
@@ -2,3 +2,4 @@ import { phantomWallet } from './phantom/phantom.js';
2
2
  import { glowWallet } from './glow/glow.js';
3
3
  import { backpackWallet } from './backpack/backpack.js';
4
4
  export { phantomWallet, glowWallet, backpackWallet };
5
+ export declare const allWallets: (() => import("../../types/Wallet.js").Wallet)[];
@@ -2,7 +2,9 @@
2
2
  import { phantomWallet } from "./phantom/phantom.js";
3
3
  import { glowWallet } from "./glow/glow.js";
4
4
  import { backpackWallet } from "./backpack/backpack.js";
5
+ const allWallets = [phantomWallet, glowWallet, backpackWallet];
5
6
  export {
7
+ allWallets,
6
8
  backpackWallet,
7
9
  glowWallet,
8
10
  phantomWallet
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpara/solana-wallet-connectors",
3
- "version": "1.11.0",
3
+ "version": "2.0.0-alpha.10",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,29 +8,26 @@
8
8
  ".": "./dist/index.js",
9
9
  "./connectors": "./dist/wallets/connectors/index.js"
10
10
  },
11
- "dependencies": {
12
- "@getpara/react-sdk": "1.11.0",
13
- "bs58": "6.0.0"
14
- },
15
11
  "scripts": {
16
12
  "build": "rm -rf dist && yarn typegen && node ./scripts/build.mjs",
17
13
  "typegen": "tsc --emitDeclarationOnly",
18
14
  "test": "vitest run --coverage"
19
15
  },
20
- "devDependencies": {
16
+ "dependencies": {
17
+ "@getpara/web-sdk": "2.0.0-alpha.10",
21
18
  "@solana-mobile/wallet-adapter-mobile": "2.1.3",
22
19
  "@solana/wallet-adapter-base": "0.9.23",
23
20
  "@solana/wallet-adapter-react": "0.15.35",
24
21
  "@solana/wallet-adapter-walletconnect": "0.1.16",
22
+ "bs58": "6.0.0"
23
+ },
24
+ "devDependencies": {
25
+ "@getpara/react-common": "2.0.0-alpha.10",
25
26
  "@types/react": "^18.0.31",
26
27
  "@types/react-dom": "^18.2.7",
27
28
  "typescript": "^5.4.3"
28
29
  },
29
30
  "peerDependencies": {
30
- "@solana-mobile/wallet-adapter-mobile": "2.1.x",
31
- "@solana/wallet-adapter-base": "0.9.x",
32
- "@solana/wallet-adapter-react": "0.15.x",
33
- "@solana/wallet-adapter-walletconnect": "0.1.x",
34
31
  "react": ">=18",
35
32
  "react-dom": ">=18"
36
33
  },
@@ -38,5 +35,5 @@
38
35
  "dist",
39
36
  "package.json"
40
37
  ],
41
- "gitHead": "91b68e4ead22e2104307c934f2a582245b176619"
38
+ "gitHead": "92904c321f1dd8101046d8d2d70aa341bac99842"
42
39
  }