@getpara/solana-wallet-connectors 2.0.0-dev.1 → 2.0.0-dev.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 +2 -1
- package/dist/index.js +4 -301
- package/dist/package.json +3 -0
- package/dist/providers/ParaSolanaProvider.js +57 -0
- package/dist/providers/SolanaExternalWalletContext.d.ts +7 -28
- package/dist/providers/SolanaExternalWalletContext.js +316 -0
- package/dist/providers/externalHooks.d.ts +7 -0
- package/dist/providers/externalHooks.js +6 -0
- package/dist/types/Wallet.d.ts +1 -3
- package/dist/types/Wallet.js +1 -0
- package/dist/wallets/connectors/backpack/backpack.js +46 -0
- package/dist/wallets/connectors/backpack/backpackIcon.js +5 -0
- package/dist/wallets/connectors/glow/glow.js +18 -0
- package/dist/wallets/connectors/glow/glowIcon.js +5 -0
- package/dist/wallets/connectors/index.d.ts +2 -1
- package/dist/wallets/connectors/index.js +13 -0
- package/dist/wallets/connectors/phantom/phantom.js +46 -0
- package/dist/wallets/connectors/phantom/phantomIcon.d.ts +1 -1
- package/dist/wallets/connectors/phantom/phantomIcon.js +5 -0
- package/dist/wallets/connectors/solflare/solflare.d.ts +2 -0
- package/dist/wallets/connectors/solflare/solflare.js +46 -0
- package/dist/wallets/connectors/solflare/solflareIcon.d.ts +1 -0
- package/dist/wallets/connectors/solflare/solflareIcon.js +5 -0
- package/package.json +28 -24
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { SolanaExternalWalletContext } from './providers/SolanaExternalWalletContext.js';
|
|
2
|
-
export type
|
|
2
|
+
export { type SolanaExternalWalletContextType } from './providers/SolanaExternalWalletContext.js';
|
|
3
3
|
export { ParaSolanaProvider } from './providers/ParaSolanaProvider.js';
|
|
4
4
|
export type { ParaSolanaProviderConfig, ParaSolanaProviderProps } from './providers/ParaSolanaProvider.js';
|
|
5
5
|
export * from './wallets/connectors/index.js';
|
|
6
6
|
export type { WalletList } from './types/Wallet.js';
|
|
7
|
+
export type { Adapter } from '@solana/wallet-adapter-base';
|
package/dist/index.js
CHANGED
|
@@ -1,305 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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.externalWalletLogin({
|
|
82
|
-
address,
|
|
83
|
-
type: WalletType.SOLANA,
|
|
84
|
-
provider: providerName,
|
|
85
|
-
withFullParaAuth: walletsWithFullAuth == null ? void 0 : walletsWithFullAuth.includes(
|
|
86
|
-
(_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : ""
|
|
87
|
-
)
|
|
88
|
-
});
|
|
89
|
-
} catch (err) {
|
|
90
|
-
yield reset();
|
|
91
|
-
throw "Error logging you in. Please try again.";
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
const switchWallet = (address) => __async(this, null, function* () {
|
|
95
|
-
var _a;
|
|
96
|
-
let error;
|
|
97
|
-
if (!address) {
|
|
98
|
-
yield para.logout();
|
|
99
|
-
} else {
|
|
100
|
-
try {
|
|
101
|
-
yield login({ address, providerName: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name });
|
|
102
|
-
} catch (err) {
|
|
103
|
-
error = err;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
onSwitchWallet({ address, error });
|
|
107
|
-
});
|
|
108
|
-
useEffect(() => {
|
|
109
|
-
var _a;
|
|
110
|
-
const storedExternalWallet = para.externalWallets[(_a = solanaAddress == null ? void 0 : solanaAddress.toString()) != null ? _a : ""];
|
|
111
|
-
if (!!solanaAddress && !storedExternalWallet) {
|
|
112
|
-
reset();
|
|
113
|
-
}
|
|
114
|
-
}, []);
|
|
115
|
-
useEffect(() => {
|
|
116
|
-
const storedExternalWallet = Object.values(para.externalWallets || {})[0];
|
|
117
|
-
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())) {
|
|
118
|
-
switchWallet(solanaAddress == null ? void 0 : solanaAddress.toString());
|
|
119
|
-
}
|
|
120
|
-
}, [solanaAddress, connecting, wallet]);
|
|
121
|
-
const signMessage = (message) => __async(this, null, function* () {
|
|
122
|
-
try {
|
|
123
|
-
const encodedMessage = new TextEncoder().encode(message);
|
|
124
|
-
const signature = yield solanaSignMessage(encodedMessage);
|
|
125
|
-
return {
|
|
126
|
-
address: solanaAddress.toString(),
|
|
127
|
-
signature: bs58.encode(signature)
|
|
128
|
-
};
|
|
129
|
-
} catch (e) {
|
|
130
|
-
if (e.message.includes("User rejected the request")) {
|
|
131
|
-
return { error: "Signature request rejected" };
|
|
132
|
-
}
|
|
133
|
-
return { error: "An unknown error occurred" };
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
const signVerificationMessage = () => __async(this, null, function* () {
|
|
137
|
-
const signature = yield signMessage(verificationMessage.current);
|
|
138
|
-
return signature;
|
|
139
|
-
});
|
|
140
|
-
const connect = (adapter) => __async(this, null, function* () {
|
|
141
|
-
yield _disconnect();
|
|
142
|
-
if (!adapter) {
|
|
143
|
-
return { address: void 0, error: "Adapter not found.", userExists: false, isVerified: false };
|
|
144
|
-
}
|
|
145
|
-
selectWallet(adapter.name);
|
|
146
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
147
|
-
let address;
|
|
148
|
-
let error;
|
|
149
|
-
let userExists = false;
|
|
150
|
-
let isVerified = false;
|
|
151
|
-
try {
|
|
152
|
-
yield adapter.connect();
|
|
153
|
-
address = adapter.publicKey.toString();
|
|
154
|
-
if (address) {
|
|
155
|
-
try {
|
|
156
|
-
yield login({ address, providerName: adapter.name });
|
|
157
|
-
} catch (err) {
|
|
158
|
-
yield _disconnect();
|
|
159
|
-
address = void 0;
|
|
160
|
-
error = err;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
} catch (err) {
|
|
164
|
-
switch (err.message) {
|
|
165
|
-
case "User aborted.":
|
|
166
|
-
case "Approval Denied":
|
|
167
|
-
case "You canceled this request.": {
|
|
168
|
-
error = "Connection request rejected";
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
default: {
|
|
172
|
-
error = "An unknown error occurred";
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return { address, error, userExists, isVerified };
|
|
178
|
-
});
|
|
179
|
-
const getAdapter = (name) => {
|
|
180
|
-
var _a;
|
|
181
|
-
return (_a = adapters.find((a) => a.adapter.name === "Mobile Wallet Adapter" ? a : a.adapter.name === name ? a : false)) == null ? void 0 : _a.adapter;
|
|
182
|
-
};
|
|
183
|
-
const getWallet = (name) => wallets.find((w) => w.name === name);
|
|
184
|
-
const wallets = walletFns.map((walletFn) => {
|
|
185
|
-
const metaData = walletFn();
|
|
186
|
-
const adapter = getAdapter(metaData.name);
|
|
187
|
-
return __spreadValues({
|
|
188
|
-
connect: () => connect(adapter),
|
|
189
|
-
connectMobile: () => connect(adapter),
|
|
190
|
-
getQrUri: () => "",
|
|
191
|
-
type: WalletType.SOLANA,
|
|
192
|
-
installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable)
|
|
193
|
-
}, metaData);
|
|
194
|
-
});
|
|
195
|
-
const disconnect = () => __async(this, null, function* () {
|
|
196
|
-
yield _disconnect();
|
|
197
|
-
if (connected) {
|
|
198
|
-
typeof window !== void 0 && (window == null ? void 0 : window.location.reload());
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
return /* @__PURE__ */ jsx(
|
|
202
|
-
SolanaExternalWalletContext.Provider,
|
|
203
|
-
{
|
|
204
|
-
value: useMemo(
|
|
205
|
-
() => ({ wallets, disconnect, signMessage, signVerificationMessage }),
|
|
206
|
-
[wallets, disconnect, signMessage, signVerificationMessage]
|
|
207
|
-
),
|
|
208
|
-
children
|
|
209
|
-
}
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// src/providers/ParaSolanaProvider.tsx
|
|
214
|
-
import { useMemo as useMemo2 } from "react";
|
|
215
|
-
import { ConnectionProvider, WalletProvider as SolanaWalletProvider } from "@solana/wallet-adapter-react";
|
|
216
|
-
import {
|
|
217
|
-
createDefaultAddressSelector,
|
|
218
|
-
createDefaultAuthorizationResultCache,
|
|
219
|
-
createDefaultWalletNotFoundHandler,
|
|
220
|
-
SolanaMobileWalletAdapter
|
|
221
|
-
} from "@solana-mobile/wallet-adapter-mobile";
|
|
222
|
-
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
223
|
-
function ParaSolanaProvider({ children, config, internalConfig }) {
|
|
224
|
-
const { wallets: walletFns, endpoint, appIdentity, chain, connectionConfig } = config;
|
|
225
|
-
const solanaExternalWalletProviderProps = useMemo2(
|
|
226
|
-
() => __spreadValues({ wallets: walletFns }, internalConfig),
|
|
227
|
-
[walletFns, internalConfig]
|
|
228
|
-
);
|
|
229
|
-
return /* @__PURE__ */ jsx2(ConnectionProvider, { endpoint, config: connectionConfig, children: /* @__PURE__ */ jsx2(
|
|
230
|
-
SolanaWalletProvider,
|
|
231
|
-
{
|
|
232
|
-
wallets: [
|
|
233
|
-
new SolanaMobileWalletAdapter({
|
|
234
|
-
addressSelector: createDefaultAddressSelector(),
|
|
235
|
-
appIdentity,
|
|
236
|
-
authorizationResultCache: createDefaultAuthorizationResultCache(),
|
|
237
|
-
chain,
|
|
238
|
-
onWalletNotFound: createDefaultWalletNotFoundHandler()
|
|
239
|
-
})
|
|
240
|
-
],
|
|
241
|
-
localStorageKey: "paraSolanaExternal",
|
|
242
|
-
autoConnect: true,
|
|
243
|
-
children: /* @__PURE__ */ jsx2(SolanaExternalWalletProvider, __spreadProps(__spreadValues({}, solanaExternalWalletProviderProps), { children }))
|
|
244
|
-
}
|
|
245
|
-
) });
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// src/wallets/connectors/phantom/phantomIcon.ts
|
|
249
|
-
var icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzNl85NDApIj4KICAgIDxwYXRoIGQ9Ik0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAzNl85NDApIi8+CiAgICA8cGF0aCBkPSJNMjAuODgyMyAxMS44ODk3SDE4Ljc1NUMxOC43NTUgNy41MzIyMyAxNS4yMjgyIDQgMTAuODc3MyA0QzYuNTgwMzcgNCAzLjA4Njg5IDcuNDQ1NzYgMy4wMDEzOSAxMS43Mjg2QzIuOTEyOTMgMTYuMTU1NyA3LjA2MDAxIDIwIDExLjQ4MDkgMjBIMTIuMDM3QzE1LjkzNDUgMjAgMjEuMTU4NSAxNi45NDQzIDIxLjk3NDcgMTMuMjIxMUMyMi4xMjU0IDEyLjUzNDggMjEuNTg0MSAxMS44ODk3IDIwLjg4MjMgMTEuODg5N1pNNy43MTU5NiAxMi4wODM4QzcuNzE1OTYgMTIuNjY2NSA3LjI0MDA5IDEzLjE0MzEgNi42NTgyNyAxMy4xNDMxQzYuMDc2NDQgMTMuMTQzMSA1LjYwMDYgMTIuNjY2MyA1LjYwMDYgMTIuMDgzOFYxMC4zNzAxQzUuNjAwNiA5Ljc4NzQ0IDYuMDc2NDQgOS4zMTA4NCA2LjY1ODI3IDkuMzEwODRDNy4yNDAwOSA5LjMxMDg0IDcuNzE1OTYgOS43ODc0NCA3LjcxNTk2IDEwLjM3MDFWMTIuMDgzOFpNMTEuMzg4NiAxMi4wODM4QzExLjM4ODYgMTIuNjY2NSAxMC45MTI4IDEzLjE0MzEgMTAuMzMxIDEzLjE0MzFDOS43NDkxNCAxMy4xNDMxIDkuMjczMzIgMTIuNjY2MyA5LjI3MzMyIDEyLjA4MzhWMTAuMzcwMUM5LjI3MzMyIDkuNzg3NDQgOS43NDkzNSA5LjMxMDg0IDEwLjMzMSA5LjMxMDg0QzEwLjkxMjggOS4zMTA4NCAxMS4zODg2IDkuNzg3NDQgMTEuMzg4NiAxMC4zNzAxVjEyLjA4MzhaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTAzNl85NDApIi8+CiAgPC9nPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzEwMzZfOTQwIiB4MT0iMTIiIHkxPSIwIiB4Mj0iMTIiIHkyPSIyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTM0QkIxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU1MUJGOSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xMDM2Xzk0MCIgeDE9IjEyLjUiIHkxPSI0IiB4Mj0iMTIuNSIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMC44MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcDBfMTAzNl85NDAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
|
|
250
|
-
|
|
251
|
-
// src/wallets/connectors/phantom/phantom.ts
|
|
252
|
-
var phantomWallet = () => {
|
|
253
|
-
return {
|
|
254
|
-
id: "phantom",
|
|
255
|
-
name: "Phantom",
|
|
256
|
-
iconUrl: icon,
|
|
257
|
-
isExtension: true,
|
|
258
|
-
isMobile: true,
|
|
259
|
-
getUri: () => "",
|
|
260
|
-
downloadUrl: "https://phantom.app/download"
|
|
261
|
-
};
|
|
262
|
-
};
|
|
263
|
-
|
|
264
|
-
// src/wallets/connectors/glow/glowIcon.ts
|
|
265
|
-
var icon2 = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzN18xMjEwKSI+CiAgICA8cGF0aCBkPSJNMjAuNDE2MiAyMC41NTQxQzE4LjE3MzggMjIuNzY1OCAxNS4xNDk2IDI0LjAwNCAxMiAyNEM4Ljg1NzU3IDI0LjAwNDcgNS44Mzk2NSAyMi43NzE5IDMuNTk5MjQgMjAuNTY4NEM4LjUxMzI5IDE2LjY5NzkgMTUuNDk2NiAxNi42OTM0IDIwLjQxNjIgMjAuNTU0MVpNMjAuNTU0MSAyMC40MTYyQzIyLjc2NTggMTguMTczOCAyNC4wMDQgMTUuMTQ5NiAyNCAxMkMyNCA4LjcyOTQ4IDIyLjY5MTggNS43NjU2MSAyMC41NzA2IDMuNjAwMzRDMTYuNjk3OSA4LjUyODczIDE2LjY5MzQgMTUuNDk3NyAyMC41NTQxIDIwLjQxNjJaTTIwLjQzMzkgMy40NjM1NkMxNS41MDc3IDcuMzQ0MDYgOC41MDIyNiA3LjMzODU1IDMuNTgwNDggMy40NDkyMkM1LjgyMzA2IDEuMjM1MjkgOC44NDg3MSAtMC4wMDQyMjQ3NCAxMiAxLjA4MTk0ZS0wNUMxNS4yODcxIDEuMDgxOTRlLTA1IDE4LjI2NjQgMS4zMjI1NiAyMC40MzM5IDMuNDYzNTZaTTMuNDQ5MjIgMy41ODA0OEMxLjIzNTI5IDUuODIzMDYgLTAuMDA0MjI0NzQgOC44NDg3MSAxLjA4MTk0ZS0wNSAxMkMxLjA4MTk0ZS0wNSAxNS4yODgyIDEuMzIyNTYgMTguMjY2NCAzLjQ2MzU2IDIwLjQzMzlDNy4zNDQwNiAxNS41MDc3IDcuMzM4NTUgOC41MDIyNiAzLjQ0OTIyIDMuNTgwNDhaIiBmaWxsPSIjQ0M2MkQ1Ii8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDM3XzEyMTAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
|
|
266
|
-
|
|
267
|
-
// src/wallets/connectors/glow/glow.ts
|
|
268
|
-
var glowWallet = () => {
|
|
269
|
-
return {
|
|
270
|
-
id: "glow",
|
|
271
|
-
name: "Glow",
|
|
272
|
-
iconUrl: icon2,
|
|
273
|
-
isExtension: true,
|
|
274
|
-
isMobile: true,
|
|
275
|
-
getUri: () => "",
|
|
276
|
-
downloadUrl: "https://glow.app"
|
|
277
|
-
};
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
// src/wallets/connectors/backpack/backpackIcon.ts
|
|
281
|
-
var icon3 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==";
|
|
282
|
-
|
|
283
|
-
// src/wallets/connectors/backpack/backpack.ts
|
|
284
|
-
var backpackWallet = () => {
|
|
285
|
-
return {
|
|
286
|
-
id: "backpack",
|
|
287
|
-
name: "Backpack",
|
|
288
|
-
iconUrl: icon3,
|
|
289
|
-
isExtension: true,
|
|
290
|
-
isMobile: true,
|
|
291
|
-
getUri: () => "",
|
|
292
|
-
downloadUrl: "https://backpack.app/download"
|
|
293
|
-
};
|
|
294
|
-
};
|
|
295
|
-
|
|
296
|
-
// src/wallets/connectors/index.ts
|
|
297
|
-
var allWallets = [phantomWallet, glowWallet, backpackWallet];
|
|
2
|
+
import { SolanaExternalWalletContext } from "./providers/SolanaExternalWalletContext.js";
|
|
3
|
+
import { ParaSolanaProvider } from "./providers/ParaSolanaProvider.js";
|
|
4
|
+
export * from "./wallets/connectors/index.js";
|
|
298
5
|
export {
|
|
299
6
|
ParaSolanaProvider,
|
|
300
|
-
SolanaExternalWalletContext
|
|
301
|
-
allWallets,
|
|
302
|
-
backpackWallet,
|
|
303
|
-
glowWallet,
|
|
304
|
-
phantomWallet
|
|
7
|
+
SolanaExternalWalletContext
|
|
305
8
|
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
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
|
+
import { jsx } from "react/jsx-runtime";
|
|
22
|
+
import { useMemo } from "react";
|
|
23
|
+
import { ConnectionProvider, WalletProvider as SolanaWalletProvider } from "@solana/wallet-adapter-react";
|
|
24
|
+
import { SolanaExternalWalletProvider } from "./SolanaExternalWalletContext.js";
|
|
25
|
+
import {
|
|
26
|
+
createDefaultAddressSelector,
|
|
27
|
+
createDefaultAuthorizationResultCache,
|
|
28
|
+
createDefaultWalletNotFoundHandler,
|
|
29
|
+
SolanaMobileWalletAdapter
|
|
30
|
+
} from "@solana-mobile/wallet-adapter-mobile";
|
|
31
|
+
function ParaSolanaProvider({ children, config, internalConfig }) {
|
|
32
|
+
const { wallets: walletFns, endpoint, appIdentity, chain, connectionConfig } = config;
|
|
33
|
+
const solanaExternalWalletProviderProps = useMemo(
|
|
34
|
+
() => __spreadValues({ wallets: walletFns }, internalConfig),
|
|
35
|
+
[walletFns, internalConfig]
|
|
36
|
+
);
|
|
37
|
+
return /* @__PURE__ */ jsx(ConnectionProvider, { endpoint, config: connectionConfig, children: /* @__PURE__ */ jsx(
|
|
38
|
+
SolanaWalletProvider,
|
|
39
|
+
{
|
|
40
|
+
wallets: [
|
|
41
|
+
new SolanaMobileWalletAdapter({
|
|
42
|
+
addressSelector: createDefaultAddressSelector(),
|
|
43
|
+
appIdentity,
|
|
44
|
+
authorizationResultCache: createDefaultAuthorizationResultCache(),
|
|
45
|
+
chain,
|
|
46
|
+
onWalletNotFound: createDefaultWalletNotFoundHandler()
|
|
47
|
+
})
|
|
48
|
+
],
|
|
49
|
+
localStorageKey: "paraSolanaExternal",
|
|
50
|
+
autoConnect: true,
|
|
51
|
+
children: /* @__PURE__ */ jsx(SolanaExternalWalletProvider, __spreadProps(__spreadValues({}, solanaExternalWalletProviderProps), { children }))
|
|
52
|
+
}
|
|
53
|
+
) });
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
ParaSolanaProvider
|
|
57
|
+
};
|
|
@@ -1,31 +1,10 @@
|
|
|
1
1
|
import { PropsWithChildren } from 'react';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
export type SolanaExternalWalletContextType =
|
|
6
|
-
wallets: CommonWallet[];
|
|
7
|
-
disconnect: () => Promise<void>;
|
|
8
|
-
signMessage: (message: string) => Promise<{
|
|
9
|
-
signature?: string;
|
|
10
|
-
error?: string;
|
|
11
|
-
}>;
|
|
12
|
-
signVerificationMessage: () => Promise<{
|
|
13
|
-
address?: string;
|
|
14
|
-
signature?: string;
|
|
15
|
-
error?: string;
|
|
16
|
-
}>;
|
|
17
|
-
};
|
|
2
|
+
import { CreateWalletFn } from '../types/Wallet.js';
|
|
3
|
+
import { ExternalWalletContextType, ExternalWalletProviderConfig, ExternalWalletProviderConfigBase } from '@getpara/react-common';
|
|
4
|
+
import { TExternalHooks } from './externalHooks.js';
|
|
5
|
+
export type SolanaExternalWalletContextType = ExternalWalletContextType & TExternalHooks;
|
|
18
6
|
export declare const SolanaExternalWalletContext: import("react").Context<SolanaExternalWalletContextType>;
|
|
19
|
-
export type SolanaExternalWalletProviderConfig =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
error?: string;
|
|
23
|
-
}) => void;
|
|
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;
|
|
7
|
+
export type SolanaExternalWalletProviderConfig = ExternalWalletProviderConfigBase;
|
|
8
|
+
type SolanaExternalWalletProviderConfigFull = ExternalWalletProviderConfig<CreateWalletFn>;
|
|
9
|
+
export declare function SolanaExternalWalletProvider({ children, wallets: walletFns, onSwitchWallet, para, walletsWithFullAuth, includeWalletVerification, connectionOnly, }: SolanaExternalWalletProviderConfigFull & PropsWithChildren): import("react/jsx-runtime").JSX.Element;
|
|
31
10
|
export {};
|
|
@@ -0,0 +1,316 @@
|
|
|
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 { isIosAndRedirectable, WalletReadyState } from "@solana/wallet-adapter-base";
|
|
42
|
+
import {
|
|
43
|
+
defaultSolanaExternalWallet
|
|
44
|
+
} from "@getpara/react-common";
|
|
45
|
+
import bs58 from "bs58";
|
|
46
|
+
import { externalHooks } from "./externalHooks.js";
|
|
47
|
+
const SolanaExternalWalletContext = createContext(defaultSolanaExternalWallet);
|
|
48
|
+
function SolanaExternalWalletProvider({
|
|
49
|
+
children,
|
|
50
|
+
wallets: walletFns,
|
|
51
|
+
onSwitchWallet,
|
|
52
|
+
para,
|
|
53
|
+
walletsWithFullAuth,
|
|
54
|
+
includeWalletVerification,
|
|
55
|
+
connectionOnly
|
|
56
|
+
}) {
|
|
57
|
+
const {
|
|
58
|
+
wallets: adapters,
|
|
59
|
+
select: selectWallet,
|
|
60
|
+
disconnect,
|
|
61
|
+
publicKey: solanaAddress,
|
|
62
|
+
wallet,
|
|
63
|
+
connecting,
|
|
64
|
+
signMessage: solanaSignMessage
|
|
65
|
+
} = useWallet();
|
|
66
|
+
const isLinkingAccount = useRef(false);
|
|
67
|
+
const solanaSignMessageRef = useRef(solanaSignMessage);
|
|
68
|
+
const solanaAddressRef = useRef(solanaAddress);
|
|
69
|
+
const verificationMessage = useRef();
|
|
70
|
+
const reset = () => __async(this, null, function* () {
|
|
71
|
+
yield disconnect();
|
|
72
|
+
yield para.logout();
|
|
73
|
+
});
|
|
74
|
+
const _reset = (..._0) => __async(this, [..._0], function* ({ logout = false } = {}) {
|
|
75
|
+
yield disconnect();
|
|
76
|
+
if (logout) {
|
|
77
|
+
yield para.logout();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const login = (_0) => __async(this, [_0], function* ({
|
|
81
|
+
address,
|
|
82
|
+
providerId,
|
|
83
|
+
providerName
|
|
84
|
+
}) {
|
|
85
|
+
var _a, _b;
|
|
86
|
+
try {
|
|
87
|
+
return yield para.loginExternalWallet({
|
|
88
|
+
externalWallet: {
|
|
89
|
+
address,
|
|
90
|
+
type: "SOLANA",
|
|
91
|
+
provider: providerName,
|
|
92
|
+
providerId,
|
|
93
|
+
withFullParaAuth: walletsWithFullAuth == null ? void 0 : walletsWithFullAuth.includes(
|
|
94
|
+
(_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : ""
|
|
95
|
+
),
|
|
96
|
+
withVerification: includeWalletVerification,
|
|
97
|
+
isConnectionOnly: connectionOnly
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
} catch (err) {
|
|
101
|
+
yield reset();
|
|
102
|
+
throw "Error logging you in. Please try again.";
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const switchWallet = (address) => __async(this, null, function* () {
|
|
106
|
+
var _a, _b, _c, _d;
|
|
107
|
+
let error;
|
|
108
|
+
if (!address) {
|
|
109
|
+
yield para.logout();
|
|
110
|
+
} else {
|
|
111
|
+
if (para.isExternalWalletAuth || para.isExternalWalletWithVerification) {
|
|
112
|
+
yield reset();
|
|
113
|
+
} else {
|
|
114
|
+
try {
|
|
115
|
+
yield login({
|
|
116
|
+
address,
|
|
117
|
+
providerId: (_c = getWallet((_b = (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name) != null ? _b : "")) == null ? void 0 : _c.internalId,
|
|
118
|
+
providerName: (_d = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _d.name
|
|
119
|
+
});
|
|
120
|
+
} catch (err) {
|
|
121
|
+
error = err;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
onSwitchWallet({ address, error });
|
|
126
|
+
});
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
var _a;
|
|
129
|
+
const storedExternalWallet = para.externalWallets[(_a = solanaAddress == null ? void 0 : solanaAddress.toString()) != null ? _a : ""];
|
|
130
|
+
if (!!solanaAddress && !storedExternalWallet && !isLinkingAccount.current) {
|
|
131
|
+
reset();
|
|
132
|
+
}
|
|
133
|
+
}, []);
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
solanaSignMessageRef.current = solanaSignMessage;
|
|
136
|
+
}, [solanaSignMessage]);
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
solanaAddressRef.current = solanaAddress;
|
|
139
|
+
}, [solanaAddress]);
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
const storedExternalWallet = Object.values(para.externalWallets || {})[0];
|
|
142
|
+
if (!connecting && (!wallet || (wallet == null ? void 0 : wallet.adapter.connected)) && (storedExternalWallet == null ? void 0 : storedExternalWallet.type) === "SOLANA" && (storedExternalWallet == null ? void 0 : storedExternalWallet.address) !== (solanaAddress == null ? void 0 : solanaAddress.toString()) && !isLinkingAccount.current) {
|
|
143
|
+
switchWallet(solanaAddress == null ? void 0 : solanaAddress.toString());
|
|
144
|
+
}
|
|
145
|
+
}, [solanaAddress, connecting, wallet]);
|
|
146
|
+
const signMessage = (_0) => __async(this, [_0], function* ({ message }) {
|
|
147
|
+
var _a, _b, _c, _d;
|
|
148
|
+
try {
|
|
149
|
+
let solanaAddressNow = (_a = solanaAddressRef.current) != null ? _a : solanaAddress, solanaSignMessageNow = (_b = solanaSignMessageRef.current) != null ? _b : solanaSignMessage;
|
|
150
|
+
while (!solanaAddressNow || !solanaSignMessageNow) {
|
|
151
|
+
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
152
|
+
solanaAddressNow = (_c = solanaAddressRef.current) != null ? _c : solanaAddress;
|
|
153
|
+
solanaSignMessageNow = (_d = solanaSignMessageRef.current) != null ? _d : solanaSignMessage;
|
|
154
|
+
}
|
|
155
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
156
|
+
const signature = yield solanaSignMessageNow(encodedMessage);
|
|
157
|
+
solanaAddressRef.current = void 0;
|
|
158
|
+
solanaSignMessageRef.current = void 0;
|
|
159
|
+
return {
|
|
160
|
+
address: solanaAddressNow.toString(),
|
|
161
|
+
signature: bs58.encode(signature)
|
|
162
|
+
};
|
|
163
|
+
} catch (e) {
|
|
164
|
+
console.error(e);
|
|
165
|
+
if (e.message.includes("User rejected the request")) {
|
|
166
|
+
return { error: "Signature request rejected" };
|
|
167
|
+
}
|
|
168
|
+
console.error("Solana signature error:", e.message);
|
|
169
|
+
return { error: "An unknown error occurred" };
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
const signVerificationMessage = () => __async(this, null, function* () {
|
|
173
|
+
const signature = yield signMessage({ message: verificationMessage.current });
|
|
174
|
+
return signature;
|
|
175
|
+
});
|
|
176
|
+
const connectBase = (adapter, _switchWallet = false) => __async(this, null, function* () {
|
|
177
|
+
if (!adapter) {
|
|
178
|
+
throw new Error("Adapter not found.");
|
|
179
|
+
}
|
|
180
|
+
selectWallet(adapter.name);
|
|
181
|
+
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
182
|
+
let address;
|
|
183
|
+
let error;
|
|
184
|
+
try {
|
|
185
|
+
yield adapter.connect();
|
|
186
|
+
if (adapter.publicKey) {
|
|
187
|
+
address = adapter.publicKey.toString();
|
|
188
|
+
} else {
|
|
189
|
+
yield new Promise((resolve, reject) => {
|
|
190
|
+
adapter.once("connect", () => __async(this, null, function* () {
|
|
191
|
+
try {
|
|
192
|
+
address = adapter.publicKey.toString();
|
|
193
|
+
resolve();
|
|
194
|
+
} catch (err) {
|
|
195
|
+
reject(err);
|
|
196
|
+
}
|
|
197
|
+
}));
|
|
198
|
+
adapter.once("error", (err) => {
|
|
199
|
+
error = (err == null ? void 0 : err.message) || "An unknown error occurred";
|
|
200
|
+
reject(err);
|
|
201
|
+
});
|
|
202
|
+
adapter.once("disconnect", () => {
|
|
203
|
+
error = "Disconnected before connect event";
|
|
204
|
+
reject(new Error(error));
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
return address;
|
|
209
|
+
} catch (e) {
|
|
210
|
+
console.error(e);
|
|
211
|
+
yield adapter.disconnect();
|
|
212
|
+
throw e;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
const connect = (adapter) => __async(this, null, function* () {
|
|
216
|
+
var _a;
|
|
217
|
+
if (isIosAndRedirectable()) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
yield disconnect();
|
|
221
|
+
let address;
|
|
222
|
+
let error;
|
|
223
|
+
let authState;
|
|
224
|
+
try {
|
|
225
|
+
address = yield connectBase(adapter, true);
|
|
226
|
+
if (address) {
|
|
227
|
+
try {
|
|
228
|
+
authState = yield login({ address, providerId: (_a = getWallet(adapter.name)) == null ? void 0 : _a.internalId, providerName: adapter.name });
|
|
229
|
+
verificationMessage.current = authState.stage === "verify" ? authState.signatureVerificationMessage : void 0;
|
|
230
|
+
} catch (err) {
|
|
231
|
+
yield disconnect();
|
|
232
|
+
address = void 0;
|
|
233
|
+
error = err;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
} catch (err) {
|
|
237
|
+
switch (err.message) {
|
|
238
|
+
case "User aborted.":
|
|
239
|
+
case "Approval Denied":
|
|
240
|
+
case "You canceled this request.": {
|
|
241
|
+
error = "Connection request rejected";
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
default: {
|
|
245
|
+
console.error("Solana connection error:", err.message);
|
|
246
|
+
error = "An unknown error occurred";
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return { address, error, authState };
|
|
252
|
+
});
|
|
253
|
+
const requestInfo = (providerId) => __async(this, null, function* () {
|
|
254
|
+
var _a, _b;
|
|
255
|
+
const wallet2 = wallets.find((w) => w.internalId === providerId);
|
|
256
|
+
const adapter = getAdapter((_a = wallet2.name) != null ? _a : "");
|
|
257
|
+
isLinkingAccount.current = true;
|
|
258
|
+
try {
|
|
259
|
+
const address = yield connectBase(adapter);
|
|
260
|
+
const externalWallet = {
|
|
261
|
+
address,
|
|
262
|
+
type: "SOLANA",
|
|
263
|
+
providerId: wallet2.internalId,
|
|
264
|
+
provider: wallet2.name
|
|
265
|
+
};
|
|
266
|
+
return externalWallet;
|
|
267
|
+
} catch (e) {
|
|
268
|
+
console.error("Error linking account:", e);
|
|
269
|
+
throw new Error((_b = e == null ? void 0 : e.message) != null ? _b : e);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
const disconnectBase = (providerId) => __async(this, null, function* () {
|
|
273
|
+
var _a, _b;
|
|
274
|
+
const wallet2 = wallets.find((w) => w.internalId === providerId);
|
|
275
|
+
const adapter = getAdapter((_a = wallet2.name) != null ? _a : "");
|
|
276
|
+
if (!(adapter == null ? void 0 : adapter.connected)) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
isLinkingAccount.current = true;
|
|
280
|
+
try {
|
|
281
|
+
yield adapter.disconnect();
|
|
282
|
+
} catch (e) {
|
|
283
|
+
console.error("Error disconnecting wallet:", e);
|
|
284
|
+
throw new Error((_b = e == null ? void 0 : e.message) != null ? _b : e);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
const getAdapter = (name) => {
|
|
288
|
+
var _a;
|
|
289
|
+
return (_a = adapters.find((a) => a.adapter.name === "Mobile Wallet Adapter" ? a : a.adapter.name === name ? a : false)) == null ? void 0 : _a.adapter;
|
|
290
|
+
};
|
|
291
|
+
const getWallet = (name) => wallets.find((w) => w.name === name);
|
|
292
|
+
const wallets = walletFns.map((walletFn) => {
|
|
293
|
+
const metaData = walletFn();
|
|
294
|
+
const adapter = getAdapter(metaData.name);
|
|
295
|
+
return __spreadValues({
|
|
296
|
+
connect: () => connect(adapter),
|
|
297
|
+
connectMobile: () => connect(adapter),
|
|
298
|
+
type: "SOLANA",
|
|
299
|
+
installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable)
|
|
300
|
+
}, metaData);
|
|
301
|
+
});
|
|
302
|
+
return /* @__PURE__ */ jsx(
|
|
303
|
+
SolanaExternalWalletContext.Provider,
|
|
304
|
+
{
|
|
305
|
+
value: useMemo(
|
|
306
|
+
() => __spreadValues({ wallets, disconnect, signMessage, signVerificationMessage, requestInfo, disconnectBase }, externalHooks),
|
|
307
|
+
[wallets, disconnect, signMessage, signVerificationMessage, requestInfo, disconnectBase]
|
|
308
|
+
),
|
|
309
|
+
children
|
|
310
|
+
}
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
export {
|
|
314
|
+
SolanaExternalWalletContext,
|
|
315
|
+
SolanaExternalWalletProvider
|
|
316
|
+
};
|
package/dist/types/Wallet.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { type WalletMetadata } from '@getpara/react-common';
|
|
2
|
-
export type Wallet =
|
|
3
|
-
getUri?: (uri: string) => string;
|
|
4
|
-
} & WalletMetadata;
|
|
2
|
+
export type Wallet = WalletMetadata;
|
|
5
3
|
export type CreateWalletFn = () => Wallet;
|
|
6
4
|
export type WalletList = CreateWalletFn[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";
|
|
@@ -0,0 +1,46 @@
|
|
|
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 { isIosAndRedirectable } from "@solana/wallet-adapter-base";
|
|
23
|
+
import { icon } from "./backpackIcon.js";
|
|
24
|
+
const backpackWallet = () => {
|
|
25
|
+
return {
|
|
26
|
+
id: "backpack",
|
|
27
|
+
internalId: "BACKPACK",
|
|
28
|
+
name: "Backpack",
|
|
29
|
+
iconUrl: icon,
|
|
30
|
+
isExtension: true,
|
|
31
|
+
isMobile: true,
|
|
32
|
+
hasIosSafariExtension: false,
|
|
33
|
+
getQrUri: () => __async(void 0, null, function* () {
|
|
34
|
+
if (typeof window !== "undefined" && isIosAndRedirectable()) {
|
|
35
|
+
const url = encodeURIComponent(window.location.href);
|
|
36
|
+
const ref = encodeURIComponent(window.location.origin);
|
|
37
|
+
return `https://backpack.app/ul/v1/browse/${url}?ref=${ref}`;
|
|
38
|
+
}
|
|
39
|
+
return "";
|
|
40
|
+
}),
|
|
41
|
+
downloadUrl: "https://backpack.app/download"
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export {
|
|
45
|
+
backpackWallet
|
|
46
|
+
};
|
|
@@ -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,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { icon } from "./glowIcon.js";
|
|
3
|
+
import { isIosAndRedirectable } from "@solana/wallet-adapter-base";
|
|
4
|
+
const glowWallet = () => {
|
|
5
|
+
return {
|
|
6
|
+
id: "glow",
|
|
7
|
+
internalId: "GLOW",
|
|
8
|
+
name: "Glow",
|
|
9
|
+
iconUrl: icon,
|
|
10
|
+
isExtension: true,
|
|
11
|
+
isMobile: true,
|
|
12
|
+
hasIosSafariExtension: isIosAndRedirectable(),
|
|
13
|
+
downloadUrl: "https://glow.app"
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
glowWallet
|
|
18
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAzN18xMjEwKSI+CiAgICA8cGF0aCBkPSJNMjAuNDE2MiAyMC41NTQxQzE4LjE3MzggMjIuNzY1OCAxNS4xNDk2IDI0LjAwNCAxMiAyNEM4Ljg1NzU3IDI0LjAwNDcgNS44Mzk2NSAyMi43NzE5IDMuNTk5MjQgMjAuNTY4NEM4LjUxMzI5IDE2LjY5NzkgMTUuNDk2NiAxNi42OTM0IDIwLjQxNjIgMjAuNTU0MVpNMjAuNTU0MSAyMC40MTYyQzIyLjc2NTggMTguMTczOCAyNC4wMDQgMTUuMTQ5NiAyNCAxMkMyNCA4LjcyOTQ4IDIyLjY5MTggNS43NjU2MSAyMC41NzA2IDMuNjAwMzRDMTYuNjk3OSA4LjUyODczIDE2LjY5MzQgMTUuNDk3NyAyMC41NTQxIDIwLjQxNjJaTTIwLjQzMzkgMy40NjM1NkMxNS41MDc3IDcuMzQ0MDYgOC41MDIyNiA3LjMzODU1IDMuNTgwNDggMy40NDkyMkM1LjgyMzA2IDEuMjM1MjkgOC44NDg3MSAtMC4wMDQyMjQ3NCAxMiAxLjA4MTk0ZS0wNUMxNS4yODcxIDEuMDgxOTRlLTA1IDE4LjI2NjQgMS4zMjI1NiAyMC40MzM5IDMuNDYzNTZaTTMuNDQ5MjIgMy41ODA0OEMxLjIzNTI5IDUuODIzMDYgLTAuMDA0MjI0NzQgOC44NDg3MSAxLjA4MTk0ZS0wNSAxMkMxLjA4MTk0ZS0wNSAxNS4yODgyIDEuMzIyNTYgMTguMjY2NCAzLjQ2MzU2IDIwLjQzMzlDNy4zNDQwNiAxNS41MDc3IDcuMzM4NTUgOC41MDIyNiAzLjQ0OTIyIDMuNTgwNDhaIiBmaWxsPSIjQ0M2MkQ1Ii8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDM3XzEyMTAiPgogICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KPC9zdmc+";
|
|
3
|
+
export {
|
|
4
|
+
icon
|
|
5
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { phantomWallet } from './phantom/phantom.js';
|
|
2
2
|
import { glowWallet } from './glow/glow.js';
|
|
3
3
|
import { backpackWallet } from './backpack/backpack.js';
|
|
4
|
-
|
|
4
|
+
import { solflareWallet } from './solflare/solflare.js';
|
|
5
|
+
export { phantomWallet, glowWallet, backpackWallet, solflareWallet };
|
|
5
6
|
export declare const allWallets: (() => import("../../types/Wallet.js").Wallet)[];
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
import { solflareWallet } from "./solflare/solflare.js";
|
|
6
|
+
const allWallets = [phantomWallet, glowWallet, backpackWallet, solflareWallet];
|
|
7
|
+
export {
|
|
8
|
+
allWallets,
|
|
9
|
+
backpackWallet,
|
|
10
|
+
glowWallet,
|
|
11
|
+
phantomWallet,
|
|
12
|
+
solflareWallet
|
|
13
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
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 { isIosAndRedirectable } from "@solana/wallet-adapter-base";
|
|
23
|
+
import { icon } from "./phantomIcon.js";
|
|
24
|
+
const phantomWallet = () => {
|
|
25
|
+
return {
|
|
26
|
+
id: "phantom",
|
|
27
|
+
internalId: "PHANTOM",
|
|
28
|
+
name: "Phantom",
|
|
29
|
+
iconUrl: icon,
|
|
30
|
+
isExtension: true,
|
|
31
|
+
isMobile: true,
|
|
32
|
+
hasIosSafariExtension: false,
|
|
33
|
+
getQrUri: () => __async(void 0, null, function* () {
|
|
34
|
+
if (typeof window !== "undefined" && isIosAndRedirectable()) {
|
|
35
|
+
const url = encodeURIComponent(window.location.href);
|
|
36
|
+
const ref = encodeURIComponent(window.location.origin);
|
|
37
|
+
return `https://phantom.app/ul/browse/${url}?ref=${ref}`;
|
|
38
|
+
}
|
|
39
|
+
return "";
|
|
40
|
+
}),
|
|
41
|
+
downloadUrl: "https://phantom.app/download"
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export {
|
|
45
|
+
phantomWallet
|
|
46
|
+
};
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
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 { isIosAndRedirectable } from "@solana/wallet-adapter-base";
|
|
23
|
+
import { icon } from "./solflareIcon.js";
|
|
24
|
+
const solflareWallet = () => {
|
|
25
|
+
return {
|
|
26
|
+
id: "solflare",
|
|
27
|
+
internalId: "SOLFLARE",
|
|
28
|
+
name: "Solflare",
|
|
29
|
+
iconUrl: icon,
|
|
30
|
+
isExtension: true,
|
|
31
|
+
isMobile: true,
|
|
32
|
+
hasIosSafariExtension: false,
|
|
33
|
+
getQrUri: () => __async(void 0, null, function* () {
|
|
34
|
+
if (typeof window !== "undefined" && isIosAndRedirectable()) {
|
|
35
|
+
const url = encodeURIComponent(window.location.href);
|
|
36
|
+
const ref = encodeURIComponent(window.location.origin);
|
|
37
|
+
return `https://solflare.com/ul/v1/browse/${url}?ref=${ref}`;
|
|
38
|
+
}
|
|
39
|
+
return "";
|
|
40
|
+
}),
|
|
41
|
+
downloadUrl: "https://www.solflare.com/download/"
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export {
|
|
45
|
+
solflareWallet
|
|
46
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5NDc3XzMyMTMpIj4KPHBhdGggZD0iTTUuMTkxNDEgMC41SDE4LjgwODZDMjEuMzk5NSAwLjUgMjMuNSAyLjYwMDUgMjMuNSA1LjE5MTQxVjE4LjgwODZDMjMuNSAyMS4zOTk1IDIxLjM5OTUgMjMuNSAxOC44MDg2IDIzLjVINS4xOTE0MUMyLjYwMDUgMjMuNSAwLjUgMjEuMzk5NSAwLjUgMTguODA4NlY1LjE5MTQxQzAuNSAyLjYwMDUgMi42MDA1IDAuNSA1LjE5MTQxIDAuNVoiIGZpbGw9IiNGRkVGNDYiIHN0cm9rZT0iI0VFREEwRiIvPgo8cGF0aCBkPSJNMTEuNTU1OSAxMi42MzU1TDEyLjY1MzkgMTEuNTcwMUwxNC43MDEgMTIuMjQzQzE2LjA0MDkgMTIuNjkxNiAxNi43MTA5IDEzLjUxNCAxNi43MTA5IDE0LjY3MjlDMTYuNzEwOSAxNS41NTE0IDE2LjM3NTkgMTYuMTMwOSAxNS43MDYgMTYuODc4NUwxNS41MDEzIDE3LjEwMjhMMTUuNTc1NyAxNi41Nzk0QzE1Ljg3MzQgMTQuNjcyOSAxNS4zMTUyIDEzLjg1MDUgMTMuNDcyNyAxMy4yNTIzTDExLjU1NTkgMTIuNjM1NVpNOC44MDE0NyA2LjExMjE2TDE0LjM4NDYgNy45ODEzMUwxMy4xNzQ5IDkuMTQwMkwxMC4yNzE3IDguMTY4MjNDOS4yNjY3NyA3LjgzMTc4IDguOTMxNzcgNy4yODk3MiA4LjgwMTQ3IDYuMTQ5NTRWNi4xMTIxNlpNOC40NjY0NyAxNS42MDc1TDkuNzMyIDE0LjM5MjVMMTIuMTE0MiAxNS4xNzc2QzEzLjM2MSAxNS41ODg4IDEzLjc4OSAxNi4xMzA5IDEzLjY1ODggMTcuNDk1M0w4LjQ2NjQ3IDE1LjYwNzVaTTYuODY2IDEwLjE4NjlDNi44NjYgOS44MzE4MiA3LjA1MjEgOS40OTUzNSA3LjM2ODQ4IDkuMjE0OTNDNy43MDM0NyA5LjcwMDk1IDguMjgwMzkgMTAuMTMwOCA5LjE5MjI5IDEwLjQyOTlMMTEuMTY1IDExLjA4NDFMMTAuMDY3IDEyLjE0OTZMOC4xMzE1MSAxMS41MTRDNy4yMzgyMSAxMS4yMTUgNi44NjYgMTAuNzY2MyA2Ljg2NiAxMC4xODY5Wk0xMi43MDk3IDIwQzE2LjgwMzkgMTcuMjcxMSAxOSAxNS40MjA2IDE5IDEzLjE0MDJDMTkgMTEuNjI2MiAxOC4xMDY3IDEwLjc4NSAxNi4xMzQgMTAuMTMwOEwxNC42NDUyIDkuNjI2MTRMMTguNzIwOSA1LjcwMDk0TDE3LjkwMiA0LjgyMjQ0TDE2LjY5MjMgNS44ODc4NUwxMC45Nzg5IDRDOS4yMTA4OSA0LjU3OTQ0IDYuOTc3NjcgNi4yODAzNyA2Ljk3NzY3IDcuOTgxM0M2Ljk3NzY3IDguMTY4MjIgNi45OTYyOCA4LjM1NTE0IDcuMDUyMTEgOC41NjA3NkM1LjU4MTg4IDkuNDAxODUgNC45ODYzNSAxMC4xODY5IDQuOTg2MzUgMTEuMTU4OEM0Ljk4NjM1IDEyLjA3NDcgNS40NzAyMiAxMi45OTA2IDcuMDE0ODkgMTMuNDk1M0w4LjI0MzE3IDEzLjkwNjVMNCAxOEw0LjgxODg2IDE4Ljg3ODVMNi4xNDAyIDE3LjY2MzZMMTIuNzA5NyAyMFoiIGZpbGw9IiMwMjA1MEEiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xOTQ3N18zMjEzIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPg==";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5NDc3XzMyMTMpIj4KPHBhdGggZD0iTTUuMTkxNDEgMC41SDE4LjgwODZDMjEuMzk5NSAwLjUgMjMuNSAyLjYwMDUgMjMuNSA1LjE5MTQxVjE4LjgwODZDMjMuNSAyMS4zOTk1IDIxLjM5OTUgMjMuNSAxOC44MDg2IDIzLjVINS4xOTE0MUMyLjYwMDUgMjMuNSAwLjUgMjEuMzk5NSAwLjUgMTguODA4NlY1LjE5MTQxQzAuNSAyLjYwMDUgMi42MDA1IDAuNSA1LjE5MTQxIDAuNVoiIGZpbGw9IiNGRkVGNDYiIHN0cm9rZT0iI0VFREEwRiIvPgo8cGF0aCBkPSJNMTEuNTU1OSAxMi42MzU1TDEyLjY1MzkgMTEuNTcwMUwxNC43MDEgMTIuMjQzQzE2LjA0MDkgMTIuNjkxNiAxNi43MTA5IDEzLjUxNCAxNi43MTA5IDE0LjY3MjlDMTYuNzEwOSAxNS41NTE0IDE2LjM3NTkgMTYuMTMwOSAxNS43MDYgMTYuODc4NUwxNS41MDEzIDE3LjEwMjhMMTUuNTc1NyAxNi41Nzk0QzE1Ljg3MzQgMTQuNjcyOSAxNS4zMTUyIDEzLjg1MDUgMTMuNDcyNyAxMy4yNTIzTDExLjU1NTkgMTIuNjM1NVpNOC44MDE0NyA2LjExMjE2TDE0LjM4NDYgNy45ODEzMUwxMy4xNzQ5IDkuMTQwMkwxMC4yNzE3IDguMTY4MjNDOS4yNjY3NyA3LjgzMTc4IDguOTMxNzcgNy4yODk3MiA4LjgwMTQ3IDYuMTQ5NTRWNi4xMTIxNlpNOC40NjY0NyAxNS42MDc1TDkuNzMyIDE0LjM5MjVMMTIuMTE0MiAxNS4xNzc2QzEzLjM2MSAxNS41ODg4IDEzLjc4OSAxNi4xMzA5IDEzLjY1ODggMTcuNDk1M0w4LjQ2NjQ3IDE1LjYwNzVaTTYuODY2IDEwLjE4NjlDNi44NjYgOS44MzE4MiA3LjA1MjEgOS40OTUzNSA3LjM2ODQ4IDkuMjE0OTNDNy43MDM0NyA5LjcwMDk1IDguMjgwMzkgMTAuMTMwOCA5LjE5MjI5IDEwLjQyOTlMMTEuMTY1IDExLjA4NDFMMTAuMDY3IDEyLjE0OTZMOC4xMzE1MSAxMS41MTRDNy4yMzgyMSAxMS4yMTUgNi44NjYgMTAuNzY2MyA2Ljg2NiAxMC4xODY5Wk0xMi43MDk3IDIwQzE2LjgwMzkgMTcuMjcxMSAxOSAxNS40MjA2IDE5IDEzLjE0MDJDMTkgMTEuNjI2MiAxOC4xMDY3IDEwLjc4NSAxNi4xMzQgMTAuMTMwOEwxNC42NDUyIDkuNjI2MTRMMTguNzIwOSA1LjcwMDk0TDE3LjkwMiA0LjgyMjQ0TDE2LjY5MjMgNS44ODc4NUwxMC45Nzg5IDRDOS4yMTA4OSA0LjU3OTQ0IDYuOTc3NjcgNi4yODAzNyA2Ljk3NzY3IDcuOTgxM0M2Ljk3NzY3IDguMTY4MjIgNi45OTYyOCA4LjM1NTE0IDcuMDUyMTEgOC41NjA3NkM1LjU4MTg4IDkuNDAxODUgNC45ODYzNSAxMC4xODY5IDQuOTg2MzUgMTEuMTU4OEM0Ljk4NjM1IDEyLjA3NDcgNS40NzAyMiAxMi45OTA2IDcuMDE0ODkgMTMuNDk1M0w4LjI0MzE3IDEzLjkwNjVMNCAxOEw0LjgxODg2IDE4Ljg3ODVMNi4xNDAyIDE3LjY2MzZMMTIuNzA5NyAyMFoiIGZpbGw9IiMwMjA1MEEiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xOTQ3N18zMjEzIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPg==";
|
|
3
|
+
export {
|
|
4
|
+
icon
|
|
5
|
+
};
|
package/package.json
CHANGED
|
@@ -1,39 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getpara/solana-wallet-connectors",
|
|
3
|
-
"version": "2.0.0-dev.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": "./dist/index.js",
|
|
9
|
-
"./connectors": "./dist/wallets/connectors/index.js"
|
|
10
|
-
},
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "rm -rf dist && yarn typegen && node ./scripts/build.mjs",
|
|
13
|
-
"typegen": "tsc --emitDeclarationOnly",
|
|
14
|
-
"test": "vitest run --coverage"
|
|
15
|
-
},
|
|
3
|
+
"version": "2.0.0-dev.3",
|
|
16
4
|
"dependencies": {
|
|
17
|
-
"@getpara/
|
|
18
|
-
"@
|
|
19
|
-
"@solana/wallet-adapter-base": "0.9.23",
|
|
20
|
-
"@solana/wallet-adapter-react": "0.15.35",
|
|
21
|
-
"@solana/wallet-adapter-walletconnect": "0.1.16",
|
|
5
|
+
"@getpara/react-common": "2.0.0-dev.3",
|
|
6
|
+
"@getpara/web-sdk": "2.0.0-dev.3",
|
|
22
7
|
"bs58": "6.0.0"
|
|
23
8
|
},
|
|
24
9
|
"devDependencies": {
|
|
25
|
-
"@
|
|
10
|
+
"@solana-mobile/wallet-adapter-mobile": "^2.2.0",
|
|
11
|
+
"@solana/wallet-adapter-base": "^0.9.27",
|
|
12
|
+
"@solana/wallet-adapter-react": "^0.15.39",
|
|
13
|
+
"@solana/wallet-adapter-walletconnect": "^0.1.21",
|
|
26
14
|
"@types/react": "^18.0.31",
|
|
27
15
|
"@types/react-dom": "^18.2.7",
|
|
28
|
-
"typescript": "^5.
|
|
16
|
+
"typescript": "^5.8.3"
|
|
29
17
|
},
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
18
|
+
"exports": {
|
|
19
|
+
".": "./dist/index.js",
|
|
20
|
+
"./connectors": "./dist/wallets/connectors/index.js"
|
|
33
21
|
},
|
|
34
22
|
"files": [
|
|
35
23
|
"dist",
|
|
36
24
|
"package.json"
|
|
37
25
|
],
|
|
38
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "ffe34f7d8df2dd3c2327ca1f35bcc9764e0a68a2",
|
|
27
|
+
"main": "dist/index.js",
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@solana-mobile/wallet-adapter-mobile": "2.x",
|
|
30
|
+
"@solana/wallet-adapter-base": "0.x",
|
|
31
|
+
"@solana/wallet-adapter-react": "0.x",
|
|
32
|
+
"@solana/wallet-adapter-walletconnect": "0.x",
|
|
33
|
+
"react": ">=18",
|
|
34
|
+
"react-dom": ">=18"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "rm -rf dist && yarn typegen && node ./scripts/build.mjs",
|
|
38
|
+
"test": "vitest run --coverage",
|
|
39
|
+
"typegen": "tsc --emitDeclarationOnly"
|
|
40
|
+
},
|
|
41
|
+
"type": "module",
|
|
42
|
+
"types": "dist/index.d.ts"
|
|
39
43
|
}
|
package/dist/index.js.br
DELETED
|
Binary file
|
package/dist/index.js.gz
DELETED
|
Binary file
|