/* * ThunderAI [https://micz.it/thunderbird-addon-thunderai/] * Copyright (C) 2024 Mic (m@micz.it) * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ // Some original methods derived from https://github.com/KudoAI/chatgpt.js/blob/7eb8463cd61143fa9e1d5a8ec3c14d3c1b286e54/chatgpt.js // Using a full string to inject it in the ChatGPT page to avoid any security error export const mzta_script = ` let force_go = false; let current_message = null; let current_action = null; let selectionChangeTimeout = null; let isDragging = false; async function chatgpt_sendMsg(msg, method ='') { // return -1 send button not found, -2 textarea not found const textArea = document.querySelector('form textarea'), sendButton = document.querySelector('path[d*="M15.192 8.906a1.143"]')?.parentNode.parentNode // post-GPT-4o; || document.querySelector('[data-testid="send-button"]'); // pre-GPT-4o //check if the textarea has been found if(!textArea) { return -2; } textArea.value = msg; textArea.dispatchEvent(new Event('input', { bubbles: true })); // enable send button //check if the sendbutton has been found if (!sendButton) { return -1; } const delaySend = setInterval(() => { if (!sendButton?.hasAttribute('disabled')) { // send msg method.toLowerCase() == 'click' ? sendButton.click() : textArea.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13, bubbles: true })); clearInterval(delaySend); } }, 25); return 0; //everything is ok } async function chatgpt_isIdle() { return new Promise(resolve => { const intervalId = setInterval(() => { if (chatgpt_getRegenerateButton()) { clearInterval(intervalId); resolve(true); }}, 100);});} function chatgpt_getRegenerateButton() { for (const mainSVG of document.querySelectorAll('main svg')) { if (mainSVG.querySelector('path[d*="M3.07 10.876C3.623"]')) // regen icon found return mainSVG.parentNode.parentNode; } } function chatpgt_scrollToBottom () { try { document.querySelector('button[class*="cursor"][class*="bottom"]').click(); } catch (err) { console.error('[ThunderAI] ', err); } } function addCustomDiv(prompt_action,tabId,mailMessageId) { // Create