apollo-boostではlinkを設定できない

graphql-ruby と react + apollo ではじめてのGraphQLはじめました。

で 、graphql-ruby (Rails) はAPIサーバとして使っていて、Authorizationヘッダで認証するようにしています。

もともとはこんな感じでヘッダを設定していたのだけれど、

import ApolloClient from 'apollo-boost';
import { ApolloProvider } from 'react-apollo';

const client = new ApolloClient({
  uri: 'xxxxxxx',
  request: operation => {
    operation.setContext({
      headers: {
        'Authorization': 'xxxxxxxx'
      },
    });
  },
});

ReactDOM.render(
  <Router>
    <ApolloProvider client={client}>
      <App />
    </ApolloProvider>
  </Router>,
  document.getElementById('root'),
);

画像ファイルを上げたいということになり、apollo-upload-clientApolloClient にlinkオプションを渡そうとしたけどうまくいかない。

from 'apollo-boost'ApolloClient は下記のオプションしか取らず、そこにlinkは含まれていないのが原因でした。

github.com

なので、ApolloBoost was initialized with unsupported options: link とか怒られるんだけど、 ずっとNetworkタブをみてなんでだろって思っていたので、Consoleタブを見ていなかった。 どうせならもっと盛大に止まってくれればよかったのに。

import ApolloClient from 'apollo-client'; として解決。 この場合、

import ApolloClient from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';

const client = new ApolloClient({
  link: xxxxxx,
  cache: new InMemoryCache(),
})

として cache を指定しないといけないし、apollo-boostをみて必要そうなlinkをコピってくる必要がある。