拆分腾讯会话 Cookie 与复核截图辅助逻辑

This commit is contained in:
yml
2026-05-04 14:15:13 +08:00
parent ab33272cac
commit 37299a2797
5 changed files with 176 additions and 69 deletions
@@ -5,10 +5,13 @@ import {
normalizeLoginType,
parseViewportSpec,
} from './session-browser-config.js'
import { normalizeTencentCookieMap } from './session-cookie-map.js'
import {
buildArtifactsPayload,
buildRedeemPayload,
} from './session-payload.js'
import { ensureReviewScreenshot } from './session-review.js'
import { resolveInitialQrSessionState } from './session-state.js'
import {
REDEEM_SUCCESS_AUTO_CLOSE_MS,
resolveTencentSessionExpiresAt,
@@ -138,3 +141,68 @@ test('buildArtifactsPayload only exposes internal artifact paths in debug mode',
reviewScreenshotPath: '/tmp/session/review.png',
})
})
test('normalizeTencentCookieMap fills required defaults and derived proxy cookie', () => {
assert.deepEqual(
normalizeTencentCookieMap([
{ name: 'openid', value: 'openid-1' },
{ name: 'access_token', value: 'token-1' },
{ name: '', value: 'ignored' },
]),
{
openid: 'openid-1',
access_token: 'token-1',
acctype: 'qc',
appid: '101491592',
iegams_milo_proxylogin_qc: '101491592_$$_openid-1_$$_token-1',
},
)
})
test('resolveInitialQrSessionState creates waiting-scan snapshot with ttl', () => {
assert.deepEqual(
resolveInitialQrSessionState('wx', {
updatedAt: '2026-04-14T09:30:00.000Z',
nowMs: 1_700_000_000_000,
sessionTtlMs: 1_800_000,
}),
{
status: 'waiting_scan',
notice: '请使用微信扫码登录',
updatedAt: '2026-04-14T09:30:00.000Z',
expiresAt: 1_700_001_800_000,
},
)
})
test('ensureReviewScreenshot writes screenshot state and skips unchanged signature', async () => {
const screenshotCalls = []
const session = {
sessionId: 'txbs-demo',
loginType: 'qq',
sessionDir: '/tmp/session-demo',
page: {
async screenshot(options) {
screenshotCalls.push(options)
},
},
lastReview: null,
}
const activityInfo = {
role: {
roleId: '1001',
roleName: '测试角色',
},
}
assert.equal(await ensureReviewScreenshot(session, activityInfo), true)
assert.equal(screenshotCalls.length, 1)
assert.equal(session.lastReview.roleId, '1001')
assert.equal(session.lastReview.roleName, '测试角色')
assert.equal(session.lastReview.signature, 'qq|1001|测试角色')
assert.match(session.lastReview.screenshotPath, /role-review\.png$/)
assert.equal(await ensureReviewScreenshot(session, activityInfo), false)
assert.equal(screenshotCalls.length, 1)
})