收紧后端 TypeScript:统一 Json 类型与 TaskContext 契约

关闭 allowJs;集中 JsonObject 定义并替换分散 any 别名;parseTaskContext 返回 TaskContext;任务详情 API 标注 AdminTaskDetailView;测试减少 as any。
This commit is contained in:
yml2213
2026-07-10 15:52:05 +08:00
parent e7244eaa5e
commit 8bcd9bbd81
79 changed files with 415 additions and 259 deletions
@@ -3,6 +3,7 @@ import { findKuaishouIndustryVoucherByCode } from '../../../repositories/kuaisho
import { normalizeTimestampIso } from '../../../utils/time.js'
import { logWarn } from '../../../utils/logger.js'
import { TASK_STATUS } from '../../../domain/task-status.js'
import type { JsonObject } from '../../../types/json.js'
import {
getKuaishouIndustryConfig,
assertMatchingAppKey,
@@ -17,8 +18,6 @@ import { consumeCallback } from './consume-callback-service.js'
import { consumeKuaishouIndustryVoucher } from './voucher-service.js'
import { attachKuaishouIndustryVoucherToTask } from './voucher-binding-service.js'
type JsonObject = Record<string, any>
export async function handleConsumeCode(rawBody: JsonObject = {}) {
const config = getKuaishouIndustryConfig()
@@ -1,11 +1,10 @@
import crypto from 'node:crypto'
import type { JsonObject } from '../../../types/json.js'
import { createHttpError } from '../../../utils/http.js'
import { logWarn } from '../../../utils/logger.js'
import { assertKuaishouIndustryConfig } from './config.js'
type JsonObject = Record<string, any>
export type SignMethod = 'MD5' | 'HMAC_SHA256'
export function buildKuaishouIndustrySignSource(params: JsonObject = {}, { signSecret } = assertKuaishouIndustryConfig()) {
@@ -1,4 +1,5 @@
import { updateTask } from '../../../repositories/task-repo.js'
import type { JsonObject } from '../../../types/json.js'
import {
listKuaishouIndustryVouchersByOid,
updateKuaishouIndustryVoucherByCode,
@@ -18,8 +19,6 @@ import {
import { destroyCallback } from './destroy-callback-service.js'
import { attachKuaishouIndustryVoucherToTask } from './voucher-binding-service.js'
type JsonObject = Record<string, any>
export async function handleDestroyCode(rawBody: JsonObject = {}) {
const config = getKuaishouIndustryConfig()
@@ -2,8 +2,8 @@ import { getKuaishouIndustryConfig } from './config.js'
import { signKuaishouIndustryPayload, type SignMethod } from './crypto.js'
import { ensureKuaishouIndustryAccessToken } from './token-service.js'
import { logIntegration } from '../../../utils/logger.js'
export type JsonObject = Record<string, any>
import type { JsonObject } from '../../../types/json.js'
export type { JsonObject }
type KuaishouIndustryOpenApiCallInput = {
apiMethod: string
@@ -1,5 +1,5 @@
export type JsonObject = Record<string, any>
import type { JsonObject } from '../../../types/json.js'
export type { JsonObject }
export function pickDefinedBizParams(input: JsonObject): JsonObject {
const output: JsonObject = {}
@@ -1,7 +1,6 @@
import { createHttpError } from '../../../utils/http.js'
import { assertKuaishouIndustryConfig } from './config.js'
type JsonObject = Record<string, any>
import { asJsonObject, type JsonObject } from '../../../types/json.js'
export function normalizeIndustryString(value: unknown) {
return String(value || '').trim()
@@ -239,7 +238,7 @@ function parseParamField(raw: JsonObject) {
try {
const parsed = JSON.parse(normalizeIndustryString(raw.param || '{}'))
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {}
return asJsonObject(parsed)
} catch {
return {}
}
@@ -1,3 +1,4 @@
import type { JsonObject } from '../../../types/json.js'
import {
findKuaishouIndustryVoucherByCode,
listKuaishouIndustryVouchersByOid,
@@ -18,8 +19,6 @@ import {
isKuaishouIndustryVoucherSendCallbackSuccess,
} from './voucher-service.js'
type JsonObject = Record<string, any>
export async function handleQueryCode(rawBody: JsonObject = {}) {
const config = getKuaishouIndustryConfig()
@@ -1,5 +1,4 @@
type JsonObject = Record<string, any>
import type { JsonObject } from '../../../types/json.js'
export function buildIndustrySuccessResponse(data: unknown = null) {
return {
result: 1,
@@ -1,5 +1,6 @@
import { findLatestOrderByPlatformOrderId } from '../../../repositories/order-repo.js'
import { listTasksByOrderId } from '../../../repositories/task-repo.js'
import { asJsonObject, type JsonObject } from '../../../types/json.js'
import {
findKuaishouIndustryVoucherByCode,
listKuaishouIndustryVouchersByOid,
@@ -33,8 +34,6 @@ import { bindKuaishouIndustryVouchersToOrderTasks } from './voucher-binding-serv
import { parseAmountToFen } from '../../../utils/money.js'
import type { KuaishouIndustryVoucherRow, OrderRow } from '../../../types/repository/rows.js'
type JsonObject = Record<string, any>
type SendCodeCallbackParams = {
oid: string
sendType: string
@@ -677,7 +676,7 @@ function parseJsonObject(value: unknown): JsonObject {
try {
const parsed = JSON.parse(String(value || '{}'))
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {}
return asJsonObject(parsed)
} catch {
return {}
}
@@ -1,4 +1,5 @@
import path from 'node:path'
import type { JsonObject } from '../../../types/json.js'
import { APP_CONFIG_KEYS } from '../../../config/app-config-keys.js'
import { PROJECT_ROOT, runtimeConfig } from '../../../config/runtime.js'
@@ -14,8 +15,6 @@ const LEGACY_DEFAULT_REDIRECT_URI = 'https://ks.khhao.com/oauth-callback'
const DEFAULT_REDIRECT_URI = 'https://ks.khhao.com/admin/platform-shops?tab=kuaishouIndustry'
const DEFAULT_SCOPES = 'merchant_item'
type JsonObject = Record<string, any>
export type KuaishouIndustryShopConfig = {
enabled: boolean
sellerId: string
@@ -1,5 +1,6 @@
import { createHttpError } from '../../../utils/http.js'
import { logInfo, logWarn } from '../../../utils/logger.js'
import type { JsonObject } from '../../../types/json.js'
import {
findKuaishouIndustryShopConfig,
getKuaishouIndustrySourceConfig,
@@ -10,8 +11,6 @@ import {
type KuaishouIndustrySourceConfig,
} from './source-config-service.js'
type JsonObject = Record<string, any>
const ACCESS_TOKEN_REFRESH_MARGIN_MS = 30 * 60 * 1000
const DEFAULT_ACCESS_TOKEN_TTL_MS = 47 * 60 * 60 * 1000
const DEFAULT_REFRESH_TOKEN_TTL_MS = 179 * 24 * 60 * 60 * 1000
@@ -1,4 +1,5 @@
import { updateTask } from '../../../repositories/task-repo.js'
import type { JsonObject } from '../../../types/json.js'
import {
listKuaishouIndustryVouchersByOid,
updateKuaishouIndustryVoucherByCode,
@@ -17,8 +18,6 @@ import type {
TaskRow,
} from '../../../types/repository/rows.js'
type JsonObject = Record<string, any>
export async function bindKuaishouIndustryVouchersToOrderTasks(
order: OrderRow | null | undefined,
tasks: TaskRow[] = [],
@@ -1,4 +1,5 @@
import { createTaskEvent } from '../../../repositories/task-event-repo.js'
import { asJsonObject, type JsonObject } from '../../../types/json.js'
import {
findKuaishouIndustryVoucherByCode,
listKuaishouIndustryVouchersByTaskId,
@@ -9,8 +10,6 @@ import { buildIndustryEticketItem } from './response.js'
import { consumeCallback } from './consume-callback-service.js'
import type { KuaishouIndustryVoucherRow, TaskRow } from '../../../types/repository/rows.js'
type JsonObject = Record<string, any>
export const KUAISHOU_INDUSTRY_DEFAULT_VALID_DAYS = 3
export const KUAISHOU_INDUSTRY_SEND_CALLBACK_STATUS = {
PENDING: 'pending',
@@ -358,7 +357,7 @@ function parseJsonObject(value: unknown): JsonObject {
try {
const parsed = JSON.parse(String(value || '{}'))
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {}
return asJsonObject(parsed)
} catch {
return {}
}