```
export function finalDoorState(events: string[]): string {
  const moves: Record<string, string> = {
    unlock: "closed",
    lock: "locked",
    open: "open",
    close: "closed",
  };
  let state = "locked";
  let ignored = 0;
  for (const event of events) {
    if (moves.hasOwnProperty(event)) {
      state = moves[event];
    } else {
      throw new Error(`Invalid event: ${event}`);
    }
  }
  return state + ":" + ignored;
}
```