@kingslanding/cli 0.3.2 → 0.5.0
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/login.d.ts +57 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +108 -12
- package/dist/commands/login.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +2 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/config.d.ts +31 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +59 -13
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/qr.d.ts +9 -0
- package/dist/lib/qr.d.ts.map +1 -0
- package/dist/lib/qr.js +16 -0
- package/dist/lib/qr.js.map +1 -0
- package/dist/services/auth-service.d.ts +1 -1
- package/dist/services/auth-service.d.ts.map +1 -1
- package/dist/services/auth-service.js +2 -2
- package/dist/services/auth-service.js.map +1 -1
- package/package.json +4 -2
package/dist/commands/login.d.ts
CHANGED
|
@@ -1,3 +1,60 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
|
+
import type { LoginPreferences } from "../lib/config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pick the URL to open: the code-embedded (complete) URL when the server
|
|
5
|
+
* provides it, otherwise the plain verification URI (older server).
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveVerificationTarget(verificationUri: string, verificationUriComplete: string | undefined): string;
|
|
8
|
+
/**
|
|
9
|
+
* A session is "headless" when there's no local browser to open — over SSH,
|
|
10
|
+
* or on Linux with no display server. In that case the QR (scanned from a
|
|
11
|
+
* phone) is the primary path rather than redundant with an auto-opened browser.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isHeadlessSession(env: NodeJS.ProcessEnv, platform: NodeJS.Platform): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Merge command-line flags with persisted config into effective preferences.
|
|
16
|
+
* Precedence: an explicit flag wins, then persisted config, then the default.
|
|
17
|
+
* `--no-browser` (browserFlag=false) and `--qr` (qrFlag=true) are the only
|
|
18
|
+
* flags, so a flag can force the browser off or the QR on; config supplies the
|
|
19
|
+
* default for whichever flag wasn't passed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveLoginPreferences(flags: {
|
|
22
|
+
browserFlag: boolean;
|
|
23
|
+
qrFlag: boolean;
|
|
24
|
+
}, config: LoginPreferences): {
|
|
25
|
+
noBrowser: boolean;
|
|
26
|
+
qr: boolean;
|
|
27
|
+
};
|
|
28
|
+
export interface LoginDisplay {
|
|
29
|
+
openBrowser: boolean;
|
|
30
|
+
showQr: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Decide whether to auto-open a browser and whether to render the QR.
|
|
34
|
+
*
|
|
35
|
+
* We open a browser unless the user opted out (`--no-browser`) or there's
|
|
36
|
+
* none to open (headless). We show the QR whenever we're NOT auto-opening a
|
|
37
|
+
* browser (so the user has a scannable path), or when explicitly forced
|
|
38
|
+
* (`--qr`). On a normal desktop the QR is hidden — it would just duplicate
|
|
39
|
+
* the browser that already opened pre-filled.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveLoginDisplay(opts: {
|
|
42
|
+
noBrowser: boolean;
|
|
43
|
+
qr: boolean;
|
|
44
|
+
headless: boolean;
|
|
45
|
+
}): LoginDisplay;
|
|
46
|
+
/**
|
|
47
|
+
* Build the login prompt, adapting the wording to what actually happens:
|
|
48
|
+
* automatic framing ("Opening your browser…") when we open it, manual framing
|
|
49
|
+
* ("visit this URL / scan this") when we don't. In browser mode the code isn't
|
|
50
|
+
* repeated — it's already visible in the URL and pre-filled on the page. In
|
|
51
|
+
* manual mode it's shown as a clean token for typing.
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatLoginMessage(args: {
|
|
54
|
+
userCode: string;
|
|
55
|
+
target: string;
|
|
56
|
+
openBrowser: boolean;
|
|
57
|
+
qr: string | null;
|
|
58
|
+
}): string;
|
|
2
59
|
export declare function registerLoginCommand(program: Command): void;
|
|
3
60
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAezD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,MAAM,EACvB,uBAAuB,EAAE,MAAM,GAAG,SAAS,GAC1C,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAI5F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAChD,MAAM,EAAE,gBAAgB,GACvB;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAIrC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,YAAY,CAIf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACnB,GAAG,MAAM,CA0BT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgF3D"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,20 +1,101 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
2
|
import { ApiClient } from "../lib/api.js";
|
|
3
|
-
import { resolveApiUrl, isLocalMode } from "../lib/config.js";
|
|
4
|
-
import { getAuthHeader, loadCredentials, isTokenExpiringSoon
|
|
3
|
+
import { resolveApiUrl, isLocalMode, loadGlobalConfig } from "../lib/config.js";
|
|
4
|
+
import { getAuthHeader, loadCredentials, isTokenExpiringSoon } from "../lib/auth.js";
|
|
5
5
|
import { createSpinner } from "../lib/output.js";
|
|
6
|
+
import { renderQrCode } from "../lib/qr.js";
|
|
6
7
|
import { AuthService } from "../services/auth-service.js";
|
|
7
8
|
function tryOpenBrowser(url) {
|
|
8
9
|
const cmd = process.platform === "darwin" ? "open" : "xdg-open";
|
|
9
|
-
|
|
10
|
+
// execFile (no shell) passes the URL as a single argv element, so a
|
|
11
|
+
// server-provided URL can't inject shell metacharacters.
|
|
12
|
+
execFile(cmd, [url], () => {
|
|
10
13
|
// Silent failure — user can copy/paste the URL
|
|
11
14
|
});
|
|
12
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Pick the URL to open: the code-embedded (complete) URL when the server
|
|
18
|
+
* provides it, otherwise the plain verification URI (older server).
|
|
19
|
+
*/
|
|
20
|
+
export function resolveVerificationTarget(verificationUri, verificationUriComplete) {
|
|
21
|
+
return verificationUriComplete ?? verificationUri;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A session is "headless" when there's no local browser to open — over SSH,
|
|
25
|
+
* or on Linux with no display server. In that case the QR (scanned from a
|
|
26
|
+
* phone) is the primary path rather than redundant with an auto-opened browser.
|
|
27
|
+
*/
|
|
28
|
+
export function isHeadlessSession(env, platform) {
|
|
29
|
+
if (env.SSH_CONNECTION || env.SSH_TTY)
|
|
30
|
+
return true;
|
|
31
|
+
if (platform === "linux" && !env.DISPLAY && !env.WAYLAND_DISPLAY)
|
|
32
|
+
return true;
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Merge command-line flags with persisted config into effective preferences.
|
|
37
|
+
* Precedence: an explicit flag wins, then persisted config, then the default.
|
|
38
|
+
* `--no-browser` (browserFlag=false) and `--qr` (qrFlag=true) are the only
|
|
39
|
+
* flags, so a flag can force the browser off or the QR on; config supplies the
|
|
40
|
+
* default for whichever flag wasn't passed.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveLoginPreferences(flags, config) {
|
|
43
|
+
const noBrowser = flags.browserFlag === false || config.browser === false;
|
|
44
|
+
const qr = flags.qrFlag || config.qr === true;
|
|
45
|
+
return { noBrowser, qr };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Decide whether to auto-open a browser and whether to render the QR.
|
|
49
|
+
*
|
|
50
|
+
* We open a browser unless the user opted out (`--no-browser`) or there's
|
|
51
|
+
* none to open (headless). We show the QR whenever we're NOT auto-opening a
|
|
52
|
+
* browser (so the user has a scannable path), or when explicitly forced
|
|
53
|
+
* (`--qr`). On a normal desktop the QR is hidden — it would just duplicate
|
|
54
|
+
* the browser that already opened pre-filled.
|
|
55
|
+
*/
|
|
56
|
+
export function resolveLoginDisplay(opts) {
|
|
57
|
+
const openBrowser = !opts.noBrowser && !opts.headless;
|
|
58
|
+
const showQr = opts.qr || !openBrowser;
|
|
59
|
+
return { openBrowser, showQr };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build the login prompt, adapting the wording to what actually happens:
|
|
63
|
+
* automatic framing ("Opening your browser…") when we open it, manual framing
|
|
64
|
+
* ("visit this URL / scan this") when we don't. In browser mode the code isn't
|
|
65
|
+
* repeated — it's already visible in the URL and pre-filled on the page. In
|
|
66
|
+
* manual mode it's shown as a clean token for typing.
|
|
67
|
+
*/
|
|
68
|
+
export function formatLoginMessage(args) {
|
|
69
|
+
const { userCode, target, openBrowser, qr } = args;
|
|
70
|
+
const lines = [];
|
|
71
|
+
if (openBrowser) {
|
|
72
|
+
lines.push("Opening your browser to authorize this device…");
|
|
73
|
+
lines.push("");
|
|
74
|
+
lines.push(" Didn't open? Visit:");
|
|
75
|
+
lines.push(" " + target);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
lines.push("To authorize this device, visit:");
|
|
79
|
+
lines.push(" " + target);
|
|
80
|
+
}
|
|
81
|
+
if (qr) {
|
|
82
|
+
lines.push("");
|
|
83
|
+
lines.push("Or scan with your phone:");
|
|
84
|
+
lines.push(qr);
|
|
85
|
+
}
|
|
86
|
+
if (!openBrowser) {
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push(`Verification code: ${userCode}`);
|
|
89
|
+
}
|
|
90
|
+
return lines.join("\n");
|
|
91
|
+
}
|
|
13
92
|
export function registerLoginCommand(program) {
|
|
14
93
|
program
|
|
15
94
|
.command("login")
|
|
16
95
|
.description("Authenticate with King's Landing")
|
|
17
|
-
.
|
|
96
|
+
.option("--no-browser", "Don't open the browser automatically; show a QR to scan instead")
|
|
97
|
+
.option("--qr", "Always show a QR code, even when the browser opens")
|
|
98
|
+
.action(async (options) => {
|
|
18
99
|
const apiUrl = resolveApiUrl();
|
|
19
100
|
if (isLocalMode(apiUrl)) {
|
|
20
101
|
console.log("Local mode — no login required.");
|
|
@@ -35,15 +116,30 @@ export function registerLoginCommand(program) {
|
|
|
35
116
|
const authHeader = getAuthHeader(apiUrl);
|
|
36
117
|
const api = new ApiClient(apiUrl, authHeader);
|
|
37
118
|
const authService = new AuthService(api, apiUrl);
|
|
38
|
-
const spinner = createSpinner("Waiting for
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
119
|
+
const spinner = createSpinner("Waiting for authorization…");
|
|
120
|
+
const prefs = resolveLoginPreferences({ browserFlag: options.browser, qrFlag: options.qr ?? false }, loadGlobalConfig().login ?? {});
|
|
121
|
+
const display = resolveLoginDisplay({
|
|
122
|
+
noBrowser: prefs.noBrowser,
|
|
123
|
+
qr: prefs.qr,
|
|
124
|
+
headless: isHeadlessSession(process.env, process.platform),
|
|
125
|
+
});
|
|
126
|
+
await authService.login((userCode, verificationUri, verificationUriComplete) => {
|
|
127
|
+
const target = resolveVerificationTarget(verificationUri, verificationUriComplete);
|
|
128
|
+
let qr = null;
|
|
129
|
+
if (display.showQr) {
|
|
130
|
+
try {
|
|
131
|
+
qr = renderQrCode(target);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// QR is a convenience — never block login on a render failure
|
|
135
|
+
}
|
|
136
|
+
}
|
|
43
137
|
console.log();
|
|
44
|
-
console.log(
|
|
138
|
+
console.log(formatLoginMessage({ userCode, target, openBrowser: display.openBrowser, qr }));
|
|
45
139
|
console.log();
|
|
46
|
-
|
|
140
|
+
if (display.openBrowser) {
|
|
141
|
+
tryOpenBrowser(target);
|
|
142
|
+
}
|
|
47
143
|
spinner.start();
|
|
48
144
|
});
|
|
49
145
|
spinner.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,9 @@ import { registerWhoamiCommand } from "./commands/whoami.js";
|
|
|
9
9
|
import { registerDeployKeyCommand } from "./commands/deploy-key.js";
|
|
10
10
|
import { CLIError } from "./lib/errors.js";
|
|
11
11
|
import { checkCredentialPermissions } from "./lib/auth.js";
|
|
12
|
+
import { migrateLegacyConfigDir } from "./lib/config.js";
|
|
12
13
|
import { getVersion } from "./lib/version.js";
|
|
14
|
+
migrateLegacyConfigDir();
|
|
13
15
|
const warning = checkCredentialPermissions();
|
|
14
16
|
if (warning)
|
|
15
17
|
console.warn(warning);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;AAC7C,IAAI,OAAO;IAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAE9F,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,sBAAsB,EAAE,CAAC;AAEzB,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;AAC7C,IAAI,OAAO;IAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAE9F,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -60,7 +60,8 @@ export interface DeployKeyStatusResponse {
|
|
|
60
60
|
export interface DeviceCodeResponse {
|
|
61
61
|
device_code: string;
|
|
62
62
|
user_code: string;
|
|
63
|
-
|
|
63
|
+
verification_uri: string;
|
|
64
|
+
verification_uri_complete?: string;
|
|
64
65
|
expires_in: number;
|
|
65
66
|
}
|
|
66
67
|
export interface DeviceTokenResponse {
|
package/dist/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAChD;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,UAAU;gBADD,OAAO,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GAAG,IAAI;IAGnC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAI/C,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,9 +1,40 @@
|
|
|
1
|
+
/** Pre-XDG location; migrated to {@link KL_DIR} on first run. */
|
|
2
|
+
export declare const LEGACY_KL_DIR: string;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve kl's config/state directory following the XDG Base Directory Spec:
|
|
5
|
+
* `$XDG_CONFIG_HOME/kl`, defaulting to `~/.config/kl`. Per the spec, a
|
|
6
|
+
* non-absolute `$XDG_CONFIG_HOME` is invalid and ignored. Both `config.json`
|
|
7
|
+
* and `credentials.json` live here (single-dir model, like GitHub's `gh`).
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveKlDir(env?: NodeJS.ProcessEnv): string;
|
|
1
10
|
export declare const KL_DIR: string;
|
|
11
|
+
/**
|
|
12
|
+
* One-time migration of the legacy `~/.kl` directory to {@link KL_DIR}. Runs at
|
|
13
|
+
* CLI startup. No-op if the legacy dir is absent or the new dir already exists,
|
|
14
|
+
* so it never clobbers current config. Best-effort: a failure warns rather than
|
|
15
|
+
* crashing, since the user can always re-authenticate with `kl login`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function migrateLegacyConfigDir(legacyDir?: string, newDir?: string): void;
|
|
2
18
|
export interface ProjectConfig {
|
|
3
19
|
project: string;
|
|
4
20
|
directory: string;
|
|
5
21
|
api_url?: string;
|
|
6
22
|
}
|
|
23
|
+
export interface LoginPreferences {
|
|
24
|
+
/** Whether `kl login` auto-opens the browser (default true). */
|
|
25
|
+
browser?: boolean;
|
|
26
|
+
/** Whether `kl login` always renders the QR code (default false / auto). */
|
|
27
|
+
qr?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface GlobalConfig {
|
|
30
|
+
api_url?: string;
|
|
31
|
+
login?: LoginPreferences;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Load the global config from `<dir>/config.json` (default `~/.config/kl`). Returns an
|
|
35
|
+
* empty object when the file is missing or malformed — config is always optional.
|
|
36
|
+
*/
|
|
37
|
+
export declare function loadGlobalConfig(dir?: string): GlobalConfig;
|
|
7
38
|
export declare function resolveApiUrl(cwd?: string): string;
|
|
8
39
|
export declare function loadProjectConfig(cwd: string): ProjectConfig | null;
|
|
9
40
|
export declare function writeProjectConfig(cwd: string, config: Pick<ProjectConfig, "project" | "directory">): void;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,iEAAiE;AACjE,eAAO,MAAM,aAAa,QAAiC,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIzE;AAED,eAAO,MAAM,MAAM,QAAiB,CAAC;AAErC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,GAAE,MAAsB,EACjC,MAAM,GAAE,MAAe,GACtB,IAAI,CAmBN;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAe,GAAG,YAAY,CAQnE;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAalD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAyBnE;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,WAAW,CAAC,GACnD,IAAI,CAGN;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnE"}
|
package/dist/lib/config.js
CHANGED
|
@@ -3,7 +3,62 @@ import * as path from "node:path";
|
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
const DEFAULT_API_URL = "https://api.kingslanding.io";
|
|
5
5
|
const LOCAL_API_URL = "https://api.kl.test";
|
|
6
|
-
|
|
6
|
+
/** Pre-XDG location; migrated to {@link KL_DIR} on first run. */
|
|
7
|
+
export const LEGACY_KL_DIR = path.join(os.homedir(), ".kl");
|
|
8
|
+
/**
|
|
9
|
+
* Resolve kl's config/state directory following the XDG Base Directory Spec:
|
|
10
|
+
* `$XDG_CONFIG_HOME/kl`, defaulting to `~/.config/kl`. Per the spec, a
|
|
11
|
+
* non-absolute `$XDG_CONFIG_HOME` is invalid and ignored. Both `config.json`
|
|
12
|
+
* and `credentials.json` live here (single-dir model, like GitHub's `gh`).
|
|
13
|
+
*/
|
|
14
|
+
export function resolveKlDir(env = process.env) {
|
|
15
|
+
const xdg = env.XDG_CONFIG_HOME;
|
|
16
|
+
const base = xdg && path.isAbsolute(xdg) ? xdg : path.join(os.homedir(), ".config");
|
|
17
|
+
return path.join(base, "kl");
|
|
18
|
+
}
|
|
19
|
+
export const KL_DIR = resolveKlDir();
|
|
20
|
+
/**
|
|
21
|
+
* One-time migration of the legacy `~/.kl` directory to {@link KL_DIR}. Runs at
|
|
22
|
+
* CLI startup. No-op if the legacy dir is absent or the new dir already exists,
|
|
23
|
+
* so it never clobbers current config. Best-effort: a failure warns rather than
|
|
24
|
+
* crashing, since the user can always re-authenticate with `kl login`.
|
|
25
|
+
*/
|
|
26
|
+
export function migrateLegacyConfigDir(legacyDir = LEGACY_KL_DIR, newDir = KL_DIR) {
|
|
27
|
+
if (legacyDir === newDir)
|
|
28
|
+
return;
|
|
29
|
+
if (!fs.existsSync(legacyDir) || fs.existsSync(newDir))
|
|
30
|
+
return;
|
|
31
|
+
try {
|
|
32
|
+
fs.mkdirSync(path.dirname(newDir), { recursive: true });
|
|
33
|
+
fs.renameSync(legacyDir, newDir);
|
|
34
|
+
console.warn("Migrated kl config from " + legacyDir + " to " + newDir);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
38
|
+
console.warn("Warning: could not migrate " +
|
|
39
|
+
legacyDir +
|
|
40
|
+
" to " +
|
|
41
|
+
newDir +
|
|
42
|
+
" (" +
|
|
43
|
+
reason +
|
|
44
|
+
"). Run 'kl login' to re-authenticate.");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load the global config from `<dir>/config.json` (default `~/.config/kl`). Returns an
|
|
49
|
+
* empty object when the file is missing or malformed — config is always optional.
|
|
50
|
+
*/
|
|
51
|
+
export function loadGlobalConfig(dir = KL_DIR) {
|
|
52
|
+
const configPath = path.join(dir, "config.json");
|
|
53
|
+
if (!fs.existsSync(configPath))
|
|
54
|
+
return {};
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
7
62
|
export function resolveApiUrl(cwd) {
|
|
8
63
|
const resolvedCwd = cwd ?? process.cwd();
|
|
9
64
|
const envUrl = process.env.KL_API_URL;
|
|
@@ -12,18 +67,9 @@ export function resolveApiUrl(cwd) {
|
|
|
12
67
|
const config = loadProjectConfig(resolvedCwd);
|
|
13
68
|
if (config?.api_url)
|
|
14
69
|
return config.api_url;
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
const raw = fs.readFileSync(globalConfigPath, "utf-8");
|
|
19
|
-
const globalConfig = JSON.parse(raw);
|
|
20
|
-
if (globalConfig.api_url)
|
|
21
|
-
return globalConfig.api_url;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
// Ignore malformed global config
|
|
25
|
-
}
|
|
26
|
-
}
|
|
70
|
+
const globalConfig = loadGlobalConfig();
|
|
71
|
+
if (globalConfig.api_url)
|
|
72
|
+
return globalConfig.api_url;
|
|
27
73
|
return DEFAULT_API_URL;
|
|
28
74
|
}
|
|
29
75
|
export function loadProjectConfig(cwd) {
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,eAAe,GAAG,6BAA6B,CAAC;AACtD,MAAM,aAAa,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/qr.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render `text` as a compact ASCII QR code string.
|
|
3
|
+
*
|
|
4
|
+
* qrcode-terminal invokes the callback synchronously, so we capture the
|
|
5
|
+
* output and return it rather than letting the library print directly —
|
|
6
|
+
* this keeps rendering testable and lets the caller control output.
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderQrCode(text: string): string;
|
|
9
|
+
//# sourceMappingURL=qr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../../src/lib/qr.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD"}
|
package/dist/lib/qr.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import qrcode from "qrcode-terminal";
|
|
2
|
+
/**
|
|
3
|
+
* Render `text` as a compact ASCII QR code string.
|
|
4
|
+
*
|
|
5
|
+
* qrcode-terminal invokes the callback synchronously, so we capture the
|
|
6
|
+
* output and return it rather than letting the library print directly —
|
|
7
|
+
* this keeps rendering testable and lets the caller control output.
|
|
8
|
+
*/
|
|
9
|
+
export function renderQrCode(text) {
|
|
10
|
+
let output = "";
|
|
11
|
+
qrcode.generate(text, { small: true }, (qr) => {
|
|
12
|
+
output = qr;
|
|
13
|
+
});
|
|
14
|
+
return output;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=qr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.js","sourceRoot":"","sources":["../../src/lib/qr.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,EAAU,EAAE,EAAE;QACpD,MAAM,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -4,7 +4,7 @@ export declare class AuthService {
|
|
|
4
4
|
private readonly api;
|
|
5
5
|
private readonly apiUrl;
|
|
6
6
|
constructor(api: ApiClient, apiUrl: string);
|
|
7
|
-
login(onShowCode: (userCode: string,
|
|
7
|
+
login(onShowCode: (userCode: string, verificationUri: string, verificationUriComplete: string | undefined) => void, pollInterval?: number): Promise<{
|
|
8
8
|
access_token: string;
|
|
9
9
|
refresh_token: string;
|
|
10
10
|
id_token: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-service.d.ts","sourceRoot":"","sources":["../../src/services/auth-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,gBAAgB,CAAC;AAKxB,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM;IAG3B,KAAK,CACT,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"auth-service.d.ts","sourceRoot":"","sources":["../../src/services/auth-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,gBAAgB,CAAC;AAKxB,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM;IAG3B,KAAK,CACT,UAAU,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,uBAAuB,EAAE,MAAM,GAAG,SAAS,KACxC,IAAI,EACT,YAAY,SAAwB,GACnC,OAAO,CAAC;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IA8BI,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAmBhE"}
|
|
@@ -9,8 +9,8 @@ export class AuthService {
|
|
|
9
9
|
this.apiUrl = apiUrl;
|
|
10
10
|
}
|
|
11
11
|
async login(onShowCode, pollInterval = DEFAULT_POLL_INTERVAL) {
|
|
12
|
-
const { device_code, user_code,
|
|
13
|
-
onShowCode(user_code,
|
|
12
|
+
const { device_code, user_code, verification_uri, verification_uri_complete } = await this.api.createDeviceCode();
|
|
13
|
+
onShowCode(user_code, verification_uri, verification_uri_complete);
|
|
14
14
|
// eslint-disable-next-line no-constant-condition
|
|
15
15
|
while (true) {
|
|
16
16
|
if (pollInterval > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-service.js","sourceRoot":"","sources":["../../src/services/auth-service.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,MAAM,OAAO,WAAW;IAEH;IACA;IAFnB,YACmB,GAAc,EACd,MAAc;QADd,QAAG,GAAH,GAAG,CAAW;QACd,WAAM,GAAN,MAAM,CAAQ;IAC9B,CAAC;IAEJ,KAAK,CAAC,KAAK,CACT,
|
|
1
|
+
{"version":3,"file":"auth-service.js","sourceRoot":"","sources":["../../src/services/auth-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kingslanding/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Deploy static sites to King's Landing from any terminal or CI/CD pipeline",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -39,11 +39,13 @@
|
|
|
39
39
|
"commander": "^13.0.0",
|
|
40
40
|
"glob": "^13.0.6",
|
|
41
41
|
"mime-types": "^2.1.35",
|
|
42
|
-
"ora": "^8.0.0"
|
|
42
|
+
"ora": "^8.0.0",
|
|
43
|
+
"qrcode-terminal": "^0.12.0"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@types/mime-types": "^2.1.4",
|
|
46
47
|
"@types/node": "^22.0.0",
|
|
48
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
47
49
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
48
50
|
"@typescript-eslint/parser": "^8.0.0",
|
|
49
51
|
"@vitest/coverage-v8": "^4.1.9",
|