demofly 0.1.6 → 0.1.7
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/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +271 -83
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +28 -4
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/lib/credentials.d.ts +8 -0
- package/dist/lib/credentials.d.ts.map +1 -1
- package/dist/lib/credentials.js +122 -17
- package/dist/lib/credentials.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAsXzC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAexD"}
|
|
@@ -1,109 +1,297 @@
|
|
|
1
1
|
import {} from "commander";
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
2
3
|
import { createServer } from "node:http";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
import { randomBytes, createHash } from "node:crypto";
|
|
5
|
+
import { execSync } from "node:child_process";
|
|
6
|
+
import { setToken, setCredentials } from "../../lib/credentials.js";
|
|
7
|
+
const API_BASE = process.env.DEMOFLY_URL || "https://demofly.ai";
|
|
8
|
+
const CLI_CLIENT_ID = "demofly-cli";
|
|
9
|
+
const CALLBACK_PORTS = [19823, 19824, 19825];
|
|
10
|
+
const DEVICE_POLL_INTERVAL_MS = 5000;
|
|
11
|
+
function prompt(question) {
|
|
12
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
rl.question(question, (answer) => {
|
|
15
|
+
rl.close();
|
|
16
|
+
resolve(answer.trim());
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
8
20
|
function openBrowser(url) {
|
|
9
|
-
const platform = process.platform;
|
|
10
21
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
execFileSync("xdg-open", [url], { stdio: ["pipe", "pipe", "pipe"] });
|
|
19
|
-
}
|
|
22
|
+
const cmd = process.platform === "darwin"
|
|
23
|
+
? `open "${url}"`
|
|
24
|
+
: process.platform === "win32"
|
|
25
|
+
? `start "" "${url}"`
|
|
26
|
+
: `xdg-open "${url}"`;
|
|
27
|
+
execSync(cmd, { stdio: "ignore" });
|
|
20
28
|
}
|
|
21
29
|
catch {
|
|
22
30
|
console.log(`Open this URL in your browser:\n ${url}`);
|
|
23
31
|
}
|
|
24
32
|
}
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
// ── Device Code Flow (default) ─────────────────────────────────────────────
|
|
34
|
+
async function deviceCodeFlow() {
|
|
35
|
+
console.log("Requesting device code...");
|
|
36
|
+
const codeRes = await fetch(`${API_BASE}/api/auth/device/code`, {
|
|
27
37
|
method: "POST",
|
|
28
38
|
headers: { "Content-Type": "application/json" },
|
|
29
|
-
body: JSON.stringify({
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
body: JSON.stringify({ client_id: CLI_CLIENT_ID }),
|
|
40
|
+
});
|
|
41
|
+
if (!codeRes.ok) {
|
|
42
|
+
const text = await codeRes.text();
|
|
43
|
+
console.error(`Failed to request device code: ${text}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const codeData = (await codeRes.json());
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(`Your code: ${codeData.user_code}`);
|
|
49
|
+
console.log();
|
|
50
|
+
console.log(`Open this URL to authorize:`);
|
|
51
|
+
console.log(` ${codeData.verification_uri_complete}`);
|
|
52
|
+
console.log();
|
|
53
|
+
openBrowser(codeData.verification_uri_complete);
|
|
54
|
+
console.log("Waiting for authorization...");
|
|
55
|
+
const pollInterval = Math.max((codeData.interval || 5) * 1000, DEVICE_POLL_INTERVAL_MS);
|
|
56
|
+
const deadline = Date.now() + codeData.expires_in * 1000;
|
|
57
|
+
while (Date.now() < deadline) {
|
|
58
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
59
|
+
const tokenRes = await fetch(`${API_BASE}/api/auth/device/token`, {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: { "Content-Type": "application/json" },
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
64
|
+
device_code: codeData.device_code,
|
|
65
|
+
client_id: CLI_CLIENT_ID,
|
|
66
|
+
}),
|
|
67
|
+
});
|
|
68
|
+
if (tokenRes.ok) {
|
|
69
|
+
const tokenData = (await tokenRes.json());
|
|
70
|
+
// Device flow returns a session token
|
|
71
|
+
await setCredentials({
|
|
72
|
+
access_token: tokenData.access_token,
|
|
73
|
+
expires_at: Date.now() + tokenData.expires_in * 1000,
|
|
74
|
+
token_type: "session",
|
|
75
|
+
});
|
|
76
|
+
console.log("Authenticated successfully.");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const errData = (await tokenRes.json());
|
|
80
|
+
if (errData.error === "authorization_pending") {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (errData.error === "slow_down") {
|
|
84
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (errData.error === "access_denied") {
|
|
88
|
+
console.error("Authorization denied.");
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
if (errData.error === "expired_token") {
|
|
92
|
+
console.error("Device code expired. Please try again.");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
console.error(`Error: ${errData.error_description || errData.error}`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
console.error("Device code expired. Please try again.");
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
// ── Authorization Code Flow (--browser) ─────────────────────────────────────
|
|
102
|
+
function generatePKCE() {
|
|
103
|
+
const verifier = randomBytes(32)
|
|
104
|
+
.toString("base64url")
|
|
105
|
+
.slice(0, 43);
|
|
106
|
+
const challenge = createHash("sha256")
|
|
107
|
+
.update(verifier)
|
|
108
|
+
.digest("base64url");
|
|
109
|
+
return { verifier, challenge };
|
|
110
|
+
}
|
|
111
|
+
function startCallbackServer(port, resolve, reject) {
|
|
112
|
+
const server = createServer((req, res) => {
|
|
113
|
+
const url = new URL(req.url || "/", `http://127.0.0.1:${port}`);
|
|
114
|
+
if (url.pathname !== "/callback") {
|
|
115
|
+
res.writeHead(404);
|
|
116
|
+
res.end("Not found");
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const code = url.searchParams.get("code");
|
|
120
|
+
const state = url.searchParams.get("state");
|
|
121
|
+
const error = url.searchParams.get("error");
|
|
122
|
+
if (error) {
|
|
123
|
+
const desc = url.searchParams.get("error_description") || error;
|
|
124
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
125
|
+
res.end(`<html><body><h1>Authorization Failed</h1><p>${desc}</p><p>You can close this window.</p></body></html>`);
|
|
126
|
+
server.close();
|
|
127
|
+
reject(new Error(desc));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (!code || !state) {
|
|
131
|
+
res.writeHead(400, { "Content-Type": "text/html" });
|
|
132
|
+
res.end(`<html><body><h1>Missing parameters</h1><p>You can close this window.</p></body></html>`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
136
|
+
res.end(`<html><body><h1>Authenticated!</h1><p>You can close this window and return to the CLI.</p></body></html>`);
|
|
137
|
+
server.close();
|
|
138
|
+
resolve({ code, state });
|
|
139
|
+
});
|
|
140
|
+
server.listen(port, "127.0.0.1");
|
|
141
|
+
return server;
|
|
142
|
+
}
|
|
143
|
+
async function tryStartServer(resolve, reject) {
|
|
144
|
+
for (const port of CALLBACK_PORTS) {
|
|
145
|
+
try {
|
|
146
|
+
const server = startCallbackServer(port, resolve, reject);
|
|
147
|
+
await new Promise((res, rej) => {
|
|
148
|
+
server.once("listening", res);
|
|
149
|
+
server.once("error", rej);
|
|
150
|
+
});
|
|
151
|
+
return { server, port };
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
throw new Error(`Could not bind to any callback port (${CALLBACK_PORTS.join(", ")}). ` +
|
|
158
|
+
`Try the device flow instead: demofly auth login`);
|
|
159
|
+
}
|
|
160
|
+
async function authCodeFlow() {
|
|
161
|
+
const pkce = generatePKCE();
|
|
162
|
+
const state = randomBytes(16).toString("hex");
|
|
163
|
+
let callbackResult;
|
|
164
|
+
let resolveCallback;
|
|
165
|
+
let rejectCallback;
|
|
166
|
+
callbackResult = new Promise((resolve, reject) => {
|
|
167
|
+
resolveCallback = resolve;
|
|
168
|
+
rejectCallback = reject;
|
|
169
|
+
});
|
|
170
|
+
const { server, port } = await tryStartServer(resolveCallback, rejectCallback);
|
|
171
|
+
const redirectUri = `http://127.0.0.1:${port}/callback`;
|
|
172
|
+
const params = new URLSearchParams({
|
|
173
|
+
response_type: "code",
|
|
174
|
+
client_id: CLI_CLIENT_ID,
|
|
175
|
+
redirect_uri: redirectUri,
|
|
176
|
+
state,
|
|
177
|
+
scope: "openid profile email offline_access",
|
|
178
|
+
code_challenge: pkce.challenge,
|
|
179
|
+
code_challenge_method: "S256",
|
|
180
|
+
});
|
|
181
|
+
const authorizeUrl = `${API_BASE}/api/auth/oauth2/authorize?${params}`;
|
|
182
|
+
console.log("Opening browser for authorization...");
|
|
183
|
+
openBrowser(authorizeUrl);
|
|
184
|
+
console.log("Waiting for authorization...");
|
|
185
|
+
let result;
|
|
186
|
+
try {
|
|
187
|
+
result = await callbackResult;
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
server.close();
|
|
191
|
+
console.error(`Authorization failed: ${err.message}`);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
if (result.state !== state) {
|
|
195
|
+
console.error("State mismatch — possible CSRF attack.");
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
// Exchange code for tokens
|
|
199
|
+
const tokenRes = await fetch(`${API_BASE}/api/auth/oauth2/token`, {
|
|
200
|
+
method: "POST",
|
|
201
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
202
|
+
body: new URLSearchParams({
|
|
203
|
+
grant_type: "authorization_code",
|
|
204
|
+
code: result.code,
|
|
32
205
|
redirect_uri: redirectUri,
|
|
206
|
+
client_id: CLI_CLIENT_ID,
|
|
207
|
+
code_verifier: pkce.verifier,
|
|
33
208
|
}),
|
|
34
209
|
});
|
|
35
|
-
if (!
|
|
36
|
-
const
|
|
37
|
-
|
|
210
|
+
if (!tokenRes.ok) {
|
|
211
|
+
const text = await tokenRes.text();
|
|
212
|
+
console.error(`Token exchange failed: ${text}`);
|
|
213
|
+
process.exit(1);
|
|
38
214
|
}
|
|
39
|
-
const
|
|
40
|
-
|
|
215
|
+
const tokenData = (await tokenRes.json());
|
|
216
|
+
const creds = {
|
|
217
|
+
access_token: tokenData.access_token,
|
|
218
|
+
refresh_token: tokenData.refresh_token,
|
|
219
|
+
expires_at: Date.now() + tokenData.expires_in * 1000,
|
|
220
|
+
token_type: "oauth",
|
|
221
|
+
};
|
|
222
|
+
await setCredentials(creds);
|
|
223
|
+
console.log("Authenticated successfully.");
|
|
41
224
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
225
|
+
// ── Email OTP Flow (--otp, legacy) ─────────────────────────────────────────
|
|
226
|
+
async function otpFlow() {
|
|
227
|
+
const email = await prompt("Email: ");
|
|
228
|
+
if (!email) {
|
|
229
|
+
console.error("Email is required.");
|
|
230
|
+
process.exit(1);
|
|
48
231
|
}
|
|
49
|
-
|
|
50
|
-
|
|
232
|
+
console.log("Sending verification code...");
|
|
233
|
+
const sendRes = await fetch(`${API_BASE}/api/auth/email-otp/send-verification-otp`, {
|
|
234
|
+
method: "POST",
|
|
235
|
+
headers: { "Content-Type": "application/json" },
|
|
236
|
+
body: JSON.stringify({ email, type: "sign-in" }),
|
|
237
|
+
});
|
|
238
|
+
if (!sendRes.ok) {
|
|
239
|
+
const text = await sendRes.text();
|
|
240
|
+
console.error(`Failed to send verification code: ${text}`);
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
console.log(`Verification code sent to ${email}.`);
|
|
244
|
+
const otp = await prompt("Enter code: ");
|
|
245
|
+
if (!otp) {
|
|
246
|
+
console.error("Code is required.");
|
|
247
|
+
process.exit(1);
|
|
51
248
|
}
|
|
249
|
+
const signInRes = await fetch(`${API_BASE}/api/auth/sign-in/email-otp`, {
|
|
250
|
+
method: "POST",
|
|
251
|
+
headers: { "Content-Type": "application/json" },
|
|
252
|
+
body: JSON.stringify({ email, otp }),
|
|
253
|
+
});
|
|
254
|
+
if (!signInRes.ok) {
|
|
255
|
+
const text = await signInRes.text();
|
|
256
|
+
console.error(`Sign-in failed: ${text}`);
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
const data = (await signInRes.json());
|
|
260
|
+
const token = data.token ?? data.session?.token;
|
|
261
|
+
if (!token) {
|
|
262
|
+
const cookies = signInRes.headers.getSetCookie?.() ?? [];
|
|
263
|
+
const sessionCookie = cookies.find((c) => c.startsWith("better-auth.session_token="));
|
|
264
|
+
if (sessionCookie) {
|
|
265
|
+
const value = sessionCookie.split("=")[1]?.split(";")[0];
|
|
266
|
+
if (value) {
|
|
267
|
+
await setToken(value);
|
|
268
|
+
console.log("Authenticated successfully.");
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
console.error("Authentication succeeded but no session token was returned.");
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
await setToken(token);
|
|
276
|
+
console.log("Authenticated successfully.");
|
|
52
277
|
}
|
|
278
|
+
// ── Command Registration ───────────────────────────────────────────────────
|
|
53
279
|
export function registerLoginCommand(auth) {
|
|
54
280
|
auth
|
|
55
281
|
.command("login")
|
|
56
282
|
.description("Authenticate with demofly")
|
|
57
|
-
.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const redirectUri = `http://localhost:${port}/callback`;
|
|
70
|
-
const token = await exchangeCodeForToken(code, redirectUri);
|
|
71
|
-
await setToken(token);
|
|
72
|
-
res.writeHead(200, { "Content-Type": "text/html" });
|
|
73
|
-
res.end("<html><body><h2>Authenticated successfully.</h2><p>You can close this tab.</p></body></html>");
|
|
74
|
-
console.log("Authenticated successfully.");
|
|
75
|
-
}
|
|
76
|
-
catch (err) {
|
|
77
|
-
const message = err instanceof Error ? err.message : "Unknown error";
|
|
78
|
-
res.writeHead(500, { "Content-Type": "text/plain" });
|
|
79
|
-
res.end(`Authentication failed: ${message}`);
|
|
80
|
-
console.error(`Authentication failed: ${message}`);
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
clearTimeout(timeout);
|
|
84
|
-
server.close();
|
|
85
|
-
resolve();
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
const timeout = setTimeout(() => {
|
|
89
|
-
console.error("Authentication timed out. Try again with: demofly auth login");
|
|
90
|
-
server.close();
|
|
91
|
-
process.exit(1);
|
|
92
|
-
}, LOGIN_TIMEOUT_MS);
|
|
93
|
-
server.on("error", (err) => {
|
|
94
|
-
clearTimeout(timeout);
|
|
95
|
-
reject(new Error(`Failed to start auth server: ${err.message}`));
|
|
96
|
-
});
|
|
97
|
-
server.listen(0, () => {
|
|
98
|
-
const address = server.address();
|
|
99
|
-
const port = address && typeof address === "object" ? address.port : 0;
|
|
100
|
-
const redirectUri = `http://localhost:${port}/callback`;
|
|
101
|
-
const authorizeUrl = `${AUTH_BASE}/authorize?client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(redirectUri)}&response_type=code`;
|
|
102
|
-
console.log("Opening browser for authentication...");
|
|
103
|
-
openBrowser(authorizeUrl);
|
|
104
|
-
console.log("Waiting for authentication (timeout in 120s)...");
|
|
105
|
-
});
|
|
106
|
-
});
|
|
283
|
+
.option("--browser", "Use browser-based authorization code flow with PKCE")
|
|
284
|
+
.option("--otp", "Use email OTP flow (legacy)")
|
|
285
|
+
.action(async (options) => {
|
|
286
|
+
if (options.otp) {
|
|
287
|
+
await otpFlow();
|
|
288
|
+
}
|
|
289
|
+
else if (options.browser) {
|
|
290
|
+
await authCodeFlow();
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
await deviceCodeFlow();
|
|
294
|
+
}
|
|
107
295
|
});
|
|
108
296
|
}
|
|
109
297
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAsDzD"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import {} from "commander";
|
|
2
|
-
import { getTokenSource } from "../../lib/credentials.js";
|
|
2
|
+
import { getTokenSource, getCredentials } from "../../lib/credentials.js";
|
|
3
3
|
export function registerStatusCommand(auth) {
|
|
4
4
|
auth
|
|
5
5
|
.command("status")
|
|
6
6
|
.description("Show current authentication status")
|
|
7
7
|
.action(async () => {
|
|
8
8
|
const source = await getTokenSource();
|
|
9
|
+
if (!source) {
|
|
10
|
+
console.log("Not authenticated. Run: demofly auth login");
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const creds = await getCredentials();
|
|
9
14
|
switch (source) {
|
|
10
15
|
case "env":
|
|
11
16
|
console.log("Authenticated via DEMOFLY_TOKEN environment variable");
|
|
@@ -16,9 +21,28 @@ export function registerStatusCommand(auth) {
|
|
|
16
21
|
case "file":
|
|
17
22
|
console.log("Logged in (via config file)");
|
|
18
23
|
break;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
24
|
+
}
|
|
25
|
+
if (creds) {
|
|
26
|
+
const typeLabel = creds.token_type === "oauth" ? "OAuth access token" : "Session token";
|
|
27
|
+
console.log(` Token type: ${typeLabel}`);
|
|
28
|
+
if (creds.expires_at) {
|
|
29
|
+
const expiresAt = new Date(creds.expires_at);
|
|
30
|
+
const remaining = creds.expires_at - Date.now();
|
|
31
|
+
if (remaining <= 0) {
|
|
32
|
+
console.log(` Expires: expired`);
|
|
33
|
+
if (creds.refresh_token) {
|
|
34
|
+
console.log(` Refresh token: available (will auto-refresh)`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const mins = Math.floor(remaining / 60000);
|
|
39
|
+
const hours = Math.floor(mins / 60);
|
|
40
|
+
const timeStr = hours > 0
|
|
41
|
+
? `${hours}h ${mins % 60}m`
|
|
42
|
+
: `${mins}m`;
|
|
43
|
+
console.log(` Expires: ${expiresAt.toLocaleString()} (${timeStr} remaining)`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
22
46
|
}
|
|
23
47
|
});
|
|
24
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QAErC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,CAAC,GAAG,CACT,sDAAsD,CACvD,CAAC;gBACF,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBACxC,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,MAAM;QACV,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,SAAS,GACb,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;YAE1C,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEhD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBAClC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;wBACxB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;oBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;oBACpC,MAAM,OAAO,GACX,KAAK,GAAG,CAAC;wBACP,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG;wBAC3B,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,cAAc,EAAE,KAAK,OAAO,aAAa,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
export interface Credentials {
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token?: string;
|
|
4
|
+
expires_at?: number;
|
|
5
|
+
token_type: "session" | "oauth";
|
|
6
|
+
}
|
|
1
7
|
export declare function getToken(): Promise<string | null>;
|
|
8
|
+
export declare function getCredentials(): Promise<Credentials | null>;
|
|
2
9
|
export declare function setToken(token: string): Promise<void>;
|
|
10
|
+
export declare function setCredentials(creds: Credentials): Promise<void>;
|
|
3
11
|
export declare function deleteToken(): Promise<void>;
|
|
4
12
|
export declare function getTokenSource(): Promise<string | null>;
|
|
5
13
|
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC;CACjC;AA0KD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBvD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CASlE;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK7D"}
|
package/dist/lib/credentials.js
CHANGED
|
@@ -7,6 +7,9 @@ const KEYCHAIN_ACCOUNT = "demofly-token";
|
|
|
7
7
|
const CONFIG_DIR = join(homedir(), ".config", "demofly");
|
|
8
8
|
const CREDENTIALS_FILE = join(CONFIG_DIR, "credentials.json");
|
|
9
9
|
const ENV_VAR = "DEMOFLY_TOKEN";
|
|
10
|
+
const API_BASE = process.env.DEMOFLY_URL || "https://demofly.ai";
|
|
11
|
+
// Refresh when token expires within this window (5 minutes)
|
|
12
|
+
const REFRESH_WINDOW_MS = 5 * 60 * 1000;
|
|
10
13
|
function isMacOS() {
|
|
11
14
|
return process.platform === "darwin";
|
|
12
15
|
}
|
|
@@ -21,11 +24,11 @@ function tryKeychainRead() {
|
|
|
21
24
|
return null;
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
|
-
function tryKeychainWrite(
|
|
27
|
+
function tryKeychainWrite(value) {
|
|
25
28
|
if (!isMacOS())
|
|
26
29
|
return false;
|
|
27
30
|
try {
|
|
28
|
-
const result = spawnSync("security", ["add-generic-password", "-s", KEYCHAIN_SERVICE, "-a", KEYCHAIN_ACCOUNT, "-w",
|
|
31
|
+
const result = spawnSync("security", ["add-generic-password", "-s", KEYCHAIN_SERVICE, "-a", KEYCHAIN_ACCOUNT, "-w", value, "-U"], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
29
32
|
return result.status === 0;
|
|
30
33
|
}
|
|
31
34
|
catch {
|
|
@@ -46,19 +49,15 @@ function tryFileRead() {
|
|
|
46
49
|
try {
|
|
47
50
|
if (!existsSync(CREDENTIALS_FILE))
|
|
48
51
|
return null;
|
|
49
|
-
|
|
50
|
-
const data = JSON.parse(raw);
|
|
51
|
-
return data.token ?? null;
|
|
52
|
+
return readFileSync(CREDENTIALS_FILE, "utf-8");
|
|
52
53
|
}
|
|
53
54
|
catch {
|
|
54
55
|
return null;
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
function writeFile(
|
|
58
|
+
function writeFile(value) {
|
|
58
59
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
59
|
-
writeFileSync(CREDENTIALS_FILE,
|
|
60
|
-
mode: 0o600,
|
|
61
|
-
});
|
|
60
|
+
writeFileSync(CREDENTIALS_FILE, value + "\n", { mode: 0o600 });
|
|
62
61
|
}
|
|
63
62
|
function deleteFile() {
|
|
64
63
|
try {
|
|
@@ -70,22 +69,128 @@ function deleteFile() {
|
|
|
70
69
|
// File may already be gone; ignore
|
|
71
70
|
}
|
|
72
71
|
}
|
|
72
|
+
function serializeCredentials(creds) {
|
|
73
|
+
// Compact JSON (no newlines) — macOS Keychain returns hex when
|
|
74
|
+
// the stored value contains non-printable characters like \n
|
|
75
|
+
return JSON.stringify(creds);
|
|
76
|
+
}
|
|
77
|
+
function parseCredentials(raw) {
|
|
78
|
+
try {
|
|
79
|
+
const data = JSON.parse(raw);
|
|
80
|
+
// New structured format
|
|
81
|
+
if (data.access_token) {
|
|
82
|
+
return {
|
|
83
|
+
access_token: data.access_token,
|
|
84
|
+
refresh_token: data.refresh_token,
|
|
85
|
+
expires_at: data.expires_at,
|
|
86
|
+
token_type: data.token_type || "session",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Legacy format: { token: "..." }
|
|
90
|
+
if (data.token) {
|
|
91
|
+
return { access_token: data.token, token_type: "session" };
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function readStoredCredentials() {
|
|
100
|
+
// Try keychain first
|
|
101
|
+
const keychainRaw = tryKeychainRead();
|
|
102
|
+
if (keychainRaw) {
|
|
103
|
+
// Keychain may hold a plain token (legacy) or JSON credentials
|
|
104
|
+
const creds = parseCredentials(keychainRaw);
|
|
105
|
+
if (creds)
|
|
106
|
+
return creds;
|
|
107
|
+
// Legacy: raw token string in keychain
|
|
108
|
+
return { access_token: keychainRaw, token_type: "session" };
|
|
109
|
+
}
|
|
110
|
+
// Try file
|
|
111
|
+
const fileRaw = tryFileRead();
|
|
112
|
+
if (fileRaw) {
|
|
113
|
+
const creds = parseCredentials(fileRaw);
|
|
114
|
+
if (creds)
|
|
115
|
+
return creds;
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
function writeStoredCredentials(creds) {
|
|
120
|
+
const serialized = serializeCredentials(creds);
|
|
121
|
+
const stored = tryKeychainWrite(serialized);
|
|
122
|
+
if (!stored) {
|
|
123
|
+
writeFile(serialized);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function refreshOAuthToken(creds) {
|
|
127
|
+
if (!creds.refresh_token)
|
|
128
|
+
return null;
|
|
129
|
+
try {
|
|
130
|
+
const res = await fetch(`${API_BASE}/api/auth/oauth2/token`, {
|
|
131
|
+
method: "POST",
|
|
132
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
133
|
+
body: new URLSearchParams({
|
|
134
|
+
grant_type: "refresh_token",
|
|
135
|
+
refresh_token: creds.refresh_token,
|
|
136
|
+
client_id: "demofly-cli",
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
if (!res.ok)
|
|
140
|
+
return null;
|
|
141
|
+
const data = await res.json();
|
|
142
|
+
const newCreds = {
|
|
143
|
+
access_token: data.access_token,
|
|
144
|
+
refresh_token: data.refresh_token ?? creds.refresh_token,
|
|
145
|
+
expires_at: data.expires_in
|
|
146
|
+
? Date.now() + data.expires_in * 1000
|
|
147
|
+
: undefined,
|
|
148
|
+
token_type: "oauth",
|
|
149
|
+
};
|
|
150
|
+
writeStoredCredentials(newCreds);
|
|
151
|
+
return newCreds;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
73
157
|
export async function getToken() {
|
|
74
158
|
if (process.env.DF_DEV_AUTH_BYPASS === "true")
|
|
75
159
|
return "dev-bypass";
|
|
76
160
|
const envToken = process.env[ENV_VAR];
|
|
77
161
|
if (envToken)
|
|
78
162
|
return envToken;
|
|
79
|
-
const
|
|
80
|
-
if (
|
|
81
|
-
return
|
|
82
|
-
|
|
163
|
+
const creds = readStoredCredentials();
|
|
164
|
+
if (!creds)
|
|
165
|
+
return null;
|
|
166
|
+
// Auto-refresh OAuth tokens nearing expiry
|
|
167
|
+
if (creds.token_type === "oauth" &&
|
|
168
|
+
creds.expires_at &&
|
|
169
|
+
creds.expires_at - Date.now() < REFRESH_WINDOW_MS) {
|
|
170
|
+
const refreshed = await refreshOAuthToken(creds);
|
|
171
|
+
if (refreshed)
|
|
172
|
+
return refreshed.access_token;
|
|
173
|
+
// If refresh failed but token isn't actually expired yet, use it
|
|
174
|
+
if (creds.expires_at > Date.now())
|
|
175
|
+
return creds.access_token;
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
return creds.access_token;
|
|
83
179
|
}
|
|
84
|
-
export async function
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
writeFile(token);
|
|
180
|
+
export async function getCredentials() {
|
|
181
|
+
if (process.env.DF_DEV_AUTH_BYPASS === "true") {
|
|
182
|
+
return { access_token: "dev-bypass", token_type: "session" };
|
|
88
183
|
}
|
|
184
|
+
const envToken = process.env[ENV_VAR];
|
|
185
|
+
if (envToken)
|
|
186
|
+
return { access_token: envToken, token_type: "session" };
|
|
187
|
+
return readStoredCredentials();
|
|
188
|
+
}
|
|
189
|
+
export async function setToken(token) {
|
|
190
|
+
writeStoredCredentials({ access_token: token, token_type: "session" });
|
|
191
|
+
}
|
|
192
|
+
export async function setCredentials(creds) {
|
|
193
|
+
writeStoredCredentials(creds);
|
|
89
194
|
}
|
|
90
195
|
export async function deleteToken() {
|
|
91
196
|
tryKeychainDelete();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACnC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AACzC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,eAAe,CAAC;AAEhC,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CACpB,qCAAqC,gBAAgB,OAAO,gBAAgB,KAAK,EACjF,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACvD,CAAC,IAAI,EAAE,CAAC;QACT,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,KAAK,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CACtB,UAAU,EACV,CAAC,sBAAsB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAC3F,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACvD,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO;IAEvB,IAAI,CAAC;QACH,QAAQ,CACN,uCAAuC,gBAAgB,OAAO,gBAAgB,EAAE,EAChF,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACvD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "demofly",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "CLI for demofly — automated demo video generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"test:watch": "vitest"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
+
"@playwright/test": "^1.58.2",
|
|
26
27
|
"commander": "^13.0.0",
|
|
27
28
|
"sherpa-onnx-node": "^1.12.25"
|
|
28
29
|
},
|