后端迁移会话凭证编排
This commit is contained in:
+65
-5
@@ -1,10 +1,9 @@
|
|||||||
// @ts-nocheck
|
|
||||||
|
|
||||||
import fs from 'node:fs/promises'
|
import fs from 'node:fs/promises'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
BAIDU_BEIJING_TIME_URL,
|
BAIDU_BEIJING_TIME_URL,
|
||||||
DEFAULT_REDEEM_PROOF_MODE,
|
DEFAULT_REDEEM_PROOF_MODE,
|
||||||
|
type RedeemProofMode,
|
||||||
} from './session-proof-constants.js'
|
} from './session-proof-constants.js'
|
||||||
import { captureBeijingTimeProof } from './session-proof-beijing-time.js'
|
import { captureBeijingTimeProof } from './session-proof-beijing-time.js'
|
||||||
import { showResultDialog, composeProofScreenshot } from './session-proof-renderer.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 { buildArtifactPaths } from './session-proof-paths.js'
|
||||||
import { writeRedeemResultFile } from './session-proof-result-writer.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({
|
export async function saveRedeemArtifacts({
|
||||||
browserContext,
|
browserContext,
|
||||||
page,
|
page,
|
||||||
@@ -21,7 +77,7 @@ export async function saveRedeemArtifacts({
|
|||||||
code,
|
code,
|
||||||
finalResult,
|
finalResult,
|
||||||
attempts,
|
attempts,
|
||||||
}) {
|
}: RedeemArtifactsInput): Promise<RedeemArtifactsResult> {
|
||||||
return writeRedeemArtifactFiles({
|
return writeRedeemArtifactFiles({
|
||||||
browserContext,
|
browserContext,
|
||||||
page,
|
page,
|
||||||
@@ -45,7 +101,7 @@ export async function writeRedeemArtifactFiles({
|
|||||||
finalResult,
|
finalResult,
|
||||||
attempts,
|
attempts,
|
||||||
proofMode = DEFAULT_REDEEM_PROOF_MODE,
|
proofMode = DEFAULT_REDEEM_PROOF_MODE,
|
||||||
}) {
|
}: WriteRedeemArtifactFilesInput): Promise<RedeemArtifactsResult> {
|
||||||
const effectiveProofMode = resolveRedeemProofMode(proofMode)
|
const effectiveProofMode = resolveRedeemProofMode(proofMode)
|
||||||
const {
|
const {
|
||||||
redeemPageScreenshotPath,
|
redeemPageScreenshotPath,
|
||||||
@@ -88,7 +144,11 @@ export async function writeRedeemArtifactFiles({
|
|||||||
|
|
||||||
await page.screenshot({ path: redeemPageScreenshotPath, fullPage: true })
|
await page.screenshot({ path: redeemPageScreenshotPath, fullPage: true })
|
||||||
|
|
||||||
let beijingTimeProof = {
|
let beijingTimeProof: {
|
||||||
|
screenshotPath: string
|
||||||
|
pageUrl: string
|
||||||
|
error?: string
|
||||||
|
} = {
|
||||||
screenshotPath: '',
|
screenshotPath: '',
|
||||||
pageUrl: BAIDU_BEIJING_TIME_URL,
|
pageUrl: BAIDU_BEIJING_TIME_URL,
|
||||||
error: '',
|
error: '',
|
||||||
@@ -418,6 +418,14 @@
|
|||||||
- `npm run typecheck`
|
- `npm run typecheck`
|
||||||
- `npm run build`
|
- `npm run build`
|
||||||
- `npm test` 共 139 个用例通过
|
- `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