Skip to content

Commit 09233b6

Browse files
Merge pull request #476 from reown-com/fix/provider-hook
fix: added trycatch for safe provider access
2 parents f454081 + 9c9885f commit 09233b6

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

packages/appkit/src/AppKit.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ export class AppKit {
245245
/**
246246
* Returns the provider for a given namespace.
247247
* @param namespace - The namespace to get the provider for.
248-
* @returns The provider for the given namespace.
248+
* @returns The provider for the given namespace, or null if not available or not yet initialized.
249249
*/
250250
getProvider<T extends Provider>(namespace?: string): T | null {
251251
const activeNamespace = namespace ?? ConnectionsController.state.activeNamespace;
@@ -256,7 +256,15 @@ export class AppKit {
256256
);
257257
if (!connection || !connection.adapter || !connection.adapter.connector) return null;
258258

259-
return connection.adapter.connector.getProvider() as T;
259+
try {
260+
return connection.adapter.connector.getProvider() as T | null;
261+
} catch (error) {
262+
// Provider not initialized yet during session restoration
263+
// This can happen on app restart when restoring a previous connection
264+
LogController.sendError(error, 'AppKit.ts', 'getProvider');
265+
266+
return null;
267+
}
260268
}
261269

262270
getNetworks() {

packages/appkit/src/hooks/useProvider.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable valtio/state-snapshot-rule */
22
import { useMemo } from 'react';
33
import { useSnapshot } from 'valtio';
4-
import { ConnectionsController } from '@reown/appkit-core-react-native';
4+
import { ConnectionsController, LogController } from '@reown/appkit-core-react-native';
55
import type { Provider, ChainNamespace } from '@reown/appkit-common-react-native';
66

77
/**
@@ -40,12 +40,21 @@ export function useProvider(): ProviderResult {
4040
const { connection } = useSnapshot(ConnectionsController.state);
4141

4242
const returnValue = useMemo(() => {
43-
if (!connection) return { provider: undefined, providerType: undefined };
43+
if (!connection || !connection.adapter) {
44+
return { provider: undefined, providerType: undefined };
45+
}
4446

45-
return {
46-
provider: connection.adapter.getProvider(),
47-
providerType: connection.adapter.getSupportedNamespace()
48-
};
47+
try {
48+
return {
49+
provider: connection.adapter.getProvider(),
50+
providerType: connection.adapter.getSupportedNamespace()
51+
};
52+
} catch (error) {
53+
LogController.sendError(error, 'useProvider', 'useProvider');
54+
55+
// Provider not initialized yet during session restoration
56+
return { provider: undefined, providerType: undefined };
57+
}
4958
}, [connection]);
5059

5160
return returnValue;

0 commit comments

Comments
 (0)