41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import { COSMOS_SIGNING_METHODS } from '@/data/COSMOSData'
|
|
import { cosmosAddresses, cosmosWallets } from '@/utils/CosmosWalletUtil'
|
|
import { getWalletAddressFromParams } from '@/utils/HelperUtil'
|
|
import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils'
|
|
import { SignClientTypes } from '@walletconnect/types'
|
|
import { getSdkError } from '@walletconnect/utils'
|
|
import { parseSignDocValues } from 'cosmos-wallet'
|
|
|
|
export async function approveCosmosRequest(
|
|
requestEvent: SignClientTypes.EventArguments['session_request']
|
|
) {
|
|
const { params, id } = requestEvent
|
|
const { request } = params
|
|
const wallet = cosmosWallets[getWalletAddressFromParams(cosmosAddresses, params)]
|
|
|
|
switch (request.method) {
|
|
case COSMOS_SIGNING_METHODS.COSMOS_SIGN_DIRECT:
|
|
const signedDirect = await wallet.signDirect(
|
|
request.params.signerAddress,
|
|
parseSignDocValues(request.params.signDoc)
|
|
)
|
|
return formatJsonRpcResult(id, signedDirect.signature)
|
|
|
|
case COSMOS_SIGNING_METHODS.COSMOS_SIGN_AMINO:
|
|
const signedAmino = await wallet.signAmino(
|
|
request.params.signerAddress,
|
|
request.params.signDoc
|
|
)
|
|
return formatJsonRpcResult(id, signedAmino.signature)
|
|
|
|
default:
|
|
throw new Error(getSdkError('INVALID_METHOD').message)
|
|
}
|
|
}
|
|
|
|
export function rejectCosmosRequest(request: SignClientTypes.EventArguments['session_request']) {
|
|
const { id } = request
|
|
|
|
return formatJsonRpcError(id, getSdkError('USER_REJECTED_METHODS').message)
|
|
}
|