import type { Graph, NodeCategory, SignalKind } from "./graph.js"; import type { SignalSpec } from "./signal.js"; import { type TerminalPreview } from "../render/terminalPreview.js"; export declare const FEDERATED_GRAPH_KIND = "rgui-federated-graph"; export declare const FEDERATED_GRAPH_SCHEMA = "org.rgui.graph.v1"; export interface FederatedProducer { app: string; origin: string; deviceId?: string; peerId?: string; workspace?: string; label?: string; } export interface FederatedPort { id: string; label?: string; kind: SignalKind; signal?: Partial; } export interface FederatedNode { /** Globally namespaced id, e.g. "otoji://room/browser/plaintext". */ id: string; app: string; type: string; title: string; category?: NodeCategory; inputs?: FederatedPort[]; outputs?: FederatedPort[]; pos?: { x: number; y: number; z?: number; }; size?: { w: number; h?: number; scale?: number; }; owner?: string; status?: string; parent?: string; renderHints?: Record; configPublic?: Record; private?: boolean; } export interface FederatedEdge { id?: string; source: { node: string; port: string; type?: SignalKind; }; target: { node: string; port: string; type?: SignalKind; }; signal?: Partial; status?: "active" | "proposed" | "readonly" | "blocked" | (string & {}); label?: string; } export interface FederatedGraphEnvelope { kind: typeof FEDERATED_GRAPH_KIND; schema: typeof FEDERATED_GRAPH_SCHEMA; producer: FederatedProducer; revision: string | number; ts: number; graph: { nodes: FederatedNode[]; edges: FederatedEdge[]; }; capabilities?: { nodeTypes?: string[]; portTypes?: SignalKind[]; previewKinds?: string[]; }; view?: { x: number; y: number; k: number; }; } export interface FederationClampOptions { maxNodes?: number; maxEdges?: number; maxTextLength?: number; maxCoord?: number; maxSize?: number; minSize?: number; } export declare const FEDERATED_DEMO_CHAIN_IDS: { readonly plain: string; readonly codex: string; readonly diff: string; readonly filter: string; readonly translate: string; readonly tts: string; }; export declare function federatedNodeId(namespace: string, localId: string): string; export declare function federatedOriginOf(nodeId: string): string; /** * Extract and sanitize a node's terminal preview (`renderHints.preview` with * `kind: "terminal"`). Lines are capped in count and length so a remote feed * can't stuff megabytes of scrollback into a render hint. */ export declare function federatedTerminalPreview(n: Pick, opts?: { maxLines?: number; maxTextLength?: number; }): TerminalPreview | undefined; /** * Extract a federated node's live-embed URL (`renderHints.embed.url`) — the * publisher's own single-node live view, meant to be glued over the node rect * as a sandboxed iframe overlay. Only http(s) URLs pass; anything else * (javascript:, data:) from an untrusted feed is dropped, as is the hint on * `private` nodes. */ export declare function federatedEmbedUrl(n: Pick): string | undefined; export declare function isFederatedGraphEnvelope(value: unknown): value is FederatedGraphEnvelope; export declare function clampFederatedGraph(env: FederatedGraphEnvelope, opts?: FederationClampOptions): FederatedGraphEnvelope; export declare function federatedGraphToRgui(env: FederatedGraphEnvelope, opts?: { container?: boolean; offset?: { x: number; y: number; }; }): Graph; export declare function federatedDemoChain(now?: number): FederatedGraphEnvelope; export declare function federatedDemoChainGraph(): Graph; //# sourceMappingURL=federation.d.ts.map