From 92002ab19fdfb2477f04cb26b7360f3e281e0a77 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Fri, 1 May 2026 22:40:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=80=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=EF=BC=8C=E7=A7=BB=E9=99=A4=20nickname/avatar?= =?UTF-8?q?/expiresAt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/im/src/ImSDK.ts | 4 +-- src/index.ts | 2 +- src/sdk.ts | 66 ++-------------------------------------- 3 files changed, 4 insertions(+), 68 deletions(-) diff --git a/packages/im/src/ImSDK.ts b/packages/im/src/ImSDK.ts index 2313d29..80caf9d 100644 --- a/packages/im/src/ImSDK.ts +++ b/packages/im/src/ImSDK.ts @@ -286,7 +286,7 @@ export const ImSDK = { * Login to IM service. Fetches a token internally and opens the WebSocket connection. * Pass dbName to enable local SQLite message caching (requires @nozbe/watermelondb). */ - async login(userId: string, nickname?: string, avatar?: string, dbName?: string): Promise { + async login(userId: string, dbName?: string): Promise { const config = getConfig() const device = await getDeviceInfo() client?.disconnect() @@ -301,8 +301,6 @@ export const ImSDK = { brand: device.brand, model: device.model, osVersion: device.osVersion, - ...(nickname ? { nickname } : {}), - ...(avatar ? { avatar } : {}), }, }) await _saveToken(res.token) diff --git a/src/index.ts b/src/index.ts index 9392a96..fca3e66 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ export { XuqmSDK } from './sdk' -export type { UnifiedLoginOptions, UnifiedLoginRefreshResult } from './sdk' +export type { UnifiedLoginOptions } from './sdk' export type { XuqmInitOptions, DeviceInfo } from '@xuqm/rn-common' export { getDeviceId, getDeviceInfo, detectPushVendor, setUserId, getUserId } from '@xuqm/rn-common' export { ScaledImage } from '@xuqm/rn-common' diff --git a/src/sdk.ts b/src/sdk.ts index 3653e66..dad5230 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,39 +1,15 @@ import { _clearToken, setUserId as setCommonUserId, getUserId as getCommonUserId, XuqmSDK as CommonXuqmSDK } from '@xuqm/rn-common' import { ImSDK } from '@xuqm/rn-im' import { PushSDK } from '@xuqm/rn-push' -import type { UserProfile } from '@xuqm/rn-im' - -export interface UnifiedLoginRefreshResult { - userSig: string - expiresAt?: number -} export interface UnifiedLoginOptions { userId: string userSig: string - profile?: Pick - expiresAt?: number - refreshUserSig?: () => Promise } -type SessionState = UnifiedLoginOptions +let currentSession: UnifiedLoginOptions | null = null -const REFRESH_GRACE_MS = 5 * 60 * 1000 -const REFRESH_RETRY_MS = 30 * 1000 - -let currentSession: SessionState | null = null -let refreshTimer: ReturnType | null = null -let refreshInFlight = false - -function clearRefreshTimer(): void { - if (refreshTimer) { - clearTimeout(refreshTimer) - refreshTimer = null - } -} - -async function applyLoginSession(session: SessionState): Promise { - clearRefreshTimer() +async function applyLoginSession(session: UnifiedLoginOptions): Promise { setCommonUserId(session.userId) try { await ImSDK.loginWithUserSig(session.userId, session.userSig) @@ -48,42 +24,6 @@ async function applyLoginSession(session: SessionState): Promise { } catch (error) { void error } - scheduleRefresh() -} - -async function refreshSession(): Promise { - const session = currentSession - if (refreshInFlight || !session?.refreshUserSig) return - refreshInFlight = true - try { - const refreshed = await session.refreshUserSig() - if (currentSession !== session) return - await applyLoginSession({ - ...session, - userSig: refreshed.userSig, - expiresAt: refreshed.expiresAt ?? session.expiresAt, - }) - } catch (error) { - clearRefreshTimer() - refreshTimer = setTimeout(() => { - void refreshSession() - }, REFRESH_RETRY_MS) - if (CommonXuqmSDK.getUserId() && process.env.NODE_ENV !== 'production') { - console.warn('[XuqmSDK] userSig refresh failed, will retry', error) - } - } finally { - refreshInFlight = false - } -} - -function scheduleRefresh(): void { - clearRefreshTimer() - const session = currentSession - if (!session?.refreshUserSig || !session.expiresAt) return - const delayMs = Math.max(session.expiresAt - Date.now() - REFRESH_GRACE_MS, 0) - refreshTimer = setTimeout(() => { - void refreshSession() - }, delayMs) } async function login(options: UnifiedLoginOptions): Promise { @@ -94,10 +34,8 @@ async function login(options: UnifiedLoginOptions): Promise { } async function logout(): Promise { - clearRefreshTimer() const userId = currentSession?.userId ?? getCommonUserId() currentSession = null - refreshInFlight = false setCommonUserId(null) if (userId) { try {