Skip to content

Commit

Permalink
fix: add source when local PPOM fails
Browse files Browse the repository at this point in the history
  • Loading branch information
vinistevam committed Nov 27, 2024
1 parent 8822ece commit 69aa718
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 9 deletions.
27 changes: 25 additions & 2 deletions app/lib/ppom/ppom-util.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
RpcEndpointType,
} from '@metamask/network-controller';
import { NETWORKS_CHAIN_ID } from '../../constants/network';
import { SecurityAlertSource } from '../../components/Views/confirmations/components/BlockaidBanner/BlockaidBanner.types';

const CHAIN_ID_MOCK = '0x1';

Expand Down Expand Up @@ -176,8 +177,8 @@ describe('PPOM Utils', () => {
MockEngine.context.PreferencesController.state.securityAlertsEnabled =
false;
await PPOMUtil.validateRequest(mockRequest, CHAIN_ID_MOCK);
expect(MockEngine.context.PPOMController?.usePPOM).toBeCalledTimes(0);
expect(spyTransactionAction).toBeCalledTimes(0);
expect(MockEngine.context.PPOMController?.usePPOM).toHaveBeenCalledTimes(0);
expect(spyTransactionAction).toHaveBeenCalledTimes(0);
});

it('should not validate if request is send to users own account ', async () => {
Expand Down Expand Up @@ -385,5 +386,27 @@ describe('PPOM Utils', () => {
await PPOMUtil.validateRequest(mockRequest, CHAIN_ID_MOCK);
expect(spy).toHaveBeenCalledTimes(2);
});

it('sets security alerts response to failed when security alerts API and controller PPOM throws', async () => {
const spy = jest.spyOn(
TransactionActions,
'setTransactionSecurityAlertResponse',
);

const validateMock = () => new Error('Test Error');

const ppomMock = {
validateJsonRpc: validateMock,
};

MockEngine.context.PPOMController?.usePPOM.mockImplementation(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(callback: any) => callback(ppomMock),
);

await PPOMUtil.validateRequest(mockRequest, CHAIN_ID_MOCK);
expect(spy).toHaveBeenCalledTimes(2);
expect(spy).toHaveBeenCalledWith(CHAIN_ID_MOCK, {chainId: CHAIN_ID_MOCK, req: { ...mockRequest } , source: SecurityAlertSource.Local});
});
});
});
19 changes: 12 additions & 7 deletions app/lib/ppom/ppom-util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,19 @@ async function validateWithController(
ppomController: PPOMController,
request: PPOMRequest,
): Promise<SecurityAlertResponse> {
const response = (await ppomController.usePPOM((ppom) =>
ppom.validateJsonRpc(request as unknown as Record<string, unknown>),
)) as SecurityAlertResponse;
try{
const response = (await ppomController.usePPOM((ppom) =>
ppom.validateJsonRpc(request as unknown as Record<string, unknown>),
)) as SecurityAlertResponse;

return {
...response,
source: SecurityAlertSource.Local,
};
return {
...response,
source: SecurityAlertSource.Local,
};
} catch (e) {
Logger.log(`Error validating request with PPOM: ${e}`);
return {...SECURITY_ALERT_RESPONSE_FAILED, source: SecurityAlertSource.Local,};
}
}

async function validateWithAPI(
Expand Down

0 comments on commit 69aa718

Please sign in to comment.