feat(host,panel): stream a workspace's pending invitations to owners' and admins' windows

Merged
CH
7d ago
+500-95

A workspace's pending invitations are streamed to its owner's and admins' settings page. Stacked on #3948.

  • Act-port procedure: workspace.invitations, an eventIterator.
  • Host follow: the host follows each workspace through liveRows and tells each change as WORKSPACE_INVITATIONS_CHANGED. Expired invitations are dropped by the host's clock as each change lands, and accept links are built on the sealed origin.
  • Panel: the invitations read stays as the first read. The re-read after making an invitation is gone; invitations made, canceled or accepted elsewhere arrive on the stream.
  • Shared code: the people and invitations follows now share one host follow (followWorkspaceRead), one counted act-port stream (followedStream) and one panel stream reader (act-stream.ts).

Edge left on purpose: an invitation that expires while nothing else in the workspace changes stays listed until the next change or a reopen.

Made with Luke