@@ -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
1725const 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
5054const 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