/** * settings bridge — T20-b port from dsh-perm-gate (5260fe6 generalized form). * * The plugin is a pure client takeover on every host line, but its durable * data plane (the `ui-conversation` busy-Enter pin) rides the client settings * handles that are generation-exclusive: `configForms` (0.1.7+) works, * `settingsScope` (≤0.1.5) resolves to nothing (the A2 dead end), so on old * lines both the family card and the pin itself silently no-op. This bridge * gives the browser half a same-origin HTTP data plane backed by the HOST's * settings service — reads = svc.describe of our ns, writes = svc.mutate ops. * No second copy of state: the service stays the single source of truth. * Guards: POST-only, ns fixed at registration, optimistic concurrency via * expectedRevision. The 0.1.0 host settings service carries the full * describe/mutate/redactSecrets surface (lib/index.js verified), so the * oldest line needs no fallback path. * * Data consumer = client BridgeDocHandle (src/client/bridge-scope.ts) — the * T13b dual-track: native handle first (0.1.7+), this bridge underneath. * Routes derive from the ns (bridgeRoutesFor) so the URL contract cannot * drift between the two halves; the parity test pins both derivations * character-for-character. */ interface SettingsServiceLike { update?(ns: string, patch: object): Promise; describe?(o?: { redactSecrets?: boolean; }): Array<{ ns: unknown; [k: string]: unknown; }>; mutate?(ns: string, ops: Array<{ op: string; path: string[]; value?: unknown; }>, expectedRevision?: number): Promise; writable?: boolean; } /** Route pair for one settings ns — client and server must derive identically. */ export declare function bridgeRoutesFor(ns: string): { describe: string; mutate: string; }; export declare function registerSettingsBridgeRoutes(server: unknown, getSettingsSvc: () => SettingsServiceLike | undefined, ns: string): Array<() => void>; export {}; //# sourceMappingURL=bridge.d.ts.map