优化连接过期验证与戒色信息-1

This commit is contained in:
yml2213
2026-05-14 14:42:30 +08:00
parent c7a9787814
commit 486ba14dc4
18 changed files with 815 additions and 15 deletions
@@ -61,6 +61,10 @@ export function mapKuaishouCloudFulfillmentContext(value) {
vnPhone: String(binding.vnPhone || '').trim(),
bindUrl: String(binding.bindUrl || '').trim(),
bindPreparedAt: binding.bindPreparedAt || null,
bindExpiresAt: binding.bindExpiresAt || null,
bindProbeAt: binding.bindProbeAt || null,
bindProbeStatus: String(binding.bindProbeStatus || '').trim(),
bindProbeMessage: String(binding.bindProbeMessage || '').trim(),
},
role: {
status: String(role.status || 'pending').trim() || 'pending',
@@ -40,6 +40,7 @@ import {
normalizeKuaishouCloudFlow,
normalizeKuaishouCloudRoleInfo,
prepareKuaishouCloudBindResourceWithFallback,
resolveKuaishouCloudBindUrlExpiresAt,
resolveKuaishouCloudBindingResources,
resolveKuaishouCloudVnKeyCandidates,
resolvePersistedCloudtentaclesContext,
@@ -169,6 +170,10 @@ export async function prepareAdminTaskKuaishouCloudFulfillment(taskId, session =
vnPhone,
bindUrl: preparedBinding.bindUrl,
bindPreparedAt: now,
bindExpiresAt: resolveKuaishouCloudBindUrlExpiresAt(now),
bindProbeAt: null,
bindProbeStatus: 'pending',
bindProbeMessage: '',
roleName: '',
roleId: '',
},
@@ -3,6 +3,7 @@
import { normalizeProductName } from '../../order/product-match-service.js'
import { getCloudtentaclesSourceConfig } from '../../platforms/cloudtentacles/source-config-service.js'
import { getCloudtentaclesSessionState } from '../../platforms/cloudtentacles/session-state-service.js'
import { resolveCloudtentaclesConfig } from '../../platforms/cloudtentacles/shared.js'
import {
appointCloudtentaclesVirtualNumber,
backCloudtentaclesVirtualNumber,
@@ -48,6 +49,7 @@ export function normalizeKuaishouCloudFlow(value) {
const returnNumber = source.returnNumber && typeof source.returnNumber === 'object' ? source.returnNumber : {}
const consume = source.consume && typeof source.consume === 'object' ? source.consume : {}
const ticket = source.ticket && typeof source.ticket === 'object' ? source.ticket : {}
const bindPreparedAt = binding.bindPreparedAt || null
return {
...source,
@@ -74,7 +76,11 @@ export function normalizeKuaishouCloudFlow(value) {
vnId: Number(binding.vnId || 0) || 0,
vnPhone: String(binding.vnPhone || '').trim(),
bindUrl: String(binding.bindUrl || '').trim(),
bindPreparedAt: binding.bindPreparedAt || null,
bindPreparedAt,
bindExpiresAt: binding.bindExpiresAt || resolveKuaishouCloudBindUrlExpiresAt(bindPreparedAt),
bindProbeAt: binding.bindProbeAt || null,
bindProbeStatus: String(binding.bindProbeStatus || '').trim(),
bindProbeMessage: String(binding.bindProbeMessage || '').trim(),
roleName: String(binding.roleName || '').trim(),
roleId: String(binding.roleId || '').trim(),
},
@@ -121,14 +127,27 @@ export function normalizeKuaishouCloudFlow(value) {
export function normalizeKuaishouCloudRoleInfo(value) {
const rawInfo = value && typeof value === 'object' ? value : null
const nestedBindInfo = rawInfo?.sBindInfo && typeof rawInfo.sBindInfo === 'object' ? rawInfo.sBindInfo : null
const source = nestedBindInfo || rawInfo
return {
name: String(rawInfo?.name || rawInfo?.roleName || rawInfo?.nickname || '').trim(),
rid: String(rawInfo?.rid || rawInfo?.roleId || rawInfo?.uid || '').trim(),
name: String(source?.name || source?.roleName || source?.nickname || source?.sRoleName || '').trim(),
rid: String(source?.rid || source?.roleId || source?.uid || source?.sRoleId || source?.sUserId || '').trim(),
rawInfo,
}
}
export function resolveKuaishouCloudBindUrlExpiresAt(preparedAt) {
const preparedTime = Date.parse(String(preparedAt || ''))
if (!Number.isFinite(preparedTime)) {
return null
}
const config = resolveCloudtentaclesConfig()
const ttlSeconds = Number(config.bindUrlTtlSeconds || 300)
return new Date(preparedTime + Math.max(1, ttlSeconds) * 1000).toISOString()
}
export function resolveKuaishouCloudBindingResources(flow, { skuItems = [], knapsackItems = [] } = {}) {
const normalizedSkuItems = Array.isArray(skuItems) ? skuItems.filter(isCloudSkuLikeItem) : []
const normalizedKnapsackItems = Array.isArray(knapsackItems) ? knapsackItems.filter(isCloudSkuLikeItem) : []