@kudoai/chatgpt.js 2.6.4 → 2.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +341 -0
- package/chatgpt.js +6 -4
- package/dist/chatgpt.min.js +7 -0
- package/docs/README.md +341 -324
- package/docs/USERGUIDE.md +1812 -1814
- package/docs/de/README.md +341 -324
- package/docs/es/README.md +341 -324
- package/docs/fr/README.md +341 -324
- package/docs/hi/README.md +342 -325
- package/docs/it/README.md +341 -324
- package/docs/ja/README.md +341 -324
- package/docs/ko/README.md +346 -329
- package/docs/ne/README.md +342 -325
- package/docs/nl/README.md +341 -324
- package/docs/pt/README.md +341 -324
- package/docs/vi/README.md +341 -324
- package/docs/zh-cn/README.md +341 -324
- package/docs/zh-tw/README.md +340 -323
- package/package.json +50 -30
- package/starters/chrome/LICENSE.md +43 -0
- package/starters/chrome/docs/README.md +17 -1
- package/starters/chrome/docs/SECURITY.md +17 -0
- package/starters/chrome/docs/de/LICENSE.md +21 -3
- package/starters/chrome/docs/de/README.md +17 -1
- package/starters/chrome/docs/es/LICENSE.md +21 -3
- package/starters/chrome/docs/es/README.md +17 -1
- package/starters/chrome/docs/fr/LICENSE.md +21 -3
- package/starters/chrome/docs/fr/README.md +17 -1
- package/starters/chrome/docs/hi/LICENSE.md +21 -3
- package/starters/chrome/docs/hi/README.md +17 -2
- package/starters/chrome/docs/hi/SECURITY.md +17 -0
- package/starters/chrome/docs/it/LICENSE.md +21 -3
- package/starters/chrome/docs/it/README.md +17 -1
- package/starters/chrome/docs/ja/LICENSE.md +21 -3
- package/starters/chrome/docs/ja/README.md +17 -2
- package/starters/chrome/docs/ko/LICENSE.md +21 -3
- package/starters/chrome/docs/ko/README.md +17 -1
- package/starters/chrome/docs/nl/LICENSE.md +20 -3
- package/starters/chrome/docs/nl/README.md +17 -1
- package/starters/chrome/docs/pt/LICENSE.md +21 -3
- package/starters/chrome/docs/pt/README.md +17 -1
- package/starters/chrome/docs/vi/LICENSE.md +21 -3
- package/starters/chrome/docs/vi/README.md +17 -1
- package/starters/chrome/docs/zh-cn/LICENSE.md +21 -3
- package/starters/chrome/docs/zh-cn/README.md +17 -2
- package/starters/chrome/docs/zh-cn/SECURITY.md +17 -0
- package/starters/chrome/docs/zh-tw/LICENSE.md +21 -3
- package/starters/chrome/docs/zh-tw/README.md +17 -1
- package/starters/chrome/extension/content.js +1 -1
- package/starters/chrome/extension/lib/chatgpt.js +6 -4
- package/starters/chrome/extension/manifest.json +1 -1
- package/starters/greasemonkey/LICENSE.md +43 -0
- package/starters/greasemonkey/chatgpt.js-greasemonkey-starter.user.js +52 -52
- package/starters/greasemonkey/docs/SECURITY.md +17 -0
- package/starters/greasemonkey/docs/de/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/es/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/fr/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/hi/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/hi/SECURITY.md +17 -0
- package/starters/greasemonkey/docs/it/LICENSE.md +29 -0
- package/starters/greasemonkey/docs/ja/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/ko/LICENSE.md +34 -0
- package/starters/greasemonkey/docs/nl/LICENSE.md +30 -0
- package/starters/greasemonkey/docs/pt/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/vi/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/zh-cn/LICENSE.md +31 -0
- package/starters/greasemonkey/docs/zh-cn/SECURITY.md +17 -0
- package/starters/greasemonkey/docs/zh-tw/LICENSE.md +31 -0
- package/dist/chatgpt-2.6.4.min.js +0 -1
- package/docs/.nojekyll +0 -0
- package/docs/CNAME +0 -1
- package/docs/_coverpage.md +0 -16
- package/docs/_utils/LICENSE.md +0 -21
- package/docs/_utils/minify.js +0 -50
- package/docs/assets/docsify/cursors/futuristic/pointer.cur +0 -0
- package/docs/assets/docsify/favicons/favicon16.png +0 -0
- package/docs/assets/docsify/favicons/favicon320.png +0 -0
- package/docs/assets/docsify/favicons/favicon48.png +0 -0
- package/docs/assets/docsify/favicons/favicon64.png +0 -0
- package/docs/assets/docsify/fonts/eurostile-extended-black/EurostileExtendedBlack.otf +0 -0
- package/docs/assets/docsify/fonts/eurostile-extended-black/EurostileExtendedBlack.ttf +0 -0
- package/docs/assets/docsify/fonts/eurostile-extended-black/EurostileExtendedBlack.woff +0 -0
- package/docs/assets/docsify/fonts/eurostile-extended-black/EurostileExtendedBlack.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/OFL.txt +0 -93
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-Bold.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-BoldItalic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-ExtraLight.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-ExtraLightItalic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-Italic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-Light.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-LightItalic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-Medium.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-MediumItalic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-Regular.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-SemiBold.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-SemiBoldItalic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-Thin.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/otf/IBMPlexMono-ThinItalic.otf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-Bold.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-BoldItalic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-ExtraLight.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-ExtraLightItalic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-Italic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-Light.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-LightItalic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-Medium.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-MediumItalic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-Regular.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-SemiBold.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-SemiBoldItalic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-Thin.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/ttf/IBMPlexMono-ThinItalic.ttf +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-Bold.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-BoldItalic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-ExtraLight.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-ExtraLightItalic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-Italic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-Light.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-LightItalic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-Medium.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-MediumItalic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-Regular.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-SemiBold.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-SemiBoldItalic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-Thin.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff/IBMPlexMono-ThinItalic.woff +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-Bold.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-BoldItalic.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-ExtraLight.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-ExtraLightItalic.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-Italic.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-Light.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-LightItatlic.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-Medium.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-MediumItalic.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-Regular.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-SemiBold.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-SemiBoldItalic.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-Thin.woff2 +0 -0
- package/docs/assets/docsify/fonts/ibm-plex-mono/woff2/IBMPlexMono-ThinItalic.woff2 +0 -0
- package/docs/assets/docsify/fonts/major-mono-display/MajorMonoDisplay-Regular.otf +0 -0
- package/docs/assets/docsify/fonts/major-mono-display/MajorMonoDisplay-Regular.ttf +0 -0
- package/docs/assets/docsify/fonts/major-mono-display/MajorMonoDisplay-Regular.woff +0 -0
- package/docs/assets/docsify/fonts/major-mono-display/MajorMonoDisplay-Regular.woff2 +0 -0
- package/docs/assets/docsify/fonts/major-mono-display/OFL.txt +0 -93
- package/docs/assets/docsify/fonts/polysans-neutral/PolySansNeutral.eot +0 -0
- package/docs/assets/docsify/fonts/polysans-neutral/PolySansNeutral.ttf +0 -0
- package/docs/assets/docsify/fonts/polysans-neutral/PolySansNeutral.woff +0 -0
- package/docs/assets/docsify/fonts/polysans-neutral/PolySansNeutral.woff2 +0 -0
- package/docs/assets/docsify/html/footer.html +0 -23
- package/docs/assets/docsify/js/min/back-to-top-button.min.js +0 -1
- package/docs/assets/docsify/js/min/copy-code-button.min.js +0 -1
- package/docs/assets/docsify/js/min/onload-hacks.min.js +0 -3
- package/docs/assets/docsify/js/min/starry-background.min.js +0 -1
- package/docs/assets/docsify/js/src/back-to-top-button.js +0 -64
- package/docs/assets/docsify/js/src/copy-code-button.js +0 -91
- package/docs/assets/docsify/js/src/onload-hacks.js +0 -613
- package/docs/assets/docsify/js/src/starry-background.js +0 -111
- package/docs/assets/docsify/styles/css/style.min.css +0 -1
- package/docs/assets/docsify/styles/css/style.min.css.map +0 -1
- package/docs/assets/docsify/styles/scss/style.scss +0 -510
- package/docs/assets/separators/aqua.png +0 -0
- package/docs/de/_coverpage.md +0 -12
- package/docs/es/_coverpage.md +0 -12
- package/docs/fr/_coverpage.md +0 -12
- package/docs/hi/_coverpage.md +0 -12
- package/docs/index.html +0 -91
- package/docs/it/_coverpage.md +0 -12
- package/docs/ja/_coverpage.md +0 -12
- package/docs/ko/_coverpage.md +0 -12
- package/docs/ne/_coverpage.md +0 -12
- package/docs/nl/_coverpage.md +0 -12
- package/docs/pt/_coverpage.md +0 -12
- package/docs/vi/_coverpage.md +0 -12
- package/docs/zh-cn/_coverpage.md +0 -12
- package/docs/zh-tw/_coverpage.md +0 -12
- package/starters/chrome/LICENSE +0 -21
- package/starters/greasemonkey/LICENSE +0 -21
package/README.md
ADDED
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
<div id="repo-cover" align="center">
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
<h6>
|
|
5
|
+
<a href="https://github.com/kudoai/chatgpt.js/tree/main/docs">
|
|
6
|
+
<picture>
|
|
7
|
+
<source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/KudoAI/chatgpt.js/main/media/images/icons/earth-americas-white-padded-icon17x15.svg">
|
|
8
|
+
<img src="https://raw.githubusercontent.com/KudoAI/chatgpt.js/main/media/images/icons/earth-americas-padded-icon17x15.svg">
|
|
9
|
+
</picture>
|
|
10
|
+
</a>
|
|
11
|
+
English |
|
|
12
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/zh-cn#readme">简体中文</a> |
|
|
13
|
+
<a href="zh-tw#readme">繁體中文</a> |
|
|
14
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/ja#readme">日本</a> |
|
|
15
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/ko#readme">한국인</a> |
|
|
16
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/hi#readme">हिंदी</a> |
|
|
17
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/np#readme">नेपाली</a> |
|
|
18
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/de#readme">Deutsch</a> |
|
|
19
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/es#readme">Español</a> |
|
|
20
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/fr#readme">Français</a> |
|
|
21
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/it#readme">Italiano</a> |
|
|
22
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/nl#readme">Nederlands</a> |
|
|
23
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/pt#readme">Português</a> |
|
|
24
|
+
<a href="https://github.com/KudoAI/chatgpt.js/tree/main/docs/vi#readme">Việt</a>
|
|
25
|
+
</h6>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<br>
|
|
29
|
+
|
|
30
|
+
<picture>
|
|
31
|
+
<source type="image/png" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/media/images/logos/chatgpt.js/with-reflection/darkmode.png">
|
|
32
|
+
<img width=800 src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/media/images/logos/chatgpt.js/with-reflection/lightmode.png">
|
|
33
|
+
</picture>
|
|
34
|
+
|
|
35
|
+
### 🤖 A powerful client-side JavaScript library for ChatGPT
|
|
36
|
+
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<br>
|
|
40
|
+
|
|
41
|
+
<div id="shields" align="center">
|
|
42
|
+
|
|
43
|
+
[](https://github.com/KudoAI/chatgpt.js/stargazers)
|
|
44
|
+
[](https://github.com/KudoAI/chatgpt.js/blob/main/LICENSE)
|
|
45
|
+
[](https://github.com/kudoai/chatgpt.js/commits/main)
|
|
46
|
+

|
|
47
|
+
[](https://app.codacy.com/gh/KudoAI/chatgpt.js/commits?utm_source=chatgpt%2Ejs&utm_content=github_shield)
|
|
48
|
+
[](https://github.com/sindresorhus/awesome-chatgpt#javascript)
|
|
49
|
+
[](https://www.producthunt.com/posts/chatgpt-js)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
55
|
+
|
|
56
|
+
<div id="intro">
|
|
57
|
+
|
|
58
|
+
## 💡 About
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<span style="color: white">chatgpt.js</span> is a <span style="color: white">powerful</span> JavaScript library that allows for <span style="color: white">super easy</span> interaction w/ the ChatGPT DOM.
|
|
63
|
+
|
|
64
|
+
- Feature-rich
|
|
65
|
+
- Object-oriented
|
|
66
|
+
- Easy-to-use
|
|
67
|
+
- Lightweight (yet optimally performant)
|
|
68
|
+
|
|
69
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
70
|
+
|
|
71
|
+
<div id="importing">
|
|
72
|
+
|
|
73
|
+
## ⚡ Importing the library
|
|
74
|
+
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
> **Note** _To always import the latest version (NOT recommended in production!) replace the versioned jsDelivr URL with: `https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js/chatgpt.min.js`_
|
|
78
|
+
|
|
79
|
+
### ES6:
|
|
80
|
+
|
|
81
|
+
```js
|
|
82
|
+
(async () => {
|
|
83
|
+
await import('https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.4/dist/chatgpt-2.6.4.min.js');
|
|
84
|
+
// Your code here...
|
|
85
|
+
})();
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### ES5:
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
var xhr = new XMLHttpRequest();
|
|
92
|
+
xhr.open('GET', 'https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.4/dist/chatgpt-2.6.4.min.js');
|
|
93
|
+
xhr.onload = function () {
|
|
94
|
+
if (xhr.status === 200) {
|
|
95
|
+
var chatgptJS = document.createElement('script');
|
|
96
|
+
chatgptJS.textContent = xhr.responseText;
|
|
97
|
+
document.head.append(chatgptJS);
|
|
98
|
+
yourCode(); // runs your code
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
xhr.send();
|
|
102
|
+
|
|
103
|
+
function yourCode() {
|
|
104
|
+
// Your code here...
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### <img style="margin: 0 2px -0.065rem 0" height=17 src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/starters/media/images/icons/tampermonkey-icon28.png"></picture><img style="margin: 0 2px -0.035rem 1px" height=17.5 src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/starters/media/images/icons/violentmonkey-icon100.png"> Greasemonkey:
|
|
109
|
+
|
|
110
|
+
> **Note** _To use a starter template: [kudoai/chatgpt.js-greasemonkey-starter](https://github.com/kudoai/chatgpt.js-greasemonkey-starter)_
|
|
111
|
+
|
|
112
|
+
```js
|
|
113
|
+
...
|
|
114
|
+
// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@2.6.4/dist/chatgpt-2.6.4.min.js
|
|
115
|
+
// ==/UserScript==
|
|
116
|
+
|
|
117
|
+
// Your code here...
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### <img style="margin: 0 2px -1px 0" height=16 src="https://www.google.com/chrome/static/images/favicons/apple-icon-60x60.png"> Chrome:
|
|
121
|
+
|
|
122
|
+
> **Note** _To use a starter template: [kudoai/chatgpt.js-chrome-starter](https://github.com/kudoai/chatgpt.js-chrome-starter)_
|
|
123
|
+
|
|
124
|
+
Since Google does not allow remote code, importing chatgpt.js locally is required:
|
|
125
|
+
|
|
126
|
+
1. Save https://raw.githubusercontent.com/kudoai/chatgpt.js/main/chatgpt.js to a subdirectory (`lib` in this example)
|
|
127
|
+
|
|
128
|
+
2. Add ES6 export statement to end of `lib/chatgpt.js`
|
|
129
|
+
```js
|
|
130
|
+
...
|
|
131
|
+
export { chatgpt }
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
3. In project's (V3) `manifest.json`, add `lib/chatgpt.js` as a web accessible resource
|
|
135
|
+
```json
|
|
136
|
+
"web_accessible_resources": [{
|
|
137
|
+
"matches": ["<all_urls>"],
|
|
138
|
+
"resources": ["lib/chatgpt.js"]
|
|
139
|
+
}],
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
4. In scripts that need `chatgpt.js` (foreground/background alike), import it like so:
|
|
143
|
+
```js
|
|
144
|
+
(async () => {
|
|
145
|
+
const { chatgpt } = await import(chrome.runtime.getURL('lib/chatgpt.js'));
|
|
146
|
+
// Your code here...
|
|
147
|
+
})();
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
151
|
+
|
|
152
|
+
<div id="npm">
|
|
153
|
+
|
|
154
|
+
## 💾 Downloading via npm:
|
|
155
|
+
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
To download **chatgpt.js** for local customization, run the following command in your project's root:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npm install @kudoai/chatgpt.js
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
After installation, navigate to `node_modules/@kudoai/chatgpt.js` to find the library source (minified version in `dist/`).
|
|
165
|
+
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
169
|
+
|
|
170
|
+
<div id="usage">
|
|
171
|
+
|
|
172
|
+
## 💻 Usage
|
|
173
|
+
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
**chatgpt.js** was written w/ ultra flexibility in mind.
|
|
177
|
+
|
|
178
|
+
For example:
|
|
179
|
+
|
|
180
|
+
```js
|
|
181
|
+
chatgpt.getLastResponse();
|
|
182
|
+
chatgpt.getLastReply();
|
|
183
|
+
chatgpt.response.getLast();
|
|
184
|
+
chatgpt.get('reply', 'last');
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Each call equally fetches the last response. If you think it works, it probably will... so just type it!
|
|
188
|
+
|
|
189
|
+
If it didn't, check out the extended [userguide](https://github.com/kudoai/chatgpt.js/blob/main/docs/USERGUIDE.md), or simply submit an [issue](https://github.com/kudoai/chatgpt.js/issues) or [PR](https://github.com/kudoai/chatgpt.js/pulls) and it will be integrated, ezpz!
|
|
190
|
+
|
|
191
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
192
|
+
|
|
193
|
+
<div id="showcase">
|
|
194
|
+
|
|
195
|
+
## 🤖 Made with chatgpt.js
|
|
196
|
+
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
https://github.com/KudoAI/chatgpt.js/assets/10906554/f53c740f-d5e0-49b6-ae02-3b3140b0f8a4
|
|
200
|
+
|
|
201
|
+
#
|
|
202
|
+
|
|
203
|
+
### <picture><source media="(prefers-color-scheme: dark)" srcset="https://i.imgur.com/RduASbD.png"><img width=16 src="https://raw.githubusercontent.com/adamlui/chatgpt-addons/main/media/icons/openai-favicon64.png"></picture> [Autoclear ChatGPT History](https://autoclearchatgpt.com) <a href="https://github.com/awesome-scripts/awesome-userscripts#chatgpt" target="_blank" rel="noopener"><img src="https://awesome.re/mentioned-badge.svg" style="margin:0 0 -2px 5px"></a>
|
|
204
|
+
|
|
205
|
+
> Auto-clear your ChatGPT query history for maximum privacy.
|
|
206
|
+
<br>[Install](https://github.com/adamlui/autoclear-chatgpt-history#-installation) /
|
|
207
|
+
[Readme](https://github.com/adamlui/autoclear-chatgpt-history#readme) /
|
|
208
|
+
[Discuss](https://autoclearchatgpt.com/discuss)
|
|
209
|
+
|
|
210
|
+
### <img width=16 src="https://i.imgur.com/1yjmK3W.png"> [Automatic ChatGPT DAN](https://github.com/madkarmaa/automatic-chatgpt-dan)
|
|
211
|
+
|
|
212
|
+
> Automatically send DAN prompts to ChatGPT.
|
|
213
|
+
<br>[Install](https://github.com/madkarmaa/automatic-chatgpt-dan#%EF%B8%8F-installation) /
|
|
214
|
+
[Readme](https://github.com/madkarmaa/automatic-chatgpt-dan#readme) /
|
|
215
|
+
[Discuss](https://github.com/madkarmaa/automatic-chatgpt-dan/issues)
|
|
216
|
+
|
|
217
|
+
### <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>
|
|
218
|
+
|
|
219
|
+
> Display ChatGPT answers in Brave Search sidebar (powered by GPT-4!)
|
|
220
|
+
<br>[Install](https://github.bravegpt.com/#-installation) /
|
|
221
|
+
[Readme](https://github.bravegpt.com/#readme) /
|
|
222
|
+
[Discuss](https://github.bravegpt.com/discussions)
|
|
223
|
+
|
|
224
|
+
### <picture><source media="(prefers-color-scheme: dark)" srcset="https://i.imgur.com/RduASbD.png"><img width=16 src="https://raw.githubusercontent.com/adamlui/chatgpt-userscripts/main/media/icons/openai-favicon64.png"></picture> [ChatGPT Auto-Continue ⏩](https://chatgptautocontinue.com) <a href="https://github.com/awesome-scripts/awesome-userscripts#chatgpt" target="_blank" rel="noopener"><img src="https://awesome.re/mentioned-badge.svg" style="margin:0 0 -3px 3px"></a>
|
|
225
|
+
|
|
226
|
+
> Automatically continue generating multiple ChatGPT responses.
|
|
227
|
+
<br>[Install](https://github.com/adamlui/chatgpt-auto-continue#-installation) /
|
|
228
|
+
[Readme](https://github.com/adamlui/chatgpt-auto-continue#readme) /
|
|
229
|
+
[Discuss](https://chatgptautocontinue.com/discuss)
|
|
230
|
+
|
|
231
|
+
### <picture><source media="(prefers-color-scheme: dark)" srcset="https://i.imgur.com/RduASbD.png"><img width=16 src="https://raw.githubusercontent.com/adamlui/chatgpt-addons/main/media/icons/openai-favicon64.png"></picture> [ChatGPT Auto Refresh ↻](https://chatgptautorefresh.com) <a href="https://github.com/awesome-scripts/awesome-userscripts#chatgpt" target="_blank" rel="noopener"><img src="https://awesome.re/mentioned-badge.svg" style="margin:0 0 -2px 5px"></a>
|
|
232
|
+
|
|
233
|
+
> Keeps ChatGPT sessions fresh to eliminate network errors + Cloudflare checks.
|
|
234
|
+
<br>[Install](https://github.com/adamlui/chatgpt-auto-refresh#-installation) /
|
|
235
|
+
[Readme](https://github.com/adamlui/chatgpt-auto-refresh#readme) /
|
|
236
|
+
[Discuss](https://chatgptautorefresh.com/discuss)
|
|
237
|
+
|
|
238
|
+
### <img src="https://media.ddgpt.com/images/icons/duckduckgpt/icon48.png" width=17> [DuckDuckGPT](https://duckduckgpt.com) <a href="https://www.producthunt.com/posts/duckduckgpt?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-duckduckgpt" target="_blank" rel="noopener"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=379261&theme=light" style="width: 112px; height: 24px; margin:0 0 -4px 5px;" width="112" height="24" /></a>
|
|
239
|
+
|
|
240
|
+
> Display ChatGPT answers in DuckDuckGo sidebar (powered by GPT-4!)
|
|
241
|
+
<br>[Install](https://github.duckduckgpt.com/#-installation) /
|
|
242
|
+
[Readme](https://github.duckduckgpt.com/#readme) /
|
|
243
|
+
[Discuss](https://github.duckduckgpt.com/discussions)
|
|
244
|
+
|
|
245
|
+
### <picture><source media="(prefers-color-scheme: dark)" srcset="https://media.googlegpt.io/images/icons/googlegpt/white/icon32.png"><img width=17 src="https://media.googlegpt.io/images/icons/googlegpt/black/icon32.png"></picture> [GoogleGPT](https://googlegpt.kudoai.com)
|
|
246
|
+
|
|
247
|
+
> Display ChatGPT answers in Google Search sidebar (powered by GPT-4!)
|
|
248
|
+
<br>[Install](https://greasyfork.org/scripts/478597-googlegpt) /
|
|
249
|
+
[Readme](https://github.com/KudoAI/googlegpt#readme) /
|
|
250
|
+
[Discuss](https://github.com/KudoAI/googlegpt/discussions)
|
|
251
|
+
|
|
252
|
+
<p><br>
|
|
253
|
+
|
|
254
|
+
<a href="https://chatgptinfinity.com" target="_blank" rel="noopener">
|
|
255
|
+
<img width=555 src="https://raw.githubusercontent.com/adamlui/chatgpt-infinity/main/chrome/media/images/tiles/marquee-promo-tile-1400x560.png">
|
|
256
|
+
</a>
|
|
257
|
+
|
|
258
|
+
<p><br>
|
|
259
|
+
|
|
260
|
+
<a href="https://chatgptwidescreen.com" target="_blank" rel="noopener">
|
|
261
|
+
<img width=555 src="https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/main/chrome/media/images/tiles/marquee-promo-tile-1400x560.png">
|
|
262
|
+
</a>
|
|
263
|
+
|
|
264
|
+
<p><br>
|
|
265
|
+
|
|
266
|
+
<p id="showcase-cta">
|
|
267
|
+
If you've made something w/ chatgpt.js you want to share, email <a href="mailto:showcase@chatgptjs.org">showcase@chatgptjs.org</a> or just open a <a href="https://github.com/kudoai/chatgpt.js/pulls" target="_blank" rel="noopener">pull request</a>!
|
|
268
|
+
</p>
|
|
269
|
+
|
|
270
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
271
|
+
|
|
272
|
+
<div id="contributors">
|
|
273
|
+
|
|
274
|
+
## 🧠 Contributors
|
|
275
|
+
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
This library exists thanks to code, translations, issues & ideas from the following contributors:
|
|
279
|
+
|
|
280
|
+
<div align="center"><br>
|
|
281
|
+
|
|
282
|
+
[](https://github.com/adamlui)
|
|
283
|
+
[](https://github.com/mefengl)
|
|
284
|
+
[](https://github.com/Zin6969)
|
|
285
|
+
[](https://github.com/madruga8)
|
|
286
|
+
[](https://github.com/XiaoYingYo)
|
|
287
|
+
[](https://github.com/AliAlSarre)
|
|
288
|
+
[](https://github.com/madkarmaa)
|
|
289
|
+
[](https://github.com/wamoyo)
|
|
290
|
+
[](https://github.com/meiraleal)
|
|
291
|
+
[](https://github.com/eltociear)
|
|
292
|
+
[](https://github.com/Rojojun)
|
|
293
|
+
[](https://github.com/iamnishantgaharwar)
|
|
294
|
+
[](https://github.com/hakimel)
|
|
295
|
+
[](https://github.com/omahs)
|
|
296
|
+
[](https://www.linkedin.com/in/najam-ul-arfeen-khan/)
|
|
297
|
+
[](https://github.com/iambijayd)
|
|
298
|
+
[](https://github.com/abhinavm24)
|
|
299
|
+
[](https://github.com/deyvisml)
|
|
300
|
+
[](https://github.com/philly88r)
|
|
301
|
+
[](https://github.com/thomasgauthier)
|
|
302
|
+
[](https://github.com/pranav-bhatt)
|
|
303
|
+
[](https://github.com/Luwa-Tech)
|
|
304
|
+
[](https://github.com/dependabot)
|
|
305
|
+
[](https://chat.openai.com)
|
|
306
|
+
[](https://poe.com)
|
|
307
|
+
[](https://github.com/ImgBotApp)
|
|
308
|
+
|
|
309
|
+
</div><br>
|
|
310
|
+
|
|
311
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
312
|
+
|
|
313
|
+
<div id="partners">
|
|
314
|
+
|
|
315
|
+
## 🤝 Partners
|
|
316
|
+
|
|
317
|
+
</div>
|
|
318
|
+
|
|
319
|
+
**chatgpt.js** is funded in part by:
|
|
320
|
+
|
|
321
|
+
<div id="partners-collage" align="center">
|
|
322
|
+
|
|
323
|
+
<picture>
|
|
324
|
+
<source type="image/png" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/media/images/logos/partners/collage/white.png">
|
|
325
|
+
<img width=888 src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/media/images/logos/partners/collage/black.png">
|
|
326
|
+
</picture>
|
|
327
|
+
|
|
328
|
+
</div>
|
|
329
|
+
|
|
330
|
+
<br>
|
|
331
|
+
|
|
332
|
+
<img height=8px width="100%" src="https://raw.githubusercontent.com/kudoai/chatgpt.js/main/docs/assets/images/aqua-separator.png">
|
|
333
|
+
|
|
334
|
+
<div align="center">
|
|
335
|
+
|
|
336
|
+
**[Releases](https://www.npmjs.com/package/@kudoai/chatgpt.js?activeTab=versions)** /
|
|
337
|
+
[Userguide](https://github.com/kudoai/chatgpt.js/blob/main/docs/USERGUIDE.md) /
|
|
338
|
+
[Discuss](https://github.com/kudoai/chatgpt.js/discussions) /
|
|
339
|
+
<a href="#">Back to top ↑</a>
|
|
340
|
+
|
|
341
|
+
</div>
|
package/chatgpt.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// (c) 2023–2024 KudoAI & contributors under the MIT license
|
|
2
2
|
// Source: https://github.com/kudoai/chatgpt.js
|
|
3
|
-
// Latest minified release: https://
|
|
3
|
+
// Latest minified release: https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js/chatgpt.min.js
|
|
4
4
|
|
|
5
5
|
// Init endpoints
|
|
6
6
|
const endpoints = {
|
|
@@ -935,9 +935,10 @@ const chatgpt = {
|
|
|
935
935
|
|
|
936
936
|
getStopGeneratingButton: function() {
|
|
937
937
|
for (const formButton of document.querySelectorAll('form button')) {
|
|
938
|
-
|
|
938
|
+
const ariaLabel = formButton.getAttribute('aria-label');
|
|
939
|
+
if (ariaLabel && ariaLabel.toLowerCase().includes('stop'))
|
|
939
940
|
return formButton;
|
|
940
|
-
}}
|
|
941
|
+
}},
|
|
941
942
|
|
|
942
943
|
getUserLanguage: function() {
|
|
943
944
|
return navigator.languages[0] || navigator.language || navigator.browserLanguage ||
|
|
@@ -1555,7 +1556,8 @@ const chatgpt = {
|
|
|
1555
1556
|
|
|
1556
1557
|
stopGenerating: function() {
|
|
1557
1558
|
for (const formButton of document.querySelectorAll('form button')) {
|
|
1558
|
-
|
|
1559
|
+
const ariaLabel = formButton.getAttribute('aria-label');
|
|
1560
|
+
if (ariaLabel && ariaLabel.toLowerCase().includes('stop')) {
|
|
1559
1561
|
formButton.click(); return;
|
|
1560
1562
|
}}}
|
|
1561
1563
|
},
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
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"}},isChromeUserScript=(localStorage.alertQueue=JSON.stringify([]),localStorage.notifyProps=JSON.stringify({queue:{topRight:[],bottomRight:[],bottomLeft:[],topLeft:[]},lastNthAudio:0}),navigator.userAgent.includes("Chrome")&&"undefined"!=typeof unsafeWindow),isFFuserScript=navigator.userAgent.includes("Firefox")&&"undefined"!=typeof unsafeWindow,isFFtmScript=isFFuserScript&&"Tampermonkey"==GM_info.scriptHandler;let cjsMessages;isChromeUserScript||isFFuserScript&&!isFFtmScript||(async()=>{var e=new Promise(o=>{const r=navigator.languages[0]||navigator.language||navigator.browserLanguage||navigator.systemLanguage||navigator.userLanguage||"",a=endpoints.assets+"/data/_locales/",e=(r?r.replace("-","_"):"en")+"/";let s=a+e+"messages.json",i=0;!function t(){const n=new XMLHttpRequest;n.open("GET",s),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({}),s=r.includes("-")&&1===i?s.replace(/(.*)_.*(\/.*)/,"$1$2"):a+"en/messages.json",t()}},n.onerror=()=>{o({})}}()});cjsMessages=await e})();const 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 g=document.querySelector("#chatgpt-modal-style");(!g||parseInt(g.getAttribute("last-updated"),10)<d)&&(g||((g=document.createElement("style")).id="chatgpt-modal-style",g.setAttribute("last-updated",d.toString()),document.head.append(g)),g.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 p=document.createElement("div");p.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",()=>{b(),e()}),p.insertBefore(t,p.firstChild)});d=document.createElement("button"),d.textContent=n?"Dismiss":"OK",p.insertBefore(d,p.firstChild),p.lastChild.classList.add("primary-modal-btn"),e=document.createElement("div");if(o){e.classList.add("checkbox-group");const w=o,v=document.createElement("input");v.type="checkbox",v.addEventListener("change",w);t=document.createElement("label");t.addEventListener("click",()=>{v.checked=!v.checked,w()}),t.textContent=w.name.charAt(0).toUpperCase()+w.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=cjsMessages?.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",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,p,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)&&b()},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?b():13===e.keyCode&&(t=t.querySelector(".modal-buttons").lastChild)&&(t.click(),e.preventDefault()))}},y=[i,n,o,d],b=(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(()=>{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!"):(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
|
+
|
|
3
|
+
`)+`CHATGPT: ${u.chatgpt}
|
|
4
|
+
|
|
5
|
+
`}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",p="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],p=p?t.includes(p)?p:"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"==p)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 g=new XMLHttpRequest;r(t,["id"]).then(e=>{g.open("GET",endpoints.openAI.chat+"/"+e.id,!0),g.setRequestHeader("Content-Type","application/json"),g.setRequestHeader("Authorization","Bearer "+t),g.onload=()=>{if(200!==g.status)return d("🤖 chatgpt.js >> Request failed. Cannot retrieve chat messages.");var t=JSON.parse(g.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(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)"message"in t[s]&&"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"==p)for(const i in n)r.push(n[i].msg.content.parts[0]);else if("chatgpt"==p)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])},g.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"))if(e.textContent.toLowerCase().includes("continue"))return e},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[aria-label="Chat history"] 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 t of document.querySelectorAll("form button")){var e=t.getAttribute("aria-label");if(e&&e.toLowerCase().includes("stop"))return t}},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[aria-label="Chat history"] 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[aria-label="Chat history"]')?e(!0):setTimeout(t,100)};t()})},toggle:function(){for(const e of document.querySelectorAll('nav[aria-label="Chat history"] 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=`
|
|
6
|
+
|
|
7
|
+
`+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=cjsMessages?.tooltip_dismiss||"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 g,p;if(isFFtmScript){let e;for(;(e=Math.floor(3*Math.random())+1)===c.lastNthAudio;);c.lastNthAudio=e,localStorage.notifyProps=JSON.stringify(c),(g=new Audio).src=endpoints.assets+"/media/audio/notifications/bubble-pop/"+`${e}-${r.isRight?"right":"left"}.mp3`,p=setTimeout(()=>g.play().catch(()=>{}),1e3*t)}e=()=>{r.style.animation="notif-zoom-fade-out 0.3s ease-out",isFFtmScript&&g?.play().catch(()=>{}),clearTimeout(h),clearTimeout(p)};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,g]=c.slice(0,4),p=document.createElement(u);p.textContent=g;Array.from(d.matchAll(n)).forEach(e=>{var t=e[1],e=e[2].replace(/['"]/g,"");p.setAttribute(t,e)});var a=this.renderHTML(p),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 t of document.querySelectorAll("form button")){var e=t.getAttribute("aria-label");if(e&&e.toLowerCase().includes("stop"))return void t.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[aria-label="Chat history"] 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[aria-label="Chat history"]').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[aria-label="Chat history"] 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[aria-label="Chat history"]');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[aria-label="Chat history"] a'))if(/(new|clear) chat/i.test(e.text))return void e.click()},stop:function(){for(const e of document.querySelectorAll("form button"))if(e.textContent.toLowerCase().includes("stop"))return void e.click()},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 o3 of buttonActions)chatgpt[o3+"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"!=o3)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 x3 in chatgpt){for(const y3 of functionAliases)if(y3.includes(x3))if(y3.some(e=>e.includes("."))){const A3=y3.find(e=>e.includes(".")).split(".")[1];for(const C3 of y3)/^(\w+)/.exec(C3)[1]!==x3&&(chatgpt[C3]=chatgpt[x3][A3])}else for(const D3 of y3)D3!==x3&&(chatgpt[D3]=chatgpt[x3]);do{var newFunctionsCreated=!1;for(const E3 in chatgpt)if("function"==typeof chatgpt[E3]){const F3=E3.split(/(?=[A-Zs])/);for(const G3 of F3){const H3=[].concat(...synonyms.filter(e=>e.includes(G3.toLowerCase())).map(e=>e.filter(e=>e!==G3.toLowerCase())));for(const L3 of H3){const M3=camelCaser(F3.map(e=>e==G3?L3:e));chatgpt[M3]||(chatgpt[M3]=chatgpt[E3],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){}
|