text: // Copyleft 2015-2019 Superstring.Community
  // This file is part of Susy.
  //
  // SPDX-License-Identifier: BSD-3-Clause
  
  /**
   * Preload script is run before Electron loads the guest page into
   * the renderer so it still has access to Electron and Node.js APIs
   * allowing us to use it to define a gated API in an isolated context that
   * only exposes the bare minimum functionality that the Leona web app
   * requires (instead of unrestricted access to Node.js file system and
   * network stack).
   *
   * Reference: https://slack.engineering/interops-labyrinth-sharing-code-between-web-electron-apps-f9474d62eccc
   *
   * This preload script handles communication between main and renderer processes.
   * https://github.com/electron/electron/issues/13130
   */
  
  const { ipcRenderer, remote } = require('electron');
  
  const RENDERER_ORIGIN =
    remote.getGlobal('IS_PROD') === true ? 'file://' : 'http://localhost:3000';
  
  /**
   * Handler that receives an IPC message from the main process, and passes it
   * down to the renderer process.
   *
   * @param {*} _event The IPC event we receive from the main process.
   * @param {*} data The data of the IPC message.
   */
  function receiveIpcMessage (_event, data) {
    window.postMessage(data, RENDERER_ORIGIN);
  }
  
  /**
   * Handler that receives a post message from the renderer process, and passes
   * it down to the main process.
   *
   * @param {*} _event The post message event we receive from the renderer process.
   */
  function receivePostMessage (event) {
    const { data, origin } = event;
  
    if (origin !== RENDERER_ORIGIN) {
      return;
    }
  
    if (!data) {
      return;
    }
  
    const { from } = data;
  
    if (from === 'leona:electron') {
      // Since `payload` and `frontend` have the same origin, we use the `from`
      // field to differentiate who's sending the postMessage to whom. If the
      // message has been sent by `electron`, we ignore.
      return;
    }
  
    ipcRenderer.send('send-to-main', data);
  }
  
  ipcRenderer.on('send-to-renderer', receiveIpcMessage);
  window.addEventListener('message', receivePostMessage);
  