Rxova
Skip to content

OpenedWindowState

type OpenedWindowState<R> =
| {
error: undefined;
result: undefined;
status: "idle";
}
| {
error: undefined;
result: undefined;
status: "opening";
}
| {
error: undefined;
result: undefined;
status: "connected";
}
| {
error: undefined;
result: R;
status: "done";
}
| {
error: WindowClosedError;
result: undefined;
status: "closed-early";
}
| {
error: unknown;
result: undefined;
status: "error";
};

The flow’s state as a discriminated union, so status narrows result and error for you. Three independent fields could not: result was R | undefined even in the ‘done’ branch, which is why reading it needed a non-null assertion at every call site.

Type Parameter
R
{
error: undefined;
result: undefined;
status: "idle";
}

{
error: undefined;
result: undefined;
status: "opening";
}

{
error: undefined;
result: undefined;
status: "connected";
}

{
error: undefined;
result: R;
status: "done";
}

{
error: WindowClosedError;
result: undefined;
status: "closed-early";
}

The child window went away before calling finish().


{
error: unknown;
result: undefined;
status: "error";
}

The handshake timed out, the popup was blocked, or the factory threw.