@getpara/solana-wallet-connectors 1.8.0 → 2.0.0-alpha.3

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,312 @@
1
1
  "use client";
2
- import { SolanaExternalWalletProvider, SolanaExternalWalletContext } from "./providers/SolanaExternalWalletContext.js";
3
- import { ParaSolanaProvider } from "./providers/ParaSolanaProvider.js";
4
- export * from "./wallets/connectors/index.js";
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;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __async = (__this, __arguments, generator) => {
22
+ return new Promise((resolve, reject) => {
23
+ var fulfilled = (value) => {
24
+ try {
25
+ step(generator.next(value));
26
+ } catch (e) {
27
+ reject(e);
28
+ }
29
+ };
30
+ var rejected = (value) => {
31
+ try {
32
+ step(generator.throw(value));
33
+ } catch (e) {
34
+ reject(e);
35
+ }
36
+ };
37
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
38
+ step((generator = generator.apply(__this, __arguments)).next());
39
+ });
40
+ };
41
+
42
+ // src/providers/SolanaExternalWalletContext.tsx
43
+ import { createContext, useEffect, useMemo, useRef } from "react";
44
+ import { useWallet } from "@solana/wallet-adapter-react";
45
+ import { WalletReadyState } from "@solana/wallet-adapter-base";
46
+ import { WalletType } from "@getpara/web-sdk";
47
+ import bs58 from "bs58";
48
+ import { jsx } from "react/jsx-runtime";
49
+ var defaultSolanaExternalWallet = {
50
+ wallets: [],
51
+ disconnect: () => Promise.resolve(),
52
+ signMessage: () => Promise.resolve({}),
53
+ signVerificationMessage: () => Promise.resolve({})
54
+ };
55
+ var SolanaExternalWalletContext = createContext(defaultSolanaExternalWallet);
56
+ function SolanaExternalWalletProvider({
57
+ children,
58
+ wallets: walletFns,
59
+ onSwitchWallet,
60
+ para,
61
+ walletsWithFullAuth
62
+ }) {
63
+ const {
64
+ wallets: adapters,
65
+ select: selectWallet,
66
+ disconnect: _disconnect,
67
+ publicKey: solanaAddress,
68
+ wallet,
69
+ connecting,
70
+ connected,
71
+ signMessage: solanaSignMessage
72
+ } = useWallet();
73
+ const verificationMessage = useRef();
74
+ const reset = () => __async(this, null, function* () {
75
+ yield _disconnect();
76
+ yield para.logout();
77
+ });
78
+ const login = (_0) => __async(this, [_0], function* ({ address, providerName }) {
79
+ var _a, _b;
80
+ try {
81
+ return yield para.loginExternalWallet({
82
+ externalWallet: {
83
+ address,
84
+ type: WalletType.SOLANA,
85
+ provider: providerName,
86
+ withFullParaAuth: walletsWithFullAuth == null ? void 0 : walletsWithFullAuth.includes(
87
+ (_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : ""
88
+ )
89
+ }
90
+ });
91
+ } catch (err) {
92
+ yield reset();
93
+ throw "Error logging you in. Please try again.";
94
+ }
95
+ });
96
+ const switchWallet = (address) => __async(this, null, function* () {
97
+ var _a;
98
+ let error;
99
+ if (!address) {
100
+ yield para.logout();
101
+ } else {
102
+ try {
103
+ yield login({ address, providerName: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name });
104
+ } catch (err) {
105
+ error = err;
106
+ }
107
+ }
108
+ onSwitchWallet({ address, error });
109
+ });
110
+ useEffect(() => {
111
+ var _a;
112
+ const storedExternalWallet = para.externalWallets[(_a = solanaAddress == null ? void 0 : solanaAddress.toString()) != null ? _a : ""];
113
+ if (!!solanaAddress && !storedExternalWallet) {
114
+ reset();
115
+ }
116
+ }, []);
117
+ useEffect(() => {
118
+ const storedExternalWallet = Object.values(para.externalWallets || {})[0];
119
+ if (!connecting && (!wallet || (wallet == null ? void 0 : wallet.adapter.connected)) && (storedExternalWallet == null ? void 0 : storedExternalWallet.type) === WalletType.SOLANA && (storedExternalWallet == null ? void 0 : storedExternalWallet.address) !== (solanaAddress == null ? void 0 : solanaAddress.toString())) {
120
+ switchWallet(solanaAddress == null ? void 0 : solanaAddress.toString());
121
+ }
122
+ }, [solanaAddress, connecting, wallet]);
123
+ const signMessage = (message) => __async(this, null, function* () {
124
+ var _a;
125
+ try {
126
+ const encodedMessage = new TextEncoder().encode(message);
127
+ const signature = yield solanaSignMessage(encodedMessage);
128
+ return {
129
+ externalWallet: {
130
+ address: solanaAddress.toString(),
131
+ type: WalletType.SOLANA,
132
+ provider: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name
133
+ },
134
+ signature: bs58.encode(signature)
135
+ };
136
+ } catch (e) {
137
+ if (e.message.includes("User rejected the request")) {
138
+ return { error: "Signature request rejected" };
139
+ }
140
+ return { error: "An unknown error occurred" };
141
+ }
142
+ });
143
+ const signVerificationMessage = () => __async(this, null, function* () {
144
+ const signature = yield signMessage(verificationMessage.current);
145
+ return signature;
146
+ });
147
+ const connect = (adapter) => __async(this, null, function* () {
148
+ yield _disconnect();
149
+ if (!adapter) {
150
+ return { error: "Adapter not found." };
151
+ }
152
+ selectWallet(adapter.name);
153
+ yield new Promise((resolve) => setTimeout(resolve, 100));
154
+ let address;
155
+ let error;
156
+ let authState;
157
+ try {
158
+ yield adapter.connect();
159
+ address = adapter.publicKey.toString();
160
+ if (address) {
161
+ try {
162
+ authState = yield login({ address, providerName: adapter.name });
163
+ verificationMessage.current = authState.stage === "verify" ? authState.signatureVerificationMessage : void 0;
164
+ } catch (err) {
165
+ yield _disconnect();
166
+ address = void 0;
167
+ error = err;
168
+ }
169
+ }
170
+ } catch (err) {
171
+ switch (err.message) {
172
+ case "User aborted.":
173
+ case "Approval Denied":
174
+ case "You canceled this request.": {
175
+ error = "Connection request rejected";
176
+ break;
177
+ }
178
+ default: {
179
+ error = "An unknown error occurred";
180
+ break;
181
+ }
182
+ }
183
+ }
184
+ return { address, error, authState };
185
+ });
186
+ const getAdapter = (name) => {
187
+ var _a;
188
+ return (_a = adapters.find((a) => a.adapter.name === "Mobile Wallet Adapter" ? a : a.adapter.name === name ? a : false)) == null ? void 0 : _a.adapter;
189
+ };
190
+ const getWallet = (name) => wallets.find((w) => w.name === name);
191
+ const wallets = walletFns.map((walletFn) => {
192
+ const metaData = walletFn();
193
+ const adapter = getAdapter(metaData.name);
194
+ return __spreadValues({
195
+ connect: () => connect(adapter),
196
+ connectMobile: () => connect(adapter),
197
+ getQrUri: () => "",
198
+ type: WalletType.SOLANA,
199
+ installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable)
200
+ }, metaData);
201
+ });
202
+ const disconnect = () => __async(this, null, function* () {
203
+ yield _disconnect();
204
+ if (connected) {
205
+ typeof window !== void 0 && (window == null ? void 0 : window.location.reload());
206
+ }
207
+ });
208
+ return /* @__PURE__ */ jsx(
209
+ SolanaExternalWalletContext.Provider,
210
+ {
211
+ value: useMemo(
212
+ () => ({ wallets, disconnect, signMessage, signVerificationMessage }),
213
+ [wallets, disconnect, signMessage, signVerificationMessage]
214
+ ),
215
+ children
216
+ }
217
+ );
218
+ }
219
+
220
+ // src/providers/ParaSolanaProvider.tsx
221
+ import { useMemo as useMemo2 } from "react";
222
+ import { ConnectionProvider, WalletProvider as SolanaWalletProvider } from "@solana/wallet-adapter-react";
223
+ import {
224
+ createDefaultAddressSelector,
225
+ createDefaultAuthorizationResultCache,
226
+ createDefaultWalletNotFoundHandler,
227
+ SolanaMobileWalletAdapter
228
+ } from "@solana-mobile/wallet-adapter-mobile";
229
+ import { jsx as jsx2 } from "react/jsx-runtime";
230
+ function ParaSolanaProvider({ children, config, internalConfig }) {
231
+ const { wallets: walletFns, endpoint, appIdentity, chain, connectionConfig } = config;
232
+ const solanaExternalWalletProviderProps = useMemo2(
233
+ () => __spreadValues({ wallets: walletFns }, internalConfig),
234
+ [walletFns, internalConfig]
235
+ );
236
+ return /* @__PURE__ */ jsx2(ConnectionProvider, { endpoint, config: connectionConfig, children: /* @__PURE__ */ jsx2(
237
+ SolanaWalletProvider,
238
+ {
239
+ wallets: [
240
+ new SolanaMobileWalletAdapter({
241
+ addressSelector: createDefaultAddressSelector(),
242
+ appIdentity,
243
+ authorizationResultCache: createDefaultAuthorizationResultCache(),
244
+ chain,
245
+ onWalletNotFound: createDefaultWalletNotFoundHandler()
246
+ })
247
+ ],
248
+ localStorageKey: "paraSolanaExternal",
249
+ autoConnect: true,
250
+ children: /* @__PURE__ */ jsx2(SolanaExternalWalletProvider, __spreadProps(__spreadValues({}, solanaExternalWalletProviderProps), { children }))
251
+ }
252
+ ) });
253
+ }
254
+
255
+ // src/wallets/connectors/phantom/phantomIcon.ts
256
+ var icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzNl85NDApIj4KICAgIDxwYXRoIGQ9Ik0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAzNl85NDApIi8+CiAgICA8cGF0aCBkPSJNMjAuODgyMyAxMS44ODk3SDE4Ljc1NUMxOC43NTUgNy41MzIyMyAxNS4yMjgyIDQgMTAuODc3MyA0QzYuNTgwMzcgNCAzLjA4Njg5IDcuNDQ1NzYgMy4wMDEzOSAxMS43Mjg2QzIuOTEyOTMgMTYuMTU1NyA3LjA2MDAxIDIwIDExLjQ4MDkgMjBIMTIuMDM3QzE1LjkzNDUgMjAgMjEuMTU4NSAxNi45NDQzIDIxLjk3NDcgMTMuMjIxMUMyMi4xMjU0IDEyLjUzNDggMjEuNTg0MSAxMS44ODk3IDIwLjg4MjMgMTEuODg5N1pNNy43MTU5NiAxMi4wODM4QzcuNzE1OTYgMTIuNjY2NSA3LjI0MDA5IDEzLjE0MzEgNi42NTgyNyAxMy4xNDMxQzYuMDc2NDQgMTMuMTQzMSA1LjYwMDYgMTIuNjY2MyA1LjYwMDYgMTIuMDgzOFYxMC4zNzAxQzUuNjAwNiA5Ljc4NzQ0IDYuMDc2NDQgOS4zMTA4NCA2LjY1ODI3IDkuMzEwODRDNy4yNDAwOSA5LjMxMDg0IDcuNzE1OTYgOS43ODc0NCA3LjcxNTk2IDEwLjM3MDFWMTIuMDgzOFpNMTEuMzg4NiAxMi4wODM4QzExLjM4ODYgMTIuNjY2NSAxMC45MTI4IDEzLjE0MzEgMTAuMzMxIDEzLjE0MzFDOS43NDkxNCAxMy4xNDMxIDkuMjczMzIgMTIuNjY2MyA5LjI3MzMyIDEyLjA4MzhWMTAuMzcwMUM5LjI3MzMyIDkuNzg3NDQgOS43NDkzNSA5LjMxMDg0IDEwLjMzMSA5LjMxMDg0QzEwLjkxMjggOS4zMTA4NCAxMS4zODg2IDkuNzg3NDQgMTEuMzg4NiAxMC4zNzAxVjEyLjA4MzhaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTAzNl85NDApIi8+CiAgPC9nPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzEwMzZfOTQwIiB4MT0iMTIiIHkxPSIwIiB4Mj0iMTIiIHkyPSIyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTM0QkIxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU1MUJGOSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xMDM2Xzk0MCIgeDE9IjEyLjUiIHkxPSI0IiB4Mj0iMTIuNSIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMC44MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcDBfMTAzNl85NDAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
257
+
258
+ // src/wallets/connectors/phantom/phantom.ts
259
+ var phantomWallet = () => {
260
+ return {
261
+ id: "phantom",
262
+ name: "Phantom",
263
+ iconUrl: icon,
264
+ isExtension: true,
265
+ isMobile: true,
266
+ getUri: () => "",
267
+ downloadUrl: "https://phantom.app/download"
268
+ };
269
+ };
270
+
271
+ // src/wallets/connectors/glow/glowIcon.ts
272
+ var icon2 = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzN18xMjEwKSI+CiAgICA8cGF0aCBkPSJNMjAuNDE2MiAyMC41NTQxQzE4LjE3MzggMjIuNzY1OCAxNS4xNDk2IDI0LjAwNCAxMiAyNEM4Ljg1NzU3IDI0LjAwNDcgNS44Mzk2NSAyMi43NzE5IDMuNTk5MjQgMjAuNTY4NEM4LjUxMzI5IDE2LjY5NzkgMTUuNDk2NiAxNi42OTM0IDIwLjQxNjIgMjAuNTU0MVpNMjAuNTU0MSAyMC40MTYyQzIyLjc2NTggMTguMTczOCAyNC4wMDQgMTUuMTQ5NiAyNCAxMkMyNCA4LjcyOTQ4IDIyLjY5MTggNS43NjU2MSAyMC41NzA2IDMuNjAwMzRDMTYuNjk3OSA4LjUyODczIDE2LjY5MzQgMTUuNDk3NyAyMC41NTQxIDIwLjQxNjJaTTIwLjQzMzkgMy40NjM1NkMxNS41MDc3IDcuMzQ0MDYgOC41MDIyNiA3LjMzODU1IDMuNTgwNDggMy40NDkyMkM1LjgyMzA2IDEuMjM1MjkgOC44NDg3MSAtMC4wMDQyMjQ3NCAxMiAxLjA4MTk0ZS0wNUMxNS4yODcxIDEuMDgxOTRlLTA1IDE4LjI2NjQgMS4zMjI1NiAyMC40MzM5IDMuNDYzNTZaTTMuNDQ5MjIgMy41ODA0OEMxLjIzNTI5IDUuODIzMDYgLTAuMDA0MjI0NzQgOC44NDg3MSAxLjA4MTk0ZS0wNSAxMkMxLjA4MTk0ZS0wNSAxNS4yODgyIDEuMzIyNTYgMTguMjY2NCAzLjQ2MzU2IDIwLjQzMzlDNy4zNDQwNiAxNS41MDc3IDcuMzM4NTUgOC41MDIyNiAzLjQ0OTIyIDMuNTgwNDhaIiBmaWxsPSIjQ0M2MkQ1Ii8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDM3XzEyMTAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
273
+
274
+ // src/wallets/connectors/glow/glow.ts
275
+ var glowWallet = () => {
276
+ return {
277
+ id: "glow",
278
+ name: "Glow",
279
+ iconUrl: icon2,
280
+ isExtension: true,
281
+ isMobile: true,
282
+ getUri: () => "",
283
+ downloadUrl: "https://glow.app"
284
+ };
285
+ };
286
+
287
+ // src/wallets/connectors/backpack/backpackIcon.ts
288
+ var icon3 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==";
289
+
290
+ // src/wallets/connectors/backpack/backpack.ts
291
+ var backpackWallet = () => {
292
+ return {
293
+ id: "backpack",
294
+ name: "Backpack",
295
+ iconUrl: icon3,
296
+ isExtension: true,
297
+ isMobile: true,
298
+ getUri: () => "",
299
+ downloadUrl: "https://backpack.app/download"
300
+ };
301
+ };
302
+
303
+ // src/wallets/connectors/index.ts
304
+ var allWallets = [phantomWallet, glowWallet, backpackWallet];
5
305
  export {
6
306
  ParaSolanaProvider,
7
307
  SolanaExternalWalletContext,
8
- SolanaExternalWalletProvider
308
+ allWallets,
309
+ backpackWallet,
310
+ glowWallet,
311
+ phantomWallet
9
312
  };
Binary file
Binary file
@@ -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,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 {};
@@ -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)[];
@@ -1 +1 @@
1
- export declare const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwMCIgaGVpZ2h0PSIxMjAwIiB2aWV3Qm94PSIwIDAgMTIwMCAxMjAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMjU5Nl8xMzg1ODApIj4KPHJlY3QgeT0iLTAuMDAwOTc2NTYyIiB3aWR0aD0iMTIwMCIgaGVpZ2h0PSIxMjAwIiBmaWxsPSIjQUI5RkYyIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNTIyLjIxOCA3NjQuODEzQzQ3NS4xMDEgODM3LjAxMSAzOTYuMTQ3IDkyOC4zNzcgMjkxLjA4OSA5MjguMzc3QzI0MS40MjUgOTI4LjM3NyAxOTMuNjcxIDkwNy45MzIgMTkzLjY3MSA4MTkuMTIxQzE5My42NzEgNTkyLjk0MiA1MDIuNDc5IDI0Mi44MTIgNzg5LjAwMyAyNDIuODEyQzk1Mi4wMDMgMjQyLjgxMiAxMDE2Ljk1IDM1NS45MDEgMTAxNi45NSA0ODQuMzI1QzEwMTYuOTUgNjQ5LjE2NyA5MDkuOTc5IDgzNy42NSA4MDMuNjQ3IDgzNy42NUM3NjkuOTAxIDgzNy42NSA3NTMuMzQ2IDgxOS4xMjEgNzUzLjM0NiA3ODkuNzMxQzc1My4zNDYgNzgyLjA2NCA3NTQuNjIgNzczLjc1OCA3NTcuMTY3IDc2NC44MTNDNzIwLjg3NCA4MjYuNzg4IDY1MC44MzUgODg0LjI5MiA1ODUuMjUzIDg4NC4yOTJDNTM3LjQ5OSA4ODQuMjkyIDUxMy4zMDQgODU0LjI2MiA1MTMuMzA0IDgxMi4wOTNDNTEzLjMwNCA3OTYuNzU5IDUxNi40ODcgNzgwLjc4NiA1MjIuMjE4IDc2NC44MTNaTTc2OS4wMzUgNDc5Ljg3MUM3NjkuMDM1IDUxNy4yOTMgNzQ2Ljk1NiA1MzYuMDAzIDcyMi4yNTggNTM2LjAwM0M2OTcuMTg1IDUzNi4wMDMgNjc1LjQ4MSA1MTcuMjkzIDY3NS40ODEgNDc5Ljg3MUM2NzUuNDgxIDQ0Mi40NDkgNjk3LjE4NSA0MjMuNzM4IDcyMi4yNTggNDIzLjczOEM3NDYuOTU2IDQyMy43MzggNzY5LjAzNSA0NDIuNDQ5IDc2OS4wMzUgNDc5Ljg3MVpNOTA5LjM2NyA0NzkuODcyQzkwOS4zNjcgNTE3LjI5NCA4ODcuMjg4IDUzNi4wMDUgODYyLjU5IDUzNi4wMDVDODM3LjUxNyA1MzYuMDA1IDgxNS44MTMgNTE3LjI5NCA4MTUuODEzIDQ3OS44NzJDODE1LjgxMyA0NDIuNDUgODM3LjUxNyA0MjMuNzQgODYyLjU5IDQyMy43NEM4ODcuMjg4IDQyMy43NCA5MDkuMzY3IDQ0Mi40NSA5MDkuMzY3IDQ3OS44NzJaIiBmaWxsPSIjRkZGREY4Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjU5Nl8xMzg1ODAiPgo8cmVjdCB5PSItMC4wMDA5NzY1NjIiIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjEyMDAiIHJ4PSI2MDAiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==";
1
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzNl85NDApIj4KICAgIDxwYXRoIGQ9Ik0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAzNl85NDApIi8+CiAgICA8cGF0aCBkPSJNMjAuODgyMyAxMS44ODk3SDE4Ljc1NUMxOC43NTUgNy41MzIyMyAxNS4yMjgyIDQgMTAuODc3MyA0QzYuNTgwMzcgNCAzLjA4Njg5IDcuNDQ1NzYgMy4wMDEzOSAxMS43Mjg2QzIuOTEyOTMgMTYuMTU1NyA3LjA2MDAxIDIwIDExLjQ4MDkgMjBIMTIuMDM3QzE1LjkzNDUgMjAgMjEuMTU4NSAxNi45NDQzIDIxLjk3NDcgMTMuMjIxMUMyMi4xMjU0IDEyLjUzNDggMjEuNTg0MSAxMS44ODk3IDIwLjg4MjMgMTEuODg5N1pNNy43MTU5NiAxMi4wODM4QzcuNzE1OTYgMTIuNjY2NSA3LjI0MDA5IDEzLjE0MzEgNi42NTgyNyAxMy4xNDMxQzYuMDc2NDQgMTMuMTQzMSA1LjYwMDYgMTIuNjY2MyA1LjYwMDYgMTIuMDgzOFYxMC4zNzAxQzUuNjAwNiA5Ljc4NzQ0IDYuMDc2NDQgOS4zMTA4NCA2LjY1ODI3IDkuMzEwODRDNy4yNDAwOSA5LjMxMDg0IDcuNzE1OTYgOS43ODc0NCA3LjcxNTk2IDEwLjM3MDFWMTIuMDgzOFpNMTEuMzg4NiAxMi4wODM4QzExLjM4ODYgMTIuNjY2NSAxMC45MTI4IDEzLjE0MzEgMTAuMzMxIDEzLjE0MzFDOS43NDkxNCAxMy4xNDMxIDkuMjczMzIgMTIuNjY2MyA5LjI3MzMyIDEyLjA4MzhWMTAuMzcwMUM5LjI3MzMyIDkuNzg3NDQgOS43NDkzNSA5LjMxMDg0IDEwLjMzMSA5LjMxMDg0QzEwLjkxMjggOS4zMTA4NCAxMS4zODg2IDkuNzg3NDQgMTEuMzg4NiAxMC4zNzAxVjEyLjA4MzhaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTAzNl85NDApIi8+CiAgPC9nPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzEwMzZfOTQwIiB4MT0iMTIiIHkxPSIwIiB4Mj0iMTIiIHkyPSIyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTM0QkIxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU1MUJGOSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xMDM2Xzk0MCIgeDE9IjEyLjUiIHkxPSI0IiB4Mj0iMTIuNSIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMC44MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcDBfMTAzNl85NDAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpara/solana-wallet-connectors",
3
- "version": "1.8.0",
3
+ "version": "2.0.0-alpha.3",
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.8.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.3",
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.3",
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": "ef96e79558695ccbe148d25a8e3611c4596d1954"
38
+ "gitHead": "77a1e04b06258842ca9c81e3db2a2b0092517659"
42
39
  }
package/dist/package.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }
@@ -1,102 +0,0 @@
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
- });
21
- };
22
- import { jsx } from "react/jsx-runtime";
23
- import { createContext, useContext, useEffect, useMemo, useState } from "react";
24
- 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";
27
- import {
28
- createDefaultAddressSelector,
29
- createDefaultAuthorizationResultCache,
30
- createDefaultWalletNotFoundHandler,
31
- SolanaMobileWalletAdapter
32
- } 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
- }
66
- return /* @__PURE__ */ jsx(ConnectionProvider, { endpoint, config: connectionConfig, children: /* @__PURE__ */ jsx(
67
- SolanaWalletProvider,
68
- {
69
- wallets: [
70
- new SolanaMobileWalletAdapter({
71
- addressSelector: createDefaultAddressSelector(),
72
- appIdentity,
73
- authorizationResultCache: createDefaultAuthorizationResultCache(),
74
- chain,
75
- onWalletNotFound: createDefaultWalletNotFoundHandler()
76
- })
77
- ],
78
- 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 })
93
- }
94
- ) });
95
- }
96
- const useParaSolana = () => useContext(ParaSolanaContext);
97
- export {
98
- ParaSolanaContext,
99
- ParaSolanaProvider,
100
- defaultWallet,
101
- useParaSolana
102
- };
@@ -1,212 +0,0 @@
1
- "use client";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
6
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
- var __spreadValues = (a, b) => {
8
- for (var prop in b || (b = {}))
9
- if (__hasOwnProp.call(b, prop))
10
- __defNormalProp(a, prop, b[prop]);
11
- if (__getOwnPropSymbols)
12
- for (var prop of __getOwnPropSymbols(b)) {
13
- if (__propIsEnum.call(b, prop))
14
- __defNormalProp(a, prop, b[prop]);
15
- }
16
- return a;
17
- };
18
- var __async = (__this, __arguments, generator) => {
19
- return new Promise((resolve, reject) => {
20
- var fulfilled = (value) => {
21
- try {
22
- step(generator.next(value));
23
- } catch (e) {
24
- reject(e);
25
- }
26
- };
27
- var rejected = (value) => {
28
- try {
29
- step(generator.throw(value));
30
- } catch (e) {
31
- reject(e);
32
- }
33
- };
34
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
35
- step((generator = generator.apply(__this, __arguments)).next());
36
- });
37
- };
38
- import { jsx } from "react/jsx-runtime";
39
- import { createContext, useEffect, useMemo, useRef } from "react";
40
- import { useWallet } from "@solana/wallet-adapter-react";
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
- import bs58 from "bs58";
46
- const defaultSolanaExternalWallet = {
47
- wallets: [],
48
- disconnect: () => Promise.resolve(),
49
- signMessage: () => Promise.resolve({}),
50
- signVerificationMessage: () => Promise.resolve({})
51
- };
52
- const SolanaExternalWalletContext = createContext(defaultSolanaExternalWallet);
53
- function SolanaExternalWalletProvider({ children, para, onSwitchWallet }) {
54
- const {
55
- wallets: adapters,
56
- select: selectWallet,
57
- disconnect: _disconnect,
58
- publicKey: solanaAddress,
59
- wallet,
60
- connecting,
61
- signMessage: solanaSignMessage,
62
- connected
63
- } = useWallet();
64
- const { wallets: walletFns } = useParaSolana();
65
- const fullAuthWallets = useExternalWalletProviderStore((state) => state.fullAuthWallets);
66
- const verificationMessage = useRef();
67
- const reset = () => __async(this, null, function* () {
68
- yield _disconnect();
69
- yield para.logout();
70
- });
71
- const login = (address, providerName) => __async(this, null, function* () {
72
- var _a, _b;
73
- 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
- )
81
- });
82
- } catch (err) {
83
- yield reset();
84
- throw "Error logging you in. Please try again.";
85
- }
86
- });
87
- const switchWallet = (address) => __async(this, null, function* () {
88
- var _a;
89
- let error;
90
- if (!address) {
91
- yield para.logout();
92
- } else {
93
- try {
94
- yield login(address, (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name);
95
- } catch (err) {
96
- error = err;
97
- }
98
- }
99
- onSwitchWallet({ address, error });
100
- });
101
- useEffect(() => {
102
- var _a;
103
- const storedExternalWallet = para.externalWallets[(_a = solanaAddress == null ? void 0 : solanaAddress.toString()) != null ? _a : ""];
104
- if (!!solanaAddress && !storedExternalWallet) {
105
- reset();
106
- }
107
- }, []);
108
- useEffect(() => {
109
- 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())) {
111
- switchWallet(solanaAddress == null ? void 0 : solanaAddress.toString());
112
- }
113
- }, [solanaAddress, connecting]);
114
- const signMessage = (message) => __async(this, null, function* () {
115
- try {
116
- const encodedMessage = new TextEncoder().encode(message);
117
- const signature = yield solanaSignMessage(encodedMessage);
118
- return {
119
- address: solanaAddress.toString(),
120
- signature: bs58.encode(signature)
121
- };
122
- } catch (e) {
123
- if (e.message.includes("User rejected the request")) {
124
- return { error: "Signature request rejected" };
125
- }
126
- return { error: "An unknown error occurred" };
127
- }
128
- });
129
- const signVerificationMessage = () => __async(this, null, function* () {
130
- const signature = yield signMessage(verificationMessage.current);
131
- return signature;
132
- });
133
- const connect = (adapter) => __async(this, null, function* () {
134
- yield _disconnect();
135
- if (!adapter) {
136
- return { address: void 0, error: "Adapter not found.", userExists: false, isVerified: false };
137
- }
138
- selectWallet(adapter.name);
139
- yield new Promise((resolve) => setTimeout(resolve, 100));
140
- let address;
141
- let error;
142
- let userExists = false;
143
- let isVerified = false;
144
- try {
145
- yield adapter.connect();
146
- address = adapter.publicKey.toString();
147
- if (address) {
148
- try {
149
- const loginResp = yield login(address, adapter.name);
150
- userExists = loginResp.userExists;
151
- isVerified = loginResp.isVerified;
152
- verificationMessage.current = loginResp.signatureVerificationMessage;
153
- } catch (err) {
154
- yield _disconnect();
155
- address = void 0;
156
- error = err;
157
- }
158
- }
159
- } catch (err) {
160
- switch (err.message) {
161
- case "User aborted.":
162
- case "Approval Denied":
163
- case "You canceled this request.": {
164
- error = "Connection request rejected";
165
- break;
166
- }
167
- default: {
168
- error = "An unknown error occurred";
169
- break;
170
- }
171
- }
172
- }
173
- return { address, error, userExists, isVerified };
174
- });
175
- const getAdapter = (name) => {
176
- var _a;
177
- return (_a = adapters.find((a) => a.adapter.name === "Mobile Wallet Adapter" ? a : a.adapter.name === name ? a : false)) == null ? void 0 : _a.adapter;
178
- };
179
- const wallets = walletFns.map((walletFn) => {
180
- const metaData = walletFn();
181
- const adapter = getAdapter(metaData.name);
182
- return __spreadValues({
183
- connect: () => connect(adapter),
184
- connectMobile: () => connect(adapter),
185
- getQrUri: () => "",
186
- type: WalletType.SOLANA,
187
- installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable)
188
- }, metaData);
189
- });
190
- const getWallet = (name) => wallets.find((w) => w.name === name);
191
- const disconnect = () => __async(this, null, function* () {
192
- yield _disconnect();
193
- if (connected) {
194
- typeof window !== void 0 && (window == null ? void 0 : window.location.reload());
195
- }
196
- });
197
- return /* @__PURE__ */ jsx(
198
- SolanaExternalWalletContext.Provider,
199
- {
200
- value: useMemo(
201
- () => ({ wallets, disconnect, signMessage, signVerificationMessage }),
202
- [wallets, disconnect, signMessage, signVerificationMessage]
203
- ),
204
- children
205
- }
206
- );
207
- }
208
- export {
209
- SolanaExternalWalletContext,
210
- SolanaExternalWalletProvider,
211
- defaultSolanaExternalWallet
212
- };
@@ -1 +0,0 @@
1
- "use client";
@@ -1,16 +0,0 @@
1
- "use client";
2
- import { icon } from "./backpackIcon.js";
3
- const backpackWallet = () => {
4
- return {
5
- id: "backpack",
6
- name: "Backpack",
7
- iconUrl: icon,
8
- isExtension: true,
9
- isMobile: true,
10
- getUri: () => "",
11
- downloadUrl: "https://backpack.app/download"
12
- };
13
- };
14
- export {
15
- backpackWallet
16
- };
@@ -1,5 +0,0 @@
1
- "use client";
2
- const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==";
3
- export {
4
- icon
5
- };
@@ -1,16 +0,0 @@
1
- "use client";
2
- import { icon } from "./glowIcon.js";
3
- const glowWallet = () => {
4
- return {
5
- id: "glow",
6
- name: "Glow",
7
- iconUrl: icon,
8
- isExtension: true,
9
- isMobile: true,
10
- getUri: () => "",
11
- downloadUrl: "https://glow.app"
12
- };
13
- };
14
- export {
15
- glowWallet
16
- };
@@ -1,5 +0,0 @@
1
- "use client";
2
- const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzN18xMjEwKSI+CiAgICA8cGF0aCBkPSJNMjAuNDE2MiAyMC41NTQxQzE4LjE3MzggMjIuNzY1OCAxNS4xNDk2IDI0LjAwNCAxMiAyNEM4Ljg1NzU3IDI0LjAwNDcgNS44Mzk2NSAyMi43NzE5IDMuNTk5MjQgMjAuNTY4NEM4LjUxMzI5IDE2LjY5NzkgMTUuNDk2NiAxNi42OTM0IDIwLjQxNjIgMjAuNTU0MVpNMjAuNTU0MSAyMC40MTYyQzIyLjc2NTggMTguMTczOCAyNC4wMDQgMTUuMTQ5NiAyNCAxMkMyNCA4LjcyOTQ4IDIyLjY5MTggNS43NjU2MSAyMC41NzA2IDMuNjAwMzRDMTYuNjk3OSA4LjUyODczIDE2LjY5MzQgMTUuNDk3NyAyMC41NTQxIDIwLjQxNjJaTTIwLjQzMzkgMy40NjM1NkMxNS41MDc3IDcuMzQ0MDYgOC41MDIyNiA3LjMzODU1IDMuNTgwNDggMy40NDkyMkM1LjgyMzA2IDEuMjM1MjkgOC44NDg3MSAtMC4wMDQyMjQ3NCAxMiAxLjA4MTk0ZS0wNUMxNS4yODcxIDEuMDgxOTRlLTA1IDE4LjI2NjQgMS4zMjI1NiAyMC40MzM5IDMuNDYzNTZaTTMuNDQ5MjIgMy41ODA0OEMxLjIzNTI5IDUuODIzMDYgLTAuMDA0MjI0NzQgOC44NDg3MSAxLjA4MTk0ZS0wNSAxMkMxLjA4MTk0ZS0wNSAxNS4yODgyIDEuMzIyNTYgMTguMjY2NCAzLjQ2MzU2IDIwLjQzMzlDNy4zNDQwNiAxNS41MDc3IDcuMzM4NTUgOC41MDIyNiAzLjQ0OTIyIDMuNTgwNDhaIiBmaWxsPSIjQ0M2MkQ1Ii8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDM3XzEyMTAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
3
- export {
4
- icon
5
- };
@@ -1,9 +0,0 @@
1
- "use client";
2
- import { phantomWallet } from "./phantom/phantom.js";
3
- import { glowWallet } from "./glow/glow.js";
4
- import { backpackWallet } from "./backpack/backpack.js";
5
- export {
6
- backpackWallet,
7
- glowWallet,
8
- phantomWallet
9
- };
@@ -1,16 +0,0 @@
1
- "use client";
2
- import { icon } from "./phantomIcon.js";
3
- const phantomWallet = () => {
4
- return {
5
- id: "phantom",
6
- name: "Phantom",
7
- iconUrl: icon,
8
- isExtension: true,
9
- isMobile: true,
10
- getUri: () => "",
11
- downloadUrl: "https://phantom.app/download"
12
- };
13
- };
14
- export {
15
- phantomWallet
16
- };
@@ -1,5 +0,0 @@
1
- "use client";
2
- const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwMCIgaGVpZ2h0PSIxMjAwIiB2aWV3Qm94PSIwIDAgMTIwMCAxMjAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMjU5Nl8xMzg1ODApIj4KPHJlY3QgeT0iLTAuMDAwOTc2NTYyIiB3aWR0aD0iMTIwMCIgaGVpZ2h0PSIxMjAwIiBmaWxsPSIjQUI5RkYyIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNTIyLjIxOCA3NjQuODEzQzQ3NS4xMDEgODM3LjAxMSAzOTYuMTQ3IDkyOC4zNzcgMjkxLjA4OSA5MjguMzc3QzI0MS40MjUgOTI4LjM3NyAxOTMuNjcxIDkwNy45MzIgMTkzLjY3MSA4MTkuMTIxQzE5My42NzEgNTkyLjk0MiA1MDIuNDc5IDI0Mi44MTIgNzg5LjAwMyAyNDIuODEyQzk1Mi4wMDMgMjQyLjgxMiAxMDE2Ljk1IDM1NS45MDEgMTAxNi45NSA0ODQuMzI1QzEwMTYuOTUgNjQ5LjE2NyA5MDkuOTc5IDgzNy42NSA4MDMuNjQ3IDgzNy42NUM3NjkuOTAxIDgzNy42NSA3NTMuMzQ2IDgxOS4xMjEgNzUzLjM0NiA3ODkuNzMxQzc1My4zNDYgNzgyLjA2NCA3NTQuNjIgNzczLjc1OCA3NTcuMTY3IDc2NC44MTNDNzIwLjg3NCA4MjYuNzg4IDY1MC44MzUgODg0LjI5MiA1ODUuMjUzIDg4NC4yOTJDNTM3LjQ5OSA4ODQuMjkyIDUxMy4zMDQgODU0LjI2MiA1MTMuMzA0IDgxMi4wOTNDNTEzLjMwNCA3OTYuNzU5IDUxNi40ODcgNzgwLjc4NiA1MjIuMjE4IDc2NC44MTNaTTc2OS4wMzUgNDc5Ljg3MUM3NjkuMDM1IDUxNy4yOTMgNzQ2Ljk1NiA1MzYuMDAzIDcyMi4yNTggNTM2LjAwM0M2OTcuMTg1IDUzNi4wMDMgNjc1LjQ4MSA1MTcuMjkzIDY3NS40ODEgNDc5Ljg3MUM2NzUuNDgxIDQ0Mi40NDkgNjk3LjE4NSA0MjMuNzM4IDcyMi4yNTggNDIzLjczOEM3NDYuOTU2IDQyMy43MzggNzY5LjAzNSA0NDIuNDQ5IDc2OS4wMzUgNDc5Ljg3MVpNOTA5LjM2NyA0NzkuODcyQzkwOS4zNjcgNTE3LjI5NCA4ODcuMjg4IDUzNi4wMDUgODYyLjU5IDUzNi4wMDVDODM3LjUxNyA1MzYuMDA1IDgxNS44MTMgNTE3LjI5NCA4MTUuODEzIDQ3OS44NzJDODE1LjgxMyA0NDIuNDUgODM3LjUxNyA0MjMuNzQgODYyLjU5IDQyMy43NEM4ODcuMjg4IDQyMy43NCA5MDkuMzY3IDQ0Mi40NSA5MDkuMzY3IDQ3OS44NzJaIiBmaWxsPSIjRkZGREY4Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjU5Nl8xMzg1ODAiPgo8cmVjdCB5PSItMC4wMDA5NzY1NjIiIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjEyMDAiIHJ4PSI2MDAiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==";
3
- export {
4
- icon
5
- };