Rindle

API index and search · Build metadata

Source snapshot

packages/remote/src/subscribe.ts

Source revision 05d0bf2c2e56 · build details
Source revision: 05d0bf2c2e56.
TypeScript input SHA-256: aabe6cfcc4172b870d5e272142958e9ea8d8784c2aa23133156e5a7ee633318e
Generated 2026-09-04T23:58:25.590Z with TypeScript 6.0.3. Public TypeScript checks and declaration emit passed. Package runtime tests are separate.
1import type { Mutation, MutationEnvelope, QueryId, RemoteQuery } from "@rindle/client";23import type { SubscribeClientMsg } from "./protocol.ts";45export type SubscribeMode = "flat" | "normalized";67export interface SubscribeRequest {8  queryId: QueryId;9  remote: RemoteQuery;10  mode: SubscribeMode;11}1213export type SubscribeTarget =14  | { name: string; args: unknown; leaseToken?: never; wsEndpoint?: never }15  // A lease may carry the follower's public ws endpoint (READ-ROUTER-DESIGN.md §2.3): the source16  // connects (or migrates) its transport there before subscribing. Client-side routing only — it is17  // NOT put on the wire `subscribe` frame.18  | { leaseToken: string; wsEndpoint?: string; name?: never; args?: never };1920export type SubscribeResolver = (request: SubscribeRequest) => SubscribeTarget | PromiseLike<SubscribeTarget>;2122export type RawMutationSender = (mutations: Mutation[]) => void | PromiseLike<void>;2324export type MutationEnvelopeSender = (envelope: MutationEnvelope) => void | PromiseLike<void>;2526export function defaultSubscribeTarget(request: SubscribeRequest): SubscribeTarget {27  return { name: request.remote.name, args: request.remote.args };28}2930export function subscribeMessage(request: SubscribeRequest, target: SubscribeTarget): SubscribeClientMsg {31  const mode = request.mode === "normalized" ? { mode: request.mode } : {};32  if (target.leaseToken !== undefined) {33    return { t: "subscribe", queryId: request.queryId, leaseToken: target.leaseToken, ...mode };34  }35  return { t: "subscribe", queryId: request.queryId, name: target.name, args: target.args, ...mode };36}3738export function isThenable<T>(value: T | PromiseLike<T>): value is PromiseLike<T> {39  return value != null && typeof (value as { then?: unknown }).then === "function";40}41