From 03fb90c93b76ce19b7231b887e942677a3151b08 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 14:39:23 +0530 Subject: [PATCH 01/14] Remove the customer from response --- .../lib/api/fraud/get-grouped-fraud-events.ts | 23 +++---------------- apps/web/lib/types.ts | 4 ++-- apps/web/lib/zod/schemas/fraud.ts | 7 +----- 3 files changed, 6 insertions(+), 28 deletions(-) diff --git a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts index eae4ddb3d58..2ba87692bf5 100644 --- a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts +++ b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts @@ -1,5 +1,5 @@ import { - fraudEventSchema, + groupedFraudEventSchema, groupedFraudEventsQuerySchema, } from "@/lib/zod/schemas/fraud"; import { prisma } from "@dub/prisma"; @@ -24,9 +24,6 @@ interface QueryResult { partnerName: string | null; partnerEmail: string | null; partnerImage: string | null; - customerId: string | null; - customerEmail: string | null; - customerName: string | null; userId: string | null; userName: string | null; userImage: string | null; @@ -76,17 +73,12 @@ export async function getGroupedFraudEvents({ fe.groupKey, fe.commissionId, fe.partnerId, - fe.customerId, fe.userId, dfe.lastOccurrenceAt, dfe.eventCount, p.name AS partnerName, p.email AS partnerEmail, - p.image AS partnerImage, - c.email AS customerEmail, - c.name AS customerName, - u.name AS userName, - u.image AS userImage + p.image AS partnerImage FROM ( SELECT FraudEvent.groupKey, @@ -101,8 +93,6 @@ export async function getGroupedFraudEvents({ ON fe.id = dfe.latestEventId LEFT JOIN Partner p ON p.id = fe.partnerId - LEFT JOIN Customer c - ON c.id = fe.customerId LEFT JOIN User u ON u.id = fe.userId ${orderByClause} @@ -126,13 +116,6 @@ export async function getGroupedFraudEvents({ image: event.partnerImage, } : null, - customer: event.customerId - ? { - id: event.customerId, - name: event.customerName, - email: event.customerEmail, - } - : null, user: event.userId ? { id: event.userId, @@ -142,5 +125,5 @@ export async function getGroupedFraudEvents({ : null, })); - return z.array(fraudEventSchema).parse(groupedEvents); + return z.array(groupedFraudEventSchema).parse(groupedEvents); } diff --git a/apps/web/lib/types.ts b/apps/web/lib/types.ts index 3c700002653..9a6479d401b 100644 --- a/apps/web/lib/types.ts +++ b/apps/web/lib/types.ts @@ -59,7 +59,7 @@ import { DiscountCodeSchema, DiscountSchema } from "./zod/schemas/discount"; import { EmailDomainSchema } from "./zod/schemas/email-domains"; import { FolderSchema } from "./zod/schemas/folders"; import { - fraudEventSchema, + groupedFraudEventSchema, fraudRuleSchema, updateFraudRuleSettingsSchema, } from "./zod/schemas/fraud"; @@ -673,7 +673,7 @@ export type WorkflowAttribute = (typeof WORKFLOW_ATTRIBUTES)[number]; export type EmailDomainProps = z.infer; -export type fraudEventGroupProps = z.infer; +export type fraudEventGroupProps = z.infer; export type ExtendedFraudRuleType = | FraudRuleType diff --git a/apps/web/lib/zod/schemas/fraud.ts b/apps/web/lib/zod/schemas/fraud.ts index ff3c23f5897..788573a22ea 100644 --- a/apps/web/lib/zod/schemas/fraud.ts +++ b/apps/web/lib/zod/schemas/fraud.ts @@ -9,7 +9,7 @@ import { UserSchema } from "./users"; export const MAX_RESOLUTION_REASON_LENGTH = 200; -export const fraudEventSchema = z.object({ +export const groupedFraudEventSchema = z.object({ id: z.string(), type: z.nativeEnum(FraudRuleType), status: z.nativeEnum(FraudEventStatus), @@ -24,11 +24,6 @@ export const fraudEventSchema = z.object({ email: true, image: true, }), - customer: CustomerSchema.pick({ - id: true, - name: true, - email: true, - }).nullable(), user: UserSchema.pick({ id: true, name: true, From 637d7c7f1b28f4718806745c0ff4c359b8a3b9bc Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 14:41:08 +0530 Subject: [PATCH 02/14] Update get-grouped-fraud-events.ts --- apps/web/lib/api/fraud/get-grouped-fraud-events.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts index 2ba87692bf5..f728ef1f856 100644 --- a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts +++ b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts @@ -78,6 +78,9 @@ export async function getGroupedFraudEvents({ dfe.eventCount, p.name AS partnerName, p.email AS partnerEmail, + p.image AS partnerImage, + u.name AS userName, + u.image AS userImage p.image AS partnerImage FROM ( SELECT From 084eb6855fd6fe90c8374e1e08e68bedb4cd865e Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:22:06 +0530 Subject: [PATCH 03/14] Improve the tests --- .../lib/api/fraud/get-grouped-fraud-events.ts | 2 +- apps/web/tests/fraud/index.test.ts | 67 ++++++++++++------- apps/web/tests/utils/helpers.ts | 23 +++++++ 3 files changed, 66 insertions(+), 26 deletions(-) diff --git a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts index f728ef1f856..028a6fa0aa5 100644 --- a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts +++ b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts @@ -80,7 +80,7 @@ export async function getGroupedFraudEvents({ p.email AS partnerEmail, p.image AS partnerImage, u.name AS userName, - u.image AS userImage + u.image AS userImage, p.image AS partnerImage FROM ( SELECT diff --git a/apps/web/tests/fraud/index.test.ts b/apps/web/tests/fraud/index.test.ts index cc2c5c50afc..27354a54165 100644 --- a/apps/web/tests/fraud/index.test.ts +++ b/apps/web/tests/fraud/index.test.ts @@ -1,6 +1,6 @@ import { Customer, fraudEventGroupProps, TrackLeadResponse } from "@/lib/types"; import { FraudRuleType } from "@prisma/client"; -import { randomCustomer, randomId } from "tests/utils/helpers"; +import { randomCustomer, randomId, retry } from "tests/utils/helpers"; import { HttpClient } from "tests/utils/http"; import { DUB_TEST_IDENTITY_HEADER, @@ -11,7 +11,7 @@ import { import { describe, expect, test } from "vitest"; import { IntegrationHarness } from "../utils/integration"; -describe.skip.concurrent("/fraud/**", async () => { +describe.concurrent("/fraud/**", async () => { const h = new IntegrationHarness(); const { http } = await h.init(); @@ -187,12 +187,9 @@ const verifyFraudEvent = async ({ ruleType, }: { http: HttpClient; - customer: Pick; + customer: Pick; ruleType: FraudRuleType; }) => { - // Wait for 8 seconds to reduce flakiness - await new Promise((resolve) => setTimeout(resolve, 8000)); - // Resolve customerId from customerExternalID const { data: customers } = await http.get({ path: "/customers", @@ -201,22 +198,15 @@ const verifyFraudEvent = async ({ expect(customers.length).toBeGreaterThan(0); - const customerFound = customers[0]; - - // Fetch fraud events for the current customer - const { data: fraudEvents } = await http.get({ - path: "/fraud/events", - query: { - partnerId: E2E_FRAUD_PARTNER.id, - type: ruleType, - customerId: customerFound.id, - }, + // Wait until fraud event is available + const fraudEvent = await waitForFraudEvent({ + http, + partnerId: E2E_FRAUD_PARTNER.id, + customerId: customers[0].id, + ruleType, }); - expect(fraudEvents.length).toBeGreaterThan(0); - - const fraudEvent = fraudEvents[0]; - + // Assert fraud event shape expect(fraudEvent).toStrictEqual({ id: expect.any(String), type: ruleType, @@ -232,11 +222,38 @@ const verifyFraudEvent = async ({ email: expect.any(String), image: null, }, - customer: { - id: customerFound.id, - name: expect.any(String), - email: expect.any(String), - }, user: null, }); }; + +async function waitForFraudEvent({ + http, + partnerId, + customerId, + ruleType, +}: { + http: HttpClient; + partnerId: string; + customerId: string; + ruleType: FraudRuleType; +}) { + return await retry( + async () => { + const { data } = await http.get({ + path: "/fraud/events", + query: { + partnerId, + type: ruleType, + customerId, + }, + }); + + if (!data.length) { + throw new Error("Fraud event not ready."); + } + + return data[0]; + }, + { retries: 10, interval: 300 }, + ); +} diff --git a/apps/web/tests/utils/helpers.ts b/apps/web/tests/utils/helpers.ts index fe1b3ecedd1..cbfab4760f8 100644 --- a/apps/web/tests/utils/helpers.ts +++ b/apps/web/tests/utils/helpers.ts @@ -33,3 +33,26 @@ export const randomEmail = ({ export const randomSaleAmount = () => { return randomValue([400, 900, 1900]); }; + +export async function retry( + fn: () => Promise, + { + retries = 10, + interval = 300, + }: { retries?: number; interval?: number } = {}, +): Promise { + let lastError; + + for (let i = 0; i < retries; i++) { + try { + return await fn(); + } catch (err) { + lastError = err; + if (i < retries - 1) { + await new Promise((res) => setTimeout(res, interval)); + } + } + } + + throw lastError; +} From 63b1e6e629da1975de4ad563075d7f70fd9e1b2b Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:43:22 +0530 Subject: [PATCH 04/14] Update get-grouped-fraud-events.ts --- apps/web/lib/api/fraud/get-grouped-fraud-events.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts index 028a6fa0aa5..f24b0ccf434 100644 --- a/apps/web/lib/api/fraud/get-grouped-fraud-events.ts +++ b/apps/web/lib/api/fraud/get-grouped-fraud-events.ts @@ -80,8 +80,7 @@ export async function getGroupedFraudEvents({ p.email AS partnerEmail, p.image AS partnerImage, u.name AS userName, - u.image AS userImage, - p.image AS partnerImage + u.image AS userImage FROM ( SELECT FraudEvent.groupKey, From 284c8e0cd40bf7194748f9ffc540fdb1db08d1bd Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:49:51 +0530 Subject: [PATCH 05/14] Update track-sale.ts --- apps/web/lib/api/conversions/track-sale.ts | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/apps/web/lib/api/conversions/track-sale.ts b/apps/web/lib/api/conversions/track-sale.ts index a6edaa83b05..dabf7560657 100644 --- a/apps/web/lib/api/conversions/track-sale.ts +++ b/apps/web/lib/api/conversions/track-sale.ts @@ -378,15 +378,16 @@ const _trackLead = async ({ eventType: "lead", }), - detectAndRecordFraudEvent({ - program: { id: link.programId }, - partner: pick(webhookPartner, ["id", "email", "name"]), - customer: pick(customer, ["id", "email", "name"]), - commission: { id: commission?.id }, - link: pick(link, ["id"]), - click: pick(leadEventData, ["url", "referer"]), - event: { id: leadEventData.event_id }, - }), + webhookPartner && + detectAndRecordFraudEvent({ + program: { id: link.programId }, + partner: pick(webhookPartner, ["id", "email", "name"]), + customer: pick(customer, ["id", "email", "name"]), + commission: { id: commission?.id }, + link: pick(link, ["id"]), + click: pick(leadEventData, ["url", "referer"]), + event: { id: leadEventData.event_id }, + }), ]); } @@ -589,15 +590,16 @@ const _trackSale = async ({ eventType: "sale", }), - detectAndRecordFraudEvent({ - program: { id: link.programId }, - partner: pick(webhookPartner, ["id", "email", "name"]), - customer: pick(customer, ["id", "email", "name"]), - commission: { id: createdCommission.commission?.id }, - link: pick(link, ["id"]), - click: pick(saleData, ["url", "referer"]), - event: { id: saleData.event_id }, - }), + webhookPartner && + detectAndRecordFraudEvent({ + program: { id: link.programId }, + partner: pick(webhookPartner, ["id", "email", "name"]), + customer: pick(customer, ["id", "email", "name"]), + commission: { id: createdCommission.commission?.id }, + link: pick(link, ["id"]), + click: pick(saleData, ["url", "referer"]), + event: { id: saleData.event_id }, + }), ]); } From fa107e71cce6f48e295e74fba1534221794b945f Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:49:54 +0530 Subject: [PATCH 06/14] Update track-lead.ts --- apps/web/lib/api/conversions/track-lead.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/web/lib/api/conversions/track-lead.ts b/apps/web/lib/api/conversions/track-lead.ts index f940dafe4e4..1a6f2ad4309 100644 --- a/apps/web/lib/api/conversions/track-lead.ts +++ b/apps/web/lib/api/conversions/track-lead.ts @@ -332,15 +332,16 @@ export const trackLead = async ({ eventType: "lead", }), - detectAndRecordFraudEvent({ - program: { id: link.programId }, - partner: pick(webhookPartner, ["id", "email", "name"]), - customer: pick(customer, ["id", "email", "name"]), - commission: { id: createdCommission.commission?.id }, - link: pick(link, ["id"]), - click: pick(clickData, ["url", "referer"]), - event: { id: leadEventId }, - }), + webhookPartner && + detectAndRecordFraudEvent({ + program: { id: link.programId }, + partner: pick(webhookPartner, ["id", "email", "name"]), + customer: pick(customer, ["id", "email", "name"]), + commission: { id: createdCommission.commission?.id }, + link: pick(link, ["id"]), + click: pick(clickData, ["url", "referer"]), + event: { id: leadEventId }, + }), ]); } From 40aae46b6d22ad4c905541a082c25143dea46c50 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:49:56 +0530 Subject: [PATCH 07/14] Update create-new-customer.ts --- .../api/stripe/integration/webhook/utils/create-new-customer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/app/(ee)/api/stripe/integration/webhook/utils/create-new-customer.ts b/apps/web/app/(ee)/api/stripe/integration/webhook/utils/create-new-customer.ts index 13929f762a4..4f907166342 100644 --- a/apps/web/app/(ee)/api/stripe/integration/webhook/utils/create-new-customer.ts +++ b/apps/web/app/(ee)/api/stripe/integration/webhook/utils/create-new-customer.ts @@ -152,6 +152,7 @@ export async function createNewCustomer(event: Stripe.Event) { }, }, }), + syncPartnerLinksStats({ partnerId: link.partnerId, programId: link.programId, @@ -159,7 +160,6 @@ export async function createNewCustomer(event: Stripe.Event) { }), webhookPartner && - commission && detectAndRecordFraudEvent({ program: { id: link.programId }, partner: pick(webhookPartner, ["id", "email", "name"]), From 1bf9a828db8fc2e831b66156270d39741db3fa92 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:57:16 +0530 Subject: [PATCH 08/14] Update detect-record-fraud-event.ts --- apps/web/lib/api/fraud/detect-record-fraud-event.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/web/lib/api/fraud/detect-record-fraud-event.ts b/apps/web/lib/api/fraud/detect-record-fraud-event.ts index 97c09cd253d..0e9543216a5 100644 --- a/apps/web/lib/api/fraud/detect-record-fraud-event.ts +++ b/apps/web/lib/api/fraud/detect-record-fraud-event.ts @@ -10,6 +10,8 @@ import { createFraudEventGroupKey } from "./utils"; export async function detectAndRecordFraudEvent(context: FraudEventContext) { const result = fraudEventContext.safeParse(context); + console.debug("detectAndRecordFraudEvent", JSON.stringify(context, null, 2), result); + if (!result.success) { return; } From 426381ca978ec8aa3d7f4c946766e34db01eb5a9 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 15:57:19 +0530 Subject: [PATCH 09/14] Update get-identity-hash.ts --- apps/web/lib/middleware/utils/get-identity-hash.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/web/lib/middleware/utils/get-identity-hash.ts b/apps/web/lib/middleware/utils/get-identity-hash.ts index 7cbf14e3b65..908fe1ee967 100644 --- a/apps/web/lib/middleware/utils/get-identity-hash.ts +++ b/apps/web/lib/middleware/utils/get-identity-hash.ts @@ -7,6 +7,8 @@ import { DUB_TEST_IDENTITY_HEADER } from "tests/utils/resource"; * Combine IP + UA to create a unique identifier for the user (for deduplication) */ export async function getIdentityHash(req: Request) { + console.log("getIdentityHash", process.env.NODE_ENV) + // If provided, use this identity directly (for E2E) if ( process.env.NODE_ENV === "test" || From 35da2aa84bdca8f99b8faf8787da11a3fb184a6e Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 16:03:55 +0530 Subject: [PATCH 10/14] Update detect-record-fraud-event.ts --- apps/web/lib/api/fraud/detect-record-fraud-event.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/web/lib/api/fraud/detect-record-fraud-event.ts b/apps/web/lib/api/fraud/detect-record-fraud-event.ts index 0e9543216a5..acb7b034a02 100644 --- a/apps/web/lib/api/fraud/detect-record-fraud-event.ts +++ b/apps/web/lib/api/fraud/detect-record-fraud-event.ts @@ -10,9 +10,16 @@ import { createFraudEventGroupKey } from "./utils"; export async function detectAndRecordFraudEvent(context: FraudEventContext) { const result = fraudEventContext.safeParse(context); - console.debug("detectAndRecordFraudEvent", JSON.stringify(context, null, 2), result); + console.debug( + "detectAndRecordFraudEvent", + JSON.stringify(context, null, 2), + result, + ); if (!result.success) { + console.error( + `[detectAndRecordFraudEvent] Invalid context ${result.error}`, + ); return; } From 78bc4137018c795cff55f593884e28d9982531d3 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 16:12:38 +0530 Subject: [PATCH 11/14] Update detect-record-fraud-event.ts --- apps/web/lib/api/fraud/detect-record-fraud-event.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/web/lib/api/fraud/detect-record-fraud-event.ts b/apps/web/lib/api/fraud/detect-record-fraud-event.ts index acb7b034a02..b196ecaec42 100644 --- a/apps/web/lib/api/fraud/detect-record-fraud-event.ts +++ b/apps/web/lib/api/fraud/detect-record-fraud-event.ts @@ -62,6 +62,10 @@ export async function detectAndRecordFraudEvent(context: FraudEventContext) { } if (triggeredRules.length === 0) { + console.debug( + `[detectAndRecordFraudEvents] No fraud events triggered for context`, + ); + return; } @@ -91,6 +95,10 @@ export async function detectAndRecordFraudEvent(context: FraudEventContext) { ); if (newEvents.length === 0) { + console.debug( + `[detectAndRecordFraudEvents] No new fraud events to record`, + ); + return; } From 235eaf7a567a4335d954651bb23e1877e085d98d Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 16:24:36 +0530 Subject: [PATCH 12/14] Update get-identity-hash.ts --- apps/web/lib/middleware/utils/get-identity-hash.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/lib/middleware/utils/get-identity-hash.ts b/apps/web/lib/middleware/utils/get-identity-hash.ts index 908fe1ee967..d2b6906ec89 100644 --- a/apps/web/lib/middleware/utils/get-identity-hash.ts +++ b/apps/web/lib/middleware/utils/get-identity-hash.ts @@ -7,7 +7,7 @@ import { DUB_TEST_IDENTITY_HEADER } from "tests/utils/resource"; * Combine IP + UA to create a unique identifier for the user (for deduplication) */ export async function getIdentityHash(req: Request) { - console.log("getIdentityHash", process.env.NODE_ENV) + console.log("getIdentityHash", process.env.VERCEL_ENV) // If provided, use this identity directly (for E2E) if ( From deeb26c05d8917f993f58f3cc260a8e0b6eeec52 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 16:26:19 +0530 Subject: [PATCH 13/14] Update get-identity-hash.ts --- apps/web/lib/middleware/utils/get-identity-hash.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/lib/middleware/utils/get-identity-hash.ts b/apps/web/lib/middleware/utils/get-identity-hash.ts index d2b6906ec89..1cc90a24286 100644 --- a/apps/web/lib/middleware/utils/get-identity-hash.ts +++ b/apps/web/lib/middleware/utils/get-identity-hash.ts @@ -7,12 +7,12 @@ import { DUB_TEST_IDENTITY_HEADER } from "tests/utils/resource"; * Combine IP + UA to create a unique identifier for the user (for deduplication) */ export async function getIdentityHash(req: Request) { - console.log("getIdentityHash", process.env.VERCEL_ENV) + console.log("getIdentityHash", process.env.VERCEL_ENV); // If provided, use this identity directly (for E2E) if ( - process.env.NODE_ENV === "test" || - process.env.NODE_ENV === "development" + process.env.NODE_ENV === "development" || + process.env.VERCEL_ENV === "preview" ) { const testOverride = req.headers.get(DUB_TEST_IDENTITY_HEADER); From 53e05173756e2ebc35f5adc801ccf31610ea626e Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 26 Nov 2025 16:44:30 +0530 Subject: [PATCH 14/14] Revert --- .../lib/api/fraud/detect-record-fraud-event.ts | 18 ------------------ .../lib/middleware/utils/get-identity-hash.ts | 2 -- 2 files changed, 20 deletions(-) diff --git a/apps/web/lib/api/fraud/detect-record-fraud-event.ts b/apps/web/lib/api/fraud/detect-record-fraud-event.ts index b196ecaec42..62aaccf96c0 100644 --- a/apps/web/lib/api/fraud/detect-record-fraud-event.ts +++ b/apps/web/lib/api/fraud/detect-record-fraud-event.ts @@ -10,12 +10,6 @@ import { createFraudEventGroupKey } from "./utils"; export async function detectAndRecordFraudEvent(context: FraudEventContext) { const result = fraudEventContext.safeParse(context); - console.debug( - "detectAndRecordFraudEvent", - JSON.stringify(context, null, 2), - result, - ); - if (!result.success) { console.error( `[detectAndRecordFraudEvent] Invalid context ${result.error}`, @@ -62,10 +56,6 @@ export async function detectAndRecordFraudEvent(context: FraudEventContext) { } if (triggeredRules.length === 0) { - console.debug( - `[detectAndRecordFraudEvents] No fraud events triggered for context`, - ); - return; } @@ -95,17 +85,9 @@ export async function detectAndRecordFraudEvent(context: FraudEventContext) { ); if (newEvents.length === 0) { - console.debug( - `[detectAndRecordFraudEvents] No new fraud events to record`, - ); - return; } - console.log( - `[detectAndRecordFraudEvents] fraud events detected ${JSON.stringify(newEvents, null, 2)}`, - ); - await prisma.fraudEvent.createMany({ data: newEvents.map((event) => ({ id: createId({ prefix: "fre_" }), diff --git a/apps/web/lib/middleware/utils/get-identity-hash.ts b/apps/web/lib/middleware/utils/get-identity-hash.ts index 1cc90a24286..4ef076bd688 100644 --- a/apps/web/lib/middleware/utils/get-identity-hash.ts +++ b/apps/web/lib/middleware/utils/get-identity-hash.ts @@ -7,8 +7,6 @@ import { DUB_TEST_IDENTITY_HEADER } from "tests/utils/resource"; * Combine IP + UA to create a unique identifier for the user (for deduplication) */ export async function getIdentityHash(req: Request) { - console.log("getIdentityHash", process.env.VERCEL_ENV); - // If provided, use this identity directly (for E2E) if ( process.env.NODE_ENV === "development" ||