import { createPinboard } from "./server.js"; //#region src/membership.d.ts type RedisKV = createPinboard.RedisKV; declare namespace createMembership { type Options = { key: string; nodeId: string; /** Canonical config JSON; live members must match it byte-for-byte. */ config: string; ttlMs: number; operation: string; now?: (() => number) | undefined; /** Fires once per transition into incompatibility, with the other member's config. */ onMismatch?: ((other: string) => void) | undefined; }; type Instance = { ok(): Promise; refresh(): Promise; start(): void; close(): Promise; }; } /** * Cluster-membership fence on the `key` hash: each node upserts itself with a * liveness horizon every tick and removes itself on close; a joiner is * refused while any live member carries a different config — an incompatible * fleet is never evicted, only waited out. The verdict is cached for one * tick, mirroring createLease. */ declare const createMembership: (redis: RedisKV, options: createMembership.Options) => createMembership.Instance; //#endregion export { createMembership }; //# sourceMappingURL=membership.d.ts.map