Files
order_site/apps/backend/src/services/admin/write/kuaishou-cloud-helpers.ts
T
yml2213 042574dea3 继续收紧 TypeScript:ClaimIdentity 契约与 flow 出口类型
- 新增 types/claim-identity,统一 ClaimIdentity / Payload / AdminSummary
- 导出 KuaishouCloudFlow、KuaishouFeifeiFlow 作为 normalize 出口
- 生产路径 JsonObject 统一从 types/json 导入,去掉 rebind as any
- 前后端 claimIdentity 类型字段对齐
2026-07-10 15:56:25 +08:00

75 lines
2.1 KiB
TypeScript

import { createHttpError } from '../../../utils/http.js'
import type { HttpErrorLike } from '../../../utils/http.js'
import type { JsonObject } from '../../../types/json.js'
import { resolvePersistedCloudtentaclesContextBySourceKeys } from '../../fulfillment/kuaishou-cloud/cloudtentacles-context.js'
export type { JsonObject }
export {
KUAISHOU_CLOUD_FIXED_VN_KEY,
isKuaishouCloudTask,
normalizeKuaishouCloudFlow,
normalizeKuaishouCloudRoleInfo,
resolveKuaishouCloudBindUrlExpiresAt,
} from '../../fulfillment/kuaishou-cloud/domain.js'
export {
prepareKuaishouCloudBindResourceWithFallback,
resolveKuaishouCloudBindingResources,
resolveKuaishouCloudVnKeyCandidates,
} from '../../fulfillment/kuaishou-cloud/binding-resources.js'
export type CloudtentaclesContext = {
baseUrl: string
token: string
deviceId: string
deviceType: number
resolvedSourceKey: string
}
export type CloudSkuLikeItem = {
id?: number | string
name?: string
price?: number | string
count?: number | string
[key: string]: unknown
}
export type { KuaishouCloudFlow } from '../../fulfillment/kuaishou-cloud/domain.js'
export type KuaishouCloudBindingResources = {
skuId: number
skuName: string
vnKey: string
skuItem: CloudSkuLikeItem | null
knapsackItem: CloudSkuLikeItem | null
resolvedByName: boolean
}
export type PreparedKuaishouCloudBindResource = {
vnKey: string
vnId: number
vnPhone: string
bindUrl: string
}
export function resolvePersistedCloudtentaclesContext(sourceKeys: unknown[]): CloudtentaclesContext {
try {
return resolvePersistedCloudtentaclesContextBySourceKeys(sourceKeys)
} catch (error) {
if (isMissingCloudtentaclesTokenError(error)) {
throw createHttpError('当前 cloudtentacles 没有可用 token,请先到平台配置完成登录校验', {
statusCode: 409,
errorCode: 'admin_task_kuaishou_cloud_missing_cloud_token',
cause: error,
})
}
throw error
}
}
function isMissingCloudtentaclesTokenError(error: unknown): boolean {
const current = error as HttpErrorLike | null
return String(current?.errorCode || '').trim() === 'kuaishou_cloud_missing_cloud_token'
}