When messages are dropped from the full WebSocket channel, you can get the status of the order book with an HTTP request to
https://api.exchange.coinbase.com/products/{product_id}/book and playback the WebSocket feed subsequent to the sequence number in the HTTP response to maintain an accurate order book (as described here). However, when messages are dropped from the user channel, the equivalent HTTP request (https://api.exchange.coinbase.com/orders) has no sequence number. To fix this it would seem that you can just use the HTTP response to get a list of order ids for your orders and then get the corresponding orders from the order book.
My question is as to how you would maintain an accurate list of your orders that are done and, therefore, not open in the order book. If the order-book HTTP response does not contain one of your orders and the user-orders HTTP response shows the order as done, how do I know if the order book is up to date with the user orders list or if it predates the order open message and an open message for an order that was thought to be done will come through the queued WebSocket feed? How can one keep a record of one’s done orders and a record of the order book that are both in agreeance at all times?