@kudoai/chatgpt.js 3.7.1 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/chatgpt.js CHANGED
@@ -24,26 +24,34 @@ const chatgpt = {
24
24
 
25
25
  selectors: {
26
26
  btns: {
27
- continue: 'button:has([class*=rotate] [d^="M4.47189"])', login: '[data-testid*=login]',
28
- newChat: 'button[data-testid*=new-chat-button],' // sidebar button (when logged in)
29
- + 'button:has([d^="M3.06957"]),' // Cycle Arrows icon (Temp chat mode)
30
- + 'button:has([d^="M15.6729"])', // Pencil icon (recorded chat mode)
31
- regen: 'button[data-testid*="regenerate"],' // oval button in place of chatbar on errors
32
- + 'div[role=menuitem]:has([d^="M3.06957"])', // 'Try Again' entry of model selector below msg
33
- scroll: 'button:has([d^="M12 21C11.7348"])',
34
- send: '[data-testid=send-button]', sidebar: 'button[data-testid*=sidebar-button]',
35
- stop: 'button[data-testid=stop-button]', voice: 'button[data-testid*=composer-speech-button]'
27
+ continue: 'button:has(svg[class*=rotate] > path[d^="M4.47189"])',
28
+ createImage: 'button[data-testid="composer-create-image"]',
29
+ deepResearch: 'button[data-testid="composer-deep-research"]',
30
+ login: 'button[data-testid*=login]',
31
+ newChat: 'a[href="/"]:has(svg),' // Pencil button (when logged in)
32
+ + 'button:has([d^="M3.06957"])', // Cycle Arrows button (in temp chat logged out)
33
+ regen: 'button[data-testid*=regenerate],' // oval button in place of chatbar on errors
34
+ // 'Try Again' entry of model selector below msg
35
+ + 'div[role=menuitem] div:has(svg):has(path[d^="M3.06957"])',
36
+ scroll: 'button:has(> svg > path[d^="M12 21C11.7348"])',
37
+ search: 'button[data-testid="composer-button-search"]',
38
+ reason: 'button[data-testid="composer-button-reason"]',
39
+ send: 'button[data-testid=send-button]',
40
+ sidebar: 'button[data-testid*=sidebar-button]',
41
+ stop: 'button[data-testid=stop-button]',
42
+ upload: 'button:has(> svg > path[d^="M12 3C12.5523"])',
43
+ voice: 'button[data-testid*=composer-speech-button]'
36
44
  },
37
45
  chatDivs: {
38
- convo: 'main > div > div > div > div > div > div[class*=group]',
39
- msg: 'div[data-message-author-role]', reply: 'div[data-message-author-role=assistant]'
46
+ convo: 'div[class*=thread]', msg: 'div[data-message-author-role]',
47
+ reply: 'div[data-message-author-role=assistant]'
40
48
  },
41
- chatHistory: 'nav',
42
- errors: { txt: '[class*=text-error]' },
43
- footer: '.min-h-4',
44
- header: 'main .sticky',
49
+ chatHistory: 'div#history',
50
+ errors: { toast: 'div.toast-root', txt: 'div[class*=text-error]' },
51
+ footer: 'div#thread-bottom-container > div:last-of-type > div, span.text-sm.leading-none',
52
+ header: 'div#page-header, main div.sticky:first-of-type',
45
53
  links: { newChat: 'nav a[href="/"]', sidebarItem: 'nav a' },
46
- sidebar: 'div[class*=sidebar]',
54
+ sidebar: 'div.bg-token-sidebar-surface-primary',
47
55
  ssgManifest: 'script[src*="_ssgManifest.js"]'
48
56
  },
49
57
 
@@ -120,14 +128,16 @@ const chatgpt = {
120
128
  drag: {
121
129
  mousedown(event) { // find modal, update styles, attach listeners, init XY offsets
122
130
  if (event.button != 0) return // prevent non-left-click drag
123
- if (getComputedStyle(event.target).cursor == 'pointer') return // prevent drag on interactive elems
131
+ if (!/auto|default/.test(getComputedStyle(event.target).cursor))
132
+ return // prevent drag on interactive elems
124
133
  chatgpt.draggingModal = event.currentTarget
125
134
  event.preventDefault() // prevent sub-elems like icons being draggable
126
135
  Object.assign(chatgpt.draggingModal.style, {
127
- cursor: 'grabbing', transition: '0.1s', willChange: 'transform', transform: 'scale(1.05)' });
128
- [...chatgpt.draggingModal.children] // prevent hover FX if drag lags behind cursor
129
- .forEach(child => child.style.pointerEvents = 'none');
130
- ['mousemove', 'mouseup'].forEach(eventType => // add listeners
136
+ transition: '0.1s', willChange: 'transform', transform: 'scale(1.05)' })
137
+ document.body.style.cursor = 'grabbing' // update cursor
138
+ ;[...chatgpt.draggingModal.children] // prevent hover FX if drag lags behind cursor
139
+ .forEach(child => child.style.pointerEvents = 'none')
140
+ ;['mousemove', 'mouseup'].forEach(eventType => // add listeners
131
141
  document.addEventListener(eventType, handlers.drag[eventType]))
132
142
  const draggingModalRect = chatgpt.draggingModal.getBoundingClientRect()
133
143
  handlers.drag.offsetX = event.clientX - draggingModalRect.left +21
@@ -143,10 +153,11 @@ const chatgpt = {
143
153
 
144
154
  mouseup() { // restore styles/pointer events, remove listeners, reset chatgpt.draggingModal
145
155
  Object.assign(chatgpt.draggingModal.style, { // restore styles
146
- cursor: 'inherit', transition: 'inherit', willChange: 'auto', transform: 'scale(1)' });
147
- [...chatgpt.draggingModal.children] // restore pointer events
148
- .forEach(child => child.style.pointerEvents = '');
149
- ['mousemove', 'mouseup'].forEach(eventType => // remove listeners
156
+ cursor: 'inherit', transition: 'inherit', willChange: 'auto', transform: 'scale(1)' })
157
+ document.body.style.cursor = '' // restore cursor
158
+ ;[...chatgpt.draggingModal.children] // restore pointer events
159
+ .forEach(child => child.style.pointerEvents = '')
160
+ ;['mousemove', 'mouseup'].forEach(eventType => // remove listeners
150
161
  document.removeEventListener(eventType, handlers.drag[eventType]))
151
162
  chatgpt.draggingModal = null
152
163
  }
@@ -170,7 +181,7 @@ const chatgpt = {
170
181
  modalStyle.setAttribute('last-updated', thisUpdated.toString())
171
182
  document.head.append(modalStyle)
172
183
  }
173
- modalStyle.innerText = ( // update prev/new style contents
184
+ modalStyle.textContent = ( // update prev/new style contents
174
185
  `.chatgpt-modal { /* vars */
175
186
  --transition: opacity 0.65s cubic-bezier(.165,.84,.44,1), /* for fade-in */
176
187
  transform 0.55s cubic-bezier(.165,.84,.44,1) ; /* for move-in */
@@ -222,7 +233,7 @@ const chatgpt = {
222
233
  display: flex ; justify-content: flex-end ; margin: 20px -5px -3px 0 ;
223
234
  ${ isMobile ? 'flex-direction: column-reverse' : '' }}
224
235
  .chatgpt-modal button {
225
- font-size: 14px ; text-transform: uppercase ;
236
+ font-size: 14px ; text-transform: uppercase ; cursor: crosshair ;
226
237
  margin-left: ${ isMobile ? 0 : 10 }px ; padding: ${ isMobile ? 15 : 8 }px 18px ;
227
238
  ${ isMobile ? 'margin-top: 5px ; margin-bottom: 3px ;' : '' }
228
239
  border-radius: 0 ; border: 1px solid ${ scheme == 'dark' ? 'white' : 'black' };
@@ -260,7 +271,7 @@ const chatgpt = {
260
271
  }
261
272
 
262
273
  // Insert text into elems
263
- modalTitle.innerText = title || '' ; modalMessage.innerText = msg || '' ; chatgpt.renderHTML(modalMessage)
274
+ modalTitle.textContent = title || '' ; modalMessage.innerText = msg || '' ; chatgpt.renderHTML(modalMessage)
264
275
 
265
276
  // Create/append buttons (if provided) to buttons div
266
277
  const modalButtons = document.createElement('div')
@@ -297,7 +308,7 @@ const chatgpt = {
297
308
  // Create/show label
298
309
  const checkboxLabel = document.createElement('label')
299
310
  checkboxLabel.onclick = () => { checkboxInput.checked = !checkboxInput.checked ; checkboxFn() }
300
- checkboxLabel.textContent = checkboxFn.name.charAt(0).toUpperCase() // capitalize first char
311
+ checkboxLabel.textContent = checkboxFn.name[0].toUpperCase() // capitalize first char
301
312
  + checkboxFn.name.slice(1) // format remaining chars
302
313
  .replace(/([A-Z])/g, (match, letter) => ' ' + letter.toLowerCase()) // insert spaces, convert to lowercase
303
314
  .replace(/\b(\w+)nt\b/gi, '$1n\'t') // insert apostrophe in 'nt' suffixes
@@ -646,7 +657,7 @@ const chatgpt = {
646
657
  const msgs = [] ; let isUserMsg = true
647
658
  chatDivs.forEach(div => {
648
659
  const sender = isUserMsg ? 'USER' : 'CHATGPT'; isUserMsg = !isUserMsg
649
- const msg = Array.from(div.childNodes).map(node => node.innerText)
660
+ const msg = [...div.childNodes].map(node => node.innerText)
650
661
  .join('\n\n') // insert double line breaks between paragraphs
651
662
  .replace('Copy code', '')
652
663
  msgs.push(`${sender}: ${msg}`)
@@ -1148,7 +1159,7 @@ const chatgpt = {
1148
1159
  }
1149
1160
  },
1150
1161
 
1151
- isDarkMode() { return document.documentElement.className.includes('dark') },
1162
+ isDarkMode() { return document.documentElement.classList.contains('dark') },
1152
1163
  isFullScreen() { return chatgpt.browser.isFullScreen() },
1153
1164
 
1154
1165
  async isIdle(timeout = null) {
@@ -1189,7 +1200,7 @@ const chatgpt = {
1189
1200
  return await ( timeoutPromise ? Promise.race([isLoadedPromise, timeoutPromise]) : isLoadedPromise )
1190
1201
  },
1191
1202
 
1192
- isLightMode() { return document.documentElement.classList.toString().includes('light') },
1203
+ isLightMode() { return document.documentElement.classList.contains('light') },
1193
1204
  isTempChat() { return location.search == '?temporary-chat=true' },
1194
1205
  isTyping() { return !!this.getStopButton() },
1195
1206
  login() { window.location.href = 'https://chat.openai.com/auth/login' },
@@ -1289,7 +1300,7 @@ const chatgpt = {
1289
1300
  const notificationDiv = document.createElement('div') // make div
1290
1301
  notificationDiv.id = Math.floor(chatgpt.randomFloat() * 1000000) + Date.now()
1291
1302
  notificationDiv.classList.add('chatgpt-notif')
1292
- notificationDiv.innerText = msg // insert msg
1303
+ notificationDiv.textContent = msg // insert msg
1293
1304
  document.body.append(notificationDiv) // insert into DOM
1294
1305
 
1295
1306
  // Create/append close button
@@ -1322,7 +1333,7 @@ const chatgpt = {
1322
1333
  notifStyle.setAttribute('last-updated', thisUpdated.toString())
1323
1334
  document.head.append(notifStyle)
1324
1335
  }
1325
- notifStyle.innerText = ( // update prev/new style contents
1336
+ notifStyle.textContent = ( // update prev/new style contents
1326
1337
  '.chatgpt-notif {'
1327
1338
  + 'font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC",'
1328
1339
  + '"Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif ;'
@@ -1358,17 +1369,17 @@ const chatgpt = {
1358
1369
  notificationDiv.style.right = notificationDiv.isRight ? vpXoffset.toString() + 'px' : ''
1359
1370
  notificationDiv.style.left = !notificationDiv.isRight ? vpXoffset.toString() + 'px' : ''
1360
1371
 
1361
- // Reposition old notifications
1372
+ // Re-position old notifications
1362
1373
  const thisQuadrantQueue = notifyProps.queue[notificationDiv.quadrant]
1363
1374
  if (thisQuadrantQueue.length > 1) {
1364
1375
  try { // to move old notifications
1365
1376
  for (const divId of thisQuadrantQueue.slice(0, -1)) { // exclude new div
1366
1377
  const oldDiv = document.getElementById(divId),
1367
1378
  offsetProp = oldDiv.style.top ? 'top' : 'bottom', // pick property to change
1368
- vOffset = +/\d+/.exec(oldDiv.style[offsetProp])[0] + 5 + oldDiv.getBoundingClientRect().height
1379
+ vOffset = +parseInt(oldDiv.style[offsetProp]) +5 + oldDiv.getBoundingClientRect().height
1369
1380
  oldDiv.style[offsetProp] = `${ vOffset }px` // change prop
1370
1381
  }
1371
- } catch (err) {}
1382
+ } catch (err) { console.warn('Failed to re-position notification:', err) }
1372
1383
  }
1373
1384
 
1374
1385
  // Show notification
@@ -1496,7 +1507,7 @@ const chatgpt = {
1496
1507
  // Process text node
1497
1508
  if (childNode.nodeType == Node.TEXT_NODE) {
1498
1509
  const text = childNode.nodeValue,
1499
- elems = Array.from(text.matchAll(reTags))
1510
+ elems = [...text.matchAll(reTags)]
1500
1511
 
1501
1512
  // Process 1st element to render
1502
1513
  if (elems.length > 0) {
@@ -1505,7 +1516,7 @@ const chatgpt = {
1505
1516
  tagNode = document.createElement(tagName) ; tagNode.textContent = tagText
1506
1517
 
1507
1518
  // Extract/set attributes
1508
- const attrs = Array.from(tagAttrs.matchAll(reAttrs))
1519
+ const attrs = [...tagAttrs.matchAll(reAttrs)]
1509
1520
  attrs.forEach(attr => {
1510
1521
  const name = attr[1], value = attr[2].replace(/['"]/g, '')
1511
1522
  tagNode.setAttribute(name, value)
@@ -1541,9 +1552,8 @@ const chatgpt = {
1541
1552
  // responseToGet = index of response to get (defaults to latest if '' unpassed)
1542
1553
  // regenResponseToGet = index of regenerated response to get (defaults to latest if '' unpassed)
1543
1554
 
1544
- if (window.location.href.startsWith('https://chatgpt.com/c/'))
1545
- return this.getFromDOM.apply(null, arguments)
1546
- else return this.getFromAPI.apply(null, arguments)
1555
+ return this[`getFrom${ location.href.startsWith('https://chatgpt.com/c/') ? 'DOM' : 'API' }`]
1556
+ .apply(null, arguments)
1547
1557
  },
1548
1558
 
1549
1559
  getFromAPI(chatToGet, responseToGet) {
@@ -1604,7 +1614,7 @@ const chatgpt = {
1604
1614
  const textArea = chatgpt.getChatBox()
1605
1615
  if (!textArea) return console.error('Chatbar element not found!')
1606
1616
  const msgP = document.createElement('p'); msgP.textContent = msg
1607
- textArea.replaceChild(msgP, textArea.querySelector('p'))
1617
+ textArea.querySelector('p').replaceWith(msgP)
1608
1618
  textArea.dispatchEvent(new Event('input', { bubbles: true })) // enable send button
1609
1619
  setTimeout(function delaySend() {
1610
1620
  const sendBtn = chatgpt.getSendButton()
@@ -1753,8 +1763,7 @@ const chatgpt = {
1753
1763
  activateObserver() {
1754
1764
 
1755
1765
  // Stop the previous observer to preserve resources
1756
- if (this.observer instanceof MutationObserver)
1757
- try { this.observer.disconnect() } catch (e) {}
1766
+ if (this.observer instanceof MutationObserver) this.observer.disconnect()
1758
1767
 
1759
1768
  if (!this.elems.length) return console.error('🤖 chatgpt.js >> No elems to append!')
1760
1769
 
@@ -1857,7 +1866,7 @@ const chatgpt = {
1857
1866
  isOn() {
1858
1867
  const sidebar = (() => {
1859
1868
  return chatgpt.sidebar.exists() ? document.querySelector(chatgpt.selectors.sidebar) : null })()
1860
- if (!sidebar) { console.error('Sidebar element not found!'); return false }
1869
+ if (!sidebar) { return console.error('Sidebar element not found!') || false }
1861
1870
  else return chatgpt.browser.isMobile() ?
1862
1871
  document.documentElement.style.overflow == 'hidden'
1863
1872
  : sidebar.style.visibility != 'hidden' && sidebar.style.width != '0px'
@@ -2095,7 +2104,7 @@ const cjsFuncSynonyms = [
2095
2104
  // Define HELPER functions
2096
2105
 
2097
2106
  function toCamelCase(words) {
2098
- return words.map((word, idx) => idx == 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)).join('') }
2107
+ return words.map((word, idx) => idx == 0 ? word : word[0].toUpperCase() + word.slice(1)).join('') }
2099
2108
 
2100
2109
  // Prefix console logs w/ '🤖 chatgpt.js >> '
2101
2110
  const consolePrefix = '🤖 chatgpt.js >> ', ogError = console.error, ogInfo = console.info
@@ -4,7 +4,7 @@
4
4
  * User guide: https://chatgptjs.org/userguide
5
5
  * Latest minified release: https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js/chatgpt.min.js
6
6
  */
7
- localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringify({queue:{topRight:[],bottomRight:[],bottomLeft:[],topLeft:[]}});let chatgpt={endpoints:{assets:"https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@14e69f71f651ad357f509f335a752b5549083bf8",openAI:{session:"https://chatgpt.com/api/auth/session",chats:"https://chatgpt.com/backend-api/conversations",chat:"https://chatgpt.com/backend-api/conversation",share_create:"https://chatgpt.com/backend-api/share/create",share:"https://chatgpt.com/backend-api/share",instructions:"https://chatgpt.com/backend-api/user_system_messages"}},selectors:{btns:{continue:'button:has([class*=rotate] [d^="M4.47189"])',login:"[data-testid*=login]",newChat:'button[data-testid*=new-chat-button],button:has([d^="M3.06957"]),button:has([d^="M15.6729"])',regen:'button[data-testid*="regenerate"],div[role=menuitem]:has([d^="M3.06957"])',scroll:'button:has([d^="M12 21C11.7348"])',send:"[data-testid=send-button]",sidebar:"button[data-testid*=sidebar-button]",stop:"button[data-testid=stop-button]",voice:"button[data-testid*=composer-speech-button]"},chatDivs:{convo:"main > div > div > div > div > div > div[class*=group]",msg:"div[data-message-author-role]",reply:"div[data-message-author-role=assistant]"},chatHistory:"nav",errors:{txt:"[class*=text-error]"},footer:".min-h-4",header:"main .sticky",links:{newChat:'nav a[href="/"]',sidebarItem:"nav a"},sidebar:"div[class*=sidebar]",ssgManifest:'script[src*="_ssgManifest.js"]'},actAs(s){return new Promise((r,a)=>{let n=new XMLHttpRequest;n.open("GET","https://cdn.jsdelivr.net/gh/KudoAI/chat-prompts@14e69f71f651ad357f509f335a752b5549083bf8/dist/personas.min.json",!0),n.send(),n.onload=()=>{if(200!=n.status)return a("🤖 chatgpt.js >> Request failed. Cannot retrieve prompts data.");var e=JSON.parse(n.responseText).personas;if(s){var t=e.find(e=>e.title.toLowerCase()==s.toLowerCase());if(!t)return a(`🤖 chatgpt.js >> Persona '${s}' was not found!`);chatgpt.send(t.prompt,"click"),console.info(`Loading ${s} persona...`),chatgpt.isIdle().then(()=>console.info("Persona activated!"))}else{console.log("\n%c🤖 chatgpt.js personas\n","font-family: sans-serif ; font-size: xxx-large ; font-weight: bold");for(var o of e)console.log("%c"+o.title,"font-family: monospace ; font-size: larger ;")}return r()}})},activateDarkMode(){document.documentElement.classList.replace("light","dark"),document.documentElement.style.colorScheme=localStorage.theme="dark"},activateLightMode(){document.documentElement.classList.replace("dark","light"),document.documentElement.style.colorScheme=localStorage.theme="light"},alert(o,r,e,a,t){let n=chatgpt.isDarkMode()?"dark":"light",s=chatgpt.browser.isMobile(),i={dismiss:{click(e){e.target!=e.currentTarget&&!e.target.closest("[class*=-close-btn]")||f()},key(e){if(/^(?: |Space|Enter|Return|Esc)/.test(e.key)&&[32,13,27].includes(e.keyCode))for(var t of m){var t=document.getElementById(t);if(!t||"none"==t.style.display)return;e.key.startsWith("Esc")||27==e.keyCode?f():(t=t.querySelector(".modal-buttons").lastChild)&&(t.click(),e.preventDefault())}}},drag:{mousedown(e){var t;0==e.button&&"pointer"!=getComputedStyle(e.target).cursor&&(chatgpt.draggingModal=e.currentTarget,e.preventDefault(),Object.assign(chatgpt.draggingModal.style,{cursor:"grabbing",transition:"0.1s",willChange:"transform",transform:"scale(1.05)"}),[...chatgpt.draggingModal.children].forEach(e=>e.style.pointerEvents="none"),["mousemove","mouseup"].forEach(e=>document.addEventListener(e,i.drag[e])),t=chatgpt.draggingModal.getBoundingClientRect(),i.drag.offsetX=e.clientX-t.left+21,i.drag.offsetY=e.clientY-t.top+12)},mousemove(e){var t;chatgpt.draggingModal&&(t=e.clientX-i.drag.offsetX,e=e.clientY-i.drag.offsetY,Object.assign(chatgpt.draggingModal.style,{left:t+"px",top:e+"px"}))},mouseup(){Object.assign(chatgpt.draggingModal.style,{cursor:"inherit",transition:"inherit",willChange:"auto",transform:"scale(1)"}),[...chatgpt.draggingModal.children].forEach(e=>e.style.pointerEvents=""),["mousemove","mouseup"].forEach(e=>document.removeEventListener(e,i.drag[e])),chatgpt.draggingModal=null}}},c=document.createElement("div"),l=(c.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),c.classList.add("chatgpt-modal"),document.createElement("div")),d=document.createElement("h2"),g=document.createElement("p");var u=1739338889852;let h=document.querySelector("#chatgpt-modal-style"),p=((!h||parseInt(h.getAttribute("last-updated"),10)<u)&&(h||((h=document.createElement("style")).id="chatgpt-modal-style",h.setAttribute("last-updated",u.toString()),document.head.append(h)),h.innerText=`.chatgpt-modal { /* vars */
7
+ localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringify({queue:{topRight:[],bottomRight:[],bottomLeft:[],topLeft:[]}});let chatgpt={endpoints:{assets:"https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@1222ad6b5e6b81fcfb4345011c6d9d8396986450",openAI:{session:"https://chatgpt.com/api/auth/session",chats:"https://chatgpt.com/backend-api/conversations",chat:"https://chatgpt.com/backend-api/conversation",share_create:"https://chatgpt.com/backend-api/share/create",share:"https://chatgpt.com/backend-api/share",instructions:"https://chatgpt.com/backend-api/user_system_messages"}},selectors:{btns:{continue:'button:has(svg[class*=rotate] > path[d^="M4.47189"])',createImage:'button[data-testid="composer-create-image"]',deepResearch:'button[data-testid="composer-deep-research"]',login:"button[data-testid*=login]",newChat:'a[href="/"]:has(svg),button:has([d^="M3.06957"])',regen:'button[data-testid*=regenerate],div[role=menuitem] div:has(svg):has(path[d^="M3.06957"])',scroll:'button:has(> svg > path[d^="M12 21C11.7348"])',search:'button[data-testid="composer-button-search"]',reason:'button[data-testid="composer-button-reason"]',send:"button[data-testid=send-button]",sidebar:"button[data-testid*=sidebar-button]",stop:"button[data-testid=stop-button]",upload:'button:has(> svg > path[d^="M12 3C12.5523"])',voice:"button[data-testid*=composer-speech-button]"},chatDivs:{convo:"div[class*=thread]",msg:"div[data-message-author-role]",reply:"div[data-message-author-role=assistant]"},chatHistory:"div#history",errors:{toast:"div.toast-root",txt:"div[class*=text-error]"},footer:"div#thread-bottom-container > div:last-of-type > div, span.text-sm.leading-none",header:"div#page-header, main div.sticky:first-of-type",links:{newChat:'nav a[href="/"]',sidebarItem:"nav a"},sidebar:"div.bg-token-sidebar-surface-primary",ssgManifest:'script[src*="_ssgManifest.js"]'},actAs(s){return new Promise((r,a)=>{let n=new XMLHttpRequest;n.open("GET","https://cdn.jsdelivr.net/gh/KudoAI/chat-prompts@1222ad6b5e6b81fcfb4345011c6d9d8396986450/dist/personas.min.json",!0),n.send(),n.onload=()=>{if(200!=n.status)return a("🤖 chatgpt.js >> Request failed. Cannot retrieve prompts data.");var e=JSON.parse(n.responseText).personas;if(s){var t=e.find(e=>e.title.toLowerCase()==s.toLowerCase());if(!t)return a(`🤖 chatgpt.js >> Persona '${s}' was not found!`);chatgpt.send(t.prompt,"click"),console.info(`Loading ${s} persona...`),chatgpt.isIdle().then(()=>console.info("Persona activated!"))}else{console.log("\n%c🤖 chatgpt.js personas\n","font-family: sans-serif ; font-size: xxx-large ; font-weight: bold");for(var o of e)console.log("%c"+o.title,"font-family: monospace ; font-size: larger ;")}return r()}})},activateDarkMode(){document.documentElement.classList.replace("light","dark"),document.documentElement.style.colorScheme=localStorage.theme="dark"},activateLightMode(){document.documentElement.classList.replace("dark","light"),document.documentElement.style.colorScheme=localStorage.theme="light"},alert(o,r,e,a,t){let n=chatgpt.isDarkMode()?"dark":"light",s=chatgpt.browser.isMobile(),i={dismiss:{click(e){e.target!=e.currentTarget&&!e.target.closest("[class*=-close-btn]")||f()},key(e){if(/^(?: |Space|Enter|Return|Esc)/.test(e.key)&&[32,13,27].includes(e.keyCode))for(var t of m){var t=document.getElementById(t);if(!t||"none"==t.style.display)return;e.key.startsWith("Esc")||27==e.keyCode?f():(t=t.querySelector(".modal-buttons").lastChild)&&(t.click(),e.preventDefault())}}},drag:{mousedown(e){var t;0==e.button&&/auto|default/.test(getComputedStyle(e.target).cursor)&&(chatgpt.draggingModal=e.currentTarget,e.preventDefault(),Object.assign(chatgpt.draggingModal.style,{transition:"0.1s",willChange:"transform",transform:"scale(1.05)"}),document.body.style.cursor="grabbing",[...chatgpt.draggingModal.children].forEach(e=>e.style.pointerEvents="none"),["mousemove","mouseup"].forEach(e=>document.addEventListener(e,i.drag[e])),t=chatgpt.draggingModal.getBoundingClientRect(),i.drag.offsetX=e.clientX-t.left+21,i.drag.offsetY=e.clientY-t.top+12)},mousemove(e){var t;chatgpt.draggingModal&&(t=e.clientX-i.drag.offsetX,e=e.clientY-i.drag.offsetY,Object.assign(chatgpt.draggingModal.style,{left:t+"px",top:e+"px"}))},mouseup(){Object.assign(chatgpt.draggingModal.style,{cursor:"inherit",transition:"inherit",willChange:"auto",transform:"scale(1)"}),document.body.style.cursor="",[...chatgpt.draggingModal.children].forEach(e=>e.style.pointerEvents=""),["mousemove","mouseup"].forEach(e=>document.removeEventListener(e,i.drag[e])),chatgpt.draggingModal=null}}},c=document.createElement("div"),l=(c.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),c.classList.add("chatgpt-modal"),document.createElement("div")),d=document.createElement("h2"),g=document.createElement("p");var u=1739338889852;let h=document.querySelector("#chatgpt-modal-style"),p=((!h||parseInt(h.getAttribute("last-updated"),10)<u)&&(h||((h=document.createElement("style")).id="chatgpt-modal-style",h.setAttribute("last-updated",u.toString()),document.head.append(h)),h.textContent=`.chatgpt-modal { /* vars */
8
8
  --transition: opacity 0.65s cubic-bezier(.165,.84,.44,1), /* for fade-in */
9
9
  transform 0.55s cubic-bezier(.165,.84,.44,1) ; /* for move-in */
10
10
  --bg-transition: background-color 0.25s ease ; /* for bg dim */
@@ -44,7 +44,7 @@ localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringi
44
44
  display: flex ; justify-content: flex-end ; margin: 20px -5px -3px 0 ;
45
45
  ${s?"flex-direction: column-reverse":""}}
46
46
  .chatgpt-modal button {
47
- font-size: 14px ; text-transform: uppercase ;
47
+ font-size: 14px ; text-transform: uppercase ; cursor: crosshair ;
48
48
  margin-left: ${s?0:10}px ; padding: ${s?15:8}px 18px ;
49
49
  ${s?"margin-top: 5px ; margin-bottom: 3px ;":""}
50
50
  border-radius: 0 ; border: 1px solid ${"dark"==n?"white":"black"};
@@ -74,13 +74,13 @@ localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringi
74
74
  .chatgpt-modal input[type=checkbox]:focus {
75
75
  outline: none ; box-shadow: none ; -webkit-box-shadow: none ; -moz-box-shadow: none }
76
76
  .chatgpt-modal .checkbox-group label {
77
- cursor: pointer ; font-size: 14px ; color: ${"dark"==n?"#e1e1e1":"#1e1e1e"}}`),d.innerText=o||"",g.innerText=r||"",chatgpt.renderHTML(g),document.createElement("div"));p.classList.add("modal-buttons","no-mobile-tap-outline"),e&&(e=Array.isArray(e)?e:[e]).forEach(e=>{var t=document.createElement("button");t.textContent=e.name.replace(/[_-]\w/g,e=>e.slice(1).toUpperCase()).replace(/([A-Z])/g," $1").replace(/^\w/,e=>e.toUpperCase()),t.onclick=()=>{f(),e()},p.insertBefore(t,p.firstChild)});u=document.createElement("button"),u.textContent=e?"Dismiss":"OK",p.insertBefore(u,p.firstChild),p.lastChild.classList.add("primary-modal-btn"),o=document.createElement("div");if(a){o.classList.add("checkbox-group");let e=a,t=document.createElement("input");t.type="checkbox",t.onchange=e;r=document.createElement("label");r.onclick=()=>{t.checked=!t.checked,e()},r.textContent=e.name.charAt(0).toUpperCase()+e.name.slice(1).replace(/([A-Z])/g,(e,t)=>" "+t.toLowerCase()).replace(/\b(\w+)nt\b/gi,"$1n't").trim(),o.append(t),o.append(r)}e=document.createElement("div"),e.title="Close",e.classList.add("modal-close-btn","no-mobile-tap-outline"),a=document.createElementNS("http://www.w3.org/2000/svg","svg"),a.setAttribute("height","10px"),a.setAttribute("viewBox","0 0 14 14"),a.setAttribute("fill","none"),r=document.createElementNS("http://www.w3.org/2000/svg","path");r.setAttribute("fill-rule","evenodd"),r.setAttribute("clip-rule","evenodd"),r.setAttribute("fill",chatgpt.isDarkMode()?"white":"black"),r.setAttribute("d","M13.7071 1.70711C14.0976 1.31658 14.0976 0.683417 13.7071 0.292893C13.3166 -0.0976312 12.6834 -0.0976312 12.2929 0.292893L7 5.58579L1.70711 0.292893C1.31658 -0.0976312 0.683417 -0.0976312 0.292893 0.292893C-0.0976312 0.683417 -0.0976312 1.31658 0.292893 1.70711L5.58579 7L0.292893 12.2929C-0.0976312 12.6834 -0.0976312 13.3166 0.292893 13.7071C0.683417 14.0976 1.31658 14.0976 1.70711 13.7071L7 8.41421L12.2929 13.7071C12.6834 14.0976 13.3166 14.0976 13.7071 13.7071C14.0976 13.3166 14.0976 12.6834 13.7071 12.2929L8.41421 7L13.7071 1.70711Z"),a.append(r),e.append(a),l.append(e,d,g,o,p),l.style.width=`${t||458}px`,c.append(l),document.body.append(c);let m=JSON.parse(localStorage.alertQueue),f=(m.push(c.id),localStorage.alertQueue=JSON.stringify(m),c.style.display="none",1==m.length&&(c.style.display="",setTimeout(()=>{l.parentNode.style.backgroundColor=`rgba(67,70,72,${"dark"==n?.62:.33})`,l.parentNode.classList.add("animated")},100)),[c,e,a,u].forEach(e=>e.onclick=i.dismiss.click),document.addEventListener("keydown",i.dismiss.key),l.onmousedown=i.drag.mousedown,()=>{c.style.backgroundColor="transparent",l.style.animation="alert-zoom-fade-out 0.165s ease-out",l.onanimationend=()=>{if(c.remove(),(m=JSON.parse(localStorage.alertQueue)).shift(),localStorage.alertQueue=JSON.stringify(m),document.removeEventListener("keydown",i.dismiss.key),0<m.length){let e=document.getElementById(m[0]);setTimeout(()=>{e.style.display="",setTimeout(()=>e.classList.add("animated"),100)},500)}}});return c.id},async askAndGetReply(e){return chatgpt.send(e),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},autoRefresh:{activate(e){if(this.isActive)return console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh already active!`);let o=this,r=(this.toggle.refreshFrame(),t=>{var e=Math.max(2,Math.floor(21*chatgpt.randomFloat()-10));o.isActive=setTimeout(()=>{var e=document.querySelector(chatgpt.selectors.ssgManifest);e&&(document.querySelector("#refresh-frame").src=e.src+"?"+Date.now(),console.log(`↻ ChatGPT >> [${o.nowTimeStamp()}] ChatGPT session refreshed`)),r(t)},1e3*(t+e))});r(e?parseInt(e,10):30),console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh activated`),navigator.userAgent.includes("Chrome")&&void 0!==document.hidden&&document.addEventListener("visibilitychange",this.toggle.beacons)},deactivate(){this.isActive?(this.toggle.refreshFrame(),document.removeEventListener("visibilitychange",this.toggle.beacons),clearTimeout(this.isActive),this.isActive=null,console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh de-activated`)):console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh already inactive!`)},nowTimeStamp(){var e=new Date,t=e.getHours()%12||12;let o=e.getMinutes(),r=e.getSeconds();o<10&&(o="0"+o),r<10&&(r="0"+r);e=e.getHours()<12?"AM":"PM";return`${t}:${o}:${r} `+e},toggle:{beacons(){chatgpt.autoRefresh.beaconID?(clearInterval(chatgpt.autoRefresh.beaconID),chatgpt.autoRefresh.beaconID=null,console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Beacons de-activated`)):(chatgpt.autoRefresh.beaconID=setInterval(()=>{navigator.sendBeacon("https://httpbin.org/post",new Uint8Array),console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Beacon sent`)},9e4),console.log(`ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Beacons activated`))},refreshFrame(){let e=document.querySelector("#refresh-frame");e?e.remove():(e=Object.assign(document.createElement("iframe"),{id:"refresh-frame",style:"display: none"}),document.head.prepend(e))}}},browser:{isLightMode(){return window.matchMedia?.("(prefers-color-scheme: light)")?.matches},isDarkMode(){return window.matchMedia?.("(prefers-color-scheme: dark)")?.matches},isChromium(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Chromium")},isChrome(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Chrome")},isEdge(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Edge")},isBrave(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Brave")},isFirefox(){return navigator.userAgent.includes("Firefox")},isFullScreen(){var e=navigator.userAgent;return e.includes("Chrome")?window.matchMedia("(display-mode: fullscreen)").matches:e.includes("Firefox")?window.fullScreen:/MSIE|rv:/.test(e)?document.msFullscreenElement:document.webkitIsFullScreen},isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}},async clearChats(){return new Promise((o,r)=>chatgpt.getAccessToken().then(e=>{let t=new XMLHttpRequest;t.open("PATCH",chatgpt.endpoints.openAI.chats,!0),t.setRequestHeader("Content-Type","application/json"),t.setRequestHeader("Authorization","Bearer "+e),t.onload=()=>{if(200!=t.status)return r("🤖 chatgpt.js >> Request failed. Cannot clear chats.");console.info("Chats successfully cleared"),o()},t.send(JSON.stringify({is_visible:!1}))}).catch(e=>r(new Error(e.message))))},code:{async execute(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Display the output as if you were terminal:\n\n"+e),console.info("Executing code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},extract(e){var t=e.match(/(?<=```.*\n)[\s\S]*?(?=```)/g);return t?t[t.length-1]:e},async isIdle(t=null){let a={childList:!0,subtree:!0};var e=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,o=(async()=>{await new Promise(o=>{document.querySelector(chatgpt.selectors.chatDivs.msg)?o():new MutationObserver((e,t)=>{document.querySelector(chatgpt.selectors.chatDivs.msg)&&(t.disconnect(),o())}).observe(document.body,a)}),await new Promise(o=>new MutationObserver((e,t)=>{chatgpt.getStopBtn()&&(t.disconnect(),o())}).observe(document.body,{childList:!0,subtree:!0}));let e=document.querySelectorAll(chatgpt.selectors.chatDivs.reply),r=e[e.length-1];return await new Promise(o=>new MutationObserver((e,t)=>{r?.querySelector("pre")&&(t.disconnect(),o())}).observe(document.body,a)),new Promise(o=>new MutationObserver((e,t)=>{!r?.querySelector("pre")?.nextElementSibling&&chatgpt.getStopBtn()||(t.disconnect(),o(!0))}).observe(document.body,a))})();return e?Promise.race([o,e]):o},async minify(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Minify the following code:\n\n"+e),console.info("Minifying code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},async obfuscate(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Obfuscate the following code:\n\n"+e),console.info("Obfuscating code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},async refactor(e,t){if(!e)return console.error("Code (1st) argument not supplied. Pass some code!");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send(`Refactor the following code for ${t||"brevity"}:
77
+ cursor: pointer ; font-size: 14px ; color: ${"dark"==n?"#e1e1e1":"#1e1e1e"}}`),d.textContent=o||"",g.innerText=r||"",chatgpt.renderHTML(g),document.createElement("div"));p.classList.add("modal-buttons","no-mobile-tap-outline"),e&&(e=Array.isArray(e)?e:[e]).forEach(e=>{var t=document.createElement("button");t.textContent=e.name.replace(/[_-]\w/g,e=>e.slice(1).toUpperCase()).replace(/([A-Z])/g," $1").replace(/^\w/,e=>e.toUpperCase()),t.onclick=()=>{f(),e()},p.insertBefore(t,p.firstChild)});u=document.createElement("button"),u.textContent=e?"Dismiss":"OK",p.insertBefore(u,p.firstChild),p.lastChild.classList.add("primary-modal-btn"),o=document.createElement("div");if(a){o.classList.add("checkbox-group");let e=a,t=document.createElement("input");t.type="checkbox",t.onchange=e;r=document.createElement("label");r.onclick=()=>{t.checked=!t.checked,e()},r.textContent=e.name[0].toUpperCase()+e.name.slice(1).replace(/([A-Z])/g,(e,t)=>" "+t.toLowerCase()).replace(/\b(\w+)nt\b/gi,"$1n't").trim(),o.append(t),o.append(r)}e=document.createElement("div"),e.title="Close",e.classList.add("modal-close-btn","no-mobile-tap-outline"),a=document.createElementNS("http://www.w3.org/2000/svg","svg"),a.setAttribute("height","10px"),a.setAttribute("viewBox","0 0 14 14"),a.setAttribute("fill","none"),r=document.createElementNS("http://www.w3.org/2000/svg","path");r.setAttribute("fill-rule","evenodd"),r.setAttribute("clip-rule","evenodd"),r.setAttribute("fill",chatgpt.isDarkMode()?"white":"black"),r.setAttribute("d","M13.7071 1.70711C14.0976 1.31658 14.0976 0.683417 13.7071 0.292893C13.3166 -0.0976312 12.6834 -0.0976312 12.2929 0.292893L7 5.58579L1.70711 0.292893C1.31658 -0.0976312 0.683417 -0.0976312 0.292893 0.292893C-0.0976312 0.683417 -0.0976312 1.31658 0.292893 1.70711L5.58579 7L0.292893 12.2929C-0.0976312 12.6834 -0.0976312 13.3166 0.292893 13.7071C0.683417 14.0976 1.31658 14.0976 1.70711 13.7071L7 8.41421L12.2929 13.7071C12.6834 14.0976 13.3166 14.0976 13.7071 13.7071C14.0976 13.3166 14.0976 12.6834 13.7071 12.2929L8.41421 7L13.7071 1.70711Z"),a.append(r),e.append(a),l.append(e,d,g,o,p),l.style.width=`${t||458}px`,c.append(l),document.body.append(c);let m=JSON.parse(localStorage.alertQueue),f=(m.push(c.id),localStorage.alertQueue=JSON.stringify(m),c.style.display="none",1==m.length&&(c.style.display="",setTimeout(()=>{l.parentNode.style.backgroundColor=`rgba(67,70,72,${"dark"==n?.62:.33})`,l.parentNode.classList.add("animated")},100)),[c,e,a,u].forEach(e=>e.onclick=i.dismiss.click),document.addEventListener("keydown",i.dismiss.key),l.onmousedown=i.drag.mousedown,()=>{c.style.backgroundColor="transparent",l.style.animation="alert-zoom-fade-out 0.165s ease-out",l.onanimationend=()=>{if(c.remove(),(m=JSON.parse(localStorage.alertQueue)).shift(),localStorage.alertQueue=JSON.stringify(m),document.removeEventListener("keydown",i.dismiss.key),0<m.length){let e=document.getElementById(m[0]);setTimeout(()=>{e.style.display="",setTimeout(()=>e.classList.add("animated"),100)},500)}}});return c.id},async askAndGetReply(e){return chatgpt.send(e),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},autoRefresh:{activate(e){if(this.isActive)return console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh already active!`);let o=this,r=(this.toggle.refreshFrame(),t=>{var e=Math.max(2,Math.floor(21*chatgpt.randomFloat()-10));o.isActive=setTimeout(()=>{var e=document.querySelector(chatgpt.selectors.ssgManifest);e&&(document.querySelector("#refresh-frame").src=e.src+"?"+Date.now(),console.log(`↻ ChatGPT >> [${o.nowTimeStamp()}] ChatGPT session refreshed`)),r(t)},1e3*(t+e))});r(e?parseInt(e,10):30),console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh activated`),navigator.userAgent.includes("Chrome")&&void 0!==document.hidden&&document.addEventListener("visibilitychange",this.toggle.beacons)},deactivate(){this.isActive?(this.toggle.refreshFrame(),document.removeEventListener("visibilitychange",this.toggle.beacons),clearTimeout(this.isActive),this.isActive=null,console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh de-activated`)):console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Auto refresh already inactive!`)},nowTimeStamp(){var e=new Date,t=e.getHours()%12||12;let o=e.getMinutes(),r=e.getSeconds();o<10&&(o="0"+o),r<10&&(r="0"+r);e=e.getHours()<12?"AM":"PM";return`${t}:${o}:${r} `+e},toggle:{beacons(){chatgpt.autoRefresh.beaconID?(clearInterval(chatgpt.autoRefresh.beaconID),chatgpt.autoRefresh.beaconID=null,console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Beacons de-activated`)):(chatgpt.autoRefresh.beaconID=setInterval(()=>{navigator.sendBeacon("https://httpbin.org/post",new Uint8Array),console.log(`↻ ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Beacon sent`)},9e4),console.log(`ChatGPT >> [${chatgpt.autoRefresh.nowTimeStamp()}] Beacons activated`))},refreshFrame(){let e=document.querySelector("#refresh-frame");e?e.remove():(e=Object.assign(document.createElement("iframe"),{id:"refresh-frame",style:"display: none"}),document.head.prepend(e))}}},browser:{isLightMode(){return window.matchMedia?.("(prefers-color-scheme: light)")?.matches},isDarkMode(){return window.matchMedia?.("(prefers-color-scheme: dark)")?.matches},isChromium(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Chromium")},isChrome(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Chrome")},isEdge(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Edge")},isBrave(){return!!JSON.stringify(navigator.userAgentData?.brands)?.includes("Brave")},isFirefox(){return navigator.userAgent.includes("Firefox")},isFullScreen(){var e=navigator.userAgent;return e.includes("Chrome")?window.matchMedia("(display-mode: fullscreen)").matches:e.includes("Firefox")?window.fullScreen:/MSIE|rv:/.test(e)?document.msFullscreenElement:document.webkitIsFullScreen},isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}},async clearChats(){return new Promise((o,r)=>chatgpt.getAccessToken().then(e=>{let t=new XMLHttpRequest;t.open("PATCH",chatgpt.endpoints.openAI.chats,!0),t.setRequestHeader("Content-Type","application/json"),t.setRequestHeader("Authorization","Bearer "+e),t.onload=()=>{if(200!=t.status)return r("🤖 chatgpt.js >> Request failed. Cannot clear chats.");console.info("Chats successfully cleared"),o()},t.send(JSON.stringify({is_visible:!1}))}).catch(e=>r(new Error(e.message))))},code:{async execute(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Display the output as if you were terminal:\n\n"+e),console.info("Executing code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},extract(e){var t=e.match(/(?<=```.*\n)[\s\S]*?(?=```)/g);return t?t[t.length-1]:e},async isIdle(t=null){let a={childList:!0,subtree:!0};var e=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,o=(async()=>{await new Promise(o=>{document.querySelector(chatgpt.selectors.chatDivs.msg)?o():new MutationObserver((e,t)=>{document.querySelector(chatgpt.selectors.chatDivs.msg)&&(t.disconnect(),o())}).observe(document.body,a)}),await new Promise(o=>new MutationObserver((e,t)=>{chatgpt.getStopBtn()&&(t.disconnect(),o())}).observe(document.body,{childList:!0,subtree:!0}));let e=document.querySelectorAll(chatgpt.selectors.chatDivs.reply),r=e[e.length-1];return await new Promise(o=>new MutationObserver((e,t)=>{r?.querySelector("pre")&&(t.disconnect(),o())}).observe(document.body,a)),new Promise(o=>new MutationObserver((e,t)=>{!r?.querySelector("pre")?.nextElementSibling&&chatgpt.getStopBtn()||(t.disconnect(),o(!0))}).observe(document.body,a))})();return e?Promise.race([o,e]):o},async minify(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Minify the following code:\n\n"+e),console.info("Minifying code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},async obfuscate(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Obfuscate the following code:\n\n"+e),console.info("Obfuscating code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},async refactor(e,t){if(!e)return console.error("Code (1st) argument not supplied. Pass some code!");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send(`Refactor the following code for ${t||"brevity"}:
78
78
 
79
79
  `+e),console.info("Refactoring code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))},async review(e){return e?"string"==typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Review the following code for me:\n\n"+e),console.info("Reviewing code..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")):console.error("Code argument not supplied. Pass some code!")},async unminify(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(chatgpt.send("Unminify the following code.:\n\n"+e),console.info("Unminifying code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},async write(e,t){if(!e)return console.error("Prompt (1st) argument not supplied. Pass a prompt!");if(!t)return console.error("outputLang (2nd) argument not supplied. Pass a language!");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send(e+`
80
80
 
81
81
  Write this as code in `+t),console.info("Writing code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))}},continue(){chatgpt.response.continue()},async detectLanguage(e){return e?"string"!=typeof e?console.error("Text argument must be a string!"):(chatgpt.send(`Detect the language of the following text:
82
82
 
83
- `+e+"\n\nOnly respond with the name of the language"),console.info("Reviewing text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")):console.error("Text argument not supplied. Pass some text!")},executeCode(){chatgpt.code.execute()},async exportChat(e,t){e=e?Number.isInteger(e)||/^\d+$/.test(e)?parseInt(e,10):e:"active",t=t.toLowerCase()||"html",console.info("Generating transcript...");let a="",o;if(/te?xt/.test(t)){var r=new Date,n=r.getDate().toString().padStart(2,"0"),s=(r.getMonth()+1).toString().padStart(2,"0"),i=r.getFullYear(),c=r.getHours().toString().padStart(2,"0"),r=r.getMinutes().toString().padStart(2,"0");if(o=`ChatGPT_${n}-${s}-${i}_${c}-${r}.txt`,"active"==e&&/\/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/.test(window.location.href)){n=document.querySelectorAll(chatgpt.selectors.chatDivs.convo);if(!n.length)return console.error("Chat is empty!");let o=[],r=!0;n.forEach(e=>{var t=r?"USER":"CHATGPT",e=(r=!r,Array.from(e.childNodes).map(e=>e.innerText).join("\n\n").replace("Copy code",""));o.push(t+": "+e)}),a=o.join("\n\n")}else for(var l of await chatgpt.getChatData(e,"msg","both","all"))a+=`USER: ${l.user}
83
+ `+e+"\n\nOnly respond with the name of the language"),console.info("Reviewing text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")):console.error("Text argument not supplied. Pass some text!")},executeCode(){chatgpt.code.execute()},async exportChat(e,t){e=e?Number.isInteger(e)||/^\d+$/.test(e)?parseInt(e,10):e:"active",t=t.toLowerCase()||"html",console.info("Generating transcript...");let a="",o;if(/te?xt/.test(t)){var r=new Date,n=r.getDate().toString().padStart(2,"0"),s=(r.getMonth()+1).toString().padStart(2,"0"),i=r.getFullYear(),c=r.getHours().toString().padStart(2,"0"),r=r.getMinutes().toString().padStart(2,"0");if(o=`ChatGPT_${n}-${s}-${i}_${c}-${r}.txt`,"active"==e&&/\/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/.test(window.location.href)){n=document.querySelectorAll(chatgpt.selectors.chatDivs.convo);if(!n.length)return console.error("Chat is empty!");let o=[],r=!0;n.forEach(e=>{var t=r?"USER":"CHATGPT",e=(r=!r,[...e.childNodes].map(e=>e.innerText).join("\n\n").replace("Copy code",""));o.push(t+": "+e)}),a=o.join("\n\n")}else for(var l of await chatgpt.getChatData(e,"msg","both","all"))a+=`USER: ${l.user}
84
84
 
85
85
  CHATGPT: ${l.chatgpt}
86
86
 
@@ -88,8 +88,8 @@ CHATGPT: ${l.chatgpt}
88
88
  `+` [${t}]`);return new Promise((r,a)=>{let n=new XMLHttpRequest;n.open("GET",chatgpt.endpoints.openAI.session,!0),n.setRequestHeader("Content-Type","application/json"),n.onload=()=>{if(200!=n.status)return a("🤖 chatgpt.js >> Request failed. Cannot retrieve account details.");var e,t=JSON.parse(n.responseText).user,o={};for(e of s)o[e]=t[e];return r(o)},n.send()})},getChatBox(){return document.getElementById("prompt-textarea")},getChatData(d=1,r="all",h="all",p="all"){var e,t=["all","id","title","create_time","update_time","msg"],o=["all","both","user","chatgpt"];d=d?Number.isInteger(d)||/^\d+$/.test(d)?0==parseInt(d,10)?0:parseInt(d,10)-1:d:"active",r=["all",""].includes(r)?t.filter(e=>/^(?!all$|msg$).*/.test(e)):Array.isArray(r)?r:[r],h=h?o.includes(h)?h:"invalid":"all",p=Number.isInteger(p)||/^\d+$/.test(p)?0==parseInt(p,10)?0:parseInt(p,10)-1:["all","latest"].includes(p.toLowerCase())?p.toLowerCase():p?"invalid":"all";for(e of r)if(!t.includes(e))return console.error(`Invalid detail arg '${e}' passed. Valid details are:
89
89
  `+` [${t}]`);if("invalid"==h)return console.error("Invalid sender arg passed. Valid senders are:\n"+` [${o}]`);if("invalid"==p)return console.error("Invalid msgToGet arg passed. Valid msg's to get are:\n [ 'all' | 'latest' | index of msg to get ]");let a=(e,c)=>{let l=/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/;return new Promise((t,s)=>{let i=new XMLHttpRequest;i.open("GET",chatgpt.endpoints.openAI.chats,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("Authorization","Bearer "+e),i.onload=()=>{if(200!=i.status)return s("🤖 chatgpt.js >> Request failed. Cannot retrieve chat details.");var o=JSON.parse(i.responseText).items;if(o.length<=0)return s("🤖 chatgpt.js >> Chat list is empty.");var r={};if(Number.isInteger(d)||"latest"==d||"active"==d&&!new RegExp(`/${l.source}$`).test(location.href)){if((d=Number.isInteger(d)?d:0)>o.length)return s("🤖 chatgpt.js >> Chat with index "+(d+1)+` is out of bounds. Only ${o.length} chats exist!`);for(var e of c)r[e]=o[d][e]}else{var a,n="active"==d||new RegExp(`^${l.source}$`).test(d)?"id":"title";"active"==d&&(d=l.exec(window.location.href)[0]);let e,t;for(e=0;e<o.length;e++)if(o[e][n]==d){t=!0;break}if(!t)return s(`🤖 chatgpt.js >> No chat with ${n} = ${d} found.`);for(a of c)r[a]=o[e][a]}return t(r)},i.send()})};return new Promise(o=>chatgpt.getAccessToken().then(e=>{return o(r.includes("msg")?(t=e,new Promise((d,g)=>{let u=new XMLHttpRequest;a(t,["id"]).then(e=>{u.open("GET",chatgpt.endpoints.openAI.chat+"/"+e.id,!0),u.setRequestHeader("Content-Type","application/json"),u.setRequestHeader("Authorization","Bearer "+t),u.onload=()=>{if(200!=u.status)return g("🤖 chatgpt.js >> Request failed. Cannot retrieve chat messages.");var e,t,o=JSON.parse(u.responseText).mapping,r=[],a=[],n=[];for(e in o)null!=o[e].message&&"user"==o[e].message.author.role&&r.push({id:o[e].id,msg:o[e].message});if(r.sort((e,t)=>e.msg.create_time-t.msg.create_time),parseInt(p,10)+1>r.length)return g("🤖 chatgpt.js >> Message/response with index "+(p+1)+` is out of bounds. Only ${r.length} messages/responses exist!`);for(t of r){let e=[];for(var s in o)null!=o[s].message&&"assistant"==o[s].message.author.role&&o[s].parent==t.id&&e.push(o[s].message);e.sort((e,t)=>e.create_time-t.create_time),e=1==(e=e.map(e=>{switch(e.content.content_type){case"code":return e.content.text;case"text":return e.content.parts[0];default:return}})).length?e[0]:e,a.push(e)}if("user"==h)for(var i in r)n.push(r[i].msg.content.parts[0]);else if("chatgpt"==h)for(var c of a)n.push("latest"==p?a[a.length-1]:c);else{let e=0;for(var l in r)n.push({user:r[l].msg.content.parts[0],chatgpt:"latest"==p?a[e][a[e].length-1]:a[e]}),e++}return d("all"==p?n:"latest"==p?n[n.length-1]:n[p])},u.send()})})):a(e,r));var t}))},getChatInput(){return chatgpt.getChatBox().firstChild.innerText},getContinueButton(){return document.querySelector(chatgpt.selectors.btns.continue)},getErrorMsg(){return document.querySelector(chatgpt.selectors.errors.txt+":last-of-type")?.innerText},getFooterDiv(){return chatgpt.footer.get()},getHeaderDiv(){return chatgpt.header.get()},getLastPrompt(){return chatgpt.getChatData("active","msg","user","latest")},getLastResponse(){return chatgpt.getChatData("active","msg","chatgpt","latest")},getLoginButton(){return document.querySelector(chatgpt.selectors.btns.login)},getNewChatButton(){return document.querySelector(chatgpt.selectors.btns.newChat)},getNewChatLink(){return document.querySelector(chatgpt.selectors.links.newChat)},getRegenerateButton(){return document.querySelector(chatgpt.selectors.btns.regen)},getResponse(){return chatgpt.response.get(...arguments)},getResponseFromAPI(e,t){return chatgpt.response.getFromAPI(e,t)},getResponseFromDOM(e){return chatgpt.response.getFromDOM(e)},getScrollToBottomButton(){return document.querySelector(chatgpt.selectors.btns.scroll)},getSendButton(){return document.querySelector(chatgpt.selectors.btns.send)},getStopButton(){return document.querySelector(chatgpt.selectors.btns.stop)},getUserLanguage(){return navigator.languages[0]||navigator.language||navigator.browserLanguage||navigator.systemLanguage||navigator.userLanguage||""},getVoiceButton(){return document.querySelector(chatgpt.selectors.btns.voice)},header:{get(){return document.querySelector(chatgpt.selectors.header)},hide(){chatgpt.header.get().style.display="none"},show(){chatgpt.header.get().style.display="flex"}},hideFooter(){chatgpt.footer.hide()},hideHeader(){chatgpt.header.hide()},history:{async isLoaded(t=null){var e=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,o=new Promise(o=>{document.querySelector(chatgpt.selectors.chatHistory)?o(!0):new MutationObserver((e,t)=>{document.querySelector(chatgpt.selectors.chatHistory)&&(t.disconnect(),o(!0))}).observe(document.documentElement,{childList:!0,subtree:!0})});return e?Promise.race([o,e]):o}},instructions:{add(r,a){var e;return r?"string"!=typeof r?console.error("Instruction must be a string"):(e=["user","chatgpt"],a?"string"!=typeof a?console.error("Target must be a string"):(a=a.toLowerCase(),e.includes(a)?(r=`
90
90
 
91
- `+r,new Promise(o=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==a?t.about_user_message+=r:"chatgpt"==a&&(t.about_model_message+=r),await this.sendRequest("POST",e,t),o()})})):console.error(`Invalid target ${a}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")):console.error("Please provide an instruction")},clear(r){var e=["user","chatgpt"];return r?"string"!=typeof r?console.error("Target must be a string"):(r=r.toLowerCase(),e.includes(r)?new Promise(o=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==r?t.about_user_message="":"chatgpt"==r&&(t.about_model_message=""),await this.sendRequest("POST",e,t),o()})}):console.error(`Invalid target ${r}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")},fetchData(){return new Promise(t=>chatgpt.getAccessToken().then(async e=>t(await this.sendRequest("GET",e))))},sendRequest(a,e,n){for(let e=0;e<arguments.length-1;e++)if("string"==typeof arguments[e])return console.error(`Argument ${e+1} must be a string`);var t=["POST","GET"];return(a=(a||"").trim().toUpperCase())&&t.includes(a)?e?n&&"object"!=typeof n?console.error(`Invalid body data type. Got ${typeof n}, expected object`):new Promise((t,o)=>{let r=new XMLHttpRequest;r.open(a,chatgpt.endpoints.openAI.instructions,!0),r.setRequestHeader("Accept-Language","en-US"),r.setRequestHeader("Authorization","Bearer "+e),"POST"==a&&r.setRequestHeader("Content-Type","application/json"),r.onload=()=>{var e=JSON.parse(r.responseText);return 422==r.status?o("🤖 chatgpt.js >> Character limit exceeded. Custom instructions can have a maximum length of 1500 characters."):403==r.status&&"content_policy"==e.detail.reason?o("🤖 chatgpt.js >> "+e.detail.description):200!=r.status?o("🤖 chatgpt.js >> Request failed. Cannot contact custom instructions endpoint."):(console.info("Custom instructions successfully contacted with method "+a),t(e||{}))},r.send(JSON.stringify(n)||"")}):console.error("Please provide a valid access token!"):console.error("Valid methods are "+t)},turnOff(){return new Promise(o=>chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!1,await this.sendRequest("POST",e,t),o()}))},turnOn(){return new Promise(o=>chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!0,await this.sendRequest("POST",e,t),o()}))},toggle(){return new Promise(t=>this.fetchData().then(async e=>(await(e.enabled?this.turnOff():this.turnOn()),t())))}},isDarkMode(){return document.documentElement.className.includes("dark")},isFullScreen(){return chatgpt.browser.isFullScreen()},async isIdle(t=null){let e={childList:!0,subtree:!0};var o=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,r=(async()=>(await new Promise(o=>{document.querySelector(chatgpt.selectors.chatDivs.msg)?o():new MutationObserver((e,t)=>{document.querySelector(chatgpt.selectors.chatDivs.msg)&&(t.disconnect(),o())}).observe(document.body,e)}),await new Promise(o=>new MutationObserver((e,t)=>{chatgpt.getStopBtn()&&(t.disconnect(),o())}).observe(document.body,e)),new Promise(o=>new MutationObserver((e,t)=>{chatgpt.getStopBtn()||(t.disconnect(),o(!0))}).observe(document.body,e))))();return o?Promise.race([r,o]):r},async isLoaded(t=null){var e=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,o=new Promise(o=>{chatgpt.getNewChatBtn()?o(!0):new MutationObserver((e,t)=>{chatgpt.getNewChatBtn()&&(t.disconnect(),o(!0))}).observe(document.documentElement,{childList:!0,subtree:!0})});return e?Promise.race([o,e]):o},isLightMode(){return document.documentElement.classList.toString().includes("light")},isTempChat(){return"?temporary-chat=true"==location.search},isTyping(){return!!this.getStopButton()},login(){window.location.href="https://chat.openai.com/auth/login"},logout(){window.location.href="https://chat.openai.com/auth/logout"},menu:{elems:[],append(e,t={}){var o=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!o.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elems are [${o}]`);let r=document.createElement("dropdown"==e?"select":"button"==e?"a":e);if(r.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),"button"==e){r.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";o=document.createElement("img");o.src=t?.icon&&"string"==typeof t.icon?t.icon:chatgpt.endpoints.assets+"/starters/chrome/extension/icons/icon128.png",o.width=18,r.firstChild.before(o),r.onclick=t?.onclick&&"function"==typeof t.onclick?t.onclick:function(){}}else if("dropdown"==e){if(t?.items&&Array.isArray(t.items)&&t.items.length||(t.items=[{text:"🤖 chatgpt.js option",value:"chatgpt.js option value"}]),!t.items.every(e=>"object"==typeof e))return console.error("'items' must be an array of objects!");r.style="background-color: #000; width: 100%; border: none;",t.items.forEach(e=>{var t=document.createElement("option");t.textContent=e?.text,t.value=e?.value,r.add(t)})}let a=()=>{var e,t=document.querySelectorAll("a[role=menuitem]");let o;for(e of t)if("Settings"==e.textContent){o=e.classList;break}let r=t[0].parentNode;chatgpt.menu.elems.forEach(e=>{if(e.setAttribute("class",o),!r.contains(e))try{r.firstChild.before(e)}catch(e){console.error(e)}})};this.elems.push(r);o=document.querySelector("nav button[id*=headless]");return this.addedEvent||(o?.addEventListener("click",()=>setTimeout(a,25)),this.addedEvent=!0),r.id},close(){try{document.querySelector("nav [id*=menu-button][aria-expanded=true]").click()}catch(e){console.error(e.message)}},open(){try{document.querySelector("nav [id*=menu-button][aria-expanded=false]").click()}catch(e){console.error(e.message)}}},minify(){chatgpt.code.minify()},notify(e,t,o,r){o=o?+o:1.75;let a=document.createElement("div");a.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),a.classList.add("chatgpt-notif"),a.innerText=e,document.body.append(a);var e=document.createElement("div"),n=(e.title="Dismiss",e.classList.add("notif-close-btn","no-mobile-tap-outline"),document.createElementNS("http://www.w3.org/2000/svg","svg")),s=(n.setAttribute("height","8px"),n.setAttribute("viewBox","0 0 14 14"),n.setAttribute("fill","none"),n.style.height=n.style.width="8px",document.createElementNS("http://www.w3.org/2000/svg","path")),s=(s.setAttribute("fill-rule","evenodd"),s.setAttribute("clip-rule","evenodd"),s.setAttribute("fill","white"),s.setAttribute("d","M13.7071 1.70711C14.0976 1.31658 14.0976 0.683417 13.7071 0.292893C13.3166 -0.0976312 12.6834 -0.0976312 12.2929 0.292893L7 5.58579L1.70711 0.292893C1.31658 -0.0976312 0.683417 -0.0976312 0.292893 0.292893C-0.0976312 0.683417 -0.0976312 1.31658 0.292893 1.70711L5.58579 7L0.292893 12.2929C-0.0976312 12.6834 -0.0976312 13.3166 0.292893 13.7071C0.683417 14.0976 1.31658 14.0976 1.70711 13.7071L7 8.41421L12.2929 13.7071C12.6834 14.0976 13.3166 14.0976 13.7071 13.7071C14.0976 13.3166 14.0976 12.6834 13.7071 12.2929L8.41421 7L13.7071 1.70711Z"),n.append(s),e.append(n),a.append(e),a.isTop=!t||!/low|bottom/i.test(t),a.isRight=!t||!/left/i.test(t),a.quadrant=(a.isTop?"top":"bottom")+(a.isRight?"Right":"Left"),1735767823541);let i=document.querySelector("#chatgpt-notif-style"),c=((!i||parseInt(i.getAttribute("last-updated"),10)<s)&&(i||((i=document.createElement("style")).id="chatgpt-notif-style",i.setAttribute("last-updated",s.toString()),document.head.append(i)),i.innerText='.chatgpt-notif {font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC","Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif ;.no-mobile-tap-outline { outline: none ; -webkit-tap-highlight-color: transparent }background-color: black ; padding: 10px 13px 10px 18px ;border-radius: 11px ; border: 1px solid #f5f5f7 ;opacity: 0 ; position: fixed ; z-index: 9999 ; font-size: 1.8rem ; color: white ;user-select: none ; -webkit-user-select: none ; -moz-user-select: none ; -o-user-select: none ;-ms-user-select: none ;'+`transform: translateX(${a.isRight?"":"-"}35px) ;`+(r?`--shadow: -8px 13px 25px 0 ${/\b(?:shadow|on)\b/i.test(r)?"gray":r};
91
+ `+r,new Promise(o=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==a?t.about_user_message+=r:"chatgpt"==a&&(t.about_model_message+=r),await this.sendRequest("POST",e,t),o()})})):console.error(`Invalid target ${a}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")):console.error("Please provide an instruction")},clear(r){var e=["user","chatgpt"];return r?"string"!=typeof r?console.error("Target must be a string"):(r=r.toLowerCase(),e.includes(r)?new Promise(o=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==r?t.about_user_message="":"chatgpt"==r&&(t.about_model_message=""),await this.sendRequest("POST",e,t),o()})}):console.error(`Invalid target ${r}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")},fetchData(){return new Promise(t=>chatgpt.getAccessToken().then(async e=>t(await this.sendRequest("GET",e))))},sendRequest(a,e,n){for(let e=0;e<arguments.length-1;e++)if("string"==typeof arguments[e])return console.error(`Argument ${e+1} must be a string`);var t=["POST","GET"];return(a=(a||"").trim().toUpperCase())&&t.includes(a)?e?n&&"object"!=typeof n?console.error(`Invalid body data type. Got ${typeof n}, expected object`):new Promise((t,o)=>{let r=new XMLHttpRequest;r.open(a,chatgpt.endpoints.openAI.instructions,!0),r.setRequestHeader("Accept-Language","en-US"),r.setRequestHeader("Authorization","Bearer "+e),"POST"==a&&r.setRequestHeader("Content-Type","application/json"),r.onload=()=>{var e=JSON.parse(r.responseText);return 422==r.status?o("🤖 chatgpt.js >> Character limit exceeded. Custom instructions can have a maximum length of 1500 characters."):403==r.status&&"content_policy"==e.detail.reason?o("🤖 chatgpt.js >> "+e.detail.description):200!=r.status?o("🤖 chatgpt.js >> Request failed. Cannot contact custom instructions endpoint."):(console.info("Custom instructions successfully contacted with method "+a),t(e||{}))},r.send(JSON.stringify(n)||"")}):console.error("Please provide a valid access token!"):console.error("Valid methods are "+t)},turnOff(){return new Promise(o=>chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!1,await this.sendRequest("POST",e,t),o()}))},turnOn(){return new Promise(o=>chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!0,await this.sendRequest("POST",e,t),o()}))},toggle(){return new Promise(t=>this.fetchData().then(async e=>(await(e.enabled?this.turnOff():this.turnOn()),t())))}},isDarkMode(){return document.documentElement.classList.contains("dark")},isFullScreen(){return chatgpt.browser.isFullScreen()},async isIdle(t=null){let e={childList:!0,subtree:!0};var o=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,r=(async()=>(await new Promise(o=>{document.querySelector(chatgpt.selectors.chatDivs.msg)?o():new MutationObserver((e,t)=>{document.querySelector(chatgpt.selectors.chatDivs.msg)&&(t.disconnect(),o())}).observe(document.body,e)}),await new Promise(o=>new MutationObserver((e,t)=>{chatgpt.getStopBtn()&&(t.disconnect(),o())}).observe(document.body,e)),new Promise(o=>new MutationObserver((e,t)=>{chatgpt.getStopBtn()||(t.disconnect(),o(!0))}).observe(document.body,e))))();return o?Promise.race([r,o]):r},async isLoaded(t=null){var e=t?new Promise(e=>setTimeout(()=>e(!1),t)):null,o=new Promise(o=>{chatgpt.getNewChatBtn()?o(!0):new MutationObserver((e,t)=>{chatgpt.getNewChatBtn()&&(t.disconnect(),o(!0))}).observe(document.documentElement,{childList:!0,subtree:!0})});return e?Promise.race([o,e]):o},isLightMode(){return document.documentElement.classList.contains("light")},isTempChat(){return"?temporary-chat=true"==location.search},isTyping(){return!!this.getStopButton()},login(){window.location.href="https://chat.openai.com/auth/login"},logout(){window.location.href="https://chat.openai.com/auth/logout"},menu:{elems:[],append(e,t={}){var o=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!o.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elems are [${o}]`);let r=document.createElement("dropdown"==e?"select":"button"==e?"a":e);if(r.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),"button"==e){r.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";o=document.createElement("img");o.src=t?.icon&&"string"==typeof t.icon?t.icon:chatgpt.endpoints.assets+"/starters/chrome/extension/icons/icon128.png",o.width=18,r.firstChild.before(o),r.onclick=t?.onclick&&"function"==typeof t.onclick?t.onclick:function(){}}else if("dropdown"==e){if(t?.items&&Array.isArray(t.items)&&t.items.length||(t.items=[{text:"🤖 chatgpt.js option",value:"chatgpt.js option value"}]),!t.items.every(e=>"object"==typeof e))return console.error("'items' must be an array of objects!");r.style="background-color: #000; width: 100%; border: none;",t.items.forEach(e=>{var t=document.createElement("option");t.textContent=e?.text,t.value=e?.value,r.add(t)})}let a=()=>{var e,t=document.querySelectorAll("a[role=menuitem]");let o;for(e of t)if("Settings"==e.textContent){o=e.classList;break}let r=t[0].parentNode;chatgpt.menu.elems.forEach(e=>{if(e.setAttribute("class",o),!r.contains(e))try{r.firstChild.before(e)}catch(e){console.error(e)}})};this.elems.push(r);o=document.querySelector("nav button[id*=headless]");return this.addedEvent||(o?.addEventListener("click",()=>setTimeout(a,25)),this.addedEvent=!0),r.id},close(){try{document.querySelector("nav [id*=menu-button][aria-expanded=true]").click()}catch(e){console.error(e.message)}},open(){try{document.querySelector("nav [id*=menu-button][aria-expanded=false]").click()}catch(e){console.error(e.message)}}},minify(){chatgpt.code.minify()},notify(e,t,o,r){o=o?+o:1.75;let a=document.createElement("div");a.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),a.classList.add("chatgpt-notif"),a.textContent=e,document.body.append(a);var e=document.createElement("div"),n=(e.title="Dismiss",e.classList.add("notif-close-btn","no-mobile-tap-outline"),document.createElementNS("http://www.w3.org/2000/svg","svg")),s=(n.setAttribute("height","8px"),n.setAttribute("viewBox","0 0 14 14"),n.setAttribute("fill","none"),n.style.height=n.style.width="8px",document.createElementNS("http://www.w3.org/2000/svg","path")),s=(s.setAttribute("fill-rule","evenodd"),s.setAttribute("clip-rule","evenodd"),s.setAttribute("fill","white"),s.setAttribute("d","M13.7071 1.70711C14.0976 1.31658 14.0976 0.683417 13.7071 0.292893C13.3166 -0.0976312 12.6834 -0.0976312 12.2929 0.292893L7 5.58579L1.70711 0.292893C1.31658 -0.0976312 0.683417 -0.0976312 0.292893 0.292893C-0.0976312 0.683417 -0.0976312 1.31658 0.292893 1.70711L5.58579 7L0.292893 12.2929C-0.0976312 12.6834 -0.0976312 13.3166 0.292893 13.7071C0.683417 14.0976 1.31658 14.0976 1.70711 13.7071L7 8.41421L12.2929 13.7071C12.6834 14.0976 13.3166 14.0976 13.7071 13.7071C14.0976 13.3166 14.0976 12.6834 13.7071 12.2929L8.41421 7L13.7071 1.70711Z"),n.append(s),e.append(n),a.append(e),a.isTop=!t||!/low|bottom/i.test(t),a.isRight=!t||!/left/i.test(t),a.quadrant=(a.isTop?"top":"bottom")+(a.isRight?"Right":"Left"),1735767823541);let i=document.querySelector("#chatgpt-notif-style"),c=((!i||parseInt(i.getAttribute("last-updated"),10)<s)&&(i||((i=document.createElement("style")).id="chatgpt-notif-style",i.setAttribute("last-updated",s.toString()),document.head.append(i)),i.textContent='.chatgpt-notif {font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC","Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif ;.no-mobile-tap-outline { outline: none ; -webkit-tap-highlight-color: transparent }background-color: black ; padding: 10px 13px 10px 18px ;border-radius: 11px ; border: 1px solid #f5f5f7 ;opacity: 0 ; position: fixed ; z-index: 9999 ; font-size: 1.8rem ; color: white ;user-select: none ; -webkit-user-select: none ; -moz-user-select: none ; -o-user-select: none ;-ms-user-select: none ;'+`transform: translateX(${a.isRight?"":"-"}35px) ;`+(r?`--shadow: -8px 13px 25px 0 ${/\b(?:shadow|on)\b/i.test(r)?"gray":r};
92
92
  box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow)`:"")+"}"+`.notif-close-btn {
93
- cursor: pointer ; float: right ; position: relative ; right: -4px ; margin-left: -3px ;`+"display: grid }@keyframes notif-zoom-fade-out { 0% { opacity: 1 ; transform: scale(1) }15% { opacity: 0.35 ; transform: rotateX(-27deg) scale(1.05) }45% { opacity: 0.05 ; transform: rotateX(-81deg) }100% { opacity: 0 ; transform: rotateX(-180deg) scale(1.15) }}"),JSON.parse(localStorage.notifyProps));c.queue[a.quadrant].push(a.id),localStorage.notifyProps=JSON.stringify(c),a.style.top=a.isTop?23..toString()+"px":"",a.style.bottom=a.isTop?"":23..toString()+"px",a.style.right=a.isRight?27..toString()+"px":"",a.style.left=a.isRight?"":27..toString()+"px";e=c.queue[a.quadrant];if(1<e.length)try{for(var l of e.slice(0,-1)){var d=document.getElementById(l),g=d.style.top?"top":"bottom",u=+/\d+/.exec(d.style[g])[0]+5+d.getBoundingClientRect().height;d.style[g]=u+"px"}}catch(e){}setTimeout(()=>{a.style.opacity=chatgpt.isDarkMode()?.8:.67,a.style.transform="translateX(0)",a.style.transition="transform 0.15s ease, opacity 0.15s ease"},10);t=()=>{a.style.animation="notif-zoom-fade-out 0.35s ease-out",clearTimeout(h)};let h=setTimeout(t,1e3*(o<.35?0:o-.35));return n.onclick=t,a.onanimationend=()=>{a.remove(),(c=JSON.parse(localStorage.notifyProps)).queue[a.quadrant].shift(),localStorage.notifyProps=JSON.stringify(c)},a},obfuscate(){chatgpt.code.obfuscate()},printAllFunctions(){let o={cmdPrompt:["#ff00ff","#00ff00"],objName:["#0611e9","#f9ee16"],methodName:["#005aff","#ffa500"],entryType:["#467e06","#b981f9"],srcMethod:["#ff0000","#00ffff"]};Object.keys(o).forEach(e=>{o[e][1]=o[e][1]||"#"+(16777215^Number("0x1"+o[e][0].replace(/^#/,""))).toString(16).substring(1).toUpperCase()});var e=[];for(let t in this)if("function"==typeof this[t]){var r=!Object.keys(this).find(e=>Object.keys(this[e]).includes(this[t].name));e.push([r?"chatgpt":"other",t])}else if("object"==typeof this[t])for(var a in this[t])"function"==typeof this[t][a]&&e.push([t,a]);e.sort((e,t)=>e[0].localeCompare(t[0])||e[1].localeCompare(t[1]));var n=window.matchMedia("(prefers-color-scheme: dark)").matches,s="font-family: monospace ; font-size: larger ; ";console.log("\n%c🤖 chatgpt.js methods\n","font-family: sans-serif ; font-size: xxx-large ; font-weight: bold");for(let t of e){var i=/chatgpt|other/.test(t[0]),c="chatgpt"==t[0]?this[t[1]].name:"other"!=t[0]?t[0]+"."+t[1]:Object.keys(this).find(e=>Object.keys(this[e]).includes(this[t[1]].name))+"."+this[t[1]].name,l="AsyncFunction"==this[t[1]]?.constructor.name;console.log("%c>> %c"+(i?"":t[0]+".%c")+t[1]+" - https://chatgptjs.org/userguide/"+/(?:.*\.)?(.*)/.exec(c)[1].toLowerCase()+(l?"-async":"")+"\n%c[%c"+("chatgpt"==t[0]&&t[1]==this[t[1]].name||!i?"Function":"Alias of")+"%c: %c"+c+"%c]",s+"font-weight: bold ; color:"+o.cmdPrompt[+n],s+"font-weight: bold ;color:"+o[i?"methodName":"objName"][+n],s+"font-weight: "+(i?"initial":"bold")+";color:"+(i?"initial":o.methodName[+n]),s+"font-weight: "+(i?"bold":"initial")+";color:"+(i?o.entryType[+n]:"initial"),s+"font-weight: "+(i?"initial":"bold")+";color:"+(i?"initial":o.entryType[+n]),s+(i?"font-style: italic":"font-weight: initial")+";color:"+(i?o.srcMethod[+n]:"initial"),s+(i?"font-weight: initial":"font-style: italic")+";color:"+(i?"initial":o.srcMethod[+n]),i?"":s+"color: initial ; font-weight: initial")}},randomFloat(){return(window.crypto||window.msCrypto)?.getRandomValues(new Uint32Array(1))[0]/4294967295||Math.random()},refactor(){chatgpt.code.refactor()},regenerate(){chatgpt.response.regenerate()},renderHTML(s){var i,e=/<([a-z\d]+)\b([^>]*)>([\s\S]*?)<\/\1>/g,c=/(\S+)=['"]?((?:.(?!['"]?\s+\S+=|[>']))+.)['"]?/g,t=s.childNodes;chatgpt.renderHTML.preWrapSet||(s.style.whiteSpace="pre-wrap",chatgpt.renderHTML.preWrapSet=!0,setTimeout(()=>chatgpt.renderHTML.preWrapSet=!1,100));for(i of t)if(i.nodeType==Node.TEXT_NODE){var l=i.nodeValue,d=Array.from(l.matchAll(e));if(0<d.length){let e=d[0],[t,o,r,a]=e.slice(0,4),n=document.createElement(o);n.textContent=a;Array.from(r.matchAll(c)).forEach(e=>{var t=e[1],e=e[2].replace(/['"]/g,"");n.setAttribute(t,e)});var d=chatgpt.renderHTML(n),g=document.createTextNode(l.substring(0,e.index)),l=document.createTextNode(l.substring(e.index+t.length));s.replaceChild(g,i),s.insertBefore(d,g.nextSibling),s.insertBefore(l,d.nextSibling)}}else i.nodeType==Node.ELEMENT_NODE&&chatgpt.renderHTML(i);return s},async resend(){chatgpt.send(await chatgpt.getChatData("latest","msg","user","latest"))},response:{continue(){try{chatgpt.getContinueBtn().click()}catch(e){console.error(e.message)}},get(){return(window.location.href.startsWith("https://chatgpt.com/c/")?this.getFromDOM:this.getFromAPI).apply(null,arguments)},getFromAPI(e,t){return e=e||"latest",t=t||"latest",chatgpt.getChatData(e,"msg","chatgpt",t)},getFromDOM(e){var t=document.querySelectorAll("div[data-message-author-role=assistant]"),o=e.toString().toLowerCase();let r="";return t.length?r=(r=(/last|final/.test(o)?t[t.length-1]:t[(Number.isInteger(e)?e:/^\d+/.test(o)?/^\d+/.exec(o)[0]:(/^(?:1|one|fir)(?:st)?$/.test(o)?1:/^(?:2|tw(?:o|en|el(?:ve|f))|seco)(?:nd|t[yi])?(?:e?th)?$/.test(o)?2:/^(?:3|th(?:ree|ir?))(?:rd|teen|t[yi])?(?:e?th)?$/.test(o)?3:/^(?:4|fou?r)(?:teen|t[yi])?(?:e?th)?$/.test(o)?4:/^(?:5|fi(?:ve|f))(?:teen|t[yi])?(?:e?th)?$/.test(o)?5:/^(?:6|six)(?:teen|t[yi])?(?:e?th)?$/.test(o)?6:/^(?:7|seven)(?:teen|t[yi])?(?:e?th)?$/.test(o)?7:/^(?:8|eight?)(?:teen|t[yi])?(?:e?th)?$/.test(o)?8:/^(?:9|nine?)(?:teen|t[yi])?(?:e?th)?$/.test(o)?9:/^(?:10|ten)(?:th)?$/.test(o)?10:1)*(/(?:ty|ieth)$/.test(o)?10:1)+(/teen(?:th)?$/.test(o)?10:0))-1]).textContent).replace(/^ChatGPT(?:ChatGPT)?/,""):console.error("No conversation found!")},getLast(){return chatgpt.getChatData("active","msg","chatgpt","latest")},regenerate(){try{chatgpt.getRegenerateBtn().click()}catch(e){console.error(e.message)}},stopGenerating(){try{chatgpt.getStopBtn().click()}catch(e){console.error(e.message)}}},reviewCode(){chatgpt.code.review()},scrollToBottom(){try{chatgpt.getScrollBtn().click()}catch(e){console.error(e.message)}},send(e,o=""){for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string!`);let r=chatgpt.getChatBox();if(!r)return console.error("Chatbar element not found!");var t=document.createElement("p");t.textContent=e,r.replaceChild(t,r.querySelector("p")),r.dispatchEvent(new Event("input",{bubbles:!0})),setTimeout(function e(){var t=chatgpt.getSendButton();t?.hasAttribute("disabled")?setTimeout(e,222):"click"==o.toLowerCase()||chatgpt.browser.isMobile()?t.click():r.dispatchEvent(new KeyboardEvent("keydown",{key:"Enter",bubbles:!0}))},222)},sendInNewChat(e){if("string"!=typeof e)return console.error("Message must be a string!");try{chatgpt.getNewChatBtn().click()}catch(e){return console.error(e.message)}setTimeout(()=>chatgpt.send(e),500)},settings:{scheme:{isDark(){return document.documentElement.classList.contains("dark")},isLight(){return document.documentElement.classList.contains("light")},set(e){var t=["dark","light","system"];if(!e)return console.error("Please specify a scheme value!");if(!t.includes(e))return console.error(`Invalid scheme value. Valid values are [${t}]`);let o=e;"system"==e&&(o=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),localStorage.setItem("theme",e),console.info(`Scheme set to ${e.toUpperCase()}.`),document.documentElement.classList.contains(o)||this.toggle()},toggle(){var[e,t]=this.isDark()?["dark","light"]:["light","dark"];document.documentElement.classList.replace(e,t),document.documentElement.style.colorScheme=t,localStorage.setItem("theme",t)}}},async sentiment(e,t){for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send("What is the sentiment of the following text"+(t?` towards the entity ${t},`:"")+" from strongly negative to strongly positive?\n\n"+e),console.info("Analyzing sentiment..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},setScheme(e){chatgpt.settings.scheme.set(e)},shareChat(s,i="clipboard"){var e=["alert","notify","notification","clipboard","copy"];if(!e.includes(i))return console.error(`Invalid method '${i}' passed. Valid methods are [${e}].`);return new Promise(o=>{chatgpt.getAccessToken().then(t=>{var a;a=t,new Promise((t,o)=>{let r=new XMLHttpRequest;chatgpt.getChatData(s).then(e=>{r.open("GET",chatgpt.endpoints.openAI.chat+"/"+e.id,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("Authorization","Bearer "+a),r.onload=()=>200!=r.status?o("🤖 chatgpt.js >> Request failed. Cannot retrieve chat node."):t(JSON.parse(r.responseText).current_node),r.send()})}).then(e=>{var a,n;a=t,n=e,new Promise((t,o)=>{let r=new XMLHttpRequest;chatgpt.getChatData(s).then(e=>{r.open("POST",chatgpt.endpoints.openAI.share_create,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("Authorization","Bearer "+a),r.onload=()=>200!=r.status?o("🤖 chatgpt.js >> Request failed. Cannot initialize share chat."):t(JSON.parse(r.responseText)),r.send(JSON.stringify({current_node_id:n,conversation_id:e.id,is_anonymous:!0}))})}).then(e=>{var r,a;r=t,a=e,new Promise((e,t)=>{let o=new XMLHttpRequest;o.open("PATCH",chatgpt.endpoints.openAI.share+"/"+a.share_id,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Authorization","Bearer "+r),o.onload=()=>200!=o.status?t("🤖 chatgpt.js >> Request failed. Cannot share chat."):(console.info(`Chat shared at '${a.share_url}'`),e()),o.send(JSON.stringify({share_id:a.share_id,highlighted_message_id:a.highlighted_message_id,title:a.title,is_public:!0,is_visible:a.is_visible,is_anonymous:a.is_anonymous}))}).then(()=>{["copy","clipboard"].includes(i)?navigator.clipboard.writeText(e.share_url):chatgpt.alert("🚀 Share link created!",`"${e.title}" is available at: <a target="blank" rel="noopener" href="${e.share_url}">${e.share_url}</a>`,[function(){window.open(e.share_url,"_blank","noopener")},function(){navigator.clipboard.writeText(e.share_url)}]),o(e.share_url)})})})})})},showFooter(){chatgpt.footer.show()},showHeader(){chatgpt.header.show()},sidebar:{elems:[],observer:{},activateObserver(){if(this.observer instanceof MutationObserver)try{this.observer.disconnect()}catch(e){}if(!this.elems.length)return console.error("🤖 chatgpt.js >> No elems to append!");let t;for(var e of document.querySelectorAll(chatgpt.selectors.links.sidebarItem))if(/.*chat/.exec(e.text)[0]){t=e.classList,e.parentNode.style.margin="2px 0";break}this.elems.forEach(e=>{e.setAttribute("class",t),e.style.maxHeight=e.style.minHeight="44px",e.style.margin="2px 0"});let o=document.querySelector(chatgpt.selectors.chatHistory);if(!o)return console.error("Sidebar element not found!");this.observer=new MutationObserver(e=>e.forEach(e=>{("childList"==e.type&&e.addedNodes.length||"attributes"==e.type&&"data-chatgptjs"==e.attributeName)&&this.elems.forEach(e=>{if(!o.contains(e))try{o.querySelector("a").parentNode.before(e)}catch(e){console.error(e)}})})),this.observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0})},append(e,t={}){var o=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!o.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elems are [${o}]`);let r=document.createElement("dropdown"==e?"select":e);if(r.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),"button"==e){r.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";o=document.createElement("img");o.src=t?.icon&&"string"==typeof t.icon?t.icon:chatgpt.endpoints.assets+"/starters/chrome/extension/icons/icon128.png",o.width=18,r.firstChild.before(o),r.onclick=t?.onclick&&"function"==typeof t.onclick?t.onclick:function(){}}else if("dropdown"==e){if(t?.items&&Array.isArray(t.items)&&t.items.length||(t.items=[{text:"🤖 chatgpt.js option",value:"chatgpt.js option value"}]),!t.items.every(e=>"object"==typeof e))return console.error("'items' must be an array of objects!");t.items.forEach(e=>{var t=document.createElement("option");t.textContent=e?.text,t.value=e?.value,r.add(t)})}return"dropdown"==e&&(r.style.backgroundColor="var(--gray-900, rgb(32,33,35))"),this.elems.push(r),this.activateObserver(),document.body.setAttribute("data-chatgptjs","observer-trigger"),r.id},exists(){return!!chatgpt.getNewChatLink()},hide(){this.isOn()?this.toggle():console.info("Sidebar already hidden!")},show(){this.isOff()?this.toggle():console.info("Sidebar already shown!")},isOff(){return!this.isOn()},isOn(){var e=chatgpt.sidebar.exists()?document.querySelector(chatgpt.selectors.sidebar):null;return e?chatgpt.browser.isMobile()?"hidden"==document.documentElement.style.overflow:"hidden"!=e.style.visibility&&"0px"!=e.style.width:(console.error("Sidebar element not found!"),!1)},toggle(){var e=document.querySelector(chatgpt.selectors.btns.sidebar);e||console.error("Sidebar toggle not found!"),e.click()},async isLoaded(t=5e3){await chatgpt.isLoaded();var e=new Promise(e=>setTimeout(()=>e(!1),t)),o=new Promise(o=>{chatgpt.getNewChatLink()?o(!0):new MutationObserver((e,t)=>{chatgpt.getNewChatLink()&&(t.disconnect(),o(!0))}).observe(document.documentElement,{childList:!0,subtree:!0})});return Promise.race([o,e])}},startNewChat(){try{chatgpt.getNewChatBtn().click()}catch(e){console.error(e.message)}},stop(){chatgpt.response.stopGenerating()},async suggest(e,t){if(!e)return console.error("ideaType (1st argument) not supplied(e.g. 'gifts', 'names', 'recipes', etc.)");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send("Suggest some names. "+(t||"")),console.info(`Creating ${e}...`),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},speak(e,{voice:t=2,pitch:o=2,speed:r=1.1,onend:a}={}){if("string"!=typeof e)return console.error("Message must be a string!");var n,s=["voice","pitch","speed","onend"];for(n in arguments[1]){if(!s.includes(n))return console.error(`Invalid option '${n}'. Valid keys are: `+s);var i=arguments[1][n];if("onend"!=n&&"number"!=typeof i&&!/^\d+$/.test(i))return console.error(`Invalid ${n} value '${i}'. Must be a number!`);if("onend"==n&&"function"!=typeof i)return console.error(`Invalid ${n} value. Must be a function!`)}try{var c=new SpeechSynthesisUtterance,l=speechSynthesis.getVoices();Object.assign(c,{text:e,voice:l[t],pitch:o,speed:r,onend:a}),speechSynthesis.speak(c)}catch(e){console.error(e)}},async summarize(e){return e?"string"!=typeof e?console.error("Text argument must be a string!"):(chatgpt.send("Summarize the following text:\n\n"+e),console.info("Summarizing text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")):console.error("Text (1st) argument not supplied. Pass some text!")},toggleScheme(){chatgpt.settings.scheme.toggle()},async translate(e,t){if(!e)return console.error("Text (1st) argument not supplied. Pass some text!");if(!t)return console.error("outputLang (2nd) argument not supplied. Pass a language!");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string!`);return chatgpt.send(`Translate the following text to ${t}. Only reply with the translation.
93
+ cursor: pointer ; float: right ; position: relative ; right: -4px ; margin-left: -3px ;`+"display: grid }@keyframes notif-zoom-fade-out { 0% { opacity: 1 ; transform: scale(1) }15% { opacity: 0.35 ; transform: rotateX(-27deg) scale(1.05) }45% { opacity: 0.05 ; transform: rotateX(-81deg) }100% { opacity: 0 ; transform: rotateX(-180deg) scale(1.15) }}"),JSON.parse(localStorage.notifyProps));c.queue[a.quadrant].push(a.id),localStorage.notifyProps=JSON.stringify(c),a.style.top=a.isTop?23..toString()+"px":"",a.style.bottom=a.isTop?"":23..toString()+"px",a.style.right=a.isRight?27..toString()+"px":"",a.style.left=a.isRight?"":27..toString()+"px";e=c.queue[a.quadrant];if(1<e.length)try{for(var l of e.slice(0,-1)){var d=document.getElementById(l),g=d.style.top?"top":"bottom",u=+parseInt(d.style[g])+5+d.getBoundingClientRect().height;d.style[g]=u+"px"}}catch(e){console.warn("Failed to re-position notification:",e)}setTimeout(()=>{a.style.opacity=chatgpt.isDarkMode()?.8:.67,a.style.transform="translateX(0)",a.style.transition="transform 0.15s ease, opacity 0.15s ease"},10);t=()=>{a.style.animation="notif-zoom-fade-out 0.35s ease-out",clearTimeout(h)};let h=setTimeout(t,1e3*(o<.35?0:o-.35));return n.onclick=t,a.onanimationend=()=>{a.remove(),(c=JSON.parse(localStorage.notifyProps)).queue[a.quadrant].shift(),localStorage.notifyProps=JSON.stringify(c)},a},obfuscate(){chatgpt.code.obfuscate()},printAllFunctions(){let o={cmdPrompt:["#ff00ff","#00ff00"],objName:["#0611e9","#f9ee16"],methodName:["#005aff","#ffa500"],entryType:["#467e06","#b981f9"],srcMethod:["#ff0000","#00ffff"]};Object.keys(o).forEach(e=>{o[e][1]=o[e][1]||"#"+(16777215^Number("0x1"+o[e][0].replace(/^#/,""))).toString(16).substring(1).toUpperCase()});var e=[];for(let t in this)if("function"==typeof this[t]){var r=!Object.keys(this).find(e=>Object.keys(this[e]).includes(this[t].name));e.push([r?"chatgpt":"other",t])}else if("object"==typeof this[t])for(var a in this[t])"function"==typeof this[t][a]&&e.push([t,a]);e.sort((e,t)=>e[0].localeCompare(t[0])||e[1].localeCompare(t[1]));var n=window.matchMedia("(prefers-color-scheme: dark)").matches,s="font-family: monospace ; font-size: larger ; ";console.log("\n%c🤖 chatgpt.js methods\n","font-family: sans-serif ; font-size: xxx-large ; font-weight: bold");for(let t of e){var i=/chatgpt|other/.test(t[0]),c="chatgpt"==t[0]?this[t[1]].name:"other"!=t[0]?t[0]+"."+t[1]:Object.keys(this).find(e=>Object.keys(this[e]).includes(this[t[1]].name))+"."+this[t[1]].name,l="AsyncFunction"==this[t[1]]?.constructor.name;console.log("%c>> %c"+(i?"":t[0]+".%c")+t[1]+" - https://chatgptjs.org/userguide/"+/(?:.*\.)?(.*)/.exec(c)[1].toLowerCase()+(l?"-async":"")+"\n%c[%c"+("chatgpt"==t[0]&&t[1]==this[t[1]].name||!i?"Function":"Alias of")+"%c: %c"+c+"%c]",s+"font-weight: bold ; color:"+o.cmdPrompt[+n],s+"font-weight: bold ;color:"+o[i?"methodName":"objName"][+n],s+"font-weight: "+(i?"initial":"bold")+";color:"+(i?"initial":o.methodName[+n]),s+"font-weight: "+(i?"bold":"initial")+";color:"+(i?o.entryType[+n]:"initial"),s+"font-weight: "+(i?"initial":"bold")+";color:"+(i?"initial":o.entryType[+n]),s+(i?"font-style: italic":"font-weight: initial")+";color:"+(i?o.srcMethod[+n]:"initial"),s+(i?"font-weight: initial":"font-style: italic")+";color:"+(i?"initial":o.srcMethod[+n]),i?"":s+"color: initial ; font-weight: initial")}},randomFloat(){return(window.crypto||window.msCrypto)?.getRandomValues(new Uint32Array(1))[0]/4294967295||Math.random()},refactor(){chatgpt.code.refactor()},regenerate(){chatgpt.response.regenerate()},renderHTML(s){var i,e=/<([a-z\d]+)\b([^>]*)>([\s\S]*?)<\/\1>/g,c=/(\S+)=['"]?((?:.(?!['"]?\s+\S+=|[>']))+.)['"]?/g,t=s.childNodes;chatgpt.renderHTML.preWrapSet||(s.style.whiteSpace="pre-wrap",chatgpt.renderHTML.preWrapSet=!0,setTimeout(()=>chatgpt.renderHTML.preWrapSet=!1,100));for(i of t)if(i.nodeType==Node.TEXT_NODE){var l=i.nodeValue,d=[...l.matchAll(e)];if(0<d.length){let e=d[0],[t,o,r,a]=e.slice(0,4),n=document.createElement(o);n.textContent=a;[...r.matchAll(c)].forEach(e=>{var t=e[1],e=e[2].replace(/['"]/g,"");n.setAttribute(t,e)});var d=chatgpt.renderHTML(n),g=document.createTextNode(l.substring(0,e.index)),l=document.createTextNode(l.substring(e.index+t.length));s.replaceChild(g,i),s.insertBefore(d,g.nextSibling),s.insertBefore(l,d.nextSibling)}}else i.nodeType==Node.ELEMENT_NODE&&chatgpt.renderHTML(i);return s},async resend(){chatgpt.send(await chatgpt.getChatData("latest","msg","user","latest"))},response:{continue(){try{chatgpt.getContinueBtn().click()}catch(e){console.error(e.message)}},get(){return this["getFrom"+(location.href.startsWith("https://chatgpt.com/c/")?"DOM":"API")].apply(null,arguments)},getFromAPI(e,t){return e=e||"latest",t=t||"latest",chatgpt.getChatData(e,"msg","chatgpt",t)},getFromDOM(e){var t=document.querySelectorAll("div[data-message-author-role=assistant]"),o=e.toString().toLowerCase();let r="";return t.length?r=(r=(/last|final/.test(o)?t[t.length-1]:t[(Number.isInteger(e)?e:/^\d+/.test(o)?/^\d+/.exec(o)[0]:(/^(?:1|one|fir)(?:st)?$/.test(o)?1:/^(?:2|tw(?:o|en|el(?:ve|f))|seco)(?:nd|t[yi])?(?:e?th)?$/.test(o)?2:/^(?:3|th(?:ree|ir?))(?:rd|teen|t[yi])?(?:e?th)?$/.test(o)?3:/^(?:4|fou?r)(?:teen|t[yi])?(?:e?th)?$/.test(o)?4:/^(?:5|fi(?:ve|f))(?:teen|t[yi])?(?:e?th)?$/.test(o)?5:/^(?:6|six)(?:teen|t[yi])?(?:e?th)?$/.test(o)?6:/^(?:7|seven)(?:teen|t[yi])?(?:e?th)?$/.test(o)?7:/^(?:8|eight?)(?:teen|t[yi])?(?:e?th)?$/.test(o)?8:/^(?:9|nine?)(?:teen|t[yi])?(?:e?th)?$/.test(o)?9:/^(?:10|ten)(?:th)?$/.test(o)?10:1)*(/(?:ty|ieth)$/.test(o)?10:1)+(/teen(?:th)?$/.test(o)?10:0))-1]).textContent).replace(/^ChatGPT(?:ChatGPT)?/,""):console.error("No conversation found!")},getLast(){return chatgpt.getChatData("active","msg","chatgpt","latest")},regenerate(){try{chatgpt.getRegenerateBtn().click()}catch(e){console.error(e.message)}},stopGenerating(){try{chatgpt.getStopBtn().click()}catch(e){console.error(e.message)}}},reviewCode(){chatgpt.code.review()},scrollToBottom(){try{chatgpt.getScrollBtn().click()}catch(e){console.error(e.message)}},send(e,o=""){for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string!`);let r=chatgpt.getChatBox();if(!r)return console.error("Chatbar element not found!");var t=document.createElement("p");t.textContent=e,r.querySelector("p").replaceWith(t),r.dispatchEvent(new Event("input",{bubbles:!0})),setTimeout(function e(){var t=chatgpt.getSendButton();t?.hasAttribute("disabled")?setTimeout(e,222):"click"==o.toLowerCase()||chatgpt.browser.isMobile()?t.click():r.dispatchEvent(new KeyboardEvent("keydown",{key:"Enter",bubbles:!0}))},222)},sendInNewChat(e){if("string"!=typeof e)return console.error("Message must be a string!");try{chatgpt.getNewChatBtn().click()}catch(e){return console.error(e.message)}setTimeout(()=>chatgpt.send(e),500)},settings:{scheme:{isDark(){return document.documentElement.classList.contains("dark")},isLight(){return document.documentElement.classList.contains("light")},set(e){var t=["dark","light","system"];if(!e)return console.error("Please specify a scheme value!");if(!t.includes(e))return console.error(`Invalid scheme value. Valid values are [${t}]`);let o=e;"system"==e&&(o=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),localStorage.setItem("theme",e),console.info(`Scheme set to ${e.toUpperCase()}.`),document.documentElement.classList.contains(o)||this.toggle()},toggle(){var[e,t]=this.isDark()?["dark","light"]:["light","dark"];document.documentElement.classList.replace(e,t),document.documentElement.style.colorScheme=t,localStorage.setItem("theme",t)}}},async sentiment(e,t){for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send("What is the sentiment of the following text"+(t?` towards the entity ${t},`:"")+" from strongly negative to strongly positive?\n\n"+e),console.info("Analyzing sentiment..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},setScheme(e){chatgpt.settings.scheme.set(e)},shareChat(s,i="clipboard"){var e=["alert","notify","notification","clipboard","copy"];if(!e.includes(i))return console.error(`Invalid method '${i}' passed. Valid methods are [${e}].`);return new Promise(o=>{chatgpt.getAccessToken().then(t=>{var a;a=t,new Promise((t,o)=>{let r=new XMLHttpRequest;chatgpt.getChatData(s).then(e=>{r.open("GET",chatgpt.endpoints.openAI.chat+"/"+e.id,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("Authorization","Bearer "+a),r.onload=()=>200!=r.status?o("🤖 chatgpt.js >> Request failed. Cannot retrieve chat node."):t(JSON.parse(r.responseText).current_node),r.send()})}).then(e=>{var a,n;a=t,n=e,new Promise((t,o)=>{let r=new XMLHttpRequest;chatgpt.getChatData(s).then(e=>{r.open("POST",chatgpt.endpoints.openAI.share_create,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("Authorization","Bearer "+a),r.onload=()=>200!=r.status?o("🤖 chatgpt.js >> Request failed. Cannot initialize share chat."):t(JSON.parse(r.responseText)),r.send(JSON.stringify({current_node_id:n,conversation_id:e.id,is_anonymous:!0}))})}).then(e=>{var r,a;r=t,a=e,new Promise((e,t)=>{let o=new XMLHttpRequest;o.open("PATCH",chatgpt.endpoints.openAI.share+"/"+a.share_id,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Authorization","Bearer "+r),o.onload=()=>200!=o.status?t("🤖 chatgpt.js >> Request failed. Cannot share chat."):(console.info(`Chat shared at '${a.share_url}'`),e()),o.send(JSON.stringify({share_id:a.share_id,highlighted_message_id:a.highlighted_message_id,title:a.title,is_public:!0,is_visible:a.is_visible,is_anonymous:a.is_anonymous}))}).then(()=>{["copy","clipboard"].includes(i)?navigator.clipboard.writeText(e.share_url):chatgpt.alert("🚀 Share link created!",`"${e.title}" is available at: <a target="blank" rel="noopener" href="${e.share_url}">${e.share_url}</a>`,[function(){window.open(e.share_url,"_blank","noopener")},function(){navigator.clipboard.writeText(e.share_url)}]),o(e.share_url)})})})})})},showFooter(){chatgpt.footer.show()},showHeader(){chatgpt.header.show()},sidebar:{elems:[],observer:{},activateObserver(){if(this.observer instanceof MutationObserver&&this.observer.disconnect(),!this.elems.length)return console.error("🤖 chatgpt.js >> No elems to append!");let t;for(var e of document.querySelectorAll(chatgpt.selectors.links.sidebarItem))if(/.*chat/.exec(e.text)[0]){t=e.classList,e.parentNode.style.margin="2px 0";break}this.elems.forEach(e=>{e.setAttribute("class",t),e.style.maxHeight=e.style.minHeight="44px",e.style.margin="2px 0"});let o=document.querySelector(chatgpt.selectors.chatHistory);if(!o)return console.error("Sidebar element not found!");this.observer=new MutationObserver(e=>e.forEach(e=>{("childList"==e.type&&e.addedNodes.length||"attributes"==e.type&&"data-chatgptjs"==e.attributeName)&&this.elems.forEach(e=>{if(!o.contains(e))try{o.querySelector("a").parentNode.before(e)}catch(e){console.error(e)}})})),this.observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0})},append(e,t={}){var o=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!o.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elems are [${o}]`);let r=document.createElement("dropdown"==e?"select":e);if(r.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),"button"==e){r.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";o=document.createElement("img");o.src=t?.icon&&"string"==typeof t.icon?t.icon:chatgpt.endpoints.assets+"/starters/chrome/extension/icons/icon128.png",o.width=18,r.firstChild.before(o),r.onclick=t?.onclick&&"function"==typeof t.onclick?t.onclick:function(){}}else if("dropdown"==e){if(t?.items&&Array.isArray(t.items)&&t.items.length||(t.items=[{text:"🤖 chatgpt.js option",value:"chatgpt.js option value"}]),!t.items.every(e=>"object"==typeof e))return console.error("'items' must be an array of objects!");t.items.forEach(e=>{var t=document.createElement("option");t.textContent=e?.text,t.value=e?.value,r.add(t)})}return"dropdown"==e&&(r.style.backgroundColor="var(--gray-900, rgb(32,33,35))"),this.elems.push(r),this.activateObserver(),document.body.setAttribute("data-chatgptjs","observer-trigger"),r.id},exists(){return!!chatgpt.getNewChatLink()},hide(){this.isOn()?this.toggle():console.info("Sidebar already hidden!")},show(){this.isOff()?this.toggle():console.info("Sidebar already shown!")},isOff(){return!this.isOn()},isOn(){var e=chatgpt.sidebar.exists()?document.querySelector(chatgpt.selectors.sidebar):null;return e?chatgpt.browser.isMobile()?"hidden"==document.documentElement.style.overflow:"hidden"!=e.style.visibility&&"0px"!=e.style.width:console.error("Sidebar element not found!")||!1},toggle(){var e=document.querySelector(chatgpt.selectors.btns.sidebar);e||console.error("Sidebar toggle not found!"),e.click()},async isLoaded(t=5e3){await chatgpt.isLoaded();var e=new Promise(e=>setTimeout(()=>e(!1),t)),o=new Promise(o=>{chatgpt.getNewChatLink()?o(!0):new MutationObserver((e,t)=>{chatgpt.getNewChatLink()&&(t.disconnect(),o(!0))}).observe(document.documentElement,{childList:!0,subtree:!0})});return Promise.race([o,e])}},startNewChat(){try{chatgpt.getNewChatBtn().click()}catch(e){console.error(e.message)}},stop(){chatgpt.response.stopGenerating()},async suggest(e,t){if(!e)return console.error("ideaType (1st argument) not supplied(e.g. 'gifts', 'names', 'recipes', etc.)");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string.`);return chatgpt.send("Suggest some names. "+(t||"")),console.info(`Creating ${e}...`),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},speak(e,{voice:t=2,pitch:o=2,speed:r=1.1,onend:a}={}){if("string"!=typeof e)return console.error("Message must be a string!");var n,s=["voice","pitch","speed","onend"];for(n in arguments[1]){if(!s.includes(n))return console.error(`Invalid option '${n}'. Valid keys are: `+s);var i=arguments[1][n];if("onend"!=n&&"number"!=typeof i&&!/^\d+$/.test(i))return console.error(`Invalid ${n} value '${i}'. Must be a number!`);if("onend"==n&&"function"!=typeof i)return console.error(`Invalid ${n} value. Must be a function!`)}try{var c=new SpeechSynthesisUtterance,l=speechSynthesis.getVoices();Object.assign(c,{text:e,voice:l[t],pitch:o,speed:r,onend:a}),speechSynthesis.speak(c)}catch(e){console.error(e)}},async summarize(e){return e?"string"!=typeof e?console.error("Text argument must be a string!"):(chatgpt.send("Summarize the following text:\n\n"+e),console.info("Summarizing text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")):console.error("Text (1st) argument not supplied. Pass some text!")},toggleScheme(){chatgpt.settings.scheme.toggle()},async translate(e,t){if(!e)return console.error("Text (1st) argument not supplied. Pass some text!");if(!t)return console.error("outputLang (2nd) argument not supplied. Pass a language!");for(let e=0;e<arguments.length;e++)if("string"!=typeof arguments[e])return console.error(`Argument ${e+1} must be a string!`);return chatgpt.send(`Translate the following text to ${t}. Only reply with the translation.
94
94
 
95
- `+e),console.info("Translating text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},unminify(){chatgpt.code.unminify()},uuidv4(){try{return crypto.randomUUID()}catch(e){let o=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=(o+window.crypto.getRandomValues(new Uint32Array(1))[0]/(Math.pow(2,32)-1)*16)%16|0;return o=Math.floor(o/16),("x"==e?t:3&t|8).toString(16)})}},writeCode(){chatgpt.code.write()}},cjsBtnActions=(chatgpt.scheme={...chatgpt.settings.scheme},["click","get"]),cjsTargetTypes=["button","link","div","response"];for(let t of cjsBtnActions)chatgpt[t+"Button"]=function(o){var e=/^[.#]/.test(o)?document.querySelector(o):/send/i.test(o)?document.querySelector(chatgpt.selectors.btns.send):/scroll/i.test(o)?document.querySelector(chatgpt.selectors.btns.scroll):(()=>{for(var e of document.querySelectorAll("button"))if(e.textContent.toLowerCase().includes(o.toLowerCase()))return e;for(var t of document.querySelectorAll(chatgpt.selectors.links.sidebarItem))if(t.textContent.toLowerCase().includes(o.toLowerCase()))return t})();if("click"!=t)return e;e.click()};let cjsFuncAliases=[["actAs","act","become","persona","premadePrompt","preMadePrompt","prePrompt","rolePlay","rp"],["activateAutoRefresh","activateAutoRefresher","activateRefresher","activateSessionRefresher","autoRefresh","autoRefresher","autoRefreshSession","refresher","sessionRefresher"],["continue","continueChat","continueGenerating","continueResponse"],["deactivateAutoRefresh","deactivateAutoRefresher","deactivateRefresher","deactivateSessionRefresher"],["detectLanguage","getLanguage"],["executeCode","codeExecute"],["exists","isAvailable","isExistent","isPresent"],["exportChat","chatExport","export"],["getFooterDiv","getFooter"],["getHeaderDiv","getHeader"],["getLastPrompt","getLastQuery","getMyLastMessage","getMyLastQuery"],["getContinueButton","getContinueGeneratingButton"],["getScrollToBottomButton","getScrollButton"],["getStopButton","getStopGeneratingButton"],["getTextarea","getTextArea","getChatbar","getChatBar","getChatbox","getChatBox"],["getVoiceButton","getVoiceModeButton"],["isFullScreen","isFullscreen"],["isTempChat","isIncognito","isIncognitoMode","isTempChatMode"],["minify","codeMinify","minifyCode"],["new","newChat","startNewChat"],["obfuscate","codeObfuscate","obfuscateCode"],["printAllFunctions","showAllFunctions"],["refactor","codeRefactor","refactorCode"],["refreshReply","regenerate","regenerateReply"],["refreshSession","sessionRefresh"],["renderHTML","renderHtml","renderLinks","renderTags"],["reviewCode","codeReview"],["send","sendChat","sendMessage"],["sendInNewChat","sendNewChat"],["sentiment","analyzeSentiment","sentimentAnalysis"],["startNewChat","new","newChat"],["stop","stopChat","stopGenerating","stopResponse"],["suggest","suggestion","recommend"],["toggleAutoRefresh","toggleAutoRefresher","toggleRefresher","toggleSessionRefresher"],["toggleScheme","toggleMode"],["translate","translation","translator"],["unminify","unminifyCode","codeUnminify"],["writeCode","codeWrite"]],cjsFuncSynonyms=[["account","acct"],["activate","turnOn"],["analyze","check","evaluate","review"],["ask","send","submit"],["button","btn"],["continue","resume"],["chats","history"],["chat","conversation","convo"],["clear","delete","remove"],["data","details"],["deactivate","deActivate","turnOff"],["execute","interpret","interpreter","run"],["firefox","ff"],["generating","generation"],["login","logIn","logOn","signIn","signOn"],["logout","logOut","logOff","signOff","signOut"],["message","msg"],["minify","uglify"],["refactor","rewrite"],["regenerate","regen"],["render","parse"],["reply","response"],["sentiment","attitude","emotion","feeling","opinion","perception"],["speak","play","say","speech","talk","tts"],["summarize","tldr"],["temp","temporary"],["typing","generating"],["unminify","beautify","prettify","prettyPrint"]];function toCamelCase(e){return e.map((e,t)=>0==t?e:e.charAt(0).toUpperCase()+e.slice(1)).join("")}!function e(n=chatgpt){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&"object"==typeof n[t]&&e(n[t]);let s;do{s=!1;for(let a in n)if(Object.prototype.hasOwnProperty.call(n,a)&&"function"==typeof n[a]){n[a.toLowerCase()]=n[a],cjsFuncAliases.forEach(e=>{e.includes(a)&&e.forEach(e=>{n[e]||(n[e]=n[e.toLowerCase()]=n[a],s=!0)})});let r=a.split(/(?=[A-Z])/);r.forEach(o=>{cjsFuncSynonyms.filter(e=>e.includes(o.toLowerCase())).flat().filter(e=>e!=o.toLowerCase()).forEach(t=>{var e=toCamelCase(r.map(e=>e==o?t:e));n[e]||(n[e]=n[e.toLowerCase()]=n[a],s=!0)})})}}while(s)}();let consolePrefix="🤖 chatgpt.js >> ",ogError=console.error,ogInfo=console.info;console.error=(...e)=>{e[0].startsWith(consolePrefix)?ogError(...e):ogError(consolePrefix+e[0],...e.slice(1))},console.info=e=>{e.startsWith(consolePrefix)?ogInfo(e):ogInfo(consolePrefix+e)};try{window.chatgpt=chatgpt}catch(e){}try{module.exports=chatgpt}catch(e){}
95
+ `+e),console.info("Translating text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},unminify(){chatgpt.code.unminify()},uuidv4(){try{return crypto.randomUUID()}catch(e){let o=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=(o+window.crypto.getRandomValues(new Uint32Array(1))[0]/(Math.pow(2,32)-1)*16)%16|0;return o=Math.floor(o/16),("x"==e?t:3&t|8).toString(16)})}},writeCode(){chatgpt.code.write()}},cjsBtnActions=(chatgpt.scheme={...chatgpt.settings.scheme},["click","get"]),cjsTargetTypes=["button","link","div","response"];for(let t of cjsBtnActions)chatgpt[t+"Button"]=function(o){var e=/^[.#]/.test(o)?document.querySelector(o):/send/i.test(o)?document.querySelector(chatgpt.selectors.btns.send):/scroll/i.test(o)?document.querySelector(chatgpt.selectors.btns.scroll):(()=>{for(var e of document.querySelectorAll("button"))if(e.textContent.toLowerCase().includes(o.toLowerCase()))return e;for(var t of document.querySelectorAll(chatgpt.selectors.links.sidebarItem))if(t.textContent.toLowerCase().includes(o.toLowerCase()))return t})();if("click"!=t)return e;e.click()};let cjsFuncAliases=[["actAs","act","become","persona","premadePrompt","preMadePrompt","prePrompt","rolePlay","rp"],["activateAutoRefresh","activateAutoRefresher","activateRefresher","activateSessionRefresher","autoRefresh","autoRefresher","autoRefreshSession","refresher","sessionRefresher"],["continue","continueChat","continueGenerating","continueResponse"],["deactivateAutoRefresh","deactivateAutoRefresher","deactivateRefresher","deactivateSessionRefresher"],["detectLanguage","getLanguage"],["executeCode","codeExecute"],["exists","isAvailable","isExistent","isPresent"],["exportChat","chatExport","export"],["getFooterDiv","getFooter"],["getHeaderDiv","getHeader"],["getLastPrompt","getLastQuery","getMyLastMessage","getMyLastQuery"],["getContinueButton","getContinueGeneratingButton"],["getScrollToBottomButton","getScrollButton"],["getStopButton","getStopGeneratingButton"],["getTextarea","getTextArea","getChatbar","getChatBar","getChatbox","getChatBox"],["getVoiceButton","getVoiceModeButton"],["isFullScreen","isFullscreen"],["isTempChat","isIncognito","isIncognitoMode","isTempChatMode"],["minify","codeMinify","minifyCode"],["new","newChat","startNewChat"],["obfuscate","codeObfuscate","obfuscateCode"],["printAllFunctions","showAllFunctions"],["refactor","codeRefactor","refactorCode"],["refreshReply","regenerate","regenerateReply"],["refreshSession","sessionRefresh"],["renderHTML","renderHtml","renderLinks","renderTags"],["reviewCode","codeReview"],["send","sendChat","sendMessage"],["sendInNewChat","sendNewChat"],["sentiment","analyzeSentiment","sentimentAnalysis"],["startNewChat","new","newChat"],["stop","stopChat","stopGenerating","stopResponse"],["suggest","suggestion","recommend"],["toggleAutoRefresh","toggleAutoRefresher","toggleRefresher","toggleSessionRefresher"],["toggleScheme","toggleMode"],["translate","translation","translator"],["unminify","unminifyCode","codeUnminify"],["writeCode","codeWrite"]],cjsFuncSynonyms=[["account","acct"],["activate","turnOn"],["analyze","check","evaluate","review"],["ask","send","submit"],["button","btn"],["continue","resume"],["chats","history"],["chat","conversation","convo"],["clear","delete","remove"],["data","details"],["deactivate","deActivate","turnOff"],["execute","interpret","interpreter","run"],["firefox","ff"],["generating","generation"],["login","logIn","logOn","signIn","signOn"],["logout","logOut","logOff","signOff","signOut"],["message","msg"],["minify","uglify"],["refactor","rewrite"],["regenerate","regen"],["render","parse"],["reply","response"],["sentiment","attitude","emotion","feeling","opinion","perception"],["speak","play","say","speech","talk","tts"],["summarize","tldr"],["temp","temporary"],["typing","generating"],["unminify","beautify","prettify","prettyPrint"]];function toCamelCase(e){return e.map((e,t)=>0==t?e:e[0].toUpperCase()+e.slice(1)).join("")}!function e(n=chatgpt){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&"object"==typeof n[t]&&e(n[t]);let s;do{s=!1;for(let a in n)if(Object.prototype.hasOwnProperty.call(n,a)&&"function"==typeof n[a]){n[a.toLowerCase()]=n[a],cjsFuncAliases.forEach(e=>{e.includes(a)&&e.forEach(e=>{n[e]||(n[e]=n[e.toLowerCase()]=n[a],s=!0)})});let r=a.split(/(?=[A-Z])/);r.forEach(o=>{cjsFuncSynonyms.filter(e=>e.includes(o.toLowerCase())).flat().filter(e=>e!=o.toLowerCase()).forEach(t=>{var e=toCamelCase(r.map(e=>e==o?t:e));n[e]||(n[e]=n[e.toLowerCase()]=n[a],s=!0)})})}}while(s)}();let consolePrefix="🤖 chatgpt.js >> ",ogError=console.error,ogInfo=console.info;console.error=(...e)=>{e[0].startsWith(consolePrefix)?ogError(...e):ogError(consolePrefix+e[0],...e.slice(1))},console.info=e=>{e.startsWith(consolePrefix)?ogInfo(e):ogInfo(consolePrefix+e)};try{window.chatgpt=chatgpt}catch(e){}try{module.exports=chatgpt}catch(e){}