@kudoai/chatgpt.js 2.6.8 → 2.6.9

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.
Files changed (112) hide show
  1. package/README.md +7 -13
  2. package/chatgpt.js +17 -72
  3. package/dist/chatgpt.min.js +9 -3
  4. package/docs/README.md +7 -13
  5. package/docs/USERGUIDE.md +3 -62
  6. package/package.json +12 -12
  7. package/starters/chrome/extension/lib/chatgpt.js +17 -72
  8. package/starters/chrome/extension/manifest.json +1 -1
  9. package/starters/greasemonkey/chatgpt.js-greasemonkey-starter.user.js +2 -2
  10. package/docs/de/LICENSE.md +0 -29
  11. package/docs/de/README.md +0 -345
  12. package/docs/de/SECURITY.md +0 -25
  13. package/docs/es/LICENSE.md +0 -29
  14. package/docs/es/README.md +0 -345
  15. package/docs/es/SECURITY.md +0 -25
  16. package/docs/fr/LICENSE.md +0 -29
  17. package/docs/fr/README.md +0 -345
  18. package/docs/fr/SECURITY.md +0 -25
  19. package/docs/hi/LICENSE.md +0 -29
  20. package/docs/hi/README.md +0 -346
  21. package/docs/hi/SECURITY.md +0 -25
  22. package/docs/it/LICENSE.md +0 -27
  23. package/docs/it/README.md +0 -345
  24. package/docs/it/SECURITY.md +0 -25
  25. package/docs/ja/LICENSE.md +0 -29
  26. package/docs/ja/README.md +0 -345
  27. package/docs/ja/SECURITY.md +0 -25
  28. package/docs/ko/LICENSE.md +0 -32
  29. package/docs/ko/README.md +0 -350
  30. package/docs/ko/SECURITY.md +0 -25
  31. package/docs/ne/LICENSE.md +0 -35
  32. package/docs/ne/README.md +0 -346
  33. package/docs/ne/SECURITY.md +0 -25
  34. package/docs/nl/LICENSE.md +0 -29
  35. package/docs/nl/README.md +0 -345
  36. package/docs/nl/SECURITY.md +0 -25
  37. package/docs/pt/LICENSE.md +0 -29
  38. package/docs/pt/README.md +0 -345
  39. package/docs/pt/SECURITY.md +0 -25
  40. package/docs/vi/LICENSE.md +0 -29
  41. package/docs/vi/README.md +0 -345
  42. package/docs/vi/SECURITY.md +0 -25
  43. package/docs/zh-cn/LICENSE.md +0 -29
  44. package/docs/zh-cn/README.md +0 -344
  45. package/docs/zh-cn/SECURITY.md +0 -25
  46. package/docs/zh-tw/LICENSE.md +0 -29
  47. package/docs/zh-tw/README.md +0 -344
  48. package/docs/zh-tw/SECURITY.md +0 -25
  49. package/starters/chrome/docs/de/LICENSE.md +0 -31
  50. package/starters/chrome/docs/de/README.md +0 -93
  51. package/starters/chrome/docs/es/LICENSE.md +0 -31
  52. package/starters/chrome/docs/es/README.md +0 -93
  53. package/starters/chrome/docs/fr/LICENSE.md +0 -31
  54. package/starters/chrome/docs/fr/README.md +0 -93
  55. package/starters/chrome/docs/hi/LICENSE.md +0 -31
  56. package/starters/chrome/docs/hi/README.md +0 -93
  57. package/starters/chrome/docs/hi/SECURITY.md +0 -17
  58. package/starters/chrome/docs/it/LICENSE.md +0 -29
  59. package/starters/chrome/docs/it/README.md +0 -93
  60. package/starters/chrome/docs/ja/LICENSE.md +0 -31
  61. package/starters/chrome/docs/ja/README.md +0 -93
  62. package/starters/chrome/docs/ko/LICENSE.md +0 -34
  63. package/starters/chrome/docs/ko/README.md +0 -93
  64. package/starters/chrome/docs/nl/LICENSE.md +0 -31
  65. package/starters/chrome/docs/nl/README.md +0 -93
  66. package/starters/chrome/docs/pt/LICENSE.md +0 -31
  67. package/starters/chrome/docs/pt/README.md +0 -93
  68. package/starters/chrome/docs/vi/LICENSE.md +0 -31
  69. package/starters/chrome/docs/vi/README.md +0 -93
  70. package/starters/chrome/docs/zh-cn/LICENSE.md +0 -31
  71. package/starters/chrome/docs/zh-cn/README.md +0 -93
  72. package/starters/chrome/docs/zh-cn/SECURITY.md +0 -17
  73. package/starters/chrome/docs/zh-tw/LICENSE.md +0 -31
  74. package/starters/chrome/docs/zh-tw/README.md +0 -93
  75. package/starters/docs/de/LICENSE.md +0 -13
  76. package/starters/docs/de/README.md +0 -29
  77. package/starters/docs/es/LICENSE.md +0 -13
  78. package/starters/docs/es/README.md +0 -29
  79. package/starters/docs/fr/LICENSE.md +0 -13
  80. package/starters/docs/fr/README.md +0 -29
  81. package/starters/docs/hi/LICENSE.md +0 -13
  82. package/starters/docs/hi/README.md +0 -29
  83. package/starters/docs/it/LICENSE.md +0 -11
  84. package/starters/docs/it/README.md +0 -29
  85. package/starters/docs/ja/LICENSE.md +0 -13
  86. package/starters/docs/ja/README.md +0 -30
  87. package/starters/docs/ko/LICENSE.md +0 -16
  88. package/starters/docs/ko/README.md +0 -29
  89. package/starters/docs/nl/LICENSE.md +0 -13
  90. package/starters/docs/nl/README.md +0 -29
  91. package/starters/docs/pt/LICENSE.md +0 -13
  92. package/starters/docs/pt/README.md +0 -29
  93. package/starters/docs/vi/LICENSE.md +0 -13
  94. package/starters/docs/vi/README.md +0 -29
  95. package/starters/docs/zh-cn/LICENSE.md +0 -13
  96. package/starters/docs/zh-cn/README.md +0 -30
  97. package/starters/docs/zh-tw/LICENSE.md +0 -13
  98. package/starters/docs/zh-tw/README.md +0 -29
  99. package/starters/greasemonkey/docs/de/LICENSE.md +0 -31
  100. package/starters/greasemonkey/docs/es/LICENSE.md +0 -31
  101. package/starters/greasemonkey/docs/fr/LICENSE.md +0 -31
  102. package/starters/greasemonkey/docs/hi/LICENSE.md +0 -31
  103. package/starters/greasemonkey/docs/hi/SECURITY.md +0 -17
  104. package/starters/greasemonkey/docs/it/LICENSE.md +0 -29
  105. package/starters/greasemonkey/docs/ja/LICENSE.md +0 -31
  106. package/starters/greasemonkey/docs/ko/LICENSE.md +0 -34
  107. package/starters/greasemonkey/docs/nl/LICENSE.md +0 -31
  108. package/starters/greasemonkey/docs/pt/LICENSE.md +0 -31
  109. package/starters/greasemonkey/docs/vi/LICENSE.md +0 -31
  110. package/starters/greasemonkey/docs/zh-cn/LICENSE.md +0 -31
  111. package/starters/greasemonkey/docs/zh-cn/SECURITY.md +0 -17
  112. package/starters/greasemonkey/docs/zh-tw/LICENSE.md +0 -31
package/README.md CHANGED
@@ -50,7 +50,7 @@
50
50
  [![](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fsonarcloud.io%2Fapi%2Fmeasures%2Fcomponent%3Fcomponent%3Dkudoai_chatgpt.js%26metricKeys%3Dvulnerabilities&query=%24.component.measures.0.value&style=for-the-badge&logo=sonarcloud&logoColor=white&labelColor=464646&label=Vulnerabilities&color=gold)](https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=kudoai_chatgpt.js)
51
51
  [![](https://img.shields.io/badge/Mentioned_in-Awesome-cca8c4?logo=awesomelists&logoColor=white&labelColor=464646&style=for-the-badge)](https://github.com/sindresorhus/awesome-chatgpt#javascript)
52
52
  [![](https://img.shields.io/badge/Featured_on-Product_Hunt-ff6154?logo=producthunt&logoColor=white&labelColor=464646&style=for-the-badge)](https://www.producthunt.com/posts/chatgpt-js)
53
-
53
+ ![](https://img.shields.io/badge/jsDelivr_Hits-1,500,000+-49c5d8.svg?logo=jsdelivr&logoColor=white&labelColor=464646&style=for-the-badge)
54
54
 
55
55
  </div>
56
56
 
@@ -83,7 +83,7 @@
83
83
 
84
84
  ```js
85
85
  (async () => {
86
- await import('https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.8/dist/chatgpt.min.js');
86
+ await import('https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.9/dist/chatgpt.min.js');
87
87
  // Your code here...
88
88
  })();
89
89
  ```
@@ -92,7 +92,7 @@
92
92
 
93
93
  ```js
94
94
  var xhr = new XMLHttpRequest();
95
- xhr.open('GET', 'https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.8/dist/chatgpt.min.js');
95
+ xhr.open('GET', 'https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.9/dist/chatgpt.min.js');
96
96
  xhr.onload = function () {
97
97
  if (xhr.status === 200) {
98
98
  var chatgptJS = document.createElement('script');
@@ -114,7 +114,7 @@ function yourCode() {
114
114
 
115
115
  ```js
116
116
  ...
117
- // @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.8/dist/chatgpt.min.js
117
+ // @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.9/dist/chatgpt.min.js
118
118
  // ==/UserScript==
119
119
 
120
120
  // Your code here...
@@ -210,13 +210,6 @@ https://github.com/KudoAI/chatgpt.js/assets/10906554/f53c740f-d5e0-49b6-ae02-3b3
210
210
  [Readme](https://github.com/adamlui/autoclear-chatgpt-history#readme) /
211
211
  [Discuss](https://autoclearchatgpt.com/discuss)
212
212
 
213
- ### <img width=16 src="https://i.imgur.com/1yjmK3W.png"> [Automatic ChatGPT DAN](https://github.com/madkarmaa/automatic-chatgpt-dan)
214
-
215
- > Automatically send DAN prompts to ChatGPT.
216
- <br>[Install](https://github.com/madkarmaa/automatic-chatgpt-dan#%EF%B8%8F-installation) /
217
- [Readme](https://github.com/madkarmaa/automatic-chatgpt-dan#readme) /
218
- [Discuss](https://github.com/madkarmaa/automatic-chatgpt-dan/issues)
219
-
220
213
  ### <img src="https://media.bravegpt.com/images/icons/bravegpt/icon48.png" width=18> [BraveGPT](https://bravegpt.com) <a href="https://www.producthunt.com/posts/bravegpt?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-bravegpt" target="_blank" rel="noopener"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=385630&theme=light" style="width: 112px; height: 24px; margin:0 0 -4px 5px;" width="112" height="24" /></a>
221
214
 
222
215
  > Display ChatGPT answers in Brave Search sidebar (powered by GPT-4!)
@@ -303,7 +296,8 @@ This library exists thanks to code, translations, issues & ideas from the follow
303
296
  [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/150537240?first-contrib=2023.11.15-regenerate-btn-changed-bug-email&h=51&w=51&mask=circle&maxage=7d "@philly88r")](https://github.com/philly88r)
304
297
  [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9730392?first-contrib=2023.12.18-get-response-from-dom-request&h=51&w=51&mask=circle&maxage=7d "@thomasgauthier")](https://github.com/thomasgauthier)
305
298
  [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/42911524?first-contrib=2024.1.17-add-custom-gpt-support&h=51&w=51&mask=circle&maxage=7d "@pranav-bhatt")](https://github.com/pranav-bhatt)
306
- [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13976824?first-contrib=2021.01.31-aria-labels-unreliable-bug-report&h=50&w=50&mask=circle&maxage=7d "@hopana")](https://github.com/hopana)
299
+ [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13976824?first-contrib=2024.01.31-aria-labels-unreliable-bug-report&h=50&w=50&mask=circle&maxage=7d "@hopana")](https://github.com/hopana)
300
+ [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26219737?first-contrib=2024.2.2-data-key-message-bug-fix&h=50&w=50&mask=circle&maxage=7d "@emtry")](https://github.com/emtry)
307
301
  [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/111466842?first-contrib=2024.2.15-add-en-gb-locale&h=51&w=51&mask=circle&maxage=7d "@Luwa-Tech")](https://github.com/Luwa-Tech)
308
302
  [![](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/29110&h=51&w=51&mask=circle&maxage=7d "Dependabot")](https://github.com/dependabot)
309
303
  [![](https://images.weserv.nl/?url=https://i.imgur.com/tNyIPmG.jpg?h=51&w=51&mask=circle&maxage=7d "ChatGPT")](https://chat.openai.com)
@@ -340,6 +334,6 @@ This library exists thanks to code, translations, issues & ideas from the follow
340
334
  **[Releases](https://www.npmjs.com/package/@kudoai/chatgpt.js?activeTab=versions)** /
341
335
  [Userguide](https://github.com/KudoAI/chatgpt.js/blob/main/docs/USERGUIDE.md) /
342
336
  [Discuss](https://github.com/KudoAI/chatgpt.js/discussions) /
343
- <a href="#">Back to top ↑</a>
337
+ <a href="#--------------------------------------------------------------------------------english---------简体中文---------繁體中文---------日本---------한국인---------हिंदी---------नेपाली---------deutsch---------español---------français---------italiano---------nederlands---------português---------việt----">Back to top ↑</a>
344
338
 
345
339
  </div>
package/chatgpt.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // © 2023–2024 KudoAI & contributors under the MIT license.
2
2
  // Source: https://github.com/KudoAI/chatgpt.js
3
+ // User guide: https://chatgptjs.org/userguide
3
4
  // Latest minified release: https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js/chatgpt.min.js
4
5
 
5
6
  // Init endpoints
@@ -22,45 +23,12 @@ localStorage.notifyProps = JSON.stringify({
22
23
  lastNthAudio: 0 // to prevent immediate repetition of base sound
23
24
  });
24
25
 
25
- // Init environment flags & functions
26
- const isChromeUserScript = navigator.userAgent.includes('Chrome') && typeof unsafeWindow != 'undefined',
27
- isFFuserScript = navigator.userAgent.includes('Firefox') && typeof unsafeWindow != 'undefined',
26
+ // Init environment flags
27
+ const isFFuserScript = navigator.userAgent.includes('Firefox') && typeof unsafeWindow != 'undefined',
28
28
  isFFtmScript = isFFuserScript && GM_info.scriptHandler == 'Tampermonkey';
29
29
 
30
- // Define messages
31
- let cjsMessages;
32
- if (!isChromeUserScript && !(isFFuserScript && !isFFtmScript)) { (async () => {
33
- const cjsMsgsLoaded = new Promise(resolve => {
34
- const userLanguage = navigator.languages[0] || navigator.language || navigator.browserLanguage ||
35
- navigator.systemLanguage || navigator.userLanguage || '',
36
- msgHostDir = endpoints.assets + '/data/_locales/',
37
- msgLocaleDir = ( userLanguage ? userLanguage.replace('-', '_') : 'en' ) + '/';
38
- let msgHref = msgHostDir + msgLocaleDir + 'messages.json', msgXHRtries = 0;
39
- (function loadMsgs() {
40
- const xhr = new XMLHttpRequest();
41
- xhr.open('GET', msgHref); xhr.send();
42
- xhr.onload = () => {
43
- try { // to return localized messages.json
44
- const messages = new Proxy(JSON.parse(xhr.responseText), {
45
- get(target, prop) { // remove need to ref nested keys
46
- if (typeof target[prop] == 'object' && target[prop] !== null && 'message' in target[prop]) {
47
- return target[prop].message;
48
- }}}); resolve(messages);
49
- } catch (err) {
50
- msgXHRtries++; if (msgXHRtries === 3) resolve({}); // try up to 3X (original/region-stripped/EN) only
51
- msgHref = userLanguage.includes('-') && msgXHRtries === 1 ? // if regional lang on 1st try...
52
- msgHref.replace(/([^_]*)_[^/]*(\/.*)/, '$1$2') // ...strip region before retrying
53
- : ( msgHostDir + 'en/messages.json' ); // else use default English messages
54
- loadMsgs();
55
- }
56
- };
57
- xhr.onerror = () => { resolve({}); };
58
- })();
59
- }); cjsMessages = await cjsMsgsLoaded;
60
- })();}
61
-
62
30
  // Define chatgpt.methods
63
- const chatgpt = {
31
+ const chatgpt = { // eslint-disable-line no-redeclare
64
32
  openAIaccessToken: {},
65
33
 
66
34
  actAs: function(persona) {
@@ -236,7 +204,7 @@ const chatgpt = {
236
204
 
237
205
  // Create close button
238
206
  const closeBtn = document.createElement('div');
239
- closeBtn.title = cjsMessages?.tooltip_close || 'Close'; closeBtn.classList.add('modal-close-btn');
207
+ closeBtn.title = 'Close'; closeBtn.classList.add('modal-close-btn');
240
208
  const closeSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
241
209
  closeSVG.setAttribute('height', '10px');
242
210
  closeSVG.setAttribute('viewBox', '0 0 14 14');
@@ -426,23 +394,17 @@ const chatgpt = {
426
394
 
427
395
  if (method == 'dom') {
428
396
  try { await chatgpt.getChatData(); } catch { return; } // check if chat history exists
429
- chatgpt.menu.open();
430
- setTimeout(() => {
431
- const menuItems = document.querySelectorAll('a[role="menuitem"]') || [];
432
- for (const menuItem of menuItems)
433
- if (/settings/i.test(menuItem.text)) { menuItem.click(); break; }
397
+ chatgpt.menu.open(); setTimeout(() => { // open settings
398
+ const settingsBtn = document.querySelector(
399
+ 'a[role="menuitem"] svg path[d*="M11.6439 3C10.9352"]').parentNode.parentNode;
400
+ if (settingsBtn) settingsBtn.click();
434
401
  setTimeout(() => { // clear chats
435
- const settingsBtns = document.querySelectorAll('[id*=radix] button');
436
- for (const settingsBtn of settingsBtns)
437
- if (/^clear/i.test(settingsBtn.textContent)) { settingsBtn.click(); break; }
402
+ const settingsBtns = document.querySelectorAll('[id*=radix] button'),
403
+ deleteBtn = settingsBtns[settingsBtns.length - 1];
404
+ if (deleteBtn) deleteBtn.click();
438
405
  setTimeout(() => { // confirm clear
439
- document.querySelector('[id*=radix] button').click();
440
- setTimeout(() => {
441
- exitMenu();
442
- try { document.querySelector('#prompt-textarea').focus(); } catch (err) {}
443
- }, 10);
406
+ document.querySelector('button[class*="danger"').click();
444
407
  }, 10); }, 333); }, 10);
445
- const exitMenu = () => { document.querySelector('div[id*=radix] button').click(); };
446
408
 
447
409
  } else { // API method
448
410
  // NOTE: DOM is not updated to reflect new empty chat list (until session refresh)
@@ -835,7 +797,7 @@ const chatgpt = {
835
797
 
836
798
  // Fill [userMessages]
837
799
  for (const key in data)
838
- if ('message' in data[key] && data[key].message.author.role == 'user')
800
+ if (data[key].message != null && data[key].message.author.role == 'user')
839
801
  userMessages.push({ id: data[key].id, msg: data[key].message });
840
802
  userMessages.sort((a, b) => a.msg.create_time - b.msg.create_time); // sort in chronological order
841
803
 
@@ -847,7 +809,7 @@ const chatgpt = {
847
809
  for (const userMessage of userMessages) {
848
810
  let sub = [];
849
811
  for (const key in data) {
850
- if ('message' in data[key] && data[key].message.author.role == 'assistant' && data[key].parent == userMessage.id) {
812
+ if (data[key].message != null && data[key].message.author.role == 'assistant' && data[key].parent == userMessage.id) {
851
813
  sub.push(data[key].message);
852
814
  }
853
815
  }
@@ -944,17 +906,6 @@ const chatgpt = {
944
906
  navigator.systemLanguage || navigator.userLanguage || ''; },
945
907
 
946
908
  history: {
947
- activate: function() { this.isOff() ? this.toggle() : console.info('Chat history is already enabled!'); },
948
- deactivate: function() { this.isOn() ? this.toggle() : console.info('Chat history is already disabled!'); },
949
-
950
- isOn: function() {
951
- const navDivs = document.querySelectorAll('nav div'),
952
- offDiv = [...navDivs].find(div => div.textContent.includes('Chat History is off')) || {};
953
- return offDiv.classList.toString().includes('invisible');
954
- },
955
-
956
- isOff: function() { return !this.isOn(); },
957
-
958
909
  isLoaded: function() {
959
910
  return new Promise(resolve => {
960
911
  const checkChatHistory = () => {
@@ -962,13 +913,7 @@ const chatgpt = {
962
913
  else setTimeout(checkChatHistory, 100);
963
914
  };
964
915
  checkChatHistory();
965
- });},
966
-
967
- toggle: function() {
968
- for (const navBtn of document.querySelectorAll('nav button')) {
969
- if (/chat history/i.test(navBtn.textContent)) {
970
- navBtn.click(); return;
971
- }}}
916
+ });}
972
917
  },
973
918
 
974
919
  instructions: {
@@ -1239,7 +1184,7 @@ const chatgpt = {
1239
1184
 
1240
1185
  // Create/append close button
1241
1186
  const closeBtn = document.createElement('div');
1242
- closeBtn.title = cjsMessages?.tooltip_dismiss || 'Dismiss'; closeBtn.classList.add('notif-close-btn');
1187
+ closeBtn.title = 'Dismiss'; closeBtn.classList.add('notif-close-btn');
1243
1188
  const closeSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
1244
1189
  closeSVG.setAttribute('height', '8px');
1245
1190
  closeSVG.setAttribute('viewBox', '0 0 14 14');
@@ -1,7 +1,13 @@
1
- const h={assets:"https://raw.githubusercontent.com/KudoAI/chatgpt.js/main",openAI:{session:"https://chat.openai.com/api/auth/session",chats:"https://chat.openai.com/backend-api/conversations",chat:"https://chat.openai.com/backend-api/conversation",share_create:"https://chat.openai.com/backend-api/share/create",share:"https://chat.openai.com/backend-api/share",instructions:"https://chat.openai.com/backend-api/user_system_messages"}},e=(localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringify({queue:{topRight:[],bottomRight:[],bottomLeft:[],topLeft:[]},lastNthAudio:0}),navigator.userAgent.includes("Chrome")&&"undefined"!=typeof unsafeWindow),t=navigator.userAgent.includes("Firefox")&&"undefined"!=typeof unsafeWindow,y=t&&"Tampermonkey"==GM_info.scriptHandler;let x;e||t&&!y||(async()=>{var e=new Promise(o=>{const r=navigator.languages[0]||navigator.language||navigator.browserLanguage||navigator.systemLanguage||navigator.userLanguage||"",s=h.assets+"/data/_locales/",e=(r?r.replace("-","_"):"en")+"/";let a=s+e+"messages.json",i=0;!function t(){const n=new XMLHttpRequest;n.open("GET",a),n.send(),n.onload=()=>{try{var e=new Proxy(JSON.parse(n.responseText),{get(e,t){if("object"==typeof e[t]&&null!==e[t]&&"message"in e[t])return e[t].message}});o(e)}catch(e){3===++i&&o({}),a=r.includes("-")&&1===i?a.replace(/([^_]*)_[^/]*(\/.*)/,"$1$2"):s+"en/messages.json",t()}},n.onerror=()=>{o({})}}()});x=await e})();const C={openAIaccessToken:{},actAs:function(a){return new Promise((o,r)=>{const s=new XMLHttpRequest;s.open("GET","https://raw.githubusercontent.com/KudoAI/chat-prompts/main/dist/personas.min.json",!0),s.send(),s.onload=()=>{if(200!==s.status)return r("🤖 chatgpt.js >> Request failed. Cannot retrieve prompts data.");var e=JSON.parse(s.responseText).personas;if(a){var t=e.find(e=>e.title.toLowerCase()==a.toLowerCase());if(!t)return r(`🤖 chatgpt.js >> Persona '${a}' was not found!`);C.send(t.prompt,"click"),console.info(`Loading ${a} persona...`),C.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(const n of e)console.log("%c"+n.title,"font-family: monospace ; font-size: larger ;")}return o()}})},activateDarkMode:function(){document.documentElement.classList.replace("light","dark"),document.documentElement.style.colorScheme="dark",localStorage.setItem("theme","dark")},activateLightMode:function(){document.documentElement.classList.replace("dark","light"),document.documentElement.style.colorScheme="light",localStorage.setItem("theme","light")},alert:function(e,t,n,o,r){const s=C.isDarkMode()?"dark":"light",a=C.browser.isMobile(),i=document.createElement("div"),c=(i.id=Math.floor(1e6*C.randomFloat())+Date.now(),i.classList.add("chatgpt-modal"),document.createElement("div")),l=document.createElement("h2"),u=document.createElement("p");var d=20231203;let f=document.querySelector("#chatgpt-modal-style");(!f||parseInt(f.getAttribute("last-updated"),10)<d)&&(f||((f=document.createElement("style")).id="chatgpt-modal-style",f.setAttribute("last-updated",d.toString()),document.head.append(f)),f.innerText=".chatgpt-modal {position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;background-color: rgba(67, 70, 72, 0) ;transition: background-color 0.05s ease ;display: flex ; justify-content: center ; align-items: center ; z-index: 9999 }.chatgpt-modal > div {opacity: 0 ; transform: translateX(-2px) translateY(5px) ; max-width: 75vw ; word-wrap: break-word ;transition: opacity 0.1s cubic-bezier(.165,.84,.44,1), transform 0.2s cubic-bezier(.165,.84,.44,1) ;"+`background-color: ${"dark"==s?"black":"white"} ;`+("dark"!=s?"border: 1px solid rgba(0, 0, 0, 0.3) ;":"")+"padding: 20px ; margin: 12px 23px ; border-radius: 15px ; box-shadow: 0 30px 60px rgba(0, 0, 0, .12) ; -webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none ; user-select: none ; }.chatgpt-modal h2 { margin-bottom: 9px }"+`.chatgpt-modal a { color: ${"dark"==s?"#00cfff":"#1e9ebb"}}`+".chatgpt-modal.animated > div { opacity: 1 ; transform: translateX(0) translateY(0) }@keyframes alert-zoom-fade-out { 0% { opacity: 1 ; transform: scale(1) }50% { opacity: 0.25 ; transform: scale(1.05) }100% { opacity: 0 ; transform: scale(1.35) }}.modal-buttons { display: flex ; justify-content: flex-end ; margin: 20px -5px -3px 0 ;"+(a?"flex-direction: column-reverse":"")+"}.chatgpt-modal button {"+`margin-left: ${a?0:10}px ; padding: ${a?15:4}px 18px ; border-radius: 15px ;`+(a?"margin-top: 5px ; margin-bottom: 3px ;":"")+`border: 1px solid ${"dark"==s?"white":"black"}}`+".primary-modal-btn {"+`border: 1px solid ${"dark"==s?"white":"black"} ;`+`background: ${"dark"==s?"white":"black"} ;`+`color: ${"dark"==s?"black":"white"}}`+".chatgpt-modal button:hover { color: #3d5d71 ; border-color: #6d9cb9 ;background-color: "+("dark"==s?"#00cfff":"#9cdaff")+";box-shadow: 2px 1px "+("dark"==s?"54px #00cfff":"30px #9cdaff")+"}.modal-close-btn {cursor: pointer ; width: 20px ; height: 20px ; float: right ; position: relative ; right: -2px }.modal-close-btn svg { margin: 5px 5px }"+`.modal-close-btn:hover { background-color: #f2f2f2${"dark"==s?"00":""}}`+".chatgpt-modal .checkbox-group { display: flex ; margin-top: -18px }.chatgpt-modal .checkbox-group label {font-size: .7rem ; margin: -.04rem 0 0px .3rem ;"+`color: ${"dark"==s?"#e1e1e1":"#1e1e1e"}}`+'.chatgpt-modal input[type="checkbox"] { transform: scale(0.7) ;'+`border: 1px solid ${"dark"==s?"white":"black"}}`+'.chatgpt-modal input[type="checkbox"]:checked {'+`border: 1px solid ${"dark"==s?"white":"black"} ;`+'background-color: black ; position: inherit }.chatgpt-modal input[type="checkbox"]:focus { outline: none ; box-shadow: none }'),l.innerText=e||"",u.innerText=t||"",this.renderHTML(u);const g=document.createElement("div");g.classList.add("modal-buttons"),n&&(n=Array.isArray(n)?n:[n]).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.addEventListener("click",()=>{v(),e()}),g.insertBefore(t,g.firstChild)});d=document.createElement("button"),d.textContent=n?"Dismiss":"OK",g.insertBefore(d,g.firstChild),g.lastChild.classList.add("primary-modal-btn"),e=document.createElement("div");if(o){e.classList.add("checkbox-group");const b=o,w=document.createElement("input");w.type="checkbox",w.addEventListener("change",b);t=document.createElement("label");t.addEventListener("click",()=>{w.checked=!w.checked,b()}),t.textContent=b.name.charAt(0).toUpperCase()+b.name.slice(1).replace(/([A-Z])/g,(e,t)=>" "+t.toLowerCase()).replace(/\b(\w+)nt\b/gi,"$1n't").trim(),e.append(w),e.append(t)}n=document.createElement("div"),n.title=x?.tooltip_close||"Close",n.classList.add("modal-close-btn"),o=document.createElementNS("http://www.w3.org/2000/svg","svg"),o.setAttribute("height","10px"),o.setAttribute("viewBox","0 0 14 14"),o.setAttribute("fill","none"),t=document.createElementNS("http://www.w3.org/2000/svg","path");t.setAttribute("fill-rule","evenodd"),t.setAttribute("clip-rule","evenodd"),t.setAttribute("fill",C.isDarkMode()?"white":"black"),t.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"),o.append(t),n.append(o),[n,l,u,g,e].forEach(e=>{c.append(e)}),c.style.width=`${r||458}px`,i.append(c),document.body.append(i);let p=JSON.parse(localStorage.alertQueue);p.push(i.id),localStorage.alertQueue=JSON.stringify(p),i.style.display="none",1===p.length&&(i.style.display="",setTimeout(()=>{i.style.backgroundColor=`rgba(67, 70, 72, ${"dark"==s?.62:0})`,i.classList.add("animated")},100));const m=e=>{(e.target==e.currentTarget||e.target instanceof SVGPathElement)&&v()},h=e=>{if([13,27].includes(e.keyCode))for(const n of p){var t=document.getElementById(n);if(t&&"none"!==t.style.display)return void(27===e.keyCode?v():13===e.keyCode&&(t=t.querySelector(".modal-buttons").lastChild)&&(t.click(),e.preventDefault()))}},y=[i,n,o,d],v=(y.forEach(e=>{e.addEventListener("click",m)}),document.addEventListener("keydown",h),()=>{i.style.backgroundColor="transparent",c.style.animation="alert-zoom-fade-out 0.075s ease-out",setTimeout(()=>{if(i.remove(),(p=JSON.parse(localStorage.alertQueue)).shift(),localStorage.alertQueue=JSON.stringify(p),y.forEach(e=>{e.removeEventListener("click",m)}),document.removeEventListener("keydown",h),0<p.length){const e=document.getElementById(p[0]);setTimeout(()=>{e.style.display="",setTimeout(()=>{e.classList.add("animated")},100)},500)}},50)});return i.id},askAndGetReply:async function(e){return C.send(e),await C.isIdle(),C.getChatData("active","msg","chatgpt","latest")},autoRefresh:{activate:function(e){if(this.isActive)console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Auto refresh already active!");else{const n=this,o=(this.toggle.refreshFrame(),t=>{var e=Math.max(2,Math.floor(21*C.randomFloat()-10));n.isActive=setTimeout(()=>{var e=document.querySelector('script[src*="_ssgManifest.js"]');document.querySelector("#refresh-frame").src=e.src+"?"+Date.now(),console.log("↻ ChatGPT >> ["+n.nowTimeStamp()+"] ChatGPT session refreshed"),o(t)},1e3*(t+e))});o(e?parseInt(e,10):30),console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Auto refresh activated"),navigator.userAgent.includes("Chrome")&&void 0!==document.hidden&&document.addEventListener("visibilitychange",this.toggle.beacons)}},deactivate:function(){this.isActive?(this.toggle.refreshFrame(),document.removeEventListener("visibilitychange",this.toggle.beacons),clearTimeout(this.isActive),this.isActive=null,console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Auto refresh de-activated")):console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Auto refresh already inactive!")},nowTimeStamp:function(){var e=new Date,t=e.getHours()%12||12;let n=e.getMinutes(),o=e.getSeconds();n<10&&(n="0"+n),o<10&&(o="0"+o);e=e.getHours()<12?"AM":"PM";return t+":"+n+":"+o+" "+e},toggle:{beacons:function(){C.autoRefresh.beaconID?(clearInterval(C.autoRefresh.beaconID),C.autoRefresh.beaconID=null,console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Beacons de-activated")):(C.autoRefresh.beaconID=setInterval(()=>{navigator.sendBeacon("https://httpbin.org/post",new Uint8Array),console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Beacon sent")},9e4),console.log("↻ ChatGPT >> ["+C.autoRefresh.nowTimeStamp()+"] Beacons activated"))},refreshFrame:function(){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:function(){return window.matchMedia?.("(prefers-color-scheme: light)")?.matches},isDarkMode:function(){return window.matchMedia?.("(prefers-color-scheme: dark)")?.matches},isChromium:function(){return navigator.userAgent.includes("Chrome")},isFirefox:function(){return navigator.userAgent.includes("Firefox")},isFullScreen:function(){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:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}},clearChats:async function(e){var t=["api","dom"];if((e=(e||"dom").trim().toLowerCase())&&!t.includes(e))return console.log(`Method argument must be one of: [${t}]`);if("dom"!=e)return new Promise((n,o)=>{C.getAccessToken().then(e=>{const t=new XMLHttpRequest;t.open("PATCH",h.openAI.chats,!0),t.setRequestHeader("Content-Type","application/json"),t.setRequestHeader("Authorization","Bearer "+e),t.onload=()=>{if(200!==t.status)return o("🤖 chatgpt.js >> Request failed. Cannot clear chats.");console.info("Chats successfully cleared"),n()},t.send(JSON.stringify({is_visible:!1}))}).catch(o)});{try{await C.getChatData()}catch{return}C.menu.open(),setTimeout(()=>{for(const e of document.querySelectorAll('a[role="menuitem"]')||[])if(/settings/i.test(e.text)){e.click();break}setTimeout(()=>{for(const e of document.querySelectorAll("[id*=radix] button"))if(/^clear/i.test(e.textContent)){e.click();break}setTimeout(()=>{document.querySelector("[id*=radix] button").click(),setTimeout(()=>{n();try{document.querySelector("#prompt-textarea").focus()}catch(e){}},10)},10)},333)},10);const n=()=>{document.querySelector("div[id*=radix] button").click()}}},code:{execute:async function(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(C.send("Display the output as if you were terminal:\n\n"+e),console.info("Executing code..."),await C.isIdle(),C.code.extract(await C.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},extract:function(e){var t=e.match(/(?<=```.*\n)[\s\S]*?(?=```)/g);return t?t[t.length-1]:e},minify:async function(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(C.send("Minify the following code:\n\n"+e),console.info("Minifying code..."),await C.isIdle(),C.code.extract(await C.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},obfuscate:async function(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(C.send("Obfuscate the following code:\n\n"+e),console.info("Obfuscating code..."),await C.isIdle(),C.code.extract(await C.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},refactor:async function(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 C.send("Refactor the following code for "+(t||"brevity")+":\n\n"+e),console.info("Refactoring code..."),await C.isIdle(),C.code.extract(await C.getChatData("active","msg","chatgpt","latest"))},review:async function(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(C.send("Review the following code for me:\n\n"+e),console.info("Reviewing code..."),await C.isIdle(),C.getChatData("active","msg","chatgpt","latest")):console.error("Code argument not supplied. Pass some code!")},unminify:async function(e){return e?"string"!=typeof e?console.error("Code argument must be a string!"):(C.send("Unminify the following code.:\n\n"+e),console.info("Unminifying code..."),await C.isIdle(),C.code.extract(await C.getChatData("active","msg","chatgpt","latest"))):console.error("Code argument not supplied. Pass some code!")},write:async function(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 C.send(e+"\n\nWrite this as code in "+t),console.info("Writing code..."),await C.isIdle(),C.code.extract(await C.getChatData("active","msg","chatgpt","latest"))}},detectLanguage:async function(e){return e?"string"!=typeof e?console.error("Text argument must be a string!"):(C.send("Detect the language of the following text:\n\n"+e+"\n\nOnly respond with the name of the language"),console.info("Reviewing text..."),await C.isIdle(),C.getChatData("active","msg","chatgpt","latest")):console.error("Text argument not supplied. Pass some text!")},executeCode:function(){C.code.execute()},exportChat:async function(e,t){e=e?Number.isInteger(e)||/^\d+$/.test(e)?parseInt(e,10):e:"active",t=t.toLowerCase()||"html",console.info("Generating transcript...");let o="",n;if(/te?xt/.test(t)){var r=new Date,s=r.getDate().toString().padStart(2,"0"),a=(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(n=`ChatGPT_${s}-${a}-${i}_${c}-${r}.txt`,"active"==e&&/\/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/.test(window.location.href)){s=document.querySelectorAll("main > div > div > div > div > div > div[class*=group]");if(0===s.length)return console.error("Chat is empty!");const l=[];let n=!0;s.forEach(e=>{var t=n?"USER":"CHATGPT",e=(n=!n,Array.from(e.childNodes).map(e=>e.innerText).join("\n\n").replace("Copy code",""));l.push(t+": "+e)}),o=l.join("\n\n")}else for(const u of await C.getChatData(e,"msg","both","all"))o=(o+=`USER: ${u.user}
1
+ /**
2
+ * © 2023–2024 KudoAI & contributors under the MIT license.
3
+ * Source: https://github.com/KudoAI/chatgpt.js
4
+ * User guide: https://chatgptjs.org/userguide
5
+ * Latest minified release: https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js/chatgpt.min.js
6
+ */
7
+ const endpoints={assets:"https://raw.githubusercontent.com/KudoAI/chatgpt.js/main",openAI:{session:"https://chat.openai.com/api/auth/session",chats:"https://chat.openai.com/backend-api/conversations",chat:"https://chat.openai.com/backend-api/conversation",share_create:"https://chat.openai.com/backend-api/share/create",share:"https://chat.openai.com/backend-api/share",instructions:"https://chat.openai.com/backend-api/user_system_messages"}},isFFuserScript=(localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringify({queue:{topRight:[],bottomRight:[],bottomLeft:[],topLeft:[]},lastNthAudio:0}),navigator.userAgent.includes("Firefox")&&"undefined"!=typeof unsafeWindow),isFFtmScript=isFFuserScript&&"Tampermonkey"==GM_info.scriptHandler,chatgpt={openAIaccessToken:{},actAs:function(s){return new Promise((o,r)=>{const a=new XMLHttpRequest;a.open("GET","https://raw.githubusercontent.com/KudoAI/chat-prompts/main/dist/personas.min.json",!0),a.send(),a.onload=()=>{if(200!==a.status)return r("🤖 chatgpt.js >> Request failed. Cannot retrieve prompts data.");var e=JSON.parse(a.responseText).personas;if(s){var t=e.find(e=>e.title.toLowerCase()==s.toLowerCase());if(!t)return r(`🤖 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(const n of e)console.log("%c"+n.title,"font-family: monospace ; font-size: larger ;")}return o()}})},activateDarkMode:function(){document.documentElement.classList.replace("light","dark"),document.documentElement.style.colorScheme="dark",localStorage.setItem("theme","dark")},activateLightMode:function(){document.documentElement.classList.replace("dark","light"),document.documentElement.style.colorScheme="light",localStorage.setItem("theme","light")},alert:function(e,t,n,o,r){const a=chatgpt.isDarkMode()?"dark":"light",s=chatgpt.browser.isMobile(),i=document.createElement("div"),c=(i.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),i.classList.add("chatgpt-modal"),document.createElement("div")),l=document.createElement("h2"),u=document.createElement("p");var d=20231203;let p=document.querySelector("#chatgpt-modal-style");(!p||parseInt(p.getAttribute("last-updated"),10)<d)&&(p||((p=document.createElement("style")).id="chatgpt-modal-style",p.setAttribute("last-updated",d.toString()),document.head.append(p)),p.innerText=".chatgpt-modal {position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;background-color: rgba(67, 70, 72, 0) ;transition: background-color 0.05s ease ;display: flex ; justify-content: center ; align-items: center ; z-index: 9999 }.chatgpt-modal > div {opacity: 0 ; transform: translateX(-2px) translateY(5px) ; max-width: 75vw ; word-wrap: break-word ;transition: opacity 0.1s cubic-bezier(.165,.84,.44,1), transform 0.2s cubic-bezier(.165,.84,.44,1) ;"+`background-color: ${"dark"==a?"black":"white"} ;`+("dark"!=a?"border: 1px solid rgba(0, 0, 0, 0.3) ;":"")+"padding: 20px ; margin: 12px 23px ; border-radius: 15px ; box-shadow: 0 30px 60px rgba(0, 0, 0, .12) ; -webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none ; user-select: none ; }.chatgpt-modal h2 { margin-bottom: 9px }"+`.chatgpt-modal a { color: ${"dark"==a?"#00cfff":"#1e9ebb"}}`+".chatgpt-modal.animated > div { opacity: 1 ; transform: translateX(0) translateY(0) }@keyframes alert-zoom-fade-out { 0% { opacity: 1 ; transform: scale(1) }50% { opacity: 0.25 ; transform: scale(1.05) }100% { opacity: 0 ; transform: scale(1.35) }}.modal-buttons { display: flex ; justify-content: flex-end ; margin: 20px -5px -3px 0 ;"+(s?"flex-direction: column-reverse":"")+"}.chatgpt-modal button {"+`margin-left: ${s?0:10}px ; padding: ${s?15:4}px 18px ; border-radius: 15px ;`+(s?"margin-top: 5px ; margin-bottom: 3px ;":"")+`border: 1px solid ${"dark"==a?"white":"black"}}`+".primary-modal-btn {"+`border: 1px solid ${"dark"==a?"white":"black"} ;`+`background: ${"dark"==a?"white":"black"} ;`+`color: ${"dark"==a?"black":"white"}}`+".chatgpt-modal button:hover { color: #3d5d71 ; border-color: #6d9cb9 ;background-color: "+("dark"==a?"#00cfff":"#9cdaff")+";box-shadow: 2px 1px "+("dark"==a?"54px #00cfff":"30px #9cdaff")+"}.modal-close-btn {cursor: pointer ; width: 20px ; height: 20px ; float: right ; position: relative ; right: -2px }.modal-close-btn svg { margin: 5px 5px }"+`.modal-close-btn:hover { background-color: #f2f2f2${"dark"==a?"00":""}}`+".chatgpt-modal .checkbox-group { display: flex ; margin-top: -18px }.chatgpt-modal .checkbox-group label {font-size: .7rem ; margin: -.04rem 0 0px .3rem ;"+`color: ${"dark"==a?"#e1e1e1":"#1e1e1e"}}`+'.chatgpt-modal input[type="checkbox"] { transform: scale(0.7) ;'+`border: 1px solid ${"dark"==a?"white":"black"}}`+'.chatgpt-modal input[type="checkbox"]:checked {'+`border: 1px solid ${"dark"==a?"white":"black"} ;`+'background-color: black ; position: inherit }.chatgpt-modal input[type="checkbox"]:focus { outline: none ; box-shadow: none }'),l.innerText=e||"",u.innerText=t||"",this.renderHTML(u);const g=document.createElement("div");g.classList.add("modal-buttons"),n&&(n=Array.isArray(n)?n:[n]).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.addEventListener("click",()=>{w(),e()}),g.insertBefore(t,g.firstChild)});d=document.createElement("button"),d.textContent=n?"Dismiss":"OK",g.insertBefore(d,g.firstChild),g.lastChild.classList.add("primary-modal-btn"),e=document.createElement("div");if(o){e.classList.add("checkbox-group");const b=o,v=document.createElement("input");v.type="checkbox",v.addEventListener("change",b);t=document.createElement("label");t.addEventListener("click",()=>{v.checked=!v.checked,b()}),t.textContent=b.name.charAt(0).toUpperCase()+b.name.slice(1).replace(/([A-Z])/g,(e,t)=>" "+t.toLowerCase()).replace(/\b(\w+)nt\b/gi,"$1n't").trim(),e.append(v),e.append(t)}n=document.createElement("div"),n.title="Close",n.classList.add("modal-close-btn"),o=document.createElementNS("http://www.w3.org/2000/svg","svg"),o.setAttribute("height","10px"),o.setAttribute("viewBox","0 0 14 14"),o.setAttribute("fill","none"),t=document.createElementNS("http://www.w3.org/2000/svg","path");t.setAttribute("fill-rule","evenodd"),t.setAttribute("clip-rule","evenodd"),t.setAttribute("fill",chatgpt.isDarkMode()?"white":"black"),t.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"),o.append(t),n.append(o),[n,l,u,g,e].forEach(e=>{c.append(e)}),c.style.width=`${r||458}px`,i.append(c),document.body.append(i);let h=JSON.parse(localStorage.alertQueue);h.push(i.id),localStorage.alertQueue=JSON.stringify(h),i.style.display="none",1===h.length&&(i.style.display="",setTimeout(()=>{i.style.backgroundColor=`rgba(67, 70, 72, ${"dark"==a?.62:0})`,i.classList.add("animated")},100));const f=e=>{(e.target==e.currentTarget||e.target instanceof SVGPathElement)&&w()},m=e=>{if([13,27].includes(e.keyCode))for(const n of h){var t=document.getElementById(n);if(t&&"none"!==t.style.display)return void(27===e.keyCode?w():13===e.keyCode&&(t=t.querySelector(".modal-buttons").lastChild)&&(t.click(),e.preventDefault()))}},y=[i,n,o,d],w=(y.forEach(e=>{e.addEventListener("click",f)}),document.addEventListener("keydown",m),()=>{i.style.backgroundColor="transparent",c.style.animation="alert-zoom-fade-out 0.075s ease-out",setTimeout(()=>{if(i.remove(),(h=JSON.parse(localStorage.alertQueue)).shift(),localStorage.alertQueue=JSON.stringify(h),y.forEach(e=>{e.removeEventListener("click",f)}),document.removeEventListener("keydown",m),0<h.length){const e=document.getElementById(h[0]);setTimeout(()=>{e.style.display="",setTimeout(()=>{e.classList.add("animated")},100)},500)}},50)});return i.id},askAndGetReply:async function(e){return chatgpt.send(e),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},autoRefresh:{activate:function(e){if(this.isActive)console.log("↻ ChatGPT >> ["+chatgpt.autoRefresh.nowTimeStamp()+"] Auto refresh already active!");else{const n=this,o=(this.toggle.refreshFrame(),t=>{var e=Math.max(2,Math.floor(21*chatgpt.randomFloat()-10));n.isActive=setTimeout(()=>{var e=document.querySelector('script[src*="_ssgManifest.js"]');document.querySelector("#refresh-frame").src=e.src+"?"+Date.now(),console.log("↻ ChatGPT >> ["+n.nowTimeStamp()+"] ChatGPT session refreshed"),o(t)},1e3*(t+e))});o(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:function(){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:function(){var e=new Date,t=e.getHours()%12||12;let n=e.getMinutes(),o=e.getSeconds();n<10&&(n="0"+n),o<10&&(o="0"+o);e=e.getHours()<12?"AM":"PM";return t+":"+n+":"+o+" "+e},toggle:{beacons:function(){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:function(){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:function(){return window.matchMedia?.("(prefers-color-scheme: light)")?.matches},isDarkMode:function(){return window.matchMedia?.("(prefers-color-scheme: dark)")?.matches},isChromium:function(){return navigator.userAgent.includes("Chrome")},isFirefox:function(){return navigator.userAgent.includes("Firefox")},isFullScreen:function(){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:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}},clearChats:async function(e){var t=["api","dom"];if((e=(e||"dom").trim().toLowerCase())&&!t.includes(e))return console.log(`Method argument must be one of: [${t}]`);if("dom"!=e)return new Promise((n,o)=>{chatgpt.getAccessToken().then(e=>{const t=new XMLHttpRequest;t.open("PATCH",endpoints.openAI.chats,!0),t.setRequestHeader("Content-Type","application/json"),t.setRequestHeader("Authorization","Bearer "+e),t.onload=()=>{if(200!==t.status)return o("🤖 chatgpt.js >> Request failed. Cannot clear chats.");console.info("Chats successfully cleared"),n()},t.send(JSON.stringify({is_visible:!1}))}).catch(o)});try{await chatgpt.getChatData()}catch{return}chatgpt.menu.open(),setTimeout(()=>{var e=document.querySelector('a[role="menuitem"] svg path[d*="M11.6439 3C10.9352"]').parentNode.parentNode;e&&e.click(),setTimeout(()=>{var e=document.querySelectorAll("[id*=radix] button"),e=e[e.length-1];e&&e.click(),setTimeout(()=>{document.querySelector('button[class*="danger"').click()},10)},333)},10)},code:{execute:async function(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:function(e){var t=e.match(/(?<=```.*\n)[\s\S]*?(?=```)/g);return t?t[t.length-1]:e},minify:async function(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!")},obfuscate:async function(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!")},refactor:async function(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")+":\n\n"+e),console.info("Refactoring code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))},review:async function(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!")},unminify:async function(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!")},write:async function(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+"\n\nWrite this as code in "+t),console.info("Writing code..."),await chatgpt.isIdle(),chatgpt.code.extract(await chatgpt.getChatData("active","msg","chatgpt","latest"))}},detectLanguage:async function(e){return e?"string"!=typeof e?console.error("Text argument must be a string!"):(chatgpt.send("Detect the language of the following text:\n\n"+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:function(){chatgpt.code.execute()},exportChat:async function(e,t){e=e?Number.isInteger(e)||/^\d+$/.test(e)?parseInt(e,10):e:"active",t=t.toLowerCase()||"html",console.info("Generating transcript...");let o="",n;if(/te?xt/.test(t)){var r=new Date,a=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(n=`ChatGPT_${a}-${s}-${i}_${c}-${r}.txt`,"active"==e&&/\/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/.test(window.location.href)){a=document.querySelectorAll("main > div > div > div > div > div > div[class*=group]");if(0===a.length)return console.error("Chat is empty!");const l=[];let n=!0;a.forEach(e=>{var t=n?"USER":"CHATGPT",e=(n=!n,Array.from(e.childNodes).map(e=>e.innerText).join("\n\n").replace("Copy code",""));l.push(t+": "+e)}),o=l.join("\n\n")}else for(const u of await chatgpt.getChatData(e,"msg","both","all"))o=(o+=`USER: ${u.user}
2
8
 
3
9
  `)+`CHATGPT: ${u.chatgpt}
4
10
 
5
- `}else{a=await(await fetch(await C.shareChat(e))).text(),i=(new DOMParser).parseFromString(a,"text/html");n=i.querySelector("title").textContent+".html",i.querySelectorAll('link[rel="stylesheet"]').forEach(e=>{var t=e.getAttribute("href");t?.startsWith("/")&&e.setAttribute("href","https://chat.openai.com"+t)}),o=(new XMLSerializer).serializeToString(i)}if(console.info(`Exporting transcript as ${t.toUpperCase()}...`),"pdf"==t){o=o.replace(/<svg.*?<\/svg>/g,e=>{return`<img src="${"data:image/svg+xml,"+encodeURIComponent(e)}">`});const d=window.open("","","toolbar=0, location=0, menubar=0, height=600, width=800");d.document.write(o),setTimeout(()=>{d.print({toPDF:!0})},100)}else{"md"==t&&(c=/<.*(?:<h1(.|\n)*?href=".*?continue[^"]*".*?\/a>.*?)<[^/]/.exec(o)[1],o=c||o,n=n.replace(".html",".md"));r=new Blob([o],{type:"text/"+("html"==t?"html":"md"==t?"markdown":"plain")}),s=document.createElement("a"),e=URL.createObjectURL(r);s.href=e,s.download=n,document.body.append(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(e)}},extractCode:function(){C.code.extract()},generateRandomIP:function(){var e=Array.from({length:4},()=>Math.floor(256*C.randomFloat())).join(".");return console.info("IP generated: "+e),e},get:function(e,t=""){if("string"!=typeof e||"string"!=typeof t)throw new TypeError("Invalid arguments. Both arguments must be strings.");if(!a.includes(e.toLowerCase()))throw new Error("Invalid targetType: "+e+". Valid values are: "+JSON.stringify(a));var n=[],o=new RegExp("^get(.*)"+e+"$","i");for(const s in C)"function"==typeof C[s]&&o.test(s)&&n.push(s.replace(o,"$1").toLowerCase());if(!n.includes(t.toLowerCase()))throw new Error("Invalid targetName: "+t+". "+(0<n.length?"Valid values are: "+JSON.stringify(n):"targetType "+e.toLowerCase()+" does not require additional options."));const r=("get"+t+e).toLowerCase();return this[Object.keys(this).find(e=>e.toLowerCase()==r)]()},getAccessToken:function(){return new Promise((e,t)=>{if(0<Object.keys(C.openAIaccessToken).length&&0<=Date.parse(C.openAIaccessToken.expireDate)-Date.parse(new Date))return e(C.openAIaccessToken.token);const n=new XMLHttpRequest;n.open("GET",h.openAI.session,!0),n.setRequestHeader("Content-Type","application/json"),n.onload=()=>200!==n.status?t("🤖 chatgpt.js >> Request failed. Cannot retrieve access token."):(console.info("Token expiration: "+new Date(JSON.parse(n.responseText).expires).toLocaleString().replace(","," at")),C.openAIaccessToken={token:JSON.parse(n.responseText).accessToken,expireDate:JSON.parse(n.responseText).expires},e(C.openAIaccessToken.token)),n.send()})},getAccountDetails:function(...a){var e=["email","id","image","name","picture"];for(const t of a=arguments[0]?Array.isArray(arguments[0])?arguments[0]:Array.from(arguments):e)if(!e.includes(t))return console.error("Invalid detail arg '"+t+"' supplied. Valid details are:\n ["+e+"]");return new Promise((o,r)=>{const s=new XMLHttpRequest;s.open("GET",h.openAI.session,!0),s.setRequestHeader("Content-Type","application/json"),s.onload=()=>{if(200!==s.status)return r("🤖 chatgpt.js >> Request failed. Cannot retrieve account details.");var e=JSON.parse(s.responseText).user,t={};for(const n of a)t[n]=e[n];return o(t)},s.send()})},getChatBox:function(){return document.getElementById("prompt-textarea")},getChatData:function(u=1,o="all",g="all",p="all"){var e=["all","id","title","create_time","update_time","msg"],t=["all","both","user","chatgpt"];u=u?Number.isInteger(u)||/^\d+$/.test(u)?0===parseInt(u,10)?0:parseInt(u,10)-1:u:"active",o=["all",""].includes(o)?e.filter(e=>/^(?!all$|msg$).*/.test(e)):Array.isArray(o)?o:[o],g=g?t.includes(g)?g:"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(const n of o)if(!e.includes(n))return console.error("Invalid detail arg '"+n+"' passed. Valid details are:\n ["+e+"]");if("invalid"==g)return console.error("Invalid sender arg passed. Valid senders are:\n ["+t+"]");if("invalid"==p)return console.error("Invalid msgToGet arg passed. Valid msg's to get are:\n [ 'all' | 'latest' | index of msg to get ]");const r=(e,c)=>{const l=/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/;return new Promise((t,a)=>{const i=new XMLHttpRequest;i.open("GET",h.openAI.chats,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("Authorization","Bearer "+e),i.onload=()=>{if(200!==i.status)return a("🤖 chatgpt.js >> Request failed. Cannot retrieve chat details.");var n=JSON.parse(i.responseText).items;if(n.length<=0)return a("🤖 chatgpt.js >> Chat list is empty.");var o={};if(Number.isInteger(u)||"latest"==u||"active"==u&&!new RegExp("/"+l.source+"$").test(window.location.href)){if((u=Number.isInteger(u)?u:0)>n.length)return a("🤖 chatgpt.js >> Chat with index "+(u+1)+" is out of bounds. Only "+n.length+" chats exist!");for(const e of c)o[e]=n[u][e]}else{var r="active"==u||new RegExp("^"+l.source+"$").test(u)?"id":"title";"active"==u&&(u=l.exec(window.location.href)[0]);let e,t;for(e=0;e<n.length;e++)if(n[e][r]==u){t=!0;break}if(!t)return a("🤖 chatgpt.js >> No chat with "+r+" = "+u+" found.");for(const s of c)o[s]=n[e][s]}return t(o)},i.send()})};return new Promise(n=>{C.getAccessToken().then(e=>{var t;o.includes("msg")?(t=e,new Promise((u,d)=>{const f=new XMLHttpRequest;r(t,["id"]).then(e=>{f.open("GET",h.openAI.chat+"/"+e.id,!0),f.setRequestHeader("Content-Type","application/json"),f.setRequestHeader("Authorization","Bearer "+t),f.onload=()=>{if(200!==f.status)return d("🤖 chatgpt.js >> Request failed. Cannot retrieve chat messages.");var t=JSON.parse(f.responseText).mapping,n=[],o=[],r=[];for(const e in t)"message"in t[e]&&"user"==t[e].message.author.role&&n.push({id:t[e].id,msg:t[e].message});if(n.sort((e,t)=>e.msg.create_time-t.msg.create_time),parseInt(p,10)+1>n.length)return d("🤖 chatgpt.js >> Message/response with index "+(p+1)+" is out of bounds. Only "+n.length+" messages/responses exist!");for(const s of n){let e=[];for(const a in t)"message"in t[a]&&"assistant"==t[a].message.author.role&&t[a].parent==s.id&&e.push(t[a].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,o.push(e)}if("user"==g)for(const i in n)r.push(n[i].msg.content.parts[0]);else if("chatgpt"==g)for(const c of o)r.push("latest"==p?o[o.length-1]:c);else{let e=0;for(const l in n)r.push({user:n[l].msg.content.parts[0],chatgpt:"latest"==p?o[e][o[e].length-1]:o[e]}),e++}return u("all"==p?r:"latest"==p?r[r.length-1]:r[p])},f.send()})}).then(e=>n(e))):r(e,o).then(e=>n(e))})})},getChatInput:function(){return C.getChatBox().value},getContinueGeneratingButton:function(){for(const e of document.querySelectorAll("form button svg"))if(e.querySelector('polygon[points*="11 19 2 12 11 5 11 19"]'))return e.parentNode.parentNode},getLastPrompt:function(){return C.getChatData("active","msg","user","latest")},getLastResponse:function(){return C.getChatData("active","msg","chatgpt","latest")},getNewChatLink:function(){for(const e of document.querySelectorAll("nav a"))if(/(new|clear) chat/i.test(e.text))return e},getRegenerateButton:function(){for(const e of document.querySelectorAll("main svg"))if(e.querySelector('path[d*="M4.5 2.5C5.05228"]'))return e.parentNode.parentNode},getResponse:function(){return(window.location.href.startsWith("https://chat.openai.com/c/")?C.getResponseFromDOM:C.getResponseFromAPI).apply(null,arguments)},getResponseFromAPI:function(e,t){return C.response.getFromAPI(e,t)},getResponseFromDOM:function(e){return C.response.getFromDOM(e)},getSendButton:function(){return document.querySelector('form button[class*="bottom"]')},getStopGeneratingButton:function(){for(const e of document.querySelectorAll("form button svg"))if(e.querySelector('path[d*="2 0 0 1 2"]'))return e.parentNode},getUserLanguage:function(){return navigator.languages[0]||navigator.language||navigator.browserLanguage||navigator.systemLanguage||navigator.userLanguage||""},history:{activate:function(){this.isOff()?this.toggle():console.info("Chat history is already enabled!")},deactivate:function(){this.isOn()?this.toggle():console.info("Chat history is already disabled!")},isOn:function(){return([...document.querySelectorAll("nav div")].find(e=>e.textContent.includes("Chat History is off"))||{}).classList.toString().includes("invisible")},isOff:function(){return!this.isOn()},isLoaded:function(){return new Promise(e=>{const t=()=>{document.querySelector("nav")?e(!0):setTimeout(t,100)};t()})},toggle:function(){for(const e of document.querySelectorAll("nav button"))if(/chat history/i.test(e.textContent))return void e.click()}},instructions:{add:function(o,r){var e;return o?"string"!=typeof o?console.error("Instruction must be a string"):(e=["user","chatgpt"],r?"string"!=typeof r?console.error("Target must be a string"):(r=r.toLowerCase(),e.includes(r)?(o=`
11
+ `}else{s=await(await fetch(await chatgpt.shareChat(e))).text(),i=(new DOMParser).parseFromString(s,"text/html");n=i.querySelector("title").textContent+".html",i.querySelectorAll('link[rel="stylesheet"]').forEach(e=>{var t=e.getAttribute("href");t?.startsWith("/")&&e.setAttribute("href","https://chat.openai.com"+t)}),o=(new XMLSerializer).serializeToString(i)}if(console.info(`Exporting transcript as ${t.toUpperCase()}...`),"pdf"==t){o=o.replace(/<svg.*?<\/svg>/g,e=>{return`<img src="${"data:image/svg+xml,"+encodeURIComponent(e)}">`});const d=window.open("","","toolbar=0, location=0, menubar=0, height=600, width=800");d.document.write(o),setTimeout(()=>{d.print({toPDF:!0})},100)}else{"md"==t&&(c=/<.*(?:<h1(.|\n)*?href=".*?continue[^"]*".*?\/a>.*?)<[^/]/.exec(o)[1],o=c||o,n=n.replace(".html",".md"));r=new Blob([o],{type:"text/"+("html"==t?"html":"md"==t?"markdown":"plain")}),a=document.createElement("a"),e=URL.createObjectURL(r);a.href=e,a.download=n,document.body.append(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(e)}},extractCode:function(){chatgpt.code.extract()},generateRandomIP:function(){var e=Array.from({length:4},()=>Math.floor(256*chatgpt.randomFloat())).join(".");return console.info("IP generated: "+e),e},get:function(e,t=""){if("string"!=typeof e||"string"!=typeof t)throw new TypeError("Invalid arguments. Both arguments must be strings.");if(!targetTypes.includes(e.toLowerCase()))throw new Error("Invalid targetType: "+e+". Valid values are: "+JSON.stringify(targetTypes));var n=[],o=new RegExp("^get(.*)"+e+"$","i");for(const a in chatgpt)"function"==typeof chatgpt[a]&&o.test(a)&&n.push(a.replace(o,"$1").toLowerCase());if(!n.includes(t.toLowerCase()))throw new Error("Invalid targetName: "+t+". "+(0<n.length?"Valid values are: "+JSON.stringify(n):"targetType "+e.toLowerCase()+" does not require additional options."));const r=("get"+t+e).toLowerCase();return this[Object.keys(this).find(e=>e.toLowerCase()==r)]()},getAccessToken:function(){return new Promise((e,t)=>{if(0<Object.keys(chatgpt.openAIaccessToken).length&&0<=Date.parse(chatgpt.openAIaccessToken.expireDate)-Date.parse(new Date))return e(chatgpt.openAIaccessToken.token);const n=new XMLHttpRequest;n.open("GET",endpoints.openAI.session,!0),n.setRequestHeader("Content-Type","application/json"),n.onload=()=>200!==n.status?t("🤖 chatgpt.js >> Request failed. Cannot retrieve access token."):(console.info("Token expiration: "+new Date(JSON.parse(n.responseText).expires).toLocaleString().replace(","," at")),chatgpt.openAIaccessToken={token:JSON.parse(n.responseText).accessToken,expireDate:JSON.parse(n.responseText).expires},e(chatgpt.openAIaccessToken.token)),n.send()})},getAccountDetails:function(...s){var e=["email","id","image","name","picture"];for(const t of s=arguments[0]?Array.isArray(arguments[0])?arguments[0]:Array.from(arguments):e)if(!e.includes(t))return console.error("Invalid detail arg '"+t+"' supplied. Valid details are:\n ["+e+"]");return new Promise((o,r)=>{const a=new XMLHttpRequest;a.open("GET",endpoints.openAI.session,!0),a.setRequestHeader("Content-Type","application/json"),a.onload=()=>{if(200!==a.status)return r("🤖 chatgpt.js >> Request failed. Cannot retrieve account details.");var e=JSON.parse(a.responseText).user,t={};for(const n of s)t[n]=e[n];return o(t)},a.send()})},getChatBox:function(){return document.getElementById("prompt-textarea")},getChatData:function(u=1,o="all",g="all",h="all"){var e=["all","id","title","create_time","update_time","msg"],t=["all","both","user","chatgpt"];u=u?Number.isInteger(u)||/^\d+$/.test(u)?0===parseInt(u,10)?0:parseInt(u,10)-1:u:"active",o=["all",""].includes(o)?e.filter(e=>/^(?!all$|msg$).*/.test(e)):Array.isArray(o)?o:[o],g=g?t.includes(g)?g:"invalid":"all",h=Number.isInteger(h)||/^\d+$/.test(h)?0===parseInt(h,10)?0:parseInt(h,10)-1:["all","latest"].includes(h.toLowerCase())?h.toLowerCase():h?"invalid":"all";for(const n of o)if(!e.includes(n))return console.error("Invalid detail arg '"+n+"' passed. Valid details are:\n ["+e+"]");if("invalid"==g)return console.error("Invalid sender arg passed. Valid senders are:\n ["+t+"]");if("invalid"==h)return console.error("Invalid msgToGet arg passed. Valid msg's to get are:\n [ 'all' | 'latest' | index of msg to get ]");const r=(e,c)=>{const l=/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/;return new Promise((t,s)=>{const i=new XMLHttpRequest;i.open("GET",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 n=JSON.parse(i.responseText).items;if(n.length<=0)return s("🤖 chatgpt.js >> Chat list is empty.");var o={};if(Number.isInteger(u)||"latest"==u||"active"==u&&!new RegExp("/"+l.source+"$").test(window.location.href)){if((u=Number.isInteger(u)?u:0)>n.length)return s("🤖 chatgpt.js >> Chat with index "+(u+1)+" is out of bounds. Only "+n.length+" chats exist!");for(const e of c)o[e]=n[u][e]}else{var r="active"==u||new RegExp("^"+l.source+"$").test(u)?"id":"title";"active"==u&&(u=l.exec(window.location.href)[0]);let e,t;for(e=0;e<n.length;e++)if(n[e][r]==u){t=!0;break}if(!t)return s("🤖 chatgpt.js >> No chat with "+r+" = "+u+" found.");for(const a of c)o[a]=n[e][a]}return t(o)},i.send()})};return new Promise(n=>{chatgpt.getAccessToken().then(e=>{var t;o.includes("msg")?(t=e,new Promise((u,d)=>{const p=new XMLHttpRequest;r(t,["id"]).then(e=>{p.open("GET",endpoints.openAI.chat+"/"+e.id,!0),p.setRequestHeader("Content-Type","application/json"),p.setRequestHeader("Authorization","Bearer "+t),p.onload=()=>{if(200!==p.status)return d("🤖 chatgpt.js >> Request failed. Cannot retrieve chat messages.");var t=JSON.parse(p.responseText).mapping,n=[],o=[],r=[];for(const e in t)null!=t[e].message&&"user"==t[e].message.author.role&&n.push({id:t[e].id,msg:t[e].message});if(n.sort((e,t)=>e.msg.create_time-t.msg.create_time),parseInt(h,10)+1>n.length)return d("🤖 chatgpt.js >> Message/response with index "+(h+1)+" is out of bounds. Only "+n.length+" messages/responses exist!");for(const a of n){let e=[];for(const s in t)null!=t[s].message&&"assistant"==t[s].message.author.role&&t[s].parent==a.id&&e.push(t[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,o.push(e)}if("user"==g)for(const i in n)r.push(n[i].msg.content.parts[0]);else if("chatgpt"==g)for(const c of o)r.push("latest"==h?o[o.length-1]:c);else{let e=0;for(const l in n)r.push({user:n[l].msg.content.parts[0],chatgpt:"latest"==h?o[e][o[e].length-1]:o[e]}),e++}return u("all"==h?r:"latest"==h?r[r.length-1]:r[h])},p.send()})}).then(e=>n(e))):r(e,o).then(e=>n(e))})})},getChatInput:function(){return chatgpt.getChatBox().value},getContinueGeneratingButton:function(){for(const e of document.querySelectorAll("form button svg"))if(e.querySelector('polygon[points*="11 19 2 12 11 5 11 19"]'))return e.parentNode.parentNode},getLastPrompt:function(){return chatgpt.getChatData("active","msg","user","latest")},getLastResponse:function(){return chatgpt.getChatData("active","msg","chatgpt","latest")},getNewChatLink:function(){for(const e of document.querySelectorAll("nav a"))if(/(new|clear) chat/i.test(e.text))return e},getRegenerateButton:function(){for(const e of document.querySelectorAll("main svg"))if(e.querySelector('path[d*="M4.5 2.5C5.05228"]'))return e.parentNode.parentNode},getResponse:function(){return(window.location.href.startsWith("https://chat.openai.com/c/")?chatgpt.getResponseFromDOM:chatgpt.getResponseFromAPI).apply(null,arguments)},getResponseFromAPI:function(e,t){return chatgpt.response.getFromAPI(e,t)},getResponseFromDOM:function(e){return chatgpt.response.getFromDOM(e)},getSendButton:function(){return document.querySelector('form button[class*="bottom"]')},getStopGeneratingButton:function(){for(const e of document.querySelectorAll("form button svg"))if(e.querySelector('path[d*="2 0 0 1 2"]'))return e.parentNode},getUserLanguage:function(){return navigator.languages[0]||navigator.language||navigator.browserLanguage||navigator.systemLanguage||navigator.userLanguage||""},history:{isLoaded:function(){return new Promise(e=>{const t=()=>{document.querySelector("nav")?e(!0):setTimeout(t,100)};t()})}},instructions:{add:function(o,r){var e;return o?"string"!=typeof o?console.error("Instruction must be a string"):(e=["user","chatgpt"],r?"string"!=typeof r?console.error("Target must be a string"):(r=r.toLowerCase(),e.includes(r)?(o=`
6
12
 
7
- `+o,new Promise(n=>{C.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==r?t.about_user_message+=o:"chatgpt"==r&&(t.about_model_message+=o),await this.sendRequest("POST",e,t),n()})})):console.error(`Invalid target ${r}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")):console.error("Please provide an instruction")},clear:function(o){var e=["user","chatgpt"];return o?"string"!=typeof o?console.error("Target must be a string"):(o=o.toLowerCase(),e.includes(o)?new Promise(n=>{C.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==o?t.about_user_message="":"chatgpt"==o&&(t.about_model_message=""),await this.sendRequest("POST",e,t),n()})}):console.error(`Invalid target ${o}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")},fetchData:function(){return new Promise(t=>{C.getAccessToken().then(async e=>t(await this.sendRequest("GET",e)))})},sendRequest:function(r,e,s){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(r=(r||"").trim().toUpperCase())&&t.includes(r)?e?s&&"object"!=typeof s?console.error(`Invalid body data type. Got ${typeof s}, expected object`):new Promise((t,n)=>{const o=new XMLHttpRequest;o.open(r,h.openAI.instructions,!0),o.setRequestHeader("Accept-Language","en-US"),o.setRequestHeader("Authorization","Bearer "+e),"POST"==r&&o.setRequestHeader("Content-Type","application/json"),o.onload=()=>{var e=JSON.parse(o.responseText);return 422===o.status?n("🤖 chatgpt.js >> Character limit exceeded. Custom instructions can have a maximum length of 1500 characters."):403===o.status&&"content_policy"==e.detail.reason?n("🤖 chatgpt.js >> "+e.detail.description):200!==o.status?n("🤖 chatgpt.js >> Request failed. Cannot contact custom instructions endpoint."):(console.info("Custom instructions successfully contacted with method "+r),t(e||{}))},o.send(JSON.stringify(s)||"")}):console.error("Please provide a valid access token!"):console.error("Valid methods are "+t)},turnOff:function(){return new Promise(n=>{C.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!1,await this.sendRequest("POST",e,t),n()})})},turnOn:function(){return new Promise(n=>{C.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!0,await this.sendRequest("POST",e,t),n()})})},toggle:function(){return new Promise(t=>{this.fetchData().then(async e=>(await(e.enabled?this.turnOff():this.turnOn()),t()))})}},isChromium:function(){return C.browser.isChromium()},isDarkMode:function(){return document.documentElement.classList.toString().includes("dark")},isFirefox:function(){return C.browser.isFirefox()},isFullScreen:function(){return C.browser.isFullScreen()},isIdle:function(){return new Promise(e=>{const t=setInterval(()=>{C.getRegenerateButton()&&(clearInterval(t),e(!0))},100)})},isLoaded:function(){return new Promise(e=>{const t=setInterval(()=>{document.querySelector('nav button[id*="menu"]')&&(clearInterval(t),setTimeout(()=>{e(!0)},500))},100)})},isLightMode:function(){return document.documentElement.classList.toString().includes("light")},isMobileDevice:function(){return C.browser.isMobile()},logout:function(){window.location.href="https://chat.openai.com/auth/logout"},menu:{elements:[],addedEvent:!1,append:function(e,t={}){var n=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!n.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elements are [${n}]`);const o=document.createElement("dropdown"==e?"select":"button"==e?"a":e);if(o.id=Math.floor(1e6*C.randomFloat())+Date.now(),"button"==e){o.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";n=document.createElement("img");n.src=t?.icon&&"string"==typeof t.icon?t.icon:h.assets+"/starters/chrome/extension/icons/icon128.png",n.width=18,o.insertBefore(n,o.firstChild),o.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!");o.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,o.add(t)})}const r=()=>{var e,t=document.querySelectorAll('a[role="menuitem"]');let n;for(e of t)if("Settings"==e.textContent){n=e.classList;break}const o=t[0].parentNode;C.menu.elements.forEach(e=>{if(e.setAttribute("class",n),!o.contains(e))try{o.insertBefore(e,o.firstChild)}catch(e){console.error(e)}})};this.elements.push(o);n=document.querySelector('nav button[id*="headless"]');return this.addedEvent||(n.addEventListener("click",()=>{setTimeout(r,25)}),this.addedEvent=!0),o.id},close:function(){var e=document.querySelector('nav [id*="menu-button"][aria-expanded="true"]');if(!e)throw console.error("Menu already hidden!"),new Error;try{e.click()}catch(e){throw console.error("Error while closing the menu"),new Error(e)}},open:function(){var e=document.querySelector('nav [id*="menu-button"][aria-expanded="false"]');if(!e)throw console.error("Menu already hidden!"),new Error;try{e.click()}catch(e){throw console.error("Error while closing the menu"),new Error(e)}}},minify:function(){C.code.minify()},notify:async function(t,e,n,o){n=n?+n:1.75;const r=document.createElement("div");r.id=Math.floor(1e6*C.randomFloat())+Date.now(),r.classList.add("chatgpt-notif"),r.innerText=t,document.body.append(r);var t=document.createElement("div"),s=(t.title=x?.tooltip_dismiss||"Dismiss",t.classList.add("notif-close-btn"),document.createElementNS("http://www.w3.org/2000/svg","svg")),a=(s.setAttribute("height","8px"),s.setAttribute("viewBox","0 0 14 14"),s.setAttribute("fill","none"),s.style.height=s.style.width="8px",document.createElementNS("http://www.w3.org/2000/svg","path"));a.setAttribute("fill-rule","evenodd"),a.setAttribute("clip-rule","evenodd"),a.setAttribute("fill","white"),a.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"),s.append(a),t.append(s),r.append(t),r.isTop=!e||!/low|bottom/i.test(e),r.isRight=!e||!/left/i.test(e),r.quadrant=(r.isTop?"top":"bottom")+(r.isRight?"Right":"Left");let i=document.querySelector("#chatgpt-notif-style"),c=((!i||parseInt(i.getAttribute("last-updated"),10)<20231110)&&(i||((i=document.createElement("style")).id="chatgpt-notif-style",i.setAttribute("last-updated",20231110..toString()),document.head.append(i)),i.innerText=".chatgpt-notif {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 ;-webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none ; user-select: none ;"+`transform: translateX(${r.isRight?"":"-"}35px) ;`+(o?"box-shadow: -8px 13px 25px 0 "+(/\b(shadow|on)\b/gi.test(o)?"gray":o):"")+"}.notif-close-btn { 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[r.quadrant].push(r.id),localStorage.notifyProps=JSON.stringify(c),r.style.top=r.isTop?23..toString()+"px":"",r.style.bottom=r.isTop?"":23..toString()+"px",r.style.right=r.isRight?27..toString()+"px":"",r.style.left=r.isRight?"":27..toString()+"px";a=c.queue[r.quadrant];if(1<a.length)try{for(const m of a.slice(0,-1)){var l=document.getElementById(m),u=l.style.top?"top":"bottom",d=+/\d+/.exec(l.style[u])[0]+5+l.getBoundingClientRect().height;l.style[u]=d+"px"}}catch(e){}setTimeout(()=>{r.style.opacity=C.isDarkMode()?.8:.67,r.style.transform="translateX(0)",r.style.transition="transform 0.15s ease, opacity 0.15s ease"},10);t=n<.3?0:n-.3;let f,g;if(y){let e;for(;(e=Math.floor(3*Math.random())+1)===c.lastNthAudio;);c.lastNthAudio=e,localStorage.notifyProps=JSON.stringify(c),(f=new Audio).src=h.assets+"/media/audio/notifications/bubble-pop/"+`${e}-${r.isRight?"right":"left"}.mp3`,g=setTimeout(()=>f.play().catch(()=>{}),1e3*t)}e=()=>{r.style.animation="notif-zoom-fade-out 0.3s ease-out",y&&f?.play().catch(()=>{}),clearTimeout(p),clearTimeout(g)};const p=setTimeout(e,1e3*t);s.addEventListener("click",e,{once:!0}),r.addEventListener("animationend",()=>{r.remove(),(c=JSON.parse(localStorage.notifyProps)).queue[r.quadrant].shift(),localStorage.notifyProps=JSON.stringify(c)},{once:!0})},obfuscate:function(){C.code.obfuscate()},printAllFunctions:function(){const t={cmdPrompt:["#ff00ff","#00ff00"],objName:["#0611e9","#f9ee16"],methodName:["#005aff","#ffa500"],entryType:["#467e06","#b981f9"],srcMethod:["#ff0000","#00ffff"]};Object.keys(t).forEach(e=>{t[e][1]=t[e][1]||"#"+(16777215^Number("0x1"+t[e][0].replace(/^#/,""))).toString(16).substring(1).toUpperCase()});var e=[];for(const c in this)if("function"==typeof this[c]){var n=!Object.keys(this).find(e=>Object.keys(this[e]).includes(this[c].name));e.push([n?"chatgpt":"other",c])}else if("object"==typeof this[c])for(const l in this[c])"function"==typeof this[c][l]&&e.push([c,l]);e.sort((e,t)=>e[0].localeCompare(t[0])||e[1].localeCompare(t[1]));var o=window.matchMedia("(prefers-color-scheme: dark)").matches,r="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(const u of e){var s=/chatgpt|other/.test(u[0]),a="chatgpt"==u[0]?this[u[1]].name:"other"!==u[0]?u[0]+"."+u[1]:Object.keys(this).find(e=>Object.keys(this[e]).includes(this[u[1]].name))+"."+this[u[1]].name,i="AsyncFunction"==this[u[1]]?.constructor.name;console.log("%c>> %c"+(s?"":u[0]+".%c")+u[1]+" - https://chatgptjs.org/userguide/"+/(?:.*\.)?(.*)/.exec(a)[1].toLowerCase()+(i?"-async":"")+"\n%c[%c"+("chatgpt"==u[0]&&u[1]==this[u[1]].name||!s?"Function":"Alias of")+"%c: %c"+a+"%c]",r+"font-weight: bold ; color:"+t.cmdPrompt[+o],r+"font-weight: bold ;color:"+t[s?"methodName":"objName"][+o],r+"font-weight: "+(s?"initial":"bold")+";color:"+(s?"initial":t.methodName[+o]),r+"font-weight: "+(s?"bold":"initial")+";color:"+(s?t.entryType[+o]:"initial"),r+"font-weight: "+(s?"initial":"bold")+";color:"+(s?"initial":t.entryType[+o]),r+(s?"font-style: italic":"font-weight: initial")+";color:"+(s?t.srcMethod[+o]:"initial"),r+(s?"font-weight: initial":"font-style: italic")+";color:"+(s?"initial":t.srcMethod[+o]),s?"":r+"color: initial ; font-weight: initial")}},randomFloat:function(){return(window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/4294967295},refactor:function(){C.code.refactor()},regenerate:function(){for(const e of document.querySelectorAll("form button"))if(e.textContent.toLowerCase().includes("regenerate"))return void e.click()},renderHTML:function(e){var t=/<([a-z\d]+)\b([^>]*)>([\s\S]*?)<\/\1>/g,n=/(\S+)=['"]?((?:.(?!['"]?\s+\S+=|[>']))+.)['"]?/g,o=e.childNodes;this.renderHTML.preWrapSet||(e.style.whiteSpace="pre-wrap",this.renderHTML.preWrapSet=!0,setTimeout(()=>{this.renderHTML.preWrapSet=!1},100));for(const i of o)if(i.nodeType==Node.TEXT_NODE){var r=i.nodeValue,s=Array.from(r.matchAll(t));if(0<s.length){const c=s[0],[l,u,d,f]=c.slice(0,4),g=document.createElement(u);g.textContent=f;Array.from(d.matchAll(n)).forEach(e=>{var t=e[1],e=e[2].replace(/['"]/g,"");g.setAttribute(t,e)});var s=this.renderHTML(g),a=document.createTextNode(r.substring(0,c.index)),r=document.createTextNode(r.substring(c.index+l.length));e.replaceChild(a,i),e.insertBefore(s,a.nextSibling),e.insertBefore(r,s.nextSibling)}}else i.nodeType==Node.ELEMENT_NODE&&this.renderHTML(i);return e},resend:async function(){C.send(await C.getChatData("latest","msg","user","latest"))},response:{get:function(){return(window.location.href.startsWith("https://chat.openai.com/c/")?this.getFromDOM:this.getFromAPI).apply(null,arguments)},getFromAPI:function(e,t){return e=e||"latest",t=t||"latest",C.getChatData(e,"msg","chatgpt",t)},getFromDOM:function(e){var t=document.querySelectorAll('div[data-testid*="conversation-turn"]:nth-child(odd)'),n=e.toString().toLowerCase();let o="";return o=t.length?(o=(/last|final/.test(n)?t[t.length-1]:t[(Number.isInteger(e)?e:/^\d+/.test(n)?/^\d+/.exec(n)[0]:(/^(?:1|one|fir)(?:st)?$/.test(n)?1:/^(?:2|tw(?:o|en|el(?:ve|f))|seco)(?:nd|t[yi])?(?:e?th)?$/.test(n)?2:/^(?:3|th(?:ree|ir?))(?:rd|teen|t[yi])?(?:e?th)?$/.test(n)?3:/^(?:4|fou?r)(?:teen|t[yi])?(?:e?th)?$/.test(n)?4:/^(?:5|fi(?:ve|f))(?:teen|t[yi])?(?:e?th)?$/.test(n)?5:/^(?:6|six)(?:teen|t[yi])?(?:e?th)?$/.test(n)?6:/^(?:7|seven)(?:teen|t[yi])?(?:e?th)?$/.test(n)?7:/^(?:8|eight?)(?:teen|t[yi])?(?:e?th)?$/.test(n)?8:/^(?:9|nine?)(?:teen|t[yi])?(?:e?th)?$/.test(n)?9:/^(?:10|ten)(?:th)?$/.test(n)?10:1)*(/(ty|ieth)$/.test(n)?10:1)+(/teen(th)?$/.test(n)?10:0))-1]).textContent).replace(/^ChatGPTChatGPT/,""):o},getLast:function(){return C.getChatData("active","msg","chatgpt","latest")},regenerate:function(){for(const e of document.querySelectorAll("form button"))if(e.textContent.toLowerCase().includes("regenerate"))return void e.click()},stopGenerating:function(){for(const e of document.querySelectorAll("form button svg"))if(e.querySelector('path[d*="2 0 0 1 2"]'))return void e.parentNode.click()}},reviewCode:function(){C.code.review()},scrollToBottom:function(){try{document.querySelector('button[class*="cursor"][class*="bottom"]').click()}catch(e){console.error("",e)}},send:function(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!`);const n=document.querySelector("form textarea"),o=document.querySelector('form button[class*="bottom"]'),r=(n.value=e,n.dispatchEvent(new Event("input",{bubbles:!0})),setInterval(()=>{o?.hasAttribute("disabled")||("click"==t.toLowerCase()||C.browser.isMobile()?o.click():n.dispatchEvent(new KeyboardEvent("keydown",{keyCode:13,bubbles:!0})),clearInterval(r))},25))},sendInNewChat:function(e){if("string"!=typeof e)return console.error("Message must be a string!");for(const t of document.querySelectorAll("nav a"))if(/(new|clear) chat/i.test(t.text)){t.click();break}setTimeout(()=>{C.send(e)},500)},settings:{scheme:{isDark:function(){return document.documentElement.classList.contains("dark")},isLight:function(){return document.documentElement.classList.contains("light")},set:function(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 n=e;"system"==e&&(n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),localStorage.setItem("theme",e),console.info(`Scheme set to ${e.toUpperCase()}.`),document.documentElement.classList.contains(n)||this.toggle()},toggle:function(){var[e,t]=this.isDark()?["dark","light"]:["light","dark"];document.documentElement.classList.replace(e,t),document.documentElement.style.colorScheme=t,localStorage.setItem("theme",t)}}},sentiment:async function(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 C.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 C.isIdle(),C.getChatData("active","msg","chatgpt","latest")},setScheme:function(e){C.settings.scheme.set(e)},shareChat:function(a,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(n=>{C.getAccessToken().then(t=>{var r;r=t,new Promise((t,n)=>{const o=new XMLHttpRequest;C.getChatData(a).then(e=>{o.open("GET",h.openAI.chat+"/"+e.id,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Authorization","Bearer "+r),o.onload=()=>200!==o.status?n("🤖 chatgpt.js >> Request failed. Cannot retrieve chat node."):t(JSON.parse(o.responseText).current_node),o.send()})}).then(e=>{var r,s;r=t,s=e,new Promise((t,n)=>{const o=new XMLHttpRequest;C.getChatData(a).then(e=>{o.open("POST",h.openAI.share_create,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Authorization","Bearer "+r),o.onload=()=>200!==o.status?n("🤖 chatgpt.js >> Request failed. Cannot initialize share chat."):t(JSON.parse(o.responseText)),o.send(JSON.stringify({current_node_id:s,conversation_id:e.id,is_anonymous:!0}))})}).then(e=>{var o,r;o=t,r=e,new Promise((e,t)=>{const n=new XMLHttpRequest;n.open("PATCH",h.openAI.share+"/"+r.share_id,!0),n.setRequestHeader("Content-Type","application/json"),n.setRequestHeader("Authorization","Bearer "+o),n.onload=()=>200!==n.status?t("🤖 chatgpt.js >> Request failed. Cannot share chat."):(console.info(`Chat shared at '${r.share_url}'`),e()),n.send(JSON.stringify({share_id:r.share_id,highlighted_message_id:r.highlighted_message_id,title:r.title,is_public:!0,is_visible:r.is_visible,is_anonymous:r.is_anonymous}))}).then(()=>{["copy","clipboard"].includes(i)?navigator.clipboard.writeText(e.share_url):C.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)}]),n(e.share_url)})})})})})},sidebar:{elements:[],observer:{},activateObserver:function(){var e,t=document.querySelector("nav").querySelector("a");if(C.history.isOff())try{t.parentNode.nextElementSibling.style.display="none"}catch(e){}if(this.observer instanceof MutationObserver)try{this.observer.disconnect()}catch(e){}if(!this.elements.length)return console.error("🤖 chatgpt.js >> No elements to append!");let n;for(e of document.querySelectorAll("nav a"))if(/.*chat/.exec(e.text)[0]){n=e.classList,e.parentNode.style.margin="2px 0";break}this.elements.forEach(e=>{e.setAttribute("class",n),e.style.maxHeight=e.style.minHeight="44px",e.style.margin="2px 0"});const o=document.querySelector("nav");this.observer=new MutationObserver(e=>{e.forEach(e=>{("childList"==e.type&&e.addedNodes.length||"attributes"==e.type&&"data-chatgptjs"==e.attributeName)&&this.elements.forEach(e=>{if(!o.contains(e))try{o.insertBefore(e,o.querySelector("a").parentNode)}catch(e){console.error(e)}})})}),this.observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0})},append:function(e,t={}){var n=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!n.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elements are [${n}]`);const o=document.createElement("dropdown"==e?"select":e);if(o.id=Math.floor(1e6*C.randomFloat())+Date.now(),"button"==e){o.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";n=document.createElement("img");n.src=t?.icon&&"string"==typeof t.icon?t.icon:h.assets+"/starters/chrome/extension/icons/icon128.png",n.width=18,o.insertBefore(n,o.firstChild),o.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,o.add(t)})}return"dropdown"==e&&(o.style.backgroundColor="var(--gray-900, rgb(32, 33, 35))"),this.elements.push(o),this.activateObserver(),document.body.setAttribute("data-chatgptjs","observer-trigger"),o.id},hide:function(){this.isOn()?this.toggle():console.info("Sidebar already hidden!")},show:function(){this.isOff()?this.toggle():console.info("Sidebar already shown!")},isOff:function(){return!this.isOn()},isOn:function(){return C.browser.isMobile()?"hidden"==document.documentElement.style.overflow:"hidden"!=document.querySelector("#__next > div > div").style.visibility},toggle:function(){var e=C.browser.isMobile(),t=e?()=>!0:e=>Array.from(e.querySelectorAll("*")).some(e=>e.style.transform.includes("translateY"));for(const n of document.querySelectorAll(e?"#__next button":"main button"))if(t(n))return void n.click()}},startNewChat:function(){for(const e of document.querySelectorAll("nav a"))if(/(new|clear) chat/i.test(e.text))return void e.click()},stop:function(){this.response.stopGenerating()},suggest:async function(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 C.send("Suggest some names. "+(t||"")),console.info(`Creating ${e}...`),await C.isIdle(),C.getChatData("active","msg","chatgpt","latest")},speak:function(e,t={}){var n,{voice:o=2,pitch:r=2,speed:s=1.1}=t;if("string"!=typeof e)return console.error("Message must be a string!");for(n in t){var a=t[n];if("number"!=typeof a&&!/^\d+$/.test(a))return console.error(`Invalid ${n} index '${a}'. Must be a number!`)}try{var i=speechSynthesis.getVoices(),c=new SpeechSynthesisUtterance;c.text=e,c.voice=i[o],c.pitch=r,c.rate=s,speechSynthesis.speak(c)}catch(e){console.error(e)}},summarize:async function(e){return e?"string"!=typeof e?console.error("Text argument must be a string!"):(C.send("Summarize the following text:\n\n"+e),console.info("Summarizing text..."),await C.isIdle(),C.getChatData("active","msg","chatgpt","latest")):console.error("Text (1st) argument not supplied. Pass some text!")},toggleScheme:function(){C.settings.scheme.toggle()},translate:async function(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 C.send("Translate the following text to "+t+". Only reply with the translation.\n\n"+e),console.info("Translating text..."),await C.isIdle(),C.getChatData("active","msg","chatgpt","latest")},unminify:function(){C.code.unminify()},uuidv4:function(){let n=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=(n+window.crypto.getRandomValues(new Uint32Array(1))[0]/(Math.pow(2,32)-1)*16)%16|0;return n=Math.floor(n/16),("x"==e?t:3&t|8).toString(16)})},writeCode:function(){C.code.write()}},n=(C.scheme={...C.settings.scheme},["click","get"]),a=["button","link","div","response"];for(const d of n)C[d+"Button"]=function(n){var e=/^[.#]/.test(n)?document.querySelector(n):/send/i.test(n)?document.querySelector('form button[class*="bottom"]'):/scroll/i.test(n)?document.querySelector('button[class*="cursor"]'):function(){for(const e of document.querySelectorAll("button"))if(e.textContent.toLowerCase().includes(n.toLowerCase()))return e;for(const t of document.querySelectorAll("nav a"))if(t.textContent.toLowerCase().includes(n.toLowerCase()))return t}();if("click"!=d)return e;e.click()};const o=[["actAs","actas","act","become","persona","premadePrompt","preMadePrompt","prePrompt","preprompt","roleplay","rolePlay","rp"],["activateAutoRefresh","activateAutoRefresher","activateRefresher","activateSessionRefresher","autoRefresh","autoRefresher","autoRefreshSession","refresher","sessionRefresher"],["deactivateAutoRefresh","deactivateAutoRefresher","deactivateRefresher","deactivateSessionRefresher"],["detectLanguage","getLanguage"],["executeCode","codeExecute"],["exportChat","chatExport","export"],["getLastPrompt","getLastQuery","getMyLastMsg","getMyLastQuery"],["getTextarea","getTextArea","getChatbox","getChatBox"],["isFullScreen","isFullscreen"],["logOut","logout","logOff","logoff","signOut","signout","signOff","signoff"],["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","sendMsg"],["sendInNewChat","sendNewChat"],["sentiment","analyzeSentiment","sentimentAnalysis"],["stop","stopGenerating"],["suggest","suggestion","recommend"],["toggleAutoRefresh","toggleAutoRefresher","toggleRefresher","toggleSessionRefresher"],["toggleScheme","toggleMode"],["translate","translation","translator"],["unminify","unminifyCode","codeUnminify"],["writeCode","codeWrite"]],r=[["account","acct"],["activate","turnOn"],["analyze","check","evaluate","review"],["ask","send","submit"],["chat","conversation","convo"],["data","details"],["deactivate","deActivate","turnOff"],["execute","interpret","interpreter","run"],["generating","generation"],["minify","uglify"],["refactor","rewrite"],["regenerate","regen"],["render","parse"],["reply","response"],["sentiment","attitude","emotion","feeling","opinion","perception"],["speak","say","speech","talk","tts"],["summarize","tldr"],["unminify","beautify","prettify","prettyPrint"]],s=e=>e.map((e,t)=>0===t||"s"==e?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");for(const f in C){for(const g of o)if(g.includes(f))if(g.some(e=>e.includes("."))){const p=g.find(e=>e.includes(".")).split(".")[1];for(const m of g)/^(\w+)/.exec(m)[1]!==f&&(C[m]=C[f][p])}else for(const v of g)v!==f&&(C[v]=C[f]);do{var i=!1;for(const b in C)if("function"==typeof C[b]){const w=b.split(/(?=[A-Zs])/);for(const S of w){const k=[].concat(...r.filter(e=>e.includes(S.toLowerCase())).map(e=>e.filter(e=>e!==S.toLowerCase())));for(const A of k){const T=s(w.map(e=>e==S?A:e));C[T]||(C[T]=C[b],i=!0)}}}}while(i)}const c="🤖 chatgpt.js >> ",l=console.error,u=console.info;console.error=(...e)=>{e[0].startsWith(c)?l(...e):l(c+e[0],...e.slice(1))},console.info=e=>{e.startsWith(c)?u(e):u(c+e)};try{window.chatgpt=C}catch(e){}try{module.exports=C}catch(e){}
13
+ `+o,new Promise(n=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==r?t.about_user_message+=o:"chatgpt"==r&&(t.about_model_message+=o),await this.sendRequest("POST",e,t),n()})})):console.error(`Invalid target ${r}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")):console.error("Please provide an instruction")},clear:function(o){var e=["user","chatgpt"];return o?"string"!=typeof o?console.error("Target must be a string"):(o=o.toLowerCase(),e.includes(o)?new Promise(n=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return"user"==o?t.about_user_message="":"chatgpt"==o&&(t.about_model_message=""),await this.sendRequest("POST",e,t),n()})}):console.error(`Invalid target ${o}. Valid targets are [${e}]`)):console.error("Please provide a valid target!")},fetchData:function(){return new Promise(t=>{chatgpt.getAccessToken().then(async e=>t(await this.sendRequest("GET",e)))})},sendRequest:function(r,e,a){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(r=(r||"").trim().toUpperCase())&&t.includes(r)?e?a&&"object"!=typeof a?console.error(`Invalid body data type. Got ${typeof a}, expected object`):new Promise((t,n)=>{const o=new XMLHttpRequest;o.open(r,endpoints.openAI.instructions,!0),o.setRequestHeader("Accept-Language","en-US"),o.setRequestHeader("Authorization","Bearer "+e),"POST"==r&&o.setRequestHeader("Content-Type","application/json"),o.onload=()=>{var e=JSON.parse(o.responseText);return 422===o.status?n("🤖 chatgpt.js >> Character limit exceeded. Custom instructions can have a maximum length of 1500 characters."):403===o.status&&"content_policy"==e.detail.reason?n("🤖 chatgpt.js >> "+e.detail.description):200!==o.status?n("🤖 chatgpt.js >> Request failed. Cannot contact custom instructions endpoint."):(console.info("Custom instructions successfully contacted with method "+r),t(e||{}))},o.send(JSON.stringify(a)||"")}):console.error("Please provide a valid access token!"):console.error("Valid methods are "+t)},turnOff:function(){return new Promise(n=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!1,await this.sendRequest("POST",e,t),n()})})},turnOn:function(){return new Promise(n=>{chatgpt.getAccessToken().then(async e=>{var t=await this.fetchData();return t.enabled=!0,await this.sendRequest("POST",e,t),n()})})},toggle:function(){return new Promise(t=>{this.fetchData().then(async e=>(await(e.enabled?this.turnOff():this.turnOn()),t()))})}},isChromium:function(){return chatgpt.browser.isChromium()},isDarkMode:function(){return document.documentElement.classList.toString().includes("dark")},isFirefox:function(){return chatgpt.browser.isFirefox()},isFullScreen:function(){return chatgpt.browser.isFullScreen()},isIdle:function(){return new Promise(e=>{const t=setInterval(()=>{chatgpt.getRegenerateButton()&&(clearInterval(t),e(!0))},100)})},isLoaded:function(){return new Promise(e=>{const t=setInterval(()=>{document.querySelector('nav button[id*="menu"]')&&(clearInterval(t),setTimeout(()=>{e(!0)},500))},100)})},isLightMode:function(){return document.documentElement.classList.toString().includes("light")},isMobileDevice:function(){return chatgpt.browser.isMobile()},logout:function(){window.location.href="https://chat.openai.com/auth/logout"},menu:{elements:[],addedEvent:!1,append:function(e,t={}){var n=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!n.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elements are [${n}]`);const o=document.createElement("dropdown"==e?"select":"button"==e?"a":e);if(o.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),"button"==e){o.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";n=document.createElement("img");n.src=t?.icon&&"string"==typeof t.icon?t.icon:endpoints.assets+"/starters/chrome/extension/icons/icon128.png",n.width=18,o.insertBefore(n,o.firstChild),o.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!");o.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,o.add(t)})}const r=()=>{var e,t=document.querySelectorAll('a[role="menuitem"]');let n;for(e of t)if("Settings"==e.textContent){n=e.classList;break}const o=t[0].parentNode;chatgpt.menu.elements.forEach(e=>{if(e.setAttribute("class",n),!o.contains(e))try{o.insertBefore(e,o.firstChild)}catch(e){console.error(e)}})};this.elements.push(o);n=document.querySelector('nav button[id*="headless"]');return this.addedEvent||(n.addEventListener("click",()=>{setTimeout(r,25)}),this.addedEvent=!0),o.id},close:function(){var e=document.querySelector('nav [id*="menu-button"][aria-expanded="true"]');if(!e)throw console.error("Menu already hidden!"),new Error;try{e.click()}catch(e){throw console.error("Error while closing the menu"),new Error(e)}},open:function(){var e=document.querySelector('nav [id*="menu-button"][aria-expanded="false"]');if(!e)throw console.error("Menu already hidden!"),new Error;try{e.click()}catch(e){throw console.error("Error while closing the menu"),new Error(e)}}},minify:function(){chatgpt.code.minify()},notify:async function(t,e,n,o){n=n?+n:1.75;const r=document.createElement("div");r.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),r.classList.add("chatgpt-notif"),r.innerText=t,document.body.append(r);var t=document.createElement("div"),a=(t.title="Dismiss",t.classList.add("notif-close-btn"),document.createElementNS("http://www.w3.org/2000/svg","svg")),s=(a.setAttribute("height","8px"),a.setAttribute("viewBox","0 0 14 14"),a.setAttribute("fill","none"),a.style.height=a.style.width="8px",document.createElementNS("http://www.w3.org/2000/svg","path"));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"),a.append(s),t.append(a),r.append(t),r.isTop=!e||!/low|bottom/i.test(e),r.isRight=!e||!/left/i.test(e),r.quadrant=(r.isTop?"top":"bottom")+(r.isRight?"Right":"Left");let i=document.querySelector("#chatgpt-notif-style"),c=((!i||parseInt(i.getAttribute("last-updated"),10)<20231110)&&(i||((i=document.createElement("style")).id="chatgpt-notif-style",i.setAttribute("last-updated",20231110..toString()),document.head.append(i)),i.innerText=".chatgpt-notif {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 ;-webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none ; user-select: none ;"+`transform: translateX(${r.isRight?"":"-"}35px) ;`+(o?"box-shadow: -8px 13px 25px 0 "+(/\b(shadow|on)\b/gi.test(o)?"gray":o):"")+"}.notif-close-btn { 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[r.quadrant].push(r.id),localStorage.notifyProps=JSON.stringify(c),r.style.top=r.isTop?23..toString()+"px":"",r.style.bottom=r.isTop?"":23..toString()+"px",r.style.right=r.isRight?27..toString()+"px":"",r.style.left=r.isRight?"":27..toString()+"px";s=c.queue[r.quadrant];if(1<s.length)try{for(const f of s.slice(0,-1)){var l=document.getElementById(f),u=l.style.top?"top":"bottom",d=+/\d+/.exec(l.style[u])[0]+5+l.getBoundingClientRect().height;l.style[u]=d+"px"}}catch(e){}setTimeout(()=>{r.style.opacity=chatgpt.isDarkMode()?.8:.67,r.style.transform="translateX(0)",r.style.transition="transform 0.15s ease, opacity 0.15s ease"},10);t=n<.3?0:n-.3;let p,g;if(isFFtmScript){let e;for(;(e=Math.floor(3*Math.random())+1)===c.lastNthAudio;);c.lastNthAudio=e,localStorage.notifyProps=JSON.stringify(c),(p=new Audio).src=endpoints.assets+"/media/audio/notifications/bubble-pop/"+`${e}-${r.isRight?"right":"left"}.mp3`,g=setTimeout(()=>p.play().catch(()=>{}),1e3*t)}e=()=>{r.style.animation="notif-zoom-fade-out 0.3s ease-out",isFFtmScript&&p?.play().catch(()=>{}),clearTimeout(h),clearTimeout(g)};const h=setTimeout(e,1e3*t);a.addEventListener("click",e,{once:!0}),r.addEventListener("animationend",()=>{r.remove(),(c=JSON.parse(localStorage.notifyProps)).queue[r.quadrant].shift(),localStorage.notifyProps=JSON.stringify(c)},{once:!0})},obfuscate:function(){chatgpt.code.obfuscate()},printAllFunctions:function(){const t={cmdPrompt:["#ff00ff","#00ff00"],objName:["#0611e9","#f9ee16"],methodName:["#005aff","#ffa500"],entryType:["#467e06","#b981f9"],srcMethod:["#ff0000","#00ffff"]};Object.keys(t).forEach(e=>{t[e][1]=t[e][1]||"#"+(16777215^Number("0x1"+t[e][0].replace(/^#/,""))).toString(16).substring(1).toUpperCase()});var e=[];for(const c in this)if("function"==typeof this[c]){var n=!Object.keys(this).find(e=>Object.keys(this[e]).includes(this[c].name));e.push([n?"chatgpt":"other",c])}else if("object"==typeof this[c])for(const l in this[c])"function"==typeof this[c][l]&&e.push([c,l]);e.sort((e,t)=>e[0].localeCompare(t[0])||e[1].localeCompare(t[1]));var o=window.matchMedia("(prefers-color-scheme: dark)").matches,r="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(const u of e){var a=/chatgpt|other/.test(u[0]),s="chatgpt"==u[0]?this[u[1]].name:"other"!==u[0]?u[0]+"."+u[1]:Object.keys(this).find(e=>Object.keys(this[e]).includes(this[u[1]].name))+"."+this[u[1]].name,i="AsyncFunction"==this[u[1]]?.constructor.name;console.log("%c>> %c"+(a?"":u[0]+".%c")+u[1]+" - https://chatgptjs.org/userguide/"+/(?:.*\.)?(.*)/.exec(s)[1].toLowerCase()+(i?"-async":"")+"\n%c[%c"+("chatgpt"==u[0]&&u[1]==this[u[1]].name||!a?"Function":"Alias of")+"%c: %c"+s+"%c]",r+"font-weight: bold ; color:"+t.cmdPrompt[+o],r+"font-weight: bold ;color:"+t[a?"methodName":"objName"][+o],r+"font-weight: "+(a?"initial":"bold")+";color:"+(a?"initial":t.methodName[+o]),r+"font-weight: "+(a?"bold":"initial")+";color:"+(a?t.entryType[+o]:"initial"),r+"font-weight: "+(a?"initial":"bold")+";color:"+(a?"initial":t.entryType[+o]),r+(a?"font-style: italic":"font-weight: initial")+";color:"+(a?t.srcMethod[+o]:"initial"),r+(a?"font-weight: initial":"font-style: italic")+";color:"+(a?"initial":t.srcMethod[+o]),a?"":r+"color: initial ; font-weight: initial")}},randomFloat:function(){return(window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/4294967295},refactor:function(){chatgpt.code.refactor()},regenerate:function(){for(const e of document.querySelectorAll("form button"))if(e.textContent.toLowerCase().includes("regenerate"))return void e.click()},renderHTML:function(e){var t=/<([a-z\d]+)\b([^>]*)>([\s\S]*?)<\/\1>/g,n=/(\S+)=['"]?((?:.(?!['"]?\s+\S+=|[>']))+.)['"]?/g,o=e.childNodes;this.renderHTML.preWrapSet||(e.style.whiteSpace="pre-wrap",this.renderHTML.preWrapSet=!0,setTimeout(()=>{this.renderHTML.preWrapSet=!1},100));for(const i of o)if(i.nodeType==Node.TEXT_NODE){var r=i.nodeValue,a=Array.from(r.matchAll(t));if(0<a.length){const c=a[0],[l,u,d,p]=c.slice(0,4),g=document.createElement(u);g.textContent=p;Array.from(d.matchAll(n)).forEach(e=>{var t=e[1],e=e[2].replace(/['"]/g,"");g.setAttribute(t,e)});var a=this.renderHTML(g),s=document.createTextNode(r.substring(0,c.index)),r=document.createTextNode(r.substring(c.index+l.length));e.replaceChild(s,i),e.insertBefore(a,s.nextSibling),e.insertBefore(r,a.nextSibling)}}else i.nodeType==Node.ELEMENT_NODE&&this.renderHTML(i);return e},resend:async function(){chatgpt.send(await chatgpt.getChatData("latest","msg","user","latest"))},response:{get:function(){return(window.location.href.startsWith("https://chat.openai.com/c/")?this.getFromDOM:this.getFromAPI).apply(null,arguments)},getFromAPI:function(e,t){return e=e||"latest",t=t||"latest",chatgpt.getChatData(e,"msg","chatgpt",t)},getFromDOM:function(e){var t=document.querySelectorAll('div[data-testid*="conversation-turn"]:nth-child(odd)'),n=e.toString().toLowerCase();let o="";return o=t.length?(o=(/last|final/.test(n)?t[t.length-1]:t[(Number.isInteger(e)?e:/^\d+/.test(n)?/^\d+/.exec(n)[0]:(/^(?:1|one|fir)(?:st)?$/.test(n)?1:/^(?:2|tw(?:o|en|el(?:ve|f))|seco)(?:nd|t[yi])?(?:e?th)?$/.test(n)?2:/^(?:3|th(?:ree|ir?))(?:rd|teen|t[yi])?(?:e?th)?$/.test(n)?3:/^(?:4|fou?r)(?:teen|t[yi])?(?:e?th)?$/.test(n)?4:/^(?:5|fi(?:ve|f))(?:teen|t[yi])?(?:e?th)?$/.test(n)?5:/^(?:6|six)(?:teen|t[yi])?(?:e?th)?$/.test(n)?6:/^(?:7|seven)(?:teen|t[yi])?(?:e?th)?$/.test(n)?7:/^(?:8|eight?)(?:teen|t[yi])?(?:e?th)?$/.test(n)?8:/^(?:9|nine?)(?:teen|t[yi])?(?:e?th)?$/.test(n)?9:/^(?:10|ten)(?:th)?$/.test(n)?10:1)*(/(ty|ieth)$/.test(n)?10:1)+(/teen(th)?$/.test(n)?10:0))-1]).textContent).replace(/^ChatGPTChatGPT/,""):o},getLast:function(){return chatgpt.getChatData("active","msg","chatgpt","latest")},regenerate:function(){for(const e of document.querySelectorAll("form button"))if(e.textContent.toLowerCase().includes("regenerate"))return void e.click()},stopGenerating:function(){for(const e of document.querySelectorAll("form button svg"))if(e.querySelector('path[d*="2 0 0 1 2"]'))return void e.parentNode.click()}},reviewCode:function(){chatgpt.code.review()},scrollToBottom:function(){try{document.querySelector('button[class*="cursor"][class*="bottom"]').click()}catch(e){console.error("",e)}},send:function(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!`);const n=document.querySelector("form textarea"),o=document.querySelector('form button[class*="bottom"]'),r=(n.value=e,n.dispatchEvent(new Event("input",{bubbles:!0})),setInterval(()=>{o?.hasAttribute("disabled")||("click"==t.toLowerCase()||chatgpt.browser.isMobile()?o.click():n.dispatchEvent(new KeyboardEvent("keydown",{keyCode:13,bubbles:!0})),clearInterval(r))},25))},sendInNewChat:function(e){if("string"!=typeof e)return console.error("Message must be a string!");for(const t of document.querySelectorAll("nav a"))if(/(new|clear) chat/i.test(t.text)){t.click();break}setTimeout(()=>{chatgpt.send(e)},500)},settings:{scheme:{isDark:function(){return document.documentElement.classList.contains("dark")},isLight:function(){return document.documentElement.classList.contains("light")},set:function(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 n=e;"system"==e&&(n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),localStorage.setItem("theme",e),console.info(`Scheme set to ${e.toUpperCase()}.`),document.documentElement.classList.contains(n)||this.toggle()},toggle:function(){var[e,t]=this.isDark()?["dark","light"]:["light","dark"];document.documentElement.classList.replace(e,t),document.documentElement.style.colorScheme=t,localStorage.setItem("theme",t)}}},sentiment:async function(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:function(e){chatgpt.settings.scheme.set(e)},shareChat:function(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(n=>{chatgpt.getAccessToken().then(t=>{var r;r=t,new Promise((t,n)=>{const o=new XMLHttpRequest;chatgpt.getChatData(s).then(e=>{o.open("GET",endpoints.openAI.chat+"/"+e.id,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Authorization","Bearer "+r),o.onload=()=>200!==o.status?n("🤖 chatgpt.js >> Request failed. Cannot retrieve chat node."):t(JSON.parse(o.responseText).current_node),o.send()})}).then(e=>{var r,a;r=t,a=e,new Promise((t,n)=>{const o=new XMLHttpRequest;chatgpt.getChatData(s).then(e=>{o.open("POST",endpoints.openAI.share_create,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Authorization","Bearer "+r),o.onload=()=>200!==o.status?n("🤖 chatgpt.js >> Request failed. Cannot initialize share chat."):t(JSON.parse(o.responseText)),o.send(JSON.stringify({current_node_id:a,conversation_id:e.id,is_anonymous:!0}))})}).then(e=>{var o,r;o=t,r=e,new Promise((e,t)=>{const n=new XMLHttpRequest;n.open("PATCH",endpoints.openAI.share+"/"+r.share_id,!0),n.setRequestHeader("Content-Type","application/json"),n.setRequestHeader("Authorization","Bearer "+o),n.onload=()=>200!==n.status?t("🤖 chatgpt.js >> Request failed. Cannot share chat."):(console.info(`Chat shared at '${r.share_url}'`),e()),n.send(JSON.stringify({share_id:r.share_id,highlighted_message_id:r.highlighted_message_id,title:r.title,is_public:!0,is_visible:r.is_visible,is_anonymous:r.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)}]),n(e.share_url)})})})})})},sidebar:{elements:[],observer:{},activateObserver:function(){var e,t=document.querySelector("nav").querySelector("a");if(chatgpt.history.isOff())try{t.parentNode.nextElementSibling.style.display="none"}catch(e){}if(this.observer instanceof MutationObserver)try{this.observer.disconnect()}catch(e){}if(!this.elements.length)return console.error("🤖 chatgpt.js >> No elements to append!");let n;for(e of document.querySelectorAll("nav a"))if(/.*chat/.exec(e.text)[0]){n=e.classList,e.parentNode.style.margin="2px 0";break}this.elements.forEach(e=>{e.setAttribute("class",n),e.style.maxHeight=e.style.minHeight="44px",e.style.margin="2px 0"});const o=document.querySelector("nav");this.observer=new MutationObserver(e=>{e.forEach(e=>{("childList"==e.type&&e.addedNodes.length||"attributes"==e.type&&"data-chatgptjs"==e.attributeName)&&this.elements.forEach(e=>{if(!o.contains(e))try{o.insertBefore(e,o.querySelector("a").parentNode)}catch(e){console.error(e)}})})}),this.observer.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0})},append:function(e,t={}){var n=["button","dropdown"];if(!e||"string"!=typeof e)return console.error("🤖 chatgpt.js >> Please supply a valid string element name!");if(e=e.toLowerCase(),!n.includes(e))return console.error(`🤖 chatgpt.js >> Invalid element! Valid elements are [${n}]`);const o=document.createElement("dropdown"==e?"select":e);if(o.id=Math.floor(1e6*chatgpt.randomFloat())+Date.now(),"button"==e){o.textContent=t?.label&&"string"==typeof t.label?t.label:"chatgpt.js button";n=document.createElement("img");n.src=t?.icon&&"string"==typeof t.icon?t.icon:endpoints.assets+"/starters/chrome/extension/icons/icon128.png",n.width=18,o.insertBefore(n,o.firstChild),o.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,o.add(t)})}return"dropdown"==e&&(o.style.backgroundColor="var(--gray-900, rgb(32, 33, 35))"),this.elements.push(o),this.activateObserver(),document.body.setAttribute("data-chatgptjs","observer-trigger"),o.id},hide:function(){this.isOn()?this.toggle():console.info("Sidebar already hidden!")},show:function(){this.isOff()?this.toggle():console.info("Sidebar already shown!")},isOff:function(){return!this.isOn()},isOn:function(){return chatgpt.browser.isMobile()?"hidden"==document.documentElement.style.overflow:"hidden"!=document.querySelector("#__next > div > div").style.visibility},toggle:function(){var e=chatgpt.browser.isMobile(),t=e?()=>!0:e=>Array.from(e.querySelectorAll("*")).some(e=>e.style.transform.includes("translateY"));for(const n of document.querySelectorAll(e?"#__next button":"main button"))if(t(n))return void n.click()}},startNewChat:function(){for(const e of document.querySelectorAll("nav a"))if(/(new|clear) chat/i.test(e.text))return void e.click()},stop:function(){this.response.stopGenerating()},suggest:async function(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:function(e,t={}){var n,{voice:o=2,pitch:r=2,speed:a=1.1}=t;if("string"!=typeof e)return console.error("Message must be a string!");for(n in t){var s=t[n];if("number"!=typeof s&&!/^\d+$/.test(s))return console.error(`Invalid ${n} index '${s}'. Must be a number!`)}try{var i=speechSynthesis.getVoices(),c=new SpeechSynthesisUtterance;c.text=e,c.voice=i[o],c.pitch=r,c.rate=a,speechSynthesis.speak(c)}catch(e){console.error(e)}},summarize:async function(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:function(){chatgpt.settings.scheme.toggle()},translate:async function(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.\n\n"+e),console.info("Translating text..."),await chatgpt.isIdle(),chatgpt.getChatData("active","msg","chatgpt","latest")},unminify:function(){chatgpt.code.unminify()},uuidv4:function(){let n=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=(n+window.crypto.getRandomValues(new Uint32Array(1))[0]/(Math.pow(2,32)-1)*16)%16|0;return n=Math.floor(n/16),("x"==e?t:3&t|8).toString(16)})},writeCode:function(){chatgpt.code.write()}},buttonActions=(chatgpt.scheme={...chatgpt.settings.scheme},["click","get"]),targetTypes=["button","link","div","response"];for(const Td of buttonActions)chatgpt[Td+"Button"]=function(n){var e=/^[.#]/.test(n)?document.querySelector(n):/send/i.test(n)?document.querySelector('form button[class*="bottom"]'):/scroll/i.test(n)?document.querySelector('button[class*="cursor"]'):function(){for(const e of document.querySelectorAll("button"))if(e.textContent.toLowerCase().includes(n.toLowerCase()))return e;for(const t of document.querySelectorAll("nav a"))if(t.textContent.toLowerCase().includes(n.toLowerCase()))return t}();if("click"!=Td)return e;e.click()};const functionAliases=[["actAs","actas","act","become","persona","premadePrompt","preMadePrompt","prePrompt","preprompt","roleplay","rolePlay","rp"],["activateAutoRefresh","activateAutoRefresher","activateRefresher","activateSessionRefresher","autoRefresh","autoRefresher","autoRefreshSession","refresher","sessionRefresher"],["deactivateAutoRefresh","deactivateAutoRefresher","deactivateRefresher","deactivateSessionRefresher"],["detectLanguage","getLanguage"],["executeCode","codeExecute"],["exportChat","chatExport","export"],["getLastPrompt","getLastQuery","getMyLastMsg","getMyLastQuery"],["getTextarea","getTextArea","getChatbox","getChatBox"],["isFullScreen","isFullscreen"],["logOut","logout","logOff","logoff","signOut","signout","signOff","signoff"],["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","sendMsg"],["sendInNewChat","sendNewChat"],["sentiment","analyzeSentiment","sentimentAnalysis"],["stop","stopGenerating"],["suggest","suggestion","recommend"],["toggleAutoRefresh","toggleAutoRefresher","toggleRefresher","toggleSessionRefresher"],["toggleScheme","toggleMode"],["translate","translation","translator"],["unminify","unminifyCode","codeUnminify"],["writeCode","codeWrite"]],synonyms=[["account","acct"],["activate","turnOn"],["analyze","check","evaluate","review"],["ask","send","submit"],["chat","conversation","convo"],["data","details"],["deactivate","deActivate","turnOff"],["execute","interpret","interpreter","run"],["generating","generation"],["minify","uglify"],["refactor","rewrite"],["regenerate","regen"],["render","parse"],["reply","response"],["sentiment","attitude","emotion","feeling","opinion","perception"],["speak","say","speech","talk","tts"],["summarize","tldr"],["unminify","beautify","prettify","prettyPrint"]],camelCaser=e=>e.map((e,t)=>0===t||"s"==e?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");for(const a3 in chatgpt){for(const b3 of functionAliases)if(b3.includes(a3))if(b3.some(e=>e.includes("."))){const d3=b3.find(e=>e.includes(".")).split(".")[1];for(const f3 of b3)/^(\w+)/.exec(f3)[1]!==a3&&(chatgpt[f3]=chatgpt[a3][d3])}else for(const g3 of b3)g3!==a3&&(chatgpt[g3]=chatgpt[a3]);do{var newFunctionsCreated=!1;for(const h3 in chatgpt)if("function"==typeof chatgpt[h3]){const i3=h3.split(/(?=[A-Zs])/);for(const j3 of i3){const k3=[].concat(...synonyms.filter(e=>e.includes(j3.toLowerCase())).map(e=>e.filter(e=>e!==j3.toLowerCase())));for(const o3 of k3){const p3=camelCaser(i3.map(e=>e==j3?o3:e));chatgpt[p3]||(chatgpt[p3]=chatgpt[h3],newFunctionsCreated=!0)}}}}while(newFunctionsCreated)}const 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){}