刘光辉
11 小时以前 0dfe84494048ce27ba8449831782128412d3eb13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
export const AUDIT_BIZ_SIGN_HEADER = 'X-Audit-Biz-Sign';
 
/** 无电子签名操作使用的前端事件关联键;32 位 UUID 与后端 biz-sign 长度约束兼容。 */
export function createAuditCorrelationId(): string {
  const randomUUID = globalThis.crypto?.randomUUID?.();
  if (randomUUID) return randomUUID.replaceAll('-', '');
 
  const bytes = new Uint8Array(16);
  if (globalThis.crypto?.getRandomValues) {
    globalThis.crypto.getRandomValues(bytes);
  } else {
    for (let index = 0; index < bytes.length; index++) bytes[index] = Math.floor(Math.random() * 256);
  }
  bytes[6] = (bytes[6]! & 0x0f) | 0x40;
  bytes[8] = (bytes[8]! & 0x3f) | 0x80;
  return Array.from(bytes, (value) => value.toString(16).padStart(2, '0')).join('');
}
 
/** 从在线表单提交外层对象或实际业务数据中提取后端签发的 biz_sign。 */
export function resolveAuditBizSign(payload: any): string {
  const direct = resolveDirectAuditBizSign(payload);
  if (direct) return direct;
  for (const nestedPayload of [payload?.formData, payload?.map]) {
    const nested = resolveDirectAuditBizSign(nestedPayload);
    if (nested) return nested;
  }
  if (typeof payload?.data !== 'string') return '';
  try {
    const formData = JSON.parse(payload.data);
    return resolveDirectAuditBizSign(formData);
  } catch {
    return '';
  }
}
 
export function buildAuditBizSignHeaders(payload: any, fallbackBizSign?: unknown): Record<string, string> {
  const bizSign = resolveAuditBizSign(payload) || resolveDirectAuditBizSign({ biz_sign: fallbackBizSign });
  return bizSign ? { [AUDIT_BIZ_SIGN_HEADER]: bizSign } : {};
}
 
function isValidBizSign(value: unknown): boolean {
  return value != null && /^[\w-]{1,40}$/.test(String(value).trim());
}
 
function resolveDirectAuditBizSign(payload: any): string {
  const value = payload?.biz_sign ?? payload?.bizSign ?? payload?.biz_sign_jnpfId;
  return isValidBizSign(value) ? String(value).trim() : '';
}