apollo-client

To use Subspace with apollo-client, a ReactiveSchemaLink from apollo-link-reactive-schema must be used with a custom schema.

import {InMemoryCache} from "apollo-cache-inmemory";
import ApolloClient from "apollo-client";
import {ReactiveSchemaLink} from "apollo-link-reactive-schema";

const schema = makeExecutableSchema({typeDefs, resolvers});
const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: new ReactiveSchemaLink({schema)})
});

Example

import { ApolloClient } from "apollo-client";
import { InMemoryCache } from "apollo-cache-inmemory";
import {ReactiveSchemaLink} from "apollo-link-reactive-schema";
import Subspace from "@embarklabs/subspace";

// ...

// Initialize Subspace
const subspace = new Subspace(web3);
await subspace.init();

const MyContractInstance = ...; // TODO: obtain a web3.eth.Contract instance

const typeDefs = `
  type MyEvent {
    someValue: Int
    anotherValue: String
  }
  type Query {
    myEvents: MyEvent!
  }
`;

const resolvers = {
  Query: {
    myEvents: () => subspace.trackEvent(MyContractInstance, 'MyEvent', {filter: {}, fromBlock: 1})
  }
};

const schema = makeExecutableSchema({ typeDefs, resolvers });

const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: new ReactiveSchemaLink({schema)})
});

Using Apollo with Subspace

A practical example can also be found in examples/react-apollo.