@openai-oauth/web 2.0.0-beta.2 → 2.0.0-beta.4
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 +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +105 -14
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +0 -1
- package/package.json +9 -6
package/README.md
CHANGED
|
@@ -26,9 +26,9 @@ await fetch("/api/chat", {
|
|
|
26
26
|
|
|
27
27
|
### Hosted Sign-in
|
|
28
28
|
|
|
29
|
-
Hosted browser sign-in uses the open-source
|
|
29
|
+
Hosted browser sign-in uses the open-source Sign in with ChatGPT extension for [Chrome](https://chromewebstore.google.com/detail/sign-in-with-chatgpt/odbgboachaefbbbdiffcefhpkekhfcna) or [Firefox](https://addons.mozilla.org/firefox/addon/sign-in-with-chatgpt/) to complete OpenAI's local OAuth callback. The extension shows the destination app for confirmation and then returns the callback directly to it.
|
|
30
30
|
|
|
31
|
-
`startLogin()` uses this extension flow by default. When installation is needed, it returns the
|
|
31
|
+
`startLogin()` uses this extension flow by default. When installation is needed, it returns the correct Chrome Web Store or Firefox Add-ons URL for your interface to display:
|
|
32
32
|
|
|
33
33
|
```ts
|
|
34
34
|
import { startLogin } from "@openai-oauth/web";
|
|
@@ -43,7 +43,7 @@ if (result.status === "needs-extension") {
|
|
|
43
43
|
|
|
44
44
|
After installation, call `startLogin()` again when the user returns to your app or presses Sign in again. It will start OAuth once the extension is available.
|
|
45
45
|
|
|
46
|
-
The extension
|
|
46
|
+
The extension redirects only `http://localhost:1455/auth/callback`. After the user confirms the destination, call `completeLogin()` on the returned app URL to exchange the code and save the browser session.
|
|
47
47
|
|
|
48
48
|
`startLogin()` returns `{ status: "started" }` when OAuth begins or `{ status: "needs-extension", installUrl }` when your interface should show installation UI. Provide an explicit `redirectUri` only when your environment handles its own registered callback without the extension.
|
|
49
49
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EAIvB,KAAK,YAAY,EACjB,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAA;AAEhD,MAAM,MAAM,0BAA0B,GAAG;IACxC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,CAAA;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,CAAA;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG;IAC9D,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEtD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CACnC,yBAAyB,EACzB,aAAa,CACb,GAAG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC3B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,10 @@ const browserExtensionStatePrefix = "oo2_";
|
|
|
10
10
|
const browserExtensionRedirectUri = "http://localhost:1455/auth/callback";
|
|
11
11
|
const browserExtensionId = "odbgboachaefbbbdiffcefhpkekhfcna";
|
|
12
12
|
const browserExtensionInstalledPath = "src/installed.json";
|
|
13
|
-
const
|
|
13
|
+
const chromeExtensionInstallUrl = "https://chromewebstore.google.com/detail/sign-in-with-chatgpt/odbgboachaefbbbdiffcefhpkekhfcna";
|
|
14
|
+
const firefoxExtensionInstallUrl = "https://addons.mozilla.org/firefox/addon/sign-in-with-chatgpt/";
|
|
15
|
+
const firefoxExtensionDetectionUrl = "http://localhost:1455/openai-oauth/installed";
|
|
16
|
+
const browserExtensionMarkerType = "openai-oauth:browser-extension-installed";
|
|
14
17
|
const browserExtensionDetectionTimeoutMs = 750;
|
|
15
18
|
const refreshExpiryMarginMs = 5 * 60 * 1000;
|
|
16
19
|
const refreshIntervalMs = 55 * 60 * 1000;
|
|
@@ -28,7 +31,9 @@ const assertBrowserWindow = () => {
|
|
|
28
31
|
}
|
|
29
32
|
return window;
|
|
30
33
|
};
|
|
31
|
-
const
|
|
34
|
+
const isFirefox = () => typeof navigator !== "undefined" &&
|
|
35
|
+
navigator.userAgent.toLowerCase().includes("firefox/");
|
|
36
|
+
const isChromeExtensionInstalled = async () => {
|
|
32
37
|
const fetchImpl = globalThis.fetch;
|
|
33
38
|
if (!fetchImpl) {
|
|
34
39
|
return false;
|
|
@@ -57,15 +62,68 @@ const isBrowserExtensionInstalled = async () => {
|
|
|
57
62
|
}
|
|
58
63
|
}
|
|
59
64
|
};
|
|
65
|
+
const isFirefoxExtensionInstalled = (browserWindow) => new Promise((resolve) => {
|
|
66
|
+
const document = browserWindow.document;
|
|
67
|
+
const parent = document?.body ?? document?.documentElement;
|
|
68
|
+
if (!document?.createElement || !parent) {
|
|
69
|
+
resolve(false);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const iframe = document.createElement("iframe");
|
|
73
|
+
iframe.hidden = true;
|
|
74
|
+
iframe.setAttribute("aria-hidden", "true");
|
|
75
|
+
iframe.src = firefoxExtensionDetectionUrl;
|
|
76
|
+
let settled = false;
|
|
77
|
+
const finish = (installed) => {
|
|
78
|
+
if (settled) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
settled = true;
|
|
82
|
+
globalThis.clearTimeout(timeout);
|
|
83
|
+
browserWindow.removeEventListener("message", onMessage);
|
|
84
|
+
iframe.remove();
|
|
85
|
+
resolve(installed);
|
|
86
|
+
};
|
|
87
|
+
const onMessage = (event) => {
|
|
88
|
+
const data = event.data;
|
|
89
|
+
if (event.source === iframe.contentWindow &&
|
|
90
|
+
event.origin.startsWith("moz-extension://") &&
|
|
91
|
+
data?.type === browserExtensionMarkerType &&
|
|
92
|
+
data.name === "sign-in-with-chatgpt" &&
|
|
93
|
+
data.protocol === "openai-oauth-browser-extension" &&
|
|
94
|
+
data.protocolVersion === 1) {
|
|
95
|
+
finish(true);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const timeout = globalThis.setTimeout(() => finish(false), browserExtensionDetectionTimeoutMs);
|
|
99
|
+
browserWindow.addEventListener("message", onMessage);
|
|
100
|
+
parent.appendChild(iframe);
|
|
101
|
+
});
|
|
102
|
+
const getBrowserExtension = (browserWindow) => isFirefox()
|
|
103
|
+
? {
|
|
104
|
+
installUrl: firefoxExtensionInstallUrl,
|
|
105
|
+
isInstalled: () => isFirefoxExtensionInstalled(browserWindow),
|
|
106
|
+
}
|
|
107
|
+
: {
|
|
108
|
+
installUrl: chromeExtensionInstallUrl,
|
|
109
|
+
isInstalled: isChromeExtensionInstalled,
|
|
110
|
+
};
|
|
60
111
|
const requestToPromise = (request) => new Promise((resolve, reject) => {
|
|
61
112
|
request.onsuccess = () => resolve(request.result);
|
|
62
113
|
request.onerror = () => reject(request.error ?? new Error("IndexedDB request failed."));
|
|
63
114
|
});
|
|
115
|
+
const transactionToPromise = (transaction) => new Promise((resolve, reject) => {
|
|
116
|
+
transaction.oncomplete = () => resolve();
|
|
117
|
+
transaction.onerror = () => reject(transaction.error ?? new Error("IndexedDB transaction failed."));
|
|
118
|
+
transaction.onabort = () => reject(transaction.error ?? new Error("IndexedDB transaction was aborted."));
|
|
119
|
+
});
|
|
64
120
|
const openDatabaseRequest = (settings, version) => {
|
|
65
121
|
assertBrowserStorage();
|
|
66
122
|
const browserWindow = assertBrowserWindow();
|
|
67
123
|
return new Promise((resolve, reject) => {
|
|
124
|
+
let settled = false;
|
|
68
125
|
const timeout = browserWindow.setTimeout(() => {
|
|
126
|
+
settled = true;
|
|
69
127
|
reject(new Error("Timed out opening browser session storage."));
|
|
70
128
|
}, 2000);
|
|
71
129
|
const request = typeof version === "number"
|
|
@@ -79,14 +137,25 @@ const openDatabaseRequest = (settings, version) => {
|
|
|
79
137
|
};
|
|
80
138
|
request.onsuccess = () => {
|
|
81
139
|
browserWindow.clearTimeout(timeout);
|
|
140
|
+
if (settled) {
|
|
141
|
+
request.result.close();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
settled = true;
|
|
82
145
|
resolve(request.result);
|
|
83
146
|
};
|
|
84
147
|
request.onerror = () => {
|
|
85
148
|
browserWindow.clearTimeout(timeout);
|
|
149
|
+
if (settled)
|
|
150
|
+
return;
|
|
151
|
+
settled = true;
|
|
86
152
|
reject(request.error ?? new Error("Could not open IndexedDB."));
|
|
87
153
|
};
|
|
88
154
|
request.onblocked = () => {
|
|
89
155
|
browserWindow.clearTimeout(timeout);
|
|
156
|
+
if (settled)
|
|
157
|
+
return;
|
|
158
|
+
settled = true;
|
|
90
159
|
reject(new Error("Browser session storage is blocked."));
|
|
91
160
|
};
|
|
92
161
|
});
|
|
@@ -109,8 +178,21 @@ const withStore = async (settings, mode, fn) => {
|
|
|
109
178
|
const db = await openDatabase(settings);
|
|
110
179
|
try {
|
|
111
180
|
const tx = db.transaction(settings.storeName, mode);
|
|
181
|
+
const completed = transactionToPromise(tx);
|
|
112
182
|
const store = tx.objectStore(settings.storeName);
|
|
113
|
-
|
|
183
|
+
try {
|
|
184
|
+
const result = await fn(store);
|
|
185
|
+
await completed;
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
try {
|
|
190
|
+
tx.abort();
|
|
191
|
+
}
|
|
192
|
+
catch { }
|
|
193
|
+
await completed.catch(() => undefined);
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
114
196
|
}
|
|
115
197
|
finally {
|
|
116
198
|
db.close();
|
|
@@ -174,7 +256,16 @@ const decryptSession = async (key, encrypted) => {
|
|
|
174
256
|
name: "AES-GCM",
|
|
175
257
|
iv: base64ToBytes(encrypted.iv),
|
|
176
258
|
}, key, base64ToBytes(encrypted.ciphertext));
|
|
177
|
-
|
|
259
|
+
const session = JSON.parse(textDecoder.decode(plaintext));
|
|
260
|
+
if (typeof session !== "object" ||
|
|
261
|
+
session === null ||
|
|
262
|
+
!("accessToken" in session) ||
|
|
263
|
+
typeof session.accessToken !== "string" ||
|
|
264
|
+
!("accountId" in session) ||
|
|
265
|
+
typeof session.accountId !== "string") {
|
|
266
|
+
throw new Error("The stored OpenAI OAuth session is malformed.");
|
|
267
|
+
}
|
|
268
|
+
return session;
|
|
178
269
|
};
|
|
179
270
|
export const createSessionStore = (options = {}) => {
|
|
180
271
|
const settings = {
|
|
@@ -183,16 +274,15 @@ export const createSessionStore = (options = {}) => {
|
|
|
183
274
|
};
|
|
184
275
|
return {
|
|
185
276
|
get: async () => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (!encrypted) {
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
return decryptSession(await getCryptoKey(settings), encrypted);
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
277
|
+
const encrypted = await getRecord(settings, settings.sessionKey);
|
|
278
|
+
if (!encrypted) {
|
|
194
279
|
return null;
|
|
195
280
|
}
|
|
281
|
+
if (typeof encrypted.iv !== "string" ||
|
|
282
|
+
typeof encrypted.ciphertext !== "string") {
|
|
283
|
+
throw new Error("The stored OpenAI OAuth session is malformed.");
|
|
284
|
+
}
|
|
285
|
+
return decryptSession(await getCryptoKey(settings), encrypted);
|
|
196
286
|
},
|
|
197
287
|
set: async (session) => {
|
|
198
288
|
const key = await getCryptoKey(settings);
|
|
@@ -370,10 +460,11 @@ const createBrowserExtensionState = (callbackUrl, appState) => {
|
|
|
370
460
|
export const startLogin = async (options = {}) => {
|
|
371
461
|
const browserWindow = assertBrowserWindow();
|
|
372
462
|
const usesBrowserExtension = options.redirectUri === undefined;
|
|
373
|
-
|
|
463
|
+
const browserExtension = getBrowserExtension(browserWindow);
|
|
464
|
+
if (usesBrowserExtension && !(await browserExtension.isInstalled())) {
|
|
374
465
|
return {
|
|
375
466
|
status: "needs-extension",
|
|
376
|
-
installUrl:
|
|
467
|
+
installUrl: browserExtension.installUrl,
|
|
377
468
|
};
|
|
378
469
|
}
|
|
379
470
|
const returnTo = options.returnTo ?? getCurrentRelativeUrl();
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,WAAW,EAEX,MAAM,oBAAoB,CAAA;AAE3B,MAAM,MAAM,2BAA2B,GAAG;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AA6BD,eAAO,MAAM,iBAAiB,GAC7B,OAAO,OAAO,GAAG,OAAO,EACxB,UAAS,2BAAgC,KACvC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,WAAW,EAEX,MAAM,oBAAoB,CAAA;AAE3B,MAAM,MAAM,2BAA2B,GAAG;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AA6BD,eAAO,MAAM,iBAAiB,GAC7B,OAAO,OAAO,GAAG,OAAO,EACxB,UAAS,2BAAgC,KACvC,WAYF,CAAA"}
|
package/dist/server.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openai-oauth/web",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.4",
|
|
4
4
|
"description": "Browser credential storage and web utilities for openai-oauth.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"openai",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"web"
|
|
12
12
|
],
|
|
13
13
|
"type": "module",
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20"
|
|
16
|
+
},
|
|
14
17
|
"sideEffects": false,
|
|
15
18
|
"main": "./dist/index.js",
|
|
16
19
|
"types": "./dist/index.d.ts",
|
|
@@ -32,7 +35,7 @@
|
|
|
32
35
|
"LICENSE"
|
|
33
36
|
],
|
|
34
37
|
"scripts": {
|
|
35
|
-
"build": "tsc -p tsconfig.build.json",
|
|
38
|
+
"build": "node ../../scripts/clean-dist.mjs && tsc -p tsconfig.build.json",
|
|
36
39
|
"prepublishOnly": "bun run build",
|
|
37
40
|
"typecheck": "tsc --noEmit",
|
|
38
41
|
"test": "vitest run"
|
|
@@ -41,12 +44,12 @@
|
|
|
41
44
|
"access": "public"
|
|
42
45
|
},
|
|
43
46
|
"dependencies": {
|
|
44
|
-
"@openai-oauth/core": "2.0.0-beta.
|
|
47
|
+
"@openai-oauth/core": "2.0.0-beta.4"
|
|
45
48
|
},
|
|
46
49
|
"devDependencies": {
|
|
47
|
-
"
|
|
48
|
-
"typescript": "
|
|
49
|
-
"vitest": "
|
|
50
|
+
"fake-indexeddb": "6.2.5",
|
|
51
|
+
"typescript": "5.9.2",
|
|
52
|
+
"vitest": "4.1.10"
|
|
50
53
|
},
|
|
51
54
|
"author": "EvanZhouDev",
|
|
52
55
|
"license": "AGPL-3.0-only",
|