@mintlify/cli 4.0.1070 → 4.0.1072
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/bin/cli.js +10 -0
- package/bin/keyring.js +34 -0
- package/bin/login.js +2 -0
- package/bin/logout.js +19 -0
- package/bin/status.js +49 -0
- package/bin/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +12 -9
- package/src/cli.tsx +20 -0
- package/src/keyring.ts +23 -0
- package/src/login.tsx +3 -0
- package/src/logout.tsx +9 -0
- package/src/status.tsx +50 -0
package/bin/cli.js
CHANGED
|
@@ -21,9 +21,11 @@ import { setTelemetryEnabled } from './config.js';
|
|
|
21
21
|
import { checkPort, checkNodeVersion, autoUpgradeIfNeeded, getVersions, suppressConsoleWarnings, terminate, readLocalOpenApiFile, } from './helpers.js';
|
|
22
22
|
import { init } from './init.js';
|
|
23
23
|
import { login } from './login.js';
|
|
24
|
+
import { logout } from './logout.js';
|
|
24
25
|
import { mdxLinter } from './mdxLinter.js';
|
|
25
26
|
import { migrateMdx } from './migrateMdx.js';
|
|
26
27
|
import { scrapeSite, scrapePage, scrapeOpenApi } from './scrape.js';
|
|
28
|
+
import { status } from './status.js';
|
|
27
29
|
import { createTelemetryMiddleware } from './telemetry/middleware.js';
|
|
28
30
|
import { trackTelemetryPreferenceChange } from './telemetry/track.js';
|
|
29
31
|
import { update } from './update.js';
|
|
@@ -278,6 +280,14 @@ export const cli = ({ packageName = 'mint' }) => {
|
|
|
278
280
|
yield autoUpgradeIfNeeded();
|
|
279
281
|
yield renameFilesAndUpdateLinksInContent(from, to, force);
|
|
280
282
|
yield terminate(0);
|
|
283
|
+
}))
|
|
284
|
+
.command('status', false, () => undefined, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
285
|
+
yield status();
|
|
286
|
+
yield terminate(0);
|
|
287
|
+
}))
|
|
288
|
+
.command('logout', false, () => undefined, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
289
|
+
yield logout();
|
|
290
|
+
yield terminate(0);
|
|
281
291
|
}))
|
|
282
292
|
.command('login', false, () => undefined, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
283
293
|
yield login();
|
package/bin/keyring.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import keytar from 'keytar';
|
|
11
|
+
const SERVICE = 'mintlify';
|
|
12
|
+
const ACCESS_TOKEN_ACCOUNT = 'access_token';
|
|
13
|
+
const REFRESH_TOKEN_ACCOUNT = 'refresh_token';
|
|
14
|
+
export function storeCredentials(accessToken, refreshToken) {
|
|
15
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
yield Promise.all([
|
|
17
|
+
keytar.setPassword(SERVICE, ACCESS_TOKEN_ACCOUNT, accessToken),
|
|
18
|
+
keytar.setPassword(SERVICE, REFRESH_TOKEN_ACCOUNT, refreshToken),
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function getAccessToken() {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
return keytar.getPassword(SERVICE, ACCESS_TOKEN_ACCOUNT);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export function clearCredentials() {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
yield Promise.all([
|
|
30
|
+
keytar.deletePassword(SERVICE, ACCESS_TOKEN_ACCOUNT),
|
|
31
|
+
keytar.deletePassword(SERVICE, REFRESH_TOKEN_ACCOUNT),
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
}
|
package/bin/login.js
CHANGED
|
@@ -13,6 +13,7 @@ import { addLog } from '@mintlify/previewing';
|
|
|
13
13
|
import { Text } from 'ink';
|
|
14
14
|
import { calculatePKCECodeChallenge, randomNonce, randomPKCECodeVerifier, randomState, } from 'openid-client';
|
|
15
15
|
import { DASHBOARD_URL, STYTCH_CLIENT_ID, TOKEN_ENDPOINT } from './constants.js';
|
|
16
|
+
import { storeCredentials } from './keyring.js';
|
|
16
17
|
export function login() {
|
|
17
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
18
19
|
var _a, _b;
|
|
@@ -43,6 +44,7 @@ export function login() {
|
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
const token = body;
|
|
47
|
+
yield storeCredentials(token.access_token, token.refresh_token);
|
|
46
48
|
addLog(_jsx(Text, { color: "green", children: "Logged in successfully." }));
|
|
47
49
|
});
|
|
48
50
|
}
|
package/bin/logout.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { addLog } from '@mintlify/previewing';
|
|
12
|
+
import { Text } from 'ink';
|
|
13
|
+
import { clearCredentials } from './keyring.js';
|
|
14
|
+
export function logout() {
|
|
15
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
yield clearCredentials();
|
|
17
|
+
addLog(_jsx(Text, { color: "green", children: "Logged out successfully." }));
|
|
18
|
+
});
|
|
19
|
+
}
|
package/bin/status.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var _a;
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { addLog } from '@mintlify/previewing';
|
|
13
|
+
import { Text } from 'ink';
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { getAccessToken } from './keyring.js';
|
|
16
|
+
const API_URL = (_a = process.env.MINTLIFY_API_URL) !== null && _a !== void 0 ? _a : 'http://localhost:5000';
|
|
17
|
+
const StatusResponseSchema = z.object({
|
|
18
|
+
user: z.object({ email: z.string() }),
|
|
19
|
+
org: z.object({ name: z.string() }),
|
|
20
|
+
});
|
|
21
|
+
export function status() {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
const accessToken = yield getAccessToken();
|
|
24
|
+
if (!accessToken) {
|
|
25
|
+
addLog(_jsx(Text, { color: "red", children: "Not logged in. Run `mint login` to authenticate." }));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const res = yield fetch(`${API_URL}/api/cli/status`, {
|
|
30
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
31
|
+
});
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
addLog(_jsx(Text, { color: "red", children: "Not logged in. Run `mint login` to authenticate." }));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const json = yield res.json().catch(() => null);
|
|
37
|
+
const parsed = StatusResponseSchema.safeParse(json);
|
|
38
|
+
if (!parsed.success) {
|
|
39
|
+
addLog(_jsx(Text, { color: "red", children: "Unexpected response from server. Please try again." }));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const { user, org } = parsed.data;
|
|
43
|
+
addLog(_jsxs(Text, { children: ["Logged in as ", _jsx(Text, { color: "green", children: user.email }), " in org", ' ', _jsx(Text, { color: "green", children: org.name })] }));
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
addLog(_jsx(Text, { color: "red", children: "Unexpected response from server. Please try again." }));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|