@phantom/react-sdk 1.0.0 → 1.0.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/README.md CHANGED
@@ -792,7 +792,8 @@ function SolanaOperations() {
792
792
  const connection = new Connection("https://api.mainnet-beta.solana.com");
793
793
  const { blockhash } = await connection.getLatestBlockhash();
794
794
 
795
- const fromAddress = await solana.getPublicKey();
795
+ const fromAddress = solana.publicKey;
796
+ if (!fromAddress) throw new Error("Not connected");
796
797
  const transferInstruction = SystemProgram.transfer({
797
798
  fromPubkey: new PublicKey(fromAddress),
798
799
  toPubkey: new PublicKey(toAddress),
@@ -833,7 +834,7 @@ function SolanaOperations() {
833
834
  - `signTransaction(transaction)` - Sign without sending
834
835
  - `signAndSendTransaction(transaction)` - Sign and send
835
836
  - `switchNetwork(network)` - Switch between mainnet/devnet
836
- - `getPublicKey()` - Get current public key
837
+ - `publicKey` - Current public key (or `null` if disconnected)
837
838
  - `isConnected` - Connection status
838
839
  - `isAvailable` - Provider availability (see note below)
839
840
 
@@ -1163,7 +1164,8 @@ function SolanaExample() {
1163
1164
  const { blockhash } = await connection.getLatestBlockhash();
1164
1165
 
1165
1166
  // Create transfer instruction
1166
- const fromAddress = await solana.getPublicKey();
1167
+ const fromAddress = solana.publicKey;
1168
+ if (!fromAddress) throw new Error("Not connected");
1167
1169
  const transferInstruction = SystemProgram.transfer({
1168
1170
  fromPubkey: new PublicKey(fromAddress),
1169
1171
  toPubkey: new PublicKey(toAddress),
@@ -1209,7 +1211,8 @@ function SolanaKitExample() {
1209
1211
  const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
1210
1212
  const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
1211
1213
 
1212
- const userPublicKey = await solana.getPublicKey();
1214
+ const userPublicKey = solana.publicKey;
1215
+ if (!userPublicKey) throw new Error("Not connected");
1213
1216
  const transactionMessage = pipe(
1214
1217
  createTransactionMessage({ version: 0 }),
1215
1218
  tx => setTransactionMessageFeePayer(address(userPublicKey), tx),
package/dist/index.js CHANGED
@@ -210,20 +210,14 @@ function useDiscoveredWallets() {
210
210
  try {
211
211
  setIsLoading(true);
212
212
  setError(null);
213
- const initialWallets = sdk.getDiscoveredWallets();
214
- if (initialWallets.length > 0) {
215
- setWallets(initialWallets);
216
- setIsLoading(false);
217
- } else {
218
- await sdk.discoverWallets();
219
- const discoveredWallets = sdk.getDiscoveredWallets();
220
- setWallets(discoveredWallets);
221
- setIsLoading(false);
222
- }
213
+ await sdk.discoverWallets();
214
+ const discoveredWallets = sdk.getDiscoveredWallets();
215
+ setWallets(discoveredWallets);
223
216
  } catch (err) {
224
217
  const error2 = err instanceof Error ? err : new Error("Failed to fetch discovered wallets");
225
218
  setError(error2);
226
219
  setWallets([]);
220
+ } finally {
227
221
  setIsLoading(false);
228
222
  }
229
223
  }, [sdk]);
@@ -318,7 +312,8 @@ function ConnectModalContent({
318
312
  const isConnectingState = baseConnect.isConnecting || isConnecting;
319
313
  const errorState = baseConnect.error ? baseConnect.error.message : error;
320
314
  const showDivider = !(allowedProviders.length === 1 && allowedProviders.includes("injected"));
321
- const shouldShowOtherWalletsButton = discoveredWallets.length > 2;
315
+ const isInjectedOnly = allowedProviders.length === 1 && allowedProviders.includes("injected");
316
+ const shouldShowOtherWalletsButton = !isInjectedOnly && discoveredWallets.length > 2;
322
317
  const walletsToShowInline = shouldShowOtherWalletsButton ? [] : discoveredWallets;
323
318
  const connectWithAuthProvider = (0, import_react5.useCallback)(
324
319
  async (provider, walletId) => {
@@ -587,7 +582,7 @@ function ConnectModalContent({
587
582
  ] })
588
583
  }
589
584
  ),
590
- allowedProviders.includes("injected") && (isExtensionInstalled.isInstalled || discoveredWallets.length > 0) && (!isMobile || isExtensionInstalled.isInstalled) && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
585
+ allowedProviders.includes("injected") && (isExtensionInstalled.isInstalled || discoveredWallets.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
591
586
  showDivider && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: dividerStyle, children: [
592
587
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: dividerLineStyle }),
593
588
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: dividerTextStyle, children: "OR" }),
@@ -839,9 +834,10 @@ function PhantomProvider({ children, config, debugConfig, theme, appIcon, appNam
839
834
  try {
840
835
  setIsConnected(true);
841
836
  setIsConnecting(false);
842
- setUser(data);
843
837
  const addrs = await sdk.getAddresses();
844
838
  setAddresses(addrs);
839
+ const normalizedUser = data ?? { addresses: addrs };
840
+ setUser(normalizedUser);
845
841
  } catch (err) {
846
842
  console.error("Error connecting:", err);
847
843
  try {
@@ -854,11 +850,14 @@ function PhantomProvider({ children, config, debugConfig, theme, appIcon, appNam
854
850
  const handleConnectError = (errorData) => {
855
851
  setIsConnecting(false);
856
852
  setIsConnected(false);
857
- const isAutoConnectNoSession = errorData.source === "auto-connect" && (errorData.error === "No valid session found" || errorData.error === "No trusted connections available");
853
+ const isAutoConnectNoSession = errorData?.source === "auto-connect" && (errorData?.error === "No valid session found" || errorData?.error === "No trusted connections available");
858
854
  if (isAutoConnectNoSession) {
859
855
  setErrors((prev) => ({ ...prev, connect: void 0 }));
860
856
  } else {
861
- setErrors((prev) => ({ ...prev, connect: new Error(errorData.error || "Connection failed") }));
857
+ setErrors((prev) => ({
858
+ ...prev,
859
+ connect: new Error(errorData?.error || "Connection failed")
860
+ }));
862
861
  }
863
862
  setAddresses([]);
864
863
  };
package/dist/index.mjs CHANGED
@@ -161,20 +161,14 @@ function useDiscoveredWallets() {
161
161
  try {
162
162
  setIsLoading(true);
163
163
  setError(null);
164
- const initialWallets = sdk.getDiscoveredWallets();
165
- if (initialWallets.length > 0) {
166
- setWallets(initialWallets);
167
- setIsLoading(false);
168
- } else {
169
- await sdk.discoverWallets();
170
- const discoveredWallets = sdk.getDiscoveredWallets();
171
- setWallets(discoveredWallets);
172
- setIsLoading(false);
173
- }
164
+ await sdk.discoverWallets();
165
+ const discoveredWallets = sdk.getDiscoveredWallets();
166
+ setWallets(discoveredWallets);
174
167
  } catch (err) {
175
168
  const error2 = err instanceof Error ? err : new Error("Failed to fetch discovered wallets");
176
169
  setError(error2);
177
170
  setWallets([]);
171
+ } finally {
178
172
  setIsLoading(false);
179
173
  }
180
174
  }, [sdk]);
@@ -269,7 +263,8 @@ function ConnectModalContent({
269
263
  const isConnectingState = baseConnect.isConnecting || isConnecting;
270
264
  const errorState = baseConnect.error ? baseConnect.error.message : error;
271
265
  const showDivider = !(allowedProviders.length === 1 && allowedProviders.includes("injected"));
272
- const shouldShowOtherWalletsButton = discoveredWallets.length > 2;
266
+ const isInjectedOnly = allowedProviders.length === 1 && allowedProviders.includes("injected");
267
+ const shouldShowOtherWalletsButton = !isInjectedOnly && discoveredWallets.length > 2;
273
268
  const walletsToShowInline = shouldShowOtherWalletsButton ? [] : discoveredWallets;
274
269
  const connectWithAuthProvider = useCallback3(
275
270
  async (provider, walletId) => {
@@ -538,7 +533,7 @@ function ConnectModalContent({
538
533
  ] })
539
534
  }
540
535
  ),
541
- allowedProviders.includes("injected") && (isExtensionInstalled.isInstalled || discoveredWallets.length > 0) && (!isMobile || isExtensionInstalled.isInstalled) && /* @__PURE__ */ jsxs(Fragment, { children: [
536
+ allowedProviders.includes("injected") && (isExtensionInstalled.isInstalled || discoveredWallets.length > 0) && /* @__PURE__ */ jsxs(Fragment, { children: [
542
537
  showDivider && /* @__PURE__ */ jsxs("div", { style: dividerStyle, children: [
543
538
  /* @__PURE__ */ jsx2("div", { style: dividerLineStyle }),
544
539
  /* @__PURE__ */ jsx2("span", { style: dividerTextStyle, children: "OR" }),
@@ -790,9 +785,10 @@ function PhantomProvider({ children, config, debugConfig, theme, appIcon, appNam
790
785
  try {
791
786
  setIsConnected(true);
792
787
  setIsConnecting(false);
793
- setUser(data);
794
788
  const addrs = await sdk.getAddresses();
795
789
  setAddresses(addrs);
790
+ const normalizedUser = data ?? { addresses: addrs };
791
+ setUser(normalizedUser);
796
792
  } catch (err) {
797
793
  console.error("Error connecting:", err);
798
794
  try {
@@ -805,11 +801,14 @@ function PhantomProvider({ children, config, debugConfig, theme, appIcon, appNam
805
801
  const handleConnectError = (errorData) => {
806
802
  setIsConnecting(false);
807
803
  setIsConnected(false);
808
- const isAutoConnectNoSession = errorData.source === "auto-connect" && (errorData.error === "No valid session found" || errorData.error === "No trusted connections available");
804
+ const isAutoConnectNoSession = errorData?.source === "auto-connect" && (errorData?.error === "No valid session found" || errorData?.error === "No trusted connections available");
809
805
  if (isAutoConnectNoSession) {
810
806
  setErrors((prev) => ({ ...prev, connect: void 0 }));
811
807
  } else {
812
- setErrors((prev) => ({ ...prev, connect: new Error(errorData.error || "Connection failed") }));
808
+ setErrors((prev) => ({
809
+ ...prev,
810
+ connect: new Error(errorData?.error || "Connection failed")
811
+ }));
813
812
  }
814
813
  setAddresses([]);
815
814
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phantom/react-sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/phantom/phantom-connect-sdk",
@@ -31,31 +31,31 @@
31
31
  "prettier": "prettier --write \"src/**/*.{ts,tsx}\""
32
32
  },
33
33
  "dependencies": {
34
- "@phantom/browser-sdk": "^1.0.0",
35
- "@phantom/chain-interfaces": "^1.0.0",
36
- "@phantom/constants": "^1.0.0",
37
- "@phantom/wallet-sdk-ui": "^1.0.0"
34
+ "@phantom/browser-sdk": "^1.0.3",
35
+ "@phantom/chain-interfaces": "^1.0.3",
36
+ "@phantom/constants": "^1.0.3",
37
+ "@phantom/wallet-sdk-ui": "^1.0.3"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@testing-library/dom": "^10.4.0",
41
41
  "@testing-library/jest-dom": "^6.9.1",
42
42
  "@testing-library/react": "^16.3.0",
43
43
  "@types/jest": "^29.5.14",
44
- "@types/react": "^19.1.2",
45
- "@types/react-dom": "^19.1.2",
44
+ "@types/react": "^19.0.1",
45
+ "@types/react-dom": "^19.0.1",
46
46
  "eslint": "8.53.0",
47
47
  "jest": "^29.7.0",
48
48
  "jest-environment-jsdom": "^29.7.0",
49
49
  "prettier": "^3.5.2",
50
- "react": "19.0.0",
51
- "react-dom": "19.0.0",
50
+ "react": "19.0.1",
51
+ "react-dom": "19.0.1",
52
52
  "rimraf": "^6.0.1",
53
53
  "ts-jest": "^29",
54
54
  "tsup": "^6.7.0",
55
55
  "typescript": "^5.0.4"
56
56
  },
57
57
  "peerDependencies": {
58
- "react": ">=19.0.0"
58
+ "react": ">=19.0.1"
59
59
  },
60
60
  "publishConfig": {
61
61
  "directory": "_release/package"