function convertRiskResponse()

in packages-fetcher/console-fetcher-risk-prompt/src/util/convert-risk-response/index.ts [34:167]


function convertRiskResponse<T>({
  newRisk,
  riskConfig,
  riskResponse,
  riskParametersGetter // 支持调用方传入 getter 函数来从 riskResponse 取出 riskPrompt 所需的新版风控函数
}: IConvertRiskResponseProps<T>): TRiskInfo {
  const riskTypeConfig: TRiskTypeConfig = {
    BY_SMS: riskConfig?.BY_SMS ?? DEFAULT_EXTRA_RISK_CONFIG.BY_SMS,
    BY_EMAIL: riskConfig?.BY_EMAIL ?? DEFAULT_EXTRA_RISK_CONFIG.BY_EMAIL,
    BY_MFA: riskConfig?.BY_MFA ?? DEFAULT_EXTRA_RISK_CONFIG.BY_MFA
  };

  const riskParameters = getRiskParameters({
    riskConfig,
    riskResponse,
    riskParametersGetter
  });
  const {
    accountId, verifyUrl, codeType,
    validators = [], verifyType = '', verifyDetail = ''
  } = riskParameters;
  // 从 RiskResponse 解析出的 verifyType 类型为 ga/sms/email
  const convertedVerifyType = convertVerifyType({
    type0: verifyType,
    riskTypeConfig
  });

  const mergedUseNewRisk = getMergedUseNewRisk({
    newRisk,
    riskResponse,
    riskParameters
  });

  if (mergedUseNewRisk) {
    const {
      isMpk, mpkIsDowngrade, mpkUseIdentityService
    } = convertMpkSetting({
      riskConfig,
      riskResponse
    });

    if (isMpk) {
      // 非降级的 MPK 账号风控验证
      if (mpkUseIdentityService) {
        return {
          isMpk,
          codeType,
          accountId,
          verifyDetail,
          mpkIsDowngrade,
          convertedVerifyType,
          riskType: ERiskType.MPK,
          // 非降级的 MPK 风控验证,需要将 ga/sms/email 转化为 Identity 服务所需的 VMFA/SMS/EMAIL
          verifyType: convertToMpkVerificationDeviceType(verifyType)
        };
      }

      // 降级到旧版主账号风控的 MPK 账号风控验证
      return {
        codeType,
        verifyType,
        verifyDetail,
        convertedVerifyType,
        mpkIsDowngrade: true,
        riskType: ERiskType.OLD_MAIN
      };
    }

    // 新版主账号风控验证
    if (verifyUrl) {
      return {
        accountId,
        verifyUrl,
        codeType,
        verifyType,
        verifyDetail,
        convertedVerifyType,
        riskType: ERiskType.NEW_MAIN
      };
    }

    const subRiskValidators = ((): Omit<ICommonRiskInfo, 'codeType'>[] => {
      // 过滤掉不合法的风控方式
      return validators.map(o => ({
        verifyType: o.VerifyType,
        verifyDetail: o.VerifyDetail,
        convertedVerifyType: convertVerifyType({
          type0: o.VerifyType,
          riskTypeConfig
        })
      })).filter(o => ![EConvertedVerifyType.NONE, EConvertedVerifyType.UNKNOWN].includes(o.convertedVerifyType));
    })();

    // 新版主账号风控验证,Validators 可能包括手机、邮箱、MFA 设备
    return {
      codeType,
      accountId,
      subRiskValidators,
      riskType: ERiskType.NEW_SUB
    };
  }

  const oldCodeType = getRiskValueViaConfig({
    riskConfig,
    riskResponse,
    riskConfigKey: 'DATA_PATH_VERIFY_CODE_TYPE',
    defaultValue: ''
  });
  const oldVerifyType = getRiskValueViaConfig({
    riskConfig,
    riskResponse,
    riskConfigKey: 'DATA_PATH_VERIFY_TYPE',
    defaultValue: ''
  });
  const oldVerifyDetail = getRiskValueViaConfig({
    riskConfig,
    riskResponse,
    riskConfigKey: 'DATA_PATH_VERIFY_DETAIL',
    defaultValue: ''
  });

  // 旧版主账号风控
  return {
    mpkIsDowngrade: false,
    codeType: oldCodeType,
    verifyType: oldVerifyType,
    verifyDetail: oldVerifyDetail,
    convertedVerifyType: convertVerifyType({
      type0: oldVerifyType,
      riskTypeConfig
    }),
    riskType: ERiskType.OLD_MAIN
  };
}