Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,39 +1,51 @@
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';

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,
Expand Down