reactive-graphql
Using reactive-graphql
you can execute GraphQL queries against Subspace observables after you create your own type definitions and resolvers.
Example
const Subspace = require('@embarklabs/subspace');
const MyContract = require('./MyContract');
const { pluck } = require('rxjs/operators');
const { makeExecutableSchema } = require("graphql-tools");
const gql = require("graphql-tag");
const { graphql } = require("reactive-graphql");
const run = async () => {
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 query = gql`
query {
myEvents {
someValue
anotherValue
}
}
`;
const stream = graphql(schema, query).pipe(pluck('data', 'myEvents'));
stream.subscribe(data => {
console.log(data);
})
}
run();
This example is available in Github