From 1e987207516f235efe5586afbd90376aa0c4c66c Mon Sep 17 00:00:00 2001 From: Kirill Date: Sun, 24 May 2026 12:24:42 +0500 Subject: [PATCH] feat: add isSyntheticEmail utility for detecting synthetic OAuth emails --- .../lib/__tests__/is-synthetic-email.test.ts | 24 +++++++++++++++++++ client/src/shared/lib/is-synthetic-email.ts | 5 ++++ 2 files changed, 29 insertions(+) create mode 100644 client/src/shared/lib/__tests__/is-synthetic-email.test.ts create mode 100644 client/src/shared/lib/is-synthetic-email.ts diff --git a/client/src/shared/lib/__tests__/is-synthetic-email.test.ts b/client/src/shared/lib/__tests__/is-synthetic-email.test.ts new file mode 100644 index 0000000..9aba977 --- /dev/null +++ b/client/src/shared/lib/__tests__/is-synthetic-email.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from 'vitest' +import { isSyntheticEmail } from '../is-synthetic-email' + +describe('isSyntheticEmail', () => { + it('returns true for vk.local domain', () => { + expect(isSyntheticEmail('vk_12345@vk.local')).toBe(true) + }) + + it('returns false for real email', () => { + expect(isSyntheticEmail('user@gmail.com')).toBe(false) + }) + + it('returns false for yandex email', () => { + expect(isSyntheticEmail('user@yandex.ru')).toBe(false) + }) + + it('returns false for empty string', () => { + expect(isSyntheticEmail('')).toBe(false) + }) + + it('returns false for email with vk.local as part of username', () => { + expect(isSyntheticEmail('vk.local@gmail.com')).toBe(false) + }) +}) diff --git a/client/src/shared/lib/is-synthetic-email.ts b/client/src/shared/lib/is-synthetic-email.ts new file mode 100644 index 0000000..a3060de --- /dev/null +++ b/client/src/shared/lib/is-synthetic-email.ts @@ -0,0 +1,5 @@ +const SYNTHETIC_DOMAINS = ['vk.local'] + +export function isSyntheticEmail(email: string): boolean { + return SYNTHETIC_DOMAINS.some((domain) => email.endsWith(`@${domain}`)) +}