@pocketcoder/host 0.0.6 → 0.0.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/dist/auth/oauth-server.d.ts.map +1 -1
- package/dist/auth/oauth-server.js +10 -57
- package/dist/auth/oauth-server.js.map +1 -1
- package/dist/auth/templates/error.html +575 -0
- package/dist/auth/templates/index.d.ts +12 -0
- package/dist/auth/templates/index.d.ts.map +1 -0
- package/dist/auth/templates/index.js +16 -0
- package/dist/auth/templates/index.js.map +1 -0
- package/dist/auth/templates/loading.html +636 -0
- package/dist/auth/templates/success.html +537 -0
- package/dist/cli/commands/__tests__/cli-daemon.test.js +93 -10
- package/dist/cli/commands/__tests__/cli-daemon.test.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +30 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,eAAe,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,yDAAyD;IACzD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAyH7D"}
|
|
@@ -1,57 +1,7 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
|
+
import { SUCCESS_HTML, ERROR_HTML, FRAGMENT_EXTRACTOR_HTML } from "./templates/index.js";
|
|
2
3
|
/** Timeout for waiting for the OAuth callback (5 minutes). */
|
|
3
4
|
const OAUTH_TIMEOUT_MS = 5 * 60 * 1000;
|
|
4
|
-
const SUCCESS_HTML = `<!DOCTYPE html>
|
|
5
|
-
<html>
|
|
6
|
-
<head><title>PocketCoder</title></head>
|
|
7
|
-
<body>
|
|
8
|
-
<h1>Authentication successful!</h1>
|
|
9
|
-
<p>You can close this window.</p>
|
|
10
|
-
</body>
|
|
11
|
-
</html>`;
|
|
12
|
-
const ERROR_HTML = `<!DOCTYPE html>
|
|
13
|
-
<html>
|
|
14
|
-
<head><title>PocketCoder</title></head>
|
|
15
|
-
<body>
|
|
16
|
-
<h1>Login Failed</h1>
|
|
17
|
-
<p>You can close this window.</p>
|
|
18
|
-
</body>
|
|
19
|
-
</html>`;
|
|
20
|
-
/**
|
|
21
|
-
* HTML page that extracts tokens from URL fragment and posts them back.
|
|
22
|
-
* Supabase implicit flow returns tokens in the fragment (#access_token=...).
|
|
23
|
-
*/
|
|
24
|
-
const FRAGMENT_EXTRACTOR_HTML = `<!DOCTYPE html>
|
|
25
|
-
<html>
|
|
26
|
-
<head><title>PocketCoder - Completing Login...</title></head>
|
|
27
|
-
<body>
|
|
28
|
-
<h1>Completing login...</h1>
|
|
29
|
-
<p>Please wait...</p>
|
|
30
|
-
<script>
|
|
31
|
-
const hash = window.location.hash.substring(1);
|
|
32
|
-
const params = new URLSearchParams(hash);
|
|
33
|
-
const accessToken = params.get('access_token');
|
|
34
|
-
const refreshToken = params.get('refresh_token');
|
|
35
|
-
const error = params.get('error');
|
|
36
|
-
|
|
37
|
-
if (error) {
|
|
38
|
-
document.body.innerHTML = '<h1>Login Failed</h1><p>' + error + '</p>';
|
|
39
|
-
} else if (accessToken && refreshToken) {
|
|
40
|
-
fetch('/auth/tokens', {
|
|
41
|
-
method: 'POST',
|
|
42
|
-
headers: { 'Content-Type': 'application/json' },
|
|
43
|
-
body: JSON.stringify({ access_token: accessToken, refresh_token: refreshToken })
|
|
44
|
-
}).then(() => {
|
|
45
|
-
document.body.innerHTML = '<h1>Authentication successful!</h1><p>You can close this window.</p>';
|
|
46
|
-
}).catch(err => {
|
|
47
|
-
document.body.innerHTML = '<h1>Error</h1><p>' + err.message + '</p>';
|
|
48
|
-
});
|
|
49
|
-
} else {
|
|
50
|
-
document.body.innerHTML = '<h1>Error</h1><p>Missing tokens in response</p>';
|
|
51
|
-
}
|
|
52
|
-
</script>
|
|
53
|
-
</body>
|
|
54
|
-
</html>`;
|
|
55
5
|
/**
|
|
56
6
|
* Start a temporary HTTP server on a random port to receive the OAuth callback.
|
|
57
7
|
* The server listens only on 127.0.0.1 and closes automatically after the
|
|
@@ -73,18 +23,20 @@ export async function startOAuthServer() {
|
|
|
73
23
|
const errorParam = reqUrl.searchParams.get("error");
|
|
74
24
|
if (errorParam) {
|
|
75
25
|
res.writeHead(400, { "Content-Type": "text/html" });
|
|
76
|
-
res.end(ERROR_HTML);
|
|
77
26
|
error = new Error(errorParam);
|
|
78
|
-
|
|
27
|
+
// Wait for response to be fully sent before settling
|
|
28
|
+
res.on("finish", settle);
|
|
29
|
+
res.end(ERROR_HTML);
|
|
79
30
|
return;
|
|
80
31
|
}
|
|
81
32
|
// Check for code flow (code in query string)
|
|
82
33
|
const code = reqUrl.searchParams.get("code");
|
|
83
34
|
if (code) {
|
|
84
35
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
85
|
-
res.end(SUCCESS_HTML);
|
|
86
36
|
result = { code };
|
|
87
|
-
|
|
37
|
+
// Wait for response to be fully sent before settling
|
|
38
|
+
res.on("finish", settle);
|
|
39
|
+
res.end(SUCCESS_HTML);
|
|
88
40
|
return;
|
|
89
41
|
}
|
|
90
42
|
// No code - serve HTML to extract tokens from fragment (implicit flow)
|
|
@@ -103,9 +55,10 @@ export async function startOAuthServer() {
|
|
|
103
55
|
const data = JSON.parse(body);
|
|
104
56
|
if (data.access_token && data.refresh_token) {
|
|
105
57
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
106
|
-
res.end(JSON.stringify({ success: true }));
|
|
107
58
|
result = { access_token: data.access_token, refresh_token: data.refresh_token };
|
|
108
|
-
|
|
59
|
+
// Wait for response to be fully sent before settling
|
|
60
|
+
res.on("finish", settle);
|
|
61
|
+
res.end(JSON.stringify({ success: true }));
|
|
109
62
|
}
|
|
110
63
|
else {
|
|
111
64
|
res.writeHead(400, { "Content-Type": "application/json" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAKzC,
|
|
1
|
+
{"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"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"}
|