// // Copyright 2021 Vulcanize, Inc. // import { gql } from '@apollo/client/core'; import { GraphQLClient, GraphQLConfig } from '@cerc-io/ipld-eth-client'; import { queries, mutations, subscriptions } from './gql'; export class Client { _config: GraphQLConfig; _client: GraphQLClient; constructor (config: GraphQLConfig) { this._config = config; this._client = new GraphQLClient(config); } async getEvents (blockHash: string, contractAddress: string, name: string): Promise { const { events } = await this._client.query( gql(queries.events), { blockHash, contractAddress, name } ); return events; } async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise { const { eventsInRange } = await this._client.query( gql(queries.eventsInRange), { fromBlockNumber, toBlockNumber } ); return eventsInRange; } async watchContract (contractAddress: string, startingBlock?: number): Promise { const { watchContract } = await this._client.mutate( gql(mutations.watchContract), { contractAddress, startingBlock } ); return watchContract; } async watchEvents (onNext: (value: any) => void): Promise { return this._client.subscribe( gql(subscriptions.onEvent), ({ data }) => { onNext(data.onEvent); } ); } }