后端迁移会话凭证编排
This commit is contained in:
+65
-5
@@ -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 个用例通过
|
||||
|
||||
## 下一步建议
|
||||
|
||||
|
||||
Reference in New Issue
Block a user