后端迁移会话凭证编排

This commit is contained in:
yml
2026-05-21 15:18:48 +08:00
parent ae31fe2797
commit a77439874b
2 changed files with 73 additions and 5 deletions
@@ -1,10 +1,9 @@
// @ts-nocheck
import fs from 'node:fs/promises'
import {
BAIDU_BEIJING_TIME_URL,
DEFAULT_REDEEM_PROOF_MODE,
type RedeemProofMode,
} from './session-proof-constants.js'
import { captureBeijingTimeProof } from './session-proof-beijing-time.js'
import { showResultDialog, composeProofScreenshot } from './session-proof-renderer.js'
@@ -12,6 +11,63 @@ import { resolveRedeemProofMode, shouldCaptureBeijingTimeProof } from './session
import { buildArtifactPaths } from './session-proof-paths.js'
import { writeRedeemResultFile } from './session-proof-result-writer.js'
type BrowserPageLike = {
evaluate: <T = unknown>(callback: any, arg?: unknown) => Promise<T>
waitForTimeout: (milliseconds: number) => Promise<void>
setViewportSize: (viewport: { width: number; height: number }) => Promise<void>
setContent: (html: string, options?: { waitUntil?: string }) => Promise<unknown>
goto: (url: string, options?: { waitUntil?: string }) => Promise<unknown>
screenshot: (options: {
path: string
fullPage?: boolean
clip?: { x: number; y: number; width: number; height: number }
}) => Promise<unknown>
content: () => Promise<string>
close: () => Promise<void>
}
type BrowserContextLike = {
newPage: () => Promise<BrowserPageLike>
}
type RedeemFinalResult = {
role?: {
area?: string
}
classification?: {
success?: boolean
}
redeem?: {
iRet?: number | string
ret?: number | string
sMsg?: string
}
[key: string]: unknown
}
type RedeemArtifactsInput = {
browserContext: BrowserContextLike
page: BrowserPageLike
sessionDir: string
sessionId?: string
activityUrl: string
code: string
finalResult: RedeemFinalResult
attempts?: unknown[]
}
type WriteRedeemArtifactFilesInput = Omit<RedeemArtifactsInput, 'sessionDir'> & {
outputDir: string
proofMode?: RedeemProofMode | string
}
type RedeemArtifactsResult = {
proofMode: RedeemProofMode
screenshotPath: string
htmlPath: string
resultPath: string
}
export async function saveRedeemArtifacts({
browserContext,
page,
@@ -21,7 +77,7 @@ export async function saveRedeemArtifacts({
code,
finalResult,
attempts,
}) {
}: RedeemArtifactsInput): Promise<RedeemArtifactsResult> {
return writeRedeemArtifactFiles({
browserContext,
page,
@@ -45,7 +101,7 @@ export async function writeRedeemArtifactFiles({
finalResult,
attempts,
proofMode = DEFAULT_REDEEM_PROOF_MODE,
}) {
}: WriteRedeemArtifactFilesInput): Promise<RedeemArtifactsResult> {
const effectiveProofMode = resolveRedeemProofMode(proofMode)
const {
redeemPageScreenshotPath,
@@ -88,7 +144,11 @@ export async function writeRedeemArtifactFiles({
await page.screenshot({ path: redeemPageScreenshotPath, fullPage: true })
let beijingTimeProof = {
let beijingTimeProof: {
screenshotPath: string
pageUrl: string
error?: string
} = {
screenshotPath: '',
pageUrl: BAIDU_BEIJING_TIME_URL,
error: '',
@@ -418,6 +418,14 @@
- `npm run typecheck`
- `npm run build`
- `npm test` 共 139 个用例通过
80. 腾讯浏览器会话 proof 总编排迁移到 `.ts`
- `src/services/session/session-proof.ts`
81. 兑换凭证保存入口、基础 / 完整 proof 分支、北京时间截图降级路径、artifact 返回值已显式类型化
82. Docker 内验证通过:
- `src/services/session/session-proof.test.js` 共 4 个用例通过
- `npm run typecheck`
- `npm run build`
- `npm test` 共 139 个用例通过
## 下一步建议