feat(auth): implement Facebook identity binding on external entry

This commit is contained in:
2026-07-13 15:02:01 +08:00
parent 2ebf5b9e97
commit fd631168c8
11 changed files with 278 additions and 40 deletions
+28
View File
@@ -3,6 +3,7 @@
import { AuthStorage } from "@/data/storage/auth/auth_storage";
import { UserStorage } from "@/data/storage/user/user_storage";
import type { PendingChatPromotionType } from "@/data/storage/navigation";
import type { LoginStatus } from "@/data/dto/auth";
import { ROUTES } from "@/router/routes";
export type ExternalEntryTarget =
@@ -26,6 +27,33 @@ export interface ExternalEntryPromotionInput {
promotionType?: string | null;
}
export interface ExternalFacebookIdentityBindingInput {
hasInitialized: boolean;
isLoading: boolean;
loginStatus: LoginStatus;
asid?: string | null;
psid?: string | null;
}
export function shouldBindExternalFacebookIdentity({
hasInitialized,
isLoading,
loginStatus,
asid,
psid,
}: ExternalFacebookIdentityBindingInput): boolean {
const isRealUser =
loginStatus === "email" ||
loginStatus === "google" ||
loginStatus === "facebook";
return (
hasInitialized &&
!isLoading &&
isRealUser &&
(hasValue(asid) || hasValue(psid))
);
}
export function resolveExternalEntryPromotionType({
mode,
promotionType,