@xeonr/console-shell 0.2.4 → 0.3.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.
@@ -19,7 +19,7 @@ export interface ConsoleState {
19
19
  /**
20
20
  * False when the client answered with an anonymous `Me` — an empty subject.
21
21
  * Only a console with a signed-out surface ever sees it (see
22
- * `httpConsoleClient`'s `onUnauthenticated`); everywhere else a missing
22
+ * `connectConsoleClient`'s `onUnauthenticated`); everywhere else a missing
23
23
  * session redirects before the shell mounts.
24
24
  */
25
25
  signedIn: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleProvider.d.ts","sourceRoot":"","sources":["../src/ConsoleProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7G,OAAO,KAAK,EAAE,aAAa,EAAkB,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAW7G;;;;GAIG;AACH,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,EAAE,EAAE,EAAE,CAAC;IACP;;;;;OAKG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,6DAA6D;IAC7D,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1D,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BAgO/H;AAED,sFAAsF;AACtF,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,UAAU,IAAI,YAAY,CAIzC"}
1
+ {"version":3,"file":"ConsoleProvider.d.ts","sourceRoot":"","sources":["../src/ConsoleProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7G,OAAO,KAAK,EAAE,aAAa,EAAkB,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAW7G;;;;GAIG;AACH,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,EAAE,EAAE,EAAE,CAAC;IACP;;;;;OAKG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,6DAA6D;IAC7D,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1D,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BAgQ/H;AAED,sFAAsF;AACtF,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,UAAU,IAAI,YAAY,CAIzC"}
@@ -56,9 +56,14 @@ export function ConsoleProvider({ client, product, teamSlug, onTeamChange, homeO
56
56
  // one — is a choice. An older BFF always sends an array, so an empty one
57
57
  // from it is treated as unset, exactly as it behaved before.
58
58
  setPins((cur) => cur ?? c.pinnedProducts ?? null);
59
- // The server-held theme follows you across hosts; local preference wins
60
- // only if it was set explicitly on this host.
61
- if (theme.pref === "system" && c.theme !== "system")
59
+ // The server copy IS the theme preference — it is the only one that can
60
+ // follow you between console hosts, because localStorage is per-origin.
61
+ // It used to be applied only when the local value was still "system",
62
+ // which meant the first toggle on a host pinned that host to its own
63
+ // theme for good: light on Databases, dark on Functions, with nothing
64
+ // reconciling them. Applied only when the read actually succeeded, so a
65
+ // failed context call does not wipe a real preference back to system.
66
+ if (cr.status === "fulfilled")
62
67
  theme.setPref(c.theme);
63
68
  });
64
69
  return () => {
@@ -104,6 +109,33 @@ export function ConsoleProvider({ client, product, teamSlug, onTeamChange, homeO
104
109
  if (currentProduct?.colour)
105
110
  setBrand(currentProduct.colour);
106
111
  }, [currentProduct?.colour, setBrand]);
112
+ // The other half of that: a preference changed anywhere — the rail's toggle,
113
+ // a product's own settings screen, another tab — is written back to the
114
+ // console context, so the next console you open agrees with this one. The
115
+ // rail's button has always been purely local; the server copy was written
116
+ // once at sign-up and never again, which is why every ConsoleContext row in
117
+ // production still reads "system".
118
+ //
119
+ // Watching `theme.pref` rather than wrapping the toggle covers every path
120
+ // that can change it, and cannot disagree with what is on screen.
121
+ const serverTheme = ctx?.theme;
122
+ useEffect(() => {
123
+ // Nothing to compare against until the context has loaded; writing before
124
+ // that would push this origin's cached guess over a newer choice made
125
+ // somewhere else.
126
+ if (serverTheme === undefined || theme.pref === serverTheme)
127
+ return;
128
+ const next = theme.pref;
129
+ const revert = theme.setPref;
130
+ setCtx((c) => (c ? { ...c, theme: next } : c));
131
+ void client.setContext({ theme: next }).catch((err) => {
132
+ // Roll the *preference* back, not just the cached context: leaving the
133
+ // two disagreeing would re-enter this effect on every render and retry
134
+ // the failed write forever.
135
+ revert(serverTheme);
136
+ onError?.(err);
137
+ });
138
+ }, [theme.pref, theme.setPref, serverTheme, client, onError]);
107
139
  const pinned = useMemo(() => {
108
140
  if (pins === null)
109
141
  return products.filter((p) => p.pinnedByDefault).map((p) => p.key);
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleProvider.js","sourceRoot":"","sources":["../src/ConsoleProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConsoleProvider.js","sourceRoot":"","sources":["../src/ConsoleProvider.tsx"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,17 +1,18 @@
1
1
  import type { ConsoleClient, ConsoleContext, Invitation, Me, Product, SearchResult } from "./types.ts";
2
- export interface HttpConsoleClientOptions {
2
+ export interface ConnectConsoleClientOptions {
3
3
  /**
4
- * What to do when /console/* answers 401. The default sends the person to
5
- * `/auth/login`, which is right for a console you cannot use signed out.
4
+ * What to do when the service answers Unauthenticated. The default sends the
5
+ * person to `/auth/login`, which is right for a console you cannot use
6
+ * signed out.
6
7
  *
7
- * A product with a public surface — a catalogue anyone may read — passes
8
- * its own handler and returns a value to render instead: for that product
9
- * "no session" is a state, not an interruption. Returning a value resolves
10
- * the call with it; throwing rejects it; the default never returns.
8
+ * A product with a public surface — a catalogue anyone may read — passes its
9
+ * own handler and returns a value to render instead: for that product "no
10
+ * session" is a state, not an interruption. Returning a value resolves the
11
+ * call with it; throwing rejects it; the default never returns.
11
12
  */
12
- onUnauthenticated?: ((path: string) => unknown) | undefined;
13
+ onUnauthenticated?: ((method: string) => unknown) | undefined;
13
14
  }
14
- export declare function httpConsoleClient(base?: string, opts?: HttpConsoleClientOptions): ConsoleClient;
15
+ export declare function connectConsoleClient(baseUrl?: string, opts?: ConnectConsoleClientOptions): ConsoleClient;
15
16
  export interface MockFixtures {
16
17
  me: Me;
17
18
  products: Product[];
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAMvG,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC7D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,SAAa,EAAE,IAAI,GAAE,wBAA6B,GAAG,aAAa,CAiDvG;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAC9C,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;CAC1D;AAKD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,SAAM,GAAG,aAAa,CAuChF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,EAAE,EACF,OAAO,EAGP,YAAY,EAEb,MAAM,YAAY,CAAC;AAapB,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC/D;AAyCD,wBAAgB,oBAAoB,CAAC,OAAO,SAAK,EAAE,IAAI,GAAE,2BAAgC,GAAG,aAAa,CA6IxG;AAaD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAC9C,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;CAC1D;AAKD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,SAAM,GAAG,aAAa,CAuChF"}
package/dist/client.js CHANGED
@@ -1,52 +1,170 @@
1
- export function httpConsoleClient(base = "/console", opts = {}) {
2
- async function call(path, init) {
3
- const res = await fetch(`${base}${path}`, {
4
- credentials: "same-origin",
5
- headers: { "content-type": "application/json", ...(init?.headers ?? {}) },
6
- ...init,
7
- });
8
- if (res.status === 401) {
9
- if (opts.onUnauthenticated)
10
- return opts.onUnauthenticated(path);
11
- // The BFF answers 401 only when there is no session at all; it has
12
- // already tried a silent prompt=none entry, so this is a real sign-in.
13
- window.location.assign(`/auth/login?next=${encodeURIComponent(window.location.pathname + window.location.search)}`);
14
- return new Promise(() => { });
1
+ import { Code, ConnectError, createClient } from "@connectrpc/connect";
2
+ import { createConnectTransport } from "@connectrpc/connect-web";
3
+ import { ConsoleProductService, ProductStatus, SearchResultKind, TeamRole } from "./gen/xeonr/console/v1/console_pb.js";
4
+ const STATUS_NAME = {
5
+ [ProductStatus.UNSPECIFIED]: "live",
6
+ [ProductStatus.LIVE]: "live",
7
+ [ProductStatus.PREVIEW]: "preview",
8
+ [ProductStatus.COMING_SOON]: "coming_soon",
9
+ };
10
+ const SEARCH_KIND_NAME = {
11
+ [SearchResultKind.UNSPECIFIED]: "entity",
12
+ [SearchResultKind.ENTITY]: "entity",
13
+ [SearchResultKind.ACTION]: "action",
14
+ [SearchResultKind.TEAM]: "team",
15
+ [SearchResultKind.NAVIGATION]: "navigation",
16
+ };
17
+ function teamFrom(t) {
18
+ return {
19
+ id: t.id,
20
+ slug: t.slug,
21
+ name: t.name,
22
+ avatarUrl: t.avatarUrl || undefined,
23
+ role: t.role === TeamRole.OWNER ? "owner" : "member",
24
+ roles: t.roles,
25
+ entitled: t.entitled,
26
+ canEnable: t.canEnable,
27
+ };
28
+ }
29
+ export function connectConsoleClient(baseUrl = "", opts = {}) {
30
+ const rpc = createClient(ConsoleProductService,
31
+ // Same-origin by default: the BFF is this console's own server, and a
32
+ // same-origin request carries the session cookie without any credentials
33
+ // dance.
34
+ createConnectTransport({ baseUrl }));
35
+ // Unauthenticated is the one error the shell handles rather than surfaces:
36
+ // the BFF answers it only when there is no session at all, having already
37
+ // tried a silent prompt=none entry, so it means a real sign-in is due.
38
+ async function call(method, run) {
39
+ try {
40
+ return await run();
41
+ }
42
+ catch (err) {
43
+ if (err instanceof ConnectError && err.code === Code.Unauthenticated) {
44
+ if (opts.onUnauthenticated)
45
+ return opts.onUnauthenticated(method);
46
+ window.location.assign(`/auth/login?next=${encodeURIComponent(window.location.pathname + window.location.search)}`);
47
+ return new Promise(() => { });
48
+ }
49
+ throw err;
15
50
  }
16
- if (!res.ok)
17
- throw new Error(`${path}: ${res.status}`);
18
- return (await res.json());
19
51
  }
20
52
  return {
21
- me: () => call("/me"),
22
- listProducts: (team) => call(`/products${team ? `?team=${encodeURIComponent(team)}` : ""}`),
23
- getContext: () => call("/context"),
24
- setContext: (patch) => call("/context", { method: "PATCH", body: JSON.stringify(patch) }),
25
- listMyInvitations: () => call("/invitations"),
26
- // Not `call`: this answers 204 with no body, and its failure body is auth's
27
- // own message ("that product is not self-serve", "you do not own this
28
- // team"), which the caller shows rather than a status code.
53
+ me: () => call("GetMe", async () => {
54
+ const r = await rpc.getMe({});
55
+ const me = {
56
+ subject: r.subject,
57
+ displayName: r.displayName,
58
+ email: r.email,
59
+ avatarUrl: r.avatarUrl || undefined,
60
+ teams: r.teams.map(teamFrom),
61
+ teamsVersion: Number(r.teamsVersion),
62
+ isOrgAdmin: r.isOrgAdmin,
63
+ warnings: r.warnings,
64
+ };
65
+ return me;
66
+ }),
67
+ listProducts: (team) => call("ListProducts", async () => {
68
+ const r = await rpc.listProducts({ team: team ?? "" });
69
+ return r.products.map((p) => ({
70
+ key: p.key,
71
+ name: p.name,
72
+ origin: p.origin,
73
+ icon: p.icon,
74
+ colour: p.colour,
75
+ category: p.category,
76
+ blurb: p.blurb,
77
+ status: STATUS_NAME[p.status] ?? "live",
78
+ scopes: p.scopes,
79
+ pinnedByDefault: p.pinnedByDefault,
80
+ enabled: p.enabled,
81
+ canEnable: p.canEnable,
82
+ docsUrl: p.docsUrl || undefined,
83
+ supportUrl: p.supportUrl || undefined,
84
+ }));
85
+ }),
86
+ getContext: () => call("GetContext", async () => contextFrom((await rpc.getContext({})).context)),
87
+ setContext: (patch) => call("UpdateContext", async () => {
88
+ // Only the keys actually present in the patch are named as paths, so a
89
+ // write that touches the theme cannot clear the pins by omission.
90
+ const paths = [];
91
+ const context = {};
92
+ if ("activeTeam" in patch) {
93
+ paths.push("active_team");
94
+ context.activeTeam = patch.activeTeam ?? "";
95
+ }
96
+ if ("pinnedProducts" in patch) {
97
+ paths.push("pinned_products");
98
+ // null unsets the choice, so the registry's defaults apply again. An
99
+ // array — the empty one included — is a choice, and the message's
100
+ // presence is what carries that distinction onto the wire.
101
+ if (patch.pinnedProducts != null)
102
+ context.pinnedProducts = { keys: patch.pinnedProducts };
103
+ }
104
+ if ("theme" in patch) {
105
+ paths.push("theme");
106
+ context.theme = patch.theme ?? "system";
107
+ }
108
+ return contextFrom((await rpc.updateContext({ context, paths })).context);
109
+ }),
110
+ listMyInvitations: () => call("ListInvitations", async () => {
111
+ const r = await rpc.listInvitations({});
112
+ return r.invitations.map((i) => ({
113
+ id: i.id,
114
+ team: {
115
+ id: i.team?.id ?? "",
116
+ slug: i.team?.slug ?? "",
117
+ name: i.team?.name ?? "",
118
+ avatarUrl: i.team?.avatarUrl || undefined,
119
+ },
120
+ invitedBy: i.invitedBy,
121
+ role: i.role === TeamRole.OWNER ? "owner" : "member",
122
+ expiresAt: i.expiresAt,
123
+ }));
124
+ }),
125
+ // Not wrapped in `call`: its failure message is auth's own ("that product
126
+ // is not self-serve", "you do not own this team"), which the caller shows
127
+ // instead of a status code.
29
128
  enableProduct: async (team, product) => {
30
- const res = await fetch(`${base}/products/enable`, {
31
- method: "POST",
32
- credentials: "same-origin",
33
- headers: { "content-type": "application/json" },
34
- body: JSON.stringify({ team, product }),
35
- });
36
- if (res.status === 401) {
37
- if (opts.onUnauthenticated) {
38
- opts.onUnauthenticated("/products/enable");
39
- return;
40
- }
41
- window.location.assign(`/auth/login?next=${encodeURIComponent(window.location.pathname + window.location.search)}`);
42
- return new Promise(() => { });
129
+ try {
130
+ await rpc.createProductBinding({ team, product });
43
131
  }
44
- if (!res.ok) {
45
- const text = (await res.text().catch(() => "")).trim();
46
- throw new Error(text || `Could not enable ${product} (${res.status})`);
132
+ catch (err) {
133
+ if (!(err instanceof ConnectError))
134
+ throw err;
135
+ if (err.code === Code.Unauthenticated) {
136
+ if (opts.onUnauthenticated) {
137
+ opts.onUnauthenticated("CreateProductBinding");
138
+ return;
139
+ }
140
+ window.location.assign(`/auth/login?next=${encodeURIComponent(window.location.pathname + window.location.search)}`);
141
+ return new Promise(() => { });
142
+ }
143
+ throw new Error(err.rawMessage || `Could not enable ${product}`);
47
144
  }
48
145
  },
49
- search: (query, team) => call(`/search?q=${encodeURIComponent(query)}${team ? `&team=${encodeURIComponent(team)}` : ""}`),
146
+ search: (query, team) => call("Search", async () => {
147
+ const r = await rpc.search({ query, team: team ?? "" });
148
+ return r.results.map((s) => ({
149
+ product: s.product,
150
+ kind: SEARCH_KIND_NAME[s.kind] ?? "entity",
151
+ title: s.title,
152
+ subtitle: s.subtitle || undefined,
153
+ href: s.href,
154
+ icon: s.icon || undefined,
155
+ internal: s.internal,
156
+ }));
157
+ }),
158
+ };
159
+ }
160
+ function contextFrom(ctx) {
161
+ const theme = ctx?.theme;
162
+ return {
163
+ activeTeam: ctx?.activeTeam ? ctx.activeTeam : null,
164
+ // An absent message is "nobody has chosen"; a present one — even with no
165
+ // keys — is a choice, and must not revive the registry's defaults.
166
+ pinnedProducts: ctx?.pinnedProducts ? ctx.pinnedProducts.keys : null,
167
+ theme: theme === "light" || theme === "dark" ? theme : "system",
50
168
  };
51
169
  }
52
170
  // mockConsoleClient drives the shell with no server at all — the same idea as
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { Invitation, Me, Product, SearchResult } from "./types.ts";
2
+ /** The subset of node:http this needs, declared structurally so the package takes no @types/node dependency. */
3
+ interface MockRequest {
4
+ url?: string | undefined;
5
+ method?: string | undefined;
6
+ on(event: "data", cb: (chunk: unknown) => void): void;
7
+ on(event: "end", cb: () => void): void;
8
+ }
9
+ interface MockResponse {
10
+ statusCode: number;
11
+ setHeader(name: string, value: string): void;
12
+ end(body?: string): void;
13
+ }
14
+ export interface ConsoleMockFixtures {
15
+ me: Me;
16
+ products: Product[];
17
+ invitations?: Invitation[] | undefined;
18
+ search?: ((query: string, team: string | null) => SearchResult[]) | undefined;
19
+ /** Seed for the console context; writes mutate it for the life of the process. */
20
+ context?: {
21
+ activeTeam?: string | null;
22
+ pinnedProducts?: string[] | null;
23
+ theme?: string;
24
+ } | undefined;
25
+ }
26
+ /**
27
+ * Returns a handler that answers the console service and reports whether it
28
+ * did, so a mock server can fall through to its own routes:
29
+ *
30
+ * ```ts
31
+ * const console = consoleMockHandler({ me: ME, products: CONSOLE_PRODUCTS });
32
+ * if (console(req, res)) return;
33
+ * ```
34
+ *
35
+ * Connect's unary JSON protocol is a plain POST of the request message to
36
+ * `/<package>.<Service>/<Method>` answering with the response message, so no
37
+ * Connect runtime is needed on this side.
38
+ */
39
+ export declare function consoleMockHandler(fx: ConsoleMockFixtures): (req: MockRequest, res: MockResponse) => boolean;
40
+ export {};
41
+ //# sourceMappingURL=devMock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devMock.d.ts","sourceRoot":"","sources":["../src/devMock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAaxE,gHAAgH;AAChH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACtD,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACxC;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;IAC9E,kFAAkF;IAClF,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACxG;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,mBAAmB,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CA0J5G"}
@@ -0,0 +1,173 @@
1
+ const PREFIX = "/xeonr.console.v1.ConsoleProductService/";
2
+ const STATUS_ENUM = {
3
+ live: "PRODUCT_STATUS_LIVE",
4
+ preview: "PRODUCT_STATUS_PREVIEW",
5
+ coming_soon: "PRODUCT_STATUS_COMING_SOON",
6
+ };
7
+ const KIND_ENUM = {
8
+ entity: "SEARCH_RESULT_KIND_ENTITY",
9
+ action: "SEARCH_RESULT_KIND_ACTION",
10
+ team: "SEARCH_RESULT_KIND_TEAM",
11
+ navigation: "SEARCH_RESULT_KIND_NAVIGATION",
12
+ };
13
+ /**
14
+ * Returns a handler that answers the console service and reports whether it
15
+ * did, so a mock server can fall through to its own routes:
16
+ *
17
+ * ```ts
18
+ * const console = consoleMockHandler({ me: ME, products: CONSOLE_PRODUCTS });
19
+ * if (console(req, res)) return;
20
+ * ```
21
+ *
22
+ * Connect's unary JSON protocol is a plain POST of the request message to
23
+ * `/<package>.<Service>/<Method>` answering with the response message, so no
24
+ * Connect runtime is needed on this side.
25
+ */
26
+ export function consoleMockHandler(fx) {
27
+ const ctx = {
28
+ activeTeam: fx.context?.activeTeam ?? fx.me.teams[0]?.id ?? "",
29
+ // Null until something is written, so the registry's pinned-by-default set
30
+ // applies — the same tri-state the real service carries.
31
+ pinnedProducts: fx.context?.pinnedProducts ?? null,
32
+ theme: fx.context?.theme ?? "system",
33
+ };
34
+ const send = (res, body) => {
35
+ res.statusCode = 200;
36
+ res.setHeader("content-type", "application/json");
37
+ res.end(JSON.stringify(body));
38
+ };
39
+ const contextMessage = () => ({
40
+ activeTeam: ctx.activeTeam,
41
+ ...(ctx.pinnedProducts === null ? {} : { pinnedProducts: { keys: ctx.pinnedProducts } }),
42
+ theme: ctx.theme,
43
+ });
44
+ const team = (t) => ({
45
+ id: t.id,
46
+ slug: t.slug,
47
+ name: t.name,
48
+ avatarUrl: t.avatarUrl ?? "",
49
+ role: t.role === "owner" ? "TEAM_ROLE_OWNER" : "TEAM_ROLE_MEMBER",
50
+ roles: t.roles,
51
+ entitled: t.entitled ?? true,
52
+ canEnable: t.canEnable ?? false,
53
+ });
54
+ return (req, res) => {
55
+ const url = (req.url ?? "").split("?")[0] ?? "";
56
+ if (!url.startsWith(PREFIX))
57
+ return false;
58
+ const method = url.slice(PREFIX.length);
59
+ const withBody = (run) => {
60
+ let raw = "";
61
+ req.on("data", (c) => {
62
+ raw += String(c);
63
+ });
64
+ req.on("end", () => {
65
+ let parsed = {};
66
+ try {
67
+ parsed = JSON.parse(raw || "{}");
68
+ }
69
+ catch {
70
+ /* an unparseable body is an empty request, same as the real one treats it */
71
+ }
72
+ run(parsed);
73
+ });
74
+ };
75
+ switch (method) {
76
+ case "GetMe":
77
+ send(res, {
78
+ subject: fx.me.subject,
79
+ displayName: fx.me.displayName,
80
+ email: fx.me.email,
81
+ avatarUrl: fx.me.avatarUrl ?? "",
82
+ teams: fx.me.teams.map(team),
83
+ teamsVersion: String(fx.me.teamsVersion),
84
+ isOrgAdmin: fx.me.isOrgAdmin,
85
+ warnings: fx.me.warnings ?? [],
86
+ });
87
+ return true;
88
+ case "ListProducts":
89
+ send(res, {
90
+ products: fx.products.map((p) => ({
91
+ key: p.key,
92
+ name: p.name,
93
+ origin: p.origin,
94
+ icon: p.icon,
95
+ colour: p.colour,
96
+ category: p.category,
97
+ blurb: p.blurb,
98
+ status: STATUS_ENUM[p.status] ?? "PRODUCT_STATUS_LIVE",
99
+ scopes: p.scopes,
100
+ pinnedByDefault: p.pinnedByDefault,
101
+ enabled: p.enabled,
102
+ canEnable: p.canEnable,
103
+ docsUrl: p.docsUrl ?? "",
104
+ supportUrl: p.supportUrl ?? "",
105
+ })),
106
+ });
107
+ return true;
108
+ case "GetContext":
109
+ send(res, { context: contextMessage() });
110
+ return true;
111
+ case "UpdateContext":
112
+ withBody((body) => {
113
+ const patch = (body["context"] ?? {});
114
+ const paths = body["paths"] ?? [];
115
+ const touched = (p) => paths.length === 0 || paths.includes(p);
116
+ if (touched("active_team"))
117
+ ctx.activeTeam = String(patch["activeTeam"] ?? "");
118
+ if (touched("pinned_products")) {
119
+ const pins = patch["pinnedProducts"];
120
+ ctx.pinnedProducts = pins ? (pins.keys ?? []) : null;
121
+ }
122
+ if (touched("theme"))
123
+ ctx.theme = String(patch["theme"] ?? "system") || "system";
124
+ send(res, { context: contextMessage() });
125
+ });
126
+ return true;
127
+ case "ListInvitations":
128
+ send(res, {
129
+ invitations: (fx.invitations ?? []).map((i) => ({
130
+ id: i.id,
131
+ team: { id: i.team.id, slug: i.team.slug, name: i.team.name, avatarUrl: i.team.avatarUrl ?? "", roles: [] },
132
+ invitedBy: i.invitedBy,
133
+ role: i.role === "owner" ? "TEAM_ROLE_OWNER" : "TEAM_ROLE_MEMBER",
134
+ expiresAt: i.expiresAt,
135
+ })),
136
+ });
137
+ return true;
138
+ case "CreateProductBinding":
139
+ withBody((body) => {
140
+ const key = String(body["product"] ?? "");
141
+ const p = fx.products.find((x) => x.key === key);
142
+ if (p)
143
+ p.enabled = true;
144
+ send(res, {});
145
+ });
146
+ return true;
147
+ case "Search":
148
+ withBody((body) => {
149
+ const hits = fx.search ? fx.search(String(body["query"] ?? ""), body["team"] || null) : [];
150
+ send(res, {
151
+ results: hits.map((h) => ({
152
+ product: h.product,
153
+ kind: KIND_ENUM[h.kind] ?? "SEARCH_RESULT_KIND_ENTITY",
154
+ title: h.title,
155
+ subtitle: h.subtitle ?? "",
156
+ href: h.href,
157
+ icon: h.icon ?? "",
158
+ internal: h.internal ?? false,
159
+ })),
160
+ });
161
+ });
162
+ return true;
163
+ default:
164
+ // An unknown method is Unimplemented rather than a 404, so the client
165
+ // reports it as the RPC failure it is.
166
+ res.statusCode = 501;
167
+ res.setHeader("content-type", "application/json");
168
+ res.end(JSON.stringify({ code: "unimplemented", message: `no mock for ${method}` }));
169
+ return true;
170
+ }
171
+ };
172
+ }
173
+ //# sourceMappingURL=devMock.js.map