export default async function getPartialDialogDataBasedOnRiskInfo()

in packages-fetcher/console-fetcher-risk-prompt/src/risk-prompt/open-dialog/get-partial-dialog-data-based-on-risk-info/index.ts [20:112]


export default async function getPartialDialogDataBasedOnRiskInfo(riskInfo: TRiskInfo): Promise<Omit<IDialogData, 'primaryButtonDisabledObject'>> {
  try {
    const {
      riskType
    } = riskInfo;
    
    if (riskType === ERiskType.NEW_SUB) {
      const {
        accountId,
        subRiskValidators
      } = riskInfo;
      const validatorsIncludesMfaToBind = subRiskValidators.find(o => o.convertedVerifyType === EConvertedVerifyType.MFA && !getMfaBoundStatus(o.verifyDetail));
      
      // 如果子账号的验证项只有 MFA,且 MFA 未绑定,直接报错。(子账号在风控流程中不支持绑定 MFA,触发子账号风控的前提条件是已经绑定 MFA 设备/手机/邮箱)
      if (subRiskValidators.length === 1 && validatorsIncludesMfaToBind) {
        return {
          dialogType: EDialogType.ERROR,
          errorMessageObject: {
            [ESceneKey.RISK_PROMPT_ERROR]: intl('message:invalid_unknown!lines')
          }
        };
      }
      
      const {
        subValidators,
        targetUserPrincipalName
      } = await getVerificationValidators({
        accountId,
        subRiskValidators
      });
      
      return {
        dialogType: EDialogType.SUB_RISK_VERIFICATION_AUTH,
        currentSubVerificationDeviceType: subValidators[0]?.deviceType,
        subGetVerificationToAuthData: {
          targetUserPrincipalName,
          subValidators
        },
        errorMessageObject: {}
      };
    }
    
    if (riskType === ERiskType.NEW_MAIN) {
      return {
        dialogType: EDialogType.NEW_MAIN_RISK,
        mainAccountRiskInfo: {
          type: 'new_main',
          riskInfo: {
            verifyType: riskInfo.verifyType,
            verifyUrl: riskInfo.verifyUrl
          }
        },
        errorMessageObject: {}
      };
    }
    
    if (riskType === ERiskType.OLD_MAIN) {
      return {
        dialogType: EDialogType.OLD_MAIN_OR_MPK_RISK,
        mainAccountRiskInfo: {
          type: 'old_main_or_mpk',
          riskInfo: {
            isMpk: false,
            verifyType: riskInfo.verifyType,
            mpkIsDowngrade: riskInfo.mpkIsDowngrade
          }
        },
        errorMessageObject: {}
      };
    }
    
    // 默认情况是旧版主账号风控
    return {
      dialogType: EDialogType.OLD_MAIN_OR_MPK_RISK,
      mainAccountRiskInfo: {
        type: 'old_main_or_mpk',
        riskInfo: {
          isMpk: riskInfo.isMpk,
          verifyType: riskInfo.verifyType,
          mpkIsDowngrade: riskInfo.mpkIsDowngrade
        }
      },
      errorMessageObject: {}
    };
  } catch (error) {
    return {
      dialogType: EDialogType.ERROR,
      errorMessageObject: {
        [ESceneKey.RISK_PROMPT_ERROR]: (error as FetcherError).message
      }
    };
  }
}