@mnemonik/cli 7.102.0 → 7.103.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/auth/credentials.js +9 -0
- package/dist/auth/device.d.ts +2 -1
- package/dist/auth/device.d.ts.map +1 -1
- package/dist/auth/device.js +89 -76
- package/dist/auth/device.js.map +1 -1
- package/dist/auth/index.d.ts +1 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +15 -33
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/pkce.d.ts +0 -1
- package/dist/auth/pkce.d.ts.map +1 -1
- package/dist/auth/pkce.js +3 -52
- package/dist/auth/pkce.js.map +1 -1
- package/dist/diagnostics.js +9 -0
- package/dist/digests.json +53 -53
- package/dist/install/journal.js +9 -0
- package/dist/install/journey.d.ts.map +1 -1
- package/dist/install/journey.js +137 -59
- package/dist/install/journey.js.map +1 -1
- package/dist/install/ui.d.ts.map +1 -1
- package/dist/install/ui.js +1 -2
- package/dist/install/ui.js.map +1 -1
- package/dist/installation.js +9 -0
- package/dist/launcher.js +9 -0
- package/dist/output.d.ts +8 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +71 -4
- package/dist/output.js.map +1 -1
- package/dist/project/records.js +9 -0
- package/dist/project.js +9 -0
- package/dist/runtime/bootstrap.d.ts +7 -1
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/bootstrap.js +51 -3
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/sbom.json +21 -21
- package/dist/scanner/control.js +9 -0
- package/dist/scanner/discover.d.ts.map +1 -1
- package/dist/scanner/discover.js +6 -3
- package/dist/scanner/discover.js.map +1 -1
- package/dist/scanner/enable.js +9 -0
- package/dist/scanner/picker.d.ts.map +1 -1
- package/dist/scanner/picker.js +26 -13
- package/dist/scanner/picker.js.map +1 -1
- package/dist/scanner/update.js +9 -0
- package/dist/scanner-release.json +21 -21
- package/dist/screens/journey.d.ts +15 -1
- package/dist/screens/journey.d.ts.map +1 -1
- package/dist/screens/journey.js +76 -37
- package/dist/screens/journey.js.map +1 -1
- package/dist/screens.d.ts +1 -1
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +10 -2
- package/dist/screens.js.map +1 -1
- package/dist/vendor/local-setup.js +8 -0
- package/package.json +41 -41
package/dist/auth/credentials.js
CHANGED
|
@@ -6502,6 +6502,15 @@ async function withLock(path, waitMs, work) {
|
|
|
6502
6502
|
throw error;
|
|
6503
6503
|
}).then(() => rmdir(dir)).then(() => callback(), callback);
|
|
6504
6504
|
},
|
|
6505
|
+
rmdirSync: (dir) => {
|
|
6506
|
+
try {
|
|
6507
|
+
fs2.unlinkSync(join3(dir, "owner"));
|
|
6508
|
+
} catch (error) {
|
|
6509
|
+
if (!codeIs(error, "ENOENT"))
|
|
6510
|
+
throw error;
|
|
6511
|
+
}
|
|
6512
|
+
fs2.rmdirSync(dir);
|
|
6513
|
+
},
|
|
6505
6514
|
stat: (file, callback) => {
|
|
6506
6515
|
void (acquired ? assertOwned() : Promise.resolve()).then(() => fs2.stat(file, callback), () => callback(Object.assign(new Error("lock_lost"), { code: "ENOENT" })));
|
|
6507
6516
|
}
|
package/dist/auth/device.d.ts
CHANGED
|
@@ -9,12 +9,13 @@ export interface DeviceOptions {
|
|
|
9
9
|
clientId: string;
|
|
10
10
|
deviceName: string;
|
|
11
11
|
print: (line: string) => void;
|
|
12
|
+
openBrowser?: (url: string) => Promise<void>;
|
|
12
13
|
fetch?: typeof fetch;
|
|
13
14
|
sleep?: (milliseconds: number) => Promise<void>;
|
|
14
15
|
now?: () => number;
|
|
15
16
|
}
|
|
16
17
|
/** Shown with every device code, byte for byte, as required by the OAuth contract. */
|
|
17
|
-
export declare const DEVICE_WARNING = "Approve only a request
|
|
18
|
+
export declare const DEVICE_WARNING = "Approve only a request on a device you control.";
|
|
18
19
|
export interface DeviceResult {
|
|
19
20
|
clientId: string;
|
|
20
21
|
tokens: CliTokenResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/auth/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,sFAAsF;AACtF,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/auth/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,sFAAsF;AACtF,eAAO,MAAM,cAAc,oDAAoD,CAAC;AAEhF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAgCD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA8HjF"}
|
package/dist/auth/device.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module"; const require =
|
|
|
3
3
|
// packages/cli/src/auth/device.ts
|
|
4
4
|
import { URL, URLSearchParams } from "node:url";
|
|
5
5
|
import { OAuthProtocolError } from "./pkce.js";
|
|
6
|
-
var DEVICE_WARNING = "Approve only a request
|
|
6
|
+
var DEVICE_WARNING = "Approve only a request on a device you control.";
|
|
7
7
|
var wait = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
8
8
|
function validVerificationUris(issuer, userCode, verificationUri, completeUri) {
|
|
9
9
|
try {
|
|
@@ -21,84 +21,97 @@ async function runDeviceFlow(options) {
|
|
|
21
21
|
const fetchImpl = options.fetch ?? fetch;
|
|
22
22
|
const sleep = options.sleep ?? wait;
|
|
23
23
|
const now = options.now ?? Date.now;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
24
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
25
|
+
const response = await fetchImpl(`${issuer}/oauth/device_authorization`, {
|
|
26
|
+
method: "POST",
|
|
27
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
28
|
+
body: new URLSearchParams({
|
|
29
|
+
client_id: options.clientId,
|
|
30
|
+
scope: options.scopes.join(" "),
|
|
31
|
+
resource: options.resource,
|
|
32
|
+
...options.scannerRoots ? { scanner_roots: options.scannerRoots } : {},
|
|
33
|
+
...options.deviceInstallationIds?.length ? { device_installation_ids: JSON.stringify(options.deviceInstallationIds) } : {},
|
|
34
|
+
...options.deviceInstallationId ? { device_installation_id: options.deviceInstallationId } : {},
|
|
35
|
+
device_name: options.deviceName
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
const issued = await response.json().catch(() => ({}));
|
|
39
|
+
if (!response.ok)
|
|
40
|
+
throw new OAuthProtocolError(
|
|
41
|
+
typeof issued.error === "string" ? issued.error : "device_authorization_failed"
|
|
42
|
+
);
|
|
43
|
+
if (typeof issued.device_code !== "string" || typeof issued.user_code !== "string" || !/^[BCDFGHJKLMNPQRSTVWXZ]{4}-[BCDFGHJKLMNPQRSTVWXZ]{4}$/u.test(issued.user_code) || typeof issued.verification_uri !== "string" || typeof issued.verification_uri_complete !== "string" || typeof issued.expires_in !== "number" || !Number.isSafeInteger(issued.expires_in) || issued.expires_in <= 0 || issued.expires_in > 600 || typeof issued.interval !== "number" || !Number.isSafeInteger(issued.interval) || issued.interval < 5 || !validVerificationUris(
|
|
44
|
+
issuer,
|
|
45
|
+
issued.user_code,
|
|
46
|
+
issued.verification_uri,
|
|
47
|
+
issued.verification_uri_complete
|
|
48
|
+
))
|
|
49
|
+
throw new OAuthProtocolError("invalid_device_response");
|
|
50
|
+
const completeUri = issued.verification_uri_complete;
|
|
51
|
+
options.print(completeUri);
|
|
52
|
+
options.print(DEVICE_WARNING);
|
|
53
|
+
void Promise.resolve().then(() => options.openBrowser?.(completeUri)).catch(() => void 0);
|
|
54
|
+
let interval = issued.interval;
|
|
55
|
+
let transportBackoff = 0;
|
|
56
|
+
const deadline = now() + issued.expires_in * 1e3;
|
|
57
|
+
let dead = "expired_token";
|
|
58
|
+
while (now() < deadline) {
|
|
59
|
+
await sleep((transportBackoff || interval) * 1e3);
|
|
60
|
+
if (now() >= deadline) break;
|
|
61
|
+
let poll;
|
|
62
|
+
try {
|
|
63
|
+
poll = await fetchImpl(`${issuer}/oauth/token`, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
66
|
+
body: new URLSearchParams({
|
|
67
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
68
|
+
client_id: options.clientId,
|
|
69
|
+
device_code: issued.device_code,
|
|
70
|
+
resource: options.resource
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
} catch {
|
|
74
|
+
transportBackoff = Math.min(Math.max(interval, transportBackoff || interval) * 2, 60);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
transportBackoff = 0;
|
|
78
|
+
const body = await poll.json().catch(() => ({}));
|
|
79
|
+
if (poll.ok) {
|
|
80
|
+
if (typeof body.access_token !== "string" || typeof body.refresh_token !== "string" || typeof body.expires_in !== "number" || typeof body.scope !== "string")
|
|
81
|
+
throw new OAuthProtocolError("invalid_token_response");
|
|
82
|
+
return {
|
|
83
|
+
clientId: options.clientId,
|
|
84
|
+
tokens: {
|
|
85
|
+
access_token: body.access_token,
|
|
86
|
+
refresh_token: body.refresh_token,
|
|
87
|
+
token_type: "Bearer",
|
|
88
|
+
expires_in: body.expires_in,
|
|
89
|
+
scope: body.scope
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const error = typeof body.error === "string" ? body.error : "device_poll_failed";
|
|
94
|
+
if (error === "authorization_pending") continue;
|
|
95
|
+
if (error === "slow_down") {
|
|
96
|
+
interval += 5;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (error !== "access_denied" && error !== "expired_token")
|
|
100
|
+
throw new OAuthProtocolError(error);
|
|
101
|
+
dead = error;
|
|
102
|
+
break;
|
|
75
103
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return {
|
|
82
|
-
clientId: options.clientId,
|
|
83
|
-
tokens: {
|
|
84
|
-
access_token: body.access_token,
|
|
85
|
-
refresh_token: body.refresh_token,
|
|
86
|
-
token_type: "Bearer",
|
|
87
|
-
expires_in: body.expires_in,
|
|
88
|
-
scope: body.scope
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
const error = typeof body.error === "string" ? body.error : "device_poll_failed";
|
|
93
|
-
if (error === "authorization_pending") continue;
|
|
94
|
-
if (error === "slow_down") {
|
|
95
|
-
interval += 5;
|
|
104
|
+
const refused = dead === "access_denied";
|
|
105
|
+
if (attempt === 0) {
|
|
106
|
+
options.print(
|
|
107
|
+
refused ? "That approval request was refused. Starting a new one." : "That approval request expired. Starting a new one."
|
|
108
|
+
);
|
|
96
109
|
continue;
|
|
97
110
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
throw new OAuthProtocolError(
|
|
111
|
+
options.print(
|
|
112
|
+
refused ? "The new approval request was refused." : "The new approval request expired."
|
|
113
|
+
);
|
|
114
|
+
throw new OAuthProtocolError(dead, refused ? "denied on the other device" : "expired");
|
|
102
115
|
}
|
|
103
116
|
throw new OAuthProtocolError("expired_token", "expired");
|
|
104
117
|
}
|
package/dist/auth/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/auth/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/auth/device.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type createCredentialAdapter, type CliOAuthCredential, type CredentialAdapterOptions } from '@mnemonik/credentials';
|
|
2
|
-
import { type PkceOptions } from './pkce.js';
|
|
3
2
|
export declare const CLI_SCOPES: readonly ['account:read', 'install:manage', 'components:manage', 'projects:manage', 'offline_access'];
|
|
4
3
|
export interface CliAuthOptions {
|
|
5
4
|
stateDir?: string;
|
|
@@ -13,7 +12,7 @@ export interface CliAuthOptions {
|
|
|
13
12
|
deviceName?: string;
|
|
14
13
|
print?: (line: string) => void;
|
|
15
14
|
fetch?: typeof fetch;
|
|
16
|
-
openBrowser?:
|
|
15
|
+
openBrowser?: (url: string) => Promise<void>;
|
|
17
16
|
sleep?: (milliseconds: number) => Promise<void>;
|
|
18
17
|
now?: () => number;
|
|
19
18
|
credentials?: ReturnType<typeof createCredentialAdapter>;
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAE9B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAE9B,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,UAAU,YACrB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,CACR,CAAC;AAIX,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IACzD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAMT;AAkBD,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB;kBAiE/B,OAAO,CAAC,kBAAkB,CAAC;wBAsErB,OAAO,CAAC,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;2BAW/C,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;kBAgBnC,OAAO,CAAC,IAAI,CAAC;EAiBvC;AAED,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
package/dist/auth/index.js
CHANGED
|
@@ -4842,7 +4842,7 @@ public class MnemonikCredential {
|
|
|
4842
4842
|
|
|
4843
4843
|
// packages/cli/src/auth/index.ts
|
|
4844
4844
|
import { runDeviceFlow } from "./device.js";
|
|
4845
|
-
import {
|
|
4845
|
+
import { open, OAuthProtocolError } from "./pkce.js";
|
|
4846
4846
|
export * from "./device.js";
|
|
4847
4847
|
export * from "./pkce.js";
|
|
4848
4848
|
var CLI_SCOPES = [
|
|
@@ -4854,7 +4854,7 @@ var CLI_SCOPES = [
|
|
|
4854
4854
|
];
|
|
4855
4855
|
var CLI_VERSION = createRequire(import.meta.url)("../../package.json").version;
|
|
4856
4856
|
function noBrowserAvailable(platform = process.platform, env = process.env) {
|
|
4857
|
-
return platform === "linux" && !env.DISPLAY && !env.WAYLAND_DISPLAY;
|
|
4857
|
+
return !!env.SSH_CONNECTION || !!env.SSH_TTY || platform === "linux" && !env.DISPLAY && !env.WAYLAND_DISPLAY;
|
|
4858
4858
|
}
|
|
4859
4859
|
var clientMetadata = (redirectUris) => ({
|
|
4860
4860
|
client_name: "Mnemonik CLI",
|
|
@@ -4896,23 +4896,7 @@ function createCliAuth(options = {}) {
|
|
|
4896
4896
|
);
|
|
4897
4897
|
return body2.client_id;
|
|
4898
4898
|
}
|
|
4899
|
-
async function
|
|
4900
|
-
return runPkce({
|
|
4901
|
-
issuer,
|
|
4902
|
-
resource,
|
|
4903
|
-
scopes: CLI_SCOPES,
|
|
4904
|
-
scannerRoots: options.scannerRoots,
|
|
4905
|
-
deviceInstallationId,
|
|
4906
|
-
deviceInstallationIds,
|
|
4907
|
-
deviceName: options.deviceName ?? hostname(),
|
|
4908
|
-
clientId: registerFirst ? (redirectUri) => register([redirectUri]) : clientId,
|
|
4909
|
-
print,
|
|
4910
|
-
fetch: fetchImpl,
|
|
4911
|
-
openBrowser: options.openBrowser,
|
|
4912
|
-
platform: options.platform
|
|
4913
|
-
});
|
|
4914
|
-
}
|
|
4915
|
-
async function device(clientId) {
|
|
4899
|
+
async function device(clientId, openBrowser) {
|
|
4916
4900
|
return runDeviceFlow({
|
|
4917
4901
|
issuer,
|
|
4918
4902
|
resource,
|
|
@@ -4923,17 +4907,21 @@ function createCliAuth(options = {}) {
|
|
|
4923
4907
|
clientId,
|
|
4924
4908
|
deviceName: options.deviceName ?? hostname(),
|
|
4925
4909
|
print,
|
|
4910
|
+
openBrowser,
|
|
4926
4911
|
fetch: fetchImpl,
|
|
4927
4912
|
sleep: options.sleep,
|
|
4928
4913
|
now
|
|
4929
4914
|
});
|
|
4930
4915
|
}
|
|
4931
|
-
async function deviceWithRegistration(clientId) {
|
|
4916
|
+
async function deviceWithRegistration(clientId, openBrowser) {
|
|
4932
4917
|
try {
|
|
4933
|
-
return await device(clientId);
|
|
4918
|
+
return await device(clientId, openBrowser);
|
|
4934
4919
|
} catch (error) {
|
|
4935
4920
|
if (!(error instanceof OAuthProtocolError) || error.code !== "invalid_client") throw error;
|
|
4936
|
-
return device(
|
|
4921
|
+
return device(
|
|
4922
|
+
await register(["http://127.0.0.1/callback", "http://[::1]/callback"]),
|
|
4923
|
+
openBrowser
|
|
4924
|
+
);
|
|
4937
4925
|
}
|
|
4938
4926
|
}
|
|
4939
4927
|
async function signIn() {
|
|
@@ -4950,17 +4938,11 @@ function createCliAuth(options = {}) {
|
|
|
4950
4938
|
throw error;
|
|
4951
4939
|
});
|
|
4952
4940
|
const clientId = saved?.clientId ?? cimdClientId;
|
|
4953
|
-
const
|
|
4954
|
-
|
|
4955
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
4958
|
-
if (!useDevice && error instanceof BrowserUnavailableError)
|
|
4959
|
-
result = await deviceWithRegistration(clientId);
|
|
4960
|
-
else if (error instanceof OAuthProtocolError && error.code === "invalid_client")
|
|
4961
|
-
result = await browser(clientId, true);
|
|
4962
|
-
else throw error;
|
|
4963
|
-
}
|
|
4941
|
+
const browserUnavailable = options.noBrowser || noBrowserAvailable(options.platform, options.env);
|
|
4942
|
+
const result = await deviceWithRegistration(
|
|
4943
|
+
clientId,
|
|
4944
|
+
browserUnavailable ? void 0 : options.openBrowser ?? ((url) => open(url, options.platform ?? process.platform))
|
|
4945
|
+
);
|
|
4964
4946
|
const rotatedAt = now();
|
|
4965
4947
|
const localFamilyKey = createHash("sha256").update(`${issuer}\0${result.clientId}`).digest("hex");
|
|
4966
4948
|
await credentials.putCliOAuth(
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAML,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|