type waiter = { promise : string option Eio.Promise.t; resolver : string option Eio.Promise.u; } type t val create : unit -> t val register : t -> seq:int -> waiter val complete : t -> seq:int -> payload:string option -> bool val wait : waiter -> timeout:float -> clock:_ Eio.Time.clock -> string option option val cancel : t -> seq:int -> unit val pending_count : t -> int