crewx-bridge 0.2.27 → 0.2.29

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.
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { type BridgePathEnvironment } from "./config.js";
3
+ /**
4
+ * The signed-in person, kept apart from the machine's own credential.
5
+ *
6
+ * `config.json` speaks for one machine and carries typed commands. This file
7
+ * speaks for a person. Keeping them in separate files means signing out does
8
+ * not disturb a running machine, and the two expire on their own schedules.
9
+ */
10
+ declare const CliAccountSchema: z.ZodObject<{
11
+ version: z.ZodLiteral<1>;
12
+ url: z.ZodString;
13
+ token: z.ZodString;
14
+ expiresAt: z.ZodString;
15
+ account: z.ZodOptional<z.ZodObject<{
16
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
17
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ }, z.core.$strict>>;
19
+ }, z.core.$strict>;
20
+ export type CliAccount = z.infer<typeof CliAccountSchema>;
21
+ export declare function cliAccountPath(environment?: BridgePathEnvironment, platform?: NodeJS.Platform): string;
22
+ export declare function readCliAccount(environment?: BridgePathEnvironment, platform?: NodeJS.Platform): Promise<CliAccount | null>;
23
+ /** The token is only useful while it lasts; say so rather than failing later. */
24
+ export declare function isAccountExpired(account: CliAccount): boolean;
25
+ export declare function saveCliAccount(account: CliAccount, environment?: BridgePathEnvironment, platform?: NodeJS.Platform): Promise<string>;
26
+ export declare function clearCliAccount(environment?: BridgePathEnvironment, platform?: NodeJS.Platform): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,aAAa,CAAC;AAGrB;;;;;;GAMG;AACH,QAAA,MAAM,gBAAgB;;;;;;;;;kBAcX,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,wBAAgB,cAAc,CAC5B,WAAW,GAAE,qBAAmC,EAChD,QAAQ,kBAAmB,GAC1B,MAAM,CAER;AAED,wBAAsB,cAAc,CAClC,WAAW,GAAE,qBAAmC,EAChD,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA4B5B;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAG7D;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,UAAU,EACnB,WAAW,GAAE,qBAAmC,EAChD,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,eAAe,CACnC,WAAW,GAAE,qBAAmC,EAChD,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,66 @@
1
+ import { readFile, rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { z } from "zod";
4
+ import { bridgeConfigDirectory, writeSecureText, } from "./config.js";
5
+ import { BridgeError } from "./errors.js";
6
+ /**
7
+ * The signed-in person, kept apart from the machine's own credential.
8
+ *
9
+ * `config.json` speaks for one machine and carries typed commands. This file
10
+ * speaks for a person. Keeping them in separate files means signing out does
11
+ * not disturb a running machine, and the two expire on their own schedules.
12
+ */
13
+ const CliAccountSchema = z
14
+ .object({
15
+ version: z.literal(1),
16
+ url: z.string().min(1),
17
+ token: z.string().min(1),
18
+ expiresAt: z.string().min(1),
19
+ account: z
20
+ .object({
21
+ name: z.string().nullable().optional(),
22
+ email: z.string().nullable().optional(),
23
+ })
24
+ .strict()
25
+ .optional(),
26
+ })
27
+ .strict();
28
+ export function cliAccountPath(environment = process.env, platform = process.platform) {
29
+ return join(bridgeConfigDirectory(environment, platform), "account.json");
30
+ }
31
+ export async function readCliAccount(environment = process.env, platform = process.platform) {
32
+ const path = cliAccountPath(environment, platform);
33
+ let raw;
34
+ try {
35
+ raw = await readFile(path, "utf8");
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ let parsed;
41
+ try {
42
+ parsed = JSON.parse(raw);
43
+ }
44
+ catch {
45
+ throw new BridgeError("invalid_account", `The CrewX sign-in at ${path} is not readable. Run \`crewx-bridge logout\` and sign in again.`);
46
+ }
47
+ const result = CliAccountSchema.safeParse(parsed);
48
+ if (!result.success) {
49
+ throw new BridgeError("invalid_account", `The CrewX sign-in at ${path} is not usable. Run \`crewx-bridge logout\` and sign in again.`);
50
+ }
51
+ return result.data;
52
+ }
53
+ /** The token is only useful while it lasts; say so rather than failing later. */
54
+ export function isAccountExpired(account) {
55
+ const expires = Date.parse(account.expiresAt);
56
+ return Number.isNaN(expires) || expires <= Date.now();
57
+ }
58
+ export async function saveCliAccount(account, environment = process.env, platform = process.platform) {
59
+ const path = cliAccountPath(environment, platform);
60
+ await writeSecureText(path, `${JSON.stringify(account, null, 2)}\n`);
61
+ return path;
62
+ }
63
+ export async function clearCliAccount(environment = process.env, platform = process.platform) {
64
+ await rm(cliAccountPath(environment, platform), { force: true });
65
+ }
66
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * The surface a signed-in terminal talks to.
4
+ *
5
+ * Separate from `BridgeApi`, which speaks for a machine. This one speaks for a
6
+ * person, so it carries the CLI token and every call names the workspace.
7
+ */
8
+ declare const WorkspaceSchema: z.ZodObject<{
9
+ slug: z.ZodString;
10
+ name: z.ZodString;
11
+ role: z.ZodOptional<z.ZodString>;
12
+ }, z.core.$loose>;
13
+ declare const AgentSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ name: z.ZodString;
16
+ slug: z.ZodString;
17
+ runtime: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
+ status: z.ZodOptional<z.ZodNullable<z.ZodString>>;
20
+ working_directory: z.ZodOptional<z.ZodNullable<z.ZodString>>;
21
+ }, z.core.$loose>;
22
+ export type CliWorkspace = z.infer<typeof WorkspaceSchema>;
23
+ export type CliAgent = z.infer<typeof AgentSchema>;
24
+ export declare class CliApi {
25
+ private readonly baseUrl;
26
+ private readonly token;
27
+ constructor(options: {
28
+ url: string;
29
+ token: string;
30
+ });
31
+ workspaces(): Promise<CliWorkspace[]>;
32
+ agents(workspace: string): Promise<CliAgent[]>;
33
+ createAgent(workspace: string, agent: Record<string, unknown>): Promise<CliAgent>;
34
+ enrollMachine(workspace: string, described: Record<string, unknown>): Promise<unknown>;
35
+ revokeMachine(workspace: string, machineId: string): Promise<void>;
36
+ private request;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=cli-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-api.d.ts","sourceRoot":"","sources":["../src/cli-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,QAAA,MAAM,eAAe;;;;iBAMX,CAAC;AAEX,QAAA,MAAM,WAAW;;;;;;;;iBAUP,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC3D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEnD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAK7C,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAYrC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAa9C,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcjF,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC;IAQb,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAO1D,OAAO;CAyDtB"}
@@ -0,0 +1,108 @@
1
+ import { z } from "zod";
2
+ import { normalizeServerUrl } from "./config.js";
3
+ import { BridgeError } from "./errors.js";
4
+ /**
5
+ * The surface a signed-in terminal talks to.
6
+ *
7
+ * Separate from `BridgeApi`, which speaks for a machine. This one speaks for a
8
+ * person, so it carries the CLI token and every call names the workspace.
9
+ */
10
+ const WorkspaceSchema = z
11
+ .object({
12
+ slug: z.string().min(1),
13
+ name: z.string().min(1),
14
+ role: z.string().min(1).optional(),
15
+ })
16
+ .loose();
17
+ const AgentSchema = z
18
+ .object({
19
+ id: z.string().min(1),
20
+ name: z.string().min(1),
21
+ slug: z.string().min(1),
22
+ runtime: z.string().nullable().optional(),
23
+ model: z.string().nullable().optional(),
24
+ status: z.string().nullable().optional(),
25
+ working_directory: z.string().nullable().optional(),
26
+ })
27
+ .loose();
28
+ export class CliApi {
29
+ baseUrl;
30
+ token;
31
+ constructor(options) {
32
+ this.baseUrl = `${normalizeServerUrl(options.url)}/api/cli/v1`;
33
+ this.token = options.token;
34
+ }
35
+ async workspaces() {
36
+ const payload = await this.request("GET", "/workspaces");
37
+ const parsed = z
38
+ .object({ workspaces: z.array(WorkspaceSchema) })
39
+ .safeParse(payload);
40
+ if (!parsed.success) {
41
+ throw new BridgeError("invalid_response", "CrewX returned an invalid workspace list.");
42
+ }
43
+ return parsed.data.workspaces;
44
+ }
45
+ async agents(workspace) {
46
+ const payload = await this.request("GET", `/workspaces/${encodeURIComponent(workspace)}/agents`);
47
+ const parsed = z.object({ agents: z.array(AgentSchema) }).safeParse(payload);
48
+ if (!parsed.success) {
49
+ throw new BridgeError("invalid_response", "CrewX returned an invalid agent list.");
50
+ }
51
+ return parsed.data.agents;
52
+ }
53
+ async createAgent(workspace, agent) {
54
+ const payload = await this.request("POST", `/workspaces/${encodeURIComponent(workspace)}/agents`, agent);
55
+ const parsed = z.object({ agent: AgentSchema }).safeParse(payload);
56
+ if (!parsed.success) {
57
+ throw new BridgeError("invalid_response", "CrewX returned an invalid agent.");
58
+ }
59
+ return parsed.data.agent;
60
+ }
61
+ async enrollMachine(workspace, described) {
62
+ return this.request("POST", `/workspaces/${encodeURIComponent(workspace)}/machines`, described);
63
+ }
64
+ async revokeMachine(workspace, machineId) {
65
+ await this.request("DELETE", `/workspaces/${encodeURIComponent(workspace)}/machines/${encodeURIComponent(machineId)}`);
66
+ }
67
+ async request(method, path, body) {
68
+ let response;
69
+ try {
70
+ response = await fetch(`${this.baseUrl}${path}`, {
71
+ method,
72
+ headers: {
73
+ Accept: "application/json",
74
+ Authorization: `Bearer ${this.token}`,
75
+ ...(body === undefined ? {} : { "Content-Type": "application/json" }),
76
+ },
77
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
78
+ });
79
+ }
80
+ catch (error) {
81
+ throw new BridgeError("network", `Could not reach CrewX: ${error instanceof Error ? error.message : String(error)}`);
82
+ }
83
+ let payload;
84
+ try {
85
+ payload = await response.json();
86
+ }
87
+ catch {
88
+ payload = undefined;
89
+ }
90
+ if (response.status === 401) {
91
+ throw new BridgeError("signed_out", "That CrewX sign-in is no longer valid. Run `crewx-bridge login` again.");
92
+ }
93
+ if (response.status === 403) {
94
+ throw new BridgeError("forbidden", "This account is not allowed to do that in that workspace.");
95
+ }
96
+ if (response.status >= 400) {
97
+ // Laravel's validation shape, surfaced rather than swallowed: the person
98
+ // needs to know which field CrewX objected to.
99
+ const message = typeof payload === "object" && payload !== null
100
+ ? String(payload.message ??
101
+ `CrewX refused the request (HTTP ${response.status}).`)
102
+ : `CrewX refused the request (HTTP ${response.status}).`;
103
+ throw new BridgeError("request_failed", message);
104
+ }
105
+ return payload;
106
+ }
107
+ }
108
+ //# sourceMappingURL=cli-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-api.js","sourceRoot":"","sources":["../src/cli-api.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,19 @@ export declare const DEFAULT_POLL_INTERVAL_MS = 3000;
4
4
  export declare const REQUEST_TIMEOUT_MS = 15000;
5
5
  export declare const CONFIG_VERSION: 1;
6
6
  export declare const ADAPTERS: readonly ["pi", "openclaw", "codex", "claude", "gemini", "cursor", "copilot", "droid", "fast-agent", "grok-build", "iflow", "kilocode", "kimi", "kiro", "mux", "opencode", "pool", "qoder", "qwen", "trae", "zeroclaw", "hermes"];
7
+ /**
8
+ * How many agents a freshly enrolled machine may host.
9
+ *
10
+ * A slot is held for as long as an agent is alive, not just while it is
11
+ * working, so this is really "how many teammates can live here" — at 2 a
12
+ * laptop could not hold a Claude agent, a Codex agent and anything else.
13
+ * Machines already enrolled keep whatever they were given; `policy
14
+ * --max-runs` changes it without re-enrolling.
15
+ */
16
+ export declare const DEFAULT_MAX_CONCURRENT_RUNS = 15;
17
+ /**
18
+ * Where CrewX lives, so `npx crewx-bridge install` needs nothing after it.
19
+ * Overridden with --url for a self-hosted or local server.
20
+ */
21
+ export declare const DEFAULT_CREWX_URL = "https://app.crewx.ai";
7
22
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,cAAc,QAA0B,CAAC;AACtD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,cAAc,EAAG,CAAU,CAAC;AACzC,eAAO,MAAM,QAAQ,mOAAiB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,cAAc,QAA0B,CAAC;AACtD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,cAAc,EAAG,CAAU,CAAC;AACzC,eAAO,MAAM,QAAQ,mOAAiB,CAAC;AAEvC;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,yBAAyB,CAAC"}
package/dist/constants.js CHANGED
@@ -10,4 +10,19 @@ export const DEFAULT_POLL_INTERVAL_MS = 3_000;
10
10
  export const REQUEST_TIMEOUT_MS = 15_000;
11
11
  export const CONFIG_VERSION = 1;
12
12
  export const ADAPTERS = AGENT_ADAPTERS;
13
+ /**
14
+ * How many agents a freshly enrolled machine may host.
15
+ *
16
+ * A slot is held for as long as an agent is alive, not just while it is
17
+ * working, so this is really "how many teammates can live here" — at 2 a
18
+ * laptop could not hold a Claude agent, a Codex agent and anything else.
19
+ * Machines already enrolled keep whatever they were given; `policy
20
+ * --max-runs` changes it without re-enrolling.
21
+ */
22
+ export const DEFAULT_MAX_CONCURRENT_RUNS = 15;
23
+ /**
24
+ * Where CrewX lives, so `npx crewx-bridge install` needs nothing after it.
25
+ * Overridden with --url for a self-hosted or local server.
26
+ */
27
+ export const DEFAULT_CREWX_URL = "https://app.crewx.ai";
13
28
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CACzC,CAAC;AAE3B,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IAChD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC;AACtD,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,CAAC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CACzC,CAAC;AAE3B,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IAChD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC;AACtD,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,CAAC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * The terminal half of the device authorization grant.
4
+ *
5
+ * Bridge never opens a listening port, so a loopback OAuth callback is out.
6
+ * This asks CrewX for a pair of codes, shows the person one of them, and waits
7
+ * for a browser to approve it.
8
+ */
9
+ declare const DeviceCodeSchema: z.ZodObject<{
10
+ device_code: z.ZodString;
11
+ user_code: z.ZodString;
12
+ verification_uri: z.ZodString;
13
+ verification_uri_complete: z.ZodOptional<z.ZodString>;
14
+ interval: z.ZodNumber;
15
+ expires_in: z.ZodNumber;
16
+ }, z.core.$loose>;
17
+ declare const DeviceTokenSchema: z.ZodObject<{
18
+ access_token: z.ZodString;
19
+ expires_at: z.ZodString;
20
+ account: z.ZodOptional<z.ZodObject<{
21
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
22
+ email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
23
+ }, z.core.$loose>>;
24
+ }, z.core.$loose>;
25
+ export type DeviceCode = z.infer<typeof DeviceCodeSchema>;
26
+ export type DeviceToken = z.infer<typeof DeviceTokenSchema>;
27
+ export declare function requestDeviceCode(url: string): Promise<DeviceCode>;
28
+ /**
29
+ * Poll until the person approves, refuses, or lets it lapse.
30
+ *
31
+ * `authorization_pending` and `slow_down` are instructions rather than
32
+ * failures: the first means keep waiting, the second means we asked too often
33
+ * and should back off. Anything else ends the wait.
34
+ */
35
+ export declare function waitForDeviceToken(url: string, code: DeviceCode, options?: {
36
+ sleep?: (milliseconds: number) => Promise<void>;
37
+ now?: () => number;
38
+ onPending?: () => void;
39
+ }): Promise<DeviceToken>;
40
+ export {};
41
+ //# sourceMappingURL=device-login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-login.d.ts","sourceRoot":"","sources":["../src/device-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;GAMG;AACH,QAAA,MAAM,gBAAgB;;;;;;;iBASZ,CAAC;AAEX,QAAA,MAAM,iBAAiB;;;;;;;iBAYb,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAkC5D,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAWxE;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACnB,GACL,OAAO,CAAC,WAAW,CAAC,CAgEtB"}
@@ -0,0 +1,117 @@
1
+ import { z } from "zod";
2
+ import { normalizeServerUrl } from "./config.js";
3
+ import { BridgeError } from "./errors.js";
4
+ /**
5
+ * The terminal half of the device authorization grant.
6
+ *
7
+ * Bridge never opens a listening port, so a loopback OAuth callback is out.
8
+ * This asks CrewX for a pair of codes, shows the person one of them, and waits
9
+ * for a browser to approve it.
10
+ */
11
+ const DeviceCodeSchema = z
12
+ .object({
13
+ device_code: z.string().min(1),
14
+ user_code: z.string().min(1),
15
+ verification_uri: z.string().min(1),
16
+ verification_uri_complete: z.string().min(1).optional(),
17
+ interval: z.number().int().min(1).max(60),
18
+ expires_in: z.number().int().min(30).max(3600),
19
+ })
20
+ .loose();
21
+ const DeviceTokenSchema = z
22
+ .object({
23
+ access_token: z.string().min(1),
24
+ expires_at: z.string().min(1),
25
+ account: z
26
+ .object({
27
+ name: z.string().nullable().optional(),
28
+ email: z.string().nullable().optional(),
29
+ })
30
+ .loose()
31
+ .optional(),
32
+ })
33
+ .loose();
34
+ function cliBase(url) {
35
+ return `${normalizeServerUrl(url)}/api/cli/v1`;
36
+ }
37
+ async function post(url, path, body) {
38
+ let response;
39
+ try {
40
+ response = await fetch(`${cliBase(url)}${path}`, {
41
+ method: "POST",
42
+ headers: {
43
+ Accept: "application/json",
44
+ "Content-Type": "application/json",
45
+ },
46
+ body: JSON.stringify(body),
47
+ });
48
+ }
49
+ catch (error) {
50
+ throw new BridgeError("network", `Could not reach CrewX at ${url}: ${error instanceof Error ? error.message : String(error)}`);
51
+ }
52
+ let payload = undefined;
53
+ try {
54
+ payload = await response.json();
55
+ }
56
+ catch {
57
+ payload = undefined;
58
+ }
59
+ return { status: response.status, payload };
60
+ }
61
+ export async function requestDeviceCode(url) {
62
+ const { status, payload } = await post(url, "/device/code", {});
63
+ const parsed = DeviceCodeSchema.safeParse(payload);
64
+ if (status >= 400 || !parsed.success) {
65
+ throw new BridgeError("device_code_failed", `CrewX would not start a sign-in (HTTP ${status}).`);
66
+ }
67
+ return parsed.data;
68
+ }
69
+ /**
70
+ * Poll until the person approves, refuses, or lets it lapse.
71
+ *
72
+ * `authorization_pending` and `slow_down` are instructions rather than
73
+ * failures: the first means keep waiting, the second means we asked too often
74
+ * and should back off. Anything else ends the wait.
75
+ */
76
+ export async function waitForDeviceToken(url, code, options = {}) {
77
+ const sleep = options.sleep ??
78
+ ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
79
+ const now = options.now ?? (() => Date.now());
80
+ const deadline = now() + code.expires_in * 1000;
81
+ let interval = code.interval;
82
+ for (;;) {
83
+ if (now() >= deadline) {
84
+ throw new BridgeError("device_code_expired", "That sign-in expired before it was approved. Run the command again.");
85
+ }
86
+ await sleep(interval * 1000);
87
+ const { status, payload } = await post(url, "/device/token", {
88
+ device_code: code.device_code,
89
+ });
90
+ if (status < 400) {
91
+ const parsed = DeviceTokenSchema.safeParse(payload);
92
+ if (!parsed.success) {
93
+ throw new BridgeError("invalid_response", "CrewX returned an invalid sign-in response.");
94
+ }
95
+ return parsed.data;
96
+ }
97
+ const error = typeof payload === "object" && payload !== null
98
+ ? String(payload.error ?? "")
99
+ : "";
100
+ if (error === "authorization_pending") {
101
+ options.onPending?.();
102
+ continue;
103
+ }
104
+ if (error === "slow_down") {
105
+ interval += 5;
106
+ continue;
107
+ }
108
+ if (error === "access_denied") {
109
+ throw new BridgeError("device_denied", "That sign-in was refused.");
110
+ }
111
+ if (error === "expired_token") {
112
+ throw new BridgeError("device_code_expired", "That sign-in expired before it was approved. Run the command again.");
113
+ }
114
+ throw new BridgeError("device_login_failed", `CrewX refused the sign-in (HTTP ${status}).`);
115
+ }
116
+ }
117
+ //# sourceMappingURL=device-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-login.js","sourceRoot":"","sources":["../src/device-login.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAiB,MAAM,UAAU,CAAC;AAEpD,OAAO,EAEL,KAAK,YAAY,EAEjB,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EAEZ,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAarB,OAAO,EAGL,aAAa,EAId,MAAM,cAAc,CAAC;AAyBtB,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACzC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChE,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;IACjE,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAQD,UAAU,6BAA6B;IACrC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC;IAC1D,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AA6CD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,wBAAgB,aAAa,CAC3B,YAAY,GAAE,yBAA8B,GAC3C,OAAO,CAmhBT;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,WAAW,qBAAkB,GAC5B,OAAO,CAUT;AAMD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}