From 73982259c5b74ff804ce096654bb357224231026 Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 15:45:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=BF=81=E7=A7=BB=E9=A2=86?= =?UTF-8?q?=E5=8F=96=E4=BC=9A=E8=AF=9D=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...on-service.js => claim-session-service.ts} | 0 .../claim/session/{actions.js => actions.ts} | 2 -- .../claim/session/{context.js => context.ts} | 2 -- .../session/{lifecycle.js => lifecycle.ts} | 22 +++++++++---------- .../claim/session/{runtime.js => runtime.ts} | 12 +++++----- .../claim/session/{shared.js => shared.ts} | 2 -- docs/backend-typescript-migration-plan.md | 13 +++++++++++ 7 files changed, 30 insertions(+), 23 deletions(-) rename apps/backend/src/services/claim/{claim-session-service.js => claim-session-service.ts} (100%) rename apps/backend/src/services/claim/session/{actions.js => actions.ts} (99%) rename apps/backend/src/services/claim/session/{context.js => context.ts} (99%) rename apps/backend/src/services/claim/session/{lifecycle.js => lifecycle.ts} (84%) rename apps/backend/src/services/claim/session/{runtime.js => runtime.ts} (88%) rename apps/backend/src/services/claim/session/{shared.js => shared.ts} (99%) diff --git a/apps/backend/src/services/claim/claim-session-service.js b/apps/backend/src/services/claim/claim-session-service.ts similarity index 100% rename from apps/backend/src/services/claim/claim-session-service.js rename to apps/backend/src/services/claim/claim-session-service.ts diff --git a/apps/backend/src/services/claim/session/actions.js b/apps/backend/src/services/claim/session/actions.ts similarity index 99% rename from apps/backend/src/services/claim/session/actions.js rename to apps/backend/src/services/claim/session/actions.ts index cd62e3db..7c7bcf0e 100644 --- a/apps/backend/src/services/claim/session/actions.js +++ b/apps/backend/src/services/claim/session/actions.ts @@ -1,5 +1,3 @@ -// @ts-check - import { getTencentBrowserSession, getTencentBrowserSessionScreenshotPath, diff --git a/apps/backend/src/services/claim/session/context.js b/apps/backend/src/services/claim/session/context.ts similarity index 99% rename from apps/backend/src/services/claim/session/context.js rename to apps/backend/src/services/claim/session/context.ts index 61cd3ac8..de77bca6 100644 --- a/apps/backend/src/services/claim/session/context.js +++ b/apps/backend/src/services/claim/session/context.ts @@ -1,5 +1,3 @@ -// @ts-check - import { findClaimTokenByToken, getClaimTokenById, updateClaimToken } from '../../../repositories/claim-token-repo.js' import { getOrderById } from '../../../repositories/order-repo.js' import { getOrderItemById } from '../../../repositories/order-item-repo.js' diff --git a/apps/backend/src/services/claim/session/lifecycle.js b/apps/backend/src/services/claim/session/lifecycle.ts similarity index 84% rename from apps/backend/src/services/claim/session/lifecycle.js rename to apps/backend/src/services/claim/session/lifecycle.ts index 43056663..3b39f57b 100644 --- a/apps/backend/src/services/claim/session/lifecycle.js +++ b/apps/backend/src/services/claim/session/lifecycle.ts @@ -1,5 +1,3 @@ -// @ts-check - import { closeTencentBrowserSession, createTencentBrowserSession, @@ -16,37 +14,39 @@ import { normalizeClaimLoginType, } from './shared.js' -export async function createClaimSession(token, payload = {}) { +type JsonObject = Record + +export async function createClaimSession(token: unknown, payload: JsonObject = {}) { return createClaimSessionWithContextLoader( () => getClaimContext(token), payload, ) } -export async function createClaimSessionForAdminTask(taskId, payload = {}) { +export async function createClaimSessionForAdminTask(taskId: unknown, payload: JsonObject = {}) { return createClaimSessionWithContextLoader( () => getClaimContextByTaskId(taskId), payload, ) } -export async function reloadClaimSession(token) { +export async function reloadClaimSession(token: unknown) { return reloadClaimSessionWithContextLoader(() => getClaimContext(token)) } -export async function reloadClaimSessionForAdminTask(taskId) { +export async function reloadClaimSessionForAdminTask(taskId: unknown) { return reloadClaimSessionWithContextLoader(() => getClaimContextByTaskId(taskId)) } -export async function closeClaimSession(token) { +export async function closeClaimSession(token: unknown) { return closeClaimSessionWithContextLoader(() => getClaimContext(token)) } -export async function closeClaimSessionForAdminTask(taskId) { +export async function closeClaimSessionForAdminTask(taskId: unknown) { return closeClaimSessionWithContextLoader(() => getClaimContextByTaskId(taskId)) } -async function createClaimSessionWithContextLoader(loadContext, payload = {}) { +async function createClaimSessionWithContextLoader(loadContext: () => Promise, payload: JsonObject = {}) { const context = await loadContext() assertTaskCanProceed(context.task) const requestedLoginType = normalizeClaimLoginType(payload.loginType) @@ -108,7 +108,7 @@ async function createClaimSessionWithContextLoader(loadContext, payload = {}) { }) } -async function reloadClaimSessionWithContextLoader(loadContext) { +async function reloadClaimSessionWithContextLoader(loadContext: () => Promise) { const context = await loadContext() assertTaskCanProceed(context.task) @@ -138,7 +138,7 @@ async function reloadClaimSessionWithContextLoader(loadContext) { }) } -async function closeClaimSessionWithContextLoader(loadContext) { +async function closeClaimSessionWithContextLoader(loadContext: () => Promise) { const context = await loadContext() assertTaskCanProceed(context.task) let task = context.task diff --git a/apps/backend/src/services/claim/session/runtime.js b/apps/backend/src/services/claim/session/runtime.ts similarity index 88% rename from apps/backend/src/services/claim/session/runtime.js rename to apps/backend/src/services/claim/session/runtime.ts index 0dd2dfbc..7b3c0cfc 100644 --- a/apps/backend/src/services/claim/session/runtime.js +++ b/apps/backend/src/services/claim/session/runtime.ts @@ -1,5 +1,3 @@ -// @ts-check - import { getTencentBrowserSession, getTencentBrowserSessionSummary, @@ -8,7 +6,9 @@ import { updateTask } from '../../../repositories/task-repo.js' import { nowIso } from '../../../utils/time.js' import { isRecoverableSessionError, parseTaskState } from './shared.js' -export async function loadTaskSession(task, { includeQrImage = false } = {}) { +type JsonObject = Record + +export async function loadTaskSession(task: JsonObject, { includeQrImage = false }: { includeQrImage?: boolean } = {}) { if (!task.browser_session_id) { return { task, @@ -41,9 +41,9 @@ export async function loadTaskSession(task, { includeQrImage = false } = {}) { } } -export async function syncTaskWithSession(task, session) { +export async function syncTaskWithSession(task: JsonObject, session: JsonObject) { const activityInfo = session.activityInfo || null - const patch = { + const patch: JsonObject = { login_type: String(session.loginType || task.login_type || ''), updated_at: nowIso(), } @@ -82,7 +82,7 @@ export async function syncTaskWithSession(task, session) { return updateTask(task.id, patch) } -export async function clearTaskSession(task, { lastError = '' } = {}) { +export async function clearTaskSession(task: JsonObject, { lastError = '' }: { lastError?: string } = {}) { const shouldResetClaimProgress = ['link_generated', 'claimed', 'role_confirmed'].includes(String(task.task_status || '')) const nextTaskStatus = shouldResetClaimProgress ? 'link_generated' : task.task_status const nextUserActionStatus = shouldResetClaimProgress ? 'pending_claim' : task.user_action_status diff --git a/apps/backend/src/services/claim/session/shared.js b/apps/backend/src/services/claim/session/shared.ts similarity index 99% rename from apps/backend/src/services/claim/session/shared.js rename to apps/backend/src/services/claim/session/shared.ts index de1304a4..87bb5804 100644 --- a/apps/backend/src/services/claim/session/shared.js +++ b/apps/backend/src/services/claim/session/shared.ts @@ -1,5 +1,3 @@ -// @ts-check - import { buildClaimUrl } from '../claim-service.js' import { createHttpError } from '../../../utils/http.js' import { formatFenToAmount, normalizeFen } from '../../../utils/money.js' diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index 0c1676c9..99fb71d9 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -505,6 +505,19 @@ - `npm run typecheck` - `npm run build` - `npm test` 共 139 个用例通过 +111. 领取会话服务入口与分层模块迁移到 `.ts`: + - `src/services/claim/claim-session-service.ts` + - `src/services/claim/session/actions.ts` + - `src/services/claim/session/context.ts` + - `src/services/claim/session/lifecycle.ts` + - `src/services/claim/session/runtime.ts` + - `src/services/claim/session/shared.ts` +112. 领取上下文、会话生命周期、任务同步、角色确认、兑换入口与领取详情 payload 已进入 TS 编译链路;`lifecycle/runtime` 补齐动态 payload / patch 对象类型 +113. Docker 内验证通过: + - `src/services/claim/claim-session-service.test.js` 共 2 个用例通过 + - `npm run typecheck` + - `npm run build` + - `npm test` 共 139 个用例通过 ## 下一步建议