From f2d4160db8005381f3cd053746d8aba4f7a262b5 Mon Sep 17 00:00:00 2001
From: kawamataryo <ryo.kawamata0425@gmail.com>
Date: Mon, 18 Nov 2024 11:22:30 +0900
Subject: [PATCH] fix: skip searching users with the "impersonation" label.

---
 src/lib/constants.ts       |  6 +++++-
 src/lib/searchBskyUsers.ts | 14 +++++++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index 542e2e6..d29e467 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -100,4 +100,8 @@ export const DOCUMENT_LINK = {
     "https://www.sky-follower-bridge.dev/troubleshooting.html#page-errors",
 } as const;
 
-export const BSKY_DOMAIN = process.env.PLASMO_PUBLIC_BSKY_DOMAIN || "bsky.social";
\ No newline at end of file
+export const BSKY_DOMAIN = process.env.PLASMO_PUBLIC_BSKY_DOMAIN || "bsky.social";
+
+export const BSKY_PROFILE_LABEL = {
+  IMPERSONATION: "impersonation",
+} as const;
diff --git a/src/lib/searchBskyUsers.ts b/src/lib/searchBskyUsers.ts
index 15b27e4..a49d7d0 100644
--- a/src/lib/searchBskyUsers.ts
+++ b/src/lib/searchBskyUsers.ts
@@ -2,6 +2,12 @@ import { isSimilarUser } from "~lib/bskyHelpers";
 import type { getAccountNameAndDisplayName } from "~lib/domHelpers";
 import { isOneSymbol } from "~lib/utils";
 import type { BskyServiceWorkerClient } from "./bskyServiceWorkerClient";
+import { BSKY_PROFILE_LABEL } from "./constants";
+import type { ProfileView } from "@atproto/api/dist/client/types/app/bsky/actor/defs";
+
+const isImpersonationUser = (user: ProfileView) => {
+  return user.labels.some((label) => label.val === BSKY_PROFILE_LABEL.IMPERSONATION);
+}
 
 export const searchBskyUser = async ({
   client,
@@ -25,11 +31,17 @@ export const searchBskyUser = async ({
     }
     try {
       const searchResults = await client.searchUser({
-        term: term,
+        term,
         limit: 3,
       });
 
       for (const searchResult of searchResults) {
+
+        // skip impersonation users
+        if (isImpersonationUser(searchResult)) {
+          continue;
+        }
+
         const { isSimilar: isUserFound, type } = isSimilarUser(
           // TODO: simplify
           {