export default async function getSubValidators()

in packages-fetcher/console-fetcher-risk-prompt/src/risk-prompt/open-dialog/get-partial-dialog-data-based-on-risk-info/get-sub-validators.ts [29:89]


export default async function getSubValidators({
  accountId,
  subRiskValidators
}: IProps): Promise<IGetVerificationValidatorsResult> {
  const validatorsIncludesMfaToAuth = subRiskValidators.find(o => o.convertedVerifyType === EConvertedVerifyType.MFA && getMfaBoundStatus(o.verifyDetail));

  // 只有在 Validators 存在 MFA 时,才去调用 GetMfaInfoToAuthV2 接口
  if (validatorsIncludesMfaToAuth) {
    const response = await dataGetVerificationInfoToAuth({
      accountId
    });

    const targetUserPrincipalName = ((): string => {
      if (!response.length || !response[0]) {
        return '';
      }

      return response[0].targetUserPrincipalName;
    })();

    return {
      targetUserPrincipalName,
      subValidators: response
    };
  }

  // 如果 Validators 不存在 MFA,手机风控信息和邮箱风控信息都可以直接从 Validators 获取
  const verificationValidators = subRiskValidators.map<DataVerificationValidator | null>(o => {
    if (o.convertedVerifyType === EConvertedVerifyType.SMS) {
      const {
        areaCode, phoneNumber
      } = getSplittedPhoneNumber(o.verifyDetail);

      return {
        areaCode,
        phoneNumber,
        targetUserPrincipalName: '',
        deviceType: ESubVerificationDeviceType.SMS
      } as DataGetSmsInfoToAuth;
    }

    if (o.convertedVerifyType === EConvertedVerifyType.EMAIL) {
      return {
        emailAddress: String(o.verifyDetail),
        targetUserPrincipalName: '',
        deviceType: ESubVerificationDeviceType.EMAIL
      } as DataGetEmailInfoToAuth;
    }

    return null;
  });
  
  const nonNullFilter = (o: DataVerificationValidator | null): o is DataVerificationValidator => {
    return Boolean(o);
  };

  return {
    targetUserPrincipalName: '',
    subValidators: verificationValidators.filter(nonNullFilter)
  };
}