diff --git a/legacy/package.json b/legacy/package.json index 9cbfa96d..0a081006 100644 --- a/legacy/package.json +++ b/legacy/package.json @@ -38,9 +38,9 @@ "dependencies": { "eventsource-parser": "^0.0.5", "expiry-map": "^2.0.0", + "node-fetch": "2", "remark": "^14.0.2", "strip-markdown": "^5.0.0", - "undici": "^5.13.0", "uuid": "^9.0.0" }, "devDependencies": { diff --git a/legacy/pnpm-lock.yaml b/legacy/pnpm-lock.yaml index fcfe515d..24fc4dc0 100644 --- a/legacy/pnpm-lock.yaml +++ b/legacy/pnpm-lock.yaml @@ -12,6 +12,7 @@ specifiers: expiry-map: ^2.0.0 husky: ^8.0.2 lint-staged: ^13.0.3 + node-fetch: '2' npm-run-all: ^4.1.5 ora: ^6.1.2 prettier: ^2.8.0 @@ -22,15 +23,14 @@ specifiers: typedoc: ^0.23.21 typedoc-plugin-markdown: ^3.13.6 typescript: ^4.9.3 - undici: ^5.13.0 uuid: ^9.0.0 dependencies: eventsource-parser: 0.0.5 expiry-map: 2.0.0 + node-fetch: 2.6.7 remark: 14.0.2 strip-markdown: 5.0.0 - undici: 5.13.0 uuid: 9.0.0 devDependencies: @@ -712,13 +712,6 @@ packages: load-tsconfig: 0.2.3 dev: true - /busboy/1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: false - /cac/6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2514,6 +2507,18 @@ packages: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} dev: true @@ -3205,11 +3210,6 @@ packages: escape-string-regexp: 2.0.0 dev: true - /streamsearch/1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false - /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -3382,6 +3382,10 @@ packages: is-number: 7.0.0 dev: true + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: @@ -3518,13 +3522,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici/5.13.0: - resolution: {integrity: sha512-UDZKtwb2k7KRsK4SdXWG7ErXiL7yTGgLWvk2AXO1JMjgjh404nFo6tWSCM2xMpJwMPx3J8i/vfqEh1zOqvj82Q==} - engines: {node: '>=12.18'} - dependencies: - busboy: 1.6.0 - dev: false - /unified/10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: @@ -3630,6 +3627,10 @@ packages: defaults: 1.0.4 dev: true + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true @@ -3639,6 +3640,13 @@ packages: engines: {node: '>=6'} dev: true + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: diff --git a/legacy/src/demo.ts b/legacy/src/demo.ts index 7560c9f4..7bae4db4 100644 --- a/legacy/src/demo.ts +++ b/legacy/src/demo.ts @@ -7,6 +7,10 @@ dotenv.config() /** * Example CLI for testing functionality. + * + * ``` + * npx tsx src/demo.ts + * ``` */ async function main() { const api = new ChatGPTAPI({ sessionToken: process.env.SESSION_TOKEN }) diff --git a/legacy/src/fetch-sse.ts b/legacy/src/fetch-sse.ts index 15f2a54d..3a0b585b 100644 --- a/legacy/src/fetch-sse.ts +++ b/legacy/src/fetch-sse.ts @@ -1,7 +1,8 @@ import { createParser } from 'eventsource-parser' import { fetch } from './fetch' -import { streamAsyncIterable } from './stream-async-iterable' + +// import { streamAsyncIterable } from './stream-async-iterable' export async function fetchSSE( url: string, @@ -15,8 +16,16 @@ export async function fetchSSE( } }) - for await (const chunk of streamAsyncIterable(resp.body)) { - const str = new TextDecoder().decode(chunk) - parser.feed(str) - } + resp.body.on('readable', () => { + let chunk: string | Buffer + while (null !== (chunk = resp.body.read())) { + parser.feed(chunk.toString()) + } + }) + + // TODO: add support for web-compatible `fetch` + // for await (const chunk of streamAsyncIterable(resp.body)) { + // const str = new TextDecoder().decode(chunk) + // parser.feed(str) + // } } diff --git a/legacy/src/fetch.ts b/legacy/src/fetch.ts index 63555d68..fe659655 100644 --- a/legacy/src/fetch.ts +++ b/legacy/src/fetch.ts @@ -1,3 +1,3 @@ -import { fetch } from 'undici' +import fetch from 'node-fetch' export { fetch }