const { makeExecutableSchema } = require("graphql-tools"); const gql = require( "graphql-tag"); const graphql = require( "reactive-graphql").graphql; const Web3Eth = require('web3-eth'); const {deployEscrowContract} = require('./utils-web3'); let eth = new Web3Eth("ws://localhost:8545"); async function run() { let accounts = await eth.getAccounts(); var EscrowContract = await deployEscrowContract(eth) await EscrowContract.methods.createEscrow(1, accounts[0], accounts[1]).send({from: accounts[0]}) await EscrowContract.methods.createEscrow(1, accounts[1], accounts[2]).send({from: accounts[0]}) await EscrowContract.methods.createEscrow(1, accounts[1], accounts[0]).send({from: accounts[0]}) await EscrowContract.methods.createEscrow(1, accounts[0], accounts[2]).send({from: accounts[0]}) const EventSyncer = require('../src/eventSyncer.js') const eventSyncer = new EventSyncer(eth.currentProvider); await eventSyncer.init() setInterval(async () => { await EscrowContract.methods.createEscrow(1, accounts[0], accounts[1]).send({from: accounts[0]}) }, 1 * 1000) const typeDefs = ` type Escrow { buyer: String! seller: String! } type Query { escrows: Escrow! } `; const resolvers = { Query: { escrows: () => { return eventSyncer.trackEvent(EscrowContract, 'Created', { filter: { buyer: accounts[0] }, fromBlock: 1 }) } } }; const schema = makeExecutableSchema({ typeDefs, resolvers }); const query = gql` query { escrows { buyer } } `; const stream = graphql(schema, query); // stream is an Observable stream.subscribe(res => console.log(res)); // . } run()