@proappstore/cli 2.6.20 → 2.6.21
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/login.d.ts.map +1 -1
- package/dist/login.js +92 -12
- package/dist/login.js.map +1 -1
- package/package.json +2 -2
package/dist/login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAsB,QAAQ,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAsB,QAAQ,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6C3D;AAqED,eAAO,MAAM,YAAY,SAIrB,CAAC"}
|
package/dist/login.js
CHANGED
|
@@ -1,31 +1,111 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { createServer } from 'node:http';
|
|
2
3
|
import { readConfig, writeConfig } from './lib/config.js';
|
|
3
|
-
|
|
4
|
-
const DEFAULT_CLIENT_ID = process.env.PAS_GITHUB_CLIENT_ID ?? 'Ov23liuUpYPXc1ikEFm2';
|
|
4
|
+
const LOGIN_TIMEOUT_MS = 10 * 60 * 1000;
|
|
5
5
|
export async function runLogin() {
|
|
6
|
-
const flow = await startDeviceFlow(DEFAULT_CLIENT_ID);
|
|
7
|
-
process.stdout.write(`\nOpen ${flow.verificationUri} and enter code: ${flow.userCode}\n\n`);
|
|
8
|
-
process.stdout.write('Waiting for authorization...\n');
|
|
9
|
-
const { accessToken, login } = await flow.poll();
|
|
10
6
|
const config = await readConfig();
|
|
11
|
-
const
|
|
7
|
+
const callback = await startCallbackServer();
|
|
8
|
+
const startUrl = new URL(`${config.authApiBase}/v1/auth/github/start`);
|
|
9
|
+
startUrl.searchParams.set('return_to', callback.url);
|
|
10
|
+
startUrl.searchParams.set('response_mode', 'query');
|
|
11
|
+
process.stdout.write(`\nOpen this URL to sign in to ProAppStore:\n${startUrl.toString()}\n\n`);
|
|
12
|
+
process.stdout.write('Waiting for authorization...\n');
|
|
13
|
+
let code;
|
|
14
|
+
try {
|
|
15
|
+
code = await callback.code;
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
callback.close();
|
|
19
|
+
}
|
|
20
|
+
const exchangeUrl = `${config.authApiBase}/v1/auth/code/exchange`;
|
|
12
21
|
const exchangeRes = await fetch(exchangeUrl, {
|
|
13
22
|
method: 'POST',
|
|
14
23
|
headers: { 'Content-Type': 'application/json' },
|
|
15
|
-
body: JSON.stringify({
|
|
24
|
+
body: JSON.stringify({ code }),
|
|
16
25
|
});
|
|
17
26
|
if (!exchangeRes.ok) {
|
|
18
|
-
throw new Error(`Auth exchange failed (${exchangeRes.status}): ${await exchangeRes.text()}`);
|
|
27
|
+
throw new Error(`Auth code exchange failed (${exchangeRes.status}): ${await exchangeRes.text()}`);
|
|
19
28
|
}
|
|
20
|
-
const { sessionToken } = (await exchangeRes.json());
|
|
29
|
+
const { token: sessionToken } = (await exchangeRes.json());
|
|
30
|
+
const meRes = await fetch(`${config.authApiBase}/v1/auth/me`, {
|
|
31
|
+
headers: { Authorization: `Bearer ${sessionToken}` },
|
|
32
|
+
});
|
|
33
|
+
if (!meRes.ok) {
|
|
34
|
+
throw new Error(`Auth verification failed (${meRes.status}): ${await meRes.text()}`);
|
|
35
|
+
}
|
|
36
|
+
const me = (await meRes.json());
|
|
37
|
+
const login = me.login ?? me.name ?? me.id ?? 'unknown';
|
|
38
|
+
const { github: _legacyGithub, ...nextConfig } = config;
|
|
21
39
|
await writeConfig({
|
|
22
|
-
...
|
|
23
|
-
github: { accessToken, login, obtainedAt: Date.now() },
|
|
40
|
+
...nextConfig,
|
|
24
41
|
session: { token: sessionToken, obtainedAt: Date.now() },
|
|
25
42
|
});
|
|
26
43
|
process.stdout.write(`\n✓ Signed in as @${login}\n`);
|
|
27
44
|
return { login };
|
|
28
45
|
}
|
|
46
|
+
function startCallbackServer() {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
let settled = false;
|
|
49
|
+
let timeout;
|
|
50
|
+
let resolveCode;
|
|
51
|
+
let rejectCode;
|
|
52
|
+
const code = new Promise((res, rej) => {
|
|
53
|
+
resolveCode = res;
|
|
54
|
+
rejectCode = rej;
|
|
55
|
+
});
|
|
56
|
+
const server = createServer((req, res) => {
|
|
57
|
+
const base = server.address();
|
|
58
|
+
const port = typeof base === 'object' && base ? base.port : 0;
|
|
59
|
+
const url = new URL(req.url ?? '/', `http://127.0.0.1:${port}`);
|
|
60
|
+
if (url.pathname !== '/callback') {
|
|
61
|
+
res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
|
|
62
|
+
res.end('Not found');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const returnedCode = url.searchParams.get('code');
|
|
66
|
+
if (!returnedCode) {
|
|
67
|
+
const reason = url.searchParams.get('auth_error') ?? url.searchParams.get('error') ?? 'missing code';
|
|
68
|
+
res.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' });
|
|
69
|
+
res.end(`ProAppStore sign-in failed: ${reason}`);
|
|
70
|
+
rejectCode(new Error(`ProAppStore sign-in failed: ${reason}`));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
74
|
+
res.end('<!doctype html><title>ProAppStore signed in</title><p>ProAppStore sign-in complete. You can close this tab.</p>');
|
|
75
|
+
resolveCode(returnedCode);
|
|
76
|
+
});
|
|
77
|
+
server.once('error', (error) => {
|
|
78
|
+
if (!settled) {
|
|
79
|
+
settled = true;
|
|
80
|
+
reject(error);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
rejectCode(error);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
server.listen(0, '127.0.0.1', () => {
|
|
87
|
+
const address = server.address();
|
|
88
|
+
if (typeof address !== 'object' || !address) {
|
|
89
|
+
reject(new Error('Failed to start callback server.'));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
settled = true;
|
|
93
|
+
timeout = setTimeout(() => {
|
|
94
|
+
rejectCode(new Error('Timed out waiting for ProAppStore sign-in.'));
|
|
95
|
+
server.close();
|
|
96
|
+
}, LOGIN_TIMEOUT_MS);
|
|
97
|
+
resolve({
|
|
98
|
+
url: `http://127.0.0.1:${address.port}/callback`,
|
|
99
|
+
code,
|
|
100
|
+
close: () => {
|
|
101
|
+
if (timeout)
|
|
102
|
+
clearTimeout(timeout);
|
|
103
|
+
server.close();
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
29
109
|
export const loginCommand = new Command('login')
|
|
30
110
|
.description('Sign in with GitHub.')
|
|
31
111
|
.action(async () => {
|
package/dist/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proappstore/cli",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.21",
|
|
4
4
|
"description": "pas — CLI for publishing paid apps to proappstore.online",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"commander": "^12.1.0",
|
|
25
|
-
"@proappstore/compliance": "0.2.
|
|
25
|
+
"@proappstore/compliance": "0.2.10"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.0.0",
|