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