title: Mutating an array with apollo
body: <p>I have a server side schema with this mutation type</p>
  
  <pre><code>type Mutation {
    updateSettings(settings: SettingsInput): Settings
  }
  input SettingsInput {
    repositories: [RepositoryInput]
  }
  input RepositoryInput {
    id: String
    name: String
    url: String
  }
  </code></pre>
  
  <p>I can mutate this exactly like I want to if I use a client such as Altair, with this query:</p>
  
  <pre><code>mutation{
    updateSettings(settings: {
      repositories: [
        {
           name: "name1"
           url: "url1"
        },
        {
           name: "name2"
           url: "url2"
        }
      ]
    }){
      repositories {
        id
        name
        url
      }
    }
  }
  </code></pre>
  
  <p>However I am struggling to get it working when using Apollo</p>
  
  <p>The best I can get is this</p>
  
  <pre><code>import { SubscriptionClient } from "subscriptions-transport-ws";
  import { gql } from "apollo-boost";
  import { WebSocketLink } from "apollo-link-ws";
  
  const wsClient = new SubscriptionClient("ws://localhost:5001/graphql", {
    reconnect: true
  });
  const client = new WebSocketLink(wsClient);
  const UPDATE_SETTINGS = gql`
    mutation UpdateSettings($settings: SettingsInput) {
      updateSettings(settings: $settings) {
        repositories {
          id
          name
          url
        }
      }
    }
  `;
  client
        .request({
          query: UPDATE_SETTINGS,
          variables: { repository: [{name: "name1", url:"url1"},
                                    {name: "name2", url:"url2"}]}
        })
  </code></pre>
  
  <p>I am obviously missing something. The client doesn't seem to be aware of the servers <code>SettingsInput</code>, but I can't really figure out how to create a query for the client that takes complex objects or arrays as variables.</p>
  
  <p>Am I going about this in a totaly weird way or how do I go about sending "complex" mutations to the server from an apollo client?</p>