* feat: v2 wallet * feat: Web3Wallet sign integration * chore: adds `core` to package.json * feat: Web3Wallet Auth integration * chore: core & web3wallet canary * chore: rm config * chore: force redeploy * chore: rm core & sign-client deps * fix: rm `sign-client` usage * refactor: updates README * feat: adds metadata mock obj & removes relay url param * refactor: more url mentions * refactor: rm v2 wallet readme references & uses web3wallet.core... * refactor: wallet -> web3wallet * refactor: rm wallet to web3wallet * fix: adds async to example listeners
112 lines
5.2 KiB
TypeScript
112 lines
5.2 KiB
TypeScript
import { COSMOS_SIGNING_METHODS } from '@/data/COSMOSData'
|
|
import { EIP155_SIGNING_METHODS } from '@/data/EIP155Data'
|
|
import { SOLANA_SIGNING_METHODS } from '@/data/SolanaData'
|
|
import { POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData'
|
|
import { ELROND_SIGNING_METHODS } from '@/data/ElrondData'
|
|
import ModalStore from '@/store/ModalStore'
|
|
import { web3wallet } from '@/utils/WalletConnectUtil'
|
|
import { SignClientTypes } from '@walletconnect/types'
|
|
import { useCallback, useEffect } from 'react'
|
|
import { NEAR_SIGNING_METHODS } from '@/data/NEARData'
|
|
import { approveNearRequest } from '@/utils/NearRequestHandlerUtil'
|
|
import { Web3WalletTypes } from '@walletconnect/web3wallet'
|
|
|
|
export default function useWalletConnectEventsManager(initialized: boolean) {
|
|
/******************************************************************************
|
|
* 1. Open session proposal modal for confirmation / rejection
|
|
*****************************************************************************/
|
|
const onSessionProposal = useCallback(
|
|
(proposal: SignClientTypes.EventArguments['session_proposal']) => {
|
|
ModalStore.open('SessionProposalModal', { proposal })
|
|
},
|
|
[]
|
|
)
|
|
|
|
const onAuthRequest = useCallback((request: Web3WalletTypes.AuthRequest) => {
|
|
ModalStore.open('AuthRequestModal', { request })
|
|
}, [])
|
|
|
|
/******************************************************************************
|
|
* 3. Open request handling modal based on method that was used
|
|
*****************************************************************************/
|
|
const onSessionRequest = useCallback(
|
|
async (requestEvent: SignClientTypes.EventArguments['session_request']) => {
|
|
console.log('session_request', requestEvent)
|
|
const { topic, params } = requestEvent
|
|
const { request } = params
|
|
// const requestSession = signClient.session.get(topic)
|
|
const requestSession = web3wallet.engine.signClient.session.get(topic)
|
|
|
|
switch (request.method) {
|
|
case EIP155_SIGNING_METHODS.ETH_SIGN:
|
|
case EIP155_SIGNING_METHODS.PERSONAL_SIGN:
|
|
return ModalStore.open('SessionSignModal', { requestEvent, requestSession })
|
|
|
|
case EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA:
|
|
case EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V3:
|
|
case EIP155_SIGNING_METHODS.ETH_SIGN_TYPED_DATA_V4:
|
|
return ModalStore.open('SessionSignTypedDataModal', { requestEvent, requestSession })
|
|
|
|
case EIP155_SIGNING_METHODS.ETH_SEND_TRANSACTION:
|
|
case EIP155_SIGNING_METHODS.ETH_SIGN_TRANSACTION:
|
|
return ModalStore.open('SessionSendTransactionModal', { requestEvent, requestSession })
|
|
|
|
case COSMOS_SIGNING_METHODS.COSMOS_SIGN_DIRECT:
|
|
case COSMOS_SIGNING_METHODS.COSMOS_SIGN_AMINO:
|
|
return ModalStore.open('SessionSignCosmosModal', { requestEvent, requestSession })
|
|
|
|
case SOLANA_SIGNING_METHODS.SOLANA_SIGN_MESSAGE:
|
|
case SOLANA_SIGNING_METHODS.SOLANA_SIGN_TRANSACTION:
|
|
return ModalStore.open('SessionSignSolanaModal', { requestEvent, requestSession })
|
|
|
|
case POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_MESSAGE:
|
|
case POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_TRANSACTION:
|
|
return ModalStore.open('SessionSignPolkadotModal', { requestEvent, requestSession })
|
|
|
|
case NEAR_SIGNING_METHODS.NEAR_SIGN_IN:
|
|
case NEAR_SIGNING_METHODS.NEAR_SIGN_OUT:
|
|
case NEAR_SIGNING_METHODS.NEAR_SIGN_TRANSACTION:
|
|
case NEAR_SIGNING_METHODS.NEAR_SIGN_AND_SEND_TRANSACTION:
|
|
case NEAR_SIGNING_METHODS.NEAR_SIGN_TRANSACTIONS:
|
|
case NEAR_SIGNING_METHODS.NEAR_SIGN_AND_SEND_TRANSACTIONS:
|
|
case NEAR_SIGNING_METHODS.NEAR_VERIFY_OWNER:
|
|
return ModalStore.open('SessionSignNearModal', { requestEvent, requestSession })
|
|
|
|
case ELROND_SIGNING_METHODS.ELROND_SIGN_MESSAGE:
|
|
case ELROND_SIGNING_METHODS.ELROND_SIGN_TRANSACTION:
|
|
case ELROND_SIGNING_METHODS.ELROND_SIGN_TRANSACTIONS:
|
|
case ELROND_SIGNING_METHODS.ELROND_SIGN_LOGIN_TOKEN:
|
|
return ModalStore.open('SessionSignElrondModal', { requestEvent, requestSession })
|
|
|
|
case NEAR_SIGNING_METHODS.NEAR_GET_ACCOUNTS:
|
|
return web3wallet.respondSessionRequest({
|
|
topic,
|
|
response: await approveNearRequest(requestEvent)
|
|
})
|
|
default:
|
|
return ModalStore.open('SessionUnsuportedMethodModal', { requestEvent, requestSession })
|
|
}
|
|
},
|
|
[]
|
|
)
|
|
|
|
/******************************************************************************
|
|
* Set up WalletConnect event listeners
|
|
*****************************************************************************/
|
|
useEffect(() => {
|
|
if (initialized) {
|
|
// sign
|
|
web3wallet.on('session_proposal', onSessionProposal)
|
|
web3wallet.on('session_request', onSessionRequest)
|
|
// auth
|
|
web3wallet.on('auth_request', onAuthRequest)
|
|
|
|
// TODOs
|
|
// signClient.on('session_ping', data => console.log('ping', data))
|
|
// signClient.on('session_event', data => console.log('event', data))
|
|
// signClient.on('session_update', data => console.log('update', data))
|
|
// signClient.on('session_delete', data => console.log('delete', data))
|
|
}
|
|
}, [initialized, onSessionProposal, onSessionRequest, onAuthRequest])
|
|
}
|