@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 +4 -1
- package/dist/index.js +307 -4
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/providers/ParaSolanaProvider.d.ts +7 -15
- package/dist/providers/SolanaExternalWalletContext.d.ts +15 -16
- package/dist/types/Wallet.d.ts +1 -1
- package/dist/wallets/connectors/index.d.ts +1 -0
- package/dist/wallets/connectors/phantom/phantomIcon.d.ts +1 -1
- package/package.json +8 -11
- package/dist/package.json +0 -3
- package/dist/providers/ParaSolanaProvider.js +0 -102
- package/dist/providers/SolanaExternalWalletContext.js +0 -212
- package/dist/types/Wallet.js +0 -1
- package/dist/wallets/connectors/backpack/backpack.js +0 -16
- package/dist/wallets/connectors/backpack/backpackIcon.js +0 -5
- package/dist/wallets/connectors/glow/glow.js +0 -16
- package/dist/wallets/connectors/glow/glowIcon.js +0 -5
- package/dist/wallets/connectors/index.js +0 -9
- package/dist/wallets/connectors/phantom/phantom.js +0 -16
- package/dist/wallets/connectors/phantom/phantomIcon.js +0 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
export {
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
308
|
+
allWallets,
|
|
309
|
+
backpackWallet,
|
|
310
|
+
glowWallet,
|
|
311
|
+
phantomWallet
|
|
9
312
|
};
|
package/dist/index.js.br
ADDED
|
Binary file
|
package/dist/index.js.gz
ADDED
|
Binary file
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
2
|
import { WalletList } from '../types/Wallet.js';
|
|
3
|
-
import
|
|
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
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
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 {
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
2
|
import ParaWeb from '@getpara/web-sdk';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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 {};
|
package/dist/types/Wallet.d.ts
CHANGED
|
@@ -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,
|
|
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": "
|
|
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
|
-
"
|
|
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": "
|
|
38
|
+
"gitHead": "77a1e04b06258842ca9c81e3db2a2b0092517659"
|
|
42
39
|
}
|
package/dist/package.json
DELETED
|
@@ -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
|
-
};
|
package/dist/types/Wallet.js
DELETED
|
@@ -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,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
|
-
};
|