@braidlabs/console 0.2.0 → 0.4.0
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 +34 -10
- package/package.json +10 -4
- package/src/app/auth.d.ts +46 -0
- package/src/app/auth.js +80 -0
- package/src/app/auth.js.map +1 -0
- package/src/app/console-app.d.ts +8 -6
- package/src/app/console-app.js +91 -20
- package/src/app/console-app.js.map +1 -1
- package/src/app/main.js +25 -2
- package/src/app/main.js.map +1 -1
- package/src/app/routes.d.ts +14 -0
- package/src/app/routes.js +23 -0
- package/src/app/routes.js.map +1 -0
- package/src/index.d.ts +15 -2
- package/src/index.js +10 -2
- package/src/index.js.map +1 -1
- package/src/lib/client.d.ts +52 -1
- package/src/lib/client.js +48 -0
- package/src/lib/client.js.map +1 -1
- package/src/lib/draft.d.ts +1 -1
- package/src/lib/draft.js +2 -2
- package/src/lib/draft.js.map +1 -1
- package/src/lib/empty-state.d.ts +15 -0
- package/src/lib/empty-state.js +38 -0
- package/src/lib/empty-state.js.map +1 -0
- package/src/lib/history-panel.d.ts +19 -0
- package/src/lib/history-panel.js +85 -0
- package/src/lib/history-panel.js.map +1 -0
- package/src/lib/ownership.d.ts +15 -0
- package/src/lib/ownership.js +21 -0
- package/src/lib/ownership.js.map +1 -0
- package/src/lib/query.d.ts +47 -0
- package/src/lib/query.js +121 -0
- package/src/lib/query.js.map +1 -0
- package/src/lib/registry-console.d.ts +13 -2
- package/src/lib/registry-console.js +15 -11
- package/src/lib/registry-console.js.map +1 -1
- package/src/lib/registry-editor.js +20 -7
- package/src/lib/registry-editor.js.map +1 -1
- package/src/lib/shell-codegen.d.ts +28 -0
- package/src/lib/shell-codegen.js +316 -0
- package/src/lib/shell-codegen.js.map +1 -0
- package/src/lib/shells-panel.d.ts +43 -0
- package/src/lib/shells-panel.js +307 -0
- package/src/lib/shells-panel.js.map +1 -0
- package/src/lib/styles.d.ts +1 -1
- package/src/lib/styles.js +72 -4
- package/src/lib/styles.js.map +1 -1
- package/src/lib/tag-chip.d.ts +8 -0
- package/src/lib/tag-chip.js +12 -0
- package/src/lib/tag-chip.js.map +1 -0
- package/src/lib/tags.d.ts +10 -0
- package/src/lib/tags.js +53 -0
- package/src/lib/tags.js.map +1 -0
- package/src/lib/topology-graph.d.ts +5 -2
- package/src/lib/topology-graph.js +17 -8
- package/src/lib/topology-graph.js.map +1 -1
- package/src/lib/topology.d.ts +18 -3
- package/src/lib/topology.js +42 -3
- package/src/lib/topology.js.map +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A tag, colored by {@link tagClass}. With `onSelect` it is a button — clicking a tag filters by
|
|
3
|
+
* it — and otherwise plain text, so a list of tags never becomes a row of dead controls.
|
|
4
|
+
*/
|
|
5
|
+
export declare function TagChip({ tag, onSelect }: {
|
|
6
|
+
tag: string;
|
|
7
|
+
onSelect?: (tag: string) => void;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { tagClass } from './tags.js';
|
|
3
|
+
/**
|
|
4
|
+
* A tag, colored by {@link tagClass}. With `onSelect` it is a button — clicking a tag filters by
|
|
5
|
+
* it — and otherwise plain text, so a list of tags never becomes a row of dead controls.
|
|
6
|
+
*/
|
|
7
|
+
export function TagChip({ tag, onSelect }) {
|
|
8
|
+
if (!onSelect)
|
|
9
|
+
return _jsx("span", { className: tagClass(tag), children: tag });
|
|
10
|
+
return (_jsx("button", { type: "button", className: `${tagClass(tag)} braid-console__tagbutton`, onClick: () => onSelect(tag), "aria-label": `Filter by tag ${tag}`, children: tag }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=tag-chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-chip.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/tag-chip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAqD;IAC1F,IAAI,CAAC,QAAQ;QAAE,OAAO,eAAM,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAG,GAAG,GAAQ,CAAC;IACnE,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAc,iBAAiB,GAAG,EAAE,YAC3I,GAAG,GACG,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const TAG_COLOR_COUNT: number;
|
|
2
|
+
/** The palette slot for a tag: FNV-1a over its lowercased text, so `Finance` and `finance` agree. */
|
|
3
|
+
export declare function tagColor(tag: string): number;
|
|
4
|
+
/** The class that colors a tag chip. */
|
|
5
|
+
export declare function tagClass(tag: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Per-slot custom properties, in the three places the console decides its theme: the light
|
|
8
|
+
* default, the OS dark preference, and an explicit `data-theme` that wins in both directions.
|
|
9
|
+
*/
|
|
10
|
+
export declare const TAG_STYLES: string;
|
package/src/lib/tags.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tag colors: the same tag is the same color everywhere — table, graph, designer, search.
|
|
3
|
+
*
|
|
4
|
+
* Derived from the tag text rather than assigned, so there is nothing to store or keep in sync and
|
|
5
|
+
* two consoles pointed at one registry agree. The cost is that two tags can share a color; every
|
|
6
|
+
* chip carries its text, so color is a grouping cue and never the only way to tell tags apart.
|
|
7
|
+
*
|
|
8
|
+
* Each pair clears 4.5:1 text contrast in both themes (lowest: teal on light, 5.97:1).
|
|
9
|
+
*/
|
|
10
|
+
const PALETTE = [
|
|
11
|
+
{ name: 'blue', light: ['#0f548c', '#e8f1fb'], dark: ['#8bc1f7', '#102b46'] },
|
|
12
|
+
{ name: 'teal', light: ['#00666d', '#e3f5f5'], dark: ['#6fd1d6', '#0b3134'] },
|
|
13
|
+
{ name: 'orange', light: ['#8a3707', '#fdefe6'], dark: ['#f7a76b', '#3d2210'] },
|
|
14
|
+
{ name: 'purple', light: ['#5c2e91', '#f2ecf9'], dark: ['#c5a6ef', '#2c1f40'] },
|
|
15
|
+
{ name: 'pink', light: ['#9b1d5f', '#fbedf4'], dark: ['#f08fc3', '#3d1a2c'] },
|
|
16
|
+
{ name: 'green', light: ['#0e5c0e', '#e7f5e7'], dark: ['#8fd58f', '#15301a'] },
|
|
17
|
+
{ name: 'olive', light: ['#5c5300', '#f6f3d8'], dark: ['#d8cc6a', '#2f2b0a'] },
|
|
18
|
+
{ name: 'slate', light: ['#3b4a5c', '#eaeef3'], dark: ['#b5c3d4', '#232b35'] },
|
|
19
|
+
];
|
|
20
|
+
export const TAG_COLOR_COUNT = PALETTE.length;
|
|
21
|
+
/** The palette slot for a tag: FNV-1a over its lowercased text, so `Finance` and `finance` agree. */
|
|
22
|
+
export function tagColor(tag) {
|
|
23
|
+
let hash = 0x811c9dc5;
|
|
24
|
+
for (const char of tag.toLowerCase()) {
|
|
25
|
+
hash ^= char.codePointAt(0) ?? 0;
|
|
26
|
+
hash = Math.imul(hash, 0x01000193);
|
|
27
|
+
}
|
|
28
|
+
return (hash >>> 0) % PALETTE.length;
|
|
29
|
+
}
|
|
30
|
+
/** The class that colors a tag chip. */
|
|
31
|
+
export function tagClass(tag) {
|
|
32
|
+
return `braid-console__tag braid-console__tag--c${tagColor(tag)}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Per-slot custom properties, in the three places the console decides its theme: the light
|
|
36
|
+
* default, the OS dark preference, and an explicit `data-theme` that wins in both directions.
|
|
37
|
+
*/
|
|
38
|
+
export const TAG_STYLES = (() => {
|
|
39
|
+
const rules = (scheme, scope) => PALETTE.map(({ [scheme]: [fg, bg] }, index) => `${scope} .braid-console__tag--c${index} { --bc-tag-fg: ${fg}; --bc-tag-bg: ${bg}; }`).join('\n');
|
|
40
|
+
return `
|
|
41
|
+
/* --- tags --------------------------------------------------------------- */
|
|
42
|
+
.braid-console__tag[class*='braid-console__tag--c'] { color: var(--bc-tag-fg); background: var(--bc-tag-bg); border-color: transparent; }
|
|
43
|
+
.braid-console__tagbutton { font: inherit; cursor: pointer; }
|
|
44
|
+
.braid-console__tagbutton:focus-visible { outline: 2px solid var(--bc-accent); outline-offset: 1px; }
|
|
45
|
+
${rules('light', '.braid-console')}
|
|
46
|
+
@media (prefers-color-scheme: dark) {
|
|
47
|
+
${rules('dark', '.braid-console')}
|
|
48
|
+
}
|
|
49
|
+
${rules('light', ".braid-console[data-theme='light']")}
|
|
50
|
+
${rules('dark', ".braid-console[data-theme='dark']")}
|
|
51
|
+
`;
|
|
52
|
+
})();
|
|
53
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAiF;IAC5F,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC/E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC/E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;CAC/E,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;AAE9C,qGAAqG;AACrG,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,2CAA2C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IAC9B,MAAM,KAAK,GAAG,CAAC,MAAwB,EAAE,KAAa,EAAE,EAAE,CACxD,OAAO,CAAC,GAAG,CACT,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,0BAA0B,KAAK,mBAAmB,EAAE,kBAAkB,EAAE,KAAK,CACzH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEf,OAAO;;;;;EAKP,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC;;EAEhC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC;;EAE/B,KAAK,CAAC,OAAO,EAAE,oCAAoC,CAAC;EACpD,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC;CACnD,CAAC;AACF,CAAC,CAAC,EAAE,CAAC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import type { DiscoveryEntry } from '@braidlabs/gateway';
|
|
2
|
+
import type { ShellManifest } from '@braidlabs/registry';
|
|
2
3
|
import { type Topology, type TopologyNode } from './topology.js';
|
|
3
4
|
export interface TopologyGraphProps {
|
|
4
5
|
entries: readonly DiscoveryEntry[];
|
|
6
|
+
/** Adds a shells column on the left, with the routes they host and the fragments they slot. */
|
|
7
|
+
shells?: readonly ShellManifest[];
|
|
5
8
|
/** Notified when the selection changes, so a host can drive its own detail pane. */
|
|
6
9
|
onSelect?: (entry: DiscoveryEntry | null) => void;
|
|
7
10
|
/** Asked to show the embed snippet for a fragment. */
|
|
8
11
|
onEmbed?: (entry: DiscoveryEntry) => void;
|
|
9
12
|
}
|
|
10
13
|
/**
|
|
11
|
-
* The composition topology, drawn as
|
|
14
|
+
* The composition topology, drawn as columns: (shells →) routes → fragments → origins.
|
|
12
15
|
*
|
|
13
16
|
* **Laid out, not simulated.** A force-directed graph looks impressive and answers no question: it
|
|
14
17
|
* settles somewhere different every load, so an operator cannot learn its shape, point at it in a
|
|
@@ -19,7 +22,7 @@ export interface TopologyGraphProps {
|
|
|
19
22
|
* Rendered as inline SVG with the console's own custom properties, so it themes with everything
|
|
20
23
|
* else and needs no canvas, no measurement pass, and no resize observer.
|
|
21
24
|
*/
|
|
22
|
-
export declare function TopologyGraph({ entries, onSelect, onEmbed }: TopologyGraphProps): import("react").JSX.Element;
|
|
25
|
+
export declare function TopologyGraph({ entries, shells, onSelect, onEmbed }: TopologyGraphProps): import("react").JSX.Element;
|
|
23
26
|
interface PlacedNode {
|
|
24
27
|
node: TopologyNode;
|
|
25
28
|
x: number;
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useMemo, useState } from 'react';
|
|
3
3
|
import { buildTopology, coTenants, edgeKey, neighborhood, } from './topology.js';
|
|
4
4
|
/**
|
|
5
|
-
* The composition topology, drawn as
|
|
5
|
+
* The composition topology, drawn as columns: (shells →) routes → fragments → origins.
|
|
6
6
|
*
|
|
7
7
|
* **Laid out, not simulated.** A force-directed graph looks impressive and answers no question: it
|
|
8
8
|
* settles somewhere different every load, so an operator cannot learn its shape, point at it in a
|
|
@@ -13,8 +13,8 @@ import { buildTopology, coTenants, edgeKey, neighborhood, } from './topology.js'
|
|
|
13
13
|
* Rendered as inline SVG with the console's own custom properties, so it themes with everything
|
|
14
14
|
* else and needs no canvas, no measurement pass, and no resize observer.
|
|
15
15
|
*/
|
|
16
|
-
export function TopologyGraph({ entries, onSelect, onEmbed }) {
|
|
17
|
-
const topology = useMemo(() => buildTopology(entries), [entries]);
|
|
16
|
+
export function TopologyGraph({ entries, shells, onSelect, onEmbed }) {
|
|
17
|
+
const topology = useMemo(() => buildTopology(entries, shells ? { shells } : {}), [entries, shells]);
|
|
18
18
|
const [selected, setSelected] = useState(null);
|
|
19
19
|
const [hovered, setHovered] = useState(null);
|
|
20
20
|
const active = hovered ?? selected;
|
|
@@ -30,7 +30,7 @@ export function TopologyGraph({ entries, onSelect, onEmbed }) {
|
|
|
30
30
|
return _jsx("p", { className: "braid-console__empty", children: "Nothing is registered, so there is no topology to draw." });
|
|
31
31
|
}
|
|
32
32
|
const selectedNode = topology.nodes.find((node) => node.id === selected) ?? null;
|
|
33
|
-
return (_jsxs("div", { className: "braid-console__graphwrap", children: [_jsxs("div", { className: "braid-console__graphmain", children: [
|
|
33
|
+
return (_jsxs("div", { className: "braid-console__graphwrap", children: [_jsxs("div", { className: "braid-console__graphmain", children: [_jsx("div", { className: "braid-console__collabels", "aria-hidden": "true", children: columnLabels(topology).map((text, index) => (_jsx("span", { style: { left: `${((index * (NODE_W + COL_GAP)) / layout.width) * 100}%`, width: `${(NODE_W / layout.width) * 100}%` }, children: text }, text))) }), _jsxs("svg", { className: "braid-console__graph", viewBox: `0 0 ${layout.width} ${layout.height}`, role: "group", "aria-label": "Composition topology: routes, the fragments they compose, and the origins serving them", style: { height: `${layout.height}px` }, children: [_jsx("g", { className: "braid-console__edges", children: layout.edges.map((edge) => (_jsx("path", { d: edge.d, className: `braid-console__edge braid-console__edge--${edge.kind}${active ? (lit.edges.has(edge.key) ? ' is-lit' : ' is-dim') : ''}` }, edge.key))) }), layout.nodes.map((placed) => {
|
|
34
34
|
const dimmed = active && !lit.nodes.has(placed.node.id);
|
|
35
35
|
return (_jsxs("g", { className: `braid-console__node braid-console__node--${placed.node.kind}${dimmed ? ' is-dim' : ''}${placed.node.id === selected ? ' is-selected' : ''}${placed.node.shared ? ' is-shared' : ''}`, transform: `translate(${placed.x}, ${placed.y})`, tabIndex: 0, role: "button", "aria-pressed": placed.node.id === selected, "aria-label": describe(placed.node, topology), onMouseEnter: () => setHovered(placed.node.id), onMouseLeave: () => setHovered(null), onFocus: () => setHovered(placed.node.id), onBlur: () => setHovered(null), onClick: () => select(placed.node), onKeyDown: (event) => {
|
|
36
36
|
if (event.key !== 'Enter' && event.key !== ' ')
|
|
@@ -48,7 +48,7 @@ function TopologyDetail({ node, topology, onClear, onEmbed, }) {
|
|
|
48
48
|
const connected = topology.edges
|
|
49
49
|
.filter((edge) => edge.from === node.id || edge.to === node.id)
|
|
50
50
|
.map((edge) => (edge.from === node.id ? edge.to : edge.from));
|
|
51
|
-
return (_jsxs("aside", { className: "braid-console__detail", children: [_jsxs("div", { className: "braid-console__detailhead", children: [_jsx("span", { className: `braid-console__kind braid-console__kind--${node.kind}`, children: node.kind }), _jsx("button", { type: "button", className: "braid-console__detailclose", onClick: onClear, "aria-label": "Clear selection", children: "\u2715" })] }), _jsx("h3", { className: "braid-console__detailtitle", children: node.label }), node.entry && (_jsxs(_Fragment, { children: [node.entry.title !== node.entry.id && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.title }), node.entry.description && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.description }), _jsxs("dl", { className: "braid-console__props", children: [_jsx("dt", { children: "Adapter" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.adapter }), _jsx("dt", { children: "Mount" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.mount }), node.entry.contractVersion && (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Contract" }), _jsxs("dd", { className: "braid-console__mono", children: ["v", node.entry.contractVersion] })] })), _jsx("dt", { children: "Access" }), _jsx("dd", { children: _jsx("span", { className: `braid-console__badge braid-console__badge--${node.entry.loadable ? 'loadable' : 'gated'}`, children: node.entry.loadable ? 'loadable' : 'gated' }) })] })] })), node.kind === 'fragment' && node.entry && onEmbed && (_jsx("div", { className: "braid-console__detailsection", children: _jsx("button", { type: "button", className: "braid-console__ghost", onClick: () => onEmbed(node.entry), children: "Embed this fragment" }) })), node.kind === 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: "Shares a page with" }), peers.length === 0 ? (_jsx("p", { className: "braid-console__detaildesc", children: "Nothing. This fragment is alone on every route it pierces." })) : (_jsx("ul", { className: "braid-console__peerlist", children: peers.map((peer) => (_jsx("li", { className: "braid-console__mono", children: label(topology, peer) }, peer))) }))] })), node.kind !== 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: node.kind === 'route' ? 'Composes' : 'Serves' }), _jsx("ul", { className: "braid-console__peerlist", children: connected.map((id) => (_jsx("li", { className: "braid-console__mono", children: label(topology, id) }, id))) }), node.kind === 'route' && node.shared && (_jsx("p", { className: "braid-console__detailwarn", children: "More than one fragment pierces this pattern. Intentional when the page composes both; a mistake when one pattern is wider than intended." }))] }))] }));
|
|
51
|
+
return (_jsxs("aside", { className: "braid-console__detail", children: [_jsxs("div", { className: "braid-console__detailhead", children: [_jsx("span", { className: `braid-console__kind braid-console__kind--${node.kind}`, children: node.kind }), _jsx("button", { type: "button", className: "braid-console__detailclose", onClick: onClear, "aria-label": "Clear selection", children: "\u2715" })] }), _jsx("h3", { className: "braid-console__detailtitle", children: node.label }), node.entry && (_jsxs(_Fragment, { children: [node.entry.title !== node.entry.id && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.title }), node.entry.description && _jsx("p", { className: "braid-console__detaildesc", children: node.entry.description }), _jsxs("dl", { className: "braid-console__props", children: [_jsx("dt", { children: "Adapter" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.adapter }), _jsx("dt", { children: "Mount" }), _jsx("dd", { className: "braid-console__mono", children: node.entry.mount }), node.entry.contractVersion && (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Contract" }), _jsxs("dd", { className: "braid-console__mono", children: ["v", node.entry.contractVersion] })] })), _jsx("dt", { children: "Access" }), _jsx("dd", { children: _jsx("span", { className: `braid-console__badge braid-console__badge--${node.entry.loadable ? 'loadable' : 'gated'}`, children: node.entry.loadable ? 'loadable' : 'gated' }) })] })] })), node.kind === 'fragment' && node.entry && onEmbed && (_jsx("div", { className: "braid-console__detailsection", children: _jsx("button", { type: "button", className: "braid-console__ghost", onClick: () => onEmbed(node.entry), children: "Embed this fragment" }) })), node.kind === 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: "Shares a page with" }), peers.length === 0 ? (_jsx("p", { className: "braid-console__detaildesc", children: "Nothing. This fragment is alone on every route it pierces." })) : (_jsx("ul", { className: "braid-console__peerlist", children: peers.map((peer) => (_jsx("li", { className: "braid-console__mono", children: label(topology, peer) }, peer))) }))] })), node.kind !== 'fragment' && (_jsxs("div", { className: "braid-console__detailsection", children: [_jsx("h4", { children: node.kind === 'shell' ? 'Hosts' : node.kind === 'route' ? 'Composes' : 'Serves' }), _jsx("ul", { className: "braid-console__peerlist", children: connected.map((id) => (_jsx("li", { className: "braid-console__mono", children: label(topology, id) }, id))) }), node.kind === 'route' && node.shared && (_jsx("p", { className: "braid-console__detailwarn", children: "More than one fragment pierces this pattern. Intentional when the page composes both; a mistake when one pattern is wider than intended." }))] }))] }));
|
|
52
52
|
}
|
|
53
53
|
// ---------------------------------------------------------------------------
|
|
54
54
|
// Layout
|
|
@@ -67,9 +67,12 @@ const PAD = 8;
|
|
|
67
67
|
* without implying direction the way an arrowhead would.
|
|
68
68
|
*/
|
|
69
69
|
export function layoutTopology(topology) {
|
|
70
|
-
const columns =
|
|
71
|
-
? [topology.
|
|
72
|
-
|
|
70
|
+
const columns = [
|
|
71
|
+
...(topology.shells?.length ? [topology.shells] : []),
|
|
72
|
+
topology.routes,
|
|
73
|
+
topology.fragments,
|
|
74
|
+
...(topology.originsUnknown ? [] : [topology.origins]),
|
|
75
|
+
];
|
|
73
76
|
const tallest = Math.max(1, ...columns.map((column) => column.length));
|
|
74
77
|
const height = PAD * 2 + tallest * NODE_H + (tallest - 1) * ROW_GAP;
|
|
75
78
|
const width = columns.length * NODE_W + (columns.length - 1) * COL_GAP;
|
|
@@ -104,6 +107,9 @@ export function layoutTopology(topology) {
|
|
|
104
107
|
}
|
|
105
108
|
return { nodes: placed, edges, width, height };
|
|
106
109
|
}
|
|
110
|
+
function columnLabels(topology) {
|
|
111
|
+
return [...(topology.shells?.length ? ['Shells'] : []), 'Routes', 'Fragments', ...(topology.originsUnknown ? [] : ['Origins'])];
|
|
112
|
+
}
|
|
107
113
|
function describe(node, topology) {
|
|
108
114
|
if (node.kind === 'fragment') {
|
|
109
115
|
const peers = coTenants(topology, node.id).length;
|
|
@@ -112,6 +118,9 @@ function describe(node, topology) {
|
|
|
112
118
|
if (node.kind === 'route') {
|
|
113
119
|
return `Route ${node.label}, composes ${node.degree} fragment${node.degree === 1 ? '' : 's'}`;
|
|
114
120
|
}
|
|
121
|
+
if (node.kind === 'shell') {
|
|
122
|
+
return `Shell ${node.label}, hosts ${node.degree} route${node.degree === 1 ? '' : 's'}`;
|
|
123
|
+
}
|
|
115
124
|
return `Origin ${node.label}, serves ${node.degree} fragment${node.degree === 1 ? '' : 's'}`;
|
|
116
125
|
}
|
|
117
126
|
function label(topology, nodeId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topology-graph.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology-graph.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"topology-graph.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology-graph.tsx"],"names":[],"mappings":"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"}
|
package/src/lib/topology.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DiscoveryEntry } from '@braidlabs/gateway';
|
|
2
|
+
import type { ShellManifest } from '@braidlabs/registry';
|
|
2
3
|
/**
|
|
3
4
|
* The composition topology of a gateway, derived from a discovery listing.
|
|
4
5
|
*
|
|
@@ -18,7 +19,7 @@ import type { DiscoveryEntry } from '@braidlabs/gateway';
|
|
|
18
19
|
* Everything is derived from `DiscoveryEntry` alone: no new gateway endpoint, and a production
|
|
19
20
|
* listing that withholds endpoints simply yields a graph without the origin column.
|
|
20
21
|
*/
|
|
21
|
-
export type TopologyNodeKind = 'route' | 'fragment' | 'origin';
|
|
22
|
+
export type TopologyNodeKind = 'shell' | 'route' | 'fragment' | 'origin';
|
|
22
23
|
export interface TopologyNode {
|
|
23
24
|
/** Unique within the graph. Prefixed by kind, since a route and an origin can read alike. */
|
|
24
25
|
id: string;
|
|
@@ -26,6 +27,8 @@ export interface TopologyNode {
|
|
|
26
27
|
label: string;
|
|
27
28
|
/** Fragment nodes only: the entry this came from, for the detail panel. */
|
|
28
29
|
entry?: DiscoveryEntry;
|
|
30
|
+
/** Shell nodes only: the shell this came from. */
|
|
31
|
+
shell?: ShellManifest;
|
|
29
32
|
/** How many fragments a route or origin touches. Drives the count badge. */
|
|
30
33
|
degree: number;
|
|
31
34
|
/**
|
|
@@ -39,11 +42,20 @@ export interface TopologyNode {
|
|
|
39
42
|
export interface TopologyEdge {
|
|
40
43
|
from: string;
|
|
41
44
|
to: string;
|
|
42
|
-
|
|
45
|
+
/**
|
|
46
|
+
* `composes`: a route pierces a fragment (gateway routing). `served-by`: a fragment's origin.
|
|
47
|
+
* `hosts`: a shell declares a route. `slots`: a shell's layout places a fragment on that route.
|
|
48
|
+
*/
|
|
49
|
+
kind: 'composes' | 'served-by' | 'hosts' | 'slots';
|
|
43
50
|
}
|
|
44
51
|
export interface Topology {
|
|
45
52
|
nodes: TopologyNode[];
|
|
46
53
|
edges: TopologyEdge[];
|
|
54
|
+
/**
|
|
55
|
+
* Empty unless shells were given. Optional so a `Topology` built by hand, or by an earlier
|
|
56
|
+
* version, still lays out.
|
|
57
|
+
*/
|
|
58
|
+
shells?: TopologyNode[];
|
|
47
59
|
routes: TopologyNode[];
|
|
48
60
|
fragments: TopologyNode[];
|
|
49
61
|
origins: TopologyNode[];
|
|
@@ -59,6 +71,7 @@ export interface Topology {
|
|
|
59
71
|
/** True when the listing withheld endpoints, so the origin column is unavailable rather than empty. */
|
|
60
72
|
originsUnknown: boolean;
|
|
61
73
|
}
|
|
74
|
+
export declare const SHELL_PREFIX = "shell:";
|
|
62
75
|
export declare const ROUTE_PREFIX = "route:";
|
|
63
76
|
export declare const FRAGMENT_PREFIX = "fragment:";
|
|
64
77
|
export declare const ORIGIN_PREFIX = "origin:";
|
|
@@ -69,7 +82,9 @@ export declare const ORIGIN_PREFIX = "origin:";
|
|
|
69
82
|
* are what an operator is looking for) and then by name, so a reload does not reshuffle the
|
|
70
83
|
* picture under someone reading it.
|
|
71
84
|
*/
|
|
72
|
-
export declare function buildTopology(entries: readonly DiscoveryEntry[]
|
|
85
|
+
export declare function buildTopology(entries: readonly DiscoveryEntry[], options?: {
|
|
86
|
+
shells?: readonly ShellManifest[];
|
|
87
|
+
}): Topology;
|
|
73
88
|
/**
|
|
74
89
|
* Everything reachable from one node, as a set of node and edge ids.
|
|
75
90
|
*
|
package/src/lib/topology.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export const SHELL_PREFIX = 'shell:';
|
|
1
2
|
export const ROUTE_PREFIX = 'route:';
|
|
2
3
|
export const FRAGMENT_PREFIX = 'fragment:';
|
|
3
4
|
export const ORIGIN_PREFIX = 'origin:';
|
|
@@ -8,7 +9,7 @@ export const ORIGIN_PREFIX = 'origin:';
|
|
|
8
9
|
* are what an operator is looking for) and then by name, so a reload does not reshuffle the
|
|
9
10
|
* picture under someone reading it.
|
|
10
11
|
*/
|
|
11
|
-
export function buildTopology(entries) {
|
|
12
|
+
export function buildTopology(entries, options = {}) {
|
|
12
13
|
const routes = new Map();
|
|
13
14
|
const origins = new Map();
|
|
14
15
|
const fragments = [];
|
|
@@ -32,6 +33,32 @@ export function buildTopology(entries) {
|
|
|
32
33
|
edges.push({ from: fragmentId, to: originId, kind: 'served-by' });
|
|
33
34
|
}
|
|
34
35
|
}
|
|
36
|
+
// Shells add the layer above routes. A shell's route and a pierce pattern written identically
|
|
37
|
+
// are one node, which is what lets the map show a slotted fragment and its routing side by side.
|
|
38
|
+
// `slots` is drawn only where routing does not already connect the pair.
|
|
39
|
+
const shells = [];
|
|
40
|
+
const known = new Set(fragments.map((fragment) => fragment.id));
|
|
41
|
+
for (const shell of options.shells ?? []) {
|
|
42
|
+
const shellId = `${SHELL_PREFIX}${shell.id}`;
|
|
43
|
+
shells.push({ id: shellId, kind: 'shell', label: shell.id, shell, degree: shell.routes.length });
|
|
44
|
+
for (const route of shell.routes) {
|
|
45
|
+
const routeId = `${ROUTE_PREFIX}${route.path}`;
|
|
46
|
+
if (!routes.has(routeId))
|
|
47
|
+
routes.set(routeId, { id: routeId, kind: 'route', label: route.path, degree: 0 });
|
|
48
|
+
edges.push({ from: shellId, to: routeId, kind: 'hosts' });
|
|
49
|
+
for (const fragment of new Set(Object.values(route.slots ?? {}))) {
|
|
50
|
+
const fragmentId = `${FRAGMENT_PREFIX}${fragment}`;
|
|
51
|
+
if (!known.has(fragmentId))
|
|
52
|
+
continue;
|
|
53
|
+
if (edges.some((edge) => edge.from === routeId && edge.to === fragmentId))
|
|
54
|
+
continue;
|
|
55
|
+
edges.push({ from: routeId, to: fragmentId, kind: 'slots' });
|
|
56
|
+
const node = routes.get(routeId);
|
|
57
|
+
if (node)
|
|
58
|
+
node.degree += 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
35
62
|
for (const route of routes.values())
|
|
36
63
|
route.shared = route.degree > 1;
|
|
37
64
|
const routeList = [...routes.values()].sort(byDegreeThenLabel);
|
|
@@ -40,10 +67,13 @@ export function buildTopology(entries) {
|
|
|
40
67
|
for (const fragment of fragmentList) {
|
|
41
68
|
fragment.degree = edges.filter((edge) => edge.to === fragment.id || edge.from === fragment.id).length;
|
|
42
69
|
}
|
|
43
|
-
|
|
70
|
+
// A shell slotting a widget places it as surely as a pierce pattern does, so it is not unrouted.
|
|
71
|
+
const routed = new Set(edges.filter((edge) => edge.kind === 'composes' || edge.kind === 'slots').map((edge) => edge.to));
|
|
72
|
+
const shellList = shells.sort((a, b) => a.label.localeCompare(b.label));
|
|
44
73
|
return {
|
|
45
|
-
nodes: [...routeList, ...fragmentList, ...originList],
|
|
74
|
+
nodes: [...shellList, ...routeList, ...fragmentList, ...originList],
|
|
46
75
|
edges,
|
|
76
|
+
shells: shellList,
|
|
47
77
|
routes: routeList,
|
|
48
78
|
fragments: fragmentList,
|
|
49
79
|
origins: originList,
|
|
@@ -83,6 +113,15 @@ export function neighborhood(topology, nodeId) {
|
|
|
83
113
|
nodes.add(edge.to);
|
|
84
114
|
}
|
|
85
115
|
}
|
|
116
|
+
// From a shell, reach what it composes: its routes' fragments, however they arrive.
|
|
117
|
+
if (nodeId.startsWith(SHELL_PREFIX)) {
|
|
118
|
+
for (const edge of topology.edges) {
|
|
119
|
+
if ((edge.kind !== 'composes' && edge.kind !== 'slots') || !nodes.has(edge.from))
|
|
120
|
+
continue;
|
|
121
|
+
edges.add(edgeKey(edge));
|
|
122
|
+
nodes.add(edge.to);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
86
125
|
return { nodes, edges };
|
|
87
126
|
}
|
|
88
127
|
export function edgeKey(edge) {
|
package/src/lib/topology.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/topology.ts"],"names":[],"mappings":"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"}
|