@kamilio/wire 0.1.6 → 0.1.8
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 +31 -1
- package/dist/executable.d.ts.map +1 -1
- package/dist/executable.js +3 -2
- package/dist/executable.js.map +1 -1
- package/node_modules/provider-asana/dist/asana-project.d.ts +6 -0
- package/node_modules/provider-asana/dist/asana-project.d.ts.map +1 -1
- package/node_modules/provider-asana/dist/asana-task.d.ts +6 -0
- package/node_modules/provider-asana/dist/asana-task.d.ts.map +1 -1
- package/node_modules/provider-asana/dist/index.d.ts +12 -0
- package/node_modules/provider-asana/dist/index.d.ts.map +1 -1
- package/node_modules/provider-chatgpt/dist/chatgpt.d.ts +6 -0
- package/node_modules/provider-chatgpt/dist/chatgpt.d.ts.map +1 -1
- package/node_modules/provider-chatgpt/dist/chatgpt.js +24 -47
- package/node_modules/provider-chatgpt/dist/chatgpt.js.map +1 -1
- package/node_modules/provider-chatgpt/dist/client.d.ts +20 -0
- package/node_modules/provider-chatgpt/dist/client.d.ts.map +1 -0
- package/node_modules/provider-chatgpt/dist/client.js +85 -0
- package/node_modules/provider-chatgpt/dist/client.js.map +1 -0
- package/node_modules/provider-chatgpt/dist/cooldown.d.ts +19 -0
- package/node_modules/provider-chatgpt/dist/cooldown.d.ts.map +1 -0
- package/node_modules/provider-chatgpt/dist/cooldown.js +55 -0
- package/node_modules/provider-chatgpt/dist/cooldown.js.map +1 -0
- package/node_modules/provider-chatgpt/dist/download.d.ts +3 -0
- package/node_modules/provider-chatgpt/dist/download.d.ts.map +1 -0
- package/node_modules/provider-chatgpt/dist/download.js +329 -0
- package/node_modules/provider-chatgpt/dist/download.js.map +1 -0
- package/node_modules/provider-chatgpt/dist/index.d.ts +6 -0
- package/node_modules/provider-chatgpt/dist/index.d.ts.map +1 -1
- package/node_modules/provider-chatgpt/src/chatgpt.ts +21 -46
- package/node_modules/provider-chatgpt/src/client.ts +80 -0
- package/node_modules/provider-chatgpt/src/cooldown.ts +64 -0
- package/node_modules/provider-chatgpt/src/download.ts +301 -0
- package/node_modules/provider-gmail/dist/gmail.d.ts +6 -0
- package/node_modules/provider-gmail/dist/gmail.d.ts.map +1 -1
- package/node_modules/provider-gmail/dist/index.d.ts +6 -0
- package/node_modules/provider-gmail/dist/index.d.ts.map +1 -1
- package/node_modules/provider-google-docs/dist/google-docs.d.ts +6 -0
- package/node_modules/provider-google-docs/dist/google-docs.d.ts.map +1 -1
- package/node_modules/provider-google-docs/dist/google-forms.d.ts +6 -0
- package/node_modules/provider-google-docs/dist/google-forms.d.ts.map +1 -1
- package/node_modules/provider-google-docs/dist/index.d.ts +12 -0
- package/node_modules/provider-google-docs/dist/index.d.ts.map +1 -1
- package/node_modules/provider-notion/dist/index.d.ts +6 -0
- package/node_modules/provider-notion/dist/index.d.ts.map +1 -1
- package/node_modules/provider-notion/dist/notion.d.ts +6 -0
- package/node_modules/provider-notion/dist/notion.d.ts.map +1 -1
- package/node_modules/provider-slack/dist/index.d.ts +6 -0
- package/node_modules/provider-slack/dist/index.d.ts.map +1 -1
- package/node_modules/provider-slack/dist/slack.d.ts +6 -0
- package/node_modules/provider-slack/dist/slack.d.ts.map +1 -1
- package/node_modules/provider-zoom/dist/index.d.ts +6 -0
- package/node_modules/provider-zoom/dist/index.d.ts.map +1 -1
- package/node_modules/provider-zoom/dist/zoom-hub.d.ts +6 -0
- package/node_modules/provider-zoom/dist/zoom-hub.d.ts.map +1 -1
- package/node_modules/wire-core/dist/core/model.d.ts +6 -0
- package/node_modules/wire-core/dist/core/model.d.ts.map +1 -1
- package/node_modules/wire-core/dist/index.d.ts +1 -1
- package/node_modules/wire-core/dist/index.d.ts.map +1 -1
- package/node_modules/wire-core/dist/operations.d.ts +1 -0
- package/node_modules/wire-core/dist/operations.d.ts.map +1 -1
- package/node_modules/wire-core/dist/operations.js +38 -13
- package/node_modules/wire-core/dist/operations.js.map +1 -1
- package/node_modules/wire-core/dist/storage/workspace.d.ts.map +1 -1
- package/node_modules/wire-core/dist/storage/workspace.js +5 -0
- package/node_modules/wire-core/dist/storage/workspace.js.map +1 -1
- package/node_modules/wire-core/src/core/model.ts +8 -0
- package/node_modules/wire-core/src/index.ts +1 -1
- package/node_modules/wire-core/src/operations.ts +37 -12
- package/node_modules/wire-core/src/storage/workspace.ts +5 -0
- package/package.json +1 -1
- package/src/executable.ts +3 -2
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ Tracking lives in `~/.wire` by default. Run `wire init` inside a project to trac
|
|
|
37
37
|
| Asana | Tasks | One-way |
|
|
38
38
|
| Slack | Messages and threads | One-way |
|
|
39
39
|
| Gmail | Email threads | One-way |
|
|
40
|
-
| ChatGPT | Conversations | One-way |
|
|
40
|
+
| ChatGPT | Conversations, whole history, projects and files | One-way |
|
|
41
41
|
| Zoom | Docs and meeting transcripts | One-way |
|
|
42
42
|
|
|
43
43
|
Two-way syncs pull remote changes and push local Markdown edits back to the source. One-way syncs only refresh the local file.
|
|
@@ -59,6 +59,36 @@ wire watch <file> # sync a file whenever it changes
|
|
|
59
59
|
|
|
60
60
|
Run `wire --help` for the full CLI.
|
|
61
61
|
|
|
62
|
+
### ChatGPT archives
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
wire chatgpt login
|
|
66
|
+
wire download https://chatgpt.com/
|
|
67
|
+
wire download https://chatgpt.com/g/g-p-6a9702085aa081919400a53261afae49/project
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The root URL exports to `chatgpt/index.md`, with separate account, project, conversation,
|
|
71
|
+
and Library directories. It paginates active, archived, and starred chats and all
|
|
72
|
+
accessible projects, including shared projects. Each conversation includes readable
|
|
73
|
+
Markdown plus the full returned JSON, preserving alternate branches, tool messages,
|
|
74
|
+
citations, and attachment references. Project instructions, source metadata, canvases,
|
|
75
|
+
and downloadable attachments and Library files are saved too. Project URLs export
|
|
76
|
+
only that project's content under `chatgpt/projects/<id>/`, with `export.md` as the index.
|
|
77
|
+
|
|
78
|
+
`manifest.json` records completed resources, file hashes, unavailable accounts, errors,
|
|
79
|
+
and cooldowns. Requests run sequentially. HTTP 429 and transient server failures honor
|
|
80
|
+
`Retry-After` (seconds or HTTP dates, adjusted for server clock skew); without a valid
|
|
81
|
+
header, retries use 1, 2, 4, and 8 second backoffs. The manifest records the precise
|
|
82
|
+
retry deadline and whether it came from the server or fallback policy. After five
|
|
83
|
+
rate-limited attempts the export stops making requests, retains completed files, and
|
|
84
|
+
reports a partial result with the earliest retry time. Run the command again to refresh
|
|
85
|
+
the same ID-based paths; files no longer returned by the server are not deleted.
|
|
86
|
+
|
|
87
|
+
Exports never include session credentials. Deleted chats, expired assets, inaccessible
|
|
88
|
+
workspaces, and the contents of external linked sources cannot be recovered by this
|
|
89
|
+
export; available source metadata and download failures remain in the archive.
|
|
90
|
+
Whole-history and project exports are one-off downloads, not tracked two-way syncs.
|
|
91
|
+
|
|
62
92
|
## MCP
|
|
63
93
|
|
|
64
94
|
`wire-mcp` exposes the same tools to MCP clients over stdio:
|
package/dist/executable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executable.d.ts","sourceRoot":"","sources":["../src/executable.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgZ,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAmD/b,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO;;CAAuB,
|
|
1
|
+
{"version":3,"file":"executable.d.ts","sourceRoot":"","sources":["../src/executable.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgZ,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAmD/b,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO;;CAAuB,yCAqE1H"}
|
package/dist/executable.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
-
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
4
|
import { createRoot } from "./adapters/root.js";
|
|
5
5
|
import { composeAuth } from "./auth.js";
|
|
@@ -88,7 +88,8 @@ export function createExecutableRoot(environment, currentDirectory, options = {
|
|
|
88
88
|
exists: async (path) => existsSync(path),
|
|
89
89
|
isFile: async (path) => existsSync(path) && statSync(path).isFile(),
|
|
90
90
|
readText: runtime.filesystem.readText,
|
|
91
|
-
writeText: (path, contents) => writeFile(path, contents, "utf8"),
|
|
91
|
+
writeText: async (path, contents) => { await mkdir(dirname(path), { recursive: true }); await writeFile(path, contents, "utf8"); },
|
|
92
|
+
writeBytes: async (path, contents) => { await mkdir(dirname(path), { recursive: true }); await writeFile(path, contents); },
|
|
92
93
|
},
|
|
93
94
|
workspace: {
|
|
94
95
|
configuredRoot: configuredWireRoot,
|
package/dist/executable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executable.js","sourceRoot":"","sources":["../src/executable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"executable.js","sourceRoot":"","sources":["../src/executable.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,12 @@ export declare const asanaProjectService: Readonly<{
|
|
|
14
14
|
markdown: string;
|
|
15
15
|
data: JsonValue;
|
|
16
16
|
}>>;
|
|
17
|
+
download?(input: RuntimeCapabilities, url: string, source: Readonly<{
|
|
18
|
+
[key: string]: JsonValue;
|
|
19
|
+
service: string;
|
|
20
|
+
identifier: string;
|
|
21
|
+
type: import("wire-core").ResourceType;
|
|
22
|
+
}>, write: import("wire-core").DownloadWriter): Promise<import("wire-core").DownloadedDocument | null>;
|
|
17
23
|
synchronize?(input: RuntimeCapabilities, url: string, source: Readonly<{
|
|
18
24
|
[key: string]: JsonValue;
|
|
19
25
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asana-project.d.ts","sourceRoot":"","sources":["../src/asana-project.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AA6KrD,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"asana-project.d.ts","sourceRoot":"","sources":["../src/asana-project.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AA6KrD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,CAAC"}
|
|
@@ -14,6 +14,12 @@ export declare const asanaTaskService: Readonly<{
|
|
|
14
14
|
markdown: string;
|
|
15
15
|
data: JsonValue;
|
|
16
16
|
}>>;
|
|
17
|
+
download?(input: RuntimeCapabilities, url: string, source: Readonly<{
|
|
18
|
+
[key: string]: JsonValue;
|
|
19
|
+
service: string;
|
|
20
|
+
identifier: string;
|
|
21
|
+
type: import("wire-core").ResourceType;
|
|
22
|
+
}>, write: import("wire-core").DownloadWriter): Promise<import("wire-core").DownloadedDocument | null>;
|
|
17
23
|
synchronize?(input: RuntimeCapabilities, url: string, source: Readonly<{
|
|
18
24
|
[key: string]: JsonValue;
|
|
19
25
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asana-task.d.ts","sourceRoot":"","sources":["../src/asana-task.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAkErD,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"asana-task.d.ts","sourceRoot":"","sources":["../src/asana-task.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAkErD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB3B,CAAC"}
|
|
@@ -17,6 +17,12 @@ export declare const asanaProvider: Readonly<{
|
|
|
17
17
|
markdown: string;
|
|
18
18
|
data: import("wire-core").JsonValue;
|
|
19
19
|
}>>;
|
|
20
|
+
download?(input: import("wire-core").RuntimeCapabilities, url: string, source: Readonly<{
|
|
21
|
+
[key: string]: import("wire-core").JsonValue;
|
|
22
|
+
service: string;
|
|
23
|
+
identifier: string;
|
|
24
|
+
type: import("wire-core").ResourceType;
|
|
25
|
+
}>, write: import("wire-core").DownloadWriter): Promise<import("wire-core").DownloadedDocument | null>;
|
|
20
26
|
synchronize?(input: import("wire-core").RuntimeCapabilities, url: string, source: Readonly<{
|
|
21
27
|
[key: string]: import("wire-core").JsonValue;
|
|
22
28
|
service: string;
|
|
@@ -42,6 +48,12 @@ export declare const asanaProvider: Readonly<{
|
|
|
42
48
|
markdown: string;
|
|
43
49
|
data: import("wire-core").JsonValue;
|
|
44
50
|
}>>;
|
|
51
|
+
download?(input: import("wire-core").RuntimeCapabilities, url: string, source: Readonly<{
|
|
52
|
+
[key: string]: import("wire-core").JsonValue;
|
|
53
|
+
service: string;
|
|
54
|
+
identifier: string;
|
|
55
|
+
type: import("wire-core").ResourceType;
|
|
56
|
+
}>, write: import("wire-core").DownloadWriter): Promise<import("wire-core").DownloadedDocument | null>;
|
|
45
57
|
synchronize?(input: import("wire-core").RuntimeCapabilities, url: string, source: Readonly<{
|
|
46
58
|
[key: string]: import("wire-core").JsonValue;
|
|
47
59
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtI,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/E,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtI,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAExB,CAAC"}
|
|
@@ -14,6 +14,12 @@ export declare const chatgptService: Readonly<{
|
|
|
14
14
|
markdown: string;
|
|
15
15
|
data: JsonValue;
|
|
16
16
|
}>>;
|
|
17
|
+
download?(input: RuntimeCapabilities, url: string, source: Readonly<{
|
|
18
|
+
[key: string]: JsonValue;
|
|
19
|
+
service: string;
|
|
20
|
+
identifier: string;
|
|
21
|
+
type: import("wire-core").ResourceType;
|
|
22
|
+
}>, write: import("wire-core").DownloadWriter): Promise<import("wire-core").DownloadedDocument | null>;
|
|
17
23
|
synchronize?(input: RuntimeCapabilities, url: string, source: Readonly<{
|
|
18
24
|
[key: string]: JsonValue;
|
|
19
25
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../src/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA+B,SAAS,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../src/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA+B,SAAS,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAoIrD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBzB,CAAC"}
|
|
@@ -1,22 +1,6 @@
|
|
|
1
1
|
import { defineService } from "wire-core";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
function cookieHeader(cookies) {
|
|
6
|
-
return cookies.map((cookie) => `${cookie.name}=${cookie.value}`).join("; ");
|
|
7
|
-
}
|
|
8
|
-
function headers(cookies, referer) {
|
|
9
|
-
return {
|
|
10
|
-
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
|
|
11
|
-
"sec-ch-ua": '"Not:A-Brand";v="99", "Google Chrome";v="145", "Chromium";v="145"',
|
|
12
|
-
"sec-ch-ua-mobile": "?0",
|
|
13
|
-
"sec-ch-ua-platform": '"macOS"',
|
|
14
|
-
"oai-device-id": cookies.find((cookie) => cookie.name === "oai-did").value,
|
|
15
|
-
"oai-language": "en-US",
|
|
16
|
-
referer,
|
|
17
|
-
cookie: cookieHeader(cookies),
|
|
18
|
-
};
|
|
19
|
-
}
|
|
2
|
+
import { connectChatgpt, object } from "./client.js";
|
|
3
|
+
import { downloadChatgpt } from "./download.js";
|
|
20
4
|
function formatUpdateTime(value) {
|
|
21
5
|
if (typeof value === "string")
|
|
22
6
|
return value;
|
|
@@ -26,20 +10,24 @@ function orderedMessages(conversation) {
|
|
|
26
10
|
const mapping = conversation["mapping"];
|
|
27
11
|
if (typeof conversation["current_node"] === "string") {
|
|
28
12
|
const path = [];
|
|
13
|
+
const visited = new Set();
|
|
29
14
|
let nodeId = conversation["current_node"];
|
|
30
15
|
while (nodeId !== null) {
|
|
16
|
+
if (visited.has(nodeId) || mapping[nodeId] === undefined)
|
|
17
|
+
throw new Error("Invalid ChatGPT conversation branch");
|
|
18
|
+
visited.add(nodeId);
|
|
31
19
|
const node = mapping[nodeId];
|
|
32
20
|
const message = node["message"];
|
|
33
|
-
if (message
|
|
21
|
+
if (message != null)
|
|
34
22
|
path.push(message);
|
|
35
|
-
nodeId = node["parent"];
|
|
23
|
+
nodeId = typeof node["parent"] === "string" ? node["parent"] : null;
|
|
36
24
|
}
|
|
37
25
|
return path.reverse();
|
|
38
26
|
}
|
|
39
27
|
const messages = [];
|
|
40
28
|
for (const node of Object.values(mapping)) {
|
|
41
29
|
const message = node["message"];
|
|
42
|
-
if (message
|
|
30
|
+
if (message != null)
|
|
43
31
|
messages.push(message);
|
|
44
32
|
}
|
|
45
33
|
messages.sort((left, right) => {
|
|
@@ -158,33 +146,22 @@ function fetchedConversation(conversation) {
|
|
|
158
146
|
}
|
|
159
147
|
export const chatgptService = defineService({
|
|
160
148
|
name: "chatgpt",
|
|
161
|
-
matches: (url) => (url.hostname === "chatgpt.com" || url.hostname === "chat.openai.com") && /^\/c\/[^/]+\/?$/.test(url.pathname),
|
|
162
|
-
parse: (url) =>
|
|
149
|
+
matches: (url) => (url.hostname === "chatgpt.com" || url.hostname === "chat.openai.com") && (url.pathname === "/" || /^\/c\/[^/]+\/?$/.test(url.pathname) || /^\/g\/g-p-[^/]+\/project\/?$/.test(url.pathname) || /^\/g\/[^/]+\/c\/[^/]+\/?$/.test(url.pathname)),
|
|
150
|
+
parse: (url) => {
|
|
151
|
+
if (url.pathname === "/")
|
|
152
|
+
return Object.freeze({ service: "chatgpt", identifier: "history", type: "project" });
|
|
153
|
+
const project = /^\/g\/(g-p-[^/]+)\/project\/?$/.exec(url.pathname);
|
|
154
|
+
if (project !== null)
|
|
155
|
+
return Object.freeze({ service: "chatgpt", identifier: project[1], type: "project" });
|
|
156
|
+
return Object.freeze({ service: "chatgpt", identifier: /\/c\/([^/]+)\/?$/.exec(url.pathname)[1], type: "message-thread" });
|
|
157
|
+
},
|
|
158
|
+
download: (runtime, url, source, write) => downloadChatgpt(runtime, url, source, write, conversationMarkdown),
|
|
163
159
|
fetch: async (runtime, url, source) => {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
const sessionText = await sessionResponse.text();
|
|
170
|
-
if (!sessionText.startsWith("{"))
|
|
171
|
-
throw chatgptAuthError();
|
|
172
|
-
const session = JSON.parse(sessionText);
|
|
173
|
-
if ("error" in session)
|
|
174
|
-
throw chatgptAuthError();
|
|
175
|
-
if (session["account"] === undefined || session["accessToken"] === undefined)
|
|
176
|
-
throw chatgptAuthError();
|
|
177
|
-
const account = session["account"];
|
|
178
|
-
const conversationHeaders = {
|
|
179
|
-
...sessionHeaders,
|
|
180
|
-
authorization: `Bearer ${session["accessToken"]}`,
|
|
181
|
-
"chatgpt-account-id": account["id"],
|
|
182
|
-
referer: url,
|
|
183
|
-
};
|
|
184
|
-
const conversationResponse = await runtime.http.request(`https://chatgpt.com/backend-api/conversation/${encodeURIComponent(source.identifier)}`, { headers: conversationHeaders });
|
|
185
|
-
if (!conversationResponse.ok)
|
|
186
|
-
throw new Error(`ChatGPT conversation download failed. Run \`wire chatgpt login\`. ${await conversationResponse.text()}`);
|
|
187
|
-
return fetchedConversation(await conversationResponse.json());
|
|
160
|
+
if (source.type === "project")
|
|
161
|
+
throw new Error("Use `wire download <url>` to export ChatGPT history or projects as a directory.");
|
|
162
|
+
const session = await connectChatgpt(runtime, url);
|
|
163
|
+
const conversation = await session.forAccount(session.accountId).json(`/backend-api/conversation/${encodeURIComponent(source.identifier)}`);
|
|
164
|
+
return fetchedConversation(object(conversation));
|
|
188
165
|
},
|
|
189
166
|
});
|
|
190
167
|
//# sourceMappingURL=chatgpt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../src/chatgpt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../src/chatgpt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue, RuntimeCapabilities } from "wire-core";
|
|
2
|
+
import { type Cooldown } from "./cooldown.js";
|
|
3
|
+
export declare function authError(): Error;
|
|
4
|
+
export declare function object(value: JsonValue | undefined): JsonObject;
|
|
5
|
+
export declare function text(value: JsonValue | undefined): string | undefined;
|
|
6
|
+
export declare class ChatgptRequestError extends Error {
|
|
7
|
+
readonly status: number;
|
|
8
|
+
readonly endpoint: string;
|
|
9
|
+
constructor(status: number, endpoint: string);
|
|
10
|
+
}
|
|
11
|
+
export declare function connectChatgpt(runtime: RuntimeCapabilities, referer: string, onCooldown?: (value: Cooldown) => Promise<void>): Promise<{
|
|
12
|
+
accountId: string;
|
|
13
|
+
forAccount: (id: string) => {
|
|
14
|
+
id: string;
|
|
15
|
+
json: (endpoint: string) => Promise<JsonValue>;
|
|
16
|
+
bytes: (value: string) => Promise<Uint8Array>;
|
|
17
|
+
};
|
|
18
|
+
}>;
|
|
19
|
+
export type ChatgptClient = ReturnType<Awaited<ReturnType<typeof connectChatgpt>>["forAccount"]>;
|
|
20
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtE,wBAAgB,SAAS,IAAI,KAAK,CAEjC;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAG/D;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAErE;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAzC,MAAM,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM;CAG/D;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC;;qBA0BzG,MAAM;;yBAEE,MAAM,KAAG,OAAO,CAAC,SAAS,CAAC;uBAM7B,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC;;GAqB3D;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createChatgptRequester } from "./cooldown.js";
|
|
2
|
+
export function authError() {
|
|
3
|
+
return new Error("ChatGPT authentication is missing or expired. Run `wire chatgpt login` once; other commands reuse saved cookies.");
|
|
4
|
+
}
|
|
5
|
+
export function object(value) {
|
|
6
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
7
|
+
throw new Error("Unexpected ChatGPT object response");
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
export function text(value) {
|
|
11
|
+
return typeof value === "string" && value !== "" ? value : undefined;
|
|
12
|
+
}
|
|
13
|
+
export class ChatgptRequestError extends Error {
|
|
14
|
+
status;
|
|
15
|
+
endpoint;
|
|
16
|
+
constructor(status, endpoint) {
|
|
17
|
+
super(`ChatGPT request failed (${status}): ${endpoint}${status === 401 || status === 403 ? ". Run `wire chatgpt login`." : ""}`);
|
|
18
|
+
this.status = status;
|
|
19
|
+
this.endpoint = endpoint;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function connectChatgpt(runtime, referer, onCooldown) {
|
|
23
|
+
const cookies = await runtime.cookies.loadSaved("chatgpt");
|
|
24
|
+
if (cookies === null)
|
|
25
|
+
throw authError();
|
|
26
|
+
const device = cookies.find((cookie) => cookie.name === "oai-did")?.value;
|
|
27
|
+
const headers = {
|
|
28
|
+
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
|
|
29
|
+
"sec-ch-ua": '"Not:A-Brand";v="99", "Google Chrome";v="145", "Chromium";v="145"',
|
|
30
|
+
"sec-ch-ua-mobile": "?0",
|
|
31
|
+
"sec-ch-ua-platform": '"macOS"',
|
|
32
|
+
...(device === undefined ? {} : { "oai-device-id": device }),
|
|
33
|
+
"oai-language": "en-US",
|
|
34
|
+
referer,
|
|
35
|
+
cookie: cookies.map((cookie) => `${cookie.name}=${cookie.value}`).join("; "),
|
|
36
|
+
};
|
|
37
|
+
const response = await runtime.http.request("https://chatgpt.com/api/auth/session", { headers, signal: AbortSignal.timeout(60000), redirect: "error" });
|
|
38
|
+
const contents = await response.text();
|
|
39
|
+
if (!response.ok || !contents.trimStart().startsWith("{"))
|
|
40
|
+
throw authError();
|
|
41
|
+
const session = object(JSON.parse(contents));
|
|
42
|
+
if (session["error"] !== undefined || text(session["accessToken"]) === undefined || session["account"] == null)
|
|
43
|
+
throw authError();
|
|
44
|
+
const account = object(session["account"]);
|
|
45
|
+
const accountId = text(account["id"]);
|
|
46
|
+
if (accountId === undefined)
|
|
47
|
+
throw authError();
|
|
48
|
+
headers["authorization"] = `Bearer ${session["accessToken"]}`;
|
|
49
|
+
const request = createChatgptRequester(runtime.http, onCooldown);
|
|
50
|
+
const forAccount = (id) => {
|
|
51
|
+
const authenticated = { ...headers, "chatgpt-account-id": id };
|
|
52
|
+
const json = async (endpoint) => {
|
|
53
|
+
if (!endpoint.startsWith("/backend-api/"))
|
|
54
|
+
throw new Error("Invalid ChatGPT API endpoint");
|
|
55
|
+
const result = await request(`https://chatgpt.com${endpoint}`, authenticated, endpoint);
|
|
56
|
+
if (!result.ok)
|
|
57
|
+
throw new ChatgptRequestError(result.status, endpoint);
|
|
58
|
+
return await result.json();
|
|
59
|
+
};
|
|
60
|
+
const bytes = async (value) => {
|
|
61
|
+
let url = new URL(value, "https://chatgpt.com");
|
|
62
|
+
for (let redirects = 0; redirects <= 5; redirects++) {
|
|
63
|
+
const trusted = url.hostname === "chatgpt.com" || url.hostname.endsWith(".oaiusercontent.com") || url.hostname.endsWith(".blob.core.windows.net");
|
|
64
|
+
if (url.protocol !== "https:" || url.username !== "" || url.password !== "" || (url.port !== "" && url.port !== "443") || !trusted)
|
|
65
|
+
throw new Error("Untrusted ChatGPT file download URL");
|
|
66
|
+
const result = await request(url.href, url.origin === "https://chatgpt.com" ? authenticated : {}, url.origin + url.pathname);
|
|
67
|
+
if ([301, 302, 303, 307, 308].includes(result.status)) {
|
|
68
|
+
const location = result.headers.get("location");
|
|
69
|
+
await result.body?.cancel();
|
|
70
|
+
if (location === null)
|
|
71
|
+
throw new Error("ChatGPT file redirect is missing its destination");
|
|
72
|
+
url = new URL(location, url);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (!result.ok)
|
|
76
|
+
throw new ChatgptRequestError(result.status, url.origin + url.pathname);
|
|
77
|
+
return new Uint8Array(await result.arrayBuffer());
|
|
78
|
+
}
|
|
79
|
+
throw new Error("Too many ChatGPT file redirects");
|
|
80
|
+
};
|
|
81
|
+
return { id, json, bytes };
|
|
82
|
+
};
|
|
83
|
+
return { accountId, forAccount };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HttpCapability } from "wire-core";
|
|
2
|
+
export type Cooldown = {
|
|
3
|
+
endpoint: string;
|
|
4
|
+
status: number;
|
|
5
|
+
attempt: number;
|
|
6
|
+
delay_ms: number;
|
|
7
|
+
retry_at: string;
|
|
8
|
+
source: "retry-after-seconds" | "retry-after-date" | "exponential-backoff";
|
|
9
|
+
};
|
|
10
|
+
export declare class ChatgptCooldownError extends Error {
|
|
11
|
+
readonly cooldown: Cooldown;
|
|
12
|
+
constructor(cooldown: Cooldown);
|
|
13
|
+
}
|
|
14
|
+
export declare function responseCooldown(response: Response, now: number, attempt: number, endpoint: string): Cooldown;
|
|
15
|
+
export declare function createChatgptRequester(http: HttpCapability, onCooldown?: (value: Cooldown) => Promise<void>, timing?: {
|
|
16
|
+
now: () => number;
|
|
17
|
+
sleep: (milliseconds: number) => Promise<void>;
|
|
18
|
+
}): (url: string, headers: Record<string, string>, endpoint: string) => Promise<Response>;
|
|
19
|
+
//# sourceMappingURL=cooldown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cooldown.d.ts","sourceRoot":"","sources":["../src/cooldown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;CAC5E,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ;CAGxC;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAiB7G;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,EACpB,UAAU,GAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAkB,EAC/D,MAAM;;0BAAkD,MAAM;CAA0B,IAI1E,KAAK,MAAM,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,QAAQ,CAAC,CAmBjG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
2
|
+
export class ChatgptCooldownError extends Error {
|
|
3
|
+
cooldown;
|
|
4
|
+
constructor(cooldown) {
|
|
5
|
+
super(`ChatGPT is still rate-limited after ${cooldown.attempt} attempts. No further requests were sent. Retry no earlier than ${cooldown.retry_at} (${cooldown.source}).`);
|
|
6
|
+
this.cooldown = cooldown;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function responseCooldown(response, now, attempt, endpoint) {
|
|
10
|
+
const retryAfter = response.headers.get("retry-after")?.trim();
|
|
11
|
+
let milliseconds = 1000 * 2 ** (attempt - 1);
|
|
12
|
+
let source = "exponential-backoff";
|
|
13
|
+
if (retryAfter !== undefined && /^\d+$/.test(retryAfter) && Number.isSafeInteger(Number(retryAfter) * 1000)) {
|
|
14
|
+
milliseconds = Number(retryAfter) * 1000;
|
|
15
|
+
source = "retry-after-seconds";
|
|
16
|
+
}
|
|
17
|
+
else if (retryAfter !== undefined && /^[A-Za-z]/.test(retryAfter) && Number.isFinite(Date.parse(retryAfter))) {
|
|
18
|
+
const serverDate = Date.parse(response.headers.get("date") ?? "");
|
|
19
|
+
milliseconds = Math.max(0, Date.parse(retryAfter) - (Number.isFinite(serverDate) ? serverDate : now));
|
|
20
|
+
source = "retry-after-date";
|
|
21
|
+
}
|
|
22
|
+
if (!Number.isFinite(new Date(now + milliseconds).getTime())) {
|
|
23
|
+
milliseconds = 1000 * 2 ** (attempt - 1);
|
|
24
|
+
source = "exponential-backoff";
|
|
25
|
+
}
|
|
26
|
+
return { endpoint, status: response.status, attempt, delay_ms: milliseconds, retry_at: new Date(now + milliseconds).toISOString(), source };
|
|
27
|
+
}
|
|
28
|
+
export function createChatgptRequester(http, onCooldown = async () => { }, timing = { now: () => Date.now(), sleep: (milliseconds) => delay(milliseconds) }) {
|
|
29
|
+
const deadlines = new Map();
|
|
30
|
+
let stopped;
|
|
31
|
+
return async (url, headers, endpoint) => {
|
|
32
|
+
if (stopped !== undefined)
|
|
33
|
+
throw stopped;
|
|
34
|
+
const origin = new URL(url).origin;
|
|
35
|
+
for (let attempt = 1;; attempt++) {
|
|
36
|
+
while (timing.now() < (deadlines.get(origin) ?? 0))
|
|
37
|
+
await timing.sleep(Math.min(2147483647, deadlines.get(origin) - timing.now()));
|
|
38
|
+
const response = await http.request(url, { headers, redirect: "manual", signal: AbortSignal.timeout(60000) });
|
|
39
|
+
if (![429, 500, 502, 503, 504].includes(response.status))
|
|
40
|
+
return response;
|
|
41
|
+
const cooldown = responseCooldown(response, timing.now(), attempt, endpoint);
|
|
42
|
+
deadlines.set(origin, Math.max(deadlines.get(origin) ?? 0, Date.parse(cooldown.retry_at)));
|
|
43
|
+
await onCooldown(cooldown);
|
|
44
|
+
if (attempt === 5) {
|
|
45
|
+
if (response.status !== 429)
|
|
46
|
+
return response;
|
|
47
|
+
await response.body?.cancel();
|
|
48
|
+
stopped = new ChatgptCooldownError(cooldown);
|
|
49
|
+
throw stopped;
|
|
50
|
+
}
|
|
51
|
+
await response.body?.cancel();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=cooldown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cooldown.js","sourceRoot":"","sources":["../src/cooldown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { DownloadedDocument, DownloadWriter, JsonObject, RuntimeCapabilities, Source } from "wire-core";
|
|
2
|
+
export declare function downloadChatgpt(runtime: RuntimeCapabilities, url: string, source: Source, write: DownloadWriter, render: (conversation: JsonObject) => string): Promise<DownloadedDocument | null>;
|
|
3
|
+
//# sourceMappingURL=download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAa,mBAAmB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAoExH,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,EAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,CAAC,YAAY,EAAE,UAAU,KAAK,MAAM,GAC3C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiOpC"}
|