diff --git a/src/helpers/formatTxMessageResponse.ts b/src/helpers/formatTxMessageResponse.ts index ac0b8f0..bdd6136 100644 --- a/src/helpers/formatTxMessageResponse.ts +++ b/src/helpers/formatTxMessageResponse.ts @@ -9,11 +9,14 @@ export function formatTxMessageResponse({ txMessage, senderAddress }: Props) { const updatedTxMessage = { ...txMessage, - message: { - ...txMessage.message, + rpcProxySubmissionParams: { + ...txMessage.rpcProxySubmissionParams, message: { - ...txMessage.message.message, - from: senderAddress, + ...txMessage.rpcProxySubmissionParams.message, + message: { + ...txMessage.rpcProxySubmissionParams.message.message, + from: senderAddress, + } }, } } diff --git a/src/pages/api/paymentTxParams/[uuid].ts b/src/pages/api/paymentTxParams/[uuid].ts index 4d70e43..800bc5a 100644 --- a/src/pages/api/paymentTxParams/[uuid].ts +++ b/src/pages/api/paymentTxParams/[uuid].ts @@ -21,7 +21,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return res.status(400).json({ message: 'Invalid sender address' }); } - const paymentTxOrMsg = await getPaymentTxOrMsg(uuid as string); + const paymentTxOrMsg = await getPaymentTxOrMsg(uuid as string, senderAddress as string); res.status(200).json(paymentTxOrMsg); } catch (error) { console.error('Error retrieving payment transaction:', error); diff --git a/src/services/paymentTxOrMsgService.ts b/src/services/paymentTxOrMsgService.ts index 189a2a2..4a547fd 100644 --- a/src/services/paymentTxOrMsgService.ts +++ b/src/services/paymentTxOrMsgService.ts @@ -8,6 +8,8 @@ import { isEip712Payload, } from '@/types/paymentTx'; import { Prisma } from '@prisma/client'; +import { formatTxMessageResponse } from '@/helpers/formatTxMessageResponse'; +import { formatTxDataResponse } from '@/helpers/formatTxDataResponse'; /** * Helper for formatting the payload for storage in the database @@ -27,7 +29,7 @@ export const createPaymentTxOrMsg = async (payload: Payload) => { dappName: payload.dappName, payloadType: payload.payloadType, additionalPayload: payload.additionalPayload, - rpcProxySubmissionParams: JSON.stringify(payload.rpcProxySubmissionParams), // we stringify ths object to store it in the database to preserve field order + rpcProxySubmissionParams: payload.rpcProxySubmissionParams, }; let txParams: Prisma.JsonValue; @@ -65,7 +67,7 @@ export const createPaymentTxOrMsg = async (payload: Payload) => { /** * Get a payment transaction or message by uuid. Flattens the txParams object */ -export const getPaymentTxOrMsg = async (uuid: string) => { +export const getPaymentTxOrMsg = async (uuid: string, senderAddress?: string) => { const prisma = getPrismaClient(); const paymentTxOrMsg = await prisma.contactlessPaymentTxOrMsg.findUnique({ @@ -77,10 +79,30 @@ export const getPaymentTxOrMsg = async (uuid: string) => { } // remove the txParams prop and flatten - const { txParams, rpcProxySubmissionParams, ...rest } = paymentTxOrMsg; + const { txParams, ...rest } = paymentTxOrMsg; + + if (paymentTxOrMsg.payloadType === 'eip712') { + return formatTxMessageResponse({ + txMessage: { + ...rest, + ...(txParams as Record), + }, + senderAddress, + }); + } + + if (paymentTxOrMsg.payloadType === 'contractCall') { + return formatTxDataResponse({ + txData: { + ...rest, + ...(txParams as Record) + }, + senderAddress, + }); + } + return { ...rest, - rpcProxySubmissionParams: typeof rpcProxySubmissionParams === 'string' ? JSON.parse(rpcProxySubmissionParams) : undefined, ...(txParams as Record), }; };