From 89c2bd52732d0d2841a09fa09f938ed2a4ec1c12 Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 16:24:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=BF=81=E7=A7=BB=E4=BA=91?= =?UTF-8?q?=E8=A7=A6=E6=89=8B=E8=B0=83=E8=AF=95=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-flow-service.js => debug-flow-service.ts} | 26 ++++++++++++------- docs/backend-typescript-migration-plan.md | 8 ++++++ 2 files changed, 25 insertions(+), 9 deletions(-) rename apps/backend/src/services/platforms/cloudtentacles/{debug-flow-service.js => debug-flow-service.ts} (92%) diff --git a/apps/backend/src/services/platforms/cloudtentacles/debug-flow-service.js b/apps/backend/src/services/platforms/cloudtentacles/debug-flow-service.ts similarity index 92% rename from apps/backend/src/services/platforms/cloudtentacles/debug-flow-service.js rename to apps/backend/src/services/platforms/cloudtentacles/debug-flow-service.ts index 6b39ee70..0c22d88f 100644 --- a/apps/backend/src/services/platforms/cloudtentacles/debug-flow-service.js +++ b/apps/backend/src/services/platforms/cloudtentacles/debug-flow-service.ts @@ -1,5 +1,3 @@ -// @ts-check - import { createHttpError } from '../../../utils/http.js' import { getCloudtentaclesAsset, listCloudtentaclesSku, buyCloudtentaclesSku } from './catalog-service.js' import { getCloudtentaclesKnapsack } from './knapsack-service.js' @@ -11,7 +9,13 @@ import { verifyCloudtentaclesLoginCode, } from './virtual-number-service.js' -export async function runCloudtentaclesFullDebugFlow(payload = {}) { +type JsonObject = Record +type FlowStepOptions = { + retries?: number + retryDelayMs?: number +} + +export async function runCloudtentaclesFullDebugFlow(payload: JsonObject = {}) { const skuId = normalizePositiveInteger(payload.skuId, 0) const skuCount = normalizePositiveInteger(payload.skuCount, 1) const vnKey = String(payload.vnKey || '').trim() @@ -163,16 +167,20 @@ export async function runCloudtentaclesFullDebugFlow(payload = {}) { } } -function normalizePositiveInteger(value, fallback) { +function normalizePositiveInteger(value: unknown, fallback: number) { const parsed = Number(value) return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback } -function findKnapsackItem(items, skuId) { +function findKnapsackItem(items: unknown, skuId: unknown) { return (Array.isArray(items) ? items : []).find((item) => Number(item.id || 0) === Number(skuId)) || null } -async function runFlowStep(label, runner, options = {}) { +async function runFlowStep( + label: string, + runner: () => Promise, + options: FlowStepOptions = {}, +) { const retries = Number.isInteger(options.retries) && options.retries > 0 ? options.retries : 0 const retryDelayMs = Number.isFinite(options.retryDelayMs) && options.retryDelayMs > 0 ? options.retryDelayMs : 1000 @@ -194,12 +202,12 @@ async function runFlowStep(label, runner, options = {}) { }) } -function isHighFrequencyError(error) { +function isHighFrequencyError(error: unknown) { const message = error instanceof Error ? error.message : String(error || '') return message.toLowerCase().includes('high-frequency request') } -function wrapStepError(label, error) { +function wrapStepError(label: string, error: unknown) { const message = error instanceof Error ? error.message : String(error || '未知错误') if (isHighFrequencyError(error)) { @@ -225,7 +233,7 @@ function wrapStepError(label, error) { }) } -function sleep(ms) { +function sleep(ms: number) { return new Promise((resolve) => { setTimeout(resolve, ms) }) diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index d7f0f917..1dd840ec 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -658,6 +658,14 @@ - `npm run typecheck` - `npm run build` - `npm test` 共 139 个用例通过 +159. Cloudtentacles 完整调试流程服务迁移到 `.ts`: + - `src/services/platforms/cloudtentacles/debug-flow-service.ts` +160. Cloudtentacles 余额 / SKU / 背包校验、购买、申请虚拟号、生成登录码、获取验证码、校验验证码、获取兑换链接的后台调试串联流程已进入 TS 编译链路;流程 payload、步骤 runner、重试 options、错误包装补齐类型 +161. Docker 内验证通过: + - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过 + - `npm run typecheck` + - `npm run build` + - `npm test` 共 139 个用例通过 ## 下一步建议