text: const axios = require("axios");
  
  /**
   * Tests whether the given variable is a real object and not an Array
   * @param {any} it The variable to test
   * @returns {it is Record<string, any>}
   */
  function isObject(it) {
      // This is necessary because:
      // typeof null === 'object'
      // typeof [] === 'object'
      // [] instanceof Object === true
      return Object.prototype.toString.call(it) === "[object Object]";
  }
  
  /**
   * Tests whether the given variable is really an Array
   * @param {any} it The variable to test
   * @returns {it is any[]}
   */
  function isArray(it) {
      if (Array.isArray != null)
          return Array.isArray(it);
      return Object.prototype.toString.call(it) === "[object Array]";
  }
  
  /**
   * Translates text using the Google Translate API
   * @param {string} text The text to translate
   * @param {string} targetLang The target languate
   * @param {string} yandex api key
   * @returns {Promise<string>}
   */
  async function translateText(text, targetLang, yandex) {
      if (targetLang === "en") {
          return text;
      }
      if (yandex) {
          return await translateYandex(text, targetLang, yandex);
      } else {
          return await translateGoogle(text, targetLang);
      }
  }
  
  async function translateYandex(text, targetLang, yandex) {
      if (targetLang === "zh-cn") {
          targetLang = "zh";
      }
      try {
          const url = `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${yandex}&text=${encodeURIComponent(text)}&lang=en-${targetLang}`;
          const response = await axios({url, timeout: 15000});
          if (response.data && response.data['text']) {
              return response.data['text'][0];
          }
          throw new Error("Invalid response for translate request");
      } catch (e) {
          throw new Error(`Could not translate to "${targetLang}": ${e}`);
      }
      return text;
  }
  
  async function translateGoogle(text, targetLang) {
      try {
          const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent(text)}&ie=UTF-8&oe=UTF-8`;
          const response = await axios({url, timeout: 15000});
          if (isArray(response.data)) {
              // we got a valid response
              return response.data[0][0][0];
          }
          throw new Error("Invalid response for translate request");
      } catch (e) {
          throw new Error(`Could not translate to "${targetLang}": ${e}`);
      }
      return text;
  }
  
  module.exports = {
      isArray,
      isObject,
      translateText
  };