diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 04ac8df9c7..f5ecd2a65a 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -409,11 +409,6 @@ "count": 1 } }, - "src/server/routers/lambda/user.ts": { - "sort-keys-fix/sort-keys-fix": { - "count": 2 - } - }, "src/server/routers/tools/mcp.ts": { "sort-keys-fix/sort-keys-fix": { "count": 1 diff --git a/eslint.config.mjs b/eslint.config.mjs index b4ad27c183..96f7ae3b24 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -61,6 +61,12 @@ export default eslint( 'react/no-unknown-property': 0, 'regexp/match-any': 0, 'unicorn/better-regex': 0, + }, + }, + // TypeScript files - enforce consistent type imports + { + files: ['**/*.{ts,tsx}'], + rules: { '@typescript-eslint/consistent-type-imports': [ 2, { @@ -76,6 +82,7 @@ export default eslint( rules: { ...mdxFlat.rules, '@typescript-eslint/no-unused-vars': 1, + 'mdx/remark': 0, 'no-undef': 0, 'react/jsx-no-undef': 0, 'react/no-unescaped-entities': 0, diff --git a/locales/en-US/error.json b/locales/en-US/error.json index bc93a9d801..76771c2d7b 100644 --- a/locales/en-US/error.json +++ b/locales/en-US/error.json @@ -9,18 +9,6 @@ "import.importConfigFile.title": "Import Failed", "import.incompatible.description": "This file was exported from a higher version. Please try upgrading to the latest version and then re-importing.", "import.incompatible.title": "Current application does not support importing this file", - "inviteCode.continue": "Continue", - "inviteCode.currentEmail": "Current account: {{email}}", - "inviteCode.desc": "An invite code is required to access LobeHub. Please enter a valid invite code to continue.", - "inviteCode.friends": "Ask a friend", - "inviteCode.joinUsOn": "Join us on", - "inviteCode.lookingForInvite": "Looking for an invite?", - "inviteCode.notYou": "Not you?", - "inviteCode.openingInStages": "is opening in stages.", - "inviteCode.placeholder": "Invite code or link", - "inviteCode.pleaseEnterCode": "Enter your invite code to continue.", - "inviteCode.switchAccount": "Switch account", - "inviteCode.title": "You're Almost In", "loginRequired.desc": "You will be redirected to the login page shortly", "loginRequired.title": "Please log in to use this feature", "notFound.backHome": "Back to Home", diff --git a/locales/zh-CN/error.json b/locales/zh-CN/error.json index d0e644ef60..5b76f0f7b6 100644 --- a/locales/zh-CN/error.json +++ b/locales/zh-CN/error.json @@ -9,18 +9,6 @@ "import.importConfigFile.title": "导入遇到了问题", "import.incompatible.description": "该文件由更高版本导出。请升级到最新版后再导入", "import.incompatible.title": "版本不兼容", - "inviteCode.continue": "继续", - "inviteCode.currentEmail": "当前账号:{{email}}", - "inviteCode.desc": "需要邀请码才能访问 LobeHub。请输入有效的邀请码以继续。", - "inviteCode.friends": "问问好友", - "inviteCode.joinUsOn": "关注我们", - "inviteCode.lookingForInvite": "需要邀请码?", - "inviteCode.notYou": "不是你?", - "inviteCode.openingInStages": "正在分阶段开放中。", - "inviteCode.placeholder": "输入邀请码或链接", - "inviteCode.pleaseEnterCode": "请输入邀请码以继续。", - "inviteCode.switchAccount": "切换账号", - "inviteCode.title": "即将完成", "loginRequired.desc": "将为你跳转到登录页。登录后即可继续", "loginRequired.title": "需要登录后继续", "notFound.backHome": "返回首页", diff --git a/packages/types/src/user/preference.ts b/packages/types/src/user/preference.ts index 91c51e9605..0a74e1a420 100644 --- a/packages/types/src/user/preference.ts +++ b/packages/types/src/user/preference.ts @@ -84,7 +84,6 @@ export interface UserInitializationState { hasConversation?: boolean; interests?: string[]; isFreePlan?: boolean; - isInviteCodeRequired?: boolean; /** @deprecated Use onboarding field instead */ isOnboard?: boolean; lastName?: string; diff --git a/scripts/lint-ts.sh b/scripts/lint-ts.sh index fe29d61398..8581f3973d 100755 --- a/scripts/lint-ts.sh +++ b/scripts/lint-ts.sh @@ -1,5 +1,5 @@ #!/bin/bash set -o pipefail -eslint "{src,tests}/**/*.{js,jsx,ts,tsx}" --fix --concurrency=auto --prune-suppressions -eslint "{src,tests}/**/*.{js,jsx,ts,tsx}" --concurrency=auto \ No newline at end of file +eslint src/ tests/ --fix --concurrency=auto --prune-suppressions +eslint src/ tests/ --concurrency=auto \ No newline at end of file diff --git a/src/business/server/user.ts b/src/business/server/user.ts index 3cd83fe93e..2935c8c56d 100644 --- a/src/business/server/user.ts +++ b/src/business/server/user.ts @@ -10,10 +10,6 @@ export async function getSubscriptionPlan(userId: string): Promise { return Plans.Free; } -export async function getIsInviteCodeRequired(userId: string): Promise { - return false; -} - export async function initNewUserForBusiness( userId: string, createdAt: Date | null | undefined, diff --git a/src/layout/GlobalProvider/useUserStateRedirect.ts b/src/layout/GlobalProvider/useUserStateRedirect.ts index 9b69883099..3a79c76d90 100644 --- a/src/layout/GlobalProvider/useUserStateRedirect.ts +++ b/src/layout/GlobalProvider/useUserStateRedirect.ts @@ -51,11 +51,6 @@ export const useDesktopUserStateRedirect = () => { return useCallback( (state: UserInitializationState) => { - if (state.isInviteCodeRequired === true) { - void openExternalAndLogout('/invite-code'); - return; - } - if (!getDesktopOnboardingCompleted()) return; // Desktop onboarding is handled by desktop-only flow. }, @@ -67,21 +62,6 @@ export const useWebUserStateRedirect = () => useCallback((state: UserInitializationState) => { const { pathname } = window.location; - if (state.isInviteCodeRequired === true) { - redirectIfNotOn(pathname, '/invite-code'); - return; - } - - // Redirect away from invite-code page if no longer required - // Skip redirect if force=true is present (for re-entering invite code) - if (pathname.startsWith('/invite-code')) { - const params = new URLSearchParams(window.location.search); - if (params.get('force') !== 'true') { - window.location.href = '/'; - return; - } - } - if (!onboardingSelectors.needsOnboarding(state)) return; redirectIfNotOn(pathname, '/onboarding'); diff --git a/src/locales/default/error.ts b/src/locales/default/error.ts index 32be9927ea..f3f77a0905 100644 --- a/src/locales/default/error.ts +++ b/src/locales/default/error.ts @@ -10,19 +10,6 @@ export default { 'import.incompatible.description': 'This file was exported from a higher version. Please try upgrading to the latest version and then re-importing.', 'import.incompatible.title': 'Current application does not support importing this file', - 'inviteCode.continue': 'Continue', - 'inviteCode.currentEmail': 'Current account: {{email}}', - 'inviteCode.desc': - 'An invite code is required to access LobeHub. Please enter a valid invite code to continue.', - 'inviteCode.friends': 'Ask a friend', - 'inviteCode.joinUsOn': 'Join us on', - 'inviteCode.lookingForInvite': 'Looking for an invite?', - 'inviteCode.notYou': 'Not you?', - 'inviteCode.openingInStages': 'is opening in stages.', - 'inviteCode.placeholder': 'Invite code or link', - 'inviteCode.pleaseEnterCode': 'Enter your invite code to continue.', - 'inviteCode.switchAccount': 'Switch account', - 'inviteCode.title': "You're Almost In", 'loginRequired.desc': 'You will be redirected to the login page shortly', 'loginRequired.title': 'Please log in to use this feature', 'notFound.backHome': 'Back to Home', diff --git a/src/server/routers/lambda/user.ts b/src/server/routers/lambda/user.ts index cb88e721ee..4ee23c1705 100644 --- a/src/server/routers/lambda/user.ts +++ b/src/server/routers/lambda/user.ts @@ -16,11 +16,7 @@ import { after } from 'next/server'; import { v4 as uuidv4 } from 'uuid'; import { z } from 'zod'; -import { - getIsInviteCodeRequired, - getReferralStatus, - getSubscriptionPlan, -} from '@/business/server/user'; +import { getReferralStatus, getSubscriptionPlan } from '@/business/server/user'; import { MessageModel } from '@/database/models/message'; import { SessionModel } from '@/database/models/session'; import { UserModel } from '@/database/models/user'; @@ -75,25 +71,17 @@ export const userRouter = router({ } // Run user state fetch and count queries in parallel - const [ - state, - messageCount, - hasExtraSession, - referralStatus, - subscriptionPlan, - isInviteCodeRequired, - ] = await Promise.all([ - ctx.userModel.getUserState(KeyVaultsGateKeeper.getUserKeyVaults), - ctx.messageModel.countUpTo(5), - ctx.sessionModel.hasMoreThanN(1), - getReferralStatus(ctx.userId), - getSubscriptionPlan(ctx.userId), - getIsInviteCodeRequired(ctx.userId), - ]); + const [state, messageCount, hasExtraSession, referralStatus, subscriptionPlan] = + await Promise.all([ + ctx.userModel.getUserState(KeyVaultsGateKeeper.getUserKeyVaults), + ctx.messageModel.countUpTo(5), + ctx.sessionModel.hasMoreThanN(1), + getReferralStatus(ctx.userId), + getSubscriptionPlan(ctx.userId), + ]); const hasMoreThan4Messages = messageCount > 4; const hasAnyMessages = messageCount > 0; - /* eslint-disable sort-keys-fix/sort-keys-fix */ return { avatar: state.avatar, canEnablePWAGuide: hasMoreThan4Messages, @@ -119,10 +107,8 @@ export const userRouter = router({ // business features referralStatus, subscriptionPlan, - isInviteCodeRequired, isFreePlan: !subscriptionPlan || subscriptionPlan === Plans.Free, } satisfies UserInitializationState; - /* eslint-enable sort-keys-fix/sort-keys-fix */ }), makeUserOnboarded: userProcedure.mutation(async ({ ctx }) => {