@openparachute/surface-client
Advanced tools
| /** | ||
| * Live-list — a framework-light reconciler over `VaultClient.subscribe()`. | ||
| * | ||
| * `VaultClient.subscribe()` is the raw transport: it hands you a `snapshot` | ||
| * (the complete matching set) followed by `upsert` / `remove` deltas, plus a | ||
| * lifecycle status. Every surface that wants a *live note list* then has to | ||
| * hand-roll the same reconciliation: keep an ordered array, replace-in-place | ||
| * on upsert, drop on remove, replace-wholesale on the next snapshot, and map | ||
| * the transport status onto a UI-facing "is this live?" state. | ||
| * | ||
| * notes-ui did exactly this, coupled to TanStack Query (`live-query.ts`). | ||
| * This module extracts the reconciliation core with **zero framework | ||
| * dependency** — no React, no react-query — so any surface (vanilla, | ||
| * React via `useSyncExternalStore`, signals, Svelte stores, …) can consume | ||
| * the same well-tested logic. notes-ui now delegates to this core and keeps | ||
| * only its react-query binding on top. | ||
| * | ||
| * ## Shape | ||
| * | ||
| * {@link createLiveList} opens a subscription and returns a small store: | ||
| * | ||
| * - `getList()` — the current ordered `Note[]` (a stable reference between | ||
| * changes; a fresh array on every reconciled change so identity-based | ||
| * memoization works). | ||
| * - `getState()` — `{ status, list, thinking }` snapshot. | ||
| * - `subscribe(listener)` — register for change notifications; returns an | ||
| * unsubscribe. The signature is `useSyncExternalStore`-compatible | ||
| * (`(onStoreChange) => () => void`). | ||
| * - `close()` — tear down the subscription (idempotent). | ||
| * | ||
| * ## Status | ||
| * | ||
| * The transport's four-state lifecycle (`connecting` / `open` / | ||
| * `reconnecting` / `closed`) is surfaced verbatim as {@link LiveListStatus}, | ||
| * except `open` is renamed `live` — the consumer-facing word. A list is | ||
| * "live" only while the stream is open; in every other state the consumer | ||
| * should treat the list as a best-effort cache (e.g. keep polling) — the | ||
| * last good list is retained, never cleared, across reconnects and closes. | ||
| * | ||
| * ## Reconciliation (identical to notes-ui's prior contract) | ||
| * | ||
| * - `snapshot` REPLACES the list wholesale (vault re-delivers a fresh | ||
| * snapshot on every reconnect — self-correcting; anything missed while | ||
| * disconnected is reconciled in one shot). | ||
| * - `upsert` replaces the row with the same `id` IN PLACE, or prepends it | ||
| * if new. We do not re-sort on a single upsert — vault's snapshot is the | ||
| * ordering authority; an in-place update keeps an already-rendered row | ||
| * from jumping while the user reads it, and the next snapshot re-aligns. | ||
| * - `remove` drops the row by `id`; idempotent. | ||
| * - A transient transport error changes NOTHING — the last list stays put. | ||
| * | ||
| * ## The "thinking" / live-activity indicator | ||
| * | ||
| * Agentic surfaces stream a note that's mid-generation with | ||
| * `metadata.status: "thinking"` (vault's agent-thread convention), flipping | ||
| * it to a terminal status when done. {@link LiveListState.thinking} is true | ||
| * whenever any note in the current list is in such an in-progress status — | ||
| * the data signal behind a "thinking…" / typing indicator. The set of | ||
| * in-progress statuses is configurable ({@link CreateLiveListOptions.thinkingStatuses}). | ||
| */ | ||
| import type { SubscribeOptions, SubscribeStatus } from "./subscribe.js"; | ||
| import type { Note } from "./vault-types.js"; | ||
| /** | ||
| * Minimal slice of `VaultClient` the live-list needs — just `subscribe`. | ||
| * Typing the dependency as this structural interface (rather than the | ||
| * concrete class) keeps the core trivially testable with a fake and avoids | ||
| * a hard import cycle with the heavy client module. | ||
| */ | ||
| export interface LiveListClient { | ||
| subscribe(query: unknown, handlers: { | ||
| onSnapshot: (notes: Note[]) => void; | ||
| onUpsert: (note: Note) => void; | ||
| onRemove: (id: string) => void; | ||
| onStatus?: (status: SubscribeStatus) => void; | ||
| onError?: (err: unknown) => void; | ||
| }, opts?: SubscribeOptions): () => void; | ||
| } | ||
| /** | ||
| * Consumer-facing lifecycle of a live list. Maps `VaultClient.subscribe()`'s | ||
| * {@link SubscribeStatus} 1:1, renaming `open` → `live` (the consumer word). | ||
| */ | ||
| export type LiveListStatus = | ||
| /** First connection attempt is in flight. */ | ||
| "connecting" | ||
| /** Stream is open and delivering — the list is authoritative + fresh. */ | ||
| | "live" | ||
| /** Stream dropped; reconnecting (last good list retained). */ | ||
| | "reconnecting" | ||
| /** Terminal: closed / unrecoverable error / unsubscribable query. */ | ||
| | "closed"; | ||
| /** A point-in-time snapshot of a live list. */ | ||
| export interface LiveListState { | ||
| /** Consumer-facing lifecycle — see {@link LiveListStatus}. */ | ||
| status: LiveListStatus; | ||
| /** The current ordered note list (best-effort across reconnects). */ | ||
| list: Note[]; | ||
| /** | ||
| * True while any note in the list is in an in-progress status (default: | ||
| * `metadata.status === "thinking"`). The signal behind a "thinking…" / | ||
| * typing indicator. See {@link CreateLiveListOptions.thinkingStatuses}. | ||
| */ | ||
| thinking: boolean; | ||
| } | ||
| export interface CreateLiveListOptions { | ||
| /** | ||
| * `metadata.status` values that count as "in progress" for the | ||
| * {@link LiveListState.thinking} indicator. Defaults to `["thinking"]`. | ||
| * Pass your own set (e.g. `["thinking", "streaming", "running"]`) to match | ||
| * your surface's status vocabulary; pass `[]` to disable the indicator. | ||
| */ | ||
| thinkingStatuses?: readonly string[]; | ||
| /** Forwarded to `VaultClient.subscribe()` (backoff, external abort). */ | ||
| subscribeOptions?: SubscribeOptions; | ||
| /** | ||
| * Surface transport errors. Transient errors keep retrying inside | ||
| * `subscribe()` and never disturb the list — this is purely observational | ||
| * (logging / diagnostics). A terminal error is always followed by a | ||
| * `closed` status. Defaults to a no-op (a live-transport error must never | ||
| * become the list's error state — that would make live worse than polling). | ||
| */ | ||
| onError?: (err: unknown) => void; | ||
| } | ||
| /** | ||
| * A live, reconciling note list. Framework-agnostic store: read with | ||
| * {@link getState}/{@link getList}, observe with {@link subscribe}, dispose | ||
| * with {@link close}. | ||
| */ | ||
| export interface LiveList { | ||
| /** Current ordered note list. Fresh array on each reconciled change. */ | ||
| getList(): Note[]; | ||
| /** Current full state snapshot (status + list + thinking). */ | ||
| getState(): LiveListState; | ||
| /** | ||
| * Register for change notifications. The listener takes no arguments — | ||
| * pull the new value via {@link getState}/{@link getList}. Returns an | ||
| * unsubscribe. Signature is `useSyncExternalStore`-compatible. | ||
| */ | ||
| subscribe(listener: () => void): () => void; | ||
| /** Tear down the underlying subscription. Idempotent. */ | ||
| close(): void; | ||
| } | ||
| /** | ||
| * Reconcile a single `upsert` into a list: replace the row with the same | ||
| * `id` in place, or prepend it if new. Pure — returns a new array, leaves | ||
| * the input untouched. Exported for direct testing + reuse. | ||
| */ | ||
| export declare function reconcileUpsert(list: Note[], note: Note): Note[]; | ||
| /** | ||
| * Reconcile a `remove`: drop the row by `id`. Idempotent — returns the SAME | ||
| * reference when the id is absent (so consumers can skip a re-render). Pure. | ||
| */ | ||
| export declare function reconcileRemove(list: Note[], id: string): Note[]; | ||
| /** Map a transport status to the consumer-facing live-list status. */ | ||
| export declare function toLiveListStatus(status: SubscribeStatus): LiveListStatus; | ||
| /** | ||
| * Whether a query (as raw `URLSearchParams`) can be evaluated as a live | ||
| * stream — false for `search` / `near` / `cursor` (vault rejects them). Thin | ||
| * boolean wrapper over {@link assertSubscribableQuery} for call sites that | ||
| * want to branch rather than catch. | ||
| */ | ||
| export declare function isSubscribableParams(params: URLSearchParams): boolean; | ||
| /** | ||
| * Open a live, reconciling note list over `client.subscribe(query, …)`. | ||
| * | ||
| * Returns immediately with an empty list in `connecting` status; the | ||
| * snapshot/upsert/remove/status events drive it from there. For an | ||
| * unsubscribable query (`search` / `near` / `cursor`) the list never opens a | ||
| * stream — it stays `closed` with an empty list, and `onError` fires once | ||
| * with the rejection so the caller can fall back to polling. | ||
| * | ||
| * @example | ||
| * ```ts | ||
| * const live = createLiveList(vault, { tag: "#agent/thread" }); | ||
| * const unsub = live.subscribe(() => render(live.getState())); | ||
| * // later: | ||
| * unsub(); | ||
| * live.close(); | ||
| * ``` | ||
| */ | ||
| export declare function createLiveList(client: LiveListClient, query: URLSearchParams | Record<string, string> | unknown, opts?: CreateLiveListOptions): LiveList; | ||
| //# sourceMappingURL=live-list.d.ts.map |
| {"version":3,"file":"live-list.d.ts","sourceRoot":"","sources":["../src/live-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CACP,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE;QACR,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;QACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;QAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;QAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;KAClC,EACD,IAAI,CAAC,EAAE,gBAAgB,GACtB,MAAM,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc;AACxB,6CAA6C;AAC3C,YAAY;AACd,yEAAyE;GACvE,MAAM;AACR,8DAA8D;GAC5D,cAAc;AAChB,qEAAqE;GACnE,QAAQ,CAAC;AAEb,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,EAAE,cAAc,CAAC;IACvB,qEAAqE;IACrE,IAAI,EAAE,IAAI,EAAE,CAAC;IACb;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,OAAO,IAAI,IAAI,EAAE,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,IAAI,aAAa,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,yDAAyD;IACzD,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAMhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,CAIhE;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAOrE;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,EACzD,IAAI,GAAE,qBAA0B,GAC/B,QAAQ,CAyHV"} |
| /** | ||
| * Live-list — a framework-light reconciler over `VaultClient.subscribe()`. | ||
| * | ||
| * `VaultClient.subscribe()` is the raw transport: it hands you a `snapshot` | ||
| * (the complete matching set) followed by `upsert` / `remove` deltas, plus a | ||
| * lifecycle status. Every surface that wants a *live note list* then has to | ||
| * hand-roll the same reconciliation: keep an ordered array, replace-in-place | ||
| * on upsert, drop on remove, replace-wholesale on the next snapshot, and map | ||
| * the transport status onto a UI-facing "is this live?" state. | ||
| * | ||
| * notes-ui did exactly this, coupled to TanStack Query (`live-query.ts`). | ||
| * This module extracts the reconciliation core with **zero framework | ||
| * dependency** — no React, no react-query — so any surface (vanilla, | ||
| * React via `useSyncExternalStore`, signals, Svelte stores, …) can consume | ||
| * the same well-tested logic. notes-ui now delegates to this core and keeps | ||
| * only its react-query binding on top. | ||
| * | ||
| * ## Shape | ||
| * | ||
| * {@link createLiveList} opens a subscription and returns a small store: | ||
| * | ||
| * - `getList()` — the current ordered `Note[]` (a stable reference between | ||
| * changes; a fresh array on every reconciled change so identity-based | ||
| * memoization works). | ||
| * - `getState()` — `{ status, list, thinking }` snapshot. | ||
| * - `subscribe(listener)` — register for change notifications; returns an | ||
| * unsubscribe. The signature is `useSyncExternalStore`-compatible | ||
| * (`(onStoreChange) => () => void`). | ||
| * - `close()` — tear down the subscription (idempotent). | ||
| * | ||
| * ## Status | ||
| * | ||
| * The transport's four-state lifecycle (`connecting` / `open` / | ||
| * `reconnecting` / `closed`) is surfaced verbatim as {@link LiveListStatus}, | ||
| * except `open` is renamed `live` — the consumer-facing word. A list is | ||
| * "live" only while the stream is open; in every other state the consumer | ||
| * should treat the list as a best-effort cache (e.g. keep polling) — the | ||
| * last good list is retained, never cleared, across reconnects and closes. | ||
| * | ||
| * ## Reconciliation (identical to notes-ui's prior contract) | ||
| * | ||
| * - `snapshot` REPLACES the list wholesale (vault re-delivers a fresh | ||
| * snapshot on every reconnect — self-correcting; anything missed while | ||
| * disconnected is reconciled in one shot). | ||
| * - `upsert` replaces the row with the same `id` IN PLACE, or prepends it | ||
| * if new. We do not re-sort on a single upsert — vault's snapshot is the | ||
| * ordering authority; an in-place update keeps an already-rendered row | ||
| * from jumping while the user reads it, and the next snapshot re-aligns. | ||
| * - `remove` drops the row by `id`; idempotent. | ||
| * - A transient transport error changes NOTHING — the last list stays put. | ||
| * | ||
| * ## The "thinking" / live-activity indicator | ||
| * | ||
| * Agentic surfaces stream a note that's mid-generation with | ||
| * `metadata.status: "thinking"` (vault's agent-thread convention), flipping | ||
| * it to a terminal status when done. {@link LiveListState.thinking} is true | ||
| * whenever any note in the current list is in such an in-progress status — | ||
| * the data signal behind a "thinking…" / typing indicator. The set of | ||
| * in-progress statuses is configurable ({@link CreateLiveListOptions.thinkingStatuses}). | ||
| */ | ||
| import { assertSubscribableQuery } from "./subscribe.js"; | ||
| /** | ||
| * Reconcile a single `upsert` into a list: replace the row with the same | ||
| * `id` in place, or prepend it if new. Pure — returns a new array, leaves | ||
| * the input untouched. Exported for direct testing + reuse. | ||
| */ | ||
| export function reconcileUpsert(list, note) { | ||
| const idx = list.findIndex((n) => n.id === note.id); | ||
| if (idx === -1) | ||
| return [note, ...list]; | ||
| const next = list.slice(); | ||
| next[idx] = note; | ||
| return next; | ||
| } | ||
| /** | ||
| * Reconcile a `remove`: drop the row by `id`. Idempotent — returns the SAME | ||
| * reference when the id is absent (so consumers can skip a re-render). Pure. | ||
| */ | ||
| export function reconcileRemove(list, id) { | ||
| const idx = list.findIndex((n) => n.id === id); | ||
| if (idx === -1) | ||
| return list; | ||
| return list.filter((n) => n.id !== id); | ||
| } | ||
| /** Map a transport status to the consumer-facing live-list status. */ | ||
| export function toLiveListStatus(status) { | ||
| return status === "open" ? "live" : status; | ||
| } | ||
| /** | ||
| * Whether a query (as raw `URLSearchParams`) can be evaluated as a live | ||
| * stream — false for `search` / `near` / `cursor` (vault rejects them). Thin | ||
| * boolean wrapper over {@link assertSubscribableQuery} for call sites that | ||
| * want to branch rather than catch. | ||
| */ | ||
| export function isSubscribableParams(params) { | ||
| try { | ||
| assertSubscribableQuery(params); | ||
| return true; | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| const DEFAULT_THINKING_STATUSES = ["thinking"]; | ||
| /** Is any note in the list in an in-progress status? */ | ||
| function computeThinking(list, statuses) { | ||
| if (statuses.length === 0) | ||
| return false; | ||
| for (const note of list) { | ||
| const status = note.metadata?.status; | ||
| if (typeof status === "string" && statuses.includes(status)) | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| /** | ||
| * Open a live, reconciling note list over `client.subscribe(query, …)`. | ||
| * | ||
| * Returns immediately with an empty list in `connecting` status; the | ||
| * snapshot/upsert/remove/status events drive it from there. For an | ||
| * unsubscribable query (`search` / `near` / `cursor`) the list never opens a | ||
| * stream — it stays `closed` with an empty list, and `onError` fires once | ||
| * with the rejection so the caller can fall back to polling. | ||
| * | ||
| * @example | ||
| * ```ts | ||
| * const live = createLiveList(vault, { tag: "#agent/thread" }); | ||
| * const unsub = live.subscribe(() => render(live.getState())); | ||
| * // later: | ||
| * unsub(); | ||
| * live.close(); | ||
| * ``` | ||
| */ | ||
| export function createLiveList(client, query, opts = {}) { | ||
| const thinkingStatuses = opts.thinkingStatuses ?? DEFAULT_THINKING_STATUSES; | ||
| let list = []; | ||
| let status = "connecting"; | ||
| let thinking = false; | ||
| let snapshot = { status, list, thinking }; | ||
| let closed = false; | ||
| const listeners = new Set(); | ||
| /** | ||
| * Recompute the cached `thinking` flag + the immutable state snapshot, then | ||
| * fan out to listeners. Called after every reconciled change. The snapshot | ||
| * is rebuilt (not mutated) so `useSyncExternalStore`'s `Object.is` check | ||
| * sees a new reference exactly when something changed. | ||
| */ | ||
| const commit = () => { | ||
| thinking = computeThinking(list, thinkingStatuses); | ||
| snapshot = { status, list, thinking }; | ||
| for (const listener of listeners) { | ||
| try { | ||
| listener(); | ||
| } | ||
| catch { | ||
| // A throwing listener must not break fan-out to the others or the | ||
| // reconcile loop. | ||
| } | ||
| } | ||
| }; | ||
| /** | ||
| * Branch unsubscribable queries before touching the transport: no stream, | ||
| * terminal `closed`, surface the rejection once. | ||
| */ | ||
| let params = null; | ||
| if (query instanceof URLSearchParams) { | ||
| params = query; | ||
| } | ||
| else if (query && typeof query === "object" && !Array.isArray(query)) { | ||
| // Plain Record<string,string> — the only other shape we can pre-validate | ||
| // without pulling in the full notes-query serializer. Other inputs (the | ||
| // typed NotesQuery objects) are validated by subscribe() itself. | ||
| try { | ||
| params = new URLSearchParams(query); | ||
| } | ||
| catch { | ||
| params = null; | ||
| } | ||
| } | ||
| if (params && !isSubscribableParams(params)) { | ||
| status = "closed"; | ||
| commit(); | ||
| try { | ||
| assertSubscribableQuery(params); | ||
| } | ||
| catch (err) { | ||
| opts.onError?.(err); | ||
| } | ||
| return { | ||
| getList: () => snapshot.list, | ||
| getState: () => snapshot, | ||
| subscribe: (listener) => { | ||
| listeners.add(listener); | ||
| return () => listeners.delete(listener); | ||
| }, | ||
| close: () => { }, | ||
| }; | ||
| } | ||
| const unsubscribe = client.subscribe(query, { | ||
| onSnapshot: (notes) => { | ||
| if (closed) | ||
| return; | ||
| // Authoritative complete set — replace wholesale. | ||
| list = notes.slice(); | ||
| commit(); | ||
| }, | ||
| onUpsert: (note) => { | ||
| if (closed) | ||
| return; | ||
| list = reconcileUpsert(list, note); | ||
| commit(); | ||
| }, | ||
| onRemove: (id) => { | ||
| if (closed) | ||
| return; | ||
| const next = reconcileRemove(list, id); | ||
| if (next === list) | ||
| return; // id absent — nothing changed, no fan-out | ||
| list = next; | ||
| commit(); | ||
| }, | ||
| onStatus: (s) => { | ||
| if (closed) | ||
| return; | ||
| const next = toLiveListStatus(s); | ||
| if (next === status) | ||
| return; | ||
| status = next; | ||
| commit(); | ||
| }, | ||
| onError: (err) => { | ||
| // Observational only — the list is never disturbed by a transport | ||
| // error (last good list stays put). A terminal error is followed by | ||
| // onStatus("closed") above. | ||
| opts.onError?.(err); | ||
| }, | ||
| }, opts.subscribeOptions); | ||
| const close = () => { | ||
| if (closed) | ||
| return; | ||
| closed = true; | ||
| unsubscribe(); | ||
| }; | ||
| return { | ||
| getList: () => snapshot.list, | ||
| getState: () => snapshot, | ||
| subscribe: (listener) => { | ||
| listeners.add(listener); | ||
| return () => { | ||
| listeners.delete(listener); | ||
| }; | ||
| }, | ||
| close, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=live-list.js.map |
| {"version":3,"file":"live-list.js","sourceRoot":"","sources":["../src/live-list.ts"],"names":[],"mappings":"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"} |
+2
-1
@@ -36,2 +36,3 @@ /** | ||
| export { parseSSEStream, startSubscription, assertSubscribableQuery, type SSEEvent, type SubscribeHandlers, type SubscribeOptions, type SubscribeStatus, type SubscribeTransport, } from "./subscribe.js"; | ||
| export { createLiveList, reconcileUpsert, reconcileRemove, isSubscribableParams, toLiveListStatus, type LiveList, type LiveListClient, type LiveListState, type LiveListStatus, type CreateLiveListOptions, } from "./live-list.js"; | ||
| export type { TagExpandMode, VaultInfo, Note, NoteSummary, NoteLink, NoteAttachment, TagSummary, TagFieldSchema, TagRecord, TagUpsertPayload, UpdateNotePayload, CreateNotePayload, NoteLinkAddPayload, NoteLinkRemovePayload, FindPathResult, StorageUploadResult, UploadProgress, ReachabilitySignal, } from "./vault-types.js"; | ||
@@ -58,3 +59,3 @@ export { loadToken, saveToken, clearToken, clearAllTokensForApp, storedFromTokenResponse, tokenKey, TOKEN_KEY_PREFIX, type TokenStorageOpts, } from "./token-storage.js"; | ||
| */ | ||
| export declare const APP_CLIENT_VERSION = "0.3.3-rc.1"; | ||
| export declare const APP_CLIENT_VERSION = "0.3.3-rc.2"; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,EACL,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAG7F,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,QAAQ,EACR,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGlF,YAAY,EACV,UAAU,EACV,2BAA2B,EAC3B,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAKtD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,eAAyB,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+6
-0
@@ -50,2 +50,8 @@ /** | ||
| export { parseSSEStream, startSubscription, assertSubscribableQuery, } from "./subscribe.js"; | ||
| // Live-list — framework-light reconciler over `VaultClient.subscribe()`. | ||
| // `createLiveList` maintains an ordered note list from the snapshot + delta | ||
| // stream and exposes a `useSyncExternalStore`-compatible store (list, status, | ||
| // thinking indicator). No React / react-query — any surface can consume it. | ||
| // The pure reconcilers + the subscribable-query guard are exported for reuse. | ||
| export { createLiveList, reconcileUpsert, reconcileRemove, isSubscribableParams, toLiveListStatus, } from "./live-list.js"; | ||
| // Token persistence. | ||
@@ -52,0 +58,0 @@ export { loadToken, saveToken, clearToken, clearAllTokensForApp, storedFromTokenResponse, tokenKey, TOKEN_KEY_PREFIX, } from "./token-storage.js"; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,sEAAsE;AACtE,wEAAwE;AACxE,6EAA6E;AAC7E,uCAAuC;AACvC,OAAO,EACL,kBAAkB,GAQnB,MAAM,2BAA2B,CAAC;AAEnC,qDAAqD;AACrD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GAOpB,MAAM,YAAY,CAAC;AAEpB,uEAAuE;AACvE,4CAA4C;AAC5C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,wEAAwE;AACxE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAA2B,MAAM,gBAAgB,CAAC;AAE7F,yCAAyC;AACzC,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAE3B,wEAAwE;AACxE,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,GAQpB,MAAM,kBAAkB,CAAC;AAE1B,0EAA0E;AAC1E,uEAAuE;AACvE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,uBAAuB,GAMxB,MAAM,gBAAgB,CAAC;AAwBxB,qBAAqB;AACrB,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,QAAQ,EACR,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAE5B,gDAAgD;AAChD,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,0BAA0B,GAE3B,MAAM,gBAAgB,CAAC;AAExB,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElE,4EAA4E;AAC5E,wEAAwE;AACxE,wEAAwE;AACxE,wCAAwC;AACxC,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAclF;;;;;;;GAOG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,gFAAgF;AAChF,2EAA2E;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,sEAAsE;AACtE,wEAAwE;AACxE,6EAA6E;AAC7E,uCAAuC;AACvC,OAAO,EACL,kBAAkB,GAQnB,MAAM,2BAA2B,CAAC;AAEnC,qDAAqD;AACrD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GAOpB,MAAM,YAAY,CAAC;AAEpB,uEAAuE;AACvE,4CAA4C;AAC5C,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,wEAAwE;AACxE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAA2B,MAAM,gBAAgB,CAAC;AAE7F,yCAAyC;AACzC,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAE3B,wEAAwE;AACxE,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,GAQpB,MAAM,kBAAkB,CAAC;AAE1B,0EAA0E;AAC1E,uEAAuE;AACvE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,uBAAuB,GAMxB,MAAM,gBAAgB,CAAC;AAExB,yEAAyE;AACzE,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GAMjB,MAAM,gBAAgB,CAAC;AAwBxB,qBAAqB;AACrB,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,QAAQ,EACR,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAE5B,gDAAgD;AAChD,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,0BAA0B,GAE3B,MAAM,gBAAgB,CAAC;AAExB,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElE,4EAA4E;AAC5E,wEAAwE;AACxE,wEAAwE;AACxE,wCAAwC;AACxC,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAclF;;;;;;;GAOG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,gFAAgF;AAChF,2EAA2E;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC"} |
@@ -1,2 +0,2 @@ | ||
| export declare const SURFACE_CLIENT_VERSION = "0.3.3-rc.1"; | ||
| export declare const SURFACE_CLIENT_VERSION = "0.3.3-rc.2"; | ||
| //# sourceMappingURL=version.d.ts.map |
+1
-1
| // AUTO-GENERATED by scripts/gen-version.ts — do not edit by hand. | ||
| // Source of truth: package.json "version". Regenerated on every build | ||
| // (prebuild). See #57 — keeps SURFACE_CLIENT_VERSION from drifting. | ||
| export const SURFACE_CLIENT_VERSION = "0.3.3-rc.1"; | ||
| export const SURFACE_CLIENT_VERSION = "0.3.3-rc.2"; | ||
| //# sourceMappingURL=version.js.map |
+5
-1
| { | ||
| "name": "@openparachute/surface-client", | ||
| "version": "0.3.3-rc.1", | ||
| "version": "0.3.3-rc.2", | ||
| "description": "Shared browser-side library for Parachute apps \u2014 OAuth (PKCE + DCR), vault REST client, token storage, service-worker reload helper, vault-id + runtime tenancy helpers.", | ||
@@ -27,2 +27,6 @@ "license": "AGPL-3.0", | ||
| }, | ||
| "./live-list": { | ||
| "types": "./dist/live-list.d.ts", | ||
| "import": "./dist/live-list.js" | ||
| }, | ||
| "./token-storage": { | ||
@@ -29,0 +33,0 @@ "types": "./dist/token-storage.d.ts", |
462877
5.94%68
6.25%6093
7.82%