function populateUploadAccountUser()

in src/auth/user-import-builder.ts [386:464]


function populateUploadAccountUser(
  user: UserImportRecord, userValidator?: ValidatorFunction): UploadAccountUser {
  const result: UploadAccountUser = {
    localId: user.uid,
    email: user.email,
    emailVerified: user.emailVerified,
    displayName: user.displayName,
    disabled: user.disabled,
    photoUrl: user.photoURL,
    phoneNumber: user.phoneNumber,
    providerUserInfo: [],
    mfaInfo: [],
    tenantId: user.tenantId,
    customAttributes: user.customClaims && JSON.stringify(user.customClaims),
  };
  if (typeof user.passwordHash !== 'undefined') {
    if (!validator.isBuffer(user.passwordHash)) {
      throw new FirebaseAuthError(
        AuthClientErrorCode.INVALID_PASSWORD_HASH,
      );
    }
    result.passwordHash = utils.toWebSafeBase64(user.passwordHash);
  }
  if (typeof user.passwordSalt !== 'undefined') {
    if (!validator.isBuffer(user.passwordSalt)) {
      throw new FirebaseAuthError(
        AuthClientErrorCode.INVALID_PASSWORD_SALT,
      );
    }
    result.salt = utils.toWebSafeBase64(user.passwordSalt);
  }
  if (validator.isNonNullObject(user.metadata)) {
    if (validator.isNonEmptyString(user.metadata.creationTime)) {
      result.createdAt = new Date(user.metadata.creationTime).getTime();
    }
    if (validator.isNonEmptyString(user.metadata.lastSignInTime)) {
      result.lastLoginAt = new Date(user.metadata.lastSignInTime).getTime();
    }
  }
  if (validator.isArray(user.providerData)) {
    user.providerData.forEach((providerData) => {
      result.providerUserInfo!.push({
        providerId: providerData.providerId,
        rawId: providerData.uid,
        email: providerData.email,
        displayName: providerData.displayName,
        photoUrl: providerData.photoURL,
      });
    });
  }

  // Convert user.multiFactor.enrolledFactors to server format.
  if (validator.isNonNullObject(user.multiFactor) &&
      validator.isNonEmptyArray(user.multiFactor.enrolledFactors)) {
    user.multiFactor.enrolledFactors.forEach((multiFactorInfo) => {
      result.mfaInfo!.push(convertMultiFactorInfoToServerFormat(multiFactorInfo));
    });
  }

  // Remove blank fields.
  let key: keyof UploadAccountUser;
  for (key in result) {
    if (typeof result[key] === 'undefined') {
      delete result[key];
    }
  }
  if (result.providerUserInfo!.length === 0) {
    delete result.providerUserInfo;
  }
  if (result.mfaInfo!.length === 0) {
    delete result.mfaInfo;
  }
  // Validate the constructured user individual request. This will throw if an error
  // is detected.
  if (typeof userValidator === 'function') {
    userValidator(result);
  }
  return result;
}