@legioncodeinc/hive 0.4.0 → 0.5.1
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 +1 -1
- package/dist/daemon/dashboard/app.js +12 -12
- package/dist/daemon/gate.d.ts +10 -6
- package/dist/daemon/gate.js +20 -8
- package/dist/daemon/gate.js.map +1 -1
- package/dist/daemon/installer/funnel-telemetry.d.ts +17 -2
- package/dist/daemon/installer/funnel-telemetry.js +34 -3
- package/dist/daemon/installer/funnel-telemetry.js.map +1 -1
- package/dist/daemon/installer/manifest-snapshot.json +5 -5
- package/dist/daemon/installer/routes.js +6 -2
- package/dist/daemon/installer/routes.js.map +1 -1
- package/dist/daemon/installer/security.d.ts +9 -2
- package/dist/daemon/installer/security.js +8 -0
- package/dist/daemon/installer/security.js.map +1 -1
- package/dist/daemon/server.d.ts +3 -0
- package/dist/daemon/server.js +1 -0
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/setup-tenancy.d.ts +18 -0
- package/dist/daemon/setup-tenancy.js +37 -0
- package/dist/daemon/setup-tenancy.js.map +1 -0
- package/dist/dashboard/web/active-tenancy-display.d.ts +34 -0
- package/dist/dashboard/web/active-tenancy-display.js +84 -0
- package/dist/dashboard/web/active-tenancy-display.js.map +1 -0
- package/dist/dashboard/web/app.js +6 -2
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/onboarding/contracts.d.ts +1 -1
- package/dist/dashboard/web/onboarding/contracts.js +9 -1
- package/dist/dashboard/web/onboarding/contracts.js.map +1 -1
- package/dist/dashboard/web/onboarding/login-step.d.ts +3 -4
- package/dist/dashboard/web/onboarding/login-step.js +37 -31
- package/dist/dashboard/web/onboarding/login-step.js.map +1 -1
- package/dist/dashboard/web/onboarding/onboarding-screen.d.ts +8 -4
- package/dist/dashboard/web/onboarding/onboarding-screen.js +90 -13
- package/dist/dashboard/web/onboarding/onboarding-screen.js.map +1 -1
- package/dist/dashboard/web/onboarding/tenancy-client.d.ts +19 -0
- package/dist/dashboard/web/onboarding/tenancy-client.js +84 -0
- package/dist/dashboard/web/onboarding/tenancy-client.js.map +1 -0
- package/dist/dashboard/web/onboarding/tenancy-contracts.d.ts +119 -0
- package/dist/dashboard/web/onboarding/tenancy-contracts.js +79 -0
- package/dist/dashboard/web/onboarding/tenancy-contracts.js.map +1 -0
- package/dist/dashboard/web/onboarding/tenancy-step.d.ts +32 -0
- package/dist/dashboard/web/onboarding/tenancy-step.js +223 -0
- package/dist/dashboard/web/onboarding/tenancy-step.js.map +1 -0
- package/dist/dashboard/web/pages/hive-graph.js +16 -7
- package/dist/dashboard/web/pages/hive-graph.js.map +1 -1
- package/dist/dashboard/web/setup-gate.js +11 -1
- package/dist/dashboard/web/setup-gate.js.map +1 -1
- package/dist/dashboard/web/wire.d.ts +20 -0
- package/dist/dashboard/web/wire.js +34 -0
- package/dist/dashboard/web/wire.js.map +1 -1
- package/dist/shared/fleet-readiness.js +13 -2
- package/dist/shared/fleet-readiness.js.map +1 -1
- package/dist/telemetry/emit.d.ts +17 -4
- package/dist/telemetry/emit.js +8 -1
- package/dist/telemetry/emit.js.map +1 -1
- package/package.json +1 -1
package/dist/daemon/gate.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The server-side PORTAL LANDING GATE — PRD-003a, implementing ADR-0004's precedence.
|
|
3
3
|
*
|
|
4
|
-
* On landing on ANY non-exempt route hive evaluates ONE ordered precedence, health then auth
|
|
5
|
-
* before deciding what to serve:
|
|
4
|
+
* On landing on ANY non-exempt route hive evaluates ONE ordered precedence, health then auth then
|
|
5
|
+
* tenancy, before deciding what to serve:
|
|
6
6
|
*
|
|
7
7
|
* 1. Fleet not healthy (per the EXISTING `isFleetReady()` projection, `fleet-status.ts`) →
|
|
8
8
|
* redirect to `/buzzing` (g-AC-3). Checked FIRST: an unhealthy fleet makes every other screen
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* 2. Else not logged in (the EXISTING proxied honeycomb `/setup/state` `authenticated` bit,
|
|
11
11
|
* `setup-auth.ts`) → redirect to `/login` (g-AC-4). A fetch failure/timeout reads as "not
|
|
12
12
|
* logged in" (l-AC-6) — never a fail-soft into the dashboard.
|
|
13
|
-
* 3. Else
|
|
13
|
+
* 3. Else tenancy unconfirmed (`GET /setup/tenancy` `selected` bit, `setup-tenancy.ts`) →
|
|
14
|
+
* redirect to `/onboarding` (PRD-011c tg-AC-1). Fails closed to unconfirmed on any read fault.
|
|
15
|
+
* 4. Else serve the requested route as-is (g-AC-5 / g-AC-6): `next()` falls through to the
|
|
14
16
|
* more specific route/catch-all registered after this middleware in `server.ts`.
|
|
15
17
|
*
|
|
16
18
|
* `/buzzing` and `/login` are a FIXED exemption set checked BEFORE the precedence above, so they
|
|
@@ -26,13 +28,13 @@
|
|
|
26
28
|
* same-origin", both depend on the proxy handling its own requests untouched).
|
|
27
29
|
*
|
|
28
30
|
* SECURITY (g-AC-11, open-redirect defense): every redirect this middleware issues targets a
|
|
29
|
-
* FIXED, hard-coded literal (`/buzzing
|
|
30
|
-
* `?next=`, no `Referer`, no request path echoed back).
|
|
31
|
-
* impossible here: there is no code path where an attacker-controlled string reaches `c.redirect`.
|
|
31
|
+
* FIXED, hard-coded literal (`/buzzing`, `/login`, or `/onboarding`), never a value derived from
|
|
32
|
+
* user input (no `?next=`, no `Referer`, no request path echoed back).
|
|
32
33
|
*/
|
|
33
34
|
import type { MiddlewareHandler } from "hono";
|
|
34
35
|
import { type FetchImpl as FleetFetchImpl } from "./fleet-status.js";
|
|
35
36
|
import { type SetupAuthFetchImpl } from "./setup-auth.js";
|
|
37
|
+
import { type SetupTenancyFetchImpl } from "./setup-tenancy.js";
|
|
36
38
|
/** The gate-exempt SCREENS (g-AC-7 / g-AC-8): always served directly, never redirected. */
|
|
37
39
|
export declare const GATE_EXEMPT_ROUTES: readonly ["/buzzing", "/login", "/onboarding"];
|
|
38
40
|
export interface CreatePortalGateOptions {
|
|
@@ -42,6 +44,8 @@ export interface CreatePortalGateOptions {
|
|
|
42
44
|
readonly doctorStatusUrl?: string;
|
|
43
45
|
/** The fetch used for the auth check (defaults to the global `fetch`; a test injects a fake). */
|
|
44
46
|
readonly setupAuthFetch?: SetupAuthFetchImpl;
|
|
47
|
+
/** The fetch used for the tenancy check (defaults to the global `fetch`; a test injects a fake). */
|
|
48
|
+
readonly setupTenancyFetch?: SetupTenancyFetchImpl;
|
|
45
49
|
/** Override the doctor registry file path the auth check resolves honeycomb's base from. */
|
|
46
50
|
readonly registryPath?: string;
|
|
47
51
|
}
|
package/dist/daemon/gate.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The server-side PORTAL LANDING GATE — PRD-003a, implementing ADR-0004's precedence.
|
|
3
3
|
*
|
|
4
|
-
* On landing on ANY non-exempt route hive evaluates ONE ordered precedence, health then auth
|
|
5
|
-
* before deciding what to serve:
|
|
4
|
+
* On landing on ANY non-exempt route hive evaluates ONE ordered precedence, health then auth then
|
|
5
|
+
* tenancy, before deciding what to serve:
|
|
6
6
|
*
|
|
7
7
|
* 1. Fleet not healthy (per the EXISTING `isFleetReady()` projection, `fleet-status.ts`) →
|
|
8
8
|
* redirect to `/buzzing` (g-AC-3). Checked FIRST: an unhealthy fleet makes every other screen
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* 2. Else not logged in (the EXISTING proxied honeycomb `/setup/state` `authenticated` bit,
|
|
11
11
|
* `setup-auth.ts`) → redirect to `/login` (g-AC-4). A fetch failure/timeout reads as "not
|
|
12
12
|
* logged in" (l-AC-6) — never a fail-soft into the dashboard.
|
|
13
|
-
* 3. Else
|
|
13
|
+
* 3. Else tenancy unconfirmed (`GET /setup/tenancy` `selected` bit, `setup-tenancy.ts`) →
|
|
14
|
+
* redirect to `/onboarding` (PRD-011c tg-AC-1). Fails closed to unconfirmed on any read fault.
|
|
15
|
+
* 4. Else serve the requested route as-is (g-AC-5 / g-AC-6): `next()` falls through to the
|
|
14
16
|
* more specific route/catch-all registered after this middleware in `server.ts`.
|
|
15
17
|
*
|
|
16
18
|
* `/buzzing` and `/login` are a FIXED exemption set checked BEFORE the precedence above, so they
|
|
@@ -26,14 +28,14 @@
|
|
|
26
28
|
* same-origin", both depend on the proxy handling its own requests untouched).
|
|
27
29
|
*
|
|
28
30
|
* SECURITY (g-AC-11, open-redirect defense): every redirect this middleware issues targets a
|
|
29
|
-
* FIXED, hard-coded literal (`/buzzing
|
|
30
|
-
* `?next=`, no `Referer`, no request path echoed back).
|
|
31
|
-
* impossible here: there is no code path where an attacker-controlled string reaches `c.redirect`.
|
|
31
|
+
* FIXED, hard-coded literal (`/buzzing`, `/login`, or `/onboarding`), never a value derived from
|
|
32
|
+
* user input (no `?next=`, no `Referer`, no request path echoed back).
|
|
32
33
|
*/
|
|
33
34
|
import { DOCTOR_STATUS_URL } from "../shared/constants.js";
|
|
34
35
|
import { isFleetReady } from "../shared/fleet-readiness.js";
|
|
35
36
|
import { fetchFleetStatus } from "./fleet-status.js";
|
|
36
37
|
import { fetchSetupAuthenticated } from "./setup-auth.js";
|
|
38
|
+
import { fetchTenancySelected } from "./setup-tenancy.js";
|
|
37
39
|
/** The fixed redirect target for an unhealthy fleet (g-AC-3). A hard-coded literal, never derived. */
|
|
38
40
|
const BUZZING_ROUTE = "/buzzing";
|
|
39
41
|
/** The fixed redirect target for a logged-out operator (g-AC-4). A hard-coded literal, never derived. */
|
|
@@ -99,6 +101,7 @@ export function createPortalGate(options = {}) {
|
|
|
99
101
|
const fleetStatusFetch = options.fleetStatusFetch ?? fetch;
|
|
100
102
|
const doctorStatusUrl = options.doctorStatusUrl ?? DOCTOR_STATUS_URL;
|
|
101
103
|
const setupAuthFetch = options.setupAuthFetch ?? fetch;
|
|
104
|
+
const setupTenancyFetch = options.setupTenancyFetch ?? fetch;
|
|
102
105
|
const registryPath = options.registryPath;
|
|
103
106
|
return async (c, next) => {
|
|
104
107
|
const pathname = new URL(c.req.url).pathname;
|
|
@@ -130,8 +133,17 @@ export function createPortalGate(options = {}) {
|
|
|
130
133
|
if (!authenticated) {
|
|
131
134
|
return c.redirect(LOGIN_ROUTE, 302);
|
|
132
135
|
}
|
|
133
|
-
//
|
|
134
|
-
//
|
|
136
|
+
// PRD-011c tg-AC-1: tenancy third. Unconfirmed (or any read fault) → `/onboarding` to resume
|
|
137
|
+
// the tenancy step; never serve the dashboard while `selected` is false.
|
|
138
|
+
// tg-AC-6 (separate-fetch justification): this is deliberately a SECOND loopback fetch rather
|
|
139
|
+
// than a coalesced read, because honeycomb does not surface `selected` on `/setup/state`;
|
|
140
|
+
// the tenancy marker lives only on `GET /setup/tenancy` (the canonical 073c contract). One
|
|
141
|
+
// additional loopback round trip per gated page navigation is the accepted budget.
|
|
142
|
+
const tenancySelected = await fetchTenancySelected(setupTenancyFetch, { registryPath, signal: c.req.raw.signal });
|
|
143
|
+
if (!tenancySelected) {
|
|
144
|
+
return c.redirect(ONBOARDING_ROUTE, 302);
|
|
145
|
+
}
|
|
146
|
+
// g-AC-5 / g-AC-6 / g-AC-10: healthy + authenticated + tenancy confirmed, serve as-is.
|
|
135
147
|
await next();
|
|
136
148
|
return undefined;
|
|
137
149
|
};
|
package/dist/daemon/gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/daemon/gate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/daemon/gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ import { z } from "zod";
|
|
|
9
9
|
import type { InstallableProduct, InstallStage } from "../../shared/onboarding-types.js";
|
|
10
10
|
import { type EmitDeps } from "../../telemetry/emit.js";
|
|
11
11
|
import type { InstallerConfig } from "./config.js";
|
|
12
|
-
/** UI-reported funnel events validated at the event route (tm-AC-1). */
|
|
13
|
-
export declare const UI_FUNNEL_EVENTS: readonly ["onboarding_started", "mode_selected", "login_shown", "dashboard_reached"];
|
|
12
|
+
/** UI-reported funnel events validated at the event route (tm-AC-1; PRD-011a ts-AC-13 tenancy set). */
|
|
13
|
+
export declare const UI_FUNNEL_EVENTS: readonly ["onboarding_started", "mode_selected", "login_shown", "tenancy_shown", "tenancy_selected", "workspace_created", "dashboard_reached"];
|
|
14
14
|
export type UiFunnelEvent = (typeof UI_FUNNEL_EVENTS)[number];
|
|
15
15
|
/** Closed zod schema for `POST /api/onboarding/event` bodies. */
|
|
16
16
|
export declare const OnboardingEventBodySchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -21,10 +21,25 @@ export declare const OnboardingEventBodySchema: z.ZodUnion<readonly [z.ZodObject
|
|
|
21
21
|
advanced: "advanced";
|
|
22
22
|
}>;
|
|
23
23
|
}, z.core.$strip>;
|
|
24
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
event: z.ZodLiteral<"tenancy_selected">;
|
|
26
|
+
properties: z.ZodObject<{
|
|
27
|
+
orgCount: z.ZodEnum<{
|
|
28
|
+
single: "single";
|
|
29
|
+
few: "few";
|
|
30
|
+
many: "many";
|
|
31
|
+
}>;
|
|
32
|
+
singleOrgConfirm: z.ZodEnum<{
|
|
33
|
+
true: "true";
|
|
34
|
+
false: "false";
|
|
35
|
+
}>;
|
|
36
|
+
}, z.core.$strip>;
|
|
24
37
|
}, z.core.$strip>, z.ZodObject<{
|
|
25
38
|
event: z.ZodEnum<{
|
|
26
39
|
onboarding_started: "onboarding_started";
|
|
27
40
|
login_shown: "login_shown";
|
|
41
|
+
tenancy_shown: "tenancy_shown";
|
|
42
|
+
workspace_created: "workspace_created";
|
|
28
43
|
dashboard_reached: "dashboard_reached";
|
|
29
44
|
}>;
|
|
30
45
|
properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
@@ -8,23 +8,42 @@
|
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
import { emitTelemetry, HIVE_STATE_DIR } from "../../telemetry/emit.js";
|
|
10
10
|
import { isSessionEventReported, loadOnboardingLedger, markSessionEventReported, sessionKeyFromToken } from "../../telemetry/onboarding-session-ledger.js";
|
|
11
|
-
/** UI-reported funnel events validated at the event route (tm-AC-1). */
|
|
11
|
+
/** UI-reported funnel events validated at the event route (tm-AC-1; PRD-011a ts-AC-13 tenancy set). */
|
|
12
12
|
export const UI_FUNNEL_EVENTS = [
|
|
13
13
|
"onboarding_started",
|
|
14
14
|
"mode_selected",
|
|
15
15
|
"login_shown",
|
|
16
|
+
"tenancy_shown",
|
|
17
|
+
"tenancy_selected",
|
|
18
|
+
"workspace_created",
|
|
16
19
|
"dashboard_reached"
|
|
17
20
|
];
|
|
18
21
|
const ModeSelectedBodySchema = z.object({
|
|
19
22
|
event: z.literal("mode_selected"),
|
|
20
23
|
properties: z.object({ mode: z.enum(["standard", "advanced"]) })
|
|
21
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* PRD-011a ts-AC-13: `tenancy_selected` carries ONLY a bucketed org count and the single-org-confirm
|
|
27
|
+
* flag (both closed enums; never an org/workspace id or name). Mirrors the UI emit in
|
|
28
|
+
* `src/dashboard/web/onboarding/tenancy-step.tsx`.
|
|
29
|
+
*/
|
|
30
|
+
const TenancySelectedBodySchema = z.object({
|
|
31
|
+
event: z.literal("tenancy_selected"),
|
|
32
|
+
properties: z.object({
|
|
33
|
+
orgCount: z.enum(["single", "few", "many"]),
|
|
34
|
+
singleOrgConfirm: z.enum(["true", "false"])
|
|
35
|
+
})
|
|
36
|
+
});
|
|
22
37
|
const SimpleUiEventBodySchema = z.object({
|
|
23
|
-
event: z.enum(["onboarding_started", "login_shown", "dashboard_reached"]),
|
|
38
|
+
event: z.enum(["onboarding_started", "login_shown", "tenancy_shown", "workspace_created", "dashboard_reached"]),
|
|
24
39
|
properties: z.record(z.string(), z.string()).optional()
|
|
25
40
|
});
|
|
26
41
|
/** Closed zod schema for `POST /api/onboarding/event` bodies. */
|
|
27
|
-
export const OnboardingEventBodySchema = z.union([
|
|
42
|
+
export const OnboardingEventBodySchema = z.union([
|
|
43
|
+
ModeSelectedBodySchema,
|
|
44
|
+
TenancySelectedBodySchema,
|
|
45
|
+
SimpleUiEventBodySchema
|
|
46
|
+
]);
|
|
28
47
|
const SESSION_ONCE_SET = new Set([
|
|
29
48
|
"onboarding_started",
|
|
30
49
|
"health_check_passed",
|
|
@@ -97,6 +116,18 @@ export function createFunnelTelemetry(deps) {
|
|
|
97
116
|
case "login_shown":
|
|
98
117
|
emit("login_shown");
|
|
99
118
|
break;
|
|
119
|
+
case "tenancy_shown":
|
|
120
|
+
emit("tenancy_shown");
|
|
121
|
+
break;
|
|
122
|
+
case "tenancy_selected":
|
|
123
|
+
emit("tenancy_selected", {
|
|
124
|
+
org_count: body.properties.orgCount,
|
|
125
|
+
single_org_confirm: body.properties.singleOrgConfirm
|
|
126
|
+
});
|
|
127
|
+
break;
|
|
128
|
+
case "workspace_created":
|
|
129
|
+
emit("workspace_created");
|
|
130
|
+
break;
|
|
100
131
|
case "dashboard_reached":
|
|
101
132
|
emit("dashboard_reached", {}, true);
|
|
102
133
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnel-telemetry.js","sourceRoot":"","sources":["../../../src/daemon/installer/funnel-telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,aAAa,EACb,cAAc,EAMf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,8CAA8C,CAAC;AAGtD,
|
|
1
|
+
{"version":3,"file":"funnel-telemetry.js","sourceRoot":"","sources":["../../../src/daemon/installer/funnel-telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
|
-
"manifestVersion": "0.
|
|
2
|
+
"manifestVersion": "0.5.1",
|
|
3
3
|
"products": {
|
|
4
4
|
"honeycomb": {
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.4.1",
|
|
6
6
|
"packageName": "@legioncodeinc/honeycomb",
|
|
7
7
|
"published": true
|
|
8
8
|
},
|
|
9
9
|
"doctor": {
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.3.1",
|
|
11
11
|
"packageName": "@legioncodeinc/doctor",
|
|
12
12
|
"published": true
|
|
13
13
|
},
|
|
14
14
|
"hive": {
|
|
15
|
-
"version": "0.
|
|
15
|
+
"version": "0.5.1",
|
|
16
16
|
"packageName": "@legioncodeinc/hive",
|
|
17
17
|
"published": true
|
|
18
18
|
},
|
|
19
19
|
"nectar": {
|
|
20
|
-
"version": "0.
|
|
20
|
+
"version": "0.2.1",
|
|
21
21
|
"packageName": "@legioncodeinc/nectar",
|
|
22
22
|
"published": true
|
|
23
23
|
}
|
|
@@ -181,9 +181,13 @@ export function createInstallerService(options = {}) {
|
|
|
181
181
|
tokenStore.invalidate();
|
|
182
182
|
return c.body(null, 204);
|
|
183
183
|
});
|
|
184
|
-
// 6) Funnel events (PRD-009c):
|
|
184
|
+
// 6) Funnel events (PRD-009c): closed UI event set, emitted through the chokepoint. Token
|
|
185
|
+
// mode is "optional" (PRD-011 N-1): the tokenless gate-redirect resume path (C-1) must
|
|
186
|
+
// still be able to record tenancy_shown / tenancy_selected / dashboard_reached, or the
|
|
187
|
+
// resume cohort is silently undercounted; a presented token still validates as before.
|
|
188
|
+
// This route is telemetry-only (no state change), Host + Origin guarded like the rest.
|
|
185
189
|
app.post("/api/onboarding/event", async (c) => {
|
|
186
|
-
const rejection = guardInstallerRequest(c, tokenStore, "
|
|
190
|
+
const rejection = guardInstallerRequest(c, tokenStore, "optional");
|
|
187
191
|
if (rejection !== null)
|
|
188
192
|
return rejection;
|
|
189
193
|
const body = await readJsonBody(c);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/daemon/installer/routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/daemon/installer/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,15 @@ import type { Context } from "hono";
|
|
|
15
15
|
import type { TokenStore } from "./token.js";
|
|
16
16
|
/** The request header carrying the onboarding token (the SSE path uses the `t` query param instead). */
|
|
17
17
|
export declare const TOKEN_HEADER: "x-onboarding-token";
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Token requirement per endpoint class:
|
|
20
|
+
* - `always`: a valid token is required unconditionally (state-changing installer endpoints).
|
|
21
|
+
* - `detect`: required only while an onboarding session is active (the is-AC-10 re-entry carve-out).
|
|
22
|
+
* - `optional`: a PRESENTED token must be valid, but absence is accepted (PRD-011 N-1: the
|
|
23
|
+
* telemetry-only event route, so the tokenless gate-redirect resume cohort is still counted;
|
|
24
|
+
* the Host + Origin checks remain the cross-origin defense on this route).
|
|
25
|
+
*/
|
|
26
|
+
export type TokenMode = "always" | "detect" | "optional";
|
|
20
27
|
/** True iff the `Host` header is the portal's own host (is-AC-8). */
|
|
21
28
|
export declare function hostAllowed(host: string | undefined): boolean;
|
|
22
29
|
/**
|
|
@@ -72,6 +72,14 @@ export function guardInstallerRequest(c, tokenStore, tokenMode) {
|
|
|
72
72
|
return unauthorized();
|
|
73
73
|
return null;
|
|
74
74
|
}
|
|
75
|
+
// "optional" (PRD-011 N-1): tokenless is accepted (the gate-redirect resume path has no token
|
|
76
|
+
// by design, ts-AC-12); a token that IS presented must still validate, so token-bearing
|
|
77
|
+
// behavior is unchanged and a wrong token never passes.
|
|
78
|
+
if (tokenMode === "optional") {
|
|
79
|
+
if (provided !== null && !tokenStore.requireValid(provided))
|
|
80
|
+
return unauthorized();
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
75
83
|
// "detect": token required only while an onboarding session is active (is-AC-10 carve-out).
|
|
76
84
|
if (tokenStore.isActive() && !tokenStore.requireValid(provided))
|
|
77
85
|
return unauthorized();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/daemon/installer/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGjE,sFAAsF;AACtF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC;AAE/F,0FAA0F;AAC1F,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,SAAS,IAAI,SAAS,EAAE,EAAE,oBAAoB,SAAS,EAAE,CAAC,CAAC,CAAC;AAE/G,wGAAwG;AACxG,MAAM,CAAC,MAAM,YAAY,GAAG,oBAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/daemon/installer/security.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/server.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { type ProxyFetch } from "./proxy.js";
|
|
|
6
6
|
import { type TelemetryFetch } from "./telemetry-proxy.js";
|
|
7
7
|
import { type InstallerServiceOptions } from "./installer/index.js";
|
|
8
8
|
import type { SetupAuthFetchImpl } from "./setup-auth.js";
|
|
9
|
+
import type { SetupTenancyFetchImpl } from "./setup-tenancy.js";
|
|
9
10
|
export interface CreateHiveOptions {
|
|
10
11
|
readonly host?: string;
|
|
11
12
|
readonly port?: number;
|
|
@@ -17,6 +18,8 @@ export interface CreateHiveOptions {
|
|
|
17
18
|
readonly proxyFetch?: ProxyFetch;
|
|
18
19
|
/** The fetch used by the portal gate's auth check (`/setup/state`, defaults to the global `fetch`). */
|
|
19
20
|
readonly setupAuthFetch?: SetupAuthFetchImpl;
|
|
21
|
+
/** The fetch used by the portal gate's tenancy check (`/setup/tenancy`, defaults to the global `fetch`). */
|
|
22
|
+
readonly setupTenancyFetch?: SetupTenancyFetchImpl;
|
|
20
23
|
/** Override doctor's SSE events URL the telemetry relay connects to (defaults to the fixed loopback constant). */
|
|
21
24
|
readonly doctorEventsUrl?: string;
|
|
22
25
|
/** The fetch used by the telemetry relay to reach doctor's SSE stream (defaults to the global `fetch`). */
|
package/dist/daemon/server.js
CHANGED
|
@@ -38,6 +38,7 @@ export function createHive(options = {}) {
|
|
|
38
38
|
fleetStatusFetch,
|
|
39
39
|
doctorStatusUrl,
|
|
40
40
|
setupAuthFetch: options.setupAuthFetch,
|
|
41
|
+
setupTenancyFetch: options.setupTenancyFetch,
|
|
41
42
|
registryPath: options.registryPath
|
|
42
43
|
}));
|
|
43
44
|
// The bundled SPA's static assets — specific, fixed paths registered before the shell catch-all
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EAE1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,YAAY,EACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAkB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAuB,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAgC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-011c gate tenancy input: fail-closed read of honeycomb `GET /setup/tenancy` `selected` bit.
|
|
3
|
+
* Mirrors `setup-auth.ts` construction exactly (tg-AC-5).
|
|
4
|
+
*/
|
|
5
|
+
export type SetupTenancyFetchInit = {
|
|
6
|
+
readonly redirect?: "error" | "follow" | "manual";
|
|
7
|
+
readonly signal?: AbortSignal;
|
|
8
|
+
};
|
|
9
|
+
export type SetupTenancyFetchImpl = (input: string, init?: SetupTenancyFetchInit) => Promise<Response>;
|
|
10
|
+
export interface FetchTenancySelectedOptions {
|
|
11
|
+
readonly registryPath?: string;
|
|
12
|
+
readonly signal?: AbortSignal;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve whether tenancy is confirmed for the gate's third precedence step (tg-AC-1..4).
|
|
16
|
+
* Returns `false` on ANY failure so a transient fault lands on `/onboarding`, never the dashboard.
|
|
17
|
+
*/
|
|
18
|
+
export declare function fetchTenancySelected(fetchImpl?: SetupTenancyFetchImpl, options?: FetchTenancySelectedOptions): Promise<boolean>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-011c gate tenancy input: fail-closed read of honeycomb `GET /setup/tenancy` `selected` bit.
|
|
3
|
+
* Mirrors `setup-auth.ts` construction exactly (tg-AC-5).
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { isLoopbackBaseUrl } from "../shared/daemon-routing.js";
|
|
7
|
+
import { resolveDaemonBases } from "./registry.js";
|
|
8
|
+
const SetupTenancySelectedSchema = z.object({
|
|
9
|
+
selected: z.boolean().catch(false),
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* Resolve whether tenancy is confirmed for the gate's third precedence step (tg-AC-1..4).
|
|
13
|
+
* Returns `false` on ANY failure so a transient fault lands on `/onboarding`, never the dashboard.
|
|
14
|
+
*/
|
|
15
|
+
export async function fetchTenancySelected(fetchImpl = fetch, options = {}) {
|
|
16
|
+
const base = resolveDaemonBases({ registryPath: options.registryPath }).honeycomb;
|
|
17
|
+
if (!isLoopbackBaseUrl(base))
|
|
18
|
+
return false;
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetchImpl(`${base}/setup/tenancy`, { redirect: "error", signal: options.signal });
|
|
21
|
+
if (!response.ok)
|
|
22
|
+
return false;
|
|
23
|
+
let parsedJson;
|
|
24
|
+
try {
|
|
25
|
+
parsedJson = await response.json();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const parsed = SetupTenancySelectedSchema.safeParse(parsedJson);
|
|
31
|
+
return parsed.success ? parsed.data.selected : false;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=setup-tenancy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-tenancy.js","sourceRoot":"","sources":["../../src/daemon/setup-tenancy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;CAClC,CAAC,CAAC;AAaH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,YAAmC,KAAK,EACxC,UAAuC,EAAE;IAEzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAE/B,IAAI,UAAmB,CAAC;QACxB,IAAI,CAAC;YACJ,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-011b: active tenancy readout helpers and shell chrome component.
|
|
3
|
+
* Maps daemon truth to honest labels; never fabricates `local · default`.
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import type { SetupTenancyResultWire, WireClient } from "./wire.js";
|
|
7
|
+
export type ActiveTenancyLabel = {
|
|
8
|
+
readonly kind: "ok";
|
|
9
|
+
readonly org: string;
|
|
10
|
+
readonly workspace: string;
|
|
11
|
+
/** How the tenancy was confirmed (honeycomb `confirmedBy`); absent on older daemons. */
|
|
12
|
+
readonly confirmedBy?: "selection" | "grandfathered";
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: "unavailable";
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: "not-linked";
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: "not-selected";
|
|
19
|
+
};
|
|
20
|
+
/** Derive the shell readout label from a tenancy read (tv-AC-2/3). */
|
|
21
|
+
export declare function deriveActiveTenancyLabel(read: SetupTenancyResultWire): ActiveTenancyLabel;
|
|
22
|
+
export declare function formatActiveTenancyLabel(label: ActiveTenancyLabel): string;
|
|
23
|
+
export interface ActiveTenancyDisplayProps {
|
|
24
|
+
readonly wire: WireClient;
|
|
25
|
+
/** Incremented by the shell on honeycomb down→up recovery (tv-AC-4). */
|
|
26
|
+
readonly refreshKey?: number;
|
|
27
|
+
}
|
|
28
|
+
/** Persistent org · workspace readout for the shell chrome bar (tv-AC-1..5). */
|
|
29
|
+
export declare function ActiveTenancyDisplay({ wire, refreshKey }: ActiveTenancyDisplayProps): React.JSX.Element;
|
|
30
|
+
/** Tenancy line for the nectar projects panel (tv-AC-6..8). */
|
|
31
|
+
export declare function formatNectarPanelTenancy(projectsTenancy: {
|
|
32
|
+
org?: string;
|
|
33
|
+
workspace?: string;
|
|
34
|
+
} | undefined, fleetTenancy: ActiveTenancyLabel): string | null;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* PRD-011b: active tenancy readout helpers and shell chrome component.
|
|
4
|
+
* Maps daemon truth to honest labels; never fabricates `local · default`.
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { UNREACHABLE_SETUP_TENANCY } from "./wire.js";
|
|
8
|
+
import { useScopeSwitcher } from "./scope-context.js";
|
|
9
|
+
/** Derive the shell readout label from a tenancy read (tv-AC-2/3). */
|
|
10
|
+
export function deriveActiveTenancyLabel(read) {
|
|
11
|
+
if (read.unreachable)
|
|
12
|
+
return { kind: "unavailable" };
|
|
13
|
+
if (!read.authenticated)
|
|
14
|
+
return { kind: "not-linked" };
|
|
15
|
+
if (!read.selected)
|
|
16
|
+
return { kind: "not-selected" };
|
|
17
|
+
const org = read.org?.name !== "" && read.org?.name !== undefined ? read.org.name : read.org?.id ?? "";
|
|
18
|
+
const workspace = read.workspace?.name !== "" && read.workspace?.name !== undefined ? read.workspace.name : read.workspace?.id ?? "";
|
|
19
|
+
if (org === "" || workspace === "")
|
|
20
|
+
return { kind: "unavailable" };
|
|
21
|
+
return read.confirmedBy !== undefined ? { kind: "ok", org, workspace, confirmedBy: read.confirmedBy } : { kind: "ok", org, workspace };
|
|
22
|
+
}
|
|
23
|
+
export function formatActiveTenancyLabel(label) {
|
|
24
|
+
switch (label.kind) {
|
|
25
|
+
case "ok":
|
|
26
|
+
// A grandfathered confirmation (carried forward from a pre-selection credential) is
|
|
27
|
+
// hinted subtly so the operator knows this tenancy was never explicitly picked.
|
|
28
|
+
return label.confirmedBy === "grandfathered" ? `${label.org} · ${label.workspace} (grandfathered)` : `${label.org} · ${label.workspace}`;
|
|
29
|
+
case "unavailable":
|
|
30
|
+
return "tenancy unavailable";
|
|
31
|
+
case "not-linked":
|
|
32
|
+
return "not linked";
|
|
33
|
+
case "not-selected":
|
|
34
|
+
return "tenancy not selected";
|
|
35
|
+
default: {
|
|
36
|
+
const _exhaustive = label;
|
|
37
|
+
return _exhaustive;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Persistent org · workspace readout for the shell chrome bar (tv-AC-1..5). */
|
|
42
|
+
export function ActiveTenancyDisplay({ wire, refreshKey = 0 }) {
|
|
43
|
+
const { switchFeedback } = useScopeSwitcher();
|
|
44
|
+
const [tenancy, setTenancy] = React.useState(UNREACHABLE_SETUP_TENANCY);
|
|
45
|
+
const hydrate = React.useCallback(async () => {
|
|
46
|
+
setTenancy(await wire.setupTenancy());
|
|
47
|
+
}, [wire]);
|
|
48
|
+
React.useEffect(() => {
|
|
49
|
+
void hydrate();
|
|
50
|
+
}, [hydrate, refreshKey]);
|
|
51
|
+
// tv-AC-5: re-hydrate after a persisted org/workspace switch acknowledges.
|
|
52
|
+
React.useEffect(() => {
|
|
53
|
+
if (switchFeedback?.kind === "persisted" && switchFeedback.pending !== true) {
|
|
54
|
+
void hydrate();
|
|
55
|
+
}
|
|
56
|
+
}, [switchFeedback, hydrate]);
|
|
57
|
+
const label = deriveActiveTenancyLabel(tenancy);
|
|
58
|
+
const text = formatActiveTenancyLabel(label);
|
|
59
|
+
return (_jsx("span", { "data-testid": "active-tenancy-display", "data-tenancy-state": label.kind, style: {
|
|
60
|
+
fontFamily: "var(--font-mono)",
|
|
61
|
+
fontSize: "var(--text-xs)",
|
|
62
|
+
color: label.kind === "ok" ? "var(--text-secondary)" : "var(--text-tertiary)",
|
|
63
|
+
whiteSpace: "nowrap",
|
|
64
|
+
overflow: "hidden",
|
|
65
|
+
textOverflow: "ellipsis",
|
|
66
|
+
}, children: text }));
|
|
67
|
+
}
|
|
68
|
+
/** Tenancy line for the nectar projects panel (tv-AC-6..8). */
|
|
69
|
+
export function formatNectarPanelTenancy(projectsTenancy, fleetTenancy) {
|
|
70
|
+
if (projectsTenancy?.org !== undefined && projectsTenancy.org !== "" && projectsTenancy.workspace !== undefined && projectsTenancy.workspace !== "") {
|
|
71
|
+
return `${projectsTenancy.org} · ${projectsTenancy.workspace}`;
|
|
72
|
+
}
|
|
73
|
+
if (fleetTenancy.kind === "ok") {
|
|
74
|
+
return `${fleetTenancy.org} · ${fleetTenancy.workspace} (fleet credential)`;
|
|
75
|
+
}
|
|
76
|
+
if (fleetTenancy.kind === "unavailable")
|
|
77
|
+
return "tenancy unknown";
|
|
78
|
+
if (fleetTenancy.kind === "not-linked")
|
|
79
|
+
return "not linked";
|
|
80
|
+
if (fleetTenancy.kind === "not-selected")
|
|
81
|
+
return "tenancy not selected";
|
|
82
|
+
return "tenancy unknown";
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=active-tenancy-display.js.map
|