Skip to content

Commit 386ef04

Browse files
authored
Merge pull request Expensify#88064 from Expensify/cristipaval/send-money-fraud-monitoring
2 parents 017b21f + 002b79e commit 386ef04

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

src/libs/Middleware/FraudMonitoring.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@ type FraudSignal = {
1212
};
1313
};
1414

15-
type FraudSignalFactory = (requestData?: Record<string, unknown>, responseData?: Record<string, unknown>) => FraudSignal;
15+
type FraudSignalFactory = (requestData?: Record<string, unknown>, responseData?: Record<string, unknown>) => FraudSignal | undefined;
16+
17+
// Flag commands that create new accounts so the fraud protection backend can detect invite spam.
18+
const createNewAccountCountSignal: FraudSignalFactory = (_, responseData) => {
19+
if (!responseData?.newAccountCount) {
20+
return undefined;
21+
}
22+
return {event: FRAUD_PROTECTION_EVENT.NEW_EMAILS_INVITED, attribute: {key: 'new_account_count', value: responseData.newAccountCount as string}};
23+
};
1624

1725
const fraudSignalFactoryByApiCommand: Record<string, FraudSignalFactory> = {
1826
[READ_COMMANDS.SIGN_IN_WITH_SUPPORT_AUTH_TOKEN]: () => ({event: FRAUD_PROTECTION_EVENT.START_SUPPORT_SESSION}),
@@ -37,14 +45,10 @@ const fraudSignalFactoryByApiCommand: Record<string, FraudSignalFactory> = {
3745
[WRITE_COMMANDS.CONNECT_BANK_ACCOUNT_MANUALLY]: () => ({event: FRAUD_PROTECTION_EVENT.BUSINESS_BANK_ACCOUNT_SETUP}),
3846
[WRITE_COMMANDS.CONNECT_BANK_ACCOUNT_WITH_PLAID]: () => ({event: FRAUD_PROTECTION_EVENT.BUSINESS_BANK_ACCOUNT_SETUP}),
3947
[WRITE_COMMANDS.ADD_PERSONAL_BANK_ACCOUNT]: () => ({event: FRAUD_PROTECTION_EVENT.PERSONAL_BANK_ACCOUNT_SETUP}),
40-
[WRITE_COMMANDS.INVITE_TO_GROUP_CHAT]: (_, responseData) => {
41-
const newAccountCountAttribute = responseData?.newAccountCount ? {key: 'new_account_count', value: responseData?.newAccountCount as string} : undefined;
42-
return {event: FRAUD_PROTECTION_EVENT.NEW_EMAILS_INVITED, attribute: newAccountCountAttribute};
43-
},
44-
[WRITE_COMMANDS.INVITE_TO_ROOM]: (_, responseData) => {
45-
const newAccountCountAttribute = responseData?.newAccountCount ? {key: 'new_account_count', value: responseData?.newAccountCount as string} : undefined;
46-
return {event: FRAUD_PROTECTION_EVENT.NEW_EMAILS_INVITED, attribute: newAccountCountAttribute};
47-
},
48+
[WRITE_COMMANDS.INVITE_TO_GROUP_CHAT]: createNewAccountCountSignal,
49+
[WRITE_COMMANDS.INVITE_TO_ROOM]: createNewAccountCountSignal,
50+
[WRITE_COMMANDS.SEND_MONEY_ELSEWHERE]: createNewAccountCountSignal,
51+
[WRITE_COMMANDS.SEND_MONEY_WITH_WALLET]: createNewAccountCountSignal,
4852
};
4953

5054
const FraudMonitoring: Middleware = (response, request) =>
@@ -59,6 +63,10 @@ const FraudMonitoring: Middleware = (response, request) =>
5963
}
6064

6165
const signal = createFraudSignal(request.data, responseData);
66+
if (!signal) {
67+
return responseData;
68+
}
69+
6270
FraudProtection.sendEvent(signal.event);
6371

6472
if (!signal.attribute) {

0 commit comments

Comments
 (0)