@rosthq/cli 0.7.156 → 0.7.158

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,82 @@
1
+ import { z } from "zod";
2
+ export declare const ACTING_PRINCIPAL_KINDS: readonly ["none", "unknown", "user_session", "implementation_bootstrap"];
3
+ export declare const actingPrincipalSchema: z.ZodObject<{
4
+ kind: z.ZodEnum<{
5
+ unknown: "unknown";
6
+ none: "none";
7
+ user_session: "user_session";
8
+ implementation_bootstrap: "implementation_bootstrap";
9
+ }>;
10
+ subject: z.ZodNullable<z.ZodString>;
11
+ email: z.ZodNullable<z.ZodString>;
12
+ tenant_id: z.ZodNullable<z.ZodString>;
13
+ tenant_name: z.ZodNullable<z.ZodString>;
14
+ role: z.ZodNullable<z.ZodString>;
15
+ source: z.ZodNullable<z.ZodString>;
16
+ principal_switch: z.ZodNullable<z.ZodString>;
17
+ note: z.ZodNullable<z.ZodString>;
18
+ }, z.core.$strict>;
19
+ export type ActingPrincipal = z.infer<typeof actingPrincipalSchema>;
20
+ /** The canonical `none` projection — no credential resolved at all. */
21
+ export declare function noneActingPrincipal(note?: string): ActingPrincipal;
22
+ /**
23
+ * Decode the self-describing identity claims out of a session's own JWT. This
24
+ * is a LOCAL read of a token the CLI already holds — never a network call and
25
+ * never a signature check (the server re-authenticates every request). It is
26
+ * used only to render whose authority a command acts under, so every failure
27
+ * mode resolves to nulls rather than throwing: a non-JWT test token, a token
28
+ * with no email claim, or malformed base64 all yield an unresolved identity,
29
+ * which the projection reports as `user_session` with a null email — never a
30
+ * fabricated one.
31
+ */
32
+ export declare function decodeSessionIdentity(accessToken: string | undefined): {
33
+ email: string | null;
34
+ tenantId: string | null;
35
+ };
36
+ /**
37
+ * Project the acting principal for a resolved user session. `accessToken` is
38
+ * the session's JWT (decoded locally for the email/tenant); `source` is the
39
+ * token store's describe() string. Identity that does not decode stays null —
40
+ * the projection is `user_session` with a null email, distinct from `none`.
41
+ */
42
+ export declare function userSessionActingPrincipal(params: {
43
+ accessToken: string | undefined;
44
+ source: string | null;
45
+ tenantName?: string | null;
46
+ }): ActingPrincipal;
47
+ /**
48
+ * Project the acting principal for the bounded implementation-run credential.
49
+ * The tenant id and run id are proven facts carried on the credential itself;
50
+ * `source` is the credential store's describe() string. `otherCredential`,
51
+ * when set, records that a competing credential (typically the caller's own
52
+ * logged-in user session) was also available and this bounded principal was
53
+ * selected over it — the explicit switch note the dual-credential control
54
+ * requires.
55
+ */
56
+ export declare function implementationActingPrincipal(params: {
57
+ tenantId: string;
58
+ implementationRunId: string;
59
+ source: string | null;
60
+ otherCredential?: string | null;
61
+ }): ActingPrincipal;
62
+ /**
63
+ * The one-line human header rendered BEFORE a command's payload. It states
64
+ * whose authority the command acts under and never renders an unproven
65
+ * identity as a proven one: `none`/`unknown` say exactly that, and a user
66
+ * session whose JWT did not decode reports the credential without inventing an
67
+ * email.
68
+ */
69
+ export declare function renderActingPrincipalHeader(principal: ActingPrincipal): string;
70
+ /**
71
+ * The stable --json envelope: the acting principal alongside the command's own
72
+ * result. Chosen over sibling-key injection because most --json command
73
+ * outputs are opaque to the CLI (it never inspects their shape), so a
74
+ * top-level envelope cannot collide with a result field and is uniform across
75
+ * every command. Documented in the PR so downstream consumers read
76
+ * `.output` for the former raw result.
77
+ */
78
+ export declare function actingPrincipalEnvelope(principal: ActingPrincipal, output: unknown): {
79
+ acting_principal: ActingPrincipal;
80
+ output: unknown;
81
+ };
82
+ //# sourceMappingURL=acting-principal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acting-principal.d.ts","sourceRoot":"","sources":["../src/acting-principal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4BxB,eAAO,MAAM,sBAAsB,0EAKzB,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;kBAuBvB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAcpE,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAgCnD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,eAAe,CAalB;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,GAAG,eAAe,CAclB;AAYD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAE9E;AAuCD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,OAAO,GACd;IAAE,gBAAgB,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAExD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=acting-principal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acting-principal.test.d.ts","sourceRoot":"","sources":["../src/acting-principal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { type DeviceExchangeStore } from "../device-exchange-store.js";
2
+ type CliIo = {
3
+ stdout: Pick<NodeJS.WriteStream, "write">;
4
+ stderr: Pick<NodeJS.WriteStream, "write">;
5
+ };
6
+ export type AuthDeviceStatusDeps = {
7
+ createDeviceExchangeStore(): DeviceExchangeStore;
8
+ now?: () => number;
9
+ };
10
+ export declare function defaultAuthDeviceStatusDeps(): AuthDeviceStatusDeps;
11
+ export declare function runAuthDeviceStatus(args: string[], io: CliIo, deps: AuthDeviceStatusDeps): Promise<number>;
12
+ export {};
13
+ //# sourceMappingURL=auth-device-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-device-status.d.ts","sourceRoot":"","sources":["../../src/commands/auth-device-status.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,6BAA6B,CAAC;AAUrC,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,yBAAyB,IAAI,mBAAmB,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,2BAA2B,IAAI,oBAAoB,CAElE;AAMD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,MAAM,CAAC,CAiEjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"implementation-access.d.ts","sourceRoot":"","sources":["../../src/commands/implementation-access.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EACL,8BAA8B,EAI/B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,oCAAoC,CAAC;AAe5C,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAErF,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,IAAI,6BAA6B,CAAC;IAC3D,oBAAoB,CAAC,IAAI,+BAA+B,CAAC;IACzD,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IACtE,aAAa,EAAE,OAAO,aAAa,CAAC;CACrC,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAKD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA2DjB;AA0JD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD;AAiID,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAOxF"}
1
+ {"version":3,"file":"implementation-access.d.ts","sourceRoot":"","sources":["../../src/commands/implementation-access.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EACL,8BAA8B,EAI/B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,oCAAoC,CAAC;AA2B5C,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAErF,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,IAAI,6BAA6B,CAAC;IAC3D,oBAAoB,CAAC,IAAI,+BAA+B,CAAC;IACzD,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IACtE,aAAa,EAAE,OAAO,aAAa,CAAC;CACrC,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAKD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAmMD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD;AA4JD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAOxF"}
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { type ActingPrincipal } from "../acting-principal.js";
3
+ type CliIo = {
4
+ stdout: Pick<NodeJS.WriteStream, "write">;
5
+ stderr: Pick<NodeJS.WriteStream, "write">;
6
+ };
7
+ export type PreflightCheckStatus = "pass" | "fail" | "unknown";
8
+ export declare const preflightCheckSchema: z.ZodObject<{
9
+ name: z.ZodString;
10
+ status: z.ZodEnum<{
11
+ unknown: "unknown";
12
+ pass: "pass";
13
+ fail: "fail";
14
+ }>;
15
+ detail: z.ZodString;
16
+ }, z.core.$strict>;
17
+ export declare const preflightResultSchema: z.ZodObject<{
18
+ ok: z.ZodBoolean;
19
+ acting_principal: z.ZodObject<{
20
+ kind: z.ZodEnum<{
21
+ unknown: "unknown";
22
+ none: "none";
23
+ user_session: "user_session";
24
+ implementation_bootstrap: "implementation_bootstrap";
25
+ }>;
26
+ subject: z.ZodNullable<z.ZodString>;
27
+ email: z.ZodNullable<z.ZodString>;
28
+ tenant_id: z.ZodNullable<z.ZodString>;
29
+ tenant_name: z.ZodNullable<z.ZodString>;
30
+ role: z.ZodNullable<z.ZodString>;
31
+ source: z.ZodNullable<z.ZodString>;
32
+ principal_switch: z.ZodNullable<z.ZodString>;
33
+ note: z.ZodNullable<z.ZodString>;
34
+ }, z.core.$strict>;
35
+ checks: z.ZodArray<z.ZodObject<{
36
+ name: z.ZodString;
37
+ status: z.ZodEnum<{
38
+ unknown: "unknown";
39
+ pass: "pass";
40
+ fail: "fail";
41
+ }>;
42
+ detail: z.ZodString;
43
+ }, z.core.$strict>>;
44
+ }, z.core.$strict>;
45
+ export type PreflightCheck = z.infer<typeof preflightCheckSchema>;
46
+ export type PreflightResult = z.infer<typeof preflightResultSchema>;
47
+ /**
48
+ * The implementation-credential fact the preflight reports. `present` carries
49
+ * the expiry decision and the store the credential was read from (`stored_in`);
50
+ * `error` is a store read failure (never proof of absence).
51
+ */
52
+ export type PreflightImplementationCredential = {
53
+ kind: "present";
54
+ expired: boolean;
55
+ storedIn: string;
56
+ } | {
57
+ kind: "absent";
58
+ } | {
59
+ kind: "error";
60
+ detail: string;
61
+ };
62
+ export type PreflightDeps = {
63
+ json: boolean;
64
+ principal: ActingPrincipal;
65
+ sessionRefreshError: string | null;
66
+ implementationCredential: PreflightImplementationCredential;
67
+ cliVersion: string | null;
68
+ fetchLatestVersion: () => Promise<string | null>;
69
+ probeDeployment: () => Promise<{
70
+ ok: boolean;
71
+ status: number | null;
72
+ detail: string;
73
+ }>;
74
+ readOnboardingState: (() => Promise<{
75
+ ok: boolean;
76
+ alreadyOnboarded: boolean;
77
+ detail: string;
78
+ }>) | null;
79
+ };
80
+ /**
81
+ * Run the preflight and render it. Returns 0 only when EVERY check passed; any
82
+ * `fail` or `unknown` returns 1 (unproven is not green).
83
+ */
84
+ export declare function runOnboardingPreflight(io: CliIo, deps: PreflightDeps): Promise<number>;
85
+ export {};
86
+ //# sourceMappingURL=onboarding-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-preflight.d.ts","sourceRoot":"","sources":["../../src/commands/onboarding-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AASF,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/D,eAAO,MAAM,oBAAoB;;;;;;;;kBAMtB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAMvB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,MAAM,iCAAiC,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IAEd,SAAS,EAAE,eAAe,CAAC;IAO3B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,wBAAwB,EAAE,iCAAiC,CAAC;IAE5D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAI1B,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAIjD,eAAe,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAIvF,mBAAmB,EACf,CAAC,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,GAC3E,IAAI,CAAC;CACV,CAAC;AAgIF;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B5F"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=onboarding-preflight.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-preflight.test.d.ts","sourceRoot":"","sources":["../../src/commands/onboarding-preflight.test.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  import { CommandClient } from "../command-client.js";
2
+ import { type ActingPrincipal } from "../acting-principal.js";
2
3
  type CliIo = {
3
4
  stdout: Pick<NodeJS.WriteStream, "write">;
4
5
  stderr: Pick<NodeJS.WriteStream, "write">;
@@ -6,6 +7,7 @@ type CliIo = {
6
7
  export type OnboardingDeps = {
7
8
  makeClient(): Promise<CommandClient>;
8
9
  readFile?: (path: string) => Promise<Buffer>;
10
+ actingPrincipal?: ActingPrincipal;
9
11
  };
10
12
  /**
11
13
  * The largest source file this invocation can actually send: the smallest of the
@@ -48,9 +50,12 @@ export declare function runOnboarding(args: string[], io: CliIo, deps: Onboardin
48
50
  * policy errors before shared rendering; the caller handles an intercepted
49
51
  * outcome as terminal rather than retrying under an owner session.
50
52
  */
51
- export declare function executeOnboardingInvocation(invocation: OnboardingInvocation, io: CliIo, client: CommandClient): Promise<number>;
53
+ export declare function executeOnboardingInvocation(invocation: OnboardingInvocation, io: CliIo, client: CommandClient, options?: {
54
+ actingPrincipal?: ActingPrincipal;
55
+ }): Promise<number>;
52
56
  export declare function executeOnboardingInvocation(invocation: OnboardingInvocation, io: CliIo, client: CommandClient, options: {
53
57
  onError: (error: unknown) => "handled" | "print";
58
+ actingPrincipal?: ActingPrincipal;
54
59
  }): Promise<number | "fall-through">;
55
60
  /**
56
61
  * Resolve the local file reads a parsed invocation deferred: the source bytes
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/commands/onboarding.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AAMzE,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAI3B,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAGrC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAkDF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,MAAsC,GACnD,MAAM,CAMR;AAqBD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EACL,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,0BAA0B,GAC1B,kBAAkB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,OAAO,GAAG,cAAc,CAAC;IAInG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAepG;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,oBAAoB,EAChC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,oBAAoB,EAChC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,GAAG,OAAO,CAAA;CAAE,GAC5D,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;AAoCpC;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,UAAU,EAAE,oBAAoB,EAChC,YAAY,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAY,GACzD,OAAO,CAAC,IAAI,CAAC,CAqEf;AAgDD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CA+G9E;AA2FD,wBAAgB,eAAe,IAAI,MAAM,CAUxC;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EACtC,MAAM,EAAE,OAAO,GACd,MAAM,CAoBR"}
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/commands/onboarding.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAsB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAMhC,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAI3B,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAGrC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAI7C,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAkDF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,MAAsC,GACnD,MAAM,CAMR;AAqBD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EACL,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,0BAA0B,GAC1B,kBAAkB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,OAAO,GAAG,cAAc,CAAC;IAInG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBpG;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,oBAAoB,EAChC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAA;CAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,oBAAoB,EAChC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,eAAe,CAAA;CAAE,GAC/F,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;AAiDpC;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,UAAU,EAAE,oBAAoB,EAChC,YAAY,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAY,GACzD,OAAO,CAAC,IAAI,CAAC,CAqEf;AAgDD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CA+G9E;AA2FD,wBAAgB,eAAe,IAAI,MAAM,CAWxC;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EACtC,MAAM,EAAE,OAAO,GACd,MAAM,CAoBR"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import type { CliConfig } from "./config.js";
3
+ import type { DeviceExchangeStore } from "./device-exchange-store.js";
3
4
  import type { CliSession } from "./token-store.js";
4
5
  type CliIo = {
5
6
  stdout: Pick<NodeJS.WriteStream, "write">;
@@ -14,6 +15,7 @@ export type DeviceLoginDeps = {
14
15
  type: string;
15
16
  }) => Promise<CliSession>;
16
17
  now?: () => number;
18
+ deviceExchangeStore?: DeviceExchangeStore;
17
19
  };
18
20
  declare const startResponseSchema: z.ZodObject<{
19
21
  device_code: z.ZodString;
@@ -37,7 +39,9 @@ export type ApprovedPoll = z.infer<typeof approvedPollResponseSchema>;
37
39
  export declare class DeviceLoginError extends Error {
38
40
  constructor(message: string);
39
41
  }
40
- export declare function loginWithDeviceCode(config: CliConfig, io: CliIo, deps?: DeviceLoginDeps): Promise<CliSession>;
42
+ export declare function loginWithDeviceCode(config: CliConfig, io: CliIo, deps?: DeviceLoginDeps, options?: {
43
+ pairingCode?: string;
44
+ }): Promise<CliSession>;
41
45
  export declare function pollDeviceAuthorizationHandoff<TApproved>(config: CliConfig, io: CliIo, options: {
42
46
  purpose?: "user_session" | "implementation_bootstrap" | "operator_grant";
43
47
  sourceClient?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"device-auth.d.ts","sourceRoot":"","sources":["../src/device-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAcnD,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAGhD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACnG,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;iBAWf,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE/D,KAAK,iBAAiB,GAAG;IACvB,6BAA6B,EAAE,MAAM,CAAC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAqBF,QAAA,MAAM,0BAA0B;;iBAEhB,CAAC;AAMjB,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEtE,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAiCD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,KAAK,EACT,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED,wBAAsB,8BAA8B,CAAC,SAAS,EAC5D,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,KAAK,EACT,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,cAAc,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIpC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,iBAAiB,CAAC;IACjE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,EACD,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,GAAG,IAAI,GACxD,OAAO,CAAC,SAAS,CAAC,CA2IpB"}
1
+ {"version":3,"file":"device-auth.d.ts","sourceRoot":"","sources":["../src/device-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,4BAA4B,CAAC;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAcnD,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAGhD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACnG,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAQnB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C,CAAC;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;iBAWf,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE/D,KAAK,iBAAiB,GAAG;IACvB,6BAA6B,EAAE,MAAM,CAAC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAqBF,QAAA,MAAM,0BAA0B;;iBAEhB,CAAC;AAMjB,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEtE,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAiCD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,KAAK,EACT,IAAI,GAAE,eAAoB,EAC1B,OAAO,GAAE;IAKP,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAED,wBAAsB,8BAA8B,CAAC,SAAS,EAC5D,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,KAAK,EACT,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,cAAc,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIpC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,iBAAiB,CAAC;IACjE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,EACD,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,GAAG,IAAI,GACxD,OAAO,CAAC,SAAS,CAAC,CAsKpB"}
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { type ExecFile } from "./token-store.js";
3
+ declare const pendingDeviceExchangeSchema: z.ZodObject<{
4
+ purpose: z.ZodEnum<{
5
+ user_session: "user_session";
6
+ implementation_bootstrap: "implementation_bootstrap";
7
+ operator_grant: "operator_grant";
8
+ }>;
9
+ device_code: z.ZodString;
10
+ user_code: z.ZodString;
11
+ verification_uri: z.ZodString;
12
+ verification_uri_complete: z.ZodOptional<z.ZodString>;
13
+ expires_at: z.ZodString;
14
+ }, z.core.$strict>;
15
+ export type PendingDeviceExchange = z.infer<typeof pendingDeviceExchangeSchema>;
16
+ export type DeviceExchangeStore = {
17
+ read(): Promise<PendingDeviceExchange | null>;
18
+ write(exchange: PendingDeviceExchange): Promise<void>;
19
+ clear(): Promise<void>;
20
+ describe(): string;
21
+ };
22
+ export type DeviceExchangeStoreBackend = "macOS Keychain" | "owner-only file store" | "Windows Credential Manager" | "Secret Service";
23
+ /**
24
+ * A backend was reached but could not produce a trustworthy read result. The
25
+ * message intentionally carries only the backend class — never the subprocess
26
+ * error, stdout, stderr, file path, device code, or user code.
27
+ */
28
+ export declare class DeviceExchangeStoreReadError extends Error {
29
+ readonly backend: DeviceExchangeStoreBackend;
30
+ constructor(backend: DeviceExchangeStoreBackend);
31
+ }
32
+ export declare class DeviceExchangeFileStore implements DeviceExchangeStore {
33
+ private readonly filePath;
34
+ constructor(filePath?: string);
35
+ read(): Promise<PendingDeviceExchange | null>;
36
+ write(exchange: PendingDeviceExchange): Promise<void>;
37
+ clear(): Promise<void>;
38
+ describe(): string;
39
+ private chmodOwnerOnly;
40
+ }
41
+ export type CreateDeviceExchangeStoreOptions = {
42
+ platform?: NodeJS.Platform;
43
+ env?: NodeJS.ProcessEnv;
44
+ execFile?: ExecFile;
45
+ stderr?: Pick<NodeJS.WriteStream, "write">;
46
+ };
47
+ export declare function createDeviceExchangeStore(options?: CreateDeviceExchangeStoreOptions): DeviceExchangeStore;
48
+ export {};
49
+ //# sourceMappingURL=device-exchange-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-exchange-store.d.ts","sourceRoot":"","sources":["../src/device-exchange-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAWL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AA6B1B,QAAA,MAAM,2BAA2B;;;;;;;;;;;kBAOtB,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IAC9C,KAAK,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,IAAI,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,gBAAgB,GAChB,uBAAuB,GACvB,4BAA4B,GAC5B,gBAAgB,CAAC;AAErB;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;gBAEjC,OAAO,EAAE,0BAA0B;CAKhD;AA4VD,qBAAa,uBAAwB,YAAW,mBAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,SAAwB;IAEvD,IAAI,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAe7C,KAAK,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,QAAQ,IAAI,MAAM;YAIJ,cAAc;CAI7B;AAaD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC5C,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,gCAAqC,GAC7C,mBAAmB,CAyBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"command-discovery.d.ts","sourceRoot":"","sources":["../../src/generated/command-discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,eAAO,MAAM,iBAAiB,EAAE,SAAS,qBAAqB,EAuS7D,CAAC;AAKF,eAAO,MAAM,sBAAsB,EAAE,iBACyk6F,CAAC"}
1
+ {"version":3,"file":"command-discovery.d.ts","sourceRoot":"","sources":["../../src/generated/command-discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,eAAO,MAAM,iBAAiB,EAAE,SAAS,qBAAqB,EAwS7D,CAAC;AAKF,eAAO,MAAM,sBAAsB,EAAE,iBACq56F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EAyS3D,CAAC"}
1
+ {"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EA0S3D,CAAC"}
@@ -14,6 +14,20 @@ export declare function resolveImplementationBootstrapClass(commandId: string):
14
14
  export declare function implementationBootstrapCommandIds(): string[];
15
15
  /** Whether the production registry marks this id as a human-decision command. */
16
16
  export declare function isHumanDecisionCommand(commandId: string): boolean;
17
+ /** Whether this id names a registered command at all (as opposed to a typo). */
18
+ export declare function isKnownCommandId(commandId: string): boolean;
19
+ /**
20
+ * DER-3255 (correctness review F4): a MISTYPED command id under a live bounded
21
+ * credential must not be described as an authority refusal.
22
+ *
23
+ * The class map fails closed, so an unknown id resolves to `deny` exactly like a
24
+ * real deny-class command — and the route-unavailable message would then tell an
25
+ * operator that `onboarding.attach_referenc` "is not available to the
26
+ * implementation credential", which reads as a permissions problem and sends
27
+ * them to re-mint or end their run over a missing character. Same fail-closed
28
+ * outcome, truthful reason.
29
+ */
30
+ export declare function unknownCommandMessage(commandId: string): string;
17
31
  /** Treat malformed or equal-to-now expiries as unusable before any network send. */
18
32
  export declare function isImplementationCredentialExpired(expiresAt: string, now?: Date): boolean;
19
33
  /**
@@ -25,10 +39,37 @@ export declare class ImplementationBootstrapDeniedError extends Error {
25
39
  readonly commandId: string;
26
40
  constructor(commandId: string);
27
41
  }
28
- /** A stable operator message for a credential that cannot be retried as owner. */
42
+ /**
43
+ * A stable operator message for a credential that cannot be retried as owner.
44
+ *
45
+ * DER-3255: an EXPIRED credential during an ACTIVE run is the same leak through a
46
+ * different door, so this path is fail-closed exactly like the route-unavailable
47
+ * one — the run being active is the operative fact, and usability only decides
48
+ * WHICH message the operator reads. That makes naming the recovery command load
49
+ * bearing rather than decorative: this is the message a bounded agent hits when
50
+ * its credential ages out mid-run, which is the state the DER-2965 observation
51
+ * produced.
52
+ */
29
53
  export declare function implementationCredentialExpiredMessage(hasUserSession: boolean): string;
30
54
  /** Refuse a noninteractive human-decision command while a bounded run is active. */
31
55
  export declare function implementationHumanDecisionMessage(commandId: string): string;
56
+ /**
57
+ * DER-3255: refuse a noninteractive deny-class command while a bounded run is
58
+ * active, NAMING the route that does not exist.
59
+ *
60
+ * The sibling message above covers the human-decision half of the deny class
61
+ * (DER-3023). This one covers the rest — the 160-odd deny-class commands that
62
+ * are not human decisions, of which `onboarding.attach_reference` is the member
63
+ * DER-3045's acceptance run caught executing under owner authority. Reusing the
64
+ * human-decision wording for them would be a false claim: `attach_reference` is
65
+ * not a human-decision command, it simply has no implementation route.
66
+ *
67
+ * The two messages are deliberately distinct rather than merged. The operator's
68
+ * remedy differs: a human-decision command is waiting for a HUMAN, so the TTY is
69
+ * the intended path; a deny-class command has no implementation route at all, so
70
+ * the honest remedy is to end the run.
71
+ */
72
+ export declare function implementationRouteUnavailableMessage(commandId: string, hasUserSession: boolean): string;
32
73
  /**
33
74
  * A server response means the bearer is unusable only for authentication
34
75
  * failures. Authorization/policy refusals are not liveness signals and must not
@@ -1 +1 @@
1
- {"version":3,"file":"implementation-bootstrap.d.ts","sourceRoot":"","sources":["../src/implementation-bootstrap.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,aAAa,EAAsB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEnG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AA0D5E;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAE7F;AAED,4FAA4F;AAC5F,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,oFAAoF;AACpF,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG,OAAO,CAG9F;AAED;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,KAAK;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAK9B;AAED,kFAAkF;AAClF,wBAAgB,sCAAsC,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAStF;AAED,oFAAoF;AACpF,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQ1E;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mCAAmC,CACjD,iBAAiB,EAAE,OAAO,aAAa,EACvC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,GACpD,aAAa,CAUf"}
1
+ {"version":3,"file":"implementation-bootstrap.d.ts","sourceRoot":"","sources":["../src/implementation-bootstrap.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,aAAa,EAAsB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEnG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AA8E5E;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAE7F;AAED,4FAA4F;AAC5F,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjE;AAOD,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED,oFAAoF;AACpF,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG,OAAO,CAG9F;AAED;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,KAAK;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAK9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sCAAsC,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CA0BtF;AAED,oFAAoF;AACpF,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qCAAqC,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,MAAM,CAexG;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQ1E;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mCAAmC,CACjD,iBAAiB,EAAE,OAAO,aAAa,EACvC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,GACpD,aAAa,CAUf"}
@@ -1 +1 @@
1
- {"version":3,"file":"implementation-credential-store.d.ts","sourceRoot":"","sources":["../src/implementation-credential-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAUL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAO1B,QAAA,MAAM,uCAAuC;;;;;;;kBAOlC,CAAC;AAEZ,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CACrD,OAAO,uCAAuC,CAC/C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,IAAI,OAAO,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,UAAU,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,IAAI,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAC5C,gBAAgB,GAChB,uBAAuB,GACvB,4BAA4B,GAC5B,gBAAgB,CAAC;AAErB;;;;GAIG;AACH,qBAAa,6CAA8C,SAAQ,KAAK;gBAEpE,OAAO,SAAwE;CAKlF;AAED;;;;GAIG;AACH,qBAAa,sCAAuC,SAAQ,KAAK;IAC/D,QAAQ,CAAC,OAAO,EAAE,oCAAoC,CAAC;gBAE3C,OAAO,EAAE,oCAAoC;CAK1D;AAmVD,qBAAa,4BAA6B,YAAW,6BAA6B;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,SAAqB;IAEpD,IAAI,IAAI,OAAO,CAAC,iCAAiC,GAAG,IAAI,CAAC;IAezD,KAAK,CAAC,UAAU,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,QAAQ,IAAI,MAAM;YAIJ,cAAc;CAI7B;AAaD,MAAM,MAAM,0CAA0C,GAAG;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC5C,CAAC;AAEF,wBAAgB,mCAAmC,CACjD,OAAO,GAAE,0CAA+C,GACvD,6BAA6B,CAmC/B"}
1
+ {"version":3,"file":"implementation-credential-store.d.ts","sourceRoot":"","sources":["../src/implementation-credential-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAWL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAO1B,QAAA,MAAM,uCAAuC;;;;;;;kBAOlC,CAAC;AAEZ,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CACrD,OAAO,uCAAuC,CAC/C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,IAAI,OAAO,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,UAAU,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,IAAI,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAC5C,gBAAgB,GAChB,uBAAuB,GACvB,4BAA4B,GAC5B,gBAAgB,CAAC;AAErB;;;;GAIG;AACH,qBAAa,6CAA8C,SAAQ,KAAK;gBAEpE,OAAO,SAAwE;CAKlF;AAED;;;;GAIG;AACH,qBAAa,sCAAuC,SAAQ,KAAK;IAC/D,QAAQ,CAAC,OAAO,EAAE,oCAAoC,CAAC;gBAE3C,OAAO,EAAE,oCAAoC;CAK1D;AA2VD,qBAAa,4BAA6B,YAAW,6BAA6B;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,SAAqB;IAEpD,IAAI,IAAI,OAAO,CAAC,iCAAiC,GAAG,IAAI,CAAC;IAezD,KAAK,CAAC,UAAU,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,QAAQ,IAAI,MAAM;YAIJ,cAAc;CAI7B;AAaD,MAAM,MAAM,0CAA0C,GAAG;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;CAC5C,CAAC;AAEF,wBAAgB,mCAAmC,CACjD,OAAO,GAAE,0CAA+C,GACvD,6BAA6B,CAmC/B"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import { CommandClient } from "./command-client.js";
3
3
  import { loginWithBrowser, refreshCliSessionIfNeeded } from "./auth.js";
4
4
  import { loginWithDeviceCode } from "./device-auth.js";
5
+ import { type DeviceExchangeStore } from "./device-exchange-store.js";
5
6
  import { type TokenStore } from "./token-store.js";
6
7
  import { type ImplementationCredentialStore } from "./implementation-credential-store.js";
7
8
  import { type ImplementationRunTombstoneStore } from "./implementation-run-tombstone.js";
@@ -22,6 +23,7 @@ type MainOptions = {
22
23
  commandClient?: typeof CommandClient;
23
24
  implementationCredentialStore?: ImplementationCredentialStoreFactory;
24
25
  implementationRunTombstoneStore?: () => ImplementationRunTombstoneStore;
26
+ deviceExchangeStore?: DeviceExchangeStore;
25
27
  };
26
28
  export declare function main(argv?: string[], options?: MainOptions): Promise<number>;
27
29
  export declare function isCliEntrypoint(moduleUrl: string, argvPath: string | undefined): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,sCAAsC,CAAC;AAW9C,OAAO,EAKL,KAAK,+BAA+B,EACrC,MAAM,mCAAmC,CAAC;AAyC3C,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAI1C,WAAW,CAAC,EAAE,OAAO,CAAC;IAOtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD,CAAC;AAoBF,KAAK,oCAAoC,GAAG,MAAM,6BAA6B,CAAC;AAgOhF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,cAAc,EAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAUxC;AAuBD,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;IAGlD,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IAGrC,6BAA6B,CAAC,EAAE,oCAAoC,CAAC;IACrE,+BAA+B,CAAC,EAAE,MAAM,+BAA+B,CAAC;CACzE,CAAC;AAEF,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAosBnG;AA+iBD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,sCAAsC,CAAC;AAc9C,OAAO,EAKL,KAAK,+BAA+B,EACrC,MAAM,mCAAmC,CAAC;AAqE3C,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAI1C,WAAW,CAAC,EAAE,OAAO,CAAC;IAOtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD,CAAC;AAoBF,KAAK,oCAAoC,GAAG,MAAM,6BAA6B,CAAC;AA4PhF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,cAAc,EAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAUxC;AAuBD,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;IAGlD,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IAGrC,6BAA6B,CAAC,EAAE,oCAAoC,CAAC;IACrE,+BAA+B,CAAC,EAAE,MAAM,+BAA+B,CAAC;IAIxE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C,CAAC;AAEF,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAy8BnG;AA2yBD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}