nfx-ui 0.27.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","names":[],"sources":["../../src/hooks/auth.ts"],"sourcesContent":["/**\n * Auth hooks — 组件勿直接调 apis/auth\n */\nimport type { AxiosError } from \"axios\";\nimport type { CurrentProfileResult, Login, Profile, Signup } from \"nfx-ui/types\";\n\nimport { useEffect } from \"react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthRepository } from \"nfx-ui/apis/repositories\";\nimport { AUTH_EMAILS, AUTH_ME, AUTH_PHONES, AUTH_PROFILES } from \"nfx-ui/constants\";\nimport { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from \"nfx-ui/enums\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { systemEventEmitter } from \"nfx-ui/events/system\";\nimport {\n AuthStore,\n clearAuth,\n EMPTY_PROFILE_ID,\n hasSelectedProfile,\n setCurrentAccountId,\n setCurrentProfileId,\n setCurrentProfileKind,\n setIsAuthValid,\n setTokens,\n useAuthStore,\n} from \"nfx-ui/stores/auth\";\nimport { ensureDeviceIdStorage } from \"nfx-ui/stores/system\";\nimport { getApiErrorMessage } from \"nfx-ui/utils/apiError\";\nimport { pickProfile } from \"nfx-ui/utils/domain/account\";\nimport { useUnifiedQuery } from \"nfx-ui/utils/factory\";\nimport { safeOr, safeStringable } from \"nfx-ui/utils/safe\";\nimport { useTranslation } from \"react-i18next\";\n\nexport function useAuthQueryScope() {\n const aID = useAuthStore((s) => s.currentAccountId);\n const pID = useAuthStore((s) => s.currentProfileId);\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const kind = useAuthStore((s) => s.currentProfileKind);\n return { aID, pID, isAuthValid, kind, profileScope: kind };\n}\n\nfunction useLogoutOnAuthError(isError: boolean, aID: string) {\n useEffect(() => {\n if (!isError || !AuthStore.getState().isAuthValid) return;\n if (!hasSelectedProfile(AuthStore.getState().currentProfileId)) return;\n authEventEmitter.emit(authEvents.LOGOUT, aID);\n clearAuth();\n }, [isError, aID]);\n}\n\nexport function useCurrentProfile(): CurrentProfileResult {\n const auth = useAuthRepository();\n const { aID, pID, isAuthValid, kind } = useAuthQueryScope();\n const result = useUnifiedQuery(\n ({ kind }: { kind: ProfileKindEnum }) => auth.GetCurrentFullAccountInformationWithProfile(kind),\n AUTH_ME(aID, pID),\n { kind },\n { enabled: isAuthValid && hasSelectedProfile(pID) },\n );\n useLogoutOnAuthError(result.isError, aID);\n return {\n kind,\n data: result.data,\n profile: pickProfile(kind, result.data),\n isLoading: result.isLoading,\n isError: result.isError,\n refetch: result.refetch,\n } as CurrentProfileResult;\n}\n\nexport const useSendVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (params: Signup.Request.SendVerificationCode) => auth.SendVerificationCode(params),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendVerificationCode] error\"));\n },\n });\n};\n\nexport const useSignupWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({\n rememberMe,\n ...params\n }: {\n rememberMe: boolean;\n } & Omit<Signup.Request.SignupWithEmail, \"deviceId\">): Promise<Signup.Response.SignupWithEmail & { profileId?: string }> => {\n const deviceId = await ensureDeviceIdStorage();\n const result = await auth.SignupWithEmail({\n ...params,\n deviceId,\n });\n const first = result.profiles?.find((p) => p.kind === ProfileKindEnum.FORGER) ?? result.profiles?.[0];\n if (!first) return result;\n const selected = await auth.SelectProfile({\n profileId: first.profileId,\n kind: first.kind,\n deviceId,\n });\n return { ...result, accessToken: selected.accessToken, refreshToken: selected.refreshToken, profileId: selected.profileId };\n },\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n if (result.profileId) {\n setCurrentProfileId(result.profileId);\n setCurrentProfileKind(ProfileKindEnum.FORGER);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } else {\n setCurrentProfileId(EMPTY_PROFILE_ID);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSignup] error\"));\n },\n });\n};\n\nexport const useLoginWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { email: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithEmail({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLogin] error\"));\n },\n });\n};\n\nexport const useSelectProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>\n auth.SelectProfile({\n profileId,\n kind,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (result?.accessToken) {\n setTokens({\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n });\n setCurrentProfileKind(variables.kind);\n if (result.profileId) setCurrentProfileId(result.profileId);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSelectProfile] error\"));\n },\n });\n};\n\nexport const usePatchProfile = (options?: { silent?: boolean }) => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const silent = safeOr(options?.silent, false);\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfile) => auth.PatchProfile(kind, body),\n onSuccess: () => {\n if (!silent) systemEventEmitter.showSuccess(t(\"saveSuccess\", { defaultValue: \"Saved\" }));\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind });\n },\n onError: (error: AxiosError) => {\n if (!silent) systemEventEmitter.showError(getApiErrorMessage(error, \"[usePatchProfile] error\"));\n },\n });\n};\n\nexport const useUpdateProfileSettings = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateProfileSettings] error\"));\n },\n });\n};\n\nexport const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.ListProfiles(kind, { limit: 50, offset: 0 }),\n AUTH_PROFILES(aID, kind),\n undefined,\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useCreateForgerProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateForgerProfile) => auth.CreateForgerProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.FORGER });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateForgerProfile] error\"));\n },\n });\n};\n\nexport const useCreateAuthorityProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateAuthorityProfile) => auth.CreateAuthorityProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.AUTHORITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateAuthorityProfile] error\"));\n },\n });\n};\n\nexport const useDeleteProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: ({ kind, profileId }: { kind: ProfileKindEnum; profileId: string }) => auth.DeleteProfile(kind, profileId),\n onSuccess: (_void, variables) => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: variables.kind });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteProfile] error\"));\n },\n });\n};\n\nexport const useConfirmProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileAvatar] error\"));\n },\n });\n};\n\nexport const useClearProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: () => auth.ClearProfileAvatar(kind),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useClearProfileAvatar] error\"));\n },\n });\n};\n\nexport const useListEmails = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListEmails({ limit: 50, offset: 0 }), AUTH_EMAILS(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useListPhones = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListPhones({ limit: 50, offset: 0 }), AUTH_PHONES(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useCreateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreateEmail) => auth.CreateEmail(body),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"createEmailSuccess\", { defaultValue: \"Email added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateEmail] error\"));\n },\n });\n};\n\nexport const useSendEmailVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, lang }: { emailId: string; lang?: LanguageEnum }) => auth.SendEmailVerificationCode(emailId, { lang }),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendEmailVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, verificationCode }: { emailId: string; verificationCode: string }) =>\n auth.VerifyEmail(emailId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"verifyEmailSuccess\", { defaultValue: \"Email verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyEmail] error\"));\n },\n });\n};\n\nexport const useUpdateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, email }: { emailId: string; email: string }) => auth.UpdateEmail(emailId, { email }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"updateEmailSuccess\", { defaultValue: \"Email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateEmail] error\"));\n },\n });\n};\n\nexport const useSetPrimaryEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.SetPrimaryEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryEmailSuccess\", { defaultValue: \"Primary email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryEmail] error\"));\n },\n });\n};\n\nexport const useDeleteEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.DeleteEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"deleteEmailSuccess\", { defaultValue: \"Email removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteEmail] error\"));\n },\n });\n};\n\nexport const useSendChangePasswordVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.SendChangePasswordVerificationCode = {}) => auth.SendChangePasswordVerificationCode(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendChangePasswordVerificationCode] error\"));\n },\n });\n};\n\nexport const useChangePassword = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.ChangePassword) => auth.ChangePassword(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"changePasswordSuccess\", { defaultValue: \"Password updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useChangePassword] error\"));\n },\n });\n};\n\nexport const useConfirmProfileBackgrounds = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileBackgrounds) => auth.ConfirmProfileBackgrounds(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileBackgrounds] error\"));\n },\n });\n};\n\nexport { hasSelectedProfile, AuthStore, useAuthStore };\nexport { LanguageEnum, AuthSignupPlatformEnum };\n"],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","names":[],"sources":["../../src/hooks/auth.ts"],"sourcesContent":["/**\n * Auth hooks — 组件勿直接调 apis/auth\n */\nimport type { AxiosError } from \"axios\";\nimport type { CurrentProfileResult, Login, Profile, Signup } from \"nfx-ui/types\";\n\nimport { useEffect } from \"react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthRepository } from \"nfx-ui/apis/repositories\";\nimport { AUTH_EMAILS, AUTH_ME, AUTH_OWNER_AUTHORITIES, AUTH_OWNER_FORGERS, AUTH_PHONES, AUTH_PROFILE_SEARCH, AUTH_PROFILES, AUTH_PUBLIC_CARD } from \"nfx-ui/constants\";\nimport { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from \"nfx-ui/enums\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { systemEventEmitter } from \"nfx-ui/events/system\";\nimport {\n AuthStore,\n clearAuth,\n EMPTY_PROFILE_ID,\n hasSelectedProfile,\n setCurrentAccountId,\n setCurrentProfileId,\n setCurrentProfileKind,\n setIsAuthValid,\n setTokens,\n useAuthStore,\n} from \"nfx-ui/stores/auth\";\nimport { ensureDeviceIdStorage } from \"nfx-ui/stores/system\";\nimport { getApiErrorMessage } from \"nfx-ui/utils/apiError\";\nimport { pickProfile } from \"nfx-ui/utils/domain/account\";\nimport { useUnifiedQuery } from \"nfx-ui/utils/factory\";\nimport { safeOr, safeStringable } from \"nfx-ui/utils/safe\";\nimport { useTranslation } from \"react-i18next\";\n\nexport function useAuthQueryScope() {\n const aID = useAuthStore((s) => s.currentAccountId);\n const pID = useAuthStore((s) => s.currentProfileId);\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const kind = useAuthStore((s) => s.currentProfileKind);\n return { aID, pID, isAuthValid, kind, profileScope: kind };\n}\n\nfunction useLogoutOnAuthError(isError: boolean, aID: string) {\n useEffect(() => {\n if (!isError || !AuthStore.getState().isAuthValid) return;\n if (!hasSelectedProfile(AuthStore.getState().currentProfileId)) return;\n authEventEmitter.emit(authEvents.LOGOUT, aID);\n clearAuth();\n }, [isError, aID]);\n}\n\nexport function useCurrentProfile(): CurrentProfileResult {\n const auth = useAuthRepository();\n const { aID, pID, isAuthValid, kind } = useAuthQueryScope();\n const result = useUnifiedQuery(\n ({ kind }: { kind: ProfileKindEnum }) => auth.GetCurrentFullAccountInformationWithProfile(kind),\n AUTH_ME(aID, pID),\n { kind },\n { enabled: isAuthValid && hasSelectedProfile(pID) },\n );\n useLogoutOnAuthError(result.isError, aID);\n return {\n kind,\n data: result.data,\n profile: pickProfile(kind, result.data),\n isLoading: result.isLoading,\n isError: result.isError,\n refetch: result.refetch,\n } as CurrentProfileResult;\n}\n\nexport const useSendVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (params: Signup.Request.SendVerificationCode) => auth.SendVerificationCode(params),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendVerificationCode] error\"));\n },\n });\n};\n\nexport const useSignupWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({\n rememberMe,\n ...params\n }: {\n rememberMe: boolean;\n } & Omit<Signup.Request.SignupWithEmail, \"deviceId\">): Promise<Signup.Response.SignupWithEmail & { profileId?: string }> => {\n const deviceId = await ensureDeviceIdStorage();\n const result = await auth.SignupWithEmail({\n ...params,\n deviceId,\n });\n const first = result.profiles?.find((p) => p.kind === ProfileKindEnum.FORGER) ?? result.profiles?.[0];\n if (!first) return result;\n const selected = await auth.SelectProfile({\n profileId: first.profileId,\n kind: first.kind,\n deviceId,\n });\n return { ...result, accessToken: selected.accessToken, refreshToken: selected.refreshToken, profileId: selected.profileId };\n },\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n if (result.profileId) {\n setCurrentProfileId(result.profileId);\n setCurrentProfileKind(ProfileKindEnum.FORGER);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } else {\n setCurrentProfileId(EMPTY_PROFILE_ID);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSignup] error\"));\n },\n });\n};\n\nexport const useLoginWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { email: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithEmail({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLogin] error\"));\n },\n });\n};\n\nexport const useLoginWithPhone = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { phone: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithPhone({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLoginWithPhone] error\"));\n },\n });\n};\n\nexport const useSelectProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>\n auth.SelectProfile({\n profileId,\n kind,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (result?.accessToken) {\n setTokens({\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n });\n setCurrentProfileKind(variables.kind);\n if (result.profileId) setCurrentProfileId(result.profileId);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSelectProfile] error\"));\n },\n });\n};\n\nexport const usePatchProfile = (options?: { silent?: boolean }) => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const silent = safeOr(options?.silent, false);\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfile) => auth.PatchProfile(kind, body),\n onSuccess: () => {\n if (!silent) systemEventEmitter.showSuccess(t(\"saveSuccess\", { defaultValue: \"Saved\" }));\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind });\n },\n onError: (error: AxiosError) => {\n if (!silent) systemEventEmitter.showError(getApiErrorMessage(error, \"[usePatchProfile] error\"));\n },\n });\n};\n\nexport const useUpdateProfileSettings = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n systemEventEmitter.showSuccess(t(\"updateSettingsSuccess\", { defaultValue: \"Settings updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateProfileSettings] error\"));\n },\n });\n};\n\nexport const useUpdatePreference = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (preference: string) => auth.UpdatePreference(kind, preference),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdatePreference] error\"));\n },\n });\n};\n\nexport const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.ListProfiles(kind, { limit: 50, offset: 0 }),\n AUTH_PROFILES(aID, kind),\n undefined,\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useCreateForgerProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateForgerProfile) => auth.CreateForgerProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.FORGER });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateForgerProfile] error\"));\n },\n });\n};\n\nexport const useCreateAuthorityProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateAuthorityProfile) => auth.CreateAuthorityProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.AUTHORITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateAuthorityProfile] error\"));\n },\n });\n};\n\nexport const useDeleteProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: ({ kind, profileId }: { kind: ProfileKindEnum; profileId: string }) => auth.DeleteProfile(kind, profileId),\n onSuccess: (_void, variables) => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: variables.kind });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteProfile] error\"));\n },\n });\n};\n\nexport const useConfirmProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileAvatar] error\"));\n },\n });\n};\n\nexport const useClearProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: () => auth.ClearProfileAvatar(kind),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n systemEventEmitter.showSuccess(t(\"clearAvatarSuccess\", { defaultValue: \"Avatar removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useClearProfileAvatar] error\"));\n },\n });\n};\n\nexport const useListEmails = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListEmails({ limit: 50, offset: 0 }), AUTH_EMAILS(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useListPhones = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListPhones({ limit: 50, offset: 0 }), AUTH_PHONES(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useCreateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreateEmail) => auth.CreateEmail(body),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"createEmailSuccess\", { defaultValue: \"Email added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateEmail] error\"));\n },\n });\n};\n\nexport const useSendEmailVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, lang }: { emailId: string; lang?: LanguageEnum }) => auth.SendEmailVerificationCode(emailId, { lang }),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendEmailVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, verificationCode }: { emailId: string; verificationCode: string }) =>\n auth.VerifyEmail(emailId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"verifyEmailSuccess\", { defaultValue: \"Email verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyEmail] error\"));\n },\n });\n};\n\nexport const useUpdateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, email }: { emailId: string; email: string }) => auth.UpdateEmail(emailId, { email }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"updateEmailSuccess\", { defaultValue: \"Email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateEmail] error\"));\n },\n });\n};\n\nexport const useSetPrimaryEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.SetPrimaryEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryEmailSuccess\", { defaultValue: \"Primary email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryEmail] error\"));\n },\n });\n};\n\nexport const useDeleteEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.DeleteEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"deleteEmailSuccess\", { defaultValue: \"Email removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteEmail] error\"));\n },\n });\n};\n\nexport const useSendChangePasswordVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.SendChangePasswordVerificationCode = {}) => auth.SendChangePasswordVerificationCode(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendChangePasswordVerificationCode] error\"));\n },\n });\n};\n\nexport const useChangePassword = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.ChangePassword) => auth.ChangePassword(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"changePasswordSuccess\", { defaultValue: \"Password updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useChangePassword] error\"));\n },\n });\n};\n\nexport const useConfirmProfileBackgrounds = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileBackgrounds) => auth.ConfirmProfileBackgrounds(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileBackgrounds] error\"));\n },\n });\n};\n\nexport const useCreatePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreatePhone) => auth.CreatePhone(body),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"createPhoneSuccess\", { defaultValue: \"Phone added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreatePhone] error\"));\n },\n });\n};\n\nexport const useSendPhoneVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.SendPhoneVerificationCode(phoneId),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendPhoneVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyPhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ phoneId, verificationCode }: { phoneId: string; verificationCode: string }) =>\n auth.VerifyPhone(phoneId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"verifyPhoneSuccess\", { defaultValue: \"Phone verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyPhone] error\"));\n },\n });\n};\n\nexport const useUpdatePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ phoneId, phone }: { phoneId: string; phone: string }) => auth.UpdatePhone(phoneId, { phone }),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"updatePhoneSuccess\", { defaultValue: \"Phone updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdatePhone] error\"));\n },\n });\n};\n\nexport const useSetPrimaryPhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.SetPrimaryPhone(phoneId),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryPhoneSuccess\", { defaultValue: \"Primary phone updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryPhone] error\"));\n },\n });\n};\n\nexport const useDeletePhone = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (phoneId: string) => auth.DeletePhone(phoneId),\n onSuccess: () => {\n authEventEmitter.invalidatePhones(accountId);\n systemEventEmitter.showSuccess(t(\"deletePhoneSuccess\", { defaultValue: \"Phone removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeletePhone] error\"));\n },\n });\n};\n\nexport const useSearchForgerProfiles = (query: string) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.SearchForgerProfiles({ query: q, limit: 50, offset: 0 }),\n AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.FORGER, trimmed),\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },\n );\n};\n\nexport const useSearchAuthorityProfiles = (query: string) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.SearchAuthorityProfiles({ query: q, limit: 50, offset: 0 }),\n AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.AUTHORITY, trimmed),\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },\n );\n};\n\nexport const useGetPublicProfileCard = (profileId: string) => {\n const auth = useAuthRepository();\n const { isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.GetPublicProfileCard(profileId),\n AUTH_PUBLIC_CARD(profileId),\n undefined,\n { enabled: isAuthValid && Boolean(profileId) },\n );\n};\n\nexport const useListOwnerForgerProfiles = (query = \"\") => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.ListOwnerForgerProfiles({ limit: 50, offset: 0, query: q || undefined }),\n [...AUTH_OWNER_FORGERS(aID), trimmed],\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useListOwnerAuthorityProfiles = (query = \"\") => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n const trimmed = query.trim();\n return useUnifiedQuery(\n ({ query: q }) => auth.ListOwnerAuthorityProfiles({ limit: 50, offset: 0, query: q || undefined }),\n [...AUTH_OWNER_AUTHORITIES(aID), trimmed],\n { query: trimmed },\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useUpdateAuthorityProfileRoles = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ profileId, authorityRoles }: { profileId: string; authorityRoles: Profile.Request.UpdateAuthorityProfileRoles[\"authorityRoles\"] }) =>\n auth.UpdateAuthorityProfileRoles(profileId, { authorityRoles }),\n onSuccess: () => {\n authEventEmitter.invalidateOwner(accountId);\n systemEventEmitter.showSuccess(t(\"updateRolesSuccess\", { defaultValue: \"Roles updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateAuthorityProfileRoles] error\"));\n },\n });\n};\n\nexport { hasSelectedProfile, AuthStore, useAuthStore };\nexport { LanguageEnum, AuthSignupPlatformEnum };\n"],"mappings":"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"}
@@ -2,12 +2,12 @@ import { LanguageEnum as e } from "../enums/language.js";
2
2
  import { AuthSignupPlatformEnum as t } from "../enums/auth.js";
3
3
  import { AuthStore as n, hasSelectedProfile as r, useAuthStore as i } from "../stores/auth.js";
4
4
  import { makeCursorFetchFunction as a, makeStringCursorFetchFunction as o, useUnifiedInfiniteQuery as s, useUnifiedQuery as c, useUnifiedSuspenseInfiniteQuery as l, useUnifiedSuspenseQuery as u } from "../utils/factory/hooks.js";
5
- import { useConfirmImageUpload as d, useConfirmUpload as f, useDeleteAsset as p, useDeleteImage as m, useListAssets as h, usePrepareImageUpload as g, usePrepareUpload as _ } from "./asset.js";
6
- import { useAuthQueryScope as v, useChangePassword as y, useClearProfileAvatar as b, useConfirmProfileAvatar as x, useConfirmProfileBackgrounds as S, useCreateAuthorityProfile as C, useCreateEmail as w, useCreateForgerProfile as T, useCurrentProfile as E, useDeleteEmail as D, useDeleteProfile as O, useListEmails as k, useListPhones as A, useListProfiles as j, useLoginWithEmail as M, usePatchProfile as N, useSelectProfile as P, useSendChangePasswordVerificationCode as F, useSendEmailVerificationCode as I, useSendVerificationCode as L, useSetPrimaryEmail as R, useSignupWithEmail as z, useUpdateEmail as B, useUpdateProfileSettings as V, useVerifyEmail as H } from "./auth.js";
7
- import { useDebouncedValue as U, useLockDocumentScrollOnDesktop as W, useWheelHorizontalScroll as G } from "./dom.js";
8
- import { configurePreferenceSync as K, useApplyPreferenceOnLoad as q, useResolvedAppearance as J, useSyncPreference as Y } from "./preference.js";
9
- import { getBaseDisplayName as X, getLanguageDisplayName as Z, useBaseLabel as Q, useLanguageLabel as $ } from "../languages/hooks/useLanguageLabel.js";
10
- import { getLayoutDisplayName as ee, useLayoutLabel as te } from "../languages/hooks/useLayoutLabel.js";
11
- import { getPreferenceDisplayName as ne, usePreferenceLabel as re } from "../languages/hooks/usePreferenceLabel.js";
12
- import { getThemeDisplayName as ie, useThemeLabel as ae } from "../languages/hooks/useThemeLabel.js";
13
- export { t as AuthSignupPlatformEnum, n as AuthStore, e as LanguageEnum, K as configurePreferenceSync, X as getBaseDisplayName, Z as getLanguageDisplayName, ee as getLayoutDisplayName, ne as getPreferenceDisplayName, ie as getThemeDisplayName, r as hasSelectedProfile, a as makeCursorFetchFunction, o as makeStringCursorFetchFunction, q as useApplyPreferenceOnLoad, v as useAuthQueryScope, i as useAuthStore, Q as useBaseLabel, y as useChangePassword, b as useClearProfileAvatar, d as useConfirmImageUpload, x as useConfirmProfileAvatar, S as useConfirmProfileBackgrounds, f as useConfirmUpload, C as useCreateAuthorityProfile, w as useCreateEmail, T as useCreateForgerProfile, E as useCurrentProfile, U as useDebouncedValue, p as useDeleteAsset, D as useDeleteEmail, m as useDeleteImage, O as useDeleteProfile, $ as useLanguageLabel, te as useLayoutLabel, h as useListAssets, k as useListEmails, A as useListPhones, j as useListProfiles, W as useLockDocumentScrollOnDesktop, M as useLoginWithEmail, N as usePatchProfile, re as usePreferenceLabel, g as usePrepareImageUpload, _ as usePrepareUpload, J as useResolvedAppearance, P as useSelectProfile, F as useSendChangePasswordVerificationCode, I as useSendEmailVerificationCode, L as useSendVerificationCode, R as useSetPrimaryEmail, z as useSignupWithEmail, Y as useSyncPreference, ae as useThemeLabel, s as useUnifiedInfiniteQuery, c as useUnifiedQuery, l as useUnifiedSuspenseInfiniteQuery, u as useUnifiedSuspenseQuery, B as useUpdateEmail, V as useUpdateProfileSettings, H as useVerifyEmail, G as useWheelHorizontalScroll };
5
+ import { useAssetFileURL as d, useConfirmImageUpload as f, useConfirmUpload as p, useDeleteAsset as m, useDeleteImage as h, useListAssets as g, usePrepareImageUpload as _, usePrepareUpload as v } from "./asset.js";
6
+ import { useAuthQueryScope as y, useChangePassword as b, useClearProfileAvatar as x, useConfirmProfileAvatar as S, useConfirmProfileBackgrounds as C, useCreateAuthorityProfile as w, useCreateEmail as T, useCreateForgerProfile as E, useCreatePhone as D, useCurrentProfile as O, useDeleteEmail as k, useDeletePhone as A, useDeleteProfile as j, useGetPublicProfileCard as M, useListEmails as N, useListOwnerAuthorityProfiles as P, useListOwnerForgerProfiles as F, useListPhones as I, useListProfiles as L, useLoginWithEmail as R, useLoginWithPhone as z, usePatchProfile as B, useSearchAuthorityProfiles as V, useSearchForgerProfiles as H, useSelectProfile as U, useSendChangePasswordVerificationCode as W, useSendEmailVerificationCode as G, useSendPhoneVerificationCode as K, useSendVerificationCode as q, useSetPrimaryEmail as J, useSetPrimaryPhone as Y, useSignupWithEmail as X, useUpdateAuthorityProfileRoles as Z, useUpdateEmail as Q, useUpdatePhone as $, useUpdatePreference as ee, useUpdateProfileSettings as te, useVerifyEmail as ne, useVerifyPhone as re } from "./auth.js";
7
+ import { useDebouncedValue as ie, useLockDocumentScrollOnDesktop as ae, useWheelHorizontalScroll as oe } from "./dom.js";
8
+ import { configurePreferenceSync as se, useApplyPreferenceOnLoad as ce, useResolvedAppearance as le, useSyncPreference as ue } from "./preference.js";
9
+ import { getBaseDisplayName as de, getLanguageDisplayName as fe, useBaseLabel as pe, useLanguageLabel as me } from "../languages/hooks/useLanguageLabel.js";
10
+ import { getLayoutDisplayName as he, useLayoutLabel as ge } from "../languages/hooks/useLayoutLabel.js";
11
+ import { getPreferenceDisplayName as _e, usePreferenceLabel as ve } from "../languages/hooks/usePreferenceLabel.js";
12
+ import { getThemeDisplayName as ye, useThemeLabel as be } from "../languages/hooks/useThemeLabel.js";
13
+ export { t as AuthSignupPlatformEnum, n as AuthStore, e as LanguageEnum, se as configurePreferenceSync, de as getBaseDisplayName, fe as getLanguageDisplayName, he as getLayoutDisplayName, _e as getPreferenceDisplayName, ye as getThemeDisplayName, r as hasSelectedProfile, a as makeCursorFetchFunction, o as makeStringCursorFetchFunction, ce as useApplyPreferenceOnLoad, d as useAssetFileURL, y as useAuthQueryScope, i as useAuthStore, pe as useBaseLabel, b as useChangePassword, x as useClearProfileAvatar, f as useConfirmImageUpload, S as useConfirmProfileAvatar, C as useConfirmProfileBackgrounds, p as useConfirmUpload, w as useCreateAuthorityProfile, T as useCreateEmail, E as useCreateForgerProfile, D as useCreatePhone, O as useCurrentProfile, ie as useDebouncedValue, m as useDeleteAsset, k as useDeleteEmail, h as useDeleteImage, A as useDeletePhone, j as useDeleteProfile, M as useGetPublicProfileCard, me as useLanguageLabel, ge as useLayoutLabel, g as useListAssets, N as useListEmails, P as useListOwnerAuthorityProfiles, F as useListOwnerForgerProfiles, I as useListPhones, L as useListProfiles, ae as useLockDocumentScrollOnDesktop, R as useLoginWithEmail, z as useLoginWithPhone, B as usePatchProfile, ve as usePreferenceLabel, _ as usePrepareImageUpload, v as usePrepareUpload, le as useResolvedAppearance, V as useSearchAuthorityProfiles, H as useSearchForgerProfiles, U as useSelectProfile, W as useSendChangePasswordVerificationCode, G as useSendEmailVerificationCode, K as useSendPhoneVerificationCode, q as useSendVerificationCode, J as useSetPrimaryEmail, Y as useSetPrimaryPhone, X as useSignupWithEmail, ue as useSyncPreference, be as useThemeLabel, s as useUnifiedInfiniteQuery, c as useUnifiedQuery, l as useUnifiedSuspenseInfiniteQuery, u as useUnifiedSuspenseQuery, Z as useUpdateAuthorityProfileRoles, Q as useUpdateEmail, $ as useUpdatePhone, ee as useUpdatePreference, te as useUpdateProfileSettings, ne as useVerifyEmail, re as useVerifyPhone, oe as useWheelHorizontalScroll };
@@ -1,4 +1,4 @@
1
- import { createLoginSchema as e, useInitLoginForm as t } from "./loginSchema.js";
2
- import { createSignupSchema as n, useInitSignupForm as r } from "./signupSchema.js";
3
- import { buildUserProfileEditDefaults as i, createUserProfileBackgroundsFieldSchema as a, createUserProfileEditSchema as o, useInitUserProfileEditForm as s } from "./profileEditSchema.js";
4
- export { i as buildUserProfileEditDefaults, e as createLoginSchema, n as createSignupSchema, a as createUserProfileBackgroundsFieldSchema, o as createUserProfileEditSchema, t as useInitLoginForm, r as useInitSignupForm, s as useInitUserProfileEditForm };
1
+ import { createLoginSchema as e, createLoginWithPhoneSchema as t, useInitLoginForm as n, useInitLoginWithPhoneForm as r } from "./loginSchema.js";
2
+ import { createSignupSchema as i, useInitSignupForm as a } from "./signupSchema.js";
3
+ import { buildUserProfileEditDefaults as o, createUserProfileBackgroundsFieldSchema as s, createUserProfileEditSchema as c, useInitUserProfileEditForm as l } from "./profileEditSchema.js";
4
+ export { o as buildUserProfileEditDefaults, e as createLoginSchema, t as createLoginWithPhoneSchema, i as createSignupSchema, s as createUserProfileBackgroundsFieldSchema, c as createUserProfileEditSchema, n as useInitLoginForm, r as useInitLoginWithPhoneForm, a as useInitSignupForm, l as useInitUserProfileEditForm };
@@ -16,4 +16,19 @@ export declare const useInitLoginForm: () => import('react-hook-form').UseFormRe
16
16
  password: string;
17
17
  rememberMe?: boolean | undefined;
18
18
  }>;
19
+ export declare function createLoginWithPhoneSchema(t: TFunction): z.ZodObject<{
20
+ phone: z.ZodString;
21
+ password: z.ZodString;
22
+ rememberMe: z.ZodOptional<z.ZodBoolean>;
23
+ }, z.core.$strip>;
24
+ export type LoginWithPhoneFormData = z.infer<ReturnType<typeof createLoginWithPhoneSchema>>;
25
+ export declare const useInitLoginWithPhoneForm: () => import('react-hook-form').UseFormReturn<{
26
+ phone: string;
27
+ password: string;
28
+ rememberMe?: boolean | undefined;
29
+ }, any, {
30
+ phone: string;
31
+ password: string;
32
+ rememberMe?: boolean | undefined;
33
+ }>;
19
34
  //# sourceMappingURL=loginSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loginSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/loginSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS;;;;kBAM7C;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,gBAAgB;;;;;;;;EAa5B,CAAC"}
1
+ {"version":3,"file":"loginSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/loginSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS;;;;kBAM7C;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,gBAAgB;;;;;;;;EAa5B,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,SAAS;;;;kBAMtD;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC;AAE5F,eAAO,MAAM,yBAAyB;;;;;;;;EAarC,CAAC"}
@@ -22,7 +22,26 @@ var a = () => {
22
22
  }
23
23
  });
24
24
  };
25
+ function o(e) {
26
+ return r.object({
27
+ phone: r.string().min(1, e("form.validation.phoneRequired")).min(6, e("form.validation.phoneInvalid")),
28
+ password: r.string().min(1, e("form.validation.passwordRequired")),
29
+ rememberMe: r.boolean().optional()
30
+ });
31
+ }
32
+ var s = () => {
33
+ let { t: r } = e("pages.Account.Login"), i = o(r);
34
+ return n({
35
+ resolver: t(i),
36
+ mode: "onChange",
37
+ defaultValues: {
38
+ phone: "",
39
+ password: "",
40
+ rememberMe: !1
41
+ }
42
+ });
43
+ };
25
44
  //#endregion
26
- export { i as createLoginSchema, a as useInitLoginForm };
45
+ export { i as createLoginSchema, o as createLoginWithPhoneSchema, a as useInitLoginForm, s as useInitLoginWithPhoneForm };
27
46
 
28
47
  //# sourceMappingURL=loginSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loginSchema.js","names":[],"sources":["../../src/schemas/loginSchema.ts"],"sourcesContent":["import type { TFunction } from \"i18next\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { z } from \"zod\";\n\n/** 登录表单;校验文案来自 host `pages.Account.Login` → `form.validation.*` */\nexport function createLoginSchema(t: TFunction) {\n return z.object({\n email: z.string().min(1, t(\"form.validation.emailRequired\")).email(t(\"form.validation.emailInvalid\")),\n password: z.string().min(1, t(\"form.validation.passwordRequired\")),\n rememberMe: z.boolean().optional(),\n });\n}\n\nexport type LoginFormData = z.infer<ReturnType<typeof createLoginSchema>>;\n\nexport const useInitLoginForm = () => {\n const { t } = useTranslation(\"pages.Account.Login\");\n const schema = createLoginSchema(t);\n\n return useForm<LoginFormData>({\n resolver: zodResolver(schema),\n mode: \"onChange\",\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: false,\n },\n });\n};\n"],"mappings":";;;;;AAQA,SAAgB,EAAkB,GAAc;CAC9C,OAAO,EAAE,OAAO;EACd,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,+BAA+B,CAAC,CAAC,CAAC,MAAM,EAAE,8BAA8B,CAAC;EACpG,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,kCAAkC,CAAC;EACjE,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;CACnC,CAAC;AACH;AAIA,IAAa,UAAyB;CACpC,IAAM,EAAE,SAAM,EAAe,qBAAqB,GAC5C,IAAS,EAAkB,CAAC;CAElC,OAAO,EAAuB;EAC5B,UAAU,EAAY,CAAM;EAC5B,MAAM;EACN,eAAe;GACb,OAAO;GACP,UAAU;GACV,YAAY;EACd;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"loginSchema.js","names":[],"sources":["../../src/schemas/loginSchema.ts"],"sourcesContent":["import type { TFunction } from \"i18next\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { z } from \"zod\";\n\n/** 登录表单;校验文案来自 host `pages.Account.Login` → `form.validation.*` */\nexport function createLoginSchema(t: TFunction) {\n return z.object({\n email: z.string().min(1, t(\"form.validation.emailRequired\")).email(t(\"form.validation.emailInvalid\")),\n password: z.string().min(1, t(\"form.validation.passwordRequired\")),\n rememberMe: z.boolean().optional(),\n });\n}\n\nexport type LoginFormData = z.infer<ReturnType<typeof createLoginSchema>>;\n\nexport const useInitLoginForm = () => {\n const { t } = useTranslation(\"pages.Account.Login\");\n const schema = createLoginSchema(t);\n\n return useForm<LoginFormData>({\n resolver: zodResolver(schema),\n mode: \"onChange\",\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: false,\n },\n });\n};\n\nexport function createLoginWithPhoneSchema(t: TFunction) {\n return z.object({\n phone: z.string().min(1, t(\"form.validation.phoneRequired\")).min(6, t(\"form.validation.phoneInvalid\")),\n password: z.string().min(1, t(\"form.validation.passwordRequired\")),\n rememberMe: z.boolean().optional(),\n });\n}\n\nexport type LoginWithPhoneFormData = z.infer<ReturnType<typeof createLoginWithPhoneSchema>>;\n\nexport const useInitLoginWithPhoneForm = () => {\n const { t } = useTranslation(\"pages.Account.Login\");\n const schema = createLoginWithPhoneSchema(t);\n\n return useForm<LoginWithPhoneFormData>({\n resolver: zodResolver(schema),\n mode: \"onChange\",\n defaultValues: {\n phone: \"\",\n password: \"\",\n rememberMe: false,\n },\n });\n};\n"],"mappings":";;;;;AAQA,SAAgB,EAAkB,GAAc;CAC9C,OAAO,EAAE,OAAO;EACd,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,+BAA+B,CAAC,CAAC,CAAC,MAAM,EAAE,8BAA8B,CAAC;EACpG,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,kCAAkC,CAAC;EACjE,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;CACnC,CAAC;AACH;AAIA,IAAa,UAAyB;CACpC,IAAM,EAAE,SAAM,EAAe,qBAAqB,GAC5C,IAAS,EAAkB,CAAC;CAElC,OAAO,EAAuB;EAC5B,UAAU,EAAY,CAAM;EAC5B,MAAM;EACN,eAAe;GACb,OAAO;GACP,UAAU;GACV,YAAY;EACd;CACF,CAAC;AACH;AAEA,SAAgB,EAA2B,GAAc;CACvD,OAAO,EAAE,OAAO;EACd,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,+BAA+B,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,8BAA8B,CAAC;EACrG,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,kCAAkC,CAAC;EACjE,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;CACnC,CAAC;AACH;AAIA,IAAa,UAAkC;CAC7C,IAAM,EAAE,SAAM,EAAe,qBAAqB,GAC5C,IAAS,EAA2B,CAAC;CAE3C,OAAO,EAAgC;EACrC,UAAU,EAAY,CAAM;EAC5B,MAAM;EACN,eAAe;GACb,OAAO;GACP,UAAU;GACV,YAAY;EACd;CACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nfx-ui",
3
- "version": "0.27.0",
3
+ "version": "0.28.0",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "**/*.css",
@@ -13,3 +13,7 @@ export const AUTH_ME = (aID: string, pID: string): QueryKey => [aID, pID, DOMAIN
13
13
  export const AUTH_PROFILES = (aID: string, kind: ProfileKindEnum): QueryKey => [aID, DOMAIN_AUTH, kind, "list", "profiles"];
14
14
  export const AUTH_EMAILS = (aID: string): QueryKey => [aID, DOMAIN_AUTH, "list", "emails"];
15
15
  export const AUTH_PHONES = (aID: string): QueryKey => [aID, DOMAIN_AUTH, "list", "phones"];
16
+ export const AUTH_OWNER_FORGERS = (aID: string): QueryKey => [aID, DOMAIN_AUTH, "list", "owner-forgers"];
17
+ export const AUTH_OWNER_AUTHORITIES = (aID: string): QueryKey => [aID, DOMAIN_AUTH, "list", "owner-authorities"];
18
+ export const AUTH_PUBLIC_CARD = (profileId: string): QueryKey => [DOMAIN_AUTH, "item", "public-card", profileId];
19
+ export const AUTH_PROFILE_SEARCH = (aID: string, kind: ProfileKindEnum, query: string): QueryKey => [aID, DOMAIN_AUTH, kind, "list", "profile-search", query];
@@ -9,7 +9,9 @@ export const authEvents = defineEvents({
9
9
  LOGIN_SUCCESS: "AUTH:LOGIN_SUCCESS",
10
10
  LOGOUT: "AUTH:LOGOUT",
11
11
  INVALIDATE_EMAILS: "AUTH:INVALIDATE_EMAILS",
12
+ INVALIDATE_PHONES: "AUTH:INVALIDATE_PHONES",
12
13
  INVALIDATE_PROFILES: "AUTH:INVALIDATE_PROFILES",
14
+ INVALIDATE_OWNER: "AUTH:INVALIDATE_OWNER",
13
15
  });
14
16
 
15
17
  type AuthEvent = EventNamesOf<typeof authEvents>;
@@ -28,10 +30,18 @@ class AuthEventEmitter extends EventEmitter<AuthEvent> {
28
30
  this.emit(authEvents.INVALIDATE_EMAILS, aID);
29
31
  }
30
32
 
33
+ invalidatePhones(aID?: string) {
34
+ this.emit(authEvents.INVALIDATE_PHONES, aID);
35
+ }
36
+
31
37
  invalidateProfiles(payload: InvalidateProfilesPayload) {
32
38
  this.emit(authEvents.INVALIDATE_PROFILES, payload);
33
39
  }
34
40
 
41
+ invalidateOwner(aID?: string) {
42
+ this.emit(authEvents.INVALIDATE_OWNER, aID);
43
+ }
44
+
35
45
  logout() {
36
46
  this.emit(authEvents.LOGOUT);
37
47
  }
@@ -16,6 +16,11 @@ export type UseDeleteImageOptions = {
16
16
  ifShowError?: boolean;
17
17
  };
18
18
 
19
+ export const useAssetFileURL = () => {
20
+ const asset = useAssetRepository();
21
+ return (kind: Asset.Kind, id: string) => asset.FileURL(kind, id);
22
+ };
23
+
19
24
  export const usePrepareUpload = () => {
20
25
  const asset = useAssetRepository();
21
26
  return useMutation({
package/src/hooks/auth.ts CHANGED
@@ -7,7 +7,7 @@ import type { CurrentProfileResult, Login, Profile, Signup } from "nfx-ui/types"
7
7
  import { useEffect } from "react";
8
8
  import { useMutation } from "@tanstack/react-query";
9
9
  import { useAuthRepository } from "nfx-ui/apis/repositories";
10
- import { AUTH_EMAILS, AUTH_ME, AUTH_PHONES, AUTH_PROFILES } from "nfx-ui/constants";
10
+ import { AUTH_EMAILS, AUTH_ME, AUTH_OWNER_AUTHORITIES, AUTH_OWNER_FORGERS, AUTH_PHONES, AUTH_PROFILE_SEARCH, AUTH_PROFILES, AUTH_PUBLIC_CARD } from "nfx-ui/constants";
11
11
  import { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from "nfx-ui/enums";
12
12
  import { authEventEmitter, authEvents } from "nfx-ui/events/auth";
13
13
  import { systemEventEmitter } from "nfx-ui/events/system";
@@ -156,6 +156,33 @@ export const useLoginWithEmail = () => {
156
156
  });
157
157
  };
158
158
 
159
+ export const useLoginWithPhone = () => {
160
+ const auth = useAuthRepository();
161
+ return useMutation({
162
+ mutationFn: async ({ rememberMe, ...params }: { phone: string; password: string; rememberMe: boolean }) =>
163
+ auth.LoginWithPhone({
164
+ ...params,
165
+ deviceId: await ensureDeviceIdStorage(),
166
+ }),
167
+ onSuccess: (result, variables) => {
168
+ if (!result?.accessToken) return;
169
+ setCurrentProfileId(EMPTY_PROFILE_ID);
170
+ setTokens(
171
+ {
172
+ accessToken: result.accessToken,
173
+ refreshToken: safeStringable(result.refreshToken),
174
+ },
175
+ { rememberMe: variables.rememberMe },
176
+ );
177
+ setIsAuthValid(true);
178
+ if (result.accountId) setCurrentAccountId(result.accountId);
179
+ },
180
+ onError: (error: AxiosError) => {
181
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useLoginWithPhone] error"));
182
+ },
183
+ });
184
+ };
185
+
159
186
  export const useSelectProfile = () => {
160
187
  const auth = useAuthRepository();
161
188
  return useMutation({
@@ -203,14 +230,31 @@ export const usePatchProfile = (options?: { silent?: boolean }) => {
203
230
  export const useUpdateProfileSettings = () => {
204
231
  const auth = useAuthRepository();
205
232
  const { kind } = useAuthQueryScope();
233
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
206
234
  return useMutation({
207
235
  mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),
236
+ onSuccess: () => {
237
+ const aID = AuthStore.getState().currentAccountId;
238
+ authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);
239
+ systemEventEmitter.showSuccess(t("updateSettingsSuccess", { defaultValue: "Settings updated." }));
240
+ },
208
241
  onError: (error: AxiosError) => {
209
242
  systemEventEmitter.showError(getApiErrorMessage(error, "[useUpdateProfileSettings] error"));
210
243
  },
211
244
  });
212
245
  };
213
246
 
247
+ export const useUpdatePreference = () => {
248
+ const auth = useAuthRepository();
249
+ const { kind } = useAuthQueryScope();
250
+ return useMutation({
251
+ mutationFn: (preference: string) => auth.UpdatePreference(kind, preference),
252
+ onError: (error: AxiosError) => {
253
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useUpdatePreference] error"));
254
+ },
255
+ });
256
+ };
257
+
214
258
  export const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {
215
259
  const auth = useAuthRepository();
216
260
  const { aID, isAuthValid } = useAuthQueryScope();
@@ -269,6 +313,10 @@ export const useConfirmProfileAvatar = () => {
269
313
  const { kind } = useAuthQueryScope();
270
314
  return useMutation({
271
315
  mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),
316
+ onSuccess: () => {
317
+ const aID = AuthStore.getState().currentAccountId;
318
+ authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);
319
+ },
272
320
  onError: (error: AxiosError) => {
273
321
  systemEventEmitter.showError(getApiErrorMessage(error, "[useConfirmProfileAvatar] error"));
274
322
  },
@@ -278,8 +326,14 @@ export const useConfirmProfileAvatar = () => {
278
326
  export const useClearProfileAvatar = () => {
279
327
  const auth = useAuthRepository();
280
328
  const { kind } = useAuthQueryScope();
329
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
281
330
  return useMutation({
282
331
  mutationFn: () => auth.ClearProfileAvatar(kind),
332
+ onSuccess: () => {
333
+ const aID = AuthStore.getState().currentAccountId;
334
+ authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);
335
+ systemEventEmitter.showSuccess(t("clearAvatarSuccess", { defaultValue: "Avatar removed." }));
336
+ },
283
337
  onError: (error: AxiosError) => {
284
338
  systemEventEmitter.showError(getApiErrorMessage(error, "[useClearProfileAvatar] error"));
285
339
  },
@@ -441,5 +495,177 @@ export const useConfirmProfileBackgrounds = () => {
441
495
  });
442
496
  };
443
497
 
498
+ export const useCreatePhone = () => {
499
+ const auth = useAuthRepository();
500
+ const accountId = AuthStore.getState().currentAccountId;
501
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
502
+ return useMutation({
503
+ mutationFn: (body: Login.Request.CreatePhone) => auth.CreatePhone(body),
504
+ onSuccess: () => {
505
+ authEventEmitter.invalidatePhones(accountId);
506
+ systemEventEmitter.showSuccess(t("createPhoneSuccess", { defaultValue: "Phone added." }));
507
+ },
508
+ onError: (error: AxiosError) => {
509
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useCreatePhone] error"));
510
+ },
511
+ });
512
+ };
513
+
514
+ export const useSendPhoneVerificationCode = () => {
515
+ const auth = useAuthRepository();
516
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
517
+ return useMutation({
518
+ mutationFn: (phoneId: string) => auth.SendPhoneVerificationCode(phoneId),
519
+ onSuccess: () => {
520
+ systemEventEmitter.showSuccess(t("sendVerificationCodeSuccess", { defaultValue: "Code sent" }));
521
+ },
522
+ onError: (error: AxiosError) => {
523
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useSendPhoneVerificationCode] error"));
524
+ },
525
+ });
526
+ };
527
+
528
+ export const useVerifyPhone = () => {
529
+ const auth = useAuthRepository();
530
+ const accountId = AuthStore.getState().currentAccountId;
531
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
532
+ return useMutation({
533
+ mutationFn: ({ phoneId, verificationCode }: { phoneId: string; verificationCode: string }) =>
534
+ auth.VerifyPhone(phoneId, { verificationCode }),
535
+ onSuccess: () => {
536
+ authEventEmitter.invalidatePhones(accountId);
537
+ systemEventEmitter.showSuccess(t("verifyPhoneSuccess", { defaultValue: "Phone verified." }));
538
+ },
539
+ onError: (error: AxiosError) => {
540
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useVerifyPhone] error"));
541
+ },
542
+ });
543
+ };
544
+
545
+ export const useUpdatePhone = () => {
546
+ const auth = useAuthRepository();
547
+ const accountId = AuthStore.getState().currentAccountId;
548
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
549
+ return useMutation({
550
+ mutationFn: ({ phoneId, phone }: { phoneId: string; phone: string }) => auth.UpdatePhone(phoneId, { phone }),
551
+ onSuccess: () => {
552
+ authEventEmitter.invalidatePhones(accountId);
553
+ systemEventEmitter.showSuccess(t("updatePhoneSuccess", { defaultValue: "Phone updated." }));
554
+ },
555
+ onError: (error: AxiosError) => {
556
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useUpdatePhone] error"));
557
+ },
558
+ });
559
+ };
560
+
561
+ export const useSetPrimaryPhone = () => {
562
+ const auth = useAuthRepository();
563
+ const accountId = AuthStore.getState().currentAccountId;
564
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
565
+ return useMutation({
566
+ mutationFn: (phoneId: string) => auth.SetPrimaryPhone(phoneId),
567
+ onSuccess: () => {
568
+ authEventEmitter.invalidatePhones(accountId);
569
+ authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);
570
+ systemEventEmitter.showSuccess(t("setPrimaryPhoneSuccess", { defaultValue: "Primary phone updated." }));
571
+ },
572
+ onError: (error: AxiosError) => {
573
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useSetPrimaryPhone] error"));
574
+ },
575
+ });
576
+ };
577
+
578
+ export const useDeletePhone = () => {
579
+ const auth = useAuthRepository();
580
+ const accountId = AuthStore.getState().currentAccountId;
581
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
582
+ return useMutation({
583
+ mutationFn: (phoneId: string) => auth.DeletePhone(phoneId),
584
+ onSuccess: () => {
585
+ authEventEmitter.invalidatePhones(accountId);
586
+ systemEventEmitter.showSuccess(t("deletePhoneSuccess", { defaultValue: "Phone removed." }));
587
+ },
588
+ onError: (error: AxiosError) => {
589
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useDeletePhone] error"));
590
+ },
591
+ });
592
+ };
593
+
594
+ export const useSearchForgerProfiles = (query: string) => {
595
+ const auth = useAuthRepository();
596
+ const { aID, isAuthValid } = useAuthQueryScope();
597
+ const trimmed = query.trim();
598
+ return useUnifiedQuery(
599
+ ({ query: q }) => auth.SearchForgerProfiles({ query: q, limit: 50, offset: 0 }),
600
+ AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.FORGER, trimmed),
601
+ { query: trimmed },
602
+ { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },
603
+ );
604
+ };
605
+
606
+ export const useSearchAuthorityProfiles = (query: string) => {
607
+ const auth = useAuthRepository();
608
+ const { aID, isAuthValid } = useAuthQueryScope();
609
+ const trimmed = query.trim();
610
+ return useUnifiedQuery(
611
+ ({ query: q }) => auth.SearchAuthorityProfiles({ query: q, limit: 50, offset: 0 }),
612
+ AUTH_PROFILE_SEARCH(aID, ProfileKindEnum.AUTHORITY, trimmed),
613
+ { query: trimmed },
614
+ { enabled: isAuthValid && Boolean(aID) && trimmed.length > 0 },
615
+ );
616
+ };
617
+
618
+ export const useGetPublicProfileCard = (profileId: string) => {
619
+ const auth = useAuthRepository();
620
+ const { isAuthValid } = useAuthQueryScope();
621
+ return useUnifiedQuery(
622
+ () => auth.GetPublicProfileCard(profileId),
623
+ AUTH_PUBLIC_CARD(profileId),
624
+ undefined,
625
+ { enabled: isAuthValid && Boolean(profileId) },
626
+ );
627
+ };
628
+
629
+ export const useListOwnerForgerProfiles = (query = "") => {
630
+ const auth = useAuthRepository();
631
+ const { aID, isAuthValid } = useAuthQueryScope();
632
+ const trimmed = query.trim();
633
+ return useUnifiedQuery(
634
+ ({ query: q }) => auth.ListOwnerForgerProfiles({ limit: 50, offset: 0, query: q || undefined }),
635
+ [...AUTH_OWNER_FORGERS(aID), trimmed],
636
+ { query: trimmed },
637
+ { enabled: isAuthValid && Boolean(aID) },
638
+ );
639
+ };
640
+
641
+ export const useListOwnerAuthorityProfiles = (query = "") => {
642
+ const auth = useAuthRepository();
643
+ const { aID, isAuthValid } = useAuthQueryScope();
644
+ const trimmed = query.trim();
645
+ return useUnifiedQuery(
646
+ ({ query: q }) => auth.ListOwnerAuthorityProfiles({ limit: 50, offset: 0, query: q || undefined }),
647
+ [...AUTH_OWNER_AUTHORITIES(aID), trimmed],
648
+ { query: trimmed },
649
+ { enabled: isAuthValid && Boolean(aID) },
650
+ );
651
+ };
652
+
653
+ export const useUpdateAuthorityProfileRoles = () => {
654
+ const auth = useAuthRepository();
655
+ const accountId = AuthStore.getState().currentAccountId;
656
+ const { t } = useTranslation("hooks", { keyPrefix: "account" });
657
+ return useMutation({
658
+ mutationFn: ({ profileId, authorityRoles }: { profileId: string; authorityRoles: Profile.Request.UpdateAuthorityProfileRoles["authorityRoles"] }) =>
659
+ auth.UpdateAuthorityProfileRoles(profileId, { authorityRoles }),
660
+ onSuccess: () => {
661
+ authEventEmitter.invalidateOwner(accountId);
662
+ systemEventEmitter.showSuccess(t("updateRolesSuccess", { defaultValue: "Roles updated." }));
663
+ },
664
+ onError: (error: AxiosError) => {
665
+ systemEventEmitter.showError(getApiErrorMessage(error, "[useUpdateAuthorityProfileRoles] error"));
666
+ },
667
+ });
668
+ };
669
+
444
670
  export { hasSelectedProfile, AuthStore, useAuthStore };
445
671
  export { LanguageEnum, AuthSignupPlatformEnum };