Files
baiyue-firstleg/scripts/admin-test-env-modules/event-bridge-pending-recovery.mjs
T
2026-08-27 16:17:11 +08:00

50 lines
1.9 KiB
JavaScript

export const EVENT_BRIDGE_RECOVERY_FIXTURE = Object.freeze({
customerCode: 'C10000000',
eventId: 'b569c7f6-3493-4a0f-a944-dd42698f183b',
initialOutboxStatus: 'PENDING',
initialRetryCount: 62,
failedTarget: '172.31.198.8:9313',
currentOutboxStatus: 'PENDING',
currentRetryCount: 81,
currentFailureCode: 'A0401',
currentFailureMessage: '内部服务令牌无效',
currentRequestId: '200edca3-428e-446d-977a-ca98a84dd704',
currentTraceId: 'e8e6d620c1cff40caa765e6968f89024',
dockerDnsProven: true,
})
export const TEST_EVENT_BRIDGE_URLS = Object.freeze({
LASTLEG_EVENT_BRIDGE_URL: 'http://event-bridge-overseas:9312',
FIRSTLEG_EVENT_BRIDGE_URL: 'http://event-bridge-cn:9312',
})
export const INTERNAL_TOKEN_COHORT_SERVICES = Object.freeze([
'firstleg',
'event-bridge-cn',
'event-bridge-overseas',
'lastleg-service',
])
export function validTestEventBridgeEnvironment(values = {}) {
return Object.entries(TEST_EVENT_BRIDGE_URLS)
.every(([key, expected]) => values[key] === expected)
&& Object.values(values).every((value) => !/^https?:\/\/(?:\d{1,3}\.){3}\d{1,3}(?::|\/|$)/.test(String(value)))
}
// Callers must provide only a non-secret fingerprint/revision marker, never the token value.
export function validInternalTokenCohort(fingerprints = {}) {
const values = INTERNAL_TOKEN_COHORT_SERVICES.map((service) => fingerprints[service])
return values.every((value) => typeof value === 'string' && value.length > 0)
&& new Set(values).size === 1
}
export function recoveredEventBridgeFacts(facts = {}) {
return facts.firstlegOutboxStatus === 'SENT'
&& Number(facts.overseasBridgeEventCount) === 1
&& Number(facts.lastlegInboxEventCount) === 1
&& Number(facts.lastlegOrderCount) === 1
&& Number(facts.cnBridgeDuplicateCount) === 0
&& Number(facts.manualReplayCount) === 0
&& Number(facts.sqlMutationCount) === 0
}