diff --git a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx index 84547dd26..f1b6fef9a 100644 --- a/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx +++ b/src/modals/confirmation-modal/d-app-operations-confirmation/sign-payload-request-confirmation/sign-payload-request-confirmation.tsx @@ -1,29 +1,32 @@ -import { BeaconMessageType, SignPayloadRequestOutput } from '@airgap/beacon-sdk'; +import { BeaconMessageType, SigningType, SignPayloadRequestOutput } from '@airgap/beacon-sdk'; +import { char2Bytes } from '@taquito/utils'; import React, { FC, useMemo, useState } from 'react'; import { Text, View } from 'react-native'; import { map, switchMap } from 'rxjs/operators'; -import { BeaconHandler } from '../../../../beacon/beacon-handler'; -import { AccountDropdownItem } from '../../../../components/account-dropdown/account-dropdown-item/account-dropdown-item'; -import { ButtonLargePrimary } from '../../../../components/button/button-large/button-large-primary/button-large-primary'; -import { ButtonLargeSecondary } from '../../../../components/button/button-large/button-large-secondary/button-large-secondary'; -import { Divider } from '../../../../components/divider/divider'; -import { HeaderTitle } from '../../../../components/header/header-title/header-title'; -import { useNavigationSetOptions } from '../../../../components/header/use-navigation-set-options.hook'; -import { Label } from '../../../../components/label/label'; -import { ModalButtonsContainer } from '../../../../components/modal-buttons-container/modal-buttons-container'; -import { ScreenContainer } from '../../../../components/screen-container/screen-container'; -import { TextSegmentControl } from '../../../../components/segmented-control/text-segment-control/text-segment-control'; -import { useDappRequestConfirmation } from '../../../../hooks/request-confirmation/use-dapp-request-confirmation.hook'; -import { useParseSignPayload } from '../../../../hooks/use-parse-sign-payload.hook'; -import { emptyAccount } from '../../../../interfaces/account.interface'; -import { StacksEnum } from '../../../../navigator/enums/stacks.enum'; -import { useNavigation } from '../../../../navigator/hooks/use-navigation.hook'; -import { Shelter } from '../../../../shelter/shelter'; -import { navigateAction } from '../../../../store/root-state.actions'; -import { useAccountsListSelector } from '../../../../store/wallet/wallet-selectors'; -import { formatSize } from '../../../../styles/format-size'; -import { showSuccessToast } from '../../../../toast/toast.utils'; +import { BeaconHandler } from 'src/beacon/beacon-handler'; +import { AccountDropdownItem } from 'src/components/account-dropdown/account-dropdown-item/account-dropdown-item'; +import { ButtonLargePrimary } from 'src/components/button/button-large/button-large-primary/button-large-primary'; +import { ButtonLargeSecondary } from 'src/components/button/button-large/button-large-secondary/button-large-secondary'; +import { Divider } from 'src/components/divider/divider'; +import { HeaderTitle } from 'src/components/header/header-title/header-title'; +import { useNavigationSetOptions } from 'src/components/header/use-navigation-set-options.hook'; +import { Label } from 'src/components/label/label'; +import { ModalButtonsContainer } from 'src/components/modal-buttons-container/modal-buttons-container'; +import { ScreenContainer } from 'src/components/screen-container/screen-container'; +import { TextSegmentControl } from 'src/components/segmented-control/text-segment-control/text-segment-control'; +import { useDappRequestConfirmation } from 'src/hooks/request-confirmation/use-dapp-request-confirmation.hook'; +import { useParseSignPayload } from 'src/hooks/use-parse-sign-payload.hook'; +import { emptyAccount } from 'src/interfaces/account.interface'; +import { StacksEnum } from 'src/navigator/enums/stacks.enum'; +import { useNavigation } from 'src/navigator/hooks/use-navigation.hook'; +import { Shelter } from 'src/shelter/shelter'; +import { navigateAction } from 'src/store/root-state.actions'; +import { useAccountsListSelector } from 'src/store/wallet/wallet-selectors'; +import { formatSize } from 'src/styles/format-size'; +import { showSuccessToast } from 'src/toast/toast.utils'; +import { isDefined } from 'src/utils/is-defined'; + import { AppMetadataView } from '../app-metadata-view/app-metadata-view'; import { useSignPayloadRequestConfirmationStyles } from './sign-payload-request-confirmation.styles'; @@ -31,9 +34,18 @@ interface Props { message: SignPayloadRequestOutput; } +const payloadToHex = (payload: string) => { + const alreadyHexMatch = payload.match(/^(0x)?([0-9a-fA-F]+)$/); + const hexString = alreadyHexMatch?.[2]; + + return isDefined(hexString) && hexString.length % 2 === 0 ? hexString : char2Bytes(payload); +}; + const approveSignPayloadRequest = (message: SignPayloadRequestOutput) => Shelter.getSigner$(message.sourceAddress).pipe( - switchMap(signer => signer.sign(message.payload)), + switchMap(signer => + signer.sign(message.signingType === SigningType.RAW ? payloadToHex(message.payload) : message.payload) + ), switchMap(({ prefixSig }) => BeaconHandler.respond({ type: BeaconMessageType.SignPayloadResponse,