Hyperlinkv0.8.0-beta.28

Hyperlink

Hyperlink.fleetHealthconstsrc/Hyperlink.ts:5516
<Self, S extends Spec, A, EPick, EOwn, ROwn>(
  tag: HyperlinkTag<Self, S>,
  pick: (peer: PeerServiceOf<S>) => Effect.Effect<A, EPick>,
  own: Effect.Effect<A, EOwn, ROwn>
): Effect.Effect<
  Record<string, A>,
  EOwn,
  ROwn | PeersId<Self> | SelfNodeId<Self>
>

A fleet fold of successful peer leaf picks keyed by node (plus selfNode). Soft on down peers — failures are skipped (partial table). Prefer this for optional metric-style aggregates. For health, use hyperlink-ts/FleetHealth (Exit → Reachable / Unreachable) or MultiNode.combineByNodeExit.

// metric-style: missing peers omitted
inFlightByNode: Hyperlink.fleetHealth(FleetMetrics, (peer) => peer.snapshot.pipe(...), own)

Requires the peersLayer capability (which bundles selfNode). The only error / requirement is own's.

nodes & fleetselfNodepeersLayer
Source src/Hyperlink.ts:551616 lines
export const fleetHealth = <Self, S extends Spec, A, EPick, EOwn, ROwn>(
  tag: HyperlinkTag<Self, S>,
  pick: (peer: PeerServiceOf<S>) => Effect.Effect<A, EPick>,
  own: Effect.Effect<A, EOwn, ROwn>,
): Effect.Effect<
  Record<string, A>,
  EOwn,
  ROwn | PeersId<Self> | SelfNodeId<Self>
> =>
  Effect.gen(function* () {
    const self = yield* selfNode(tag);
    const peerClients = yield* peers(tag);
    const byNode = yield* combineQuery(peerClients, pick, combineByNode);
    const ownValue = yield* own;
    return { ...byNode, [self]: ownValue };
  });