/** * 邀请码验证服务 */ import * as vscode from 'vscode'; import { verifyInvitationCode, checkInvitationStatus } from './apiClient'; /** * 邀请码验证服务类 */ export class InvitationService { /** * 检查用户是否已验证邀请码 */ static async isVerified(context: vscode.ExtensionContext): Promise { // 【临时】使用本地验证,不调用后端 const localVerified = context.globalState.get('invitationCodeVerified'); return localVerified || false; } /** * 验证邀请码 */ static async verifyCode(code: string): Promise<{ success: boolean; message: string }> { try { console.log('[InvitationService] ========== 开始验证邀请码 =========='); console.log('[InvitationService] 邀请码:', code); console.log('[InvitationService] 邀请码长度:', code.length); const response = await verifyInvitationCode(code); console.log('[InvitationService] 收到响应:', JSON.stringify(response, null, 2)); console.log('[InvitationService] 响应代码:', response.code); console.log('[InvitationService] 响应消息:', response.msg); console.log('[InvitationService] 验证结果:', response.data?.verified); if (response.code === 200 && response.data?.verified) { console.log('[InvitationService] ✓ 验证成功'); return { success: true, message: response.msg || '验证成功' }; } else { console.log('[InvitationService] ✗ 验证失败'); return { success: false, message: response.msg || '验证失败' }; } } catch (error: any) { console.error('[InvitationService] ========== 验证邀请码异常 =========='); console.error('[InvitationService] 错误类型:', error.constructor.name); console.error('[InvitationService] 错误消息:', error.message); console.error('[InvitationService] 错误堆栈:', error.stack); return { success: false, message: error.message || '网络连接失败,请检查网络后重试' }; } } /** * 保存验证状态到本地 */ static async saveVerificationStatus( context: vscode.ExtensionContext, code: string, verifiedTime?: string ): Promise { await context.globalState.update('invitationCodeVerified', true); await context.globalState.update('invitationCode', code); await context.globalState.update('invitationVerifiedTime', verifiedTime || new Date().toISOString()); } /** * 清除验证状态(用于退出登录或更换邀请码) */ static async clearVerificationStatus(context: vscode.ExtensionContext): Promise { await context.globalState.update('invitationCodeVerified', undefined); await context.globalState.update('invitationCode', undefined); await context.globalState.update('invitationVerifiedTime', undefined); } /** * 显示邀请码输入弹窗 */ static async showInputDialog(): Promise { const code = await vscode.window.showInputBox({ prompt: '请输入邀请码以继续使用 IC Coder', placeHolder: '例如:INVITE2024ABC', ignoreFocusOut: true, validateInput: (value) => { if (!value || value.trim().length === 0) { return '邀请码不能为空'; } if (value.trim().length < 6) { return '邀请码格式不正确'; } return null; } }); return code?.trim(); } }