From 889be72125b5c57ce92e884cc80d8a835dc3e5d5 Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 16:16:14 +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=E5=90=8E=E5=8F=B0=E7=BC=96=E6=8E=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...s-service.js => cloudtentacles-service.ts} | 85 ++++++++----------- docs/backend-typescript-migration-plan.md | 8 ++ 2 files changed, 42 insertions(+), 51 deletions(-) rename apps/backend/src/services/admin/platform-config/{cloudtentacles-service.js => cloudtentacles-service.ts} (72%) diff --git a/apps/backend/src/services/admin/platform-config/cloudtentacles-service.js b/apps/backend/src/services/admin/platform-config/cloudtentacles-service.ts similarity index 72% rename from apps/backend/src/services/admin/platform-config/cloudtentacles-service.js rename to apps/backend/src/services/admin/platform-config/cloudtentacles-service.ts index b81e3427..83a97f97 100644 --- a/apps/backend/src/services/admin/platform-config/cloudtentacles-service.js +++ b/apps/backend/src/services/admin/platform-config/cloudtentacles-service.ts @@ -1,5 +1,3 @@ -// @ts-check - import { getCloudtentaclesSourceByKey, getCloudtentaclesSourcesFilePath, @@ -56,15 +54,19 @@ import { maskPhone, } from "./mappers.js"; -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesSourceConfigInput} AdminCloudtentaclesSourceConfigInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesSendSmsCodeInput} AdminCloudtentaclesSendSmsCodeInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesTestLoginInput} AdminCloudtentaclesTestLoginInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesValidateSessionInput} AdminCloudtentaclesValidateSessionInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesCatalogQueryInput} AdminCloudtentaclesCatalogQueryInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesSkuBuyInput} AdminCloudtentaclesSkuBuyInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesSkuUseInput} AdminCloudtentaclesSkuUseInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesVirtualNumberInput} AdminCloudtentaclesVirtualNumberInput */ -/** @typedef {import('../../../types/admin-write-inputs.js').AdminCloudtentaclesFullFlowInput} AdminCloudtentaclesFullFlowInput */ +import type { + AdminCloudtentaclesCatalogQueryInput, + AdminCloudtentaclesFullFlowInput, + AdminCloudtentaclesSendSmsCodeInput, + AdminCloudtentaclesSkuBuyInput, + AdminCloudtentaclesSkuUseInput, + AdminCloudtentaclesSourceConfigInput, + AdminCloudtentaclesTestLoginInput, + AdminCloudtentaclesValidateSessionInput, + AdminCloudtentaclesVirtualNumberInput, +} from "../../../types/admin-write-inputs.js"; + +type JsonObject = Record; export function listAdminCloudtentaclesSources() { const list = listCloudtentaclesSources(); @@ -74,7 +76,7 @@ export function listAdminCloudtentaclesSources() { ? list.sources.map((s) => mapAdminCloudtentaclesSourceConfig(s)) : []; - const mappedSessions = {}; + const mappedSessions: JsonObject = {}; for (const [key, session] of Object.entries(sessions.sessions || {})) { mappedSessions[key] = mapAdminCloudtentaclesSession(session); } @@ -88,9 +90,8 @@ export function listAdminCloudtentaclesSources() { }; } -/** @param {AdminCloudtentaclesSourceConfigInput} [payload] */ export function updateAdminCloudtentaclesSourceConfig( - payload = /** @type {AdminCloudtentaclesSourceConfigInput} */ ({}) + payload: AdminCloudtentaclesSourceConfigInput = {} ) { // Batch save: if payload.sources is an array, save the whole list if (Array.isArray(payload.sources)) { @@ -106,7 +107,7 @@ export function updateAdminCloudtentaclesSourceConfig( const sources = Array.isArray(savedList.sources) ? savedList.sources.map((s) => mapAdminCloudtentaclesSourceConfig(s)) : []; - const mappedSessions = {}; + const mappedSessions: JsonObject = {}; for (const [key, session] of Object.entries(sessions.sessions || {})) { mappedSessions[key] = mapAdminCloudtentaclesSession(session); } @@ -145,8 +146,7 @@ export function updateAdminCloudtentaclesSourceConfig( }; } -/** @param {string} sourceKey */ -export function deleteAdminCloudtentaclesSource(sourceKey) { +export function deleteAdminCloudtentaclesSource(sourceKey: string) { const key = String(sourceKey || "").trim(); if (!key) { throw new Error("sourceKey is required for deletion"); @@ -155,9 +155,8 @@ export function deleteAdminCloudtentaclesSource(sourceKey) { deleteCloudtentaclesSourceByKey(key); } -/** @param {AdminCloudtentaclesSendSmsCodeInput} [payload] */ export async function sendAdminCloudtentaclesSmsCode( - payload = /** @type {AdminCloudtentaclesSendSmsCodeInput} */ ({}) + payload: AdminCloudtentaclesSendSmsCodeInput = {} ) { const result = await sendCloudtentaclesSmsCode( resolveAdminCloudtentaclesCredentialPayload(payload) @@ -169,9 +168,8 @@ export async function sendAdminCloudtentaclesSmsCode( }; } -/** @param {AdminCloudtentaclesTestLoginInput} [payload] */ export async function testAdminCloudtentaclesLogin( - payload = /** @type {AdminCloudtentaclesTestLoginInput} */ ({}) + payload: AdminCloudtentaclesTestLoginInput = {} ) { const sourceKey = String(payload.sourceKey || "").trim() || "default"; const savedSource = getCloudtentaclesSourceByKey(sourceKey) || {}; @@ -194,9 +192,8 @@ export async function testAdminCloudtentaclesLogin( return buildAdminCloudtentaclesLoginResult(session, savedSession, sourceKey); } -/** @param {AdminCloudtentaclesValidateSessionInput} [payload] */ export async function validateAdminCloudtentaclesSession( - payload = /** @type {AdminCloudtentaclesValidateSessionInput} */ ({}) + payload: AdminCloudtentaclesValidateSessionInput = {} ) { const sourceKey = String(payload.sourceKey || "").trim() || "default"; const savedSource = getCloudtentaclesSourceByKey(sourceKey) || {}; @@ -226,36 +223,32 @@ export async function validateAdminCloudtentaclesSession( ); } -/** @param {AdminCloudtentaclesCatalogQueryInput} [payload] */ export async function getAdminCloudtentaclesAsset( - payload = /** @type {AdminCloudtentaclesCatalogQueryInput} */ ({}) + payload: AdminCloudtentaclesCatalogQueryInput = {} ) { return getCloudtentaclesAsset( resolveAdminCloudtentaclesSessionPayload(payload) ); } -/** @param {AdminCloudtentaclesCatalogQueryInput} [payload] */ export async function getAdminCloudtentaclesCategories( - payload = /** @type {AdminCloudtentaclesCatalogQueryInput} */ ({}) + payload: AdminCloudtentaclesCatalogQueryInput = {} ) { return getCloudtentaclesCategories( resolveAdminCloudtentaclesSessionPayload(payload) ); } -/** @param {AdminCloudtentaclesCatalogQueryInput} [payload] */ export async function getAdminCloudtentaclesSkuList( - payload = /** @type {AdminCloudtentaclesCatalogQueryInput} */ ({}) + payload: AdminCloudtentaclesCatalogQueryInput = {} ) { return listCloudtentaclesSku( resolveAdminCloudtentaclesSessionPayload(payload) ); } -/** @param {AdminCloudtentaclesSkuBuyInput} [payload] */ export async function buyAdminCloudtentaclesSku( - payload = /** @type {AdminCloudtentaclesSkuBuyInput} */ ({}) + payload: AdminCloudtentaclesSkuBuyInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return buyCloudtentaclesSku({ @@ -265,9 +258,8 @@ export async function buyAdminCloudtentaclesSku( }); } -/** @param {AdminCloudtentaclesSkuUseInput} [payload] */ export async function useAdminCloudtentaclesSku( - payload = /** @type {AdminCloudtentaclesSkuUseInput} */ ({}) + payload: AdminCloudtentaclesSkuUseInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return useCloudtentaclesSku({ @@ -278,18 +270,16 @@ export async function useAdminCloudtentaclesSku( }); } -/** @param {AdminCloudtentaclesCatalogQueryInput} [payload] */ export async function getAdminCloudtentaclesKnapsack( - payload = /** @type {AdminCloudtentaclesCatalogQueryInput} */ ({}) + payload: AdminCloudtentaclesCatalogQueryInput = {} ) { return getCloudtentaclesKnapsack( resolveAdminCloudtentaclesSessionPayload(payload) ); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function listAdminCloudtentaclesVirtualNumbers( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return listCloudtentaclesVirtualNumbers({ @@ -298,9 +288,8 @@ export async function listAdminCloudtentaclesVirtualNumbers( }); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function appointAdminCloudtentaclesVirtualNumber( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return appointCloudtentaclesVirtualNumber({ @@ -309,9 +298,8 @@ export async function appointAdminCloudtentaclesVirtualNumber( }); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function generateAdminCloudtentaclesLoginCode( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return generateCloudtentaclesLoginCode({ @@ -321,9 +309,8 @@ export async function generateAdminCloudtentaclesLoginCode( }); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function fetchAdminCloudtentaclesVirtualNumberCode( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return fetchCloudtentaclesVirtualNumberCode({ @@ -333,9 +320,8 @@ export async function fetchAdminCloudtentaclesVirtualNumberCode( }); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function verifyAdminCloudtentaclesLoginCode( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return verifyCloudtentaclesLoginCode({ @@ -346,9 +332,8 @@ export async function verifyAdminCloudtentaclesLoginCode( }); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function getAdminCloudtentaclesBindUrl( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return getCloudtentaclesBindUrl({ @@ -358,9 +343,8 @@ export async function getAdminCloudtentaclesBindUrl( }); } -/** @param {AdminCloudtentaclesVirtualNumberInput} [payload] */ export async function backAdminCloudtentaclesVirtualNumber( - payload = /** @type {AdminCloudtentaclesVirtualNumberInput} */ ({}) + payload: AdminCloudtentaclesVirtualNumberInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return backCloudtentaclesVirtualNumber({ @@ -370,9 +354,8 @@ export async function backAdminCloudtentaclesVirtualNumber( }); } -/** @param {AdminCloudtentaclesFullFlowInput} [payload] */ export async function runAdminCloudtentaclesFullFlow( - payload = /** @type {AdminCloudtentaclesFullFlowInput} */ ({}) + payload: AdminCloudtentaclesFullFlowInput = {} ) { const context = resolveAdminCloudtentaclesSessionPayload(payload); return runCloudtentaclesFullDebugFlow({ diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index 53832e81..fbea867d 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -628,6 +628,14 @@ - `npm run typecheck` - `npm run build` - `npm test` 共 139 个用例通过 +150. 后台 Cloudtentacles 配置编排服务迁移到 `.ts`: + - `src/services/admin/platform-config/cloudtentacles-service.ts` +151. Cloudtentacles 来源列表 / 批量保存 / 单来源保存 / 删除、短信登录、会话校验、商品目录、背包、虚拟号、完整调试流程后台入口已进入 TS 编译链路;各入口 payload 与 session map 补齐类型 +152. Docker 内验证通过: + - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过 + - `npm run typecheck` + - `npm run build` + - `npm test` 共 139 个用例通过 ## 下一步建议