后端迁移领取会话服务

This commit is contained in:
yml
2026-05-21 15:45:21 +08:00
parent 17df03c65c
commit 73982259c5
7 changed files with 30 additions and 23 deletions
@@ -1,5 +1,3 @@
// @ts-check
import {
getTencentBrowserSession,
getTencentBrowserSessionScreenshotPath,
@@ -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'
@@ -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<string, any>
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<JsonObject>, 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<JsonObject>) {
const context = await loadContext()
assertTaskCanProceed(context.task)
@@ -138,7 +138,7 @@ async function reloadClaimSessionWithContextLoader(loadContext) {
})
}
async function closeClaimSessionWithContextLoader(loadContext) {
async function closeClaimSessionWithContextLoader(loadContext: () => Promise<JsonObject>) {
const context = await loadContext()
assertTaskCanProceed(context.task)
let task = context.task
@@ -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<string, any>
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
@@ -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'
+13
View File
@@ -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 个用例通过
## 下一步建议