Fragment on Node throws away data with apollo/client

@apollo/client: 3.7.0

Initialising InMemoryCache like so (without any options):

cache: InMemoryCache(),

I’m using a Relay based API and have query like so

{
  page {
    id
    components {
      id
      items {
        __typename
        ... on Node {
          id
       }
      }
    }
  }
}

The API returns __typename and and id for each of the items, but because I use a fragment on Node, the ID gets thrown away.

How should I configure the InMemoryStore to leave my IDs alone that come from the API? I think I need to tell it about the interface/type beforehand.

@apollo/client is magic and awesome whilst it’s working as expected but when it doesn’t… that’s when it’s suddenly not fun