Merge branch 'main' into dev
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import { resolveRouteErrorLogLevel } from './http.js'
|
||||
import { buildErrorPayload, createHttpError, resolveRouteErrorLogLevel } from './http.js'
|
||||
|
||||
test('expected worker session expiry is debug-level', () => {
|
||||
assert.equal(
|
||||
@@ -14,3 +14,22 @@ test('expected worker session expiry is debug-level', () => {
|
||||
)
|
||||
assert.equal(resolveRouteErrorLogLevel({ statusCode: 500, errorCode: 'internal_error' }), 'error')
|
||||
})
|
||||
|
||||
test('affiliate_dash errors surface upstream message even when mapped to 502', () => {
|
||||
const error = createHttpError('乐玩开放平台 AccessKey 或 SecretKey 未配置', {
|
||||
statusCode: 502,
|
||||
errorCode: 'affiliate_dash_http_failed',
|
||||
})
|
||||
const payload = buildErrorPayload(error, '提交 UID 失败')
|
||||
assert.equal(payload.msg, '乐玩开放平台 AccessKey 或 SecretKey 未配置')
|
||||
assert.equal(payload.errorCode, 'affiliate_dash_http_failed')
|
||||
})
|
||||
|
||||
test('generic 5xx still uses fallback message', () => {
|
||||
const error = createHttpError('secret internal boom', {
|
||||
statusCode: 500,
|
||||
errorCode: 'internal_error',
|
||||
})
|
||||
const payload = buildErrorPayload(error, '服务内部错误')
|
||||
assert.equal(payload.msg, '服务内部错误')
|
||||
})
|
||||
|
||||
@@ -29,12 +29,16 @@ export function buildSuccessPayload(data: unknown, msg: string = 'ok') {
|
||||
|
||||
export function buildErrorPayload(error: unknown, fallbackMessage: string) {
|
||||
const classification = classifyRouteError(error)
|
||||
const message =
|
||||
classification.statusCode >= 500
|
||||
const errorMessage = error instanceof Error ? String(error.message || '').trim() : ''
|
||||
// 依赖方错误(如 affiliate_dash)即使映射为 5xx,也优先透出上游可读原因。
|
||||
const preferUpstreamMessage =
|
||||
errorMessage &&
|
||||
(classification.statusCode < 500 || classification.errorCode.startsWith('affiliate_dash'))
|
||||
const message = preferUpstreamMessage
|
||||
? errorMessage
|
||||
: classification.statusCode >= 500
|
||||
? fallbackMessage || '服务内部错误'
|
||||
: error instanceof Error
|
||||
? error.message
|
||||
: fallbackMessage
|
||||
: errorMessage || fallbackMessage
|
||||
|
||||
return {
|
||||
code: 1,
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import { isPlatformOrderIdLookupKeyword } from './platform-order-id.js'
|
||||
|
||||
test('识别纯数字平台订单号', () => {
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('20247230034021572'), true)
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('123456'), true)
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('12345'), false)
|
||||
})
|
||||
|
||||
test('识别拼多多带连字符的 order_sn', () => {
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('260915-091435834962130'), true)
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('260912-123456789012345'), true)
|
||||
})
|
||||
|
||||
test('拒绝普通关键词', () => {
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('皮肤店'), false)
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('安卓怒嚎3钻'), false)
|
||||
assert.equal(isPlatformOrderIdLookupKeyword('DT881aa66294cc'), false)
|
||||
assert.equal(isPlatformOrderIdLookupKeyword(''), false)
|
||||
})
|
||||
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* Detect platform order IDs that should use indexed equality/prefix lookup.
|
||||
* Covers pure numeric IDs (快手等) and PDD style `digits-digits` (e.g. 260915-091435834962130).
|
||||
*/
|
||||
export function isPlatformOrderIdLookupKeyword(value: unknown): boolean {
|
||||
const trimmed = String(value || '').trim()
|
||||
return /^\d{6,}(-\d{6,})?$/.test(trimmed)
|
||||
}
|
||||
Reference in New Issue
Block a user