@paradigma-inc/flywheel 0.1.111 → 0.1.115
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/README.md +12 -3
- package/package.json +1 -1
- package/skills/flywheel/getting-started/flywheel-tutorial-overview.md +1 -1
- package/skills/flywheel/setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md +12 -4
- package/skills/flywheel/setting-up-flywheel/other-hosts-installation.md +8 -1
- package/skills/flywheel-llm-proof-paper/scripts/__pycache__/check_paper.cpython-312.pyc +0 -0
- package/src/runtime/required-runtime-commands.json +3 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.d.ts +16 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js +36 -14
- package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.d.ts +2 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js +15 -6
- package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.js +9 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.js +11 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.js +20 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/index.d.ts +21 -21
- package/src/runtime/vendor/flywheel-cli-dist/commands/index.js +268 -262
- package/src/runtime/vendor/flywheel-cli-dist/commands/index.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.d.ts +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js +206 -66
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js +2 -2
- package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/http/client.js +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/http/client.js.map +1 -1
- package/src/runtime/vendor/manifest.json +10 -1
package/README.md
CHANGED
|
@@ -339,9 +339,18 @@ Gemini CLI currently do). On the first MCP tool call the IDE hits
|
|
|
339
339
|
`/mcp-server`, follows the `WWW-Authenticate` hint to
|
|
340
340
|
`/.well-known/oauth-protected-resource`, reads the authorization-server
|
|
341
341
|
metadata advertising `client_id_metadata_document_supported`, and presents
|
|
342
|
-
its public HTTPS Client ID Metadata Document as `client_id`. There is no
|
|
343
|
-
registration endpoint
|
|
344
|
-
|
|
342
|
+
its public HTTPS Client ID Metadata Document as `client_id`. There is no public
|
|
343
|
+
registration endpoint and no private enrollment step. Flywheel validates the
|
|
344
|
+
exact client identity, complete redirect set, selected redirect, PKCE, and
|
|
345
|
+
requested scopes before issuing credentials after authenticated consent.
|
|
346
|
+
|
|
347
|
+
The IDE manages and persists its own access and single-use refresh credentials.
|
|
348
|
+
It should reuse a valid access credential and rotate the refresh credential
|
|
349
|
+
without opening a browser. Flywheel can also skip repeat consent when the same
|
|
350
|
+
user, exact client identity and redirect, active grant, and equal-or-narrower
|
|
351
|
+
scopes still match. A new or changed identity or redirect, scope expansion,
|
|
352
|
+
expiry, revocation, or disconnect requires consent again. No API key ever
|
|
353
|
+
touches the user's filesystem.
|
|
345
354
|
|
|
346
355
|
`--api-key` and `--oauth` are mutually exclusive; passing both produces a
|
|
347
356
|
usage error (`exit 2`).
|
package/package.json
CHANGED
|
@@ -26,6 +26,6 @@ While in SWE we use git to manage changes to code, in research we are interested
|
|
|
26
26
|
- [Credits and billing](../compute/credits-and-billing.md)
|
|
27
27
|
- [Using local hardware with Flywheel](../usage-and-workflows/using-local-hardware-with-flywheel.md)
|
|
28
28
|
- [Participating in a Campaign](../campaigns/participating-in-a-campaign.md)
|
|
29
|
-
- [OAuth
|
|
29
|
+
- [OAuth Client ID Metadata FAQ](../setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md)
|
|
30
30
|
- [Flywheel MCP tool map](../references/flywheel-mcp-tool-map.md)
|
|
31
31
|
- [Example workflows](../example-workflows/)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# FAQ: How Can I
|
|
1
|
+
# FAQ: How Can I Use a `client_id` for the OAuth Flow?
|
|
2
2
|
|
|
3
|
-
Flywheel uses [OAuth Client ID Metadata Documents](https://modelcontextprotocol.io/specification/
|
|
4
|
-
Your public HTTPS metadata-document URL is the OAuth `client_id
|
|
5
|
-
|
|
3
|
+
Flywheel uses [OAuth Client ID Metadata Documents](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration).
|
|
4
|
+
Your public HTTPS metadata-document URL is the OAuth `client_id`. There is no
|
|
5
|
+
Dynamic Client Registration endpoint and no private enrollment or allowlist.
|
|
6
6
|
|
|
7
7
|
First, query our OAuth authorization-server metadata:
|
|
8
8
|
|
|
@@ -31,3 +31,11 @@ and validates the document during authorization and token exchange. The requeste
|
|
|
31
31
|
redirect URI must exactly match one listed value; it may be omitted only when the
|
|
32
32
|
document lists exactly one redirect URI. Do not put a client secret in the
|
|
33
33
|
document.
|
|
34
|
+
|
|
35
|
+
The first connection requires authenticated consent and PKCE. Persist the issued
|
|
36
|
+
access and single-use refresh credentials. Reuse the access credential while it
|
|
37
|
+
is valid and rotate the refresh credential instead of restarting authorization.
|
|
38
|
+
Flywheel skips repeat consent only for the same user, exact client identity and
|
|
39
|
+
selected redirect, active grant, and equal-or-narrower scopes. A new or changed
|
|
40
|
+
client identity or redirect, scope expansion, expiry, revocation, or disconnect
|
|
41
|
+
requires consent again.
|
|
@@ -37,4 +37,11 @@ Authorization = "Bearer <YOUR_MCP_API_KEY>"
|
|
|
37
37
|
|
|
38
38
|
Different hosts use different field names (`mcpServers`, `mcp_servers`, `mcp.servers`, etc.), but the server URL and `Authorization` bearer header are the key pieces.
|
|
39
39
|
|
|
40
|
-
Alternative: for any host that supports MCP OAuth,
|
|
40
|
+
Alternative: for any host that supports MCP OAuth, use its OAuth connector
|
|
41
|
+
install flow and set the MCP URL to
|
|
42
|
+
`https://flywheel.paradigma.inc/mcp-server`. Web connector hosts (for example
|
|
43
|
+
ChatGPT.com and Claude.ai) commonly use this path. A host that persists access
|
|
44
|
+
and refresh credentials should authorize once, reuse the access credential, and
|
|
45
|
+
rotate the refresh credential without another browser prompt. Reauthorization
|
|
46
|
+
is needed when the host loses its credentials or the grant expires, is revoked,
|
|
47
|
+
or requests changed authority.
|
|
Binary file
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import type { CliGlobals } from
|
|
1
|
+
import type { CliGlobals } from "../grammar/globals.js";
|
|
2
2
|
export interface BrowserHandoffResult {
|
|
3
|
-
status:
|
|
3
|
+
status: "browser_flow_required";
|
|
4
4
|
command: string;
|
|
5
5
|
url: string;
|
|
6
6
|
opened: boolean;
|
|
7
7
|
next_action: string;
|
|
8
8
|
}
|
|
9
|
+
export interface PrivateBrowserHandoffResult {
|
|
10
|
+
status: "private_browser_handoff_started";
|
|
11
|
+
command: string;
|
|
12
|
+
opened: true;
|
|
13
|
+
next_action: string;
|
|
14
|
+
}
|
|
9
15
|
/**
|
|
10
16
|
* Normalizes route-specific browser URLs into the CLI's stable handoff result.
|
|
11
17
|
* Billing routes expose Stripe-shaped checkout/portal fields, while OAuth and
|
|
12
18
|
* generic handoffs use open_url/url.
|
|
13
19
|
*/
|
|
14
20
|
export declare function extractOpenUrl(payload: Record<string, unknown>): string;
|
|
21
|
+
export declare function requirePrivateBrowserHandoff(globals: CliGlobals | undefined): void;
|
|
15
22
|
export declare function buildBrowserHandoffResult({ command, url, globals, stderr, nextAction, }: {
|
|
16
23
|
command: string;
|
|
17
24
|
url: string;
|
|
@@ -19,3 +26,10 @@ export declare function buildBrowserHandoffResult({ command, url, globals, stder
|
|
|
19
26
|
stderr?: (chunk: string) => void;
|
|
20
27
|
nextAction: string;
|
|
21
28
|
}): Promise<BrowserHandoffResult>;
|
|
29
|
+
export declare function buildPrivateBrowserHandoffResult({ command, url, globals, stderr, nextAction, }: {
|
|
30
|
+
command: string;
|
|
31
|
+
url: string;
|
|
32
|
+
globals: CliGlobals | undefined;
|
|
33
|
+
stderr?: (chunk: string) => void;
|
|
34
|
+
nextAction: string;
|
|
35
|
+
}): Promise<PrivateBrowserHandoffResult>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { CliUsageError } from "../errors.js";
|
|
2
|
+
import { EXIT_TRANSPORT } from "../exit-codes.js";
|
|
3
|
+
import { CliHttpError } from "../http/client.js";
|
|
4
|
+
import { maybeOpenUrl } from "./_open-url.js";
|
|
4
5
|
const BROWSER_HANDOFF_URL_KEYS = [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
"open_url",
|
|
7
|
+
"url",
|
|
8
|
+
"checkout_url",
|
|
9
|
+
"portal_url",
|
|
9
10
|
];
|
|
10
11
|
/**
|
|
11
12
|
* Normalizes route-specific browser URLs into the CLI's stable handoff result.
|
|
@@ -15,37 +16,58 @@ const BROWSER_HANDOFF_URL_KEYS = [
|
|
|
15
16
|
export function extractOpenUrl(payload) {
|
|
16
17
|
for (const key of BROWSER_HANDOFF_URL_KEYS) {
|
|
17
18
|
const value = payload[key];
|
|
18
|
-
if (typeof value ===
|
|
19
|
+
if (typeof value === "string")
|
|
19
20
|
return value;
|
|
20
21
|
}
|
|
21
|
-
return
|
|
22
|
+
return "";
|
|
22
23
|
}
|
|
23
24
|
function validatedBrowserHandoffUrl(url) {
|
|
24
25
|
const trimmed = url.trim();
|
|
25
26
|
if (!trimmed) {
|
|
26
|
-
throw new CliHttpError(
|
|
27
|
+
throw new CliHttpError("browser handoff response missing browser URL", EXIT_TRANSPORT);
|
|
27
28
|
}
|
|
28
29
|
let parsed;
|
|
29
30
|
try {
|
|
30
31
|
parsed = new URL(trimmed);
|
|
31
32
|
}
|
|
32
33
|
catch {
|
|
33
|
-
throw new CliHttpError(
|
|
34
|
+
throw new CliHttpError("browser handoff response included an invalid browser URL", EXIT_TRANSPORT);
|
|
34
35
|
}
|
|
35
|
-
if (parsed.protocol !==
|
|
36
|
-
throw new CliHttpError(
|
|
36
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
|
|
37
|
+
throw new CliHttpError("browser handoff response included a non-HTTP browser URL", EXIT_TRANSPORT);
|
|
37
38
|
}
|
|
38
39
|
return trimmed;
|
|
39
40
|
}
|
|
41
|
+
export function requirePrivateBrowserHandoff(globals) {
|
|
42
|
+
if (!globals?.open) {
|
|
43
|
+
throw new CliUsageError("admin:test-users:login requires --open for private browser handoff");
|
|
44
|
+
}
|
|
45
|
+
if (!process.stdout.isTTY) {
|
|
46
|
+
throw new CliUsageError("admin:test-users:login requires an interactive terminal for private browser handoff");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
40
49
|
export async function buildBrowserHandoffResult({ command, url, globals, stderr, nextAction, }) {
|
|
41
50
|
const handoffUrl = validatedBrowserHandoffUrl(url);
|
|
42
51
|
const opened = await maybeOpenUrl(handoffUrl, globals, stderr);
|
|
43
52
|
return {
|
|
44
|
-
status:
|
|
53
|
+
status: "browser_flow_required",
|
|
45
54
|
command,
|
|
46
55
|
url: handoffUrl,
|
|
47
56
|
opened,
|
|
48
57
|
next_action: nextAction,
|
|
49
58
|
};
|
|
50
59
|
}
|
|
60
|
+
export async function buildPrivateBrowserHandoffResult({ command, url, globals, stderr, nextAction, }) {
|
|
61
|
+
requirePrivateBrowserHandoff(globals);
|
|
62
|
+
const opened = await maybeOpenUrl(validatedBrowserHandoffUrl(url), globals, stderr, true);
|
|
63
|
+
if (!opened) {
|
|
64
|
+
throw new CliHttpError("private browser handoff could not be opened", EXIT_TRANSPORT);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
status: "private_browser_handoff_started",
|
|
68
|
+
command,
|
|
69
|
+
opened: true,
|
|
70
|
+
next_action: nextAction,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
51
73
|
//# sourceMappingURL=_browser-handoff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_browser-handoff.js","sourceRoot":"","sources":["../../src/commands/_browser-handoff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"_browser-handoff.js","sourceRoot":"","sources":["../../src/commands/_browser-handoff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiB9C,MAAM,wBAAwB,GAAG;IAC/B,UAAU;IACV,KAAK;IACL,cAAc;IACd,YAAY;CACJ,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgC;IAC7D,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CACpB,8CAA8C,EAC9C,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,cAAc,CACf,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAA+B;IAE/B,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,aAAa,CACrB,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,aAAa,CACrB,qFAAqF,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,OAAO,EACP,GAAG,EACH,OAAO,EACP,MAAM,EACN,UAAU,GAOX;IACC,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO;QACL,MAAM,EAAE,uBAAuB;QAC/B,OAAO;QACP,GAAG,EAAE,UAAU;QACf,MAAM;QACN,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,EACrD,OAAO,EACP,GAAG,EACH,OAAO,EACP,MAAM,EACN,UAAU,GAOX;IACC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,0BAA0B,CAAC,GAAG,CAAC,EAC/B,OAAO,EACP,MAAM,EACN,IAAI,CACL,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,YAAY,CACpB,6CAA6C,EAC7C,cAAc,CACf,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,iCAAiC;QACzC,OAAO;QACP,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { CliGlobals } from
|
|
2
|
-
export declare function maybeOpenUrl(url: string | undefined, globals: CliGlobals | undefined, stderr?: (chunk: string) => void): Promise<boolean>;
|
|
1
|
+
import type { CliGlobals } from "../grammar/globals.js";
|
|
2
|
+
export declare function maybeOpenUrl(url: string | undefined, globals: CliGlobals | undefined, stderr?: (chunk: string) => void, privateBrowser?: boolean): Promise<boolean>;
|
|
@@ -1,24 +1,33 @@
|
|
|
1
|
-
export async function maybeOpenUrl(url, globals, stderr) {
|
|
1
|
+
export async function maybeOpenUrl(url, globals, stderr, privateBrowser = false) {
|
|
2
2
|
if (!url || !globals?.open)
|
|
3
3
|
return false;
|
|
4
4
|
if (!process.stdout.isTTY)
|
|
5
5
|
return false;
|
|
6
6
|
try {
|
|
7
|
-
const mod = (await import(
|
|
7
|
+
const mod = (await import("open"));
|
|
8
8
|
let open;
|
|
9
|
-
if (typeof mod ===
|
|
9
|
+
if (typeof mod === "function") {
|
|
10
10
|
open = mod;
|
|
11
11
|
}
|
|
12
|
-
else if (mod &&
|
|
12
|
+
else if (mod &&
|
|
13
|
+
typeof mod.default === "function") {
|
|
13
14
|
open = mod.default;
|
|
14
15
|
}
|
|
15
16
|
if (open) {
|
|
16
|
-
|
|
17
|
+
if (privateBrowser) {
|
|
18
|
+
const browserPrivate = mod.apps?.browserPrivate;
|
|
19
|
+
if (!browserPrivate)
|
|
20
|
+
return false;
|
|
21
|
+
await open(url, { app: { name: browserPrivate } });
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
await open(url);
|
|
25
|
+
}
|
|
17
26
|
return true;
|
|
18
27
|
}
|
|
19
28
|
}
|
|
20
29
|
catch {
|
|
21
|
-
const msg =
|
|
30
|
+
const msg = "--open skipped: install the `open` package to enable browser launch\n";
|
|
22
31
|
if (stderr)
|
|
23
32
|
stderr(msg);
|
|
24
33
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_open-url.js","sourceRoot":"","sources":["../../src/commands/_open-url.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_open-url.js","sourceRoot":"","sources":["../../src/commands/_open-url.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAuB,EACvB,OAA+B,EAC/B,MAAgC,EAChC,cAAc,GAAG,KAAK;IAEtB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,MAAgB,CAAC,CAAY,CAAC;QACxD,IAAI,IAAwB,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAa,CAAC;QACvB,CAAC;aAAM,IACL,GAAG;YACH,OAAQ,GAA6B,CAAC,OAAO,KAAK,UAAU,EAC5D,CAAC;YACD,IAAI,GAAI,GAA2B,CAAC,OAAO,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,cAAc,GAClB,GACD,CAAC,IAAI,EAAE,cAAc,CAAC;gBACvB,IAAI,CAAC,cAAc;oBAAE,OAAO,KAAK,CAAC;gBAClC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,GACP,uEAAuE,CAAC;QAC1E,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { adminAuthRequestOptions, requireAdminCredential, } from "./_admin-auth.js";
|
|
2
|
+
export const adminTestUsersCreateCommand = async (context) => {
|
|
3
|
+
requireAdminCredential(context, "admin:test-users:create");
|
|
4
|
+
const options = {
|
|
5
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
6
|
+
};
|
|
7
|
+
return context.requestJson("POST", "/admin/test-users", options);
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=admin-test-users-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-test-users-create.js","sourceRoot":"","sources":["../../src/commands/admin-test-users-create.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,MAAM,2BAA2B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3E,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { adminAuthRequestOptions, requireAdminCredential, } from "./_admin-auth.js";
|
|
2
|
+
import { requiredString } from "./utils.js";
|
|
3
|
+
export const adminTestUsersDeleteCommand = async (context) => {
|
|
4
|
+
requireAdminCredential(context, "admin:test-users:delete");
|
|
5
|
+
const userId = requiredString(context.params, "user_id");
|
|
6
|
+
const options = {
|
|
7
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
8
|
+
};
|
|
9
|
+
return context.requestJson("DELETE", `/admin/test-users/${encodeURIComponent(userId)}`, options);
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=admin-test-users-delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-test-users-delete.js","sourceRoot":"","sources":["../../src/commands/admin-test-users-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,2BAA2B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3E,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,OAAO,OAAO,CAAC,WAAW,CACxB,QAAQ,EACR,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACjD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { adminAuthRequestOptions, requireAdminCredential, } from "./_admin-auth.js";
|
|
2
|
+
import { buildPrivateBrowserHandoffResult, requirePrivateBrowserHandoff, } from "./_browser-handoff.js";
|
|
3
|
+
import { requiredString } from "./utils.js";
|
|
4
|
+
export const adminTestUsersLoginCommand = async (context) => {
|
|
5
|
+
requireAdminCredential(context, "admin:test-users:login");
|
|
6
|
+
requirePrivateBrowserHandoff(context.globals);
|
|
7
|
+
const userId = requiredString(context.params, "user_id");
|
|
8
|
+
const options = {
|
|
9
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
10
|
+
};
|
|
11
|
+
const payload = (await context.requestJson("POST", `/admin/test-users/${encodeURIComponent(userId)}/login-link`, options)) ?? {};
|
|
12
|
+
return buildPrivateBrowserHandoffResult({
|
|
13
|
+
command: "admin:test-users:login",
|
|
14
|
+
url: typeof payload.action_link === "string" ? payload.action_link : "",
|
|
15
|
+
globals: context.globals,
|
|
16
|
+
stderr: context.stderr,
|
|
17
|
+
nextAction: "Test-user browser session opened.",
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=admin-test-users-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-test-users-login.js","sourceRoot":"","sources":["../../src/commands/admin-test-users-login.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,0BAA0B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1E,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAC1D,4BAA4B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,MAAM,OAAO,GACX,CAAC,MAAM,OAAO,CAAC,WAAW,CACxB,MAAM,EACN,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAC5D,OAAO,CACR,CAAC,IAAI,EAAE,CAAC;IACX,OAAO,gCAAgC,CAAC;QACtC,OAAO,EAAE,wBAAwB;QACjC,GAAG,EAAE,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QACvE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,mCAAmC;KAChD,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { artifactsGetCommand } from
|
|
2
|
-
import { artifactsListCommand } from
|
|
3
|
-
import { authLoginCommand } from
|
|
4
|
-
import { authStatusCommand } from
|
|
5
|
-
import { computeStatusCommand } from
|
|
6
|
-
import { exportSubgraphCommand } from
|
|
7
|
-
import { nodesChildrenCommand } from
|
|
8
|
-
import { nodesCommitCommand } from
|
|
9
|
-
import { nodesCommitNewCommand } from
|
|
10
|
-
import { nodesDeleteCommand } from
|
|
11
|
-
import { nodesGetCommand } from
|
|
12
|
-
import { nodesListCommand } from
|
|
13
|
-
import { nodesParentsCommand } from
|
|
14
|
-
import { nodesRenderTreeCommand } from
|
|
15
|
-
import { nodesStageLeaseAcquireCommand } from
|
|
16
|
-
import { profileListCommand } from
|
|
17
|
-
import { profileShowCommand } from
|
|
18
|
-
import { profileSetCommand } from
|
|
19
|
-
import { profileUnsetCommand } from
|
|
20
|
-
import { graphGetCommand } from
|
|
21
|
-
import type { CommandHandler } from
|
|
1
|
+
import { artifactsGetCommand } from "./artifacts-get.js";
|
|
2
|
+
import { artifactsListCommand } from "./artifacts-list.js";
|
|
3
|
+
import { authLoginCommand } from "./auth-login.js";
|
|
4
|
+
import { authStatusCommand } from "./auth-status.js";
|
|
5
|
+
import { computeStatusCommand } from "./compute-status.js";
|
|
6
|
+
import { exportSubgraphCommand } from "./export-subgraph.js";
|
|
7
|
+
import { nodesChildrenCommand } from "./nodes-children.js";
|
|
8
|
+
import { nodesCommitCommand } from "./nodes-commit.js";
|
|
9
|
+
import { nodesCommitNewCommand } from "./nodes-commit-new.js";
|
|
10
|
+
import { nodesDeleteCommand } from "./nodes-delete.js";
|
|
11
|
+
import { nodesGetCommand } from "./nodes-get.js";
|
|
12
|
+
import { nodesListCommand } from "./nodes-list.js";
|
|
13
|
+
import { nodesParentsCommand } from "./nodes-parents.js";
|
|
14
|
+
import { nodesRenderTreeCommand } from "./nodes-render-tree.js";
|
|
15
|
+
import { nodesStageLeaseAcquireCommand } from "./nodes-stage-lease-acquire.js";
|
|
16
|
+
import { profileListCommand } from "./profile-list.js";
|
|
17
|
+
import { profileShowCommand } from "./profile-show.js";
|
|
18
|
+
import { profileSetCommand } from "./profile-set.js";
|
|
19
|
+
import { profileUnsetCommand } from "./profile-unset.js";
|
|
20
|
+
import { graphGetCommand } from "./graph-get.js";
|
|
21
|
+
import type { CommandHandler } from "./types.js";
|
|
22
22
|
export { artifactsGetCommand, artifactsListCommand, authLoginCommand, authStatusCommand, computeStatusCommand, exportSubgraphCommand, graphGetCommand, nodesChildrenCommand, nodesCommitCommand, nodesCommitNewCommand, nodesDeleteCommand, nodesGetCommand, nodesListCommand, nodesParentsCommand, nodesRenderTreeCommand, nodesStageLeaseAcquireCommand, profileListCommand, profileShowCommand, profileSetCommand, profileUnsetCommand, };
|
|
23
23
|
export declare const MVP_COMMAND_HANDLERS: Record<string, CommandHandler>;
|