Skip to content

Commit

Permalink
Refactor session id
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeljscript committed Apr 25, 2024
1 parent 275db13 commit 48605e0
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
12 changes: 5 additions & 7 deletions apps/wallet-mobile/src/features/Discover/common/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ import * as React from 'react'
import {WebView, WebViewMessageEvent} from 'react-native-webview'

import {YoroiWallet} from '../../../yoroi-wallets/cardano/types'
import {useStakingKey} from '../../../yoroi-wallets/hooks'
import {Logger} from '../../../yoroi-wallets/logging'
import {walletConfig} from './wallet-config'

export const useConnectWalletToWebView = (wallet: YoroiWallet, webViewRef: React.RefObject<WebView | null>) => {
const sessionId = useStakingKey(wallet)
const dappConnector = useDappConnector()
const {manager, sessionId} = useDappConnector()

const sendMessageToWebView = (event: string) => (id: string, result: unknown, error?: Error) => {
if (error) {
Expand All @@ -27,18 +25,18 @@ export const useConnectWalletToWebView = (wallet: YoroiWallet, webViewRef: React
const webViewUrl = e.nativeEvent.url

try {
await dappConnector.manager.handleEvent(data, webViewUrl, sendMessageToWebView(data))
await manager.handleEvent(data, webViewUrl, sendMessageToWebView(data))
} catch (e) {
Logger.error('DappConnector', 'handleWebViewEvent::error', e)
}
}

React.useEffect(() => {
const initScript = getInitScript(sessionId, dappConnector.manager)
const initScript = getInitScript(sessionId, manager)
webViewRef.current?.injectJavaScript(initScript)
}, [wallet, webViewRef, sessionId, dappConnector])
}, [wallet, webViewRef, sessionId, manager])

return {handleEvent: handleWebViewEvent, initScript: getInitScript(sessionId, dappConnector.manager), sessionId}
return {handleEvent: handleWebViewEvent, initScript: getInitScript(sessionId, manager), sessionId}
}

const getInjectableMessage = (message: unknown) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import * as React from 'react'
import {DappConnectorManager} from '../../dapp-connector'

const Context = React.createContext<{manager: DappConnectorManager} | null>(null)
const Context = React.createContext<{manager: DappConnectorManager; sessionId: string} | null>(null)

type Props = {
children: React.ReactNode
manager: DappConnectorManager
}

export const DappConnectorProvider = ({children, manager}: Props) => {
const value = React.useMemo(() => ({manager}), [manager])
const [sessionId] = React.useState(() => generateSessionId())
const value = React.useMemo(() => ({manager, sessionId}), [manager, sessionId])
return <Context.Provider value={value}>{children}</Context.Provider>
}

Expand All @@ -20,3 +21,5 @@ export const useDappConnector = () => {
}
return context
}

const generateSessionId = () => Math.random().toString(36).substring(7)

0 comments on commit 48605e0

Please sign in to comment.