@phaseo/cli 0.1.1 → 0.1.2
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/LICENSE +219 -0
- package/README.md +203 -2
- package/dist/api.d.ts +49 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +197 -0
- package/dist/api.js.map +1 -0
- package/dist/capabilities.d.ts +2 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +2 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/generated/capabilities.d.ts +51 -0
- package/dist/generated/capabilities.d.ts.map +1 -0
- package/dist/generated/capabilities.js +113 -0
- package/dist/generated/capabilities.js.map +1 -0
- package/dist/generated/meta.d.ts +3 -0
- package/dist/generated/meta.d.ts.map +1 -0
- package/dist/generated/meta.js +4 -0
- package/dist/generated/meta.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1814 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +7 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +15 -0
- package/dist/output.js.map +1 -0
- package/dist/release.d.ts +23 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +133 -0
- package/dist/release.js.map +1 -0
- package/dist/session.d.ts +16 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +271 -0
- package/dist/session.js.map +1 -0
- package/package.json +29 -12
- package/bin/phaseo.js +0 -2
package/dist/api.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { readSession, writeSession } from "./session.js";
|
|
2
|
+
import { DEFAULT_CLI_OAUTH_CAPABILITIES, normalizeScopeList, } from "./capabilities.js";
|
|
3
|
+
export const DEFAULT_API_URL = "https://api.phaseo.app";
|
|
4
|
+
export const DEFAULT_LOGIN_SCOPES = DEFAULT_CLI_OAUTH_CAPABILITIES;
|
|
5
|
+
export const DEFAULT_SCOPE = DEFAULT_LOGIN_SCOPES.join(" ");
|
|
6
|
+
export function parseScopeArgument(raw) {
|
|
7
|
+
const normalized = normalizeScopeList(raw, {
|
|
8
|
+
allowIdentityScopes: true,
|
|
9
|
+
defaultScopes: DEFAULT_LOGIN_SCOPES,
|
|
10
|
+
});
|
|
11
|
+
if (!normalized.ok) {
|
|
12
|
+
throw new Error("message" in normalized ? normalized.message : "Invalid scopes");
|
|
13
|
+
}
|
|
14
|
+
return normalized.value.join(" ");
|
|
15
|
+
}
|
|
16
|
+
export function normalizeApiRoot(input) {
|
|
17
|
+
const raw = input || process.env.PHASEO_API_URL || DEFAULT_API_URL;
|
|
18
|
+
let url;
|
|
19
|
+
try {
|
|
20
|
+
url = new URL(raw);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new Error("Phaseo API URL must be a valid absolute URL");
|
|
24
|
+
}
|
|
25
|
+
const isLoopback = url.hostname === "127.0.0.1" || url.hostname === "::1" || url.hostname === "[::1]" || url.hostname === "localhost";
|
|
26
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && isLoopback)) {
|
|
27
|
+
throw new Error("Phaseo API URL must use HTTPS (HTTP is only allowed for loopback development)");
|
|
28
|
+
}
|
|
29
|
+
if (url.username || url.password || url.search || url.hash) {
|
|
30
|
+
throw new Error("Phaseo API URL must not contain credentials, a query string, or a fragment");
|
|
31
|
+
}
|
|
32
|
+
return url.toString().replace(/\/+$/, "").replace(/\/v1$/, "");
|
|
33
|
+
}
|
|
34
|
+
export function v1Url(apiRoot, path) {
|
|
35
|
+
return `${apiRoot}/v1${path.startsWith("/") ? path : `/${path}`}`;
|
|
36
|
+
}
|
|
37
|
+
export function oauthUrl(apiRoot, path) {
|
|
38
|
+
return `${apiRoot}/oauth${path.startsWith("/") ? path : `/${path}`}`;
|
|
39
|
+
}
|
|
40
|
+
export function authorizeUrl(apiRoot, params) {
|
|
41
|
+
const url = new URL(oauthUrl(apiRoot, "/authorize"));
|
|
42
|
+
url.searchParams.set("response_type", "code");
|
|
43
|
+
url.searchParams.set("client_id", params.clientId);
|
|
44
|
+
url.searchParams.set("redirect_uri", params.redirectUri);
|
|
45
|
+
url.searchParams.set("scope", params.scope);
|
|
46
|
+
url.searchParams.set("state", params.state);
|
|
47
|
+
url.searchParams.set("code_challenge", params.codeChallenge);
|
|
48
|
+
url.searchParams.set("code_challenge_method", params.codeChallengeMethod ?? "S256");
|
|
49
|
+
return url.toString();
|
|
50
|
+
}
|
|
51
|
+
async function parseJson(response) {
|
|
52
|
+
const text = await response.text();
|
|
53
|
+
if (!text)
|
|
54
|
+
return null;
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(text);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return text;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function requireRefreshableCliTokens(body) {
|
|
63
|
+
if (typeof body?.access_token !== "string" ||
|
|
64
|
+
!body.access_token ||
|
|
65
|
+
typeof body?.refresh_token !== "string" ||
|
|
66
|
+
!body.refresh_token ||
|
|
67
|
+
typeof body?.expires_in !== "number" ||
|
|
68
|
+
!Number.isFinite(body.expires_in) ||
|
|
69
|
+
body.expires_in <= 0) {
|
|
70
|
+
throw new Error("Phaseo OAuth did not return a refreshable CLI session");
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
access_token: body.access_token,
|
|
74
|
+
refresh_token: body.refresh_token,
|
|
75
|
+
expires_in: body.expires_in,
|
|
76
|
+
scope: typeof body.scope === "string" ? body.scope : undefined,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export async function apiFetch(apiRoot, path, init = {}) {
|
|
80
|
+
const headers = new Headers(init.headers);
|
|
81
|
+
if (!headers.has("content-type") && init.body)
|
|
82
|
+
headers.set("content-type", "application/json");
|
|
83
|
+
if (init.accessToken)
|
|
84
|
+
headers.set("authorization", `Bearer ${init.accessToken}`);
|
|
85
|
+
const response = await fetch(v1Url(apiRoot, path), { ...init, headers });
|
|
86
|
+
const body = await parseJson(response);
|
|
87
|
+
if (!response.ok) {
|
|
88
|
+
const message = typeof body?.message === "string" ? body.message : typeof body?.error === "string" ? body.error : response.statusText;
|
|
89
|
+
throw new Error(message);
|
|
90
|
+
}
|
|
91
|
+
return body;
|
|
92
|
+
}
|
|
93
|
+
export async function refreshSession(session) {
|
|
94
|
+
const response = await fetch(oauthUrl(session.apiUrl, "/token"), {
|
|
95
|
+
method: "POST",
|
|
96
|
+
headers: { "content-type": "application/json" },
|
|
97
|
+
body: JSON.stringify({
|
|
98
|
+
grant_type: "refresh_token",
|
|
99
|
+
client_id: "phaseo_cli",
|
|
100
|
+
refresh_token: session.refreshToken,
|
|
101
|
+
}),
|
|
102
|
+
});
|
|
103
|
+
const body = await parseJson(response);
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new Error(typeof body?.error_description === "string" ? body.error_description : "Failed to refresh Phaseo session");
|
|
106
|
+
}
|
|
107
|
+
const tokens = requireRefreshableCliTokens(body);
|
|
108
|
+
const next = {
|
|
109
|
+
accessToken: tokens.access_token,
|
|
110
|
+
refreshToken: tokens.refresh_token,
|
|
111
|
+
expiresAt: Date.now() + tokens.expires_in * 1000,
|
|
112
|
+
apiUrl: session.apiUrl,
|
|
113
|
+
scope: tokens.scope,
|
|
114
|
+
};
|
|
115
|
+
await writeSession(next);
|
|
116
|
+
return next;
|
|
117
|
+
}
|
|
118
|
+
export async function getSessionAccessToken() {
|
|
119
|
+
const session = await readSession();
|
|
120
|
+
if (!session)
|
|
121
|
+
throw new Error("Not logged in. Run `phaseo login` first.");
|
|
122
|
+
if (session.expiresAt - Date.now() < 60_000) {
|
|
123
|
+
return refreshSession(session);
|
|
124
|
+
}
|
|
125
|
+
return session;
|
|
126
|
+
}
|
|
127
|
+
export async function startDeviceLogin(apiRoot, scope = DEFAULT_SCOPE) {
|
|
128
|
+
const response = await fetch(oauthUrl(apiRoot, "/device/code"), {
|
|
129
|
+
method: "POST",
|
|
130
|
+
headers: { "content-type": "application/json" },
|
|
131
|
+
body: JSON.stringify({
|
|
132
|
+
client_id: "phaseo_cli",
|
|
133
|
+
scope,
|
|
134
|
+
}),
|
|
135
|
+
});
|
|
136
|
+
const body = await parseJson(response);
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
throw new Error(typeof body?.error_description === "string" ? body.error_description : "Failed to start device login");
|
|
139
|
+
}
|
|
140
|
+
return body;
|
|
141
|
+
}
|
|
142
|
+
export async function pollDeviceToken(apiRoot, deviceCode) {
|
|
143
|
+
const response = await fetch(oauthUrl(apiRoot, "/token"), {
|
|
144
|
+
method: "POST",
|
|
145
|
+
headers: { "content-type": "application/json" },
|
|
146
|
+
body: JSON.stringify({
|
|
147
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
148
|
+
client_id: "phaseo_cli",
|
|
149
|
+
device_code: deviceCode,
|
|
150
|
+
}),
|
|
151
|
+
});
|
|
152
|
+
const body = await parseJson(response);
|
|
153
|
+
if (!response.ok) {
|
|
154
|
+
const code = typeof body?.error === "string" ? body.error : "token_error";
|
|
155
|
+
const description = typeof body?.error_description === "string" ? body.error_description : code;
|
|
156
|
+
const error = new Error(description);
|
|
157
|
+
error.code = code;
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
return requireRefreshableCliTokens(body);
|
|
161
|
+
}
|
|
162
|
+
export async function revokeRefreshToken(apiRoot, refreshToken) {
|
|
163
|
+
const response = await fetch(oauthUrl(apiRoot, "/revoke"), {
|
|
164
|
+
method: "POST",
|
|
165
|
+
headers: { "content-type": "application/json" },
|
|
166
|
+
body: JSON.stringify({ token: refreshToken }),
|
|
167
|
+
});
|
|
168
|
+
if (!response.ok) {
|
|
169
|
+
const body = await parseJson(response);
|
|
170
|
+
const description = typeof body?.error_description === "string"
|
|
171
|
+
? body.error_description
|
|
172
|
+
: typeof body?.message === "string"
|
|
173
|
+
? body.message
|
|
174
|
+
: `OAuth token revocation failed with HTTP ${response.status}`;
|
|
175
|
+
throw new Error(description);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
export async function exchangeAuthorizationCode(apiRoot, args) {
|
|
179
|
+
const response = await fetch(oauthUrl(apiRoot, "/token"), {
|
|
180
|
+
method: "POST",
|
|
181
|
+
headers: { "content-type": "application/json" },
|
|
182
|
+
body: JSON.stringify({
|
|
183
|
+
grant_type: "authorization_code",
|
|
184
|
+
client_id: args.clientId ?? "phaseo_cli",
|
|
185
|
+
client_secret: args.clientSecret,
|
|
186
|
+
code: args.code,
|
|
187
|
+
redirect_uri: args.redirectUri,
|
|
188
|
+
code_verifier: args.codeVerifier,
|
|
189
|
+
}),
|
|
190
|
+
});
|
|
191
|
+
const body = await parseJson(response);
|
|
192
|
+
if (!response.ok) {
|
|
193
|
+
throw new Error(typeof body?.error_description === "string" ? body.error_description : "Failed to exchange authorization code");
|
|
194
|
+
}
|
|
195
|
+
return requireRefreshableCliTokens(body);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,cAAc,CAAC;AACvE,OAAO,EACN,8BAA8B,EAC9B,kBAAkB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE5D,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC9C,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,EAAE;QAC1C,mBAAmB,EAAE,IAAI;QACzB,aAAa,EAAE,oBAAoB;KACnC,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,MAAM,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,eAAe,CAAC;IACnE,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACJ,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,CAAC;IACtI,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,IAAY;IAClD,OAAO,GAAG,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAY;IACrD,OAAO,GAAG,OAAO,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,MAO7C;IACA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAkB;IAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAS;IAM7C,IACC,OAAO,IAAI,EAAE,YAAY,KAAK,QAAQ;QACtC,CAAC,IAAI,CAAC,YAAY;QAClB,OAAO,IAAI,EAAE,aAAa,KAAK,QAAQ;QACvC,CAAC,IAAI,CAAC,aAAa;QACnB,OAAO,IAAI,EAAE,UAAU,KAAK,QAAQ;QACpC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,IAAI,CAAC,EACnB,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO;QACN,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KAC9D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,OAA+C,EAAE;IAC9G,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAC/F,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QACtI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,UAAU,EAAE,eAAe;YAC3B,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAC5H,CAAC;IACD,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAY;QACrB,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,YAAY,EAAE,MAAM,CAAC,aAAa;QAClC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;QAChD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;KACnB,CAAC;IACF,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAC1C,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC7C,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAAK,GAAG,aAAa;IAC5E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;QAC/D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,SAAS,EAAE,YAAY;YACvB,KAAK;SACL,CAAC;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,IAON,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,UAAkB;IACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QACzD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,UAAU,EAAE,8CAA8C;YAC1D,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,UAAU;SACvB,CAAC;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1E,MAAM,WAAW,GAAG,OAAO,IAAI,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;QAChG,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,CAA8B,CAAC;QAClE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,KAAK,CAAC;IACb,CAAC;IACD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,YAAoB;IAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;KAC7C,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,WAAW,GAChB,OAAO,IAAI,EAAE,iBAAiB,KAAK,QAAQ;YAC1C,CAAC,CAAC,IAAI,CAAC,iBAAiB;YACxB,CAAC,CAAC,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ;gBAClC,CAAC,CAAC,IAAI,CAAC,OAAO;gBACd,CAAC,CAAC,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAe,EAAE,IAMhE;IAMA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QACzD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,UAAU,EAAE,oBAAoB;YAChC,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,YAAY;YACxC,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,aAAa,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;IACjI,CAAC;IACD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export declare const IDENTITY_SCOPES: readonly ["openid", "profile", "email"];
|
|
2
|
+
export declare const GATEWAY_ACCESS_SCOPE: "gateway:access";
|
|
3
|
+
export declare const CAPABILITIES: {
|
|
4
|
+
readonly ME_READ: "me:read";
|
|
5
|
+
readonly MODELS_READ: "models:read";
|
|
6
|
+
readonly PROVIDERS_READ: "providers:read";
|
|
7
|
+
readonly PRICING_READ: "pricing:read";
|
|
8
|
+
readonly CREDITS_READ: "credits:read";
|
|
9
|
+
readonly ACTIVITY_READ: "activity:read";
|
|
10
|
+
readonly ANALYTICS_READ: "analytics:read";
|
|
11
|
+
readonly GENERATIONS_READ: "generations:read";
|
|
12
|
+
readonly WORKSPACES_READ: "workspaces:read";
|
|
13
|
+
readonly WORKSPACES_WRITE: "workspaces:write";
|
|
14
|
+
readonly WORKSPACES_DELETE: "workspaces:delete";
|
|
15
|
+
readonly KEYS_READ: "keys:read";
|
|
16
|
+
readonly KEYS_WRITE: "keys:write";
|
|
17
|
+
readonly KEYS_DELETE: "keys:delete";
|
|
18
|
+
readonly PRESETS_READ: "presets:read";
|
|
19
|
+
readonly PRESETS_WRITE: "presets:write";
|
|
20
|
+
readonly PRESETS_DELETE: "presets:delete";
|
|
21
|
+
readonly SETTINGS_READ: "settings:read";
|
|
22
|
+
readonly SETTINGS_WRITE: "settings:write";
|
|
23
|
+
readonly GUARDRAILS_READ: "guardrails:read";
|
|
24
|
+
readonly GUARDRAILS_WRITE: "guardrails:write";
|
|
25
|
+
readonly GUARDRAILS_DELETE: "guardrails:delete";
|
|
26
|
+
readonly MANAGEMENT_KEYS_READ: "management_keys:read";
|
|
27
|
+
readonly MANAGEMENT_KEYS_WRITE: "management_keys:write";
|
|
28
|
+
readonly MANAGEMENT_KEYS_DELETE: "management_keys:delete";
|
|
29
|
+
readonly OAUTH_CLIENTS_READ: "oauth_clients:read";
|
|
30
|
+
readonly OAUTH_CLIENTS_WRITE: "oauth_clients:write";
|
|
31
|
+
readonly OAUTH_CLIENTS_DELETE: "oauth_clients:delete";
|
|
32
|
+
};
|
|
33
|
+
export declare const CONTROL_CAPABILITIES: readonly ("me:read" | "models:read" | "providers:read" | "pricing:read" | "credits:read" | "activity:read" | "analytics:read" | "generations:read" | "workspaces:read" | "workspaces:write" | "workspaces:delete" | "keys:read" | "keys:write" | "keys:delete" | "presets:read" | "presets:write" | "presets:delete" | "settings:read" | "settings:write" | "guardrails:read" | "guardrails:write" | "guardrails:delete" | "management_keys:read" | "management_keys:write" | "management_keys:delete" | "oauth_clients:read" | "oauth_clients:write" | "oauth_clients:delete")[];
|
|
34
|
+
export declare const DEFAULT_CLI_OAUTH_CAPABILITIES: readonly ("email" | "openid" | "profile" | "me:read" | "models:read" | "providers:read" | "pricing:read" | "credits:read" | "activity:read" | "analytics:read" | "generations:read" | "workspaces:read" | "workspaces:write" | "workspaces:delete" | "keys:read" | "keys:write" | "keys:delete" | "presets:read" | "presets:write" | "presets:delete" | "settings:read" | "settings:write" | "guardrails:read" | "guardrails:write" | "guardrails:delete" | "management_keys:read" | "management_keys:write" | "management_keys:delete" | "oauth_clients:read" | "oauth_clients:write" | "oauth_clients:delete")[];
|
|
35
|
+
export declare const DEFAULT_MANAGEMENT_KEY_CAPABILITIES: readonly ("me:read" | "models:read" | "providers:read" | "pricing:read" | "credits:read" | "activity:read" | "analytics:read" | "generations:read" | "workspaces:read" | "workspaces:write" | "workspaces:delete" | "keys:read" | "keys:write" | "keys:delete" | "presets:read" | "presets:write" | "presets:delete" | "settings:read" | "settings:write" | "guardrails:read" | "guardrails:write" | "guardrails:delete" | "management_keys:read" | "management_keys:write" | "management_keys:delete" | "oauth_clients:read" | "oauth_clients:write" | "oauth_clients:delete")[];
|
|
36
|
+
export declare const ALL_SUPPORTED_SCOPES: readonly ("email" | "openid" | "profile" | "gateway:access" | "me:read" | "models:read" | "providers:read" | "pricing:read" | "credits:read" | "activity:read" | "analytics:read" | "generations:read" | "workspaces:read" | "workspaces:write" | "workspaces:delete" | "keys:read" | "keys:write" | "keys:delete" | "presets:read" | "presets:write" | "presets:delete" | "settings:read" | "settings:write" | "guardrails:read" | "guardrails:write" | "guardrails:delete" | "management_keys:read" | "management_keys:write" | "management_keys:delete" | "oauth_clients:read" | "oauth_clients:write" | "oauth_clients:delete")[];
|
|
37
|
+
export declare function isSupportedScope(scope: string): boolean;
|
|
38
|
+
export declare function isControlCapability(scope: string): boolean;
|
|
39
|
+
export declare function normalizeScopeList(input: unknown, options?: {
|
|
40
|
+
allowIdentityScopes?: boolean;
|
|
41
|
+
defaultScopes?: readonly string[];
|
|
42
|
+
}): {
|
|
43
|
+
ok: true;
|
|
44
|
+
value: string[];
|
|
45
|
+
} | {
|
|
46
|
+
ok: false;
|
|
47
|
+
message: string;
|
|
48
|
+
};
|
|
49
|
+
export declare function serializeScopeList(scopes: readonly string[]): string;
|
|
50
|
+
export declare function parseStoredScopeList(value: unknown): string[];
|
|
51
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/generated/capabilities.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,yCAIlB,CAAC;AAEX,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAC;AAE9D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bf,CAAC;AAEX,eAAO,MAAM,oBAAoB,mjBAA6C,CAAC;AAE/E,eAAO,MAAM,8BAA8B,olBAGzC,CAAC;AAEH,eAAO,MAAM,mCAAmC,mjBAE9C,CAAC;AAEH,eAAO,MAAM,oBAAoB,umBAI/B,CAAC;AAKH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IACR,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,GACJ;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA+BhE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAkB7D"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Generated from ../../../shared/capabilities/index.ts
|
|
2
|
+
export const IDENTITY_SCOPES = [
|
|
3
|
+
"openid",
|
|
4
|
+
"profile",
|
|
5
|
+
"email",
|
|
6
|
+
];
|
|
7
|
+
export const GATEWAY_ACCESS_SCOPE = "gateway:access";
|
|
8
|
+
export const CAPABILITIES = {
|
|
9
|
+
ME_READ: "me:read",
|
|
10
|
+
MODELS_READ: "models:read",
|
|
11
|
+
PROVIDERS_READ: "providers:read",
|
|
12
|
+
PRICING_READ: "pricing:read",
|
|
13
|
+
CREDITS_READ: "credits:read",
|
|
14
|
+
ACTIVITY_READ: "activity:read",
|
|
15
|
+
ANALYTICS_READ: "analytics:read",
|
|
16
|
+
GENERATIONS_READ: "generations:read",
|
|
17
|
+
WORKSPACES_READ: "workspaces:read",
|
|
18
|
+
WORKSPACES_WRITE: "workspaces:write",
|
|
19
|
+
WORKSPACES_DELETE: "workspaces:delete",
|
|
20
|
+
KEYS_READ: "keys:read",
|
|
21
|
+
KEYS_WRITE: "keys:write",
|
|
22
|
+
KEYS_DELETE: "keys:delete",
|
|
23
|
+
PRESETS_READ: "presets:read",
|
|
24
|
+
PRESETS_WRITE: "presets:write",
|
|
25
|
+
PRESETS_DELETE: "presets:delete",
|
|
26
|
+
SETTINGS_READ: "settings:read",
|
|
27
|
+
SETTINGS_WRITE: "settings:write",
|
|
28
|
+
GUARDRAILS_READ: "guardrails:read",
|
|
29
|
+
GUARDRAILS_WRITE: "guardrails:write",
|
|
30
|
+
GUARDRAILS_DELETE: "guardrails:delete",
|
|
31
|
+
MANAGEMENT_KEYS_READ: "management_keys:read",
|
|
32
|
+
MANAGEMENT_KEYS_WRITE: "management_keys:write",
|
|
33
|
+
MANAGEMENT_KEYS_DELETE: "management_keys:delete",
|
|
34
|
+
OAUTH_CLIENTS_READ: "oauth_clients:read",
|
|
35
|
+
OAUTH_CLIENTS_WRITE: "oauth_clients:write",
|
|
36
|
+
OAUTH_CLIENTS_DELETE: "oauth_clients:delete",
|
|
37
|
+
};
|
|
38
|
+
export const CONTROL_CAPABILITIES = Object.freeze(Object.values(CAPABILITIES));
|
|
39
|
+
export const DEFAULT_CLI_OAUTH_CAPABILITIES = Object.freeze([
|
|
40
|
+
...IDENTITY_SCOPES,
|
|
41
|
+
...CONTROL_CAPABILITIES,
|
|
42
|
+
]);
|
|
43
|
+
export const DEFAULT_MANAGEMENT_KEY_CAPABILITIES = Object.freeze([
|
|
44
|
+
...CONTROL_CAPABILITIES,
|
|
45
|
+
]);
|
|
46
|
+
export const ALL_SUPPORTED_SCOPES = Object.freeze([
|
|
47
|
+
...IDENTITY_SCOPES,
|
|
48
|
+
GATEWAY_ACCESS_SCOPE,
|
|
49
|
+
...CONTROL_CAPABILITIES,
|
|
50
|
+
]);
|
|
51
|
+
const CONTROL_CAPABILITY_SET = new Set(CONTROL_CAPABILITIES);
|
|
52
|
+
const SUPPORTED_SCOPE_SET = new Set(ALL_SUPPORTED_SCOPES);
|
|
53
|
+
export function isSupportedScope(scope) {
|
|
54
|
+
return SUPPORTED_SCOPE_SET.has(scope);
|
|
55
|
+
}
|
|
56
|
+
export function isControlCapability(scope) {
|
|
57
|
+
return CONTROL_CAPABILITY_SET.has(scope);
|
|
58
|
+
}
|
|
59
|
+
export function normalizeScopeList(input, options = {}) {
|
|
60
|
+
const allowIdentityScopes = options.allowIdentityScopes !== false;
|
|
61
|
+
const defaultScopes = Array.isArray(options.defaultScopes) ? options.defaultScopes : [];
|
|
62
|
+
const rawValues = input === undefined || input === null
|
|
63
|
+
? defaultScopes
|
|
64
|
+
: typeof input === "string"
|
|
65
|
+
? input.split(/[,\s]+/)
|
|
66
|
+
: Array.isArray(input)
|
|
67
|
+
? input
|
|
68
|
+
: null;
|
|
69
|
+
if (!rawValues) {
|
|
70
|
+
return { ok: false, message: "scopes must be a string or string[]" };
|
|
71
|
+
}
|
|
72
|
+
const scopes = [];
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
for (const rawScope of rawValues) {
|
|
75
|
+
const scope = String(rawScope ?? "").trim();
|
|
76
|
+
if (!scope || seen.has(scope))
|
|
77
|
+
continue;
|
|
78
|
+
if (!isSupportedScope(scope)) {
|
|
79
|
+
return { ok: false, message: `Unsupported scope: ${scope}` };
|
|
80
|
+
}
|
|
81
|
+
if (!allowIdentityScopes && !isControlCapability(scope)) {
|
|
82
|
+
return { ok: false, message: `Identity scope is not allowed here: ${scope}` };
|
|
83
|
+
}
|
|
84
|
+
seen.add(scope);
|
|
85
|
+
scopes.push(scope);
|
|
86
|
+
}
|
|
87
|
+
return { ok: true, value: scopes };
|
|
88
|
+
}
|
|
89
|
+
export function serializeScopeList(scopes) {
|
|
90
|
+
return JSON.stringify(Array.from(new Set(scopes.map((scope) => String(scope).trim()).filter(Boolean))));
|
|
91
|
+
}
|
|
92
|
+
export function parseStoredScopeList(value) {
|
|
93
|
+
if (Array.isArray(value)) {
|
|
94
|
+
return value.map((entry) => String(entry).trim()).filter(Boolean);
|
|
95
|
+
}
|
|
96
|
+
if (typeof value !== "string") {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
const trimmed = value.trim();
|
|
100
|
+
if (!trimmed)
|
|
101
|
+
return [];
|
|
102
|
+
try {
|
|
103
|
+
const parsed = JSON.parse(trimmed);
|
|
104
|
+
if (Array.isArray(parsed)) {
|
|
105
|
+
return parsed.map((entry) => String(entry).trim()).filter(Boolean);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Fall through to plain text parsing for legacy values.
|
|
110
|
+
}
|
|
111
|
+
return trimmed.split(/[,\s]+/).map((entry) => entry.trim()).filter(Boolean);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/generated/capabilities.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,QAAQ;IACR,SAAS;IACT,OAAO;CACE,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAyB,CAAC;AAE9D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;CACnC,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3D,GAAG,eAAe;IAClB,GAAG,oBAAoB;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAC,MAAM,CAAC;IAChE,GAAG,oBAAoB;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,GAAG,eAAe;IAClB,oBAAoB;IACpB,GAAG,oBAAoB;CACvB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AACrE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAElE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC7C,OAAO,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAChD,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,KAAc,EACd,UAGI,EAAE;IAEN,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,KAAK,KAAK,CAAC;IAClE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,SAAS,GACd,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QACpC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;YACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACrB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,KAAK,EAAE,EAAE,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,KAAK,EAAE,EAAE,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAyB;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,wDAAwD;IACzD,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/generated/meta.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,WAAW,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/generated/meta.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
type ParsedArgs = {
|
|
3
|
+
command: string[];
|
|
4
|
+
flags: Record<string, string | boolean>;
|
|
5
|
+
};
|
|
6
|
+
type LoginMethod = "browser" | "device";
|
|
7
|
+
type CallbackOutcome = {
|
|
8
|
+
ok: true;
|
|
9
|
+
code: string;
|
|
10
|
+
state: string;
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
error: string;
|
|
14
|
+
errorDescription?: string;
|
|
15
|
+
state?: string;
|
|
16
|
+
};
|
|
17
|
+
type CallbackInspection = CallbackOutcome | {
|
|
18
|
+
ok: false;
|
|
19
|
+
pending: true;
|
|
20
|
+
};
|
|
21
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
22
|
+
export declare function helpKeyForCommand(command: string[]): string;
|
|
23
|
+
export declare function renderHelp(command: string[]): string;
|
|
24
|
+
export declare function renderVersionText(details: {
|
|
25
|
+
version: string;
|
|
26
|
+
packageManager: string;
|
|
27
|
+
installCommand: string;
|
|
28
|
+
updateCommand: string;
|
|
29
|
+
latestVersion: string | null;
|
|
30
|
+
updateAvailable: boolean;
|
|
31
|
+
}): string;
|
|
32
|
+
export declare function prefersDeviceCodeByEnvironment(env?: NodeJS.ProcessEnv): boolean;
|
|
33
|
+
export declare function windowsBrowserOpenArgs(url: string): string[];
|
|
34
|
+
export declare function renderOneTimeClientSecret(secret: unknown, showSecret: boolean): string;
|
|
35
|
+
export declare function renderLoginBanner(): string;
|
|
36
|
+
export declare function renderLoginMenu(selectedIndex: number, defaultMethod: LoginMethod): string;
|
|
37
|
+
export declare function nextLoginMenuIndex(currentIndex: number, rawInput: string, optionCount: number): number;
|
|
38
|
+
export declare function inspectCallbackRequest(requestUrl: URL, expectedState: string): CallbackInspection;
|
|
39
|
+
export declare function validateLoopbackRedirectUri(value: string): string;
|
|
40
|
+
export declare function callbackListenHost(redirectUri: string): string;
|
|
41
|
+
export declare function buildModelsListPath(flags: Record<string, string | boolean>): string;
|
|
42
|
+
export declare function buildLogsListPath(flags: Record<string, string | boolean>): string;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAuBA,KAAK,UAAU,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACxC,CAAC;AAGF,KAAK,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AACxC,KAAK,eAAe,GACjB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,KAAK,kBAAkB,GACpB,eAAe,GACf;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC;AA0BhC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA+BpD;AA8SD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAO3D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBpD;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CAeT;AAiED,wBAAgB,8BAA8B,CAC7C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,OAAO,CAOT;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAKtF;AAMD,wBAAgB,iBAAiB,IAAI,MAAM,CAc1C;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,MAAM,CAoBzF;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CActG;AAED,wBAAgB,sBAAsB,CACrC,UAAU,EAAE,GAAG,EACf,aAAa,EAAE,MAAM,GACnB,kBAAkB,CAepB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG9D;AA8yBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAOnF;AA8ED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAiBjF"}
|