Source: error.js

/**
 * @module error
 * @description
 * Provides global error handling and user-friendly error messages for the application.
 * Displays error notifications and logs issues for debugging.
 */

/**
 * Retrieves and displays the stored error message from localStorage, if present.
 * Removes the message from storage after displaying.
 *
 * @function
 * @returns {void}
 */
const msg = localStorage.getItem("streamit_404_error");
if (msg) {
  document.getElementById("error-message").textContent = msg;
  localStorage.removeItem("streamit_404_error");
}

/**
 * Stores an error message in localStorage and redirects to the error page.
 *
 * @function
 * @param {string} message - The error message to display on the error page.
 * @returns {void}
 */
function handleErrorAndRedirect(message) {
  localStorage.setItem("streamit_404_error", message);
  window.location.href = "error.html";
}

/**
 * Disables the context menu to prevent right-click actions.
 *
 * @event
 * @param {MouseEvent} e - The contextmenu event.
 * @returns {void}
 */
document.addEventListener("contextmenu", (e) => e.preventDefault());

/**
 * Blocks specific key combinations related to developer tools and source viewing.
 * Redirects to the error page with a message if such keys are pressed.
 *
 * @event
 * @param {KeyboardEvent} e - The keydown event.
 * @returns {void}
 */
document.addEventListener("keydown", (e) => {
  if (
    e.key === "F12" ||
    (e.ctrlKey && e.shiftKey && e.key.toLowerCase() === "i") ||
    (e.ctrlKey && e.key.toLowerCase() === "u")
  ) {
    e.preventDefault();
    handleErrorAndRedirect(
      "L'utilisation des outils de développement est interdite sur cette page."
    );
  }
});

/**
 * Detects the use of developer tools by measuring debugger statement execution time.
 * If detected, redirects to the error page with a message.
 *
 * @function
 * @returns {void}
 * @private
 */
(function detectDevTools() {
  const start = Date.now();
  debugger;
  if (Date.now() - start > 100) {
    handleErrorAndRedirect(
      "L'utilisation des outils de développement est interdite sur cette page."
    );
  }
  setTimeout(detectDevTools, 1000);
})();