@getpara/solana-wallet-connectors 2.0.0-alpha.7 → 2.0.0-alpha.71

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/README.md ADDED
@@ -0,0 +1,14 @@
1
+ https://www.npmjs.com/package/@getpara/solana-wallet-connectors
2
+
3
+ `@getpara/solana-wallet-connectors` is a package that provides wallet connectors for Solana when using Para's React SDK Lite.
4
+ The package enables integration with popular Solana wallets like Phantom, Backpack, Solflare, and Glow through Para's provider system. After installation, you can configure it in your ParaProvider.
5
+
6
+ ###Prerequisites
7
+
8
+ To use Para, you need an API key. This key authenticates your requests to Para services and is essential for integration.
9
+
10
+ Don't have an API key yet? Request access to the [Developer Portal](https://developer.getpara.com/) to create API keys, manage billing, teams, and more.
11
+
12
+ ###Learn more
13
+
14
+ For more information on Para’s Solana wallet connector visit the [Para Docs](https://docs.getpara.com/v2/react/guides/external-wallets/solana-lite#solana-wallets-with-react-sdk-lite)
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { SolanaExternalWalletContext } from './providers/SolanaExternalWalletContext.js';
2
- export type { SolanaExternalWalletContextType } from './providers/SolanaExternalWalletContext.js';
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';
@@ -48,7 +48,7 @@ function ParaSolanaProvider({ children, config, internalConfig }) {
48
48
  ],
49
49
  localStorageKey: "paraSolanaExternal",
50
50
  autoConnect: true,
51
- children: /* @__PURE__ */ jsx(SolanaExternalWalletProvider, __spreadProps(__spreadValues({}, solanaExternalWalletProviderProps), { children }))
51
+ children: /* @__PURE__ */ jsx(SolanaExternalWalletProvider, __spreadProps(__spreadValues({}, solanaExternalWalletProviderProps), { chain, children }))
52
52
  }
53
53
  ) });
54
54
  }
@@ -1,31 +1,13 @@
1
1
  import { PropsWithChildren } from 'react';
2
- import ParaWeb from '@getpara/web-sdk';
3
- import { WalletList } from '../types/Wallet.js';
4
- import { TExternalWallet, type CommonWallet } from '@getpara/react-common';
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, FarcasterMiniAppManagement } from '@getpara/react-common';
4
+ import { TExternalHooks } from './externalHooks.js';
5
+ import { Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';
6
+ export type SolanaExternalWalletContextType = ExternalWalletContextType & TExternalHooks & FarcasterMiniAppManagement;
18
7
  export declare const SolanaExternalWalletContext: import("react").Context<SolanaExternalWalletContextType>;
19
- export type SolanaExternalWalletProviderConfig = {
20
- onSwitchWallet?: (args: {
21
- address?: string;
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;
8
+ export type SolanaExternalWalletProviderConfig = ExternalWalletProviderConfigBase;
9
+ type SolanaExternalWalletProviderConfigFull = ExternalWalletProviderConfig<CreateWalletFn>;
10
+ export declare function SolanaExternalWalletProvider({ children, wallets: walletFns, onSwitchWallet, para, walletsWithFullAuth, includeWalletVerification, connectionOnly, chain, }: SolanaExternalWalletProviderConfigFull & PropsWithChildren & {
11
+ chain: Chain;
12
+ }): import("react/jsx-runtime").JSX.Element;
31
13
  export {};
@@ -1,5 +1,7 @@
1
1
  "use client";
2
2
  var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
3
5
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -15,6 +17,7 @@ var __spreadValues = (a, b) => {
15
17
  }
16
18
  return a;
17
19
  };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
18
21
  var __async = (__this, __arguments, generator) => {
19
22
  return new Promise((resolve, reject) => {
20
23
  var fulfilled = (value) => {
@@ -36,67 +39,91 @@ var __async = (__this, __arguments, generator) => {
36
39
  });
37
40
  };
38
41
  import { jsx } from "react/jsx-runtime";
39
- import { createContext, useEffect, useMemo, useRef } from "react";
42
+ import { createContext, useEffect, useMemo, useRef, useState } from "react";
40
43
  import { useWallet } from "@solana/wallet-adapter-react";
41
- import { WalletReadyState } from "@solana/wallet-adapter-base";
44
+ import { isIosAndRedirectable, WalletReadyState } from "@solana/wallet-adapter-base";
45
+ import {
46
+ defaultSolanaExternalWallet
47
+ } from "@getpara/react-common";
42
48
  import bs58 from "bs58";
43
- const defaultSolanaExternalWallet = {
44
- wallets: [],
45
- disconnect: () => Promise.resolve(),
46
- signMessage: () => Promise.resolve({}),
47
- signVerificationMessage: () => Promise.resolve({})
48
- };
49
- const SolanaExternalWalletContext = createContext(defaultSolanaExternalWallet);
49
+ import { externalHooks } from "./externalHooks.js";
50
+ import { farcasterWallet } from "../wallets/connectors/index.js";
51
+ const SolanaExternalWalletContext = createContext(__spreadProps(__spreadValues({}, defaultSolanaExternalWallet), {
52
+ farcasterStatus: void 0
53
+ }));
50
54
  function SolanaExternalWalletProvider({
51
55
  children,
52
56
  wallets: walletFns,
53
57
  onSwitchWallet,
54
58
  para,
55
- walletsWithFullAuth
59
+ walletsWithFullAuth,
60
+ includeWalletVerification,
61
+ connectionOnly,
62
+ chain
56
63
  }) {
57
64
  const {
58
65
  wallets: adapters,
59
66
  select: selectWallet,
60
- disconnect: _disconnect,
67
+ disconnect,
68
+ disconnecting,
61
69
  publicKey: solanaAddress,
62
70
  wallet,
63
71
  connecting,
64
- connected,
65
72
  signMessage: solanaSignMessage
66
73
  } = useWallet();
74
+ const disconnectTypeRef = useRef();
75
+ const solanaSignMessageRef = useRef(solanaSignMessage);
76
+ const solanaAddressRef = useRef(solanaAddress);
67
77
  const verificationMessage = useRef();
78
+ const [isFarcasterSetup, setIsFarcasterSetup] = useState(false);
68
79
  const reset = () => __async(this, null, function* () {
69
- yield _disconnect();
80
+ yield disconnect();
70
81
  yield para.logout();
71
82
  });
72
- const login = (_0) => __async(this, [_0], function* ({ address, providerName }) {
83
+ const login = (_0) => __async(this, [_0], function* ({
84
+ address,
85
+ providerId,
86
+ providerName
87
+ }) {
73
88
  var _a, _b;
74
89
  try {
75
90
  return yield para.loginExternalWallet({
76
91
  externalWallet: {
92
+ partnerId: para.partnerId,
77
93
  address,
78
94
  type: "SOLANA",
79
95
  provider: providerName,
80
- withFullParaAuth: walletsWithFullAuth == null ? void 0 : walletsWithFullAuth.includes(
81
- (_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : ""
82
- )
83
- }
96
+ providerId,
97
+ withFullParaAuth: walletsWithFullAuth === "ALL" || (walletsWithFullAuth == null ? void 0 : walletsWithFullAuth.includes((_b = (_a = getWallet(providerName != null ? providerName : "")) == null ? void 0 : _a.id.toUpperCase()) != null ? _b : "")),
98
+ withVerification: includeWalletVerification,
99
+ isConnectionOnly: connectionOnly
100
+ },
101
+ uri: window == null ? void 0 : window.location.origin,
102
+ chainId: chain
84
103
  });
85
- } catch (err) {
104
+ } catch (e) {
86
105
  yield reset();
87
106
  throw "Error logging you in. Please try again.";
88
107
  }
89
108
  });
90
109
  const switchWallet = (address) => __async(this, null, function* () {
91
- var _a;
110
+ var _a, _b, _c, _d;
92
111
  let error;
93
112
  if (!address) {
94
113
  yield para.logout();
95
114
  } else {
96
- try {
97
- yield login({ address, providerName: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name });
98
- } catch (err) {
99
- error = err;
115
+ if (para.isExternalWalletAuth || para.isExternalWalletWithVerification) {
116
+ yield reset();
117
+ } else {
118
+ try {
119
+ yield login({
120
+ address,
121
+ providerId: (_c = getWallet((_b = (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name) != null ? _b : "")) == null ? void 0 : _c.id,
122
+ providerName: (_d = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _d.name
123
+ });
124
+ } catch (err) {
125
+ error = err;
126
+ }
100
127
  }
101
128
  }
102
129
  onSwitchWallet({ address, error });
@@ -104,59 +131,113 @@ function SolanaExternalWalletProvider({
104
131
  useEffect(() => {
105
132
  var _a;
106
133
  const storedExternalWallet = para.externalWallets[(_a = solanaAddress == null ? void 0 : solanaAddress.toString()) != null ? _a : ""];
107
- if (!!solanaAddress && !storedExternalWallet) {
134
+ if (!!solanaAddress && !storedExternalWallet && !disconnectTypeRef.current) {
108
135
  reset();
109
136
  }
110
137
  }, []);
138
+ useEffect(() => {
139
+ solanaSignMessageRef.current = solanaSignMessage;
140
+ }, [solanaSignMessage]);
141
+ useEffect(() => {
142
+ solanaAddressRef.current = solanaAddress;
143
+ }, [solanaAddress]);
111
144
  useEffect(() => {
112
145
  const storedExternalWallet = Object.values(para.externalWallets || {})[0];
113
- if (!connecting && (!wallet || (wallet == null ? void 0 : wallet.adapter.connected)) && (storedExternalWallet == null ? void 0 : storedExternalWallet.type) === "SOLANA" && (storedExternalWallet == null ? void 0 : storedExternalWallet.address) !== (solanaAddress == null ? void 0 : solanaAddress.toString())) {
146
+ 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()) && !disconnectTypeRef.current) {
114
147
  switchWallet(solanaAddress == null ? void 0 : solanaAddress.toString());
115
148
  }
116
149
  }, [solanaAddress, connecting, wallet]);
117
- const signMessage = (message) => __async(this, null, function* () {
118
- var _a;
150
+ const signMessage = (_0) => __async(this, [_0], function* ({ message }) {
151
+ var _a, _b, _c, _d;
119
152
  try {
153
+ let solanaAddressNow = (_a = solanaAddressRef.current) != null ? _a : solanaAddress, solanaSignMessageNow = (_b = solanaSignMessageRef.current) != null ? _b : solanaSignMessage;
154
+ while (!solanaAddressNow || !solanaSignMessageNow) {
155
+ yield new Promise((resolve) => setTimeout(resolve, 100));
156
+ solanaAddressNow = (_c = solanaAddressRef.current) != null ? _c : solanaAddress;
157
+ solanaSignMessageNow = (_d = solanaSignMessageRef.current) != null ? _d : solanaSignMessage;
158
+ }
120
159
  const encodedMessage = new TextEncoder().encode(message);
121
- const signature = yield solanaSignMessage(encodedMessage);
160
+ const signature = yield solanaSignMessageNow(encodedMessage);
161
+ solanaAddressRef.current = void 0;
162
+ solanaSignMessageRef.current = void 0;
122
163
  return {
123
- externalWallet: {
124
- address: solanaAddress.toString(),
125
- type: "SOLANA",
126
- provider: (_a = wallet == null ? void 0 : wallet.adapter) == null ? void 0 : _a.name
127
- },
164
+ address: solanaAddressNow.toString(),
128
165
  signature: bs58.encode(signature)
129
166
  };
130
167
  } catch (e) {
168
+ console.error(e);
131
169
  if (e.message.includes("User rejected the request")) {
132
170
  return { error: "Signature request rejected" };
133
171
  }
172
+ console.error("Solana signature error:", e.message);
134
173
  return { error: "An unknown error occurred" };
135
174
  }
136
175
  });
137
176
  const signVerificationMessage = () => __async(this, null, function* () {
138
- const signature = yield signMessage(verificationMessage.current);
177
+ const signature = yield signMessage({ message: verificationMessage.current });
139
178
  return signature;
140
179
  });
141
- const connect = (adapter) => __async(this, null, function* () {
142
- yield _disconnect();
180
+ const connectBase = (adapter, _switchWallet = false) => __async(this, null, function* () {
143
181
  if (!adapter) {
144
- return { error: "Adapter not found." };
182
+ throw new Error("Adapter not found.");
183
+ }
184
+ const wallet2 = getWallet(adapter.name);
185
+ if (wallet2.getQrUri) {
186
+ const qrUri = yield wallet2.getQrUri();
187
+ window.dispatchEvent(new CustomEvent("PARA_WALLETCONNECT_URI_READY", { detail: qrUri }));
145
188
  }
146
189
  selectWallet(adapter.name);
147
190
  yield new Promise((resolve) => setTimeout(resolve, 100));
148
191
  let address;
149
192
  let error;
150
- let authState;
151
193
  try {
152
194
  yield adapter.connect();
153
- address = adapter.publicKey.toString();
195
+ if (adapter.publicKey) {
196
+ address = adapter.publicKey.toString();
197
+ } else {
198
+ yield new Promise((resolve, reject) => {
199
+ adapter.once("connect", () => __async(this, null, function* () {
200
+ try {
201
+ address = adapter.publicKey.toString();
202
+ resolve();
203
+ } catch (err) {
204
+ reject(err);
205
+ }
206
+ }));
207
+ adapter.once("error", (err) => {
208
+ error = (err == null ? void 0 : err.message) || "An unknown error occurred";
209
+ reject(err);
210
+ });
211
+ adapter.once("disconnect", () => {
212
+ error = "Disconnected before connect event";
213
+ reject(new Error(error));
214
+ });
215
+ });
216
+ }
217
+ return address;
218
+ } catch (e) {
219
+ console.error(e);
220
+ yield adapter.disconnect();
221
+ throw e;
222
+ }
223
+ });
224
+ const connect = (adapter) => __async(this, null, function* () {
225
+ var _a;
226
+ if (isIosAndRedirectable()) {
227
+ return;
228
+ }
229
+ yield disconnect();
230
+ let address;
231
+ let error;
232
+ let authState;
233
+ try {
234
+ address = yield connectBase(adapter, true);
154
235
  if (address) {
155
236
  try {
156
- authState = yield login({ address, providerName: adapter.name });
237
+ authState = yield login({ address, providerId: (_a = getWallet(adapter.name)) == null ? void 0 : _a.id, providerName: adapter.name });
157
238
  verificationMessage.current = authState.stage === "verify" ? authState.signatureVerificationMessage : void 0;
158
239
  } catch (err) {
159
- yield _disconnect();
240
+ yield disconnect();
160
241
  address = void 0;
161
242
  error = err;
162
243
  }
@@ -165,11 +246,13 @@ function SolanaExternalWalletProvider({
165
246
  switch (err.message) {
166
247
  case "User aborted.":
167
248
  case "Approval Denied":
168
- case "You canceled this request.": {
249
+ case "You canceled this request.":
250
+ case "Disconnected before connect event": {
169
251
  error = "Connection request rejected";
170
252
  break;
171
253
  }
172
254
  default: {
255
+ console.error("Solana connection error:", err.message);
173
256
  error = "An unknown error occurred";
174
257
  break;
175
258
  }
@@ -177,34 +260,149 @@ function SolanaExternalWalletProvider({
177
260
  }
178
261
  return { address, error, authState };
179
262
  });
263
+ const requestInfo = (providerId) => __async(this, null, function* () {
264
+ var _a, _b;
265
+ const wallet2 = wallets.find((w) => w.id === providerId);
266
+ const adapter = getAdapter((_a = wallet2.name) != null ? _a : "");
267
+ disconnectTypeRef.current = "ACCOUNT_LINKING";
268
+ try {
269
+ const address = yield connectBase(adapter);
270
+ const externalWallet = {
271
+ partnerId: para.partnerId,
272
+ address,
273
+ type: "SOLANA",
274
+ providerId: wallet2.id,
275
+ provider: wallet2.name
276
+ };
277
+ return externalWallet;
278
+ } catch (e) {
279
+ console.error("Error linking account:", e);
280
+ throw new Error((_b = e == null ? void 0 : e.message) != null ? _b : e);
281
+ }
282
+ });
283
+ const disconnectBase = (_0, ..._1) => __async(this, [_0, ..._1], function* (providerId, { disconnectType } = {}) {
284
+ var _a;
285
+ const wallet2 = wallets.find((w) => w.id === providerId);
286
+ if (!wallet2) {
287
+ return;
288
+ }
289
+ const adapter = getAdapter((_a = wallet2.name) != null ? _a : "");
290
+ if (!(adapter == null ? void 0 : adapter.connected)) {
291
+ return;
292
+ }
293
+ if (disconnectType) {
294
+ disconnectTypeRef.current = disconnectType;
295
+ }
296
+ try {
297
+ yield adapter.disconnect();
298
+ } catch (e) {
299
+ console.error("Error disconnecting Solana wallet:", e);
300
+ } finally {
301
+ disconnectTypeRef.current = void 0;
302
+ }
303
+ });
180
304
  const getAdapter = (name) => {
181
305
  var _a;
182
306
  return (_a = adapters.find((a) => a.adapter.name === "Mobile Wallet Adapter" ? a : a.adapter.name === name ? a : false)) == null ? void 0 : _a.adapter;
183
307
  };
184
308
  const getWallet = (name) => wallets.find((w) => w.name === name);
185
- const wallets = walletFns.map((walletFn) => {
309
+ const createWallet = (walletFn) => {
186
310
  const metaData = walletFn();
187
311
  const adapter = getAdapter(metaData.name);
188
- return __spreadValues({
312
+ return __spreadProps(__spreadValues({
189
313
  connect: () => connect(adapter),
190
314
  connectMobile: () => connect(adapter),
191
- getQrUri: () => "",
192
315
  type: "SOLANA",
193
316
  installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable)
194
- }, metaData);
195
- });
196
- const disconnect = () => __async(this, null, function* () {
197
- yield _disconnect();
198
- if (connected) {
199
- typeof window !== void 0 && (window == null ? void 0 : window.location.reload());
317
+ }, metaData), {
318
+ // Using name here since that's the only common id across the networks
319
+ id: metaData.name
320
+ });
321
+ };
322
+ const [wallets, setWallets] = useState(() => walletFns.map(createWallet));
323
+ const farcasterStatus = useMemo(() => {
324
+ if (!isFarcasterSetup) {
325
+ return void 0;
200
326
  }
327
+ const farcasterAdapter = getAdapter("Farcaster");
328
+ if (!farcasterAdapter) {
329
+ return {
330
+ isPresent: false
331
+ };
332
+ }
333
+ return farcasterAdapter.connected && farcasterAdapter.publicKey ? {
334
+ isPresent: true,
335
+ isConnected: true,
336
+ address: farcasterAdapter.publicKey.toString()
337
+ } : {
338
+ isPresent: true,
339
+ isConnected: false
340
+ };
341
+ }, [isFarcasterSetup, adapters]);
342
+ useEffect(() => {
343
+ const detectFarcaster = () => __async(this, null, function* () {
344
+ if (para.isFarcasterMiniApp) {
345
+ try {
346
+ yield import("@farcaster/mini-app-solana");
347
+ } catch (e) {
348
+ }
349
+ }
350
+ });
351
+ detectFarcaster();
352
+ }, [para.isFarcasterMiniApp]);
353
+ useEffect(() => {
354
+ const setupFarcaster = () => __async(this, null, function* () {
355
+ const adapter = getAdapter("Farcaster");
356
+ if (para.isFarcasterMiniApp && !wallets.some((w) => w.internalId === "FARCASTER") && !!adapter) {
357
+ const wallet2 = createWallet(farcasterWallet);
358
+ setWallets((prev) => [...prev, wallet2]);
359
+ if (para.supportedWalletTypes.some(({ type }) => type === "SOLANA")) {
360
+ yield connectBase(adapter, true);
361
+ }
362
+ setIsFarcasterSetup(true);
363
+ }
364
+ });
365
+ setupFarcaster();
366
+ }, [para.isFarcasterMiniApp, wallets, adapters]);
367
+ const injectedWallets = adapters.filter((wallet2) => wallet2.adapter.name !== "Mobile Wallet Adapter" && !wallets.some((w) => w.name === wallet2.adapter.name)).map((wallet2) => {
368
+ const adapter = wallet2.adapter;
369
+ return {
370
+ connect: () => connect(adapter),
371
+ connectMobile: () => connect(adapter),
372
+ type: "SOLANA",
373
+ installed: adapter && ((adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Installed || (adapter == null ? void 0 : adapter.readyState) === WalletReadyState.Loadable),
374
+ name: adapter.name,
375
+ iconUrl: adapter.icon,
376
+ // Using name here since that's the only common id across the networks
377
+ id: adapter.name,
378
+ internalId: adapter.name
379
+ };
201
380
  });
381
+ const walletsWithInjected = [...wallets, ...injectedWallets];
202
382
  return /* @__PURE__ */ jsx(
203
383
  SolanaExternalWalletContext.Provider,
204
384
  {
205
385
  value: useMemo(
206
- () => ({ wallets, disconnect, signMessage, signVerificationMessage }),
207
- [wallets, disconnect, signMessage, signVerificationMessage]
386
+ () => __spreadValues({
387
+ wallets: walletsWithInjected,
388
+ disconnect,
389
+ disconnectStatus: disconnecting ? "pending" : "idle",
390
+ signMessage,
391
+ signVerificationMessage,
392
+ requestInfo,
393
+ disconnectBase,
394
+ farcasterStatus
395
+ }, externalHooks),
396
+ [
397
+ walletsWithInjected,
398
+ disconnect,
399
+ disconnecting,
400
+ signMessage,
401
+ signVerificationMessage,
402
+ requestInfo,
403
+ farcasterStatus,
404
+ disconnectBase
405
+ ]
208
406
  ),
209
407
  children
210
408
  }
@@ -0,0 +1,7 @@
1
+ import { useWallet } from '@solana/wallet-adapter-react';
2
+ export type TExternalHooks = {
3
+ useWallet: typeof useWallet;
4
+ };
5
+ export declare const externalHooks: {
6
+ useWallet: typeof useWallet;
7
+ };
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ import { useWallet } from "@solana/wallet-adapter-react";
3
+ const externalHooks = { useWallet };
4
+ export {
5
+ externalHooks
6
+ };
@@ -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[];
@@ -1,13 +1,43 @@
1
1
  "use client";
2
+ var __async = (__this, __arguments, generator) => {
3
+ return new Promise((resolve, reject) => {
4
+ var fulfilled = (value) => {
5
+ try {
6
+ step(generator.next(value));
7
+ } catch (e) {
8
+ reject(e);
9
+ }
10
+ };
11
+ var rejected = (value) => {
12
+ try {
13
+ step(generator.throw(value));
14
+ } catch (e) {
15
+ reject(e);
16
+ }
17
+ };
18
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
19
+ step((generator = generator.apply(__this, __arguments)).next());
20
+ });
21
+ };
22
+ import { isIosAndRedirectable } from "@solana/wallet-adapter-base";
2
23
  import { icon } from "./backpackIcon.js";
3
24
  const backpackWallet = () => {
4
25
  return {
5
26
  id: "backpack",
27
+ internalId: "BACKPACK",
6
28
  name: "Backpack",
7
29
  iconUrl: icon,
8
30
  isExtension: true,
9
31
  isMobile: true,
10
- getUri: () => "",
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
+ }),
11
41
  downloadUrl: "https://backpack.app/download"
12
42
  };
13
43
  };
@@ -0,0 +1,2 @@
1
+ import { Wallet } from '../../../types/Wallet.js';
2
+ export declare const farcasterWallet: () => Wallet;
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { icon } from "./farcasterIcon.js";
3
+ const farcasterWallet = () => {
4
+ return {
5
+ id: "farcaster",
6
+ internalId: "FARCASTER",
7
+ name: "Farcaster",
8
+ iconUrl: icon,
9
+ isExtension: true,
10
+ hasIosSafariExtension: false,
11
+ downloadUrl: "https://farcaster.xyz"
12
+ };
13
+ };
14
+ export {
15
+ farcasterWallet
16
+ };
@@ -0,0 +1 @@
1
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==";
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzEzNDFfMzQiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSI0IiB5PSIwIiB3aWR0aD0iMTciIGhlaWdodD0iMjQiPgo8cGF0aCBkPSJNMjAuNSAwSDRWMjRIMjAuNVYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzEzNDFfMzQpIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy44MTMgMS44ODcwOEMxNC42ODUzIDEuODg3MDggMTUuNTAzNSAyLjAwNDAyIDE2LjI2MTIgMi4yMjA4OUMxNS41MTk1IDAuNDkyMjU0IDEzLjk3OTUgMCAxMi4yNjU2IDBDMTAuNTQ4MyAwIDkuMDA1NjUgMC40OTQxODggOC4yNjU2MiAyLjIzMTA3QzkuMDE3NjUgMi4wMDY1NyA5LjgzMjM2IDEuODg3MDggMTAuNzAxNyAxLjg4NzA4SDEzLjgxM1pNMTAuNTAyMiAzLjYyMjU2QzYuMzYwMDMgMy42MjI1NiA0IDYuODgxMTQgNCAxMC45MDA4VjE1LjAzQzQgMTUuNDMyIDQuMzM1NzkgMTUuNzUgNC43NSAxNS43NUgxOS43NUMyMC4xNjQyIDE1Ljc1IDIwLjUgMTUuNDMyIDIwLjUgMTUuMDNWMTAuOTAwOEMyMC41IDYuODgxMTQgMTcuNzU1NiAzLjYyMjU2IDEzLjYxMzUgMy42MjI1NkgxMC41MDIyWk0xMi4yNDQxIDEwLjkzNjVDMTMuNjkzOSAxMC45MzY1IDE0Ljg2OTIgOS43NjEyMyAxNC44NjkyIDguMzExNTNDMTQuODY5MiA2Ljg2MTc4IDEzLjY5MzkgNS42ODY1MyAxMi4yNDQxIDUuNjg2NTNDMTAuNzk0NCA1LjY4NjUzIDkuNjE5MTQgNi44NjE3OCA5LjYxOTE0IDguMzExNTNDOS42MTkxNCA5Ljc2MTIzIDEwLjc5NDQgMTAuOTM2NSAxMi4yNDQxIDEwLjkzNjVaTTQgMTguMTc3MUM0IDE3Ljc3NTEgNC4zMzU3OSAxNy40NDkyIDQuNzUgMTcuNDQ5MkgxOS43NUMyMC4xNjQyIDE3LjQ0OTIgMjAuNSAxNy43NzUxIDIwLjUgMTguMTc3MVYyMi41NDRDMjAuNSAyMy4zNDc5IDE5LjgyODQgMjMuOTk5NyAxOSAyMy45OTk3SDUuNUM0LjY3MTU3IDIzLjk5OTcgNCAyMy4zNDc5IDQgMjIuNTQ0VjE4LjE3NzFaIiBmaWxsPSIjRTMzRTNGIi8+CjwvZz4KPC9zdmc+Cg==";
3
+ export {
4
+ icon
5
+ };
@@ -1,13 +1,15 @@
1
1
  "use client";
2
2
  import { icon } from "./glowIcon.js";
3
+ import { isIosAndRedirectable } from "@solana/wallet-adapter-base";
3
4
  const glowWallet = () => {
4
5
  return {
5
6
  id: "glow",
7
+ internalId: "GLOW",
6
8
  name: "Glow",
7
9
  iconUrl: icon,
8
10
  isExtension: true,
9
11
  isMobile: true,
10
- getUri: () => "",
12
+ hasIosSafariExtension: isIosAndRedirectable(),
11
13
  downloadUrl: "https://glow.app"
12
14
  };
13
15
  };
@@ -1,5 +1,8 @@
1
+ import { farcasterWallet } from './farcaster/farcaster.js';
1
2
  import { phantomWallet } from './phantom/phantom.js';
2
3
  import { glowWallet } from './glow/glow.js';
3
4
  import { backpackWallet } from './backpack/backpack.js';
4
- export { phantomWallet, glowWallet, backpackWallet };
5
+ import { solflareWallet } from './solflare/solflare.js';
6
+ import { metaMaskWallet } from './metaMask/metaMask.js';
7
+ export { farcasterWallet, phantomWallet, glowWallet, backpackWallet, solflareWallet, metaMaskWallet };
5
8
  export declare const allWallets: (() => import("../../types/Wallet.js").Wallet)[];
@@ -1,11 +1,17 @@
1
1
  "use client";
2
+ import { farcasterWallet } from "./farcaster/farcaster.js";
2
3
  import { phantomWallet } from "./phantom/phantom.js";
3
4
  import { glowWallet } from "./glow/glow.js";
4
5
  import { backpackWallet } from "./backpack/backpack.js";
5
- const allWallets = [phantomWallet, glowWallet, backpackWallet];
6
+ import { solflareWallet } from "./solflare/solflare.js";
7
+ import { metaMaskWallet } from "./metaMask/metaMask.js";
8
+ const allWallets = [phantomWallet, glowWallet, backpackWallet, solflareWallet, metaMaskWallet];
6
9
  export {
7
10
  allWallets,
8
11
  backpackWallet,
12
+ farcasterWallet,
9
13
  glowWallet,
10
- phantomWallet
14
+ metaMaskWallet,
15
+ phantomWallet,
16
+ solflareWallet
11
17
  };
@@ -0,0 +1,2 @@
1
+ import { Wallet } from '../../../types/Wallet.js';
2
+ export declare const metaMaskWallet: () => Wallet;
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { icon } from "./metaMaskIcon.js";
3
+ const metaMaskWallet = () => {
4
+ return {
5
+ id: "metaMask",
6
+ internalId: "METAMASK",
7
+ name: "MetaMask",
8
+ iconUrl: icon,
9
+ isExtension: true,
10
+ isMobile: true,
11
+ hasIosSafariExtension: false,
12
+ // Metamask deep linking doesn't seem to work as expected currently.
13
+ // getQrUri: async () => {
14
+ // if (typeof window !== 'undefined' && isIosAndRedirectable()) {
15
+ // const url = encodeURIComponent(window.location.href);
16
+ // return `https://link.metamask.io/dapp/${url}`;
17
+ // }
18
+ // return '';
19
+ // },
20
+ downloadUrl: "https://metamask.io/download/"
21
+ };
22
+ };
23
+ export {
24
+ metaMaskWallet
25
+ };
@@ -0,0 +1 @@
1
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5MDMxXzE3MTgwOSkiPgo8cGF0aCBkPSJNMjIuNDI4MSAyMi4zNDUzTDE3LjI1ODUgMjAuODA2MUwxMy4zNiAyMy4xMzY2TDEwLjYzOTggMjMuMTM1NEw2LjczODk5IDIwLjgwNjFMMS41NzE3IDIyLjM0NTNMMCAxNy4wMzkxTDEuNTcxODcgMTEuMTVMMCA2LjE3MTAyTDEuNTcxODcgMEw5LjY0NjA4IDQuODIzOTdIMTQuMzUzOEwyMi40MjgxIDBMMjQgNi4xNzEwMkwyMi40MjgxIDExLjE1TDI0IDE3LjAzOTFMMjIuNDI4MSAyMi4zNDUzWiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNMS41NzI4OCAwTDkuNjQ3MjUgNC44MjczNUw5LjMyNjI1IDguMTQwM0wxLjU3Mjg4IDBaTTYuNzQwMzMgMTcuMDQxM0wxMC4yOTMgMTkuNzQ3NUw2Ljc0MDMzIDIwLjgwNTlWMTcuMDQxM1pNMTAuMDA5IDEyLjU2N0w5LjMyNjI1IDguMTQyNjdMNC45NTU2NCAxMS4xNTE0TDQuOTUzMjcgMTEuMTUwMlYxMS4xNTI0TDQuOTY2NzkgMTQuMjQ5M0w2LjczOTE0IDEyLjU2NzJMMTAuMDA5IDEyLjU2N1pNMjIuNDI4MSAwTDE0LjM1MzcgNC44MjczNUwxNC42NzM3IDguMTQwM0wyMi40MjgxIDBaTTE3LjI2MDggMTcuMDQxM0wxMy43MDggMTkuNzQ3NUwxNy4yNjA4IDIwLjgwNTlWMTcuMDQxM1pNMTkuMDQ2NyAxMS4xNTIyVjExLjE1TDE5LjA0NTcgMTEuMTUxMkwxNC42NzQ5IDguMTQyNjdMMTMuOTkyMiAxMi41NjdIMTcuMjYwN0wxOS4wMzQyIDE0LjI0ODlMMTkuMDQ2NyAxMS4xNTIyWiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNNi43MzkxNiAyMC44MDU5TDEuNTcxODcgMjIuMzQ1MUwwIDE3LjA0MTNINi43MzkxNlYyMC44MDU5Wk0xMC4wMDc4IDEyLjU2NThMMTAuOTk0OCAxOC45NjIyTDkuNjI2ODEgMTUuNDA1N0w0Ljk2NDYxIDE0LjI0ODlMNi43Mzc5NyAxMi41NjZMMTAuMDA3OCAxMi41NjU4Wk0xNy4yNjA3IDIwLjgwNTlMMjIuNDI4MSAyMi4zNDUxTDI0IDE3LjA0MTFIMTcuMjYwN0MxNy4yNjA3IDE3LjA0MTMgMTcuMjYwNyAyMC44MDU5IDE3LjI2MDcgMjAuODA1OVpNMTMuOTkyMiAxMi41NjU4TDEzLjAwNTIgMTguOTYyMkwxNC4zNzMgMTUuNDA1N0wxOS4wMzU2IDE0LjI0ODlMMTcuMjYxIDEyLjU2NkwxMy45OTIyIDEyLjU2NThaIiBmaWxsPSIjRTM0ODA3Ii8+CjxwYXRoIGQ9Ik0wIDE3LjAzOTFMMS41NzE4NyAxMS4xNUg0Ljk1MjFMNC45NjQ0NCAxNC4yNDc5TDkuNjI3MTUgMTUuNDA0N0wxMC45OTUgMTguOTYxTDEwLjI5MTggMTkuNzQ0Mkw2LjczOTE2IDE3LjAzNzlIMFYxNy4wMzkxWk0yNCAxNy4wMzkxTDIyLjQyODEgMTEuMTVIMTkuMDQ3N0wxOS4wMzU0IDE0LjI0NzlMMTQuMzczIDE1LjQwNDdMMTMuMDA1IDE4Ljk2MUwxMy43MDggMTkuNzQ0MkwxNy4yNjA4IDE3LjAzNzlIMjRWMTcuMDM5MVpNMTQuMzUzOCA0LjgyMzk3SDkuNjQ2MDhMOS4zMjY0MyA4LjEzNjkyTDEwLjk5NTIgMTguOTU3NUgxMy4wMDUyTDE0LjY3NDkgOC4xMzY5MkwxNC4zNTM4IDQuODIzOTdaIiBmaWxsPSIjRkY4RDVEIi8+CjxwYXRoIGQ9Ik0xLjU3MTg3IDBMMCA2LjE3MTAyTDEuNTcxODcgMTEuMTVINC45NTIxTDkuMzI1MDggOC4xNDA0N0wxLjU3MTg3IDBaTTkuMDMwOTUgMTMuODUwNUg3LjQ5OTY1TDYuNjY1OTYgMTQuNjY3OEw5LjYyODE2IDE1LjQwMjFMOS4wMzA5NSAxMy44NDkzVjEzLjg1MDVaTTIyLjQyODEgMEwyNCA2LjE3MTAyTDIyLjQyODEgMTEuMTVIMTkuMDQ3N0wxNC42NzQ5IDguMTQwNDdMMjIuNDI4MSAwWk0xNC45NzEyIDEzLjg1MDVIMTYuNTA0N0wxNy4zMzg0IDE0LjY2ODhMMTQuMzcyOSAxNS40MDQ3TDE0Ljk3MTIgMTMuODQ5M1YxMy44NTA1Wk0xMy4zNTg4IDIxLjAyNTZMMTMuNzA4MiAxOS43NDY1TDEzLjAwNSAxOC45NjM0SDEwLjk5MzVMMTAuMjkwNCAxOS43NDY1TDEwLjYzOTcgMjEuMDI1NiIgZmlsbD0iIzY2MTgwMCIvPgo8cGF0aCBkPSJNMTMuMzU4OSAyMS4wMjU1VjIzLjEzNzZIMTAuNjQwMVYyMS4wMjU1SDEzLjM1ODlaIiBmaWxsPSIjQzBDNENEIi8+CjxwYXRoIGQ9Ik02Ljc0MDM2IDIwLjgwMzdMMTAuNjQyMiAyMy4xMzY0VjIxLjAyNDNMMTAuMjkyOCAxOS43NDUzTDYuNzQwMzYgMjAuODAzN1pNMTcuMjYwOSAyMC44MDM3TDEzLjM1ODggMjMuMTM2NFYyMS4wMjQzTDEzLjcwODIgMTkuNzQ1M0wxNy4yNjA5IDIwLjgwMzdaIiBmaWxsPSIjRTdFQkY2Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTkwMzFfMTcxODA5Ij4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=";
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ const icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5MDMxXzE3MTgwOSkiPgo8cGF0aCBkPSJNMjIuNDI4MSAyMi4zNDUzTDE3LjI1ODUgMjAuODA2MUwxMy4zNiAyMy4xMzY2TDEwLjYzOTggMjMuMTM1NEw2LjczODk5IDIwLjgwNjFMMS41NzE3IDIyLjM0NTNMMCAxNy4wMzkxTDEuNTcxODcgMTEuMTVMMCA2LjE3MTAyTDEuNTcxODcgMEw5LjY0NjA4IDQuODIzOTdIMTQuMzUzOEwyMi40MjgxIDBMMjQgNi4xNzEwMkwyMi40MjgxIDExLjE1TDI0IDE3LjAzOTFMMjIuNDI4MSAyMi4zNDUzWiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNMS41NzI4OCAwTDkuNjQ3MjUgNC44MjczNUw5LjMyNjI1IDguMTQwM0wxLjU3Mjg4IDBaTTYuNzQwMzMgMTcuMDQxM0wxMC4yOTMgMTkuNzQ3NUw2Ljc0MDMzIDIwLjgwNTlWMTcuMDQxM1pNMTAuMDA5IDEyLjU2N0w5LjMyNjI1IDguMTQyNjdMNC45NTU2NCAxMS4xNTE0TDQuOTUzMjcgMTEuMTUwMlYxMS4xNTI0TDQuOTY2NzkgMTQuMjQ5M0w2LjczOTE0IDEyLjU2NzJMMTAuMDA5IDEyLjU2N1pNMjIuNDI4MSAwTDE0LjM1MzcgNC44MjczNUwxNC42NzM3IDguMTQwM0wyMi40MjgxIDBaTTE3LjI2MDggMTcuMDQxM0wxMy43MDggMTkuNzQ3NUwxNy4yNjA4IDIwLjgwNTlWMTcuMDQxM1pNMTkuMDQ2NyAxMS4xNTIyVjExLjE1TDE5LjA0NTcgMTEuMTUxMkwxNC42NzQ5IDguMTQyNjdMMTMuOTkyMiAxMi41NjdIMTcuMjYwN0wxOS4wMzQyIDE0LjI0ODlMMTkuMDQ2NyAxMS4xNTIyWiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNNi43MzkxNiAyMC44MDU5TDEuNTcxODcgMjIuMzQ1MUwwIDE3LjA0MTNINi43MzkxNlYyMC44MDU5Wk0xMC4wMDc4IDEyLjU2NThMMTAuOTk0OCAxOC45NjIyTDkuNjI2ODEgMTUuNDA1N0w0Ljk2NDYxIDE0LjI0ODlMNi43Mzc5NyAxMi41NjZMMTAuMDA3OCAxMi41NjU4Wk0xNy4yNjA3IDIwLjgwNTlMMjIuNDI4MSAyMi4zNDUxTDI0IDE3LjA0MTFIMTcuMjYwN0MxNy4yNjA3IDE3LjA0MTMgMTcuMjYwNyAyMC44MDU5IDE3LjI2MDcgMjAuODA1OVpNMTMuOTkyMiAxMi41NjU4TDEzLjAwNTIgMTguOTYyMkwxNC4zNzMgMTUuNDA1N0wxOS4wMzU2IDE0LjI0ODlMMTcuMjYxIDEyLjU2NkwxMy45OTIyIDEyLjU2NThaIiBmaWxsPSIjRTM0ODA3Ii8+CjxwYXRoIGQ9Ik0wIDE3LjAzOTFMMS41NzE4NyAxMS4xNUg0Ljk1MjFMNC45NjQ0NCAxNC4yNDc5TDkuNjI3MTUgMTUuNDA0N0wxMC45OTUgMTguOTYxTDEwLjI5MTggMTkuNzQ0Mkw2LjczOTE2IDE3LjAzNzlIMFYxNy4wMzkxWk0yNCAxNy4wMzkxTDIyLjQyODEgMTEuMTVIMTkuMDQ3N0wxOS4wMzU0IDE0LjI0NzlMMTQuMzczIDE1LjQwNDdMMTMuMDA1IDE4Ljk2MUwxMy43MDggMTkuNzQ0MkwxNy4yNjA4IDE3LjAzNzlIMjRWMTcuMDM5MVpNMTQuMzUzOCA0LjgyMzk3SDkuNjQ2MDhMOS4zMjY0MyA4LjEzNjkyTDEwLjk5NTIgMTguOTU3NUgxMy4wMDUyTDE0LjY3NDkgOC4xMzY5MkwxNC4zNTM4IDQuODIzOTdaIiBmaWxsPSIjRkY4RDVEIi8+CjxwYXRoIGQ9Ik0xLjU3MTg3IDBMMCA2LjE3MTAyTDEuNTcxODcgMTEuMTVINC45NTIxTDkuMzI1MDggOC4xNDA0N0wxLjU3MTg3IDBaTTkuMDMwOTUgMTMuODUwNUg3LjQ5OTY1TDYuNjY1OTYgMTQuNjY3OEw5LjYyODE2IDE1LjQwMjFMOS4wMzA5NSAxMy44NDkzVjEzLjg1MDVaTTIyLjQyODEgMEwyNCA2LjE3MTAyTDIyLjQyODEgMTEuMTVIMTkuMDQ3N0wxNC42NzQ5IDguMTQwNDdMMjIuNDI4MSAwWk0xNC45NzEyIDEzLjg1MDVIMTYuNTA0N0wxNy4zMzg0IDE0LjY2ODhMMTQuMzcyOSAxNS40MDQ3TDE0Ljk3MTIgMTMuODQ5M1YxMy44NTA1Wk0xMy4zNTg4IDIxLjAyNTZMMTMuNzA4MiAxOS43NDY1TDEzLjAwNSAxOC45NjM0SDEwLjk5MzVMMTAuMjkwNCAxOS43NDY1TDEwLjYzOTcgMjEuMDI1NiIgZmlsbD0iIzY2MTgwMCIvPgo8cGF0aCBkPSJNMTMuMzU4OSAyMS4wMjU1VjIzLjEzNzZIMTAuNjQwMVYyMS4wMjU1SDEzLjM1ODlaIiBmaWxsPSIjQzBDNENEIi8+CjxwYXRoIGQ9Ik02Ljc0MDM2IDIwLjgwMzdMMTAuNjQyMiAyMy4xMzY0VjIxLjAyNDNMMTAuMjkyOCAxOS43NDUzTDYuNzQwMzYgMjAuODAzN1pNMTcuMjYwOSAyMC44MDM3TDEzLjM1ODggMjMuMTM2NFYyMS4wMjQzTDEzLjcwODIgMTkuNzQ1M0wxNy4yNjA5IDIwLjgwMzdaIiBmaWxsPSIjRTdFQkY2Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTkwMzFfMTcxODA5Ij4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=";
3
+ export {
4
+ icon
5
+ };
@@ -1,13 +1,43 @@
1
1
  "use client";
2
+ var __async = (__this, __arguments, generator) => {
3
+ return new Promise((resolve, reject) => {
4
+ var fulfilled = (value) => {
5
+ try {
6
+ step(generator.next(value));
7
+ } catch (e) {
8
+ reject(e);
9
+ }
10
+ };
11
+ var rejected = (value) => {
12
+ try {
13
+ step(generator.throw(value));
14
+ } catch (e) {
15
+ reject(e);
16
+ }
17
+ };
18
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
19
+ step((generator = generator.apply(__this, __arguments)).next());
20
+ });
21
+ };
22
+ import { isIosAndRedirectable } from "@solana/wallet-adapter-base";
2
23
  import { icon } from "./phantomIcon.js";
3
24
  const phantomWallet = () => {
4
25
  return {
5
26
  id: "phantom",
27
+ internalId: "PHANTOM",
6
28
  name: "Phantom",
7
29
  iconUrl: icon,
8
30
  isExtension: true,
9
31
  isMobile: true,
10
- getUri: () => "",
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
+ }),
11
41
  downloadUrl: "https://phantom.app/download"
12
42
  };
13
43
  };
@@ -0,0 +1,2 @@
1
+ import { Wallet } from '../../../types/Wallet.js';
2
+ export declare const solflareWallet: () => Wallet;
@@ -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,49 @@
1
1
  {
2
2
  "name": "@getpara/solana-wallet-connectors",
3
- "version": "2.0.0-alpha.7",
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-alpha.71",
16
4
  "dependencies": {
17
- "@getpara/web-sdk": "2.0.0-alpha.7",
18
- "@solana-mobile/wallet-adapter-mobile": "2.1.3",
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-alpha.71",
6
+ "@getpara/web-sdk": "2.0.0-alpha.71",
22
7
  "bs58": "6.0.0"
23
8
  },
24
9
  "devDependencies": {
25
- "@getpara/react-common": "2.0.0-alpha.7",
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.4.3"
16
+ "typescript": "^5.8.3"
29
17
  },
30
- "peerDependencies": {
31
- "react": ">=18",
32
- "react-dom": ">=18"
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": "0a6b297b70c7f9b7b93381944e3f5314252ad6a5"
26
+ "gitHead": "30e5bad6a141f1b56959432f11aaf1536b84dece",
27
+ "main": "dist/index.js",
28
+ "peerDependencies": {
29
+ "@farcaster/mini-app-solana": "^1.0.0",
30
+ "@solana-mobile/wallet-adapter-mobile": "2.x",
31
+ "@solana/wallet-adapter-base": "0.x",
32
+ "@solana/wallet-adapter-react": "0.x",
33
+ "@solana/wallet-adapter-walletconnect": "0.x",
34
+ "react": ">=18",
35
+ "react-dom": ">=18"
36
+ },
37
+ "peerDependenciesMeta": {
38
+ "@farcaster/mini-app-solana": {
39
+ "optional": true
40
+ }
41
+ },
42
+ "scripts": {
43
+ "build": "rm -rf dist && yarn typegen && node ./scripts/build.mjs",
44
+ "test": "vitest run --coverage",
45
+ "typegen": "tsc --emitDeclarationOnly"
46
+ },
47
+ "type": "module",
48
+ "types": "dist/index.d.ts"
39
49
  }