diff --git a/.gitattributes b/.gitattributes
index d98fe05b8..849dc2148 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,4 +1,4 @@
# Automatically collapse generated files in GitHub.
ethereum/wrappers/*.go linguist-generated=true
-docs/json-rpc-clients/typescript/*.md linguist-generated=true
+docs/graphql-clients/typescript/*.md linguist-generated=true
diff --git a/.graphqlconfig b/.graphqlconfig
new file mode 100644
index 000000000..8b7ea8be1
--- /dev/null
+++ b/.graphqlconfig
@@ -0,0 +1,3 @@
+{
+ "schemaPath": "graphql/schema.graphql"
+}
diff --git a/Makefile b/Makefile
index 0b192a114..6757bfa62 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
.PHONY: deps
-deps: deps-ts wasmbrowsertest
+deps: deps-ts wasmbrowsertest gqlgen
.PHONY: deps-ts
@@ -13,6 +13,13 @@ gobin:
GO111MODULE=off go get -u github.com/myitcv/gobin
+# gqlgen is a tool for embedding files so that they are included in binaries.
+# This installs the CLI for go-bindata.
+.PHONY: gqlgen
+gqlgen: gobin
+ gobin github.com/99designs/gqlgen@v0.11.3
+
+
# wasmbrowsertest is required for running WebAssembly tests in the browser.
.PHONY: wasmbrowsertest
wasmbrowsertest: gobin
@@ -21,7 +28,7 @@ wasmbrowsertest: gobin
# Installs dependencies without updating Gopkg.lock or yarn.lock
.PHONY: deps-no-lockfile
-deps-no-lockfile: deps-ts-no-lockfile wasmbrowsertest
+deps-no-lockfile: deps-ts-no-lockfile wasmbrowsertest gqlgen
.PHONY: deps-ts-no-lockfile
@@ -34,7 +41,7 @@ test-all: test-go test-wasm-browser test-ts test-browser-conversion test-browser
.PHONY: test-go
-test-go: test-go-parallel test-go-serial
+test-go: generate test-go-parallel test-go-serial
.PHONY: test-go-parallel
@@ -84,8 +91,14 @@ lint-ts:
lint-prettier:
yarn prettier:ci
+
+.PHONY: generate
+generate:
+ go generate ./...
+
+
.PHONY: mesh
-mesh:
+mesh: generate
go install ./cmd/mesh
@@ -105,7 +118,7 @@ db-integrity-check:
.PHONY: cut-release
-cut-release:
+cut-release: generate
go run ./cmd/cut-release/main.go
@@ -117,7 +130,7 @@ all: mesh mesh-keygen mesh-bootstrap db-integrity-check
.PHONY: docker-mesh
-docker-mesh:
+docker-mesh: generate
docker build . -t 0xorg/mesh -f ./dockerfiles/mesh/Dockerfile
@@ -132,5 +145,6 @@ docker-mesh-fluent-bit:
.PHONY: docker-mesh-bridge
-docker-mesh-bridge:
- docker build . -t 0xorg/mesh-bridge -f ./dockerfiles/mesh-bridge/Dockerfile
+docker-mesh-bridge: generate
+ @echo 'WARN: mesh-bridge is currently disabled since it has not been updated to use the new GraphQL API'
+ # docker build . -t 0xorg/mesh-bridge -f ./dockerfiles/mesh-bridge/Dockerfile
diff --git a/README.md b/README.md
index 8ff7e64c6..466806853 100644
--- a/README.md
+++ b/README.md
@@ -39,12 +39,12 @@ in the network and begin receiving orders from and sending orders to them. You
do not need to know the identities (e.g., IP address or domain name) of any
peers in the network ahead of time and they do not need to know about you.
-Developers can use the JSON-RPC API to interact with a Mesh node that they
-control. The API allows you to send orders into the network, receive any new
-orders, and get notified when the status of an existing order changes (e.g. when
-it is filled, canceled, or expired). Under the hood, Mesh performs efficient
-order validation and order book pruning, which takes out a lot of the hard work
-for developers.
+Developers can use the GraphQL API to interact with a Mesh node that they
+control. The API allows you to send orders into the network, query for existing
+orders, and get notified when an order is added or the status of an existing
+order changes (e.g. when it is filled, canceled, or expired). Under the hood,
+Mesh performs efficient order validation and order book pruning, which takes out
+a lot of the hard work for developers.
## Documentation
diff --git a/cmd/cut-release/main.go b/cmd/cut-release/main.go
index 7cab22673..d489d7bc6 100644
--- a/cmd/cut-release/main.go
+++ b/cmd/cut-release/main.go
@@ -98,8 +98,8 @@ func updateHardCodedVersions(version string) {
newBrowserLiteDependencyString := fmt.Sprintf(`"@0x/mesh-browser-lite": "^%s"`, version)
newBrowserDependencyString := fmt.Sprintf(`"@0x/mesh-browser": "^%s"`, version)
- // Update `packages/mesh-rpc-client/package.json`
- tsClientPackageJSONPath := "packages/mesh-rpc-client/package.json"
+ // Update `packages/mesh-graphql-client/package.json`
+ tsClientPackageJSONPath := "packages/mesh-graphql-client/package.json"
regex := `"version": "(.*)"`
updateFileWithRegex(tsClientPackageJSONPath, regex, newVersionString)
@@ -156,7 +156,7 @@ func updateHardCodedVersions(version string) {
updateFileWithRegex(changelog, regex, newChangelogSection)
// Update badge in README.md
- pathToMDFilesWithBadges := []string{"README.md", "docs/rpc_api.md", "docs/deployment.md", "docs/deployment_with_telemetry.md"}
+ pathToMDFilesWithBadges := []string{"README.md", "docs/graphql_api.md", "docs/deployment.md", "docs/deployment_with_telemetry.md"}
doubleDashVersion := strings.Replace(version, "-", "--", -1)
newSvgName := fmt.Sprintf("version-%s-orange.svg", doubleDashVersion)
regex = `version-(.*)-orange.svg`
diff --git a/cmd/mesh-bridge/main.go b/cmd/mesh-bridge/main.go
index 2e7c86e9f..f9f59d1d8 100644
--- a/cmd/mesh-bridge/main.go
+++ b/cmd/mesh-bridge/main.go
@@ -5,120 +5,123 @@
//to flow to another
package main
-import (
- "context"
- "time"
+// Note(albrow): If we want to use mesh-bridge in the future we will need to update it to
+// use the new GraphQL API. Considered low-priority as of the time of writing this comment.
- "github.com/0xProject/0x-mesh/rpc"
- "github.com/0xProject/0x-mesh/zeroex"
- ethrpc "github.com/ethereum/go-ethereum/rpc"
- "github.com/plaid/go-envvar/envvar"
- log "github.com/sirupsen/logrus"
-)
+// import (
+// "context"
+// "time"
-const (
- firstWSRPCAddressLabel = "FirstWSRPCAddress"
- secondWSRPCAddressLabel = "SecondWSRPCAddress"
- maxReceiveBatch = 100
- receiveTimeout = 2 * time.Second
- tenThousand = 10000
-)
+// "github.com/0xProject/0x-mesh/rpc"
+// "github.com/0xProject/0x-mesh/zeroex"
+// ethrpc "github.com/ethereum/go-ethereum/rpc"
+// "github.com/plaid/go-envvar/envvar"
+// log "github.com/sirupsen/logrus"
+// )
-type clientEnvVars struct {
- FirstWSRPCAddress string `envvar:"FIRST_WS_RPC_ADDRESS"`
- SecondWSRPCAddress string `envvar:"SECOND_WS_RPC_ADDRESS"`
- Verbosity int `envvar:"VERBOSITY"`
-}
+// const (
+// firstWSRPCAddressLabel = "FirstWSRPCAddress"
+// secondWSRPCAddressLabel = "SecondWSRPCAddress"
+// maxReceiveBatch = 100
+// receiveTimeout = 2 * time.Second
+// tenThousand = 10000
+// )
+
+// type clientEnvVars struct {
+// FirstWSRPCAddress string `envvar:"FIRST_WS_RPC_ADDRESS"`
+// SecondWSRPCAddress string `envvar:"SECOND_WS_RPC_ADDRESS"`
+// Verbosity int `envvar:"VERBOSITY"`
+// }
func main() {
- env := clientEnvVars{}
- if err := envvar.Parse(&env); err != nil {
- panic(err)
- }
+ // env := clientEnvVars{}
+ // if err := envvar.Parse(&env); err != nil {
+ // panic(err)
+ // }
- log.SetLevel(log.Level(env.Verbosity))
+ // log.SetLevel(log.Level(env.Verbosity))
- firstClient, err := rpc.NewClient(env.FirstWSRPCAddress)
- if err != nil {
- log.WithError(err).Fatal("could not create client")
- }
- stats, err := firstClient.GetStats()
- if err != nil {
- log.Fatal(err)
- }
- log.WithField("stats", stats).Info("Spun up first client")
+ // firstClient, err := rpc.NewClient(env.FirstWSRPCAddress)
+ // if err != nil {
+ // log.WithError(err).Fatal("could not create client")
+ // }
+ // stats, err := firstClient.GetStats()
+ // if err != nil {
+ // log.Fatal(err)
+ // }
+ // log.WithField("stats", stats).Info("Spun up first client")
- secondClient, err := rpc.NewClient(env.SecondWSRPCAddress)
- if err != nil {
- log.WithError(err).Fatal("could not create client")
- }
- stats, err = secondClient.GetStats()
- if err != nil {
- log.Fatal(err)
- }
- log.WithField("stats", stats).Info("Spun up second client")
+ // secondClient, err := rpc.NewClient(env.SecondWSRPCAddress)
+ // if err != nil {
+ // log.WithError(err).Fatal("could not create client")
+ // }
+ // stats, err = secondClient.GetStats()
+ // if err != nil {
+ // log.Fatal(err)
+ // }
+ // log.WithField("stats", stats).Info("Spun up second client")
- go func() {
- pipeOrders(secondClient, firstClient, secondWSRPCAddressLabel, firstWSRPCAddressLabel)
- }()
- pipeOrders(firstClient, secondClient, firstWSRPCAddressLabel, secondWSRPCAddressLabel)
+ // go func() {
+ // pipeOrders(secondClient, firstClient, secondWSRPCAddressLabel, firstWSRPCAddressLabel)
+ // }()
+ // pipeOrders(firstClient, secondClient, firstWSRPCAddressLabel, secondWSRPCAddressLabel)
}
-func pipeOrders(inClient, outClient *rpc.Client, inLabel, outLabel string) {
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
- orderEventsChan := make(chan []*zeroex.OrderEvent, tenThousand)
- clientSubscription, err := inClient.SubscribeToOrders(ctx, orderEventsChan)
- if err != nil {
- log.WithError(err).Fatal("Couldn't set up OrderStream subscription")
- }
- defer clientSubscription.Unsubscribe()
- for {
- incomingSignedOrders, err := receiveBatch(orderEventsChan, clientSubscription, inLabel, outLabel)
- if err != nil {
- log.Fatal(err)
- }
- if len(incomingSignedOrders) == 0 {
- continue
- }
- validationResults, err := outClient.AddOrders(incomingSignedOrders)
- if err != nil {
- log.Fatal(err)
- }
- log.WithFields(log.Fields{
- "from": inLabel,
- "to": outLabel,
- "numSent": len(incomingSignedOrders),
- "numAccepted": len(validationResults.Accepted),
- "numRejected": len(validationResults.Rejected),
- }).Info("Finished bridging orders")
- }
-}
+// func pipeOrders(inClient, outClient *rpc.Client, inLabel, outLabel string) {
+// ctx, cancel := context.WithCancel(context.Background())
+// defer cancel()
+// orderEventsChan := make(chan []*zeroex.OrderEvent, tenThousand)
+// clientSubscription, err := inClient.SubscribeToOrders(ctx, orderEventsChan)
+// if err != nil {
+// log.WithError(err).Fatal("Couldn't set up OrderStream subscription")
+// }
+// defer clientSubscription.Unsubscribe()
+// for {
+// incomingSignedOrders, err := receiveBatch(orderEventsChan, clientSubscription, inLabel, outLabel)
+// if err != nil {
+// log.Fatal(err)
+// }
+// if len(incomingSignedOrders) == 0 {
+// continue
+// }
+// validationResults, err := outClient.AddOrders(incomingSignedOrders)
+// if err != nil {
+// log.Fatal(err)
+// }
+// log.WithFields(log.Fields{
+// "from": inLabel,
+// "to": outLabel,
+// "numSent": len(incomingSignedOrders),
+// "numAccepted": len(validationResults.Accepted),
+// "numRejected": len(validationResults.Rejected),
+// }).Info("Finished bridging orders")
+// }
+// }
-func receiveBatch(inChan chan []*zeroex.OrderEvent, subscription *ethrpc.ClientSubscription, inLabel, outLabel string) ([]*zeroex.SignedOrder, error) {
- signedOrders := []*zeroex.SignedOrder{}
- timeoutChan := time.After(receiveTimeout)
- for {
- if len(signedOrders) >= maxReceiveBatch {
- return signedOrders, nil
- }
- select {
- case <-timeoutChan:
- return signedOrders, nil
- case orderEvents := <-inChan:
- for _, orderEvent := range orderEvents {
- if orderEvent.EndState != zeroex.ESOrderAdded {
- continue
- }
- log.WithFields(log.Fields{
- "from": inLabel,
- "to": outLabel,
- "orderHash": orderEvent.OrderHash.Hex(),
- }).Info("Found new order over bridge")
- signedOrders = append(signedOrders, orderEvent.SignedOrder)
- }
- case err := <-subscription.Err():
- log.Fatal(err)
- }
- }
-}
+// func receiveBatch(inChan chan []*zeroex.OrderEvent, subscription *ethrpc.ClientSubscription, inLabel, outLabel string) ([]*zeroex.SignedOrder, error) {
+// signedOrders := []*zeroex.SignedOrder{}
+// timeoutChan := time.After(receiveTimeout)
+// for {
+// if len(signedOrders) >= maxReceiveBatch {
+// return signedOrders, nil
+// }
+// select {
+// case <-timeoutChan:
+// return signedOrders, nil
+// case orderEvents := <-inChan:
+// for _, orderEvent := range orderEvents {
+// if orderEvent.EndState != zeroex.ESOrderAdded {
+// continue
+// }
+// log.WithFields(log.Fields{
+// "from": inLabel,
+// "to": outLabel,
+// "orderHash": orderEvent.OrderHash.Hex(),
+// }).Info("Found new order over bridge")
+// signedOrders = append(signedOrders, orderEvent.SignedOrder)
+// }
+// case err := <-subscription.Err():
+// log.Fatal(err)
+// }
+// }
+// }
diff --git a/cmd/mesh/graphql_server.go b/cmd/mesh/graphql_server.go
new file mode 100644
index 000000000..842c9d648
--- /dev/null
+++ b/cmd/mesh/graphql_server.go
@@ -0,0 +1,86 @@
+package main
+
+import (
+ "context"
+ "net/http"
+ "time"
+
+ "github.com/0xProject/0x-mesh/core"
+ "github.com/0xProject/0x-mesh/graphql"
+ "github.com/0xProject/0x-mesh/graphql/generated"
+
+ gqlserver "github.com/99designs/gqlgen/graphql/handler"
+)
+
+// gracefulShutdownTimeout is the maximum amount of time to allow
+// responding to any incoming requests after the server receives
+// the signal to shutdown.
+const gracefulShutdownTimeout = 10 * time.Second
+
+func serveGraphQL(ctx context.Context, app *core.App, addr string, enableGraphiQL bool) error {
+ handler := http.NewServeMux()
+
+ // Set up handler for GraphiQL
+ if enableGraphiQL {
+ handler.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ _, _ = w.Write(graphiQLPage)
+ }))
+ }
+
+ // Set up handler for GrqphQL queries
+ resolver := graphql.NewResolver(app)
+ graphQLServer := gqlserver.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: resolver}))
+ handler.Handle("/graphql", graphQLServer)
+
+ // Start the server
+ server := &http.Server{Addr: addr, Handler: handler}
+ go func() {
+ select {
+ case <-ctx.Done():
+ shutdownContext, cancel := context.WithTimeout(context.Background(), gracefulShutdownTimeout)
+ defer cancel()
+ _ = server.Shutdown(shutdownContext)
+ }
+ }()
+ return server.ListenAndServe()
+}
+
+var graphiQLPage = []byte(`
+
+
+ 0x Mesh GraphQL Playground
+
+
+
+
+
+
+
+
+
+
+
+
+`)
diff --git a/cmd/mesh/main.go b/cmd/mesh/main.go
index afb68dc39..3a5a7c885 100644
--- a/cmd/mesh/main.go
+++ b/cmd/mesh/main.go
@@ -1,8 +1,8 @@
// +build !js
// package mesh is a standalone 0x Mesh node that can be run from the command
-// line. It uses environment variables for configuration and exposes a JSON RPC
-// endpoint over WebSockets.
+// line. It uses environment variables for configuration and optionally exposes
+// a GraphQL API for developers to interact with.
package main
import (
@@ -11,7 +11,6 @@ import (
"sync"
"github.com/0xProject/0x-mesh/core"
- "github.com/0xProject/0x-mesh/rpc"
"github.com/plaid/go-envvar/envvar"
log "github.com/sirupsen/logrus"
)
@@ -19,12 +18,22 @@ import (
// standaloneConfig contains configuration options specific to running 0x Mesh
// in standalone mode (i.e. not in a browser).
type standaloneConfig struct {
- // WSRPCAddr is the interface and port to use for the JSON-RPC API over
- // WebSockets. By default, 0x Mesh will listen on localhost and port 60557.
- WSRPCAddr string `envvar:"WS_RPC_ADDR" default:"localhost:60557"`
- // HTTPRPCAddr is the interface and port to use for the JSON-RPC API over
- // HTTP. By default, 0x Mesh will listen on localhost and port 60556.
- HTTPRPCAddr string `envvar:"HTTP_RPC_ADDR" default:"localhost:60556"`
+ // EnableGraphQLServer determines whether or not to enable the GraphQL server.
+ // If enabled, GraphQL queries can be sent to GraphQLServerAddr at the /graphql
+ // URL. By default, the GraphQL server is disabled. Please be aware that the GraphQL
+ // API is intended to be a *private* API. If you enable the GraphQL server in
+ // production we recommend using a firewall/VPC or an authenticated proxy to restrict
+ // public access.
+ EnableGraphQLServer bool `envvar:"ENABLE_GRAPHQL_SERVER" default:"false"`
+ // GraphQLServerAddr is the interface and port to use for the GraphQL API.
+ // By default, 0x Mesh will listen on 0.0.0.0 (all available addresses) and
+ // port 60557.
+ GraphQLServerAddr string `envvar:"GRAPHQL_SERVER_ADDR" default:"0.0.0.0:60557"`
+ // EnableGraphQLPlayground determines whether or not to enable GraphiQL, an interactive
+ // GraphQL playground which can be accessed by visiting GraphQLServerAddr in a browser.
+ // See https://github.com/graphql/graphiql for more information. By default, GraphiQL
+ // is disabled.
+ EnableGraphQLPlayground bool `envvar:"ENABLE_GRAPHQL_PLAYGROUND" default:"false"`
}
func main() {
@@ -60,43 +69,18 @@ func main() {
}
}()
- // Start WS RPC server.
- wsRPCErrChan := make(chan error, 1)
- wg.Add(1)
- go func() {
- defer wg.Done()
- log.WithField("ws_rpc_addr", config.WSRPCAddr).Info("starting WS RPC server")
- rpcServer := instantiateServer(ctx, app, config.WSRPCAddr)
- go func() {
- selectedRPCAddr, err := waitForSelectedAddress(ctx, rpcServer)
- if err != nil {
- log.WithError(err).Warn("WS RPC server did not start")
- }
- log.WithField("address", selectedRPCAddr).Info("started WS RPC server")
- }()
- if err := rpcServer.Listen(ctx, rpc.WSHandler); err != nil {
- wsRPCErrChan <- err
- }
- }()
-
- // Start HTTP RPC server.
- httpRPCErrChan := make(chan error, 1)
- wg.Add(1)
- go func() {
- defer wg.Done()
- log.WithField("http_rpc_addr", config.HTTPRPCAddr).Info("starting HTTP RPC server")
- rpcServer := instantiateServer(ctx, app, config.HTTPRPCAddr)
+ graphQLErrChan := make(chan error, 1)
+ if config.EnableGraphQLServer {
+ // Start GraphQL server.
+ wg.Add(1)
go func() {
- selectedRPCAddr, err := waitForSelectedAddress(ctx, rpcServer)
- if err != nil {
- log.WithError(err).Warn("HTTP RPC server did not start")
+ defer wg.Done()
+ log.WithField("graphql_server_addr", config.GraphQLServerAddr).Info("starting GraphQL server")
+ if err := serveGraphQL(ctx, app, config.GraphQLServerAddr, config.EnableGraphQLPlayground); err != nil {
+ graphQLErrChan <- err
}
- log.WithField("address", selectedRPCAddr).Info("started HTTP RPC server")
}()
- if err := rpcServer.Listen(ctx, rpc.HTTPHandler); err != nil {
- httpRPCErrChan <- err
- }
- }()
+ }
// Block until there is an error or the app is closed.
select {
@@ -108,12 +92,9 @@ func main() {
case err := <-coreErrChan:
cancel()
log.WithField("error", err.Error()).Error("core app exited with error")
- case err := <-wsRPCErrChan:
- cancel()
- log.WithField("error", err.Error()).Error("WS RPC server returned error")
- case err := <-httpRPCErrChan:
+ case err := <-graphQLErrChan:
cancel()
- log.WithField("error", err.Error()).Error("HTTP RPC server returned error")
+ log.WithField("error", err.Error()).Error("GraphQL server returned error")
}
// If we reached here it means there was an error. Wait for all goroutines
diff --git a/cmd/mesh/rpc_handler.go b/cmd/mesh/rpc_handler.go
deleted file mode 100644
index 66ec4ce9f..000000000
--- a/cmd/mesh/rpc_handler.go
+++ /dev/null
@@ -1,273 +0,0 @@
-// +build !js
-
-package main
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "net"
- "runtime/debug"
- "strings"
- "time"
-
- "github.com/0xProject/0x-mesh/common/types"
- "github.com/0xProject/0x-mesh/constants"
- "github.com/0xProject/0x-mesh/core"
- "github.com/0xProject/0x-mesh/rpc"
- "github.com/0xProject/0x-mesh/zeroex"
- "github.com/0xProject/0x-mesh/zeroex/ordervalidator"
- "github.com/ethereum/go-ethereum/common"
- ethrpc "github.com/ethereum/go-ethereum/rpc"
- peerstore "github.com/libp2p/go-libp2p-peerstore"
- log "github.com/sirupsen/logrus"
-)
-
-// orderEventsBufferSize is the buffer size for the orderEvents channel. If
-// the buffer is full, any additional events won't be processed.
-const orderEventsBufferSize = 8000
-
-type rpcHandler struct {
- app *core.App
- ctx context.Context
-}
-
-// waitForSelectedAddress wait for the server to start listening and select an address.
-func waitForSelectedAddress(ctx context.Context, rpcServer *rpc.Server) (string, error) {
- for rpcServer.Addr() == nil {
- select {
- case <-ctx.Done():
- return "", ctx.Err()
- default:
- }
- time.Sleep(10 * time.Millisecond)
- }
- return rpcServer.Addr().String(), nil
-}
-
-// instantiateServer instantiates a new RPC server with the rpcHandler.
-func instantiateServer(ctx context.Context, app *core.App, rpcAddr string) *rpc.Server {
- // Initialize the JSON RPC WebSocket server (but don't start it yet).
- rpcHandler := &rpcHandler{
- app: app,
- ctx: ctx,
- }
- rpcServer, err := rpc.NewServer(rpcAddr, rpcHandler)
- if err != nil {
- return nil
- }
- return rpcServer
-}
-
-// GetOrders is called when an RPC client calls GetOrders.
-func (handler *rpcHandler) GetOrders(perPage int, minOrderHashHex string) (result *types.GetOrdersResponse, err error) {
- log.WithFields(map[string]interface{}{
- "perPage": perPage,
- "minOrderHashHex": minOrderHashHex,
- }).Debug("received GetOrders request via RPC")
- // Catch panics, log stack trace and return RPC error message
- defer func() {
- if r := recover(); r != nil {
- internalErr, ok := r.(error)
- if !ok {
- // If r is not of type error, convert it.
- internalErr = fmt.Errorf("Recovered from non-error: (%T) %v", r, r)
- }
- log.WithFields(log.Fields{
- "error": internalErr,
- "method": "GetOrders",
- "stackTrace": string(debug.Stack()),
- }).Error("RPC method handler crashed")
- err = errors.New("method handler crashed in GetOrders RPC call (check logs for stack trace)")
- }
- }()
- var minOrderHash = common.HexToHash(minOrderHashHex)
- getOrdersResponse, err := handler.app.GetOrders(perPage, minOrderHash)
- if err != nil {
- if _, ok := err.(core.ErrSnapshotNotFound); ok {
- return nil, err
- }
- if _, ok := err.(core.ErrPerPageZero); ok {
- return nil, err
- }
- // We don't want to leak internal error details to the RPC client.
- log.WithField("error", err.Error()).Error("internal error in GetOrders RPC call")
- return nil, constants.ErrInternal
- }
- return getOrdersResponse, nil
-}
-
-// AddOrders is called when an RPC client calls AddOrders.
-func (handler *rpcHandler) AddOrders(signedOrdersRaw []*json.RawMessage, opts types.AddOrdersOpts) (results *ordervalidator.ValidationResults, err error) {
- log.WithFields(log.Fields{
- "count": len(signedOrdersRaw),
- "pinned": opts.Pinned,
- }).Info("received AddOrders request via RPC")
- // Catch panics, log stack trace and return RPC error message
- defer func() {
- if r := recover(); r != nil {
- internalErr, ok := r.(error)
- if !ok {
- // If r is not of type error, convert it.
- internalErr = fmt.Errorf("Recovered from non-error: (%T) %v", r, r)
- }
- log.WithFields(log.Fields{
- "error": internalErr,
- "method": "AddOrders",
- "stackTrace": string(debug.Stack()),
- }).Error("RPC method handler crashed")
- err = errors.New("method handler crashed in AddOrders RPC call (check logs for stack trace)")
- }
- }()
- validationResults, err := handler.app.AddOrders(handler.ctx, signedOrdersRaw, opts.Pinned)
- if err != nil {
- // We don't want to leak internal error details to the RPC client.
- log.WithField("error", err.Error()).Error("internal error in AddOrders RPC call")
- return nil, constants.ErrInternal
- }
- return validationResults, nil
-}
-
-// AddPeer is called when an RPC client calls AddPeer,
-func (handler *rpcHandler) AddPeer(peerInfo peerstore.PeerInfo) (err error) {
- log.Debug("received AddPeer request via RPC")
- // Catch panics, log stack trace and return RPC error message
- defer func() {
- if r := recover(); r != nil {
- internalErr, ok := r.(error)
- if !ok {
- // If r is not of type error, convert it.
- internalErr = fmt.Errorf("Recovered from non-error: (%T) %v", r, r)
- }
- log.WithFields(log.Fields{
- "error": internalErr,
- "method": "AddPeer",
- "stackTrace": string(debug.Stack()),
- }).Error("RPC method handler crashed")
- err = errors.New("method handler crashed in AddPeer RPC call (check logs for stack trace)")
- }
- }()
- if err := handler.app.AddPeer(peerInfo); err != nil {
- log.WithField("error", err.Error()).Error("internal error in AddPeer RPC call")
- return constants.ErrInternal
- }
- return nil
-}
-
-// GetStats is called when an RPC client calls GetStats,
-func (handler *rpcHandler) GetStats() (result *types.Stats, err error) {
- log.Debug("received GetStats request via RPC")
- // Catch panics, log stack trace and return RPC error message
- defer func() {
- if r := recover(); r != nil {
- internalErr, ok := r.(error)
- if !ok {
- // If r is not of type error, convert it.
- internalErr = fmt.Errorf("Recovered from non-error: (%T) %v", r, r)
- }
- log.WithFields(log.Fields{
- "error": internalErr,
- "method": "GetStats",
- "stackTrace": string(debug.Stack()),
- }).Error("RPC method handler crashed")
- err = errors.New("method handler crashed in GetStats RPC call (check logs for stack trace)")
- }
- }()
- getStatsResponse, err := handler.app.GetStats()
- if err != nil {
- log.WithField("error", err.Error()).Error("internal error in GetStats RPC call")
- return nil, constants.ErrInternal
- }
- return getStatsResponse, nil
-}
-
-// SubscribeToOrders is called when an RPC client sends a `mesh_subscribe` request with the `orders` topic parameter
-func (handler *rpcHandler) SubscribeToOrders(ctx context.Context) (result *ethrpc.Subscription, err error) {
- log.Debug("received order event subscription request via RPC")
- // Catch panics, log stack trace and return RPC error message
- defer func() {
- if r := recover(); r != nil {
- internalErr, ok := r.(error)
- if !ok {
- // If r is not of type error, convert it.
- internalErr = fmt.Errorf("Recovered from non-error: (%T) %v", r, r)
- }
- log.WithFields(log.Fields{
- "error": internalErr,
- "method": "SubscribeToOrders",
- "stackTrace": string(debug.Stack()),
- }).Error("RPC method handler crashed")
- err = errors.New("method handler crashed in SubscribeToOrders RPC call (check logs for stack trace)")
- }
- }()
- subscription, err := SetupOrderStream(ctx, handler.app)
- if err != nil {
- log.WithField("error", err.Error()).Error("internal error in `mesh_subscribe` to `orders` RPC call")
- return nil, constants.ErrInternal
- }
- return subscription, nil
-}
-
-// SetupOrderStream sets up the order stream for a subscription
-func SetupOrderStream(ctx context.Context, app *core.App) (*ethrpc.Subscription, error) {
- notifier, supported := ethrpc.NotifierFromContext(ctx)
- if !supported {
- return ðrpc.Subscription{}, ethrpc.ErrNotificationsUnsupported
- }
-
- rpcSub := notifier.CreateSubscription()
-
- go func() {
- orderEventsChan := make(chan []*zeroex.OrderEvent, orderEventsBufferSize)
- orderWatcherSub := app.SubscribeToOrderEvents(orderEventsChan)
- defer orderWatcherSub.Unsubscribe()
-
- for {
- select {
- case orderEvents := <-orderEventsChan:
- err := notifier.Notify(rpcSub.ID, orderEvents)
- if err != nil {
- // TODO(fabio): The current implementation of `notifier.Notify` returns a
- // `write: broken pipe` error when it is called _after_ the client has
- // disconnected but before the corresponding error is received on the
- // `rpcSub.Err()` channel. This race-condition is not problematic beyond
- // the unnecessary computation and log spam resulting from it. Once this is
- // fixed upstream, give all logs an `Error` severity.
- logEntry := log.WithFields(map[string]interface{}{
- "error": err.Error(),
- "subscriptionType": "orders",
- "orderEvents": len(orderEvents),
- })
- message := "error while calling notifier.Notify"
- // If the network connection disconnects for longer then ~2mins and then comes
- // back up, we've noticed the call to `notifier.Notify` return `i/o timeout`
- // `net.OpError` errors everytime it's called and no values are sent over
- // `rpcSub.Err()` nor `notifier.Closed()`. In order to stop the error from
- // endlessly re-occuring, we unsubscribe and return for encountering this type of
- // error.
- if _, ok := err.(*net.OpError); ok {
- logEntry.Trace(message)
- return
- }
- if strings.Contains(err.Error(), "write: broken pipe") {
- logEntry.Trace(message)
- } else {
- logEntry.Error(message)
- }
- }
- case err := <-rpcSub.Err():
- if err != nil {
- log.WithField("err", err).Error("rpcSub returned an error")
- } else {
- log.Debug("rpcSub was closed without error")
- }
- return
- case <-notifier.Closed():
- return
- }
- }
- }()
-
- return rpcSub, nil
-}
diff --git a/common/types/types.go b/common/types/types.go
index 0e4c84920..af1bf2bc0 100644
--- a/common/types/types.go
+++ b/common/types/types.go
@@ -14,8 +14,7 @@ import (
"github.com/ethereum/go-ethereum/core/types"
)
-// Stats is the return value for core.GetStats. Also used in the browser and RPC
-// interface.
+// Stats is the return value for core.GetStats. Also used in the browser interface.
type Stats struct {
Version string `json:"version"`
PubSubTopic string `json:"pubSubTopic"`
@@ -28,7 +27,7 @@ type Stats struct {
NumOrders int `json:"numOrders"`
NumOrdersIncludingRemoved int `json:"numOrdersIncludingRemoved"`
NumPinnedOrders int `json:"numPinnedOrders"`
- MaxExpirationTime string `json:"maxExpirationTime"`
+ MaxExpirationTime *big.Int `json:"maxExpirationTime"`
StartOfCurrentUTCDay time.Time `json:"startOfCurrentUTCDay"`
EthRPCRequestsSentInCurrentUTCDay int `json:"ethRPCRequestsSentInCurrentUTCDay"`
EthRPCRateLimitExpiredRequests int64 `json:"ethRPCRateLimitExpiredRequests"`
@@ -36,19 +35,19 @@ type Stats struct {
// LatestBlock is the latest block processed by the Mesh node.
type LatestBlock struct {
- Number int `json:"number"`
+ Number *big.Int `json:"number"`
Hash common.Hash `json:"hash"`
}
// GetOrdersResponse is the return value for core.GetOrders. Also used in the
-// browser and RPC interface.
+// browser interface.
type GetOrdersResponse struct {
Timestamp time.Time `json:"timestamp"`
OrdersInfos []*OrderInfo `json:"ordersInfos"`
}
// AddOrdersOpts is a set of options for core.AddOrders. Also used in the
-// browser and RPC interface.
+// browser interface.
type AddOrdersOpts struct {
// Pinned determines whether or not the added orders should be pinned. Pinned
// orders will not be affected by any DDoS prevention or incentive mechanisms
diff --git a/common/types/types_js.go b/common/types/types_js.go
index 74fa68212..e651f57f0 100644
--- a/common/types/types_js.go
+++ b/common/types/types_js.go
@@ -22,7 +22,7 @@ func (r GetOrdersResponse) JSValue() js.Value {
func (l LatestBlock) JSValue() js.Value {
return js.ValueOf(map[string]interface{}{
- "number": l.Number,
+ "number": l.Number.String(),
"hash": l.Hash.String(),
})
}
@@ -44,7 +44,7 @@ func (s Stats) JSValue() js.Value {
"numOrders": s.NumOrders,
"numOrdersIncludingRemoved": s.NumOrdersIncludingRemoved,
"numPinnedOrders": s.NumPinnedOrders,
- "maxExpirationTime": s.MaxExpirationTime,
+ "maxExpirationTime": s.MaxExpirationTime.String(),
"startOfCurrentUTCDay": s.StartOfCurrentUTCDay.String(),
"ethRPCRequestsSentInCurrentUTCDay": s.EthRPCRequestsSentInCurrentUTCDay,
"ethRPCRateLimitExpiredRequests": s.EthRPCRateLimitExpiredRequests,
diff --git a/core/core.go b/core/core.go
index 6ec89a544..d242c2093 100644
--- a/core/core.go
+++ b/core/core.go
@@ -2,6 +2,7 @@
package core
import (
+ "bytes"
"context"
"encoding/json"
"errors"
@@ -784,13 +785,14 @@ func (app *App) periodicallyCheckForNewAddrs(ctx context.Context, startingAddrs
}
}
-// ErrSnapshotNotFound is the error returned when a snapshot not found with a particular id
-type ErrSnapshotNotFound struct {
- id string
+func (app *App) GetOrder(hash common.Hash) (*types.OrderWithMetadata, error) {
+ <-app.started
+ return app.db.GetOrder(hash)
}
-func (e ErrSnapshotNotFound) Error() string {
- return fmt.Sprintf("No snapshot found with id: %s. To create a new snapshot, send a request with an empty snapshotID", e.id)
+func (app *App) FindOrders(query *db.OrderQuery) ([]*types.OrderWithMetadata, error) {
+ <-app.started
+ return app.db.FindOrders(query)
}
// ErrPerPageZero is the error returned when a GetOrders request specifies perPage to 0
@@ -865,11 +867,24 @@ func (app *App) GetOrders(perPage int, minOrderHash common.Hash) (*types.GetOrde
}
// AddOrders can be used to add orders to Mesh. It validates the given orders
-// and if they are valid, will store and eventually broadcast the orders to
-// peers. If pinned is true, the orders will be marked as pinned, which means
-// they will only be removed if they become unfillable and will not be removed
-// due to having a high expiration time or any incentive mechanisms.
-func (app *App) AddOrders(ctx context.Context, signedOrdersRaw []*json.RawMessage, pinned bool) (*ordervalidator.ValidationResults, error) {
+// and if they are valid, will store and broadcast the orders to peers. If pinned
+// is true, the orders will be marked as pinned, which means they will only be
+// removed if they become unfillable and will not be removed due to having a high
+// expiration time or any incentive mechanisms.
+func (app *App) AddOrders(ctx context.Context, signedOrders []*zeroex.SignedOrder, pinned bool) (*ordervalidator.ValidationResults, error) {
+ signedOrdersRaw := []*json.RawMessage{}
+ buf := &bytes.Buffer{}
+ if err := json.NewEncoder(buf).Encode(signedOrders); err != nil {
+ return nil, err
+ }
+ if err := json.NewDecoder(buf).Decode(&signedOrdersRaw); err != nil {
+ return nil, err
+ }
+ return app.AddOrdersRaw(ctx, signedOrdersRaw, pinned)
+}
+
+// AddOrdersRaw is like AddOrders but accepts raw JSON messages.
+func (app *App) AddOrdersRaw(ctx context.Context, signedOrdersRaw []*json.RawMessage, pinned bool) (*ordervalidator.ValidationResults, error) {
<-app.started
allValidationResults := &ordervalidator.ValidationResults{
@@ -955,7 +970,7 @@ func (app *App) AddOrders(ctx context.Context, signedOrdersRaw []*json.RawMessag
log.WithFields(log.Fields{
"orderHash": acceptedOrderInfo.OrderHash.String(),
- }).Debug("added new valid order via RPC or browser callback")
+ }).Debug("added new valid order via GraphQL or browser callback")
// Share the order with our peers.
if err := app.shareOrder(acceptedOrderInfo.SignedOrder); err != nil {
@@ -997,7 +1012,7 @@ func (app *App) GetStats() (*types.Stats, error) {
}
}
if latestMiniHeader != nil {
- latestBlock.Number = int(latestMiniHeader.Number.Int64())
+ latestBlock.Number = latestMiniHeader.Number
latestBlock.Hash = latestMiniHeader.Hash
}
numOrders, err := app.db.CountOrders(&db.OrderQuery{
@@ -1053,7 +1068,7 @@ func (app *App) GetStats() (*types.Stats, error) {
NumPeers: app.node.GetNumPeers(),
NumOrdersIncludingRemoved: numOrdersIncludingRemoved,
NumPinnedOrders: numPinnedOrders,
- MaxExpirationTime: maxExpirationTime.String(),
+ MaxExpirationTime: maxExpirationTime,
StartOfCurrentUTCDay: metadata.StartOfCurrentUTCDay,
EthRPCRequestsSentInCurrentUTCDay: metadata.EthRPCRequestsSentInCurrentUTCDay,
EthRPCRateLimitExpiredRequests: app.ethRPCClient.GetRateLimitDroppedRequests(),
diff --git a/dockerfiles/mesh/Dockerfile b/dockerfiles/mesh/Dockerfile
index 720219f38..ee05c3029 100644
--- a/dockerfiles/mesh/Dockerfile
+++ b/dockerfiles/mesh/Dockerfile
@@ -24,12 +24,9 @@ WORKDIR /usr/mesh
COPY --from=mesh-builder /0x-mesh/mesh /usr/mesh/mesh
-ENV WS_RPC_ADDR=localhost:60557
+ENV GRAPHQL_SERVER_ADDR=0.0.0.0:60557
EXPOSE 60557
-ENV HTTP_RPC_ADDR=localhost:60556
-EXPOSE 60556
-
ENV P2P_TCP_PORT=60558
EXPOSE 60558
ENV P2P_WEBSOCKETS_PORT=60559
diff --git a/docs/db_syncing.md b/docs/db_syncing.md
index 8d16368d3..c6f5d0ca3 100644
--- a/docs/db_syncing.md
+++ b/docs/db_syncing.md
@@ -1,56 +1,105 @@
# How to keep an external database in-sync with a Mesh node
-This guide will walk you through syncing an external database with a Mesh node so that the external database's state mirrors that of the Mesh node (and vice-versa). Whenever new orders are discovered or added to Mesh, they are inserted into the database. If an order is filled, cancelled, or has its fillability changed it is updated or removed from the database. We are assuming that your database is storing both the order itself and the remaining fillable amount (i.e., its `fillableTakerAssetAmount`).
+This guide will walk you through syncing your own database with a Mesh node so that your database's
+state mirrors that of the Mesh node (and vice-versa). Whenever new orders are discovered or added to
+Mesh, they should be inserted into your database. If an order is filled, cancelled, or has its fillability
+changed, you should update or remove it from your database. We are assuming that your database is storing
+both the order itself and associated metadata (e.g., `fillableTakerAssetAmount`).
-## High-level architecture
+This guide fairly advanced, and is specifically written for developers who _need_ to sync their own
+database with Mesh (e.g. in order to join Mesh orders with application-specific data). Note that with
+the introduction of the [GraphQL API](graphql_api.md), most developers do not need to worry about database
+syncing. Instead, you can think of Mesh itself as the database for orders and query it directly. If you
+aren't sure if this guide is for you, try using the [GraphQL API](graphql_api.md) first.
-
+## Standalone or Browser nodes
-Mesh is a stand-alone daemon that will be running independently from the rest of your infrastructure. Your backend will communicate with the Mesh node over [WebSockets](https://en.wikipedia.org/wiki/WebSocket) using [JSON-RPC](https://www.jsonrpc.org/). This is a bi-directional connection allowing both your server to notify Mesh of new orders, and Mesh to notify your server of order updates.
+This guide is written with both standalone and browser nodes in mind and the process for syncing
+your database is very similar.
+
+If you are running a standalone node, you will interact with it via the [GraphQL API](graphql_api.md).
+
+If you are running Mesh directly in the browser via the `@0x/mesh-browser` or `@0x/mesh-browser-lite`
+packages, you will interact with it using the [TypeScript/JavaScript API](browser-bindings/browser/reference.md).
## Initial sync
-When first connecting the DB and Mesh node, we first need to make sure both have the same orders and order-relevant state stored. We do this with the following steps:
+When first connecting the DB and Mesh node, we need to make sure both have the same orders and
+order-relevant state stored. We do this with the following steps:
#### 1. Subscribe to Mesh
-Subscribe to the Mesh node's `orders` subscription over a WS connection. This can be done using our [golang](https://godoc.org/github.com/0xProject/0x-mesh/rpc) or [Typescript/Javascript](json_rpc_clients/typescript/README.md) clients or any other JSON-RPC WebSocket client. Whenever you receive an order event from this subscription, make the appropriate updates to your DB. Each order event has an associated [OrderEventEndState](https://godoc.org/github.com/0xProject/0x-mesh/zeroex#pkg-constants).
+Subscribe to the Mesh node's [`orderEvents` subscription](graphql_api.md#subscribing-to-order-events).
+
+If you are using our TypeScript GraphQL client, you can use the [`onOrderEvents`](browser-bindings/browser/reference.md#onorderevents) method.
-| End state | DB operation |
-| ------------------------------------------ | ------------ |
-| ADDED | Insert |
-| FILLED | Update |
-| FULLY_FILLED, EXPIRED, CANCELLED, UNFUNDED | Remove |
-| FILLABILITY_INCREASED | Upsert |
+If you are using the `@0x/mesh-browser` or `@0x/mesh-browser-lite` packages, you use the method by
+by the same name, [`onOrderEvents`](browser-bindings/browser/reference.md#onorderevents).
-**Note:** Updates refer to updating the order's `fillableTakerAssetAmount` in the DB.
+Whenever you receive an order event from this subscription, make the appropriate updates to your DB. Each
+order event has an associated [OrderEventEndState](https://godoc.org/github.com/0xProject/0x-mesh/zeroex#pkg-constants).
-**Note 2:** If we receive any event other than `ADDED` and `FILLABILITY_INCREASED` for an order we do not find in our database, we ignore the event and noop.
+| End state | DB operation |
+| ------------------------------------------------------------ | ---------------- |
+| ADDED, FILLED, FILLABILITY_INCREASED, UNEXPIRED | Insert or Update |
+| FULLY_FILLED, EXPIRED, CANCELLED, UNFUNDED, STOPPED_WATCHING | Remove |
+
+**Note:** If you receive any event other than `ADDED`, `FILLABILITY_INCREASED`, or `UNEXPIRED`
+for an order we do not find in our database, we ignore the event and noop.
#### 2. Get all orders currently stored in Mesh
-There might have been orders stored in Mesh that the DB doesn't know about at this time. Because of this, we must fetch all currently stored orders in the Mesh node and upsert them in the database. This can be done using the [mesh_getOrders](rpc_api.md#mesh_getorders) JSON-RPC method. This method creates a snapshot of the Mesh node's internal DB of orders when first called, and allows for subsequent paginated requests against this snapshot. Because we are already subscribed to order events, any new orders added/removed after the snapshot is made will be discovered via that subscription.
+There might have been orders stored in Mesh that your DB doesn't know about at this time. Because
+of this, you should fetch all currently stored orders in the Mesh node and upsert them in the database.
+This can be done using the [orders](graphql_api.md#querying-and-filtering-orders) GraphQL query.
-**Note:** The [Mesh Typescript client](json_rpc_clients/typescript/README.md) has a convenience method that does the multiple paginated requests for you under-the-hood. You can simply call the [getOrders](json_rpc_clients/typescript/reference.md#getordersasync) method.
+If you are using our TypeScript GraphQL client, you can use the
+[`getOrdersAsync`](graphql_clients/typescript/reference.md#getordersasync) method.
-#### 3. Add all database orders to the Mesh node
+If you are using the `@0x/mesh-browser` or `@0x/mesh-browser-lite` packages, you can use
+the method by the same name, [`getOrdersAsync`](browser-bindings/browser/reference.md#getordersasync).
-Since there might also be orders added to the database that Mesh doesn't know about, we must also add all DB orders to Mesh. We can do this using the [mesh_addOrders](rpc_api.md#mesh_addorders) JSON-RPC method. This method accepts an array of signed 0x orders and returns which have been accepted and rejected. The accepted orders are returned with their `fillableTakerAssetAmount` and so these amounts should be updated in the database. Rejected orders are rejected with a specific [RejectedOrderStatus](https://godoc.org/github.com/0xProject/0x-mesh/zeroex#pkg-variables), including an identifying `code`.
+Orders may be added or removed while you are getting existing orders from the Mesh DB. For this reason,
+it is important to account for any order events received from step (1) while or after you get the existing
+orders in this step.
-| Code | Reason | Should be retried? |
-| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ------------------ |
-| EthRPCRequestFailed, InternalError | Failure to validate the order | Yes |
-| MaxOrderSizeExceeded, OrderMaxExpirationExceeded, OrderForIncorrectChain, SenderAddressNotAllowed | Failed Mesh-specific criteria | No |
-| OrderHasInvalidMakerAssetData, OrderHasInvalidTakerAssetData, OrderHasInvalidSignature, OrderUnfunded, OrderCancelled, OrderFullyFilled, OrderHasInvalidMakerAssetAmount, OrderHasInvalidTakerAssetAmount, OrderExpired | Invalid or unfillable order | No |
+**Note:** The [Mesh Typescript client](graphql_clients/typescript/README.md) has a convenience method
+that does the multiple paginated requests for you under-the-hood. You can simply call the
+[getOrders](graphql_clients/typescript/reference.md#getordersasync) method.
-If an order was rejected with a code related to the "failure to validate the order" reason above, you can re-try adding the order to Mesh after a back-off period. For all other rejection reasons, the orders should be removed from the database.
+#### 3. Add all database orders to the Mesh node
-#### 4. Handle dropped connections
+Since there might also be orders in your database that Mesh doesn't know about, you should also
+add those orders to Mesh. We can do this using the [addOrders](graphql_api.md#adding-orders)
+GraphQL mutation.
+
+If you are using our TypeScript GraphQL client, you can use the
+[`addOrdersAsync`](graphql_clients/typescript/reference.md#addordersasync) method.
-After performing the first 3 steps above, the Mesh node and database will be in-sync, and continue to remain in-sync thanks to the active order event subscription. If any new orders are added to the database, they will also need to be added to Mesh of course. But what if the WebSocket connection to the Mesh node goes down? In that case, it must be re-established and steps 1, 2 & 3 must be performed once again.
+If you are using the `@0x/mesh-browser` or `@0x/mesh-browser-lite` packages, you can use
+the method by the same name, [`addOrdersAsync`](browser-bindings/browser/reference.md#addordersasync).
-**Note:** The [Mesh Typescript client](json_rpc_clients/typescript/reference.md#getordersasync) takes care of re-connecting and re-establishing _all_ active subscriptions once it detects a disconnection. You can subscribe to a `reconnected` event using the [onReconnected](json_rpc_clients/typescript/reference.md#onreconnected) method. Whenever this callback is fired is when you need to re-run steps 2 and 3.
+This method accepts an array of signed 0x orders and returns which have been accepted
+and rejected. The accepted orders are returned with their `fillableTakerAssetAmount` and so these
+amounts should be updated in the database. Rejected orders are rejected with a specific
+[RejectedOrderStatus](https://godoc.org/github.com/0xProject/0x-mesh/zeroex/ordervalidator), including
+an identifying `code`. The following codes indicate temporary errors and you may try submitting the
+order again (typically with exponential backoff): `INTERNAL_ERROR`, `ETH_RPC_REQUEST_FAILED`, or
+`DATABASE_FULL_OF_ORDERS`. For any other code, the order has been rejected by Mesh and should not
+be retried. If the order exists in your database is should be removed.
+
+#### 4. Handle dropped connections
-**Note 2:** With some WebSocket clients, we've noticed that the client is not always aware of when the connection has been dropped. It can be hard for clients to discern between a network disruption and latency. Because of this, we added an explicit [heartbeat subscription](rpc_api.md#mesh_subscribe-to-heartbeat-topic) to Mesh that you can subscribe to. If a heartbeat isn't received after some interval (e.g., 20 seconds), the client can forcible drop the connection and re-establish a new one. This too is already taken care of under-the-hood for those using the [Mesh Typescript client](json_rpc_clients/typescript/reference.md#getordersasync).
+After performing the first 3 steps above, your database will be in-sync with the Mesh database, and continue to remain
+in-sync thanks to the active order event subscription. If any new orders are added to the database, they will also need
+to be added to Mesh of course. But what if the WebSocket connection to the Mesh node goes down? In that case, it
+must be re-established and steps 1, 2 & 3 must be performed once again.
+
+**Note:** With some WebSocket clients, we've noticed that the client is not always aware of when the connection has been
+dropped. It can be hard for clients to discern between a network disruption and latency. Because of this, our GraphQL server
+uses `GQL_CONNECTION_ACK` and `GQL_CONNECTION_KEEP_ALIVE` messages as described in
+https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md. Our
+[Typescript GraphQL client](graphql_clients/typescript) automatically handles these messages, and
+most other GraphQL clients will too.
Happy database syncing!
diff --git a/docs/deployment.md b/docs/deployment.md
index 5fb42a830..a5aa38259 100644
--- a/docs/deployment.md
+++ b/docs/deployment.md
@@ -14,37 +14,58 @@ node.
- Rinkeby
- [Ganache snapshot](https://cloud.docker.com/u/0xorg/repository/docker/0xorg/ganache-cli)
-## Running Mesh
+## Enabling Telemetry
+
+You can optionally help us develop and maintain Mesh by automatically sending your logs, which
+requires a few extra steps. If you are interested in enabling telemetry, check out
+[this guide](deployment_with_telemetry.md).
-If you would like to participate in the Mesh Beta, check out [this guide](deployment_with_telemetry.md) to deploying a telemetry-enabled Mesh node.
+## Running Mesh
Make sure you have Docker installed. Then run:
```bash
docker run \
--restart unless-stopped \
--p 60557:60557 \
-p 60558:60558 \
-p 60559:60559 \
-e ETHEREUM_CHAIN_ID="1" \
-e ETHEREUM_RPC_URL="{your_ethereum_rpc_url}" \
-e VERBOSITY=5 \
-v {local_path_on_host_machine}/0x_mesh:/usr/mesh/0x_mesh \
-0xorg/mesh:latest
+0xorg/mesh:{version}
```
-You should replace `{your_ethereum_rpc_url}` with the RPC endpoint for an
-Ethereum node and `{local_path_on_host_machine}` with a directory on your host
-machine where all Mesh-related data will be stored.
+1. Replace `{your_ethereum_rpc_url}` with the RPC endpoint for an Ethereum node (e.g. Infura or Alchemy).
+2. Replace and `{local_path_on_host_machine}` with a directory on your host machine where all Mesh-related data will be stored.
+3. Replace `{version}` with [the latest version](https://github.com/0xProject/0x-mesh/releases) of Mesh.
**Notes:**
-- Ports 60557, 60558, and 60559 are the default ports used for the JSON RPC endpoint, communicating with peers over TCP, and communicating with peers over WebSockets, respectively.
+- Ports 60558 and 60559 are the default ports used for communicating with other peers in the network.
- In order to disable P2P order discovery and sharing, set `USE_BOOTSTRAP_LIST` to `false`.
-- Running a VPN may interfere with Mesh. If you are having difficulty connecting to peers, disable your VPN.
- If you are running against a POA testnet (e.g., Kovan), you might want to shorten the `BLOCK_POLLING_INTERVAL` since blocks are mined more frequently then on mainnet. If you do this, your node will use more Ethereum RPC calls, so you will also need to adjust the `ETHEREUM_RPC_MAX_REQUESTS_PER_24_HR_UTC` upwards (_warning:_ changing this setting can exceed the limits of your Ethereum RPC provider).
- If you want to run the mesh in "detached" mode, add the `-d` switch to the docker run command so that your console doesn't get blocked.
+## Enabling the GraphQL API
+
+In order to enable the GraphQL API, you just need to add these additional arguments
+
+```bash
+-p 60557:60557 \
+-e ENABLE_GRAPHQL_SERVER=true \
+```
+
+Additionally, to enable the GraphQL playground, just add:
+
+```
+-e ENABLE_GRAPHQL_PLAYGROUND=true \
+```
+
+Note that the GraphQL API is intended to be _private_. If you enable the GraphQL API on
+a production server, we recommend using a firewall or VPC to prevent unauthorized access.
+See [the GraphQL API page](graphql_api.md) for more information.
+
## Persisting State
The Docker container is configured to store all Mesh state (e.g. database files,
@@ -122,14 +143,15 @@ type Config struct {
// is typically only needed for testing on custom chains/networks. The given
// addresses are added to the default list of addresses for known chains/networks and
// overriding any contract addresses for known chains/networks is not allowed. The
- // addresses for exchange, devUtils, erc20Proxy, and erc721Proxy are required
+ // addresses for exchange, devUtils, erc20Proxy, erc721Proxy and erc1155Proxy are required
// for each chain/network. For example:
//
// {
// "exchange":"0x48bacb9266a570d521063ef5dd96e61686dbe788",
// "devUtils": "0x38ef19fdf8e8415f18c307ed71967e19aac28ba1",
// "erc20Proxy": "0x1dc4c1cefef38a777b15aa20260a54e584b16c48",
- // "erc721Proxy": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401"
+ // "erc721Proxy": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401",
+ // "erc1155Proxy": "0x64517fa2b480ba3678a2a3c0cf08ef7fd4fad36f"
// }
//
CustomContractAddresses string `envvar:"CUSTOM_CONTRACT_ADDRESSES" default:""`
@@ -158,18 +180,32 @@ type Config struct {
// all the required fields) are automatically included. For more information
// on JSON Schemas, see https://json-schema.org/
CustomOrderFilter string `envvar:"CUSTOM_ORDER_FILTER" default:"{}"`
+ // MaxBytesPerSecond is the maximum number of bytes per second that a peer is
+ // allowed to send before failing the bandwidth check. Defaults to 5 MiB.
+ MaxBytesPerSecond float64 `envvar:"MAX_BYTES_PER_SECOND" default:"5242880"`
}
```
-There is one additional environment variable in the [main entrypoint for the
+There are some additional environment variable in the [main entrypoint for the
Mesh executable](../cmd/mesh/main.go):
```go
type standaloneConfig struct {
- // WSRPCAddr is the interface and port to use for the JSON-RPC API over
- // WebSockets. By default, 0x Mesh will listen on localhost and port 60557.
- WSRPCAddr string `envvar:"WS_RPC_ADDR" default:"localhost:60557"`
- // HTTPRPCAddr is the interface and port to use for the JSON-RPC API over
- // HTTP. By default, 0x Mesh will listen on localhost and port 60556.
- HTTPRPCAddr string `envvar:"HTTP_RPC_ADDR" default:"localhost:60556"`}
+ // EnableGraphQLServer determines whether or not to enable the GraphQL server.
+ // If enabled, GraphQL queries can be sent to GraphQLServerAddr at the /graphql
+ // URL. By default, the GraphQL server is disabled. Please be aware that the GraphQL
+ // API is intended to be a *private* API. If you enable the GraphQL server in
+ // production we recommend using a firewall/VPC or an authenticated proxy to restrict
+ // public access.
+ EnableGraphQLServer bool `envvar:"ENABLE_GRAPHQL_SERVER" default:"false"`
+ // GraphQLServerAddr is the interface and port to use for the GraphQL API.
+ // By default, 0x Mesh will listen on 0.0.0.0 (all available addresses) and
+ // port 60557.
+ GraphQLServerAddr string `envvar:"GRAPHQL_SERVER_ADDR" default:"0.0.0.0:60557"`
+ // EnableGraphQLPlayground determines whether or not to enable GraphiQL, an interactive
+ // GraphQL playground which can be accessed by visiting GraphQLServerAddr in a browser.
+ // See https://github.com/graphql/graphiql for more information. By default, GraphiQL
+ // is disabled.
+ EnableGraphQLPlayground bool `envvar:"ENABLE_GRAPHQL_PLAYGROUND" default:"false"`
+}
```
diff --git a/docs/deployment_with_telemetry.md b/docs/deployment_with_telemetry.md
index afdf5d441..d671e7ade 100644
--- a/docs/deployment_with_telemetry.md
+++ b/docs/deployment_with_telemetry.md
@@ -53,8 +53,8 @@ services:
environment:
- VERBOSITY=5
- ETHEREUM_CHAIN_ID=1
- - WS_RPC_ADDR=mesh:60557
- - HTTP_RPC_ADDR=mesh:60556
+ - ENABLE_GRAPHQL_SERVER=true
+ - GRAPHQL_SERVER_ADDR=mesh:60557
# Set your backing Ethereum JSON RPC endpoint below
- ETHEREUM_RPC_URL=
- BLOCK_POLLING_INTERVAL=5s
@@ -90,37 +90,38 @@ services:
In most cases, the only change you need to make to the **docker-compose.yml**
file is to set `ETHEREUM_RPC_URL` to your own Ethereum JSON RPC endpoint. The
-`WS_RPC_ADDR` and `HTTP_RPC_ADDR` above will allow any Docker containers running in the same Docker
-Compose file to access the Mesh RPC API via
+`GRAPHQL_SERVER_ADDR` above will allow any Docker containers running in the same Docker
+Compose file to access the Mesh GraphQL API via
[links](https://docs.docker.com/compose/networking/#links). To use this feature,
be sure to add the following line to any containers you wish to access the Mesh
-RPC API from:
+GraphQL API from:
```
links:
- mesh
```
-You can then use the URL `ws://mesh:60557` to access the RPC API.
+You can then use the URL `http://mesh:60557/graphql` or `ws://mesh:60557/graphql`
+to access the GraphQL API.
-Alternatively, if you want to open up your Mesh RPC API to the public internet,
-you can set `WS_RPC_ADDR=0.0.0.0:60557` and `HTTP_RPC_ADDR=0.0.0.0:60556`. If
-you choose to go this route, we strongly recommend using an external firewall
-to restrict who can access your RPC API.
+Alternatively, if you want to open up your Mesh GraphQL API to the public internet,
+you can set `GRAPHQL_SERVER_ADDR=0.0.0.0:60557` If you choose to go this route,
+we strongly recommend using a firewall or VPC to restrict who can access your
+GraphQL API.
### Deploying with Docker Machine
We are now ready to deploy our instance. Before we can continue, you will need
to set up an account with the cloud hosting provider of your choice, and
retrieve your access token/key/secret. We will use them to create a new machine
-with name `mesh-beta`. Docker has great documentation on doing all of that for
+with name `mesh-node`. Docker has great documentation on doing all of that for
[DigitalOcean](https://docs.docker.com/machine/examples/ocean/) and
[AWS](https://docs.docker.com/machine/examples/aws/). Instead of naming the
-machine `docker-sandbox` as in those examples, let's name ours `mesh-beta` as
+machine `docker-sandbox` as in those examples, let's name ours `mesh-node` as
shown below.
```bash
-docker-machine create --driver digitalocean --digitalocean-access-token xxxxx mesh-beta
+docker-machine create --driver digitalocean --digitalocean-access-token xxxxx mesh-node
```
Make sure you replaced `xxxxx` with your access token. This command will spin up
@@ -135,15 +136,15 @@ docker-machine ls
You should see something like:
```
-mesh-beta - digitalocean Running tcp://162.31.121.332:2376 v18.09.7
+mesh-node - digitalocean Running tcp://162.31.121.332:2376 v18.09.7
```
Now comes the Docker Machine magic. By running the following commands, we can
ask Docker Machine to let us execute any Docker command in our local shell AS IF
-we were executing them directly on the `mesh-beta` machine:
+we were executing them directly on the `mesh-node` machine:
```bash
-eval $(docker-machine env mesh-beta)
+eval $(docker-machine env mesh-node)
```
Presto! We are now ready to spin up our telemetry-enabled Mesh node! We do this
@@ -163,6 +164,12 @@ docker logs -f
Instead of reading them from the `0xorg/mesh` container.
+If you need to see the IP address of your Mesh node, use:
+
+```
+docker-machine ip mesh-node
+```
+
Finally, in order to prevent our log aggregation stack from getting overloaded,
we whitelist the peers that are allowed to send us logs. Look for a field in the
logs called `myPeerID`:
@@ -174,16 +181,10 @@ logs called `myPeerID`:
```
Ping us in [Discord](https://discord.gg/HF7fHwk) and let us know your peer ID.
-You can DM `fabio#1058`, `Alex Browne | 0x#2975` or `ovrmrrw#0454` and we'll
+You can DM `alex_towle#0282` or `ovrmrrw#0454` and we'll
whitelist your node :)
I hope that was easy enough! If you ran into any issues, please ping us in the
`#mesh` channel on [Discord](https://discord.gg/HF7fHwk). To learn more about
-connecting to your Mesh node's JSON RPC interface, check out the
-[JSON-RPC API Documentation](rpc_api.md). Your node's JSON RPC endpoint
-should be available at `ws://:60557` and you can discover your
-machine's IP address by running:
-
-```
-docker-machine ip mesh-beta
-```
+connecting to your Mesh node's GraphQL API, check out the
+[GraphQL API Documentation](graphql_api.md).
diff --git a/docs/graphql_api.md b/docs/graphql_api.md
new file mode 100644
index 000000000..85dc63211
--- /dev/null
+++ b/docs/graphql_api.md
@@ -0,0 +1,348 @@
+[![Version](https://img.shields.io/badge/version-development-orange.svg)](https://github.com/0xProject/0x-mesh/releases)
+
+# 0x Mesh GraphQL API Documentation
+
+The GraphQL API is intended to be a _private_ API. The API should only be
+accessible to the developers running the Mesh node and should not be exposed to
+the public. The API runs on a separate port from the peer-to-peer protocols and
+access to it can be controlled via a firewall.
+
+Peers in the network do not use the GraphQL API and instead use a peer-to-peer
+PubSub mechanism (usually this is not something you need to worry about).
+
+## About GraphQL
+
+[GraphQL](https://graphql.org/) is a structured query language for APIs. It:
+
+- Is transport layer agnostic (e.g. HTTP, WebSockets, or calling a function).
+- Is type-safe and uses well-structured schemas.
+- Has wide support across many programming languages.
+- Has great tooling (including automatic doc generation and playground environments).
+- Features built-in support for subscriptions.
+- Allows clients to only receive the data that they need in the format that they need it.
+
+## Playground Environment
+
+We have deployed a public playground environment for exploring the GraphQL API. You can access the playground
+at [https://meshmock.spaceship.0x.org/](https://meshmock.spaceship.0x.org/). It supports auto-completion,
+syntax highlighting, and subscriptions. In addition, interactive documentation for the API can be found
+by clicking the "docs" button on the righthand side of the screen. See the Example Queries section below
+for some queries to try.
+
+## Recommended Clients:
+
+- [Typescript GraphQL client](graphql_clients/typescript/README.md).
+- [Go GraphQL client](https://godoc.org/github.com/0xProject/0x-mesh/graphql/client).
+- For any other languages see the [GraphQL page on recommended clients](https://graphql.org/code/#graphql-clients).
+
+If you prefer, you can also [send requests directly over HTTP](https://graphql.org/learn/serving-over-http/)
+without using a dedicated client.
+
+## Example Queries
+
+This section includes some example queries which you can copy and paste in the playground. Of course, you would
+typically write queries programmatically with a GraphQL client, not by manually writing them. This is just for
+illustrative purposes.
+
+### Getting a Specific Order
+
+You can get the details for any order by its hash:
+
+```graphql
+{
+ order(hash: "0x38c1b56f95bf168b303e4b62d64f7f475f2ac34124e9678f0bd852f95a4ca377") {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ remainingFillableTakerAssetAmount
+ }
+}
+```
+
+### Querying and Filtering Orders
+
+You can get all orders via the `orders` query. By default, it will return up to 100 orders at a time sorted by their hash. You can
+also change the number of orders returned via the `limit` argument.
+
+```graphql
+{
+ orders {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ remainingFillableTakerAssetAmount
+ }
+}
+```
+
+The `orders` query supports many different options. Here's an example of how to get orders with a minimum `expirationTimeSeconds`
+and minimum `remainingFillableAssetAmount`. You can use this to exclude dust orders and orders which may expire too soon.
+
+```graphql
+{
+ orders(
+ filters: [
+ { field: remainingFillableTakerAssetAmount, kind: GREATER_OR_EQUAL, value: "150000" }
+ { field: expirationTimeSeconds, kind: GREATER_OR_EQUAL, value: "1598733429" }
+ ]
+ ) {
+ hash
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ expirationTimeSeconds
+ remainingFillableTakerAssetAmount
+ }
+}
+```
+
+Here's an example of sorting orders by the `remainingFillableAssetAmount`. You can combine any number
+of filters and sorts in an `orders` query.
+
+```graphql
+{
+ orders(sort: [{ field: remainingFillableTakerAssetAmount, direction: DESC }]) {
+ hash
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ expirationTimeSeconds
+ remainingFillableTakerAssetAmount
+ }
+}
+```
+
+### Adding Orders
+
+You can add orders using a [`mutation`](https://graphql.org/learn/queries/#mutations).
+
+```graphql
+mutation AddOrders {
+ addOrders(
+ orders: [
+ {
+ signature: "0x1c91055b1ce93cdd341c423b889be703ce436e25fe62d94aabbae97528b4d247646c3cd3a20f0566540ac5668336d147d844cf1a7715d700f1a7c3e72f1c60e21502"
+ senderAddress: "0x0000000000000000000000000000000000000000"
+ makerAddress: "0xd965a4f8f5b49dd2f5ba83ef4e61880d0646fd00"
+ takerAddress: "0x0000000000000000000000000000000000000000"
+ makerFee: "1250000000000000"
+ takerFee: "0"
+ makerAssetAmount: "50000000000000000"
+ takerAssetAmount: "10"
+ makerAssetData: "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
+ takerAssetData: "0xa7cb5fb7000000000000000000000000d4690a51044db77d91d7aa8f7a3a5ad5da331af0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000e3a2a1f2146d86a604adc220b4967a898d7fe0700000000000000000000000009a379ef7218bcfd8913faa8b281ebc5a2e0bc040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001360000000000000000000000000000000000000000000000000000000000000004"
+ salt: "1584796917698"
+ exchangeAddress: "0x61935cbdd02287b511119ddb11aeb42f1593b7ef"
+ feeRecipientAddress: "0x0d056bb17ad4df5593b93a1efc29cb35ba4aa38d"
+ expirationTimeSeconds: "1595164917"
+ makerFeeAssetData: "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
+ chainId: 1
+ takerFeeAssetData: "0x"
+ }
+ {
+ signature: "0x1bf931ab06551bbbd3a7e272ca4833503d768caca2cac564b157b46c906c7b41c57fd6146b500e1ad2dac729c351142764cb76efc975c6d7c64aef6cf7930c075d02"
+ senderAddress: "0x0000000000000000000000000000000000000000"
+ makerAddress: "0x0c5fa5fa51d84227bfacdc56b36329286b37d051"
+ takerAddress: "0x0000000000000000000000000000000000000000"
+ makerFee: "0"
+ takerFee: "0"
+ makerAssetAmount: "50911000000000000"
+ takerAssetAmount: "10000000000000000000"
+ makerAssetData: "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
+ takerAssetData: "0xf47261b000000000000000000000000058b6a8a3302369daec383334672404ee733ab239"
+ salt: "1590244702461"
+ exchangeAddress: "0x61935cbdd02287b511119ddb11aeb42f1593b7ef"
+ feeRecipientAddress: "0xa258b39954cef5cb142fd567a46cddb31a670124"
+ expirationTimeSeconds: "1592663792"
+ makerFeeAssetData: "0x"
+ chainId: 1
+ takerFeeAssetData: "0x"
+ }
+ ]
+ ) {
+ accepted {
+ order {
+ hash
+ }
+ isNew
+ }
+ rejected {
+ hash
+ code
+ message
+ }
+ }
+}
+```
+
+### Subscribing to Order Events
+
+You can subscribe to order events via a [`subscription`](https://graphql.org/blog/subscriptions-in-graphql-and-relay/).
+
+```graphql
+subscription {
+ orderEvents {
+ timestamp
+ endState
+ order {
+ hash
+ remainingFillableTakerAssetAmount
+ }
+ }
+}
+```
+
+### Getting Stats
+
+You can get some stats about your Mesh node via the `stats` query.
+
+```graphql
+{
+ stats {
+ version
+ pubSubTopic
+ rendezvous
+ peerID
+ ethereumChainID
+ latestBlock {
+ number
+ hash
+ }
+ numPeers
+ numOrders
+ numOrdersIncludingRemoved
+ startOfCurrentUTCDay
+ ethRPCRequestsSentInCurrentUTCDay
+ ethRPCRateLimitExpiredRequests
+ maxExpirationTime
+ }
+}
+```
+
+## Additional Tips
+
+### Pagination
+
+We recommend paginating through orders by using `filters` and `limit`. So for example, if you want to sort orders by their hash
+(which is the default), you first send a query without any filters:
+
+```graphql
+{
+ orders {
+ hash
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ expirationTimeSeconds
+ remainingFillableTakerAssetAmount
+ }
+}
+```
+
+The orders in the response will be sorted by `hash` (which is the default). Look at the last order you received,
+which in this case has a hash of `0x75d2b56b11f21235ec8faec8be9d081090678cf62f5c69fa118236d829424719`. Send the
+next request by using the last hash you received in a filter:
+
+```graphql
+{
+ orders(
+ filters: [
+ { field: hash, kind: GREATER, value: "0x75d2b56b11f21235ec8faec8be9d081090678cf62f5c69fa118236d829424719" }
+ ]
+ ) {
+ hash
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ expirationTimeSeconds
+ remainingFillableTakerAssetAmount
+ }
+}
+```
+
+This will return any orders with a hash greater than `0x75d2b56b11f21235ec8faec8be9d081090678cf62f5c69fa118236d829424719`.
+Repeat this process, changing the `hash` each time, until there are no orders left.
+
+There may be orders added or removed while you are in the process of paginating. Following this method guarantees that:
+
+1. No order will be included more than once.
+2. Any order which was present at the start of pagination _and_ at the end of pagination will be included.
+3. Any order which was added or removed after pagination started may or may not be included.
+
+### Query Fragments
+
+GraphQL requires you to specify all the fields that you want included in the response. However, you
+can use [query fragments](https://graphql.org/learn/queries/#fragments) to avoid repeating the same
+fields over and over. Here's an example of a query fragment that includes all the fields of an order.
+
+```graphql
+fragment AllOrderFields on OrderWithMetadata {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ remainingFillableTakerAssetAmount
+}
+
+{
+ order(hash: "0x06d15403630b6d73fbacbf0864eb76c2db3d6e6fc8adec8a95fc536593f17c54") {
+ ...AllOrderFields
+ }
+}
+```
diff --git a/docs/mesh_db_sync_diagram.png b/docs/mesh_db_sync_diagram.png
deleted file mode 100644
index 0d06793d4..000000000
Binary files a/docs/mesh_db_sync_diagram.png and /dev/null differ
diff --git a/docs/rpc_api.md b/docs/rpc_api.md
deleted file mode 100644
index f877c5117..000000000
--- a/docs/rpc_api.md
+++ /dev/null
@@ -1,373 +0,0 @@
-[![Version](https://img.shields.io/badge/version-development-orange.svg)](https://github.com/0xProject/0x-mesh/releases)
-
-# 0x Mesh JSON-RPC API Documentation
-
-The JSON-RPC API is intended to be a _private_ API. The API should only be
-accessible to the developers running the Mesh node and should not be exposed to
-the public. The API runs on a separate port from the peer-to-peer protocols and
-access to it can be controlled via a firewall.
-
-Peers in the network do not use the JSON-RPC API and instead use a peer-to-peer
-PubSub mechanism (usually this is not something you need to worry about).
-
-## Similarities to the Ethereum JSON-RPC API
-
-Our JSON-RPC API is very similar to the
-[Ethereum JSON-RPC API](https://github.com/ethereum/wiki/wiki/JSON-RPC); we even
-use a lot of the same code from `go-ethereum`.
-
-Some key differences:
-
-- It is only accessible via HTTP and WebSocket transports (IPC not supported)
-- uint256 amounts should not be hex encoded, but rather sent as numerical strings
-
-Since the API adheres to the [JSON-RPC 2.0 spec](https://www.jsonrpc.org/specification),
-you can use any JSON-RPC 2.0 compliant client in the language of your choice.
-The clients made for Ethereum work even better since they extend the standard to
-include [subscriptions](https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB).
-
-### Recommended Clients:
-
-- Javascript/Typescript: We've published a [Typescript RPC client](json_rpc_clients/typescript/README.md).
-- Python: [Web3.py](https://github.com/ethereum/web3.py) has a [WebSocketProvider](https://web3py.readthedocs.io/en/stable/providers.html#web3.providers.websocket.WebsocketProvider) you can use.
-- Go: Mesh ships with a [Golang RPC client](https://godoc.org/github.com/0xProject/0x-mesh/rpc#Client)
- - see the [examples](../examples/go/) directory for example usage.
-
-## API
-
-### `mesh_addOrders`
-
-Adds an array of 0x signed orders to the Mesh node.
-
-**Example payload:**
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_addOrders",
- "params": [
- [
- {
- "makerAddress": "0x6440b8c5f5a3c725eb394c7c40994afaf50a0d39",
- "takerAddress": "0x0000000000000000000000000000000000000000",
- "feeRecipientAddress": "0xa258b39954cef5cb142fd567a46cddb31a670124",
- "senderAddress": "0x0000000000000000000000000000000000000000",
- "makerAssetAmount": "1233400000000000",
- "takerAssetAmount": "12334000000000000000000",
- "makerFee": "0",
- "takerFee": "0",
- "exchangeAddress": "0x080bf510fcbf18b91105470639e9561022937712",
- "chainId": 1,
- "expirationTimeSeconds": "1560917245",
- "signature": "0x1b6a49302774b0b0e14ef59e91fcf950dfb7db5705ae6929e06198518b1105301d4ef94b1b4760e550378bb5b7746b1a29c174290afe9448324cef4112dd03d7a103",
- "salt": "1545196045897",
- "makerAssetData": "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
- "makerFeeAssetData": "0x",
- "takerAssetData": "0xf47261b00000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef",
- "takerFeeAssetData": "0x"
- }
- ]
- ],
- "id": 1
-}
-```
-
-**Example response:**
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 2,
- "result": {
- "accepted": [
- {
- "orderHash": "0x4e7269386c8f2234305aafb421ba470f39064d79c4826006eaffe723b2066272",
- "signedOrder": {
- "makerAddress": "0x8cff49b26d4d13e0601769f8a60fd697b713b9c6",
- "makerAssetData": "0xf47261b0000000000000000000000000c778417e063141139fce010982780140aa0cd5ab",
- "makerFeeAssetData": "0x",
- "makerAssetAmount": "100000000000000000",
- "makerFee": "0",
- "takerAddress": "0x0000000000000000000000000000000000000000",
- "takerAssetData": "0xf47261b0000000000000000000000000ff67881f8d12f372d91baae9752eb3631ff0ed00",
- "takerFeeAssetData": "0x",
- "takerAssetAmount": "1000000000000000000",
- "takerFee": "0",
- "senderAddress": "0x0000000000000000000000000000000000000000",
- "exchangeAddress": "0x080bf510fcbf18b91105470639e9561022937712",
- "chainId": 1,
- "feeRecipientAddress": "0x0000000000000000000000000000000000000000",
- "expirationTimeSeconds": "1559826927",
- "salt": "48128453606684653105952683301312821720867493716494911784363103883716429240740",
- "signature": "0x1cf5839d9a0025e684c3663151b1db14533cc8c9e495fb92543a37a7fffc0677a23f3b6d66a1f56d3fda46eb5277b4a91c7b7faad4fdaaa5aac9a1185dd545a8a002"
- },
- "fillableTakerAssetAmount": 1000000000000000000
- }
- ],
- "rejected": []
- }
-}
-```
-
-Within the context of this endpoint:
-
-- _accepted_: means the order was found to be fillable for a non-zero amount and was therefore added to 0x Mesh (unless it already added of course)
-- _rejected_: means the order was not added to Mesh, however there could be many reasons for this. For example:
- - The order could have been unfillable
- - It could have failed some Mesh-specific validation (e.g., max order acceptable size in bytes)
- - The network request to the Ethereum RPC endpoint used to validate the order failed
-
-Some _rejected_ reasons warrant attempting to add the order again. Currently, the only reason we recommend re-trying adding the order is for the `NetworkRequestFailed` status code. Make sure to leave some time between attempts.
-
-See the [AcceptedOrderInfo](https://godoc.org/github.com/0xProject/0x-mesh/zeroex/ordervalidator#AcceptedOrderInfo) and [RejectedOrderInfo](https://godoc.org/github.com/0xProject/0x-mesh/zeroex/ordervalidator#RejectedOrderInfo) type definitions as well as all the possible [RejectedOrderStatus](https://godoc.org/github.com/0xProject/0x-mesh/zeroex/ordervalidator#pkg-variables) types that could be returned.
-
-**Note:** The `fillableTakerAssetAmount` takes into account the amount of the order that has already been filled AND the maker's balance/allowance. Thus, it represents the amount this order could _actually_ be filled for at this moment in time.
-
-### `mesh_getOrders`
-
-Gets orders already stored in a Mesh node at a particular snapshot of the DB state. This is a paginated endpoint with parameters (page, perPage and snapshotID).
-
-**Example payload:**
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_getOrders",
- "params": [1, 100, ""],
- "id": 1
-}
-```
-
-This payload is requesting 100 orders from the 1st page (think: offset). The third parameter is the `snapshotID` which should be left empty for the first request. The response will include the snapshotID that can then be supplied in subsequent requests.
-
-**Example response:**
-
-```json
-{
- "jsonrpc": "2.0",
- "result": {
- "snapshotID": "f47ac10b-58cc-0372-8567-0e02b2c3d479",
- "ordersInfos": [
- {
- "orderHash": "0xa0fcb54919f0b3823aa14b3f511146f6ac087ab333a70f9b24bbb1ba657a4250",
- "signedOrder": {
- "makerAddress": "0xa3eCE5D5B6319Fa785EfC10D3112769a46C6E149",
- "makerAssetData": "0xf47261b0000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498",
- "makerFeeAssetData": "0x",
- "makerAssetAmount": "1000000000000000000",
- "makerFee": "0",
- "takerAddress": "0x0000000000000000000000000000000000000000",
- "takerAssetData": "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
- "takerFeeAssetData": "0x",
- "takerAssetAmount": "10000000000000000000000",
- "takerFee": "0",
- "senderAddress": "0x0000000000000000000000000000000000000000",
- "exchangeAddress": "0x080bf510fcbf18b91105470639e9561022937712",
- "chainId": 1,
- "feeRecipientAddress": "0x0000000000000000000000000000000000000000",
- "expirationTimeSeconds": "1586340602",
- "salt": "41253767178111694375645046549067933145709740457131351457334397888365956743955",
- "signature": "0x1c0827552a3bde2c72560362950a69f581ae7a1e6fa8c160bb437f3a61002bb96c22b646edd3b103b976db4aa4840a11c13306b2a02a0bb6ce647806c858c238ec02"
- },
- "fillableTakerAssetAmount": "10000000000000000000000"
- }
- ]
- },
- "id": 1
-}
-```
-
-### `mesh_getStats`
-
-Gets certain configurations and stats about a Mesh node.
-
-**Example payload:**
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_getStats",
- "params": [],
- "id": 1
-}
-```
-
-**Example response:**
-
-```json
-{
- "jsonrpc": "2.0",
- "result": {
- "version": "development",
- "pubSubTopic": "/0x-orders/network/1/version/1",
- "rendezvous": "/0x-mesh/network/1/version/1",
- "peerID": "16Uiu2HAmGx8Z6gdq5T5AQE54GMtqDhDFhizywTy1o28NJbAMMumF",
- "ethereumChainID": 1,
- "latestBlock": {
- "number": 8253150,
- "hash": "0x84aaae84147fc42fc77b33e2d3e05d86272663792d9cacaa8dc89f207b4d0642"
- },
- "numPeers": 18,
- "numOrders": 1095,
- "numOrdersIncludingRemoved": 1134,
- "startOfCurrentUTCDay": "1257811200",
- "ethRPCRequestsSentInCurrentUTCDay": 5039,
- "ethRPCRateLimitExpiredRequests": 0,
- "maxExpirationTime": "717784680"
- },
- "id": 1
-}
-```
-
-### `mesh_subscribe` to `orders` topic
-
-Allows the caller to subscribe to a stream of `OrderEvents`. An `OrderEvent` contains either newly discovered orders found by Mesh via the P2P network, or updates to the fillability of a previously discovered order (e.g., if an order gets filled, cancelled, expired, etc...). `OrderEvent`s _do not_ correspond 1-to-1 to smart contract events. Rather, an `OrderEvent` about an orders fillability change represents the aggregate change to it's fillability given _all_ the transactions included within the most recently mined/reverted blocks.
-
-**Example:** If an order is both `filled` and `cancelled` within a single block, the `EndState`
-of the `OrderEvent` will be `CANCELLED` (since this is the final state of the order after this block is
-mined). The `OrderEvent` _will_ however list the contract events intercepted that could have impacted
-this orders fillability. This list will include both the fill event and cancellation event.
-
-Mesh has implemented subscriptions in the [same manner as Geth](https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB). In order to start a subscription, you must send the following payload:
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_subscribe",
- "params": ["orders"],
- "id": 1
-}
-```
-
-**Example response:**
-
-```json
-{
- "jsonrpc": "2.0",
- "result": "0xcd0c3e8af590364c09d0fa6a1210faf5",
- "id": 1
-}
-```
-
-`result` contains the `subscriptionId` that uniquely identifies this subscription. The subscription is now active. You will now receive event payloads from Mesh of the following form:
-
-**Example event:**
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_subscription",
- "params": {
- "subscription": "0xcd0c3e8af590364c09d0fa6a1210faf5",
- "result": [
- {
- "orderHash": "0x96e6eb6174dbf0458686bdae44c9a330d9a9eb563962512a7be545c4ecc13fd4",
- "signedOrder": {
- "makerAddress": "0x50f84bbee6fb250d6f49e854fa280445369d64d9",
- "makerAssetData": "0xf47261b00000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc942",
- "makerFeeAssetData": "0x",
- "makerAssetAmount": "4424020538752105500000",
- "makerFee": "0",
- "takerAddress": "0x0000000000000000000000000000000000000000",
- "takerAssetData": "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
- "takerFeeAssetData": "0x",
- "takerAssetAmount": "1000000000000000061",
- "takerFee": "0",
- "senderAddress": "0x0000000000000000000000000000000000000000",
- "exchangeAddress": "0x080bf510fcbf18b91105470639e9561022937712",
- "chainId": 1,
- "feeRecipientAddress": "0xa258b39954cef5cb142fd567a46cddb31a670124",
- "expirationTimeSeconds": "1559422407",
- "salt": "1559422141994",
- "signature": "0x1cf16c2f3a210965b5e17f51b57b869ba4ddda33df92b0017b4d8da9dacd3152b122a73844eaf50ccde29a42950239ba36a525ed7f1698a8a5e1896cf7d651aed203"
- },
- "endState": "CANCELLED",
- "fillableTakerAssetAmount": 0,
- "contractEvents": [
- {
- "blockHash": "0x1be2eb6174dbf0458686bdae44c9a330d9a9eb563962512a7be545c4ec11a4d2",
- "txHash": "0xbcce172374dbf0458686bdae44c9a330d9a9eb563962512a7be545c4ec232e3a",
- "txIndex": 23,
- "logIndex": 0,
- "isRemoved": false,
- "address": "0x4f833a24e1f95d70f028921e27040ca56e09ab0b",
- "kind": "ExchangeCancelEvent",
- "parameters": {
- "makerAddress": "0x50f84bbee6fb250d6f49e854fa280445369d64d9",
- "senderAddress": "0x0000000000000000000000000000000000000000",
- "feeRecipientAddress": "0xa258b39954cef5cb142fd567a46cddb31a670124",
- "orderHash": "0x96e6eb6174dbf0458686bdae44c9a330d9a9eb563962512a7be545c4ecc13fd4",
- "makerAssetData": "0xf47261b00000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc942",
- "takerAssetData": "0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
- }
- }
- ]
- }
- ]
- }
-}
-```
-
-See the [OrderEvent](https://godoc.org/github.com/0xProject/0x-mesh/zeroex#OrderEvent) type declaration as well as the [OrderEventEndState](https://godoc.org/github.com/0xProject/0x-mesh/zeroex#pkg-constants) types for a complete list of the events that could be emitted.
-
-To unsubscribe, send a `mesh_unsubscribe` request specifying the `subscriptionId`.
-
-**Example unsubscription payload:**
-
-```json
-{
- "id": 1,
- "method": "mesh_unsubscribe",
- "params": ["0xcd0c3e8af590364c09d0fa6a1210faf5"]
-}
-```
-
-### `mesh_subscribe` to `heartbeat` topic
-
-After a sustained network disruption, it is possible that a WebSocket connection between client and server fails to reconnect. Both sides of the connection are unable to distinguish between network latency and a dropped connection and might continue to wait for new messages on the dropped connection. In order to avoid this, and promptly establish a new connection, clients can subscribe to a heartbeat from the server. The server will emit a heartbeat every 5 seconds. If the client hasn't received the expected heartbeat in a while, it can proactively close the connection and establish a new one. There are affordances for checking this edge-case in the [WebSocket specification](https://tools.ietf.org/html/rfc6455#section-5.5.2) however our research has found that [many WebSocket clients](https://github.com/0xProject/0x-mesh/issues/170#issuecomment-503391627) fail to provide this functionality. We therefore decided to support it at the application-level.
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_subscribe",
- "params": ["heartbeat"],
- "id": 1
-}
-```
-
-**Example response:**
-
-```json
-{
- "jsonrpc": "2.0",
- "result": "0xab1a3e8af590364c09d0fa6a12103ada",
- "id": 1
-}
-```
-
-`result` contains the `subscriptionId` that uniquely identifies this subscription. The subscription is now active. You will now receive event payloads from Mesh of the following form:
-
-**Example event:**
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "mesh_subscription",
- "params": {
- "subscription": "0xab1a3e8af590364c09d0fa6a12103ada",
- "result": "tick"
- }
-}
-```
-
-To unsubscribe, send a `mesh_unsubscribe` request specifying the `subscriptionId`.
-
-**Example unsubscription payload:**
-
-```json
-{
- "id": 1,
- "method": "mesh_unsubscribe",
- "params": ["0xab1a3e8af590364c09d0fa6a12103ada"]
-}
-```
diff --git a/docs/summary.md b/docs/summary.md
index 2b8eb9eb8..601851821 100644
--- a/docs/summary.md
+++ b/docs/summary.md
@@ -4,7 +4,7 @@
- [Deployment guide](deployment.md)
- [Deploying a Telemetry-Enabled Mesh Node](deployment_with_telemetry.md)
-- [JSON-RPC API documentation](rpc_api.md)
+- [GraphQL API documentation](graphql_api.md)
- [Browser API documentation](browser-bindings/browser/reference.md)
- [Browser-Lite API documentation](browser-bindings/browser-lite/reference.md)
- [Browser guide](browser.md)
@@ -14,11 +14,11 @@
- [Custom order filters](custom_order_filters.md)
- [Syncing an external DB with Mesh](db_syncing.md)
-## JSON-RPC clients
+## GraphQL clients
- [Golang client](https://godoc.org/github.com/0xProject/0x-mesh/rpc)
-- [TypeScript client](json_rpc_clients/typescript/README.md)
- - [Doc reference](json_rpc_clients/typescript/reference.md)
+- [TypeScript client](graphql_clients/typescript/README.md)
+ - [Doc reference](graphql_clients/typescript/reference.md)
## Contributing
diff --git a/examples/go/README.md b/examples/go/README.md
deleted file mode 100644
index 9d413622c..000000000
--- a/examples/go/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## 0x Mesh Example Go Usage
-
-This directory contains some example code for using the Go RPC client.
-
-### Running the Examples
-
-Simply use `go run` to run an example. Each example requires some environment
-variables.
-
-```
-WS_RPC_ADDR=ws://167.71.80.233:60557 go run ./examples/go/subscribe-to-orders/main.go
-```
-
-### More Information
-
-- [RPC API Documentation](https://0x-org.gitbook.io/mesh/getting-started/rpc_api)
-- [Go RPC Client Documentation](https://godoc.org/github.com/0xProject/0x-mesh/rpc)
diff --git a/examples/go/add-order/main.go b/examples/go/add-order/main.go
deleted file mode 100644
index 7cb523215..000000000
--- a/examples/go/add-order/main.go
+++ /dev/null
@@ -1,79 +0,0 @@
-// +build !js
-
-// demo/add_order is a short program that adds an order to 0x Mesh via RPC
-package main
-
-import (
- "math/big"
- "time"
-
- "github.com/0xProject/0x-mesh/constants"
- "github.com/0xProject/0x-mesh/ethereum"
- "github.com/0xProject/0x-mesh/ethereum/signer"
- "github.com/0xProject/0x-mesh/rpc"
- "github.com/0xProject/0x-mesh/zeroex"
- "github.com/ethereum/go-ethereum/common"
- ethrpc "github.com/ethereum/go-ethereum/rpc"
- "github.com/plaid/go-envvar/envvar"
- log "github.com/sirupsen/logrus"
-)
-
-type clientEnvVars struct {
- // RPCAddress is the address of the 0x Mesh node to communicate with.
- WSRPCAddress string `envvar:"WS_RPC_ADDR"`
- // EthereumRPCURL is the URL of an Etheruem node which supports the JSON RPC
- // API.
- EthereumRPCURL string `envvar:"ETHEREUM_RPC_URL"`
-}
-
-var contractAddresses = ethereum.GanacheAddresses
-
-var testOrder = &zeroex.Order{
- ChainID: big.NewInt(constants.TestChainID),
- MakerAddress: constants.GanacheAccount0,
- TakerAddress: constants.NullAddress,
- SenderAddress: constants.NullAddress,
- FeeRecipientAddress: common.HexToAddress("0xa258b39954cef5cb142fd567a46cddb31a670124"),
- MakerAssetData: common.Hex2Bytes("f47261b0000000000000000000000000871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"),
- MakerFeeAssetData: constants.NullBytes,
- TakerAssetData: common.Hex2Bytes("f47261b00000000000000000000000000b1ba0af832d7c05fd64161e0db78e85978e8082"),
- TakerFeeAssetData: constants.NullBytes,
- Salt: big.NewInt(1548619145450),
- MakerFee: big.NewInt(0),
- TakerFee: big.NewInt(0),
- MakerAssetAmount: big.NewInt(1000),
- TakerAssetAmount: big.NewInt(2000),
- ExpirationTimeSeconds: big.NewInt(time.Now().Add(48 * time.Hour).Unix()),
- ExchangeAddress: contractAddresses.Exchange,
-}
-
-func main() {
- env := clientEnvVars{}
- if err := envvar.Parse(&env); err != nil {
- panic(err)
- }
-
- client, err := rpc.NewClient(env.WSRPCAddress)
- if err != nil {
- log.WithError(err).Fatal("could not create client")
- }
-
- ethClient, err := ethrpc.Dial(env.EthereumRPCURL)
- if err != nil {
- log.WithError(err).Fatal("could not create Ethereum rpc client")
- }
-
- signer := signer.NewEthRPCSigner(ethClient)
- signedTestOrder, err := zeroex.SignOrder(signer, testOrder)
- if err != nil {
- log.WithError(err).Fatal("could not sign 0x order")
- }
-
- signedTestOrders := []*zeroex.SignedOrder{signedTestOrder}
- validationResults, err := client.AddOrders(signedTestOrders)
- if err != nil {
- log.WithError(err).Fatal("error from AddOrder")
- } else {
- log.Printf("submitted %d orders. Accepted: %d, Rejected: %d", len(signedTestOrders), len(validationResults.Accepted), len(validationResults.Rejected))
- }
-}
diff --git a/examples/go/subscribe-to-orders/main.go b/examples/go/subscribe-to-orders/main.go
deleted file mode 100644
index a32eb9535..000000000
--- a/examples/go/subscribe-to-orders/main.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// +build !js
-
-// demo/add_order is a short program that adds an order to 0x Mesh via RPC
-package main
-
-import (
- "context"
-
- "github.com/0xProject/0x-mesh/rpc"
- "github.com/0xProject/0x-mesh/zeroex"
- "github.com/plaid/go-envvar/envvar"
- log "github.com/sirupsen/logrus"
-)
-
-type clientEnvVars struct {
- // RPCAddress is the address of the 0x Mesh node to communicate with.
- WSRPCAddress string `envvar:"WS_RPC_ADDR"`
-}
-
-func main() {
- log.SetFormatter(&log.JSONFormatter{})
-
- env := clientEnvVars{}
- if err := envvar.Parse(&env); err != nil {
- panic(err)
- }
-
- client, err := rpc.NewClient(env.WSRPCAddress)
- if err != nil {
- log.WithError(err).Fatal("could not create client")
- }
-
- ctx := context.Background()
- orderEventsChan := make(chan []*zeroex.OrderEvent, 8000)
- clientSubscription, err := client.SubscribeToOrders(ctx, orderEventsChan)
- if err != nil {
- log.WithError(err).Fatal("Couldn't set up OrderStream subscription")
- }
- defer clientSubscription.Unsubscribe()
-
- for {
- select {
- case orderEvents := <-orderEventsChan:
- for _, orderEvent := range orderEvents {
- log.WithFields(log.Fields{
- "event": orderEvent,
- }).Printf("received order event")
- }
- case err := <-clientSubscription.Err():
- log.Fatal(err)
- }
- }
-}
diff --git a/go.mod b/go.mod
index 98a9361d9..231c52567 100644
--- a/go.mod
+++ b/go.mod
@@ -16,6 +16,8 @@ replace (
require (
github.com/0xProject/sql-datastore v0.0.0-20200129193319-32397013f115
+ github.com/99designs/gqlgen v0.11.3
+ github.com/agnivade/levenshtein v1.1.0 // indirect
github.com/albrow/stringset v2.1.0+incompatible
github.com/aristanetworks/goarista v0.0.0-20190712234253-ed1100a1c015 // indirect
github.com/benbjohnson/clock v0.0.0-20161215174838-7dc76406b6d3
@@ -31,6 +33,7 @@ require (
github.com/gibson042/canonicaljson-go v1.0.3
github.com/golang/protobuf v1.3.2 // indirect
github.com/google/uuid v1.1.1
+ github.com/gorilla/websocket v1.4.2 // indirect
github.com/hashicorp/go-multierror v1.1.0 // indirect
github.com/hashicorp/golang-lru v0.5.4
github.com/ido50/sqlz v0.0.0-20200308174337-487b8faf612c
@@ -56,11 +59,14 @@ require (
github.com/libp2p/go-maddr-filter v0.0.5
github.com/libp2p/go-tcp-transport v0.1.1
github.com/libp2p/go-ws-transport v0.2.0
- github.com/mattn/go-colorable v0.1.2 // indirect
+ github.com/machinebox/graphql v0.2.2
+ github.com/matryer/is v1.4.0 // indirect
github.com/mattn/go-sqlite3 v2.0.3+incompatible
+ github.com/mitchellh/mapstructure v1.3.2 // indirect
github.com/multiformats/go-multiaddr v0.2.1
github.com/multiformats/go-multiaddr-dns v0.2.0
github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709
+ github.com/pkg/errors v0.9.1 // indirect
github.com/plaid/go-envvar v1.1.0
github.com/prometheus/tsdb v0.10.0 // indirect
github.com/rjeczalik/notify v0.9.2 // indirect
@@ -69,13 +75,17 @@ require (
github.com/status-im/keycard-go v0.0.0-20190424133014-d95853db0f48 // indirect
github.com/stretchr/testify v1.4.0
github.com/tyler-smith/go-bip39 v1.0.2 // indirect
+ github.com/vektah/gqlparser/v2 v2.0.1
github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190809123943-df4f5c81cb3b // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.1.0
- golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4
- golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6
+ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
+ golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect
+ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208
golang.org/x/time v0.0.0-20191024005414-555d28b269f0
+ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 // indirect
gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 // indirect
gopkg.in/karlseguin/expect.v1 v1.0.1 // indirect
+ gopkg.in/yaml.v2 v2.3.0 // indirect
)
diff --git a/go.sum b/go.sum
index 82dbef071..e0da55f23 100644
--- a/go.sum
+++ b/go.sum
@@ -10,6 +10,8 @@ github.com/0xProject/goleveldb v1.0.1-0.20200602173211-6ee893c9b83a/go.mod h1:1J
github.com/0xProject/qunit v0.0.0-20190730000255-81c18fdf7752/go.mod h1:Onz5mS+Tpffz0tyRWdHDrqKcQ1ZFNeRhYHrNAkaMgeQ=
github.com/0xProject/sql-datastore v0.0.0-20200129193319-32397013f115 h1:OHq6PP4Y8Pjmhm9UB3RtYWQSgxJBQplojLCDZZLrVDg=
github.com/0xProject/sql-datastore v0.0.0-20200129193319-32397013f115/go.mod h1:7icquWqYm+GkgQsUyBs0C0N1SyCHXQYBnoHaazVYDQ0=
+github.com/99designs/gqlgen v0.11.3 h1:oFSxl1DFS9X///uHV3y6CEfpcXWrDUxVblR4Xib2bs4=
+github.com/99designs/gqlgen v0.11.3/go.mod h1:RgX5GRRdDWNkh4pBrdzNpNPFVsdoUFY2+adM6nb1N+4=
github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4=
github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
@@ -33,6 +35,11 @@ github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrU
github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw=
github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
+github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
+github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
+github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
+github.com/agnivade/levenshtein v1.1.0 h1:n6qGwyHG61v3ABce1rPVZklEYRT8NFpCMrpZdBUbYGM=
+github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
github.com/albrow/go-envvar v1.1.1-0.20200123010345-a6ece4436cb7 h1:KyGi2bFjYJwahVfEJT1T5YvHTrEEYAqIZkIuxTAYRPY=
github.com/albrow/go-envvar v1.1.1-0.20200123010345-a6ece4436cb7/go.mod h1:jGxERjkVawmx7yWrFUix71jtSXm1ZtUai96wBHTwkPo=
github.com/albrow/stringset v2.1.0+incompatible h1:P90SSV7fle22yLbhDSLRC8Jtec0tCE3A8hJihfxf25E=
@@ -43,6 +50,10 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZq
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8=
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
+github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
+github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
+github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
+github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ=
github.com/aristanetworks/goarista v0.0.0-20190712234253-ed1100a1c015 h1:7ABPr1+uJdqESAdlVevnc/2FJGiC/K3uMg1JiELeF+0=
github.com/aristanetworks/goarista v0.0.0-20190712234253-ed1100a1c015/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ=
@@ -87,7 +98,9 @@ github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8Nz
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -106,6 +119,9 @@ github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUn
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
+github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g=
+github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA=
@@ -129,6 +145,7 @@ github.com/gibson042/canonicaljson-go v1.0.3 h1:EAyF8L74AWabkyUmrvEFHEt/AGFQeD6R
github.com/gibson042/canonicaljson-go v1.0.3/go.mod h1:DsLpJTThXyGNO+KZlI85C1/KDcImpP67k/RKVjcaEqo=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
+github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic=
@@ -145,6 +162,7 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
@@ -169,9 +187,14 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc=
github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
@@ -263,14 +286,14 @@ github.com/karlseguin/ccache v2.0.3+incompatible/go.mod h1:CM9tNPzT6EdRh14+jiW8m
github.com/karlseguin/expect v1.0.1 h1:z4wy4npwwHSWKjGWH85WNJO42VQhovxTCZDSzhjo8hY=
github.com/karlseguin/expect v1.0.1/go.mod h1:zNBxMY8P21owkeogJELCLeHIt+voOSduHYTFUbwRAV8=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/knq/sysutil v0.0.0-20181215143952-f05b59f0f307 h1:vl4eIlySbjertFaNwiMjXsGrFVK25aOWLq7n+3gh2ls=
github.com/knq/sysutil v0.0.0-20181215143952-f05b59f0f307/go.mod h1:BjPj+aVjl9FW/cCGiF3nGh5v+9Gd3VCgBQbod/GlMaQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
-github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b h1:wxtKgYHEncAU00muMD06dzLiahtGM1eouRNOzVV7tdQ=
github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
@@ -409,15 +432,22 @@ github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfj
github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
github.com/libp2p/go-yamux v1.2.3 h1:xX8A36vpXb59frIzWFdEgptLMsOANMFq2K7fPRlunYI=
github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
+github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
+github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo=
+github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
+github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
+github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007 h1:reVOUXwnhsYv/8UqjvhrMOu5CNT9UapHFLbQ2JcXsmg=
+github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
-github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
-github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc=
github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
@@ -425,6 +455,8 @@ github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXT
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
@@ -444,7 +476,11 @@ github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
+github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
@@ -514,6 +550,7 @@ github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
@@ -525,6 +562,8 @@ github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssy
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@@ -547,15 +586,21 @@ github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRr
github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8=
github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM=
github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
+github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ=
+github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
+github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
+github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
+github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY=
@@ -581,6 +626,7 @@ github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639
github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@@ -590,7 +636,14 @@ github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:s
github.com/tyler-smith/go-bip39 v1.0.2 h1:+t3w+KwLXO6154GNJY+qUtIxLTmFjfUmpguQT1OlOT8=
github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/urfave/cli/v2 v2.1.1 h1:Qt8FeAtxE/vfdrLmR3rxR6JRE0RoVmbXu8+6kZtYU4k=
+github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
+github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e h1:+w0Zm/9gaWpEAyDlU1eKOuk5twTjAjuevXqcJJw8hrg=
+github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
+github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
+github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc=
github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM=
@@ -637,10 +690,13 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA=
golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -653,12 +709,17 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U=
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -678,6 +739,7 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69 h1:rOhMmluY6kLMhdnrivzec6lLgaVbMHMn2ISQXJeJ5EM=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -691,11 +753,17 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
+golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -712,6 +780,8 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/karlseguin/expect.v1 v1.0.1 h1:9u0iUltnhFbJTHaSIH0EP+cuTU5rafIgmcsEsg2JQFw=
@@ -729,5 +799,12 @@ gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHO
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
+sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
diff --git a/gqlgen.yml b/gqlgen.yml
new file mode 100644
index 000000000..a8e734bc7
--- /dev/null
+++ b/gqlgen.yml
@@ -0,0 +1,56 @@
+# Where are all the schema files located? globs are supported eg src/**/*.graphqls
+schema:
+ - graphql/*.graphql
+
+# Where should the generated server code go?
+exec:
+ filename: graphql/generated/generated.go
+ package: generated
+
+# Uncomment to enable federation
+# federation:
+# filename: graph/generated/federation.go
+# package: generated
+
+# Where should any generated models go?
+model:
+ filename: graphql/gqltypes/types_generated.go
+ package: gqltypes
+
+# Where should the resolver implementations go?
+resolver:
+ layout: follow-schema
+ dir: graphql
+ package: graphql
+
+# Optional: turn on use `gqlgen:"fieldName"` tags in your models
+# struct_tag: json
+
+# Optional: turn on to use []Thing instead of []*Thing
+# omit_slice_element_pointers: false
+
+# Optional: set to speed up generation time by not performing a final validation pass.
+# skip_validation: true
+
+# gqlgen will search for any type names in the schema in these go packages
+# if they match it will use them, otherwise it will generate them.
+autobind:
+ - 'github.com/0xProject/0x-mesh/graphql/gqltypes'
+
+# This section declares type mapping between the GraphQL and go type systems
+#
+# The first line in each type will be used as defaults for resolver arguments and
+# modelgen, the others will be allowed when binding to fields. Configure them to
+# your liking
+models:
+ ID:
+ model:
+ - github.com/99designs/gqlgen/graphql.ID
+ - github.com/99designs/gqlgen/graphql.Int
+ - github.com/99designs/gqlgen/graphql.Int64
+ - github.com/99designs/gqlgen/graphql.Int32
+ Int:
+ model:
+ - github.com/99designs/gqlgen/graphql.Int
+ - github.com/99designs/gqlgen/graphql.Int64
+ - github.com/99designs/gqlgen/graphql.Int32
diff --git a/graphql/client/client.go b/graphql/client/client.go
new file mode 100644
index 000000000..481386501
--- /dev/null
+++ b/graphql/client/client.go
@@ -0,0 +1,251 @@
+package client
+
+import (
+ "context"
+
+ "github.com/0xProject/0x-mesh/graphql/gqltypes"
+ "github.com/0xProject/0x-mesh/zeroex"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/machinebox/graphql"
+)
+
+// Client is a client for the 0x Mesh GraphQL API.
+type Client struct {
+ *graphql.Client
+}
+
+const (
+ addOrdersMutation = `mutation AddOrders($orders: [NewOrder!]!, $pinned: Boolean = true) {
+ addOrders(orders: $orders, pinned: $pinned) {
+ accepted {
+ order {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ isNew
+ }
+ rejected {
+ hash
+ code
+ message
+ order {
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ }
+ }
+ }
+ }`
+
+ ordersQuery = `query Orders($filters: [OrderFilter!] = [], $sort: [OrderSort!] = [{ field: hash, direction: ASC }], $limit: Int = 100) {
+ orders(filters: $filters, sort: $sort, limit: $limit) {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ }`
+
+ orderQuery = `query Order($hash: Hash!) {
+ order(hash: $hash) {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ }`
+
+ statsQuery = `query Stats {
+ stats {
+ version
+ pubSubTopic
+ rendezvous
+ peerID
+ ethereumChainID
+ latestBlock {
+ number
+ hash
+ }
+ numPeers
+ numOrders
+ numOrdersIncludingRemoved
+ startOfCurrentUTCDay
+ ethRPCRequestsSentInCurrentUTCDay
+ ethRPCRateLimitExpiredRequests
+ maxExpirationTime
+ }
+ }`
+)
+
+// New creates a new client which points to the given URL.
+func New(url string) *Client {
+ client := graphql.NewClient(url)
+ return &Client{
+ Client: client,
+ }
+}
+
+// AddOrdersOpts is a set of options for the AddOrders method. They can
+// be omitted in order to use the defaults.
+type AddOrdersOpts struct {
+ // Pinned determines whether or not the added orders should be pinned. Pinned
+ // orders will not be affected by any DDoS prevention or incentive mechanisms
+ // and will always stay in storage until they are no longer fillable. Defaults
+ // to true.
+ Pinned bool `json:"pinned"`
+}
+
+// AddOrders adds orders to 0x Mesh and broadcasts them throughout the 0x Mesh network.
+func (c *Client) AddOrders(ctx context.Context, orders []*zeroex.SignedOrder, opts ...AddOrdersOpts) (*AddOrdersResults, error) {
+ req := graphql.NewRequest(addOrdersMutation)
+
+ // Set up args
+ newOrders := gqltypes.NewOrdersFromSignedOrders(orders)
+ req.Var("orders", newOrders)
+
+ // Only set the pinned variable if opts were provided.
+ if len(opts) > 0 {
+ req.Var("pinned", opts[0].Pinned)
+ }
+
+ var resp struct {
+ AddOrders gqltypes.AddOrdersResults `json:"addOrders"`
+ }
+ if err := c.Run(ctx, req, &resp); err != nil {
+ return nil, err
+ }
+ return addOrdersResultsFromGQLType(&resp.AddOrders), nil
+}
+
+func (c *Client) GetOrder(ctx context.Context, hash common.Hash) (*OrderWithMetadata, error) {
+ req := graphql.NewRequest(orderQuery)
+ req.Var("hash", hash.Hex())
+
+ var resp struct {
+ Order *gqltypes.OrderWithMetadata `json:"order"`
+ }
+ if err := c.Run(ctx, req, &resp); err != nil {
+ return nil, err
+ }
+ return orderWithMetadataFromGQLType(resp.Order), nil
+}
+
+// GetOrdersOpts is a set of options for the GetOrders method. They can
+// be omitted in order to use the defaults.
+type GetOrdersOpts struct {
+ // TODO(albrow): Document fields.
+ Filters []OrderFilter
+ Sort []OrderSort
+ Limit int
+}
+
+func (c *Client) GetOrders(ctx context.Context, opts ...GetOrdersOpts) ([]*OrderWithMetadata, error) {
+ req := graphql.NewRequest(ordersQuery)
+
+ if len(opts) > 0 {
+ opts := opts[0]
+ if len(opts.Filters) > 0 {
+ // Convert each filter value from the native Go type to a JSON-compatible type.
+ for i, filter := range opts.Filters {
+ jsonCompatibleValue, err := gqltypes.FilterValueToJSON(filter)
+ if err != nil {
+ return nil, err
+ }
+ opts.Filters[i].Value = jsonCompatibleValue
+ }
+ req.Var("filters", opts.Filters)
+ }
+ if len(opts.Sort) > 0 {
+ req.Var("sort", opts.Sort)
+ }
+ if opts.Limit != 0 {
+ req.Var("limit", opts.Limit)
+ }
+ }
+
+ var resp struct {
+ Orders []*gqltypes.OrderWithMetadata `json:"orders"`
+ }
+ if err := c.Run(ctx, req, &resp); err != nil {
+ return nil, err
+ }
+ return ordersWithMetadataFromGQLType(resp.Orders), nil
+}
+
+func (c *Client) GetStats(ctx context.Context) (*Stats, error) {
+ req := graphql.NewRequest(statsQuery)
+
+ var resp struct {
+ Stats *gqltypes.Stats `json:"stats"`
+ }
+ if err := c.Run(ctx, req, &resp); err != nil {
+ return nil, err
+ }
+ return statsFromGQLType(resp.Stats), nil
+}
+
+func (c *Client) RawQuery(ctx context.Context, query string, response interface{}) error {
+ req := graphql.NewRequest(query)
+ return c.Run(ctx, req, response)
+}
diff --git a/graphql/client/conversions.go b/graphql/client/conversions.go
new file mode 100644
index 000000000..072478285
--- /dev/null
+++ b/graphql/client/conversions.go
@@ -0,0 +1,125 @@
+package client
+
+import (
+ "github.com/0xProject/0x-mesh/graphql/gqltypes"
+ "github.com/ethereum/go-ethereum/common"
+)
+
+func addOrdersResultsFromGQLType(results *gqltypes.AddOrdersResults) *AddOrdersResults {
+ return &AddOrdersResults{
+ Accepted: acceptedOrderResultsFromGQLType(results.Accepted),
+ Rejected: rejectedOrderResultsFromGQLType(results.Rejected),
+ }
+}
+
+func acceptedOrderResultFromGQLType(result *gqltypes.AcceptedOrderResult) *AcceptedOrderResult {
+ return &AcceptedOrderResult{
+ Order: orderWithMetadataFromGQLType(result.Order),
+ IsNew: result.IsNew,
+ }
+}
+
+func acceptedOrderResultsFromGQLType(results []*gqltypes.AcceptedOrderResult) []*AcceptedOrderResult {
+ result := make([]*AcceptedOrderResult, len(results))
+ for i, r := range results {
+ result[i] = acceptedOrderResultFromGQLType(r)
+ }
+ return result
+}
+
+func rejectedOrderResultFromGQLType(result *gqltypes.RejectedOrderResult) *RejectedOrderResult {
+ var hash *common.Hash
+ if result.Hash != nil {
+ h := common.Hash(*result.Hash)
+ hash = &h
+ }
+ return &RejectedOrderResult{
+ Hash: hash,
+ Order: &Order{
+ ChainID: gqltypes.BigNumberToBigInt(result.Order.ChainID),
+ ExchangeAddress: common.Address(result.Order.ExchangeAddress),
+ MakerAddress: common.Address(result.Order.MakerAddress),
+ MakerAssetData: result.Order.MakerAssetData,
+ MakerFeeAssetData: result.Order.MakerFeeAssetData,
+ MakerAssetAmount: gqltypes.BigNumberToBigInt(result.Order.MakerAssetAmount),
+ MakerFee: gqltypes.BigNumberToBigInt(result.Order.MakerFee),
+ TakerAddress: common.Address(result.Order.TakerAddress),
+ TakerAssetData: result.Order.TakerAssetData,
+ TakerFeeAssetData: result.Order.TakerFeeAssetData,
+ TakerAssetAmount: gqltypes.BigNumberToBigInt(result.Order.TakerAssetAmount),
+ TakerFee: gqltypes.BigNumberToBigInt(result.Order.TakerFee),
+ SenderAddress: common.Address(result.Order.SenderAddress),
+ FeeRecipientAddress: common.Address(result.Order.FeeRecipientAddress),
+ ExpirationTimeSeconds: gqltypes.BigNumberToBigInt(result.Order.ExpirationTimeSeconds),
+ Salt: gqltypes.BigNumberToBigInt(result.Order.Salt),
+ Signature: result.Order.Signature,
+ },
+ Code: result.Code,
+ Message: result.Message,
+ }
+}
+
+func rejectedOrderResultsFromGQLType(results []*gqltypes.RejectedOrderResult) []*RejectedOrderResult {
+ result := make([]*RejectedOrderResult, len(results))
+ for i, r := range results {
+ result[i] = rejectedOrderResultFromGQLType(r)
+ }
+ return result
+}
+
+func orderWithMetadataFromGQLType(order *gqltypes.OrderWithMetadata) *OrderWithMetadata {
+ return &OrderWithMetadata{
+ Hash: common.Hash(order.Hash),
+ ChainID: gqltypes.BigNumberToBigInt(order.ChainID),
+ ExchangeAddress: common.Address(order.ExchangeAddress),
+ MakerAddress: common.Address(order.MakerAddress),
+ MakerAssetData: order.MakerAssetData,
+ MakerFeeAssetData: order.MakerFeeAssetData,
+ MakerAssetAmount: gqltypes.BigNumberToBigInt(order.MakerAssetAmount),
+ MakerFee: gqltypes.BigNumberToBigInt(order.MakerFee),
+ TakerAddress: common.Address(order.TakerAddress),
+ TakerAssetData: order.TakerAssetData,
+ TakerFeeAssetData: order.TakerFeeAssetData,
+ TakerAssetAmount: gqltypes.BigNumberToBigInt(order.TakerAssetAmount),
+ TakerFee: gqltypes.BigNumberToBigInt(order.TakerFee),
+ SenderAddress: common.Address(order.SenderAddress),
+ FeeRecipientAddress: common.Address(order.FeeRecipientAddress),
+ ExpirationTimeSeconds: gqltypes.BigNumberToBigInt(order.ExpirationTimeSeconds),
+ Salt: gqltypes.BigNumberToBigInt(order.Salt),
+ Signature: order.Signature,
+ FillableTakerAssetAmount: gqltypes.BigNumberToBigInt(order.FillableTakerAssetAmount),
+ }
+}
+
+func ordersWithMetadataFromGQLType(orders []*gqltypes.OrderWithMetadata) []*OrderWithMetadata {
+ result := make([]*OrderWithMetadata, len(orders))
+ for i, r := range orders {
+ result[i] = orderWithMetadataFromGQLType(r)
+ }
+ return result
+}
+
+func statsFromGQLType(stats *gqltypes.Stats) *Stats {
+ return &Stats{
+ Version: stats.Version,
+ PubSubTopic: stats.PubSubTopic,
+ Rendezvous: stats.Rendezvous,
+ PeerID: stats.PeerID,
+ EthereumChainID: stats.EthereumChainID,
+ LatestBlock: latestBlockFromGQLType(stats.LatestBlock),
+ NumPeers: stats.NumPeers,
+ NumOrders: stats.NumOrders,
+ NumOrdersIncludingRemoved: stats.NumOrdersIncludingRemoved,
+ StartOfCurrentUTCDay: stats.StartOfCurrentUTCDay,
+ EthRPCRequestsSentInCurrentUTCDay: stats.EthRPCRequestsSentInCurrentUTCDay,
+ EthRPCRateLimitExpiredRequests: stats.EthRPCRateLimitExpiredRequests,
+ MaxExpirationTime: gqltypes.BigNumberToBigInt(stats.MaxExpirationTime),
+ }
+}
+
+func latestBlockFromGQLType(latestBlock *gqltypes.LatestBlock) *LatestBlock {
+ return &LatestBlock{
+ Number: gqltypes.BigNumberToBigInt(latestBlock.Number),
+ Hash: common.Hash(latestBlock.Hash),
+ }
+}
diff --git a/graphql/client/types.go b/graphql/client/types.go
new file mode 100644
index 000000000..29b716d7a
--- /dev/null
+++ b/graphql/client/types.go
@@ -0,0 +1,264 @@
+package client
+
+import (
+ "math/big"
+ "time"
+
+ "github.com/0xProject/0x-mesh/graphql/gqltypes"
+ "github.com/ethereum/go-ethereum/common"
+)
+
+type AcceptedOrderResult struct {
+ // The order that was accepted, including metadata.
+ Order *OrderWithMetadata `json:"order"`
+ // Whether or not the order is new. Set to true if this is the first time this Mesh node has accepted the order
+ // and false otherwise.
+ IsNew bool `json:"isNew"`
+}
+
+// The results of the addOrders mutation. Includes which orders were accepted and which orders where rejected.
+type AddOrdersResults struct {
+ // The set of orders that were accepted. Accepted orders will be watched and order events will be emitted if
+ // their status changes.
+ Accepted []*AcceptedOrderResult `json:"accepted"`
+ // The set of orders that were rejected, including the reason they were rejected. Rejected orders will not be
+ // watched.
+ Rejected []*RejectedOrderResult `json:"rejected"`
+}
+
+// An on-chain contract event.
+type ContractEvent struct {
+ // The hash of the block where the event was generated.
+ BlockHash common.Hash `json:"blockHash"`
+ // The hash of the transaction where the event was generated.
+ TxHash common.Hash `json:"txHash"`
+ // The index of the transaction where the event was generated.
+ TxIndex int `json:"txIndex"`
+ // The index of the event log.
+ LogIndex int `json:"logIndex"`
+ // True when this was an event that was removed due to a block-reorg. False otherwise.
+ IsRemoved bool `json:"isRemoved"`
+ // The address of the contract that generated the event.
+ Address common.Address `json:"address"`
+ // The kind of event (e.g. "ERC20TransferEvent").
+ Kind string `json:"kind"`
+ // The parameters for the event. The parameters are different for each event kind, but will always
+ // be a set of key-value pairs.
+ Parameters interface{} `json:"parameters"`
+}
+
+// The block number and block hash for the latest block that has been processed by Mesh.
+type LatestBlock struct {
+ Number *big.Int `json:"number"`
+ Hash common.Hash `json:"hash"`
+}
+
+// A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format.)
+type Order struct {
+ ChainID *big.Int `json:"chainId"`
+ ExchangeAddress common.Address `json:"exchangeAddress"`
+ MakerAddress common.Address `json:"makerAddress"`
+ MakerAssetData []byte `json:"makerAssetData"`
+ MakerAssetAmount *big.Int `json:"makerAssetAmount"`
+ MakerFeeAssetData []byte `json:"makerFeeAssetData"`
+ MakerFee *big.Int `json:"makerFee"`
+ TakerAddress common.Address `json:"takerAddress"`
+ TakerAssetData []byte `json:"takerAssetData"`
+ TakerAssetAmount *big.Int `json:"takerAssetAmount"`
+ TakerFeeAssetData []byte `json:"takerFeeAssetData"`
+ TakerFee *big.Int `json:"takerFee"`
+ SenderAddress common.Address `json:"senderAddress"`
+ FeeRecipientAddress common.Address `json:"feeRecipientAddress"`
+ ExpirationTimeSeconds *big.Int `json:"expirationTimeSeconds"`
+ Salt *big.Int `json:"salt"`
+ Signature []byte `json:"signature"`
+}
+
+type OrderEvent struct {
+ // The order that was affected.
+ Order *OrderWithMetadata `json:"order"`
+ // A way of classifying the effect that the order event had on the order. You can
+ // think of different end states as different "types" of order events.
+ EndState OrderEndState `json:"endState"`
+ // The timestamp for the order event, which can be used for bookkeeping purposes.
+ // If the order event was generated as a direct result of on-chain events (e.g., FILLED,
+ // UNFUNDED, CANCELED), then it is set to the latest block timestamp at which the order
+ // was re-validated. Otherwise (e.g., for ADDED, STOPPED_WATCHING), the timestamp corresponds
+ // when the event was generated on the server side.
+ Timestamp time.Time `json:"timestamp"`
+ // Contains all the contract events that triggered the order to be re-validated.
+ // All events that _may_ have affected the state of the order are included here.
+ // It is guaranteed that at least one of the events included here will have affected
+ // the order's state, but there may also be some false positives.
+ ContractEvents []*ContractEvent `json:"contractEvents"`
+}
+
+// A filter on orders. Can be used in queries to only return orders that meet certain criteria.
+type OrderFilter = gqltypes.OrderFilter
+
+// A sort ordering for orders. Can be used in queries to control the order in which results are returned.
+type OrderSort = gqltypes.OrderSort
+
+// A signed 0x order along with some additional metadata about the order which is not part of the 0x protocol specification.
+type OrderWithMetadata struct {
+ ChainID *big.Int `json:"chainId"`
+ ExchangeAddress common.Address `json:"exchangeAddress"`
+ MakerAddress common.Address `json:"makerAddress"`
+ MakerAssetData []byte `json:"makerAssetData"`
+ MakerAssetAmount *big.Int `json:"makerAssetAmount"`
+ MakerFeeAssetData []byte `json:"makerFeeAssetData"`
+ MakerFee *big.Int `json:"makerFee"`
+ TakerAddress common.Address `json:"takerAddress"`
+ TakerAssetData []byte `json:"takerAssetData"`
+ TakerAssetAmount *big.Int `json:"takerAssetAmount"`
+ TakerFeeAssetData []byte `json:"takerFeeAssetData"`
+ TakerFee *big.Int `json:"takerFee"`
+ SenderAddress common.Address `json:"senderAddress"`
+ FeeRecipientAddress common.Address `json:"feeRecipientAddress"`
+ ExpirationTimeSeconds *big.Int `json:"expirationTimeSeconds"`
+ Salt *big.Int `json:"salt"`
+ Signature []byte `json:"signature"`
+ // The hash, which can be used to uniquely identify an order.
+ Hash common.Hash `json:"hash"`
+ // The remaining amount of the maker asset which has not yet been filled.
+ FillableTakerAssetAmount *big.Int `json:"fillableTakerAssetAmount"`
+}
+
+type RejectedOrderResult struct {
+ // The hash of the order. May be null if the hash could not be computed.
+ Hash *common.Hash `json:"hash"`
+ // The order that was rejected.
+ Order *Order `json:"order"`
+ // A machine-readable code indicating why the order was rejected. This code is designed to
+ // be used by programs and applications and will never change without breaking backwards-compatibility.
+ Code RejectedOrderCode `json:"code"`
+ // A human-readable message indicating why the order was rejected. This message may change
+ // in future releases and is not covered by backwards-compatibility guarantees.
+ Message string `json:"message"`
+}
+
+// Contains configuration options and various stats for Mesh.
+type Stats struct {
+ Version string `json:"version"`
+ PubSubTopic string `json:"pubSubTopic"`
+ Rendezvous string `json:"rendezvous"`
+ PeerID string `json:"peerID"`
+ EthereumChainID int `json:"ethereumChainID"`
+ LatestBlock *LatestBlock `json:"latestBlock"`
+ NumPeers int `json:"numPeers"`
+ NumOrders int `json:"numOrders"`
+ NumOrdersIncludingRemoved int `json:"numOrdersIncludingRemoved"`
+ StartOfCurrentUTCDay time.Time `json:"startOfCurrentUTCDay"`
+ EthRPCRequestsSentInCurrentUTCDay int `json:"ethRPCRequestsSentInCurrentUTCDay"`
+ EthRPCRateLimitExpiredRequests int `json:"ethRPCRateLimitExpiredRequests"`
+ MaxExpirationTime *big.Int `json:"maxExpirationTime"`
+}
+
+// The kind of comparison to be used in a filter.
+type FilterKind = gqltypes.FilterKind
+
+const (
+ FilterKindEqual FilterKind = "EQUAL"
+ FilterKindNotEqual FilterKind = "NOT_EQUAL"
+ FilterKindGreater FilterKind = "GREATER"
+ FilterKindGreaterOrEqual FilterKind = "GREATER_OR_EQUAL"
+ FilterKindLess FilterKind = "LESS"
+ FilterKindLessOrEqual FilterKind = "LESS_OR_EQUAL"
+)
+
+var AllFilterKind = gqltypes.AllFilterKind
+
+type OrderEndState = gqltypes.OrderEndState
+
+const (
+ // The order was successfully validated and added to the Mesh node. The order is now being watched and any changes to
+ // the fillability will result in subsequent order events.
+ OrderEndStateAdded OrderEndState = "ADDED"
+ // The order was filled for a partial amount. The order is still fillable up to the fillableTakerAssetAmount.
+ OrderEndStateFilled OrderEndState = "FILLED"
+ // The order was fully filled and its remaining fillableTakerAssetAmount is 0. The order is no longer fillable.
+ OrderEndStateFullyFilled OrderEndState = "FULLY_FILLED"
+ // The order was cancelled and is no longer fillable.
+ OrderEndStateCancelled OrderEndState = "CANCELLED"
+ // The order expired and is no longer fillable.
+ OrderEndStateExpired OrderEndState = "EXPIRED"
+ // The order was previously expired, but due to a block re-org it is no longer considered expired (should be rare).
+ OrderEndStateUnexpired OrderEndState = "UNEXPIRED"
+ // The order has become unfunded and is no longer fillable. This can happen if the maker makes a transfer or changes their allowance.
+ OrderEndStateUnfunded OrderEndState = "UNFUNDED"
+ // The fillability of the order has increased. This can happen if a previously processed fill event gets reverted due to a block re-org,
+ // or if a maker makes a transfer or changes their allowance.
+ OrderEndStateFillabilityIncreased OrderEndState = "FILLABILITY_INCREASED"
+ // The order is potentially still valid but was removed for a different reason (e.g.
+ // the database is full or the peer that sent the order was misbehaving). The order will no longer be watched
+ // and no further events for this order will be emitted. In some cases, the order may be re-added in the
+ // future.
+ OrderEndStateStoppedWatching OrderEndState = "STOPPED_WATCHING"
+)
+
+var AllOrderEndState = gqltypes.AllOrderEndState
+
+// An enum containing all the order fields for which filters and/or sorting is supported.
+type OrderField = gqltypes.OrderField
+
+const (
+ OrderFieldHash OrderField = "hash"
+ OrderFieldChainID OrderField = "chainId"
+ OrderFieldExchangeAddress OrderField = "exchangeAddress"
+ OrderFieldMakerAddress OrderField = "makerAddress"
+ OrderFieldMakerAssetData OrderField = "makerAssetData"
+ OrderFieldMakerAssetAmount OrderField = "makerAssetAmount"
+ OrderFieldMakerFeeAssetData OrderField = "makerFeeAssetData"
+ OrderFieldMakerFee OrderField = "makerFee"
+ OrderFieldTakerAddress OrderField = "takerAddress"
+ OrderFieldTakerAssetData OrderField = "takerAssetData"
+ OrderFieldTakerAssetAmount OrderField = "takerAssetAmount"
+ OrderFieldTakerFeeAssetData OrderField = "takerFeeAssetData"
+ OrderFieldTakerFee OrderField = "takerFee"
+ OrderFieldSenderAddress OrderField = "senderAddress"
+ OrderFieldFeeRecipientAddress OrderField = "feeRecipientAddress"
+ OrderFieldExpirationTimeSeconds OrderField = "expirationTimeSeconds"
+ OrderFieldSalt OrderField = "salt"
+ OrderFieldFillableTakerAssetAmount OrderField = "fillableTakerAssetAmount"
+)
+
+var AllOrderField = gqltypes.AllOrderField
+
+// A set of all possible codes included in RejectedOrderResult.
+type RejectedOrderCode = gqltypes.RejectedOrderCode
+
+const (
+ RejectedOrderCodeEthRPCRequestFailed RejectedOrderCode = "ETH_RPC_REQUEST_FAILED"
+ RejectedOrderCodeOrderHasInvalidMakerAssetAmount RejectedOrderCode = "ORDER_HAS_INVALID_MAKER_ASSET_AMOUNT"
+ RejectedOrderCodeOrderHasInvalidTakerAssetAmount RejectedOrderCode = "ORDER_HAS_INVALID_TAKER_ASSET_AMOUNT"
+ RejectedOrderCodeOrderExpired RejectedOrderCode = "ORDER_EXPIRED"
+ RejectedOrderCodeOrderFullyFilled RejectedOrderCode = "ORDER_FULLY_FILLED"
+ RejectedOrderCodeOrderCancelled RejectedOrderCode = "ORDER_CANCELLED"
+ RejectedOrderCodeOrderUnfunded RejectedOrderCode = "ORDER_UNFUNDED"
+ RejectedOrderCodeOrderHasInvalidMakerAssetData RejectedOrderCode = "ORDER_HAS_INVALID_MAKER_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidMakerFeeAssetData RejectedOrderCode = "ORDER_HAS_INVALID_MAKER_FEE_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidTakerAssetData RejectedOrderCode = "ORDER_HAS_INVALID_TAKER_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidTakerFeeAssetData RejectedOrderCode = "ORDER_HAS_INVALID_TAKER_FEE_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidSignature RejectedOrderCode = "ORDER_HAS_INVALID_SIGNATURE"
+ RejectedOrderCodeOrderMaxExpirationExceeded RejectedOrderCode = "ORDER_MAX_EXPIRATION_EXCEEDED"
+ RejectedOrderCodeInternalError RejectedOrderCode = "INTERNAL_ERROR"
+ RejectedOrderCodeMaxOrderSizeExceeded RejectedOrderCode = "MAX_ORDER_SIZE_EXCEEDED"
+ RejectedOrderCodeOrderAlreadyStoredAndUnfillable RejectedOrderCode = "ORDER_ALREADY_STORED_AND_UNFILLABLE"
+ RejectedOrderCodeOrderForIncorrectChain RejectedOrderCode = "ORDER_FOR_INCORRECT_CHAIN"
+ RejectedOrderCodeIncorrectExchangeAddress RejectedOrderCode = "INCORRECT_EXCHANGE_ADDRESS"
+ RejectedOrderCodeSenderAddressNotAllowed RejectedOrderCode = "SENDER_ADDRESS_NOT_ALLOWED"
+ RejectedOrderCodeDatabaseFullOfOrders RejectedOrderCode = "DATABASE_FULL_OF_ORDERS"
+ RejectedOrderCodeInvalidSchema RejectedOrderCode = "INVALID_SCHEMA"
+)
+
+var AllRejectedOrderCode = gqltypes.AllRejectedOrderCode
+
+// The direction to sort in. Ascending means lowest to highest. Descending means highest to lowest.
+type SortDirection = gqltypes.SortDirection
+
+var AllSortDirection = gqltypes.AllSortDirection
+
+const (
+ SortDirectionAsc = gqltypes.SortDirectionAsc
+ SortDirectionDesc = gqltypes.SortDirectionDesc
+)
diff --git a/graphql/constants.go b/graphql/constants.go
new file mode 100644
index 000000000..a5060706d
--- /dev/null
+++ b/graphql/constants.go
@@ -0,0 +1,7 @@
+package graphql
+
+const (
+ orderEventBufferSize = 100
+)
+
+//go:generate gqlgen generate
diff --git a/graphql/generated/generated.go b/graphql/generated/generated.go
new file mode 100644
index 000000000..f9ca695d1
--- /dev/null
+++ b/graphql/generated/generated.go
@@ -0,0 +1,7256 @@
+// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
+
+package generated
+
+import (
+ "bytes"
+ "context"
+ "errors"
+ "io"
+ "strconv"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/0xProject/0x-mesh/graphql/gqltypes"
+ "github.com/99designs/gqlgen/graphql"
+ "github.com/99designs/gqlgen/graphql/introspection"
+ gqlparser "github.com/vektah/gqlparser/v2"
+ "github.com/vektah/gqlparser/v2/ast"
+)
+
+// region ************************** generated!.gotpl **************************
+
+// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
+func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
+ return &executableSchema{
+ resolvers: cfg.Resolvers,
+ directives: cfg.Directives,
+ complexity: cfg.Complexity,
+ }
+}
+
+type Config struct {
+ Resolvers ResolverRoot
+ Directives DirectiveRoot
+ Complexity ComplexityRoot
+}
+
+type ResolverRoot interface {
+ Mutation() MutationResolver
+ Query() QueryResolver
+ Subscription() SubscriptionResolver
+}
+
+type DirectiveRoot struct {
+}
+
+type ComplexityRoot struct {
+ AcceptedOrderResult struct {
+ IsNew func(childComplexity int) int
+ Order func(childComplexity int) int
+ }
+
+ AddOrdersResults struct {
+ Accepted func(childComplexity int) int
+ Rejected func(childComplexity int) int
+ }
+
+ ContractEvent struct {
+ Address func(childComplexity int) int
+ BlockHash func(childComplexity int) int
+ IsRemoved func(childComplexity int) int
+ Kind func(childComplexity int) int
+ LogIndex func(childComplexity int) int
+ Parameters func(childComplexity int) int
+ TxHash func(childComplexity int) int
+ TxIndex func(childComplexity int) int
+ }
+
+ LatestBlock struct {
+ Hash func(childComplexity int) int
+ Number func(childComplexity int) int
+ }
+
+ Mutation struct {
+ AddOrders func(childComplexity int, orders []*gqltypes.NewOrder, pinned *bool) int
+ }
+
+ Order struct {
+ ChainID func(childComplexity int) int
+ ExchangeAddress func(childComplexity int) int
+ ExpirationTimeSeconds func(childComplexity int) int
+ FeeRecipientAddress func(childComplexity int) int
+ MakerAddress func(childComplexity int) int
+ MakerAssetAmount func(childComplexity int) int
+ MakerAssetData func(childComplexity int) int
+ MakerFee func(childComplexity int) int
+ MakerFeeAssetData func(childComplexity int) int
+ Salt func(childComplexity int) int
+ SenderAddress func(childComplexity int) int
+ Signature func(childComplexity int) int
+ TakerAddress func(childComplexity int) int
+ TakerAssetAmount func(childComplexity int) int
+ TakerAssetData func(childComplexity int) int
+ TakerFee func(childComplexity int) int
+ TakerFeeAssetData func(childComplexity int) int
+ }
+
+ OrderEvent struct {
+ ContractEvents func(childComplexity int) int
+ EndState func(childComplexity int) int
+ Order func(childComplexity int) int
+ Timestamp func(childComplexity int) int
+ }
+
+ OrderWithMetadata struct {
+ ChainID func(childComplexity int) int
+ ExchangeAddress func(childComplexity int) int
+ ExpirationTimeSeconds func(childComplexity int) int
+ FeeRecipientAddress func(childComplexity int) int
+ FillableTakerAssetAmount func(childComplexity int) int
+ Hash func(childComplexity int) int
+ MakerAddress func(childComplexity int) int
+ MakerAssetAmount func(childComplexity int) int
+ MakerAssetData func(childComplexity int) int
+ MakerFee func(childComplexity int) int
+ MakerFeeAssetData func(childComplexity int) int
+ Salt func(childComplexity int) int
+ SenderAddress func(childComplexity int) int
+ Signature func(childComplexity int) int
+ TakerAddress func(childComplexity int) int
+ TakerAssetAmount func(childComplexity int) int
+ TakerAssetData func(childComplexity int) int
+ TakerFee func(childComplexity int) int
+ TakerFeeAssetData func(childComplexity int) int
+ }
+
+ Query struct {
+ Order func(childComplexity int, hash gqltypes.Hash) int
+ Orders func(childComplexity int, sort []*gqltypes.OrderSort, filters []*gqltypes.OrderFilter, limit *int) int
+ Stats func(childComplexity int) int
+ }
+
+ RejectedOrderResult struct {
+ Code func(childComplexity int) int
+ Hash func(childComplexity int) int
+ Message func(childComplexity int) int
+ Order func(childComplexity int) int
+ }
+
+ Stats struct {
+ EthRPCRateLimitExpiredRequests func(childComplexity int) int
+ EthRPCRequestsSentInCurrentUTCDay func(childComplexity int) int
+ EthereumChainID func(childComplexity int) int
+ LatestBlock func(childComplexity int) int
+ MaxExpirationTime func(childComplexity int) int
+ NumOrders func(childComplexity int) int
+ NumOrdersIncludingRemoved func(childComplexity int) int
+ NumPeers func(childComplexity int) int
+ PeerID func(childComplexity int) int
+ PubSubTopic func(childComplexity int) int
+ Rendezvous func(childComplexity int) int
+ StartOfCurrentUTCDay func(childComplexity int) int
+ Version func(childComplexity int) int
+ }
+
+ Subscription struct {
+ OrderEvents func(childComplexity int) int
+ }
+}
+
+type MutationResolver interface {
+ AddOrders(ctx context.Context, orders []*gqltypes.NewOrder, pinned *bool) (*gqltypes.AddOrdersResults, error)
+}
+type QueryResolver interface {
+ Order(ctx context.Context, hash gqltypes.Hash) (*gqltypes.OrderWithMetadata, error)
+ Orders(ctx context.Context, sort []*gqltypes.OrderSort, filters []*gqltypes.OrderFilter, limit *int) ([]*gqltypes.OrderWithMetadata, error)
+ Stats(ctx context.Context) (*gqltypes.Stats, error)
+}
+type SubscriptionResolver interface {
+ OrderEvents(ctx context.Context) (<-chan []*gqltypes.OrderEvent, error)
+}
+
+type executableSchema struct {
+ resolvers ResolverRoot
+ directives DirectiveRoot
+ complexity ComplexityRoot
+}
+
+func (e *executableSchema) Schema() *ast.Schema {
+ return parsedSchema
+}
+
+func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
+ ec := executionContext{nil, e}
+ _ = ec
+ switch typeName + "." + field {
+
+ case "AcceptedOrderResult.isNew":
+ if e.complexity.AcceptedOrderResult.IsNew == nil {
+ break
+ }
+
+ return e.complexity.AcceptedOrderResult.IsNew(childComplexity), true
+
+ case "AcceptedOrderResult.order":
+ if e.complexity.AcceptedOrderResult.Order == nil {
+ break
+ }
+
+ return e.complexity.AcceptedOrderResult.Order(childComplexity), true
+
+ case "AddOrdersResults.accepted":
+ if e.complexity.AddOrdersResults.Accepted == nil {
+ break
+ }
+
+ return e.complexity.AddOrdersResults.Accepted(childComplexity), true
+
+ case "AddOrdersResults.rejected":
+ if e.complexity.AddOrdersResults.Rejected == nil {
+ break
+ }
+
+ return e.complexity.AddOrdersResults.Rejected(childComplexity), true
+
+ case "ContractEvent.address":
+ if e.complexity.ContractEvent.Address == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.Address(childComplexity), true
+
+ case "ContractEvent.blockHash":
+ if e.complexity.ContractEvent.BlockHash == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.BlockHash(childComplexity), true
+
+ case "ContractEvent.isRemoved":
+ if e.complexity.ContractEvent.IsRemoved == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.IsRemoved(childComplexity), true
+
+ case "ContractEvent.kind":
+ if e.complexity.ContractEvent.Kind == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.Kind(childComplexity), true
+
+ case "ContractEvent.logIndex":
+ if e.complexity.ContractEvent.LogIndex == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.LogIndex(childComplexity), true
+
+ case "ContractEvent.parameters":
+ if e.complexity.ContractEvent.Parameters == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.Parameters(childComplexity), true
+
+ case "ContractEvent.txHash":
+ if e.complexity.ContractEvent.TxHash == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.TxHash(childComplexity), true
+
+ case "ContractEvent.txIndex":
+ if e.complexity.ContractEvent.TxIndex == nil {
+ break
+ }
+
+ return e.complexity.ContractEvent.TxIndex(childComplexity), true
+
+ case "LatestBlock.hash":
+ if e.complexity.LatestBlock.Hash == nil {
+ break
+ }
+
+ return e.complexity.LatestBlock.Hash(childComplexity), true
+
+ case "LatestBlock.number":
+ if e.complexity.LatestBlock.Number == nil {
+ break
+ }
+
+ return e.complexity.LatestBlock.Number(childComplexity), true
+
+ case "Mutation.addOrders":
+ if e.complexity.Mutation.AddOrders == nil {
+ break
+ }
+
+ args, err := ec.field_Mutation_addOrders_args(context.TODO(), rawArgs)
+ if err != nil {
+ return 0, false
+ }
+
+ return e.complexity.Mutation.AddOrders(childComplexity, args["orders"].([]*gqltypes.NewOrder), args["pinned"].(*bool)), true
+
+ case "Order.chainId":
+ if e.complexity.Order.ChainID == nil {
+ break
+ }
+
+ return e.complexity.Order.ChainID(childComplexity), true
+
+ case "Order.exchangeAddress":
+ if e.complexity.Order.ExchangeAddress == nil {
+ break
+ }
+
+ return e.complexity.Order.ExchangeAddress(childComplexity), true
+
+ case "Order.expirationTimeSeconds":
+ if e.complexity.Order.ExpirationTimeSeconds == nil {
+ break
+ }
+
+ return e.complexity.Order.ExpirationTimeSeconds(childComplexity), true
+
+ case "Order.feeRecipientAddress":
+ if e.complexity.Order.FeeRecipientAddress == nil {
+ break
+ }
+
+ return e.complexity.Order.FeeRecipientAddress(childComplexity), true
+
+ case "Order.makerAddress":
+ if e.complexity.Order.MakerAddress == nil {
+ break
+ }
+
+ return e.complexity.Order.MakerAddress(childComplexity), true
+
+ case "Order.makerAssetAmount":
+ if e.complexity.Order.MakerAssetAmount == nil {
+ break
+ }
+
+ return e.complexity.Order.MakerAssetAmount(childComplexity), true
+
+ case "Order.makerAssetData":
+ if e.complexity.Order.MakerAssetData == nil {
+ break
+ }
+
+ return e.complexity.Order.MakerAssetData(childComplexity), true
+
+ case "Order.makerFee":
+ if e.complexity.Order.MakerFee == nil {
+ break
+ }
+
+ return e.complexity.Order.MakerFee(childComplexity), true
+
+ case "Order.makerFeeAssetData":
+ if e.complexity.Order.MakerFeeAssetData == nil {
+ break
+ }
+
+ return e.complexity.Order.MakerFeeAssetData(childComplexity), true
+
+ case "Order.salt":
+ if e.complexity.Order.Salt == nil {
+ break
+ }
+
+ return e.complexity.Order.Salt(childComplexity), true
+
+ case "Order.senderAddress":
+ if e.complexity.Order.SenderAddress == nil {
+ break
+ }
+
+ return e.complexity.Order.SenderAddress(childComplexity), true
+
+ case "Order.signature":
+ if e.complexity.Order.Signature == nil {
+ break
+ }
+
+ return e.complexity.Order.Signature(childComplexity), true
+
+ case "Order.takerAddress":
+ if e.complexity.Order.TakerAddress == nil {
+ break
+ }
+
+ return e.complexity.Order.TakerAddress(childComplexity), true
+
+ case "Order.takerAssetAmount":
+ if e.complexity.Order.TakerAssetAmount == nil {
+ break
+ }
+
+ return e.complexity.Order.TakerAssetAmount(childComplexity), true
+
+ case "Order.takerAssetData":
+ if e.complexity.Order.TakerAssetData == nil {
+ break
+ }
+
+ return e.complexity.Order.TakerAssetData(childComplexity), true
+
+ case "Order.takerFee":
+ if e.complexity.Order.TakerFee == nil {
+ break
+ }
+
+ return e.complexity.Order.TakerFee(childComplexity), true
+
+ case "Order.takerFeeAssetData":
+ if e.complexity.Order.TakerFeeAssetData == nil {
+ break
+ }
+
+ return e.complexity.Order.TakerFeeAssetData(childComplexity), true
+
+ case "OrderEvent.contractEvents":
+ if e.complexity.OrderEvent.ContractEvents == nil {
+ break
+ }
+
+ return e.complexity.OrderEvent.ContractEvents(childComplexity), true
+
+ case "OrderEvent.endState":
+ if e.complexity.OrderEvent.EndState == nil {
+ break
+ }
+
+ return e.complexity.OrderEvent.EndState(childComplexity), true
+
+ case "OrderEvent.order":
+ if e.complexity.OrderEvent.Order == nil {
+ break
+ }
+
+ return e.complexity.OrderEvent.Order(childComplexity), true
+
+ case "OrderEvent.timestamp":
+ if e.complexity.OrderEvent.Timestamp == nil {
+ break
+ }
+
+ return e.complexity.OrderEvent.Timestamp(childComplexity), true
+
+ case "OrderWithMetadata.chainId":
+ if e.complexity.OrderWithMetadata.ChainID == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.ChainID(childComplexity), true
+
+ case "OrderWithMetadata.exchangeAddress":
+ if e.complexity.OrderWithMetadata.ExchangeAddress == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.ExchangeAddress(childComplexity), true
+
+ case "OrderWithMetadata.expirationTimeSeconds":
+ if e.complexity.OrderWithMetadata.ExpirationTimeSeconds == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.ExpirationTimeSeconds(childComplexity), true
+
+ case "OrderWithMetadata.feeRecipientAddress":
+ if e.complexity.OrderWithMetadata.FeeRecipientAddress == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.FeeRecipientAddress(childComplexity), true
+
+ case "OrderWithMetadata.fillableTakerAssetAmount":
+ if e.complexity.OrderWithMetadata.FillableTakerAssetAmount == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.FillableTakerAssetAmount(childComplexity), true
+
+ case "OrderWithMetadata.hash":
+ if e.complexity.OrderWithMetadata.Hash == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.Hash(childComplexity), true
+
+ case "OrderWithMetadata.makerAddress":
+ if e.complexity.OrderWithMetadata.MakerAddress == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.MakerAddress(childComplexity), true
+
+ case "OrderWithMetadata.makerAssetAmount":
+ if e.complexity.OrderWithMetadata.MakerAssetAmount == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.MakerAssetAmount(childComplexity), true
+
+ case "OrderWithMetadata.makerAssetData":
+ if e.complexity.OrderWithMetadata.MakerAssetData == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.MakerAssetData(childComplexity), true
+
+ case "OrderWithMetadata.makerFee":
+ if e.complexity.OrderWithMetadata.MakerFee == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.MakerFee(childComplexity), true
+
+ case "OrderWithMetadata.makerFeeAssetData":
+ if e.complexity.OrderWithMetadata.MakerFeeAssetData == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.MakerFeeAssetData(childComplexity), true
+
+ case "OrderWithMetadata.salt":
+ if e.complexity.OrderWithMetadata.Salt == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.Salt(childComplexity), true
+
+ case "OrderWithMetadata.senderAddress":
+ if e.complexity.OrderWithMetadata.SenderAddress == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.SenderAddress(childComplexity), true
+
+ case "OrderWithMetadata.signature":
+ if e.complexity.OrderWithMetadata.Signature == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.Signature(childComplexity), true
+
+ case "OrderWithMetadata.takerAddress":
+ if e.complexity.OrderWithMetadata.TakerAddress == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.TakerAddress(childComplexity), true
+
+ case "OrderWithMetadata.takerAssetAmount":
+ if e.complexity.OrderWithMetadata.TakerAssetAmount == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.TakerAssetAmount(childComplexity), true
+
+ case "OrderWithMetadata.takerAssetData":
+ if e.complexity.OrderWithMetadata.TakerAssetData == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.TakerAssetData(childComplexity), true
+
+ case "OrderWithMetadata.takerFee":
+ if e.complexity.OrderWithMetadata.TakerFee == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.TakerFee(childComplexity), true
+
+ case "OrderWithMetadata.takerFeeAssetData":
+ if e.complexity.OrderWithMetadata.TakerFeeAssetData == nil {
+ break
+ }
+
+ return e.complexity.OrderWithMetadata.TakerFeeAssetData(childComplexity), true
+
+ case "Query.order":
+ if e.complexity.Query.Order == nil {
+ break
+ }
+
+ args, err := ec.field_Query_order_args(context.TODO(), rawArgs)
+ if err != nil {
+ return 0, false
+ }
+
+ return e.complexity.Query.Order(childComplexity, args["hash"].(gqltypes.Hash)), true
+
+ case "Query.orders":
+ if e.complexity.Query.Orders == nil {
+ break
+ }
+
+ args, err := ec.field_Query_orders_args(context.TODO(), rawArgs)
+ if err != nil {
+ return 0, false
+ }
+
+ return e.complexity.Query.Orders(childComplexity, args["sort"].([]*gqltypes.OrderSort), args["filters"].([]*gqltypes.OrderFilter), args["limit"].(*int)), true
+
+ case "Query.stats":
+ if e.complexity.Query.Stats == nil {
+ break
+ }
+
+ return e.complexity.Query.Stats(childComplexity), true
+
+ case "RejectedOrderResult.code":
+ if e.complexity.RejectedOrderResult.Code == nil {
+ break
+ }
+
+ return e.complexity.RejectedOrderResult.Code(childComplexity), true
+
+ case "RejectedOrderResult.hash":
+ if e.complexity.RejectedOrderResult.Hash == nil {
+ break
+ }
+
+ return e.complexity.RejectedOrderResult.Hash(childComplexity), true
+
+ case "RejectedOrderResult.message":
+ if e.complexity.RejectedOrderResult.Message == nil {
+ break
+ }
+
+ return e.complexity.RejectedOrderResult.Message(childComplexity), true
+
+ case "RejectedOrderResult.order":
+ if e.complexity.RejectedOrderResult.Order == nil {
+ break
+ }
+
+ return e.complexity.RejectedOrderResult.Order(childComplexity), true
+
+ case "Stats.ethRPCRateLimitExpiredRequests":
+ if e.complexity.Stats.EthRPCRateLimitExpiredRequests == nil {
+ break
+ }
+
+ return e.complexity.Stats.EthRPCRateLimitExpiredRequests(childComplexity), true
+
+ case "Stats.ethRPCRequestsSentInCurrentUTCDay":
+ if e.complexity.Stats.EthRPCRequestsSentInCurrentUTCDay == nil {
+ break
+ }
+
+ return e.complexity.Stats.EthRPCRequestsSentInCurrentUTCDay(childComplexity), true
+
+ case "Stats.ethereumChainID":
+ if e.complexity.Stats.EthereumChainID == nil {
+ break
+ }
+
+ return e.complexity.Stats.EthereumChainID(childComplexity), true
+
+ case "Stats.latestBlock":
+ if e.complexity.Stats.LatestBlock == nil {
+ break
+ }
+
+ return e.complexity.Stats.LatestBlock(childComplexity), true
+
+ case "Stats.maxExpirationTime":
+ if e.complexity.Stats.MaxExpirationTime == nil {
+ break
+ }
+
+ return e.complexity.Stats.MaxExpirationTime(childComplexity), true
+
+ case "Stats.numOrders":
+ if e.complexity.Stats.NumOrders == nil {
+ break
+ }
+
+ return e.complexity.Stats.NumOrders(childComplexity), true
+
+ case "Stats.numOrdersIncludingRemoved":
+ if e.complexity.Stats.NumOrdersIncludingRemoved == nil {
+ break
+ }
+
+ return e.complexity.Stats.NumOrdersIncludingRemoved(childComplexity), true
+
+ case "Stats.numPeers":
+ if e.complexity.Stats.NumPeers == nil {
+ break
+ }
+
+ return e.complexity.Stats.NumPeers(childComplexity), true
+
+ case "Stats.peerID":
+ if e.complexity.Stats.PeerID == nil {
+ break
+ }
+
+ return e.complexity.Stats.PeerID(childComplexity), true
+
+ case "Stats.pubSubTopic":
+ if e.complexity.Stats.PubSubTopic == nil {
+ break
+ }
+
+ return e.complexity.Stats.PubSubTopic(childComplexity), true
+
+ case "Stats.rendezvous":
+ if e.complexity.Stats.Rendezvous == nil {
+ break
+ }
+
+ return e.complexity.Stats.Rendezvous(childComplexity), true
+
+ case "Stats.startOfCurrentUTCDay":
+ if e.complexity.Stats.StartOfCurrentUTCDay == nil {
+ break
+ }
+
+ return e.complexity.Stats.StartOfCurrentUTCDay(childComplexity), true
+
+ case "Stats.version":
+ if e.complexity.Stats.Version == nil {
+ break
+ }
+
+ return e.complexity.Stats.Version(childComplexity), true
+
+ case "Subscription.orderEvents":
+ if e.complexity.Subscription.OrderEvents == nil {
+ break
+ }
+
+ return e.complexity.Subscription.OrderEvents(childComplexity), true
+
+ }
+ return 0, false
+}
+
+func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
+ rc := graphql.GetOperationContext(ctx)
+ ec := executionContext{rc, e}
+ first := true
+
+ switch rc.Operation.Operation {
+ case ast.Query:
+ return func(ctx context.Context) *graphql.Response {
+ if !first {
+ return nil
+ }
+ first = false
+ data := ec._Query(ctx, rc.Operation.SelectionSet)
+ var buf bytes.Buffer
+ data.MarshalGQL(&buf)
+
+ return &graphql.Response{
+ Data: buf.Bytes(),
+ }
+ }
+ case ast.Mutation:
+ return func(ctx context.Context) *graphql.Response {
+ if !first {
+ return nil
+ }
+ first = false
+ data := ec._Mutation(ctx, rc.Operation.SelectionSet)
+ var buf bytes.Buffer
+ data.MarshalGQL(&buf)
+
+ return &graphql.Response{
+ Data: buf.Bytes(),
+ }
+ }
+ case ast.Subscription:
+ next := ec._Subscription(ctx, rc.Operation.SelectionSet)
+
+ var buf bytes.Buffer
+ return func(ctx context.Context) *graphql.Response {
+ buf.Reset()
+ data := next()
+
+ if data == nil {
+ return nil
+ }
+ data.MarshalGQL(&buf)
+
+ return &graphql.Response{
+ Data: buf.Bytes(),
+ }
+ }
+
+ default:
+ return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation"))
+ }
+}
+
+type executionContext struct {
+ *graphql.OperationContext
+ *executableSchema
+}
+
+func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
+ if ec.DisableIntrospection {
+ return nil, errors.New("introspection disabled")
+ }
+ return introspection.WrapSchema(parsedSchema), nil
+}
+
+func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
+ if ec.DisableIntrospection {
+ return nil, errors.New("introspection disabled")
+ }
+ return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
+}
+
+var sources = []*ast.Source{
+ &ast.Source{Name: "graphql/schema.graphql", Input: `"""
+A 32-byte Keccak256 hash encoded as a hexadecimal string.
+"""
+scalar Hash
+"""
+An Ethereum address encoded as a hexadecimal string.
+"""
+scalar Address
+"""
+A BigNumber or uint256 value encoded as a numerical string.
+"""
+scalar BigNumber
+"""
+An array of arbitrary bytes encoded as a hexadecimal string.
+"""
+scalar Bytes
+"""
+A time encoded as a string using the RFC3339 standard.
+"""
+scalar Time
+"""
+Arbitrary value of any type.
+"""
+scalar Any
+
+"""
+A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format.)
+"""
+type Order {
+ chainId: BigNumber!
+ exchangeAddress: Address!
+ makerAddress: Address!
+ makerAssetData: Bytes!
+ makerAssetAmount: BigNumber!
+ makerFeeAssetData: Bytes!
+ makerFee: BigNumber!
+ takerAddress: Address!
+ takerAssetData: Bytes!
+ takerAssetAmount: BigNumber!
+ takerFeeAssetData: Bytes!
+ takerFee: BigNumber!
+ senderAddress: Address!
+ feeRecipientAddress: Address!
+ expirationTimeSeconds: BigNumber!
+ salt: BigNumber!
+ signature: Bytes!
+}
+
+"""
+A signed 0x order along with some additional metadata about the order which is not part of the 0x protocol specification.
+"""
+type OrderWithMetadata {
+ chainId: BigNumber!
+ exchangeAddress: Address!
+ makerAddress: Address!
+ makerAssetData: Bytes!
+ makerAssetAmount: BigNumber!
+ makerFeeAssetData: Bytes!
+ makerFee: BigNumber!
+ takerAddress: Address!
+ takerAssetData: Bytes!
+ takerAssetAmount: BigNumber!
+ takerFeeAssetData: Bytes!
+ takerFee: BigNumber!
+ senderAddress: Address!
+ feeRecipientAddress: Address!
+ expirationTimeSeconds: BigNumber!
+ salt: BigNumber!
+ signature: Bytes!
+ """
+ The hash, which can be used to uniquely identify an order.
+ """
+ hash: Hash!
+ """
+ The remaining amount of the maker asset which has not yet been filled.
+ """
+ fillableTakerAssetAmount: BigNumber!
+}
+
+"""
+An enum containing all the order fields for which filters and/or sorting is supported.
+"""
+enum OrderField {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ fillableTakerAssetAmount
+}
+
+"""
+The kind of comparison to be used in a filter.
+"""
+enum FilterKind {
+ EQUAL
+ NOT_EQUAL
+ GREATER
+ GREATER_OR_EQUAL
+ LESS
+ LESS_OR_EQUAL
+}
+
+"""
+The direction to sort in. Ascending means lowest to highest. Descending means highest to lowest.
+"""
+enum SortDirection {
+ ASC
+ DESC
+}
+
+"""
+A filter on orders. Can be used in queries to only return orders that meet certain criteria.
+"""
+input OrderFilter {
+ field: OrderField!
+ kind: FilterKind!
+ """
+ value must match the type of the filter field.
+ """
+ value: Any!
+}
+
+"""
+A sort ordering for orders. Can be used in queries to control the order in which results are returned.
+"""
+input OrderSort {
+ field: OrderField!
+ direction: SortDirection!
+}
+
+"""
+The block number and block hash for the latest block that has been processed by Mesh.
+"""
+type LatestBlock {
+ number: BigNumber!
+ hash: Hash!
+}
+
+"""
+Contains configuration options and various stats for Mesh.
+"""
+type Stats {
+ version: String!
+ pubSubTopic: String!
+ rendezvous: String!
+ peerID: String!
+ ethereumChainID: Int! # TODO(albrow): This should be BigNumber
+ latestBlock: LatestBlock
+ numPeers: Int!
+ numOrders: Int!
+ numOrdersIncludingRemoved: Int!
+ startOfCurrentUTCDay: Time!
+ ethRPCRequestsSentInCurrentUTCDay: Int!
+ ethRPCRateLimitExpiredRequests: Int!
+ maxExpirationTime: BigNumber!
+}
+
+type Query {
+ """
+ Returns the order with the specified hash, or null if no order is found with that hash.
+ """
+ order(hash: Hash!): OrderWithMetadata
+ """
+ Returns an array of orders that satisfy certain criteria.
+ """
+ orders(
+ """
+ Determines the order of the results. If more than one sort option is provided, results we be sorted by the
+ first option first, then by any subsequent options. By default, orders are sorted by hash in ascending order.
+ """
+ sort: [OrderSort!] = [{ field: hash, direction: ASC }]
+ """
+ A set of filters. Only the orders that match all filters will be included in the results. By default no
+ filters are used.
+ """
+ filters: [OrderFilter!] = []
+ """
+ The maximum number of orders to be included in the results. Defaults to 20.
+ """
+ limit: Int = 20
+ ): [OrderWithMetadata!]!
+ """
+ Returns the current stats.
+ """
+ stats: Stats!
+}
+
+"""
+A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format).
+"""
+input NewOrder {
+ chainId: BigNumber!
+ exchangeAddress: Address!
+ makerAddress: Address!
+ makerAssetData: Bytes!
+ makerAssetAmount: BigNumber!
+ makerFeeAssetData: Bytes!
+ makerFee: BigNumber!
+ takerAddress: Address!
+ takerAssetData: Bytes!
+ takerAssetAmount: BigNumber!
+ takerFeeAssetData: Bytes!
+ takerFee: BigNumber!
+ senderAddress: Address!
+ feeRecipientAddress: Address!
+ expirationTimeSeconds: BigNumber!
+ salt: BigNumber!
+ signature: Bytes!
+}
+
+"""
+The results of the addOrders mutation. Includes which orders were accepted and which orders where rejected.
+"""
+type AddOrdersResults {
+ """
+ The set of orders that were accepted. Accepted orders will be watched and order events will be emitted if
+ their status changes.
+ """
+ accepted: [AcceptedOrderResult!]!
+ """
+ The set of orders that were rejected, including the reason they were rejected. Rejected orders will not be
+ watched.
+ """
+ rejected: [RejectedOrderResult!]!
+}
+
+type AcceptedOrderResult {
+ """
+ The order that was accepted, including metadata.
+ """
+ order: OrderWithMetadata!
+ """
+ Whether or not the order is new. Set to true if this is the first time this Mesh node has accepted the order
+ and false otherwise.
+ """
+ isNew: Boolean!
+}
+
+type RejectedOrderResult {
+ """
+ The hash of the order. May be null if the hash could not be computed.
+ """
+ hash: Hash
+ """
+ The order that was rejected.
+ """
+ order: Order!
+ """
+ A machine-readable code indicating why the order was rejected. This code is designed to
+ be used by programs and applications and will never change without breaking backwards-compatibility.
+ """
+ code: RejectedOrderCode!
+ """
+ A human-readable message indicating why the order was rejected. This message may change
+ in future releases and is not covered by backwards-compatibility guarantees.
+ """
+ message: String!
+}
+
+"""
+A set of all possible codes included in RejectedOrderResult.
+"""
+enum RejectedOrderCode {
+ ETH_RPC_REQUEST_FAILED
+ ORDER_HAS_INVALID_MAKER_ASSET_AMOUNT
+ ORDER_HAS_INVALID_TAKER_ASSET_AMOUNT
+ ORDER_EXPIRED
+ ORDER_FULLY_FILLED
+ ORDER_CANCELLED
+ ORDER_UNFUNDED
+ ORDER_HAS_INVALID_MAKER_ASSET_DATA
+ ORDER_HAS_INVALID_MAKER_FEE_ASSET_DATA
+ ORDER_HAS_INVALID_TAKER_ASSET_DATA
+ ORDER_HAS_INVALID_TAKER_FEE_ASSET_DATA
+ ORDER_HAS_INVALID_SIGNATURE
+ ORDER_MAX_EXPIRATION_EXCEEDED
+ INTERNAL_ERROR
+ MAX_ORDER_SIZE_EXCEEDED
+ ORDER_ALREADY_STORED_AND_UNFILLABLE
+ ORDER_FOR_INCORRECT_CHAIN
+ INCORRECT_EXCHANGE_ADDRESS
+ SENDER_ADDRESS_NOT_ALLOWED
+ DATABASE_FULL_OF_ORDERS
+}
+
+type Mutation {
+ """
+ Adds one or more orders to Mesh.
+ """
+ addOrders(orders: [NewOrder!]!, pinned: Boolean = true): AddOrdersResults!
+}
+
+type OrderEvent {
+ """
+ The order that was affected.
+ """
+ order: OrderWithMetadata!
+ """
+ A way of classifying the effect that the order event had on the order. You can
+ think of different end states as different "types" of order events.
+ """
+ endState: OrderEndState!
+ """
+ The timestamp for the order event, which can be used for bookkeeping purposes.
+ If the order event was generated as a direct result of on-chain events (e.g., FILLED,
+ UNFUNDED, CANCELED), then it is set to the latest block timestamp at which the order
+ was re-validated. Otherwise (e.g., for ADDED, STOPPED_WATCHING), the timestamp corresponds
+ when the event was generated on the server side.
+ """
+ timestamp: Time!
+ """
+ Contains all the contract events that triggered the order to be re-validated.
+ All events that _may_ have affected the state of the order are included here.
+ It is guaranteed that at least one of the events included here will have affected
+ the order's state, but there may also be some false positives.
+ """
+ contractEvents: [ContractEvent!]!
+}
+
+enum OrderEndState {
+ """
+ The order was successfully validated and added to the Mesh node. The order is now being watched and any changes to
+ the fillability will result in subsequent order events.
+ """
+ ADDED
+ """
+ The order was filled for a partial amount. The order is still fillable up to the fillableTakerAssetAmount.
+ """
+ FILLED
+ """
+ The order was fully filled and its remaining fillableTakerAssetAmount is 0. The order is no longer fillable.
+ """
+ FULLY_FILLED
+ """
+ The order was cancelled and is no longer fillable.
+ """
+ CANCELLED
+ """
+ The order expired and is no longer fillable.
+ """
+ EXPIRED
+ """
+ The order was previously expired, but due to a block re-org it is no longer considered expired (should be rare).
+ """
+ UNEXPIRED
+ """
+ The order has become unfunded and is no longer fillable. This can happen if the maker makes a transfer or changes their allowance.
+ """
+ UNFUNDED
+ """
+ The fillability of the order has increased. This can happen if a previously processed fill event gets reverted due to a block re-org,
+ or if a maker makes a transfer or changes their allowance.
+ """
+ FILLABILITY_INCREASED
+ """
+ The order is potentially still valid but was removed for a different reason (e.g.
+ the database is full or the peer that sent the order was misbehaving). The order will no longer be watched
+ and no further events for this order will be emitted. In some cases, the order may be re-added in the
+ future.
+ """
+ STOPPED_WATCHING
+}
+
+"""
+An on-chain contract event.
+"""
+type ContractEvent {
+ """
+ The hash of the block where the event was generated.
+ """
+ blockHash: Hash!
+ """
+ The hash of the transaction where the event was generated.
+ """
+ txHash: Hash!
+ """
+ The index of the transaction where the event was generated.
+ """
+ txIndex: Int!
+ """
+ The index of the event log.
+ """
+ logIndex: Int!
+ """
+ True when this was an event that was removed due to a block-reorg. False otherwise.
+ """
+ isRemoved: Boolean!
+ """
+ The address of the contract that generated the event.
+ """
+ address: Address!
+ """
+ The kind of event (e.g. "ERC20TransferEvent").
+ """
+ kind: String!
+ """
+ The parameters for the event. The parameters are different for each event kind, but will always
+ be a set of key-value pairs.
+ """
+ parameters: Any!
+}
+
+type Subscription {
+ """
+ Subscribe to all order events. Events are emitted whenever the status of a watched order changes.
+ """
+ orderEvents: [OrderEvent!]!
+}
+`, BuiltIn: false},
+}
+var parsedSchema = gqlparser.MustLoadSchema(sources...)
+
+// endregion ************************** generated!.gotpl **************************
+
+// region ***************************** args.gotpl *****************************
+
+func (ec *executionContext) field_Mutation_addOrders_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 []*gqltypes.NewOrder
+ if tmp, ok := rawArgs["orders"]; ok {
+ arg0, err = ec.unmarshalNNewOrder2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐNewOrderᚄ(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["orders"] = arg0
+ var arg1 *bool
+ if tmp, ok := rawArgs["pinned"]; ok {
+ arg1, err = ec.unmarshalOBoolean2ᚖbool(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["pinned"] = arg1
+ return args, nil
+}
+
+func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 string
+ if tmp, ok := rawArgs["name"]; ok {
+ arg0, err = ec.unmarshalNString2string(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["name"] = arg0
+ return args, nil
+}
+
+func (ec *executionContext) field_Query_order_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 gqltypes.Hash
+ if tmp, ok := rawArgs["hash"]; ok {
+ arg0, err = ec.unmarshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["hash"] = arg0
+ return args, nil
+}
+
+func (ec *executionContext) field_Query_orders_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 []*gqltypes.OrderSort
+ if tmp, ok := rawArgs["sort"]; ok {
+ arg0, err = ec.unmarshalOOrderSort2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderSortᚄ(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["sort"] = arg0
+ var arg1 []*gqltypes.OrderFilter
+ if tmp, ok := rawArgs["filters"]; ok {
+ arg1, err = ec.unmarshalOOrderFilter2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderFilterᚄ(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["filters"] = arg1
+ var arg2 *int
+ if tmp, ok := rawArgs["limit"]; ok {
+ arg2, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["limit"] = arg2
+ return args, nil
+}
+
+func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 bool
+ if tmp, ok := rawArgs["includeDeprecated"]; ok {
+ arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["includeDeprecated"] = arg0
+ return args, nil
+}
+
+func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 bool
+ if tmp, ok := rawArgs["includeDeprecated"]; ok {
+ arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["includeDeprecated"] = arg0
+ return args, nil
+}
+
+// endregion ***************************** args.gotpl *****************************
+
+// region ************************** directives.gotpl **************************
+
+// endregion ************************** directives.gotpl **************************
+
+// region **************************** field.gotpl *****************************
+
+func (ec *executionContext) _AcceptedOrderResult_order(ctx context.Context, field graphql.CollectedField, obj *gqltypes.AcceptedOrderResult) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "AcceptedOrderResult",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Order, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.OrderWithMetadata)
+ fc.Result = res
+ return ec.marshalNOrderWithMetadata2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _AcceptedOrderResult_isNew(ctx context.Context, field graphql.CollectedField, obj *gqltypes.AcceptedOrderResult) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "AcceptedOrderResult",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.IsNew, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(bool)
+ fc.Result = res
+ return ec.marshalNBoolean2bool(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _AddOrdersResults_accepted(ctx context.Context, field graphql.CollectedField, obj *gqltypes.AddOrdersResults) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "AddOrdersResults",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Accepted, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]*gqltypes.AcceptedOrderResult)
+ fc.Result = res
+ return ec.marshalNAcceptedOrderResult2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAcceptedOrderResultᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _AddOrdersResults_rejected(ctx context.Context, field graphql.CollectedField, obj *gqltypes.AddOrdersResults) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "AddOrdersResults",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Rejected, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]*gqltypes.RejectedOrderResult)
+ fc.Result = res
+ return ec.marshalNRejectedOrderResult2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderResultᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_blockHash(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.BlockHash, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Hash)
+ fc.Result = res
+ return ec.marshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_txHash(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TxHash, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Hash)
+ fc.Result = res
+ return ec.marshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_txIndex(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TxIndex, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_logIndex(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.LogIndex, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_isRemoved(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.IsRemoved, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(bool)
+ fc.Result = res
+ return ec.marshalNBoolean2bool(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_address(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Address, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_kind(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Kind, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _ContractEvent_parameters(ctx context.Context, field graphql.CollectedField, obj *gqltypes.ContractEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "ContractEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Parameters, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(interface{})
+ fc.Result = res
+ return ec.marshalNAny2interface(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _LatestBlock_number(ctx context.Context, field graphql.CollectedField, obj *gqltypes.LatestBlock) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "LatestBlock",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Number, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _LatestBlock_hash(ctx context.Context, field graphql.CollectedField, obj *gqltypes.LatestBlock) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "LatestBlock",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Hash, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Hash)
+ fc.Result = res
+ return ec.marshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Mutation_addOrders(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Mutation",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ rawArgs := field.ArgumentMap(ec.Variables)
+ args, err := ec.field_Mutation_addOrders_args(ctx, rawArgs)
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ fc.Args = args
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.resolvers.Mutation().AddOrders(rctx, args["orders"].([]*gqltypes.NewOrder), args["pinned"].(*bool))
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.AddOrdersResults)
+ fc.Result = res
+ return ec.marshalNAddOrdersResults2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddOrdersResults(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_chainId(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ChainID, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_exchangeAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ExchangeAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_makerAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_makerAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_makerAssetAmount(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerAssetAmount, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_makerFeeAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerFeeAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_makerFee(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerFee, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_takerAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_takerAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_takerAssetAmount(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerAssetAmount, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_takerFeeAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerFeeAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_takerFee(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerFee, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_senderAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.SenderAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_feeRecipientAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.FeeRecipientAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_expirationTimeSeconds(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ExpirationTimeSeconds, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_salt(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Salt, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Order_signature(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Order) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Order",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Signature, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderEvent_order(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Order, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.OrderWithMetadata)
+ fc.Result = res
+ return ec.marshalNOrderWithMetadata2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderEvent_endState(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.EndState, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.OrderEndState)
+ fc.Result = res
+ return ec.marshalNOrderEndState2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEndState(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderEvent_timestamp(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Timestamp, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(time.Time)
+ fc.Result = res
+ return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderEvent_contractEvents(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderEvent) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderEvent",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ContractEvents, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]*gqltypes.ContractEvent)
+ fc.Result = res
+ return ec.marshalNContractEvent2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐContractEventᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_chainId(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ChainID, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_exchangeAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ExchangeAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_makerAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_makerAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_makerAssetAmount(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerAssetAmount, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_makerFeeAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerFeeAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_makerFee(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MakerFee, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_takerAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_takerAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_takerAssetAmount(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerAssetAmount, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_takerFeeAssetData(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerFeeAssetData, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_takerFee(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.TakerFee, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_senderAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.SenderAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_feeRecipientAddress(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.FeeRecipientAddress, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Address)
+ fc.Result = res
+ return ec.marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_expirationTimeSeconds(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.ExpirationTimeSeconds, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_salt(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Salt, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_signature(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Signature, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Bytes)
+ fc.Result = res
+ return ec.marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_hash(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Hash, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.Hash)
+ fc.Result = res
+ return ec.marshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _OrderWithMetadata_fillableTakerAssetAmount(ctx context.Context, field graphql.CollectedField, obj *gqltypes.OrderWithMetadata) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "OrderWithMetadata",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.FillableTakerAssetAmount, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Query_order(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Query",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ rawArgs := field.ArgumentMap(ec.Variables)
+ args, err := ec.field_Query_order_args(ctx, rawArgs)
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ fc.Args = args
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.resolvers.Query().Order(rctx, args["hash"].(gqltypes.Hash))
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.OrderWithMetadata)
+ fc.Result = res
+ return ec.marshalOOrderWithMetadata2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Query_orders(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Query",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ rawArgs := field.ArgumentMap(ec.Variables)
+ args, err := ec.field_Query_orders_args(ctx, rawArgs)
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ fc.Args = args
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.resolvers.Query().Orders(rctx, args["sort"].([]*gqltypes.OrderSort), args["filters"].([]*gqltypes.OrderFilter), args["limit"].(*int))
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]*gqltypes.OrderWithMetadata)
+ fc.Result = res
+ return ec.marshalNOrderWithMetadata2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadataᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Query_stats(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Query",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.resolvers.Query().Stats(rctx)
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.Stats)
+ fc.Result = res
+ return ec.marshalNStats2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐStats(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Query",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ rawArgs := field.ArgumentMap(ec.Variables)
+ args, err := ec.field_Query___type_args(ctx, rawArgs)
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ fc.Args = args
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.introspectType(args["name"].(string))
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Query",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.introspectSchema()
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Schema)
+ fc.Result = res
+ return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _RejectedOrderResult_hash(ctx context.Context, field graphql.CollectedField, obj *gqltypes.RejectedOrderResult) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "RejectedOrderResult",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Hash, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.Hash)
+ fc.Result = res
+ return ec.marshalOHash2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _RejectedOrderResult_order(ctx context.Context, field graphql.CollectedField, obj *gqltypes.RejectedOrderResult) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "RejectedOrderResult",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Order, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.Order)
+ fc.Result = res
+ return ec.marshalNOrder2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrder(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _RejectedOrderResult_code(ctx context.Context, field graphql.CollectedField, obj *gqltypes.RejectedOrderResult) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "RejectedOrderResult",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Code, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.RejectedOrderCode)
+ fc.Result = res
+ return ec.marshalNRejectedOrderCode2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderCode(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _RejectedOrderResult_message(ctx context.Context, field graphql.CollectedField, obj *gqltypes.RejectedOrderResult) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "RejectedOrderResult",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Message, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_version(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Version, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_pubSubTopic(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.PubSubTopic, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_rendezvous(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Rendezvous, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_peerID(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.PeerID, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_ethereumChainID(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.EthereumChainID, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_latestBlock(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.LatestBlock, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*gqltypes.LatestBlock)
+ fc.Result = res
+ return ec.marshalOLatestBlock2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐLatestBlock(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_numPeers(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.NumPeers, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_numOrders(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.NumOrders, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_numOrdersIncludingRemoved(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.NumOrdersIncludingRemoved, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_startOfCurrentUTCDay(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.StartOfCurrentUTCDay, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(time.Time)
+ fc.Result = res
+ return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_ethRPCRequestsSentInCurrentUTCDay(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.EthRPCRequestsSentInCurrentUTCDay, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_ethRPCRateLimitExpiredRequests(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.EthRPCRateLimitExpiredRequests, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(int)
+ fc.Result = res
+ return ec.marshalNInt2int(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Stats_maxExpirationTime(ctx context.Context, field graphql.CollectedField, obj *gqltypes.Stats) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Stats",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MaxExpirationTime, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(gqltypes.BigNumber)
+ fc.Result = res
+ return ec.marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) _Subscription_orderEvents(ctx context.Context, field graphql.CollectedField) (ret func() graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "Subscription",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return ec.resolvers.Subscription().OrderEvents(rctx)
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return nil
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return nil
+ }
+ return func() graphql.Marshaler {
+ res, ok := <-resTmp.(<-chan []*gqltypes.OrderEvent)
+ if !ok {
+ return nil
+ }
+ return graphql.WriterFunc(func(w io.Writer) {
+ w.Write([]byte{'{'})
+ graphql.MarshalString(field.Alias).MarshalGQL(w)
+ w.Write([]byte{':'})
+ ec.marshalNOrderEvent2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEventᚄ(ctx, field.Selections, res).MarshalGQL(w)
+ w.Write([]byte{'}'})
+ })
+ }
+}
+
+func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Directive",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Name, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Directive",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Description, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalOString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Directive",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Locations, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]string)
+ fc.Result = res
+ return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Directive",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Args, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.InputValue)
+ fc.Result = res
+ return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__EnumValue",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Name, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__EnumValue",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Description, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalOString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__EnumValue",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.IsDeprecated(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(bool)
+ fc.Result = res
+ return ec.marshalNBoolean2bool(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__EnumValue",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.DeprecationReason(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*string)
+ fc.Result = res
+ return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Field",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Name, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Field",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Description, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalOString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Field",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Args, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.InputValue)
+ fc.Result = res
+ return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Field",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Type, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Field",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.IsDeprecated(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(bool)
+ fc.Result = res
+ return ec.marshalNBoolean2bool(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Field",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.DeprecationReason(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*string)
+ fc.Result = res
+ return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__InputValue",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Name, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__InputValue",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Description, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalOString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__InputValue",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Type, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__InputValue",
+ Field: field,
+ Args: nil,
+ IsMethod: false,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.DefaultValue, nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*string)
+ fc.Result = res
+ return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Schema",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Types(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.Type)
+ fc.Result = res
+ return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Schema",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.QueryType(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Schema",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.MutationType(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Schema",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.SubscriptionType(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Schema",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Directives(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.Directive)
+ fc.Result = res
+ return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Kind(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ if !graphql.HasFieldError(ctx, fc) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Name(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*string)
+ fc.Result = res
+ return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Description(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(string)
+ fc.Result = res
+ return ec.marshalOString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ rawArgs := field.ArgumentMap(ec.Variables)
+ args, err := ec.field___Type_fields_args(ctx, rawArgs)
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ fc.Args = args
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Fields(args["includeDeprecated"].(bool)), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.Field)
+ fc.Result = res
+ return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.Interfaces(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.Type)
+ fc.Result = res
+ return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.PossibleTypes(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.Type)
+ fc.Result = res
+ return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ rawArgs := field.ArgumentMap(ec.Variables)
+ args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ fc.Args = args
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.EnumValues(args["includeDeprecated"].(bool)), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.EnumValue)
+ fc.Result = res
+ return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.InputFields(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.([]introspection.InputValue)
+ fc.Result = res
+ return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = graphql.Null
+ }
+ }()
+ fc := &graphql.FieldContext{
+ Object: "__Type",
+ Field: field,
+ Args: nil,
+ IsMethod: true,
+ }
+
+ ctx = graphql.WithFieldContext(ctx, fc)
+ resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
+ ctx = rctx // use context from middleware stack in children
+ return obj.OfType(), nil
+ })
+ if err != nil {
+ ec.Error(ctx, err)
+ return graphql.Null
+ }
+ if resTmp == nil {
+ return graphql.Null
+ }
+ res := resTmp.(*introspection.Type)
+ fc.Result = res
+ return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
+}
+
+// endregion **************************** field.gotpl *****************************
+
+// region **************************** input.gotpl *****************************
+
+func (ec *executionContext) unmarshalInputNewOrder(ctx context.Context, obj interface{}) (gqltypes.NewOrder, error) {
+ var it gqltypes.NewOrder
+ var asMap = obj.(map[string]interface{})
+
+ for k, v := range asMap {
+ switch k {
+ case "chainId":
+ var err error
+ it.ChainID, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "exchangeAddress":
+ var err error
+ it.ExchangeAddress, err = ec.unmarshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "makerAddress":
+ var err error
+ it.MakerAddress, err = ec.unmarshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "makerAssetData":
+ var err error
+ it.MakerAssetData, err = ec.unmarshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "makerAssetAmount":
+ var err error
+ it.MakerAssetAmount, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "makerFeeAssetData":
+ var err error
+ it.MakerFeeAssetData, err = ec.unmarshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "makerFee":
+ var err error
+ it.MakerFee, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "takerAddress":
+ var err error
+ it.TakerAddress, err = ec.unmarshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "takerAssetData":
+ var err error
+ it.TakerAssetData, err = ec.unmarshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "takerAssetAmount":
+ var err error
+ it.TakerAssetAmount, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "takerFeeAssetData":
+ var err error
+ it.TakerFeeAssetData, err = ec.unmarshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "takerFee":
+ var err error
+ it.TakerFee, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "senderAddress":
+ var err error
+ it.SenderAddress, err = ec.unmarshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "feeRecipientAddress":
+ var err error
+ it.FeeRecipientAddress, err = ec.unmarshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "expirationTimeSeconds":
+ var err error
+ it.ExpirationTimeSeconds, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "salt":
+ var err error
+ it.Salt, err = ec.unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "signature":
+ var err error
+ it.Signature, err = ec.unmarshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ }
+ }
+
+ return it, nil
+}
+
+func (ec *executionContext) unmarshalInputOrderFilter(ctx context.Context, obj interface{}) (gqltypes.OrderFilter, error) {
+ var it gqltypes.OrderFilter
+ var asMap = obj.(map[string]interface{})
+
+ for k, v := range asMap {
+ switch k {
+ case "field":
+ var err error
+ it.Field, err = ec.unmarshalNOrderField2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderField(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "kind":
+ var err error
+ it.Kind, err = ec.unmarshalNFilterKind2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐFilterKind(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "value":
+ var err error
+ it.Value, err = ec.unmarshalNAny2interface(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ }
+ }
+
+ return it, nil
+}
+
+func (ec *executionContext) unmarshalInputOrderSort(ctx context.Context, obj interface{}) (gqltypes.OrderSort, error) {
+ var it gqltypes.OrderSort
+ var asMap = obj.(map[string]interface{})
+
+ for k, v := range asMap {
+ switch k {
+ case "field":
+ var err error
+ it.Field, err = ec.unmarshalNOrderField2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderField(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ case "direction":
+ var err error
+ it.Direction, err = ec.unmarshalNSortDirection2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐSortDirection(ctx, v)
+ if err != nil {
+ return it, err
+ }
+ }
+ }
+
+ return it, nil
+}
+
+// endregion **************************** input.gotpl *****************************
+
+// region ************************** interface.gotpl ***************************
+
+// endregion ************************** interface.gotpl ***************************
+
+// region **************************** object.gotpl ****************************
+
+var acceptedOrderResultImplementors = []string{"AcceptedOrderResult"}
+
+func (ec *executionContext) _AcceptedOrderResult(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.AcceptedOrderResult) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, acceptedOrderResultImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("AcceptedOrderResult")
+ case "order":
+ out.Values[i] = ec._AcceptedOrderResult_order(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "isNew":
+ out.Values[i] = ec._AcceptedOrderResult_isNew(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var addOrdersResultsImplementors = []string{"AddOrdersResults"}
+
+func (ec *executionContext) _AddOrdersResults(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.AddOrdersResults) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, addOrdersResultsImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("AddOrdersResults")
+ case "accepted":
+ out.Values[i] = ec._AddOrdersResults_accepted(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "rejected":
+ out.Values[i] = ec._AddOrdersResults_rejected(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var contractEventImplementors = []string{"ContractEvent"}
+
+func (ec *executionContext) _ContractEvent(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.ContractEvent) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, contractEventImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("ContractEvent")
+ case "blockHash":
+ out.Values[i] = ec._ContractEvent_blockHash(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "txHash":
+ out.Values[i] = ec._ContractEvent_txHash(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "txIndex":
+ out.Values[i] = ec._ContractEvent_txIndex(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "logIndex":
+ out.Values[i] = ec._ContractEvent_logIndex(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "isRemoved":
+ out.Values[i] = ec._ContractEvent_isRemoved(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "address":
+ out.Values[i] = ec._ContractEvent_address(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "kind":
+ out.Values[i] = ec._ContractEvent_kind(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "parameters":
+ out.Values[i] = ec._ContractEvent_parameters(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var latestBlockImplementors = []string{"LatestBlock"}
+
+func (ec *executionContext) _LatestBlock(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.LatestBlock) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, latestBlockImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("LatestBlock")
+ case "number":
+ out.Values[i] = ec._LatestBlock_number(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "hash":
+ out.Values[i] = ec._LatestBlock_hash(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var mutationImplementors = []string{"Mutation"}
+
+func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors)
+
+ ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
+ Object: "Mutation",
+ })
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("Mutation")
+ case "addOrders":
+ out.Values[i] = ec._Mutation_addOrders(ctx, field)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var orderImplementors = []string{"Order"}
+
+func (ec *executionContext) _Order(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.Order) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, orderImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("Order")
+ case "chainId":
+ out.Values[i] = ec._Order_chainId(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "exchangeAddress":
+ out.Values[i] = ec._Order_exchangeAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerAddress":
+ out.Values[i] = ec._Order_makerAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerAssetData":
+ out.Values[i] = ec._Order_makerAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerAssetAmount":
+ out.Values[i] = ec._Order_makerAssetAmount(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerFeeAssetData":
+ out.Values[i] = ec._Order_makerFeeAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerFee":
+ out.Values[i] = ec._Order_makerFee(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerAddress":
+ out.Values[i] = ec._Order_takerAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerAssetData":
+ out.Values[i] = ec._Order_takerAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerAssetAmount":
+ out.Values[i] = ec._Order_takerAssetAmount(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerFeeAssetData":
+ out.Values[i] = ec._Order_takerFeeAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerFee":
+ out.Values[i] = ec._Order_takerFee(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "senderAddress":
+ out.Values[i] = ec._Order_senderAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "feeRecipientAddress":
+ out.Values[i] = ec._Order_feeRecipientAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "expirationTimeSeconds":
+ out.Values[i] = ec._Order_expirationTimeSeconds(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "salt":
+ out.Values[i] = ec._Order_salt(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "signature":
+ out.Values[i] = ec._Order_signature(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var orderEventImplementors = []string{"OrderEvent"}
+
+func (ec *executionContext) _OrderEvent(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.OrderEvent) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, orderEventImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("OrderEvent")
+ case "order":
+ out.Values[i] = ec._OrderEvent_order(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "endState":
+ out.Values[i] = ec._OrderEvent_endState(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "timestamp":
+ out.Values[i] = ec._OrderEvent_timestamp(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "contractEvents":
+ out.Values[i] = ec._OrderEvent_contractEvents(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var orderWithMetadataImplementors = []string{"OrderWithMetadata"}
+
+func (ec *executionContext) _OrderWithMetadata(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.OrderWithMetadata) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, orderWithMetadataImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("OrderWithMetadata")
+ case "chainId":
+ out.Values[i] = ec._OrderWithMetadata_chainId(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "exchangeAddress":
+ out.Values[i] = ec._OrderWithMetadata_exchangeAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerAddress":
+ out.Values[i] = ec._OrderWithMetadata_makerAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerAssetData":
+ out.Values[i] = ec._OrderWithMetadata_makerAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerAssetAmount":
+ out.Values[i] = ec._OrderWithMetadata_makerAssetAmount(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerFeeAssetData":
+ out.Values[i] = ec._OrderWithMetadata_makerFeeAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "makerFee":
+ out.Values[i] = ec._OrderWithMetadata_makerFee(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerAddress":
+ out.Values[i] = ec._OrderWithMetadata_takerAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerAssetData":
+ out.Values[i] = ec._OrderWithMetadata_takerAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerAssetAmount":
+ out.Values[i] = ec._OrderWithMetadata_takerAssetAmount(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerFeeAssetData":
+ out.Values[i] = ec._OrderWithMetadata_takerFeeAssetData(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "takerFee":
+ out.Values[i] = ec._OrderWithMetadata_takerFee(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "senderAddress":
+ out.Values[i] = ec._OrderWithMetadata_senderAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "feeRecipientAddress":
+ out.Values[i] = ec._OrderWithMetadata_feeRecipientAddress(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "expirationTimeSeconds":
+ out.Values[i] = ec._OrderWithMetadata_expirationTimeSeconds(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "salt":
+ out.Values[i] = ec._OrderWithMetadata_salt(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "signature":
+ out.Values[i] = ec._OrderWithMetadata_signature(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "hash":
+ out.Values[i] = ec._OrderWithMetadata_hash(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "fillableTakerAssetAmount":
+ out.Values[i] = ec._OrderWithMetadata_fillableTakerAssetAmount(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var queryImplementors = []string{"Query"}
+
+func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors)
+
+ ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
+ Object: "Query",
+ })
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("Query")
+ case "order":
+ field := field
+ out.Concurrently(i, func() (res graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ }
+ }()
+ res = ec._Query_order(ctx, field)
+ return res
+ })
+ case "orders":
+ field := field
+ out.Concurrently(i, func() (res graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ }
+ }()
+ res = ec._Query_orders(ctx, field)
+ if res == graphql.Null {
+ atomic.AddUint32(&invalids, 1)
+ }
+ return res
+ })
+ case "stats":
+ field := field
+ out.Concurrently(i, func() (res graphql.Marshaler) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ }
+ }()
+ res = ec._Query_stats(ctx, field)
+ if res == graphql.Null {
+ atomic.AddUint32(&invalids, 1)
+ }
+ return res
+ })
+ case "__type":
+ out.Values[i] = ec._Query___type(ctx, field)
+ case "__schema":
+ out.Values[i] = ec._Query___schema(ctx, field)
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var rejectedOrderResultImplementors = []string{"RejectedOrderResult"}
+
+func (ec *executionContext) _RejectedOrderResult(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.RejectedOrderResult) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, rejectedOrderResultImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("RejectedOrderResult")
+ case "hash":
+ out.Values[i] = ec._RejectedOrderResult_hash(ctx, field, obj)
+ case "order":
+ out.Values[i] = ec._RejectedOrderResult_order(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "code":
+ out.Values[i] = ec._RejectedOrderResult_code(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "message":
+ out.Values[i] = ec._RejectedOrderResult_message(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var statsImplementors = []string{"Stats"}
+
+func (ec *executionContext) _Stats(ctx context.Context, sel ast.SelectionSet, obj *gqltypes.Stats) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, statsImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("Stats")
+ case "version":
+ out.Values[i] = ec._Stats_version(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "pubSubTopic":
+ out.Values[i] = ec._Stats_pubSubTopic(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "rendezvous":
+ out.Values[i] = ec._Stats_rendezvous(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "peerID":
+ out.Values[i] = ec._Stats_peerID(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "ethereumChainID":
+ out.Values[i] = ec._Stats_ethereumChainID(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "latestBlock":
+ out.Values[i] = ec._Stats_latestBlock(ctx, field, obj)
+ case "numPeers":
+ out.Values[i] = ec._Stats_numPeers(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "numOrders":
+ out.Values[i] = ec._Stats_numOrders(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "numOrdersIncludingRemoved":
+ out.Values[i] = ec._Stats_numOrdersIncludingRemoved(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "startOfCurrentUTCDay":
+ out.Values[i] = ec._Stats_startOfCurrentUTCDay(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "ethRPCRequestsSentInCurrentUTCDay":
+ out.Values[i] = ec._Stats_ethRPCRequestsSentInCurrentUTCDay(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "ethRPCRateLimitExpiredRequests":
+ out.Values[i] = ec._Stats_ethRPCRateLimitExpiredRequests(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "maxExpirationTime":
+ out.Values[i] = ec._Stats_maxExpirationTime(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var subscriptionImplementors = []string{"Subscription"}
+
+func (ec *executionContext) _Subscription(ctx context.Context, sel ast.SelectionSet) func() graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, subscriptionImplementors)
+ ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
+ Object: "Subscription",
+ })
+ if len(fields) != 1 {
+ ec.Errorf(ctx, "must subscribe to exactly one stream")
+ return nil
+ }
+
+ switch fields[0].Name {
+ case "orderEvents":
+ return ec._Subscription_orderEvents(ctx, fields[0])
+ default:
+ panic("unknown field " + strconv.Quote(fields[0].Name))
+ }
+}
+
+var __DirectiveImplementors = []string{"__Directive"}
+
+func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("__Directive")
+ case "name":
+ out.Values[i] = ec.___Directive_name(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "description":
+ out.Values[i] = ec.___Directive_description(ctx, field, obj)
+ case "locations":
+ out.Values[i] = ec.___Directive_locations(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "args":
+ out.Values[i] = ec.___Directive_args(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var __EnumValueImplementors = []string{"__EnumValue"}
+
+func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("__EnumValue")
+ case "name":
+ out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "description":
+ out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
+ case "isDeprecated":
+ out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "deprecationReason":
+ out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var __FieldImplementors = []string{"__Field"}
+
+func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("__Field")
+ case "name":
+ out.Values[i] = ec.___Field_name(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "description":
+ out.Values[i] = ec.___Field_description(ctx, field, obj)
+ case "args":
+ out.Values[i] = ec.___Field_args(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "type":
+ out.Values[i] = ec.___Field_type(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "isDeprecated":
+ out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "deprecationReason":
+ out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var __InputValueImplementors = []string{"__InputValue"}
+
+func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("__InputValue")
+ case "name":
+ out.Values[i] = ec.___InputValue_name(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "description":
+ out.Values[i] = ec.___InputValue_description(ctx, field, obj)
+ case "type":
+ out.Values[i] = ec.___InputValue_type(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "defaultValue":
+ out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var __SchemaImplementors = []string{"__Schema"}
+
+func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("__Schema")
+ case "types":
+ out.Values[i] = ec.___Schema_types(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "queryType":
+ out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "mutationType":
+ out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
+ case "subscriptionType":
+ out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
+ case "directives":
+ out.Values[i] = ec.___Schema_directives(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+var __TypeImplementors = []string{"__Type"}
+
+func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
+ fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
+
+ out := graphql.NewFieldSet(fields)
+ var invalids uint32
+ for i, field := range fields {
+ switch field.Name {
+ case "__typename":
+ out.Values[i] = graphql.MarshalString("__Type")
+ case "kind":
+ out.Values[i] = ec.___Type_kind(ctx, field, obj)
+ if out.Values[i] == graphql.Null {
+ invalids++
+ }
+ case "name":
+ out.Values[i] = ec.___Type_name(ctx, field, obj)
+ case "description":
+ out.Values[i] = ec.___Type_description(ctx, field, obj)
+ case "fields":
+ out.Values[i] = ec.___Type_fields(ctx, field, obj)
+ case "interfaces":
+ out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
+ case "possibleTypes":
+ out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
+ case "enumValues":
+ out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
+ case "inputFields":
+ out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
+ case "ofType":
+ out.Values[i] = ec.___Type_ofType(ctx, field, obj)
+ default:
+ panic("unknown field " + strconv.Quote(field.Name))
+ }
+ }
+ out.Dispatch()
+ if invalids > 0 {
+ return graphql.Null
+ }
+ return out
+}
+
+// endregion **************************** object.gotpl ****************************
+
+// region ***************************** type.gotpl *****************************
+
+func (ec *executionContext) marshalNAcceptedOrderResult2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAcceptedOrderResult(ctx context.Context, sel ast.SelectionSet, v gqltypes.AcceptedOrderResult) graphql.Marshaler {
+ return ec._AcceptedOrderResult(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNAcceptedOrderResult2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAcceptedOrderResultᚄ(ctx context.Context, sel ast.SelectionSet, v []*gqltypes.AcceptedOrderResult) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalNAcceptedOrderResult2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAcceptedOrderResult(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalNAcceptedOrderResult2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAcceptedOrderResult(ctx context.Context, sel ast.SelectionSet, v *gqltypes.AcceptedOrderResult) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._AcceptedOrderResult(ctx, sel, v)
+}
+
+func (ec *executionContext) marshalNAddOrdersResults2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddOrdersResults(ctx context.Context, sel ast.SelectionSet, v gqltypes.AddOrdersResults) graphql.Marshaler {
+ return ec._AddOrdersResults(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNAddOrdersResults2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddOrdersResults(ctx context.Context, sel ast.SelectionSet, v *gqltypes.AddOrdersResults) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._AddOrdersResults(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx context.Context, v interface{}) (gqltypes.Address, error) {
+ var res gqltypes.Address
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNAddress2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐAddress(ctx context.Context, sel ast.SelectionSet, v gqltypes.Address) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) unmarshalNAny2interface(ctx context.Context, v interface{}) (interface{}, error) {
+ if v == nil {
+ return nil, nil
+ }
+ return graphql.UnmarshalAny(v)
+}
+
+func (ec *executionContext) marshalNAny2interface(ctx context.Context, sel ast.SelectionSet, v interface{}) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ res := graphql.MarshalAny(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) unmarshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx context.Context, v interface{}) (gqltypes.BigNumber, error) {
+ var res gqltypes.BigNumber
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNBigNumber2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBigNumber(ctx context.Context, sel ast.SelectionSet, v gqltypes.BigNumber) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
+ return graphql.UnmarshalBoolean(v)
+}
+
+func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
+ res := graphql.MarshalBoolean(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) unmarshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx context.Context, v interface{}) (gqltypes.Bytes, error) {
+ var res gqltypes.Bytes
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNBytes2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐBytes(ctx context.Context, sel ast.SelectionSet, v gqltypes.Bytes) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) marshalNContractEvent2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐContractEvent(ctx context.Context, sel ast.SelectionSet, v gqltypes.ContractEvent) graphql.Marshaler {
+ return ec._ContractEvent(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNContractEvent2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐContractEventᚄ(ctx context.Context, sel ast.SelectionSet, v []*gqltypes.ContractEvent) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalNContractEvent2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐContractEvent(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalNContractEvent2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐContractEvent(ctx context.Context, sel ast.SelectionSet, v *gqltypes.ContractEvent) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._ContractEvent(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNFilterKind2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐFilterKind(ctx context.Context, v interface{}) (gqltypes.FilterKind, error) {
+ var res gqltypes.FilterKind
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNFilterKind2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐFilterKind(ctx context.Context, sel ast.SelectionSet, v gqltypes.FilterKind) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) unmarshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx context.Context, v interface{}) (gqltypes.Hash, error) {
+ var res gqltypes.Hash
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx context.Context, sel ast.SelectionSet, v gqltypes.Hash) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
+ return graphql.UnmarshalInt(v)
+}
+
+func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
+ res := graphql.MarshalInt(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) unmarshalNNewOrder2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐNewOrder(ctx context.Context, v interface{}) (gqltypes.NewOrder, error) {
+ return ec.unmarshalInputNewOrder(ctx, v)
+}
+
+func (ec *executionContext) unmarshalNNewOrder2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐNewOrderᚄ(ctx context.Context, v interface{}) ([]*gqltypes.NewOrder, error) {
+ var vSlice []interface{}
+ if v != nil {
+ if tmp1, ok := v.([]interface{}); ok {
+ vSlice = tmp1
+ } else {
+ vSlice = []interface{}{v}
+ }
+ }
+ var err error
+ res := make([]*gqltypes.NewOrder, len(vSlice))
+ for i := range vSlice {
+ res[i], err = ec.unmarshalNNewOrder2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐNewOrder(ctx, vSlice[i])
+ if err != nil {
+ return nil, err
+ }
+ }
+ return res, nil
+}
+
+func (ec *executionContext) unmarshalNNewOrder2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐNewOrder(ctx context.Context, v interface{}) (*gqltypes.NewOrder, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalNNewOrder2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐNewOrder(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) marshalNOrder2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrder(ctx context.Context, sel ast.SelectionSet, v gqltypes.Order) graphql.Marshaler {
+ return ec._Order(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNOrder2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrder(ctx context.Context, sel ast.SelectionSet, v *gqltypes.Order) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._Order(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNOrderEndState2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEndState(ctx context.Context, v interface{}) (gqltypes.OrderEndState, error) {
+ var res gqltypes.OrderEndState
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNOrderEndState2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEndState(ctx context.Context, sel ast.SelectionSet, v gqltypes.OrderEndState) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) marshalNOrderEvent2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEvent(ctx context.Context, sel ast.SelectionSet, v gqltypes.OrderEvent) graphql.Marshaler {
+ return ec._OrderEvent(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNOrderEvent2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEventᚄ(ctx context.Context, sel ast.SelectionSet, v []*gqltypes.OrderEvent) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalNOrderEvent2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEvent(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalNOrderEvent2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderEvent(ctx context.Context, sel ast.SelectionSet, v *gqltypes.OrderEvent) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._OrderEvent(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNOrderField2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderField(ctx context.Context, v interface{}) (gqltypes.OrderField, error) {
+ var res gqltypes.OrderField
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNOrderField2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderField(ctx context.Context, sel ast.SelectionSet, v gqltypes.OrderField) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) unmarshalNOrderFilter2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderFilter(ctx context.Context, v interface{}) (gqltypes.OrderFilter, error) {
+ return ec.unmarshalInputOrderFilter(ctx, v)
+}
+
+func (ec *executionContext) unmarshalNOrderFilter2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderFilter(ctx context.Context, v interface{}) (*gqltypes.OrderFilter, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalNOrderFilter2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderFilter(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) unmarshalNOrderSort2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderSort(ctx context.Context, v interface{}) (gqltypes.OrderSort, error) {
+ return ec.unmarshalInputOrderSort(ctx, v)
+}
+
+func (ec *executionContext) unmarshalNOrderSort2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderSort(ctx context.Context, v interface{}) (*gqltypes.OrderSort, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalNOrderSort2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderSort(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) marshalNOrderWithMetadata2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx context.Context, sel ast.SelectionSet, v gqltypes.OrderWithMetadata) graphql.Marshaler {
+ return ec._OrderWithMetadata(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNOrderWithMetadata2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadataᚄ(ctx context.Context, sel ast.SelectionSet, v []*gqltypes.OrderWithMetadata) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalNOrderWithMetadata2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalNOrderWithMetadata2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx context.Context, sel ast.SelectionSet, v *gqltypes.OrderWithMetadata) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._OrderWithMetadata(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNRejectedOrderCode2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderCode(ctx context.Context, v interface{}) (gqltypes.RejectedOrderCode, error) {
+ var res gqltypes.RejectedOrderCode
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNRejectedOrderCode2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderCode(ctx context.Context, sel ast.SelectionSet, v gqltypes.RejectedOrderCode) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) marshalNRejectedOrderResult2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderResult(ctx context.Context, sel ast.SelectionSet, v gqltypes.RejectedOrderResult) graphql.Marshaler {
+ return ec._RejectedOrderResult(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNRejectedOrderResult2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderResultᚄ(ctx context.Context, sel ast.SelectionSet, v []*gqltypes.RejectedOrderResult) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalNRejectedOrderResult2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderResult(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalNRejectedOrderResult2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐRejectedOrderResult(ctx context.Context, sel ast.SelectionSet, v *gqltypes.RejectedOrderResult) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._RejectedOrderResult(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNSortDirection2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐSortDirection(ctx context.Context, v interface{}) (gqltypes.SortDirection, error) {
+ var res gqltypes.SortDirection
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalNSortDirection2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐSortDirection(ctx context.Context, sel ast.SelectionSet, v gqltypes.SortDirection) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) marshalNStats2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐStats(ctx context.Context, sel ast.SelectionSet, v gqltypes.Stats) graphql.Marshaler {
+ return ec._Stats(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNStats2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐStats(ctx context.Context, sel ast.SelectionSet, v *gqltypes.Stats) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec._Stats(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
+ return graphql.UnmarshalString(v)
+}
+
+func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
+ res := graphql.MarshalString(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) unmarshalNTime2timeᚐTime(ctx context.Context, v interface{}) (time.Time, error) {
+ return graphql.UnmarshalTime(v)
+}
+
+func (ec *executionContext) marshalNTime2timeᚐTime(ctx context.Context, sel ast.SelectionSet, v time.Time) graphql.Marshaler {
+ res := graphql.MarshalTime(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
+ return ec.___Directive(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
+ return graphql.UnmarshalString(v)
+}
+
+func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
+ res := graphql.MarshalString(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
+ var vSlice []interface{}
+ if v != nil {
+ if tmp1, ok := v.([]interface{}); ok {
+ vSlice = tmp1
+ } else {
+ vSlice = []interface{}{v}
+ }
+ }
+ var err error
+ res := make([]string, len(vSlice))
+ for i := range vSlice {
+ res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
+ if err != nil {
+ return nil, err
+ }
+ }
+ return res, nil
+}
+
+func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
+ return ec.___EnumValue(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
+ return ec.___Field(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
+ return ec.___InputValue(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
+ return ec.___Type(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
+ if v == nil {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ return graphql.Null
+ }
+ return ec.___Type(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
+ return graphql.UnmarshalString(v)
+}
+
+func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
+ res := graphql.MarshalString(v)
+ if res == graphql.Null {
+ if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+ ec.Errorf(ctx, "must not be null")
+ }
+ }
+ return res
+}
+
+func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
+ return graphql.UnmarshalBoolean(v)
+}
+
+func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
+ return graphql.MarshalBoolean(v)
+}
+
+func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalOBoolean2bool(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec.marshalOBoolean2bool(ctx, sel, *v)
+}
+
+func (ec *executionContext) unmarshalOHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx context.Context, v interface{}) (gqltypes.Hash, error) {
+ var res gqltypes.Hash
+ return res, res.UnmarshalGQL(v)
+}
+
+func (ec *executionContext) marshalOHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx context.Context, sel ast.SelectionSet, v gqltypes.Hash) graphql.Marshaler {
+ return v
+}
+
+func (ec *executionContext) unmarshalOHash2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx context.Context, v interface{}) (*gqltypes.Hash, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalOHash2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) marshalOHash2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐHash(ctx context.Context, sel ast.SelectionSet, v *gqltypes.Hash) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return v
+}
+
+func (ec *executionContext) unmarshalOInt2int(ctx context.Context, v interface{}) (int, error) {
+ return graphql.UnmarshalInt(v)
+}
+
+func (ec *executionContext) marshalOInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
+ return graphql.MarshalInt(v)
+}
+
+func (ec *executionContext) unmarshalOInt2ᚖint(ctx context.Context, v interface{}) (*int, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalOInt2int(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) marshalOInt2ᚖint(ctx context.Context, sel ast.SelectionSet, v *int) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec.marshalOInt2int(ctx, sel, *v)
+}
+
+func (ec *executionContext) marshalOLatestBlock2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐLatestBlock(ctx context.Context, sel ast.SelectionSet, v gqltypes.LatestBlock) graphql.Marshaler {
+ return ec._LatestBlock(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalOLatestBlock2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐLatestBlock(ctx context.Context, sel ast.SelectionSet, v *gqltypes.LatestBlock) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec._LatestBlock(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalOOrderFilter2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderFilterᚄ(ctx context.Context, v interface{}) ([]*gqltypes.OrderFilter, error) {
+ var vSlice []interface{}
+ if v != nil {
+ if tmp1, ok := v.([]interface{}); ok {
+ vSlice = tmp1
+ } else {
+ vSlice = []interface{}{v}
+ }
+ }
+ var err error
+ res := make([]*gqltypes.OrderFilter, len(vSlice))
+ for i := range vSlice {
+ res[i], err = ec.unmarshalNOrderFilter2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderFilter(ctx, vSlice[i])
+ if err != nil {
+ return nil, err
+ }
+ }
+ return res, nil
+}
+
+func (ec *executionContext) unmarshalOOrderSort2ᚕᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderSortᚄ(ctx context.Context, v interface{}) ([]*gqltypes.OrderSort, error) {
+ var vSlice []interface{}
+ if v != nil {
+ if tmp1, ok := v.([]interface{}); ok {
+ vSlice = tmp1
+ } else {
+ vSlice = []interface{}{v}
+ }
+ }
+ var err error
+ res := make([]*gqltypes.OrderSort, len(vSlice))
+ for i := range vSlice {
+ res[i], err = ec.unmarshalNOrderSort2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderSort(ctx, vSlice[i])
+ if err != nil {
+ return nil, err
+ }
+ }
+ return res, nil
+}
+
+func (ec *executionContext) marshalOOrderWithMetadata2githubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx context.Context, sel ast.SelectionSet, v gqltypes.OrderWithMetadata) graphql.Marshaler {
+ return ec._OrderWithMetadata(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalOOrderWithMetadata2ᚖgithubᚗcomᚋ0xProjectᚋ0xᚑmeshᚋgraphqlᚋgqltypesᚐOrderWithMetadata(ctx context.Context, sel ast.SelectionSet, v *gqltypes.OrderWithMetadata) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec._OrderWithMetadata(ctx, sel, v)
+}
+
+func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
+ return graphql.UnmarshalString(v)
+}
+
+func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
+ return graphql.MarshalString(v)
+}
+
+func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
+ if v == nil {
+ return nil, nil
+ }
+ res, err := ec.unmarshalOString2string(ctx, v)
+ return &res, err
+}
+
+func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec.marshalOString2string(ctx, sel, *v)
+}
+
+func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
+ return ec.___Schema(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec.___Schema(ctx, sel, v)
+}
+
+func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
+ return ec.___Type(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ ret := make(graphql.Array, len(v))
+ var wg sync.WaitGroup
+ isLen1 := len(v) == 1
+ if !isLen1 {
+ wg.Add(len(v))
+ }
+ for i := range v {
+ i := i
+ fc := &graphql.FieldContext{
+ Index: &i,
+ Result: &v[i],
+ }
+ ctx := graphql.WithFieldContext(ctx, fc)
+ f := func(i int) {
+ defer func() {
+ if r := recover(); r != nil {
+ ec.Error(ctx, ec.Recover(ctx, r))
+ ret = nil
+ }
+ }()
+ if !isLen1 {
+ defer wg.Done()
+ }
+ ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
+ }
+ if isLen1 {
+ f(i)
+ } else {
+ go f(i)
+ }
+
+ }
+ wg.Wait()
+ return ret
+}
+
+func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
+ if v == nil {
+ return graphql.Null
+ }
+ return ec.___Type(ctx, sel, v)
+}
+
+// endregion ***************************** type.gotpl *****************************
diff --git a/graphql/gqltypes/conversions.go b/graphql/gqltypes/conversions.go
new file mode 100644
index 000000000..98cb85fe3
--- /dev/null
+++ b/graphql/gqltypes/conversions.go
@@ -0,0 +1,481 @@
+package gqltypes
+
+import (
+ "fmt"
+ "math/big"
+ "strings"
+
+ "github.com/0xProject/0x-mesh/common/types"
+ "github.com/0xProject/0x-mesh/db"
+ "github.com/0xProject/0x-mesh/zeroex"
+ "github.com/0xProject/0x-mesh/zeroex/ordervalidator"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/math"
+)
+
+func StatsFromCommonType(stats *types.Stats) *Stats {
+ return &Stats{
+ Version: stats.Version,
+ PubSubTopic: stats.PubSubTopic,
+ Rendezvous: stats.Rendezvous,
+ PeerID: stats.PeerID,
+ // TODO(albrow): This should be a big.Int in core package.
+ EthereumChainID: stats.EthereumChainID,
+ // TODO(albrow): LatestBlock should be a pointer in core package.
+ LatestBlock: LatestBlockFromCommonType(stats.LatestBlock),
+ NumPeers: stats.NumPeers,
+ NumOrders: stats.NumOrders,
+ NumOrdersIncludingRemoved: stats.NumOrdersIncludingRemoved,
+ StartOfCurrentUTCDay: stats.StartOfCurrentUTCDay,
+ EthRPCRequestsSentInCurrentUTCDay: stats.EthRPCRequestsSentInCurrentUTCDay,
+ EthRPCRateLimitExpiredRequests: int(stats.EthRPCRateLimitExpiredRequests),
+ MaxExpirationTime: BigNumber(*stats.MaxExpirationTime),
+ }
+}
+
+func LatestBlockFromCommonType(latestBlock types.LatestBlock) *LatestBlock {
+ return &LatestBlock{
+ Number: BigNumber(*latestBlock.Number),
+ Hash: Hash(latestBlock.Hash),
+ }
+}
+
+func BigNumberToBigInt(bigNumber BigNumber) *big.Int {
+ bigInt := big.Int(bigNumber)
+ return &bigInt
+}
+
+func NewOrderToSignedOrder(newOrder *NewOrder) *zeroex.SignedOrder {
+ return &zeroex.SignedOrder{
+ Order: zeroex.Order{
+ ChainID: BigNumberToBigInt(newOrder.ChainID),
+ ExchangeAddress: common.Address(newOrder.ExchangeAddress),
+ MakerAddress: common.Address(newOrder.MakerAddress),
+ MakerAssetData: newOrder.MakerAssetData,
+ MakerFeeAssetData: newOrder.MakerFeeAssetData,
+ MakerAssetAmount: BigNumberToBigInt(newOrder.MakerAssetAmount),
+ MakerFee: BigNumberToBigInt(newOrder.MakerFee),
+ TakerAddress: common.Address(newOrder.TakerAddress),
+ TakerAssetData: newOrder.TakerAssetData,
+ TakerFeeAssetData: newOrder.TakerFeeAssetData,
+ TakerAssetAmount: BigNumberToBigInt(newOrder.TakerAssetAmount),
+ TakerFee: BigNumberToBigInt(newOrder.TakerFee),
+ SenderAddress: common.Address(newOrder.SenderAddress),
+ FeeRecipientAddress: common.Address(newOrder.FeeRecipientAddress),
+ ExpirationTimeSeconds: BigNumberToBigInt(newOrder.ExpirationTimeSeconds),
+ Salt: BigNumberToBigInt(newOrder.Salt),
+ },
+ Signature: newOrder.Signature,
+ }
+}
+
+func NewOrdersToSignedOrders(newOrders []*NewOrder) []*zeroex.SignedOrder {
+ result := make([]*zeroex.SignedOrder, len(newOrders))
+ for i, newOrder := range newOrders {
+ result[i] = NewOrderToSignedOrder(newOrder)
+ }
+ return result
+}
+
+func NewOrderFromSignedOrder(signedOrder *zeroex.SignedOrder) *NewOrder {
+ return &NewOrder{
+ ChainID: BigNumber(*signedOrder.ChainID),
+ ExchangeAddress: Address(signedOrder.ExchangeAddress),
+ MakerAddress: Address(signedOrder.MakerAddress),
+ MakerAssetData: signedOrder.MakerAssetData,
+ MakerFeeAssetData: signedOrder.MakerFeeAssetData,
+ MakerAssetAmount: BigNumber(*signedOrder.MakerAssetAmount),
+ MakerFee: BigNumber(*signedOrder.MakerFee),
+ TakerAddress: Address(signedOrder.TakerAddress),
+ TakerAssetData: signedOrder.TakerAssetData,
+ TakerFeeAssetData: signedOrder.TakerFeeAssetData,
+ TakerAssetAmount: BigNumber(*signedOrder.TakerAssetAmount),
+ TakerFee: BigNumber(*signedOrder.TakerFee),
+ SenderAddress: Address(signedOrder.SenderAddress),
+ FeeRecipientAddress: Address(signedOrder.FeeRecipientAddress),
+ ExpirationTimeSeconds: BigNumber(*signedOrder.ExpirationTimeSeconds),
+ Salt: BigNumber(*signedOrder.Salt),
+ Signature: signedOrder.Signature,
+ }
+}
+
+func NewOrdersFromSignedOrders(signedOrders []*zeroex.SignedOrder) []*NewOrder {
+ result := make([]*NewOrder, len(signedOrders))
+ for i, order := range signedOrders {
+ result[i] = NewOrderFromSignedOrder(order)
+ }
+ return result
+}
+
+func OrderWithMetadataFromCommonType(order *types.OrderWithMetadata) *OrderWithMetadata {
+ return &OrderWithMetadata{
+ Hash: Hash(order.Hash),
+ ChainID: BigNumber(*order.ChainID),
+ ExchangeAddress: Address(order.ExchangeAddress),
+ MakerAddress: Address(order.MakerAddress),
+ MakerAssetData: Bytes(order.MakerAssetData),
+ MakerFeeAssetData: Bytes(order.MakerFeeAssetData),
+ MakerAssetAmount: BigNumber(*order.MakerAssetAmount),
+ MakerFee: BigNumber(*order.MakerFee),
+ TakerAddress: Address(order.TakerAddress),
+ TakerAssetData: Bytes(order.TakerAssetData),
+ TakerFeeAssetData: Bytes(order.TakerFeeAssetData),
+ TakerAssetAmount: BigNumber(*order.TakerAssetAmount),
+ TakerFee: BigNumber(*order.TakerFee),
+ SenderAddress: Address(order.SenderAddress),
+ FeeRecipientAddress: Address(order.FeeRecipientAddress),
+ ExpirationTimeSeconds: BigNumber(*order.ExpirationTimeSeconds),
+ Salt: BigNumber(*order.Salt),
+ Signature: Bytes(order.Signature),
+ FillableTakerAssetAmount: BigNumber(*order.FillableTakerAssetAmount),
+ }
+}
+
+func OrdersWithMetadataFromCommonType(orders []*types.OrderWithMetadata) []*OrderWithMetadata {
+ result := make([]*OrderWithMetadata, len(orders))
+ for i, order := range orders {
+ result[i] = OrderWithMetadataFromCommonType(order)
+ }
+ return result
+}
+
+func AddOrdersResultsFromValidationResults(validationResults *ordervalidator.ValidationResults) (*AddOrdersResults, error) {
+ rejected, err := RejectedOrderResultsFromOrderInfos(validationResults.Rejected)
+ if err != nil {
+ return nil, err
+ }
+ return &AddOrdersResults{
+ Accepted: AcceptedOrderResultsFromOrderInfos(validationResults.Accepted),
+ Rejected: rejected,
+ }, nil
+}
+
+func AcceptedOrderResultFromOrderInfo(info *ordervalidator.AcceptedOrderInfo) *AcceptedOrderResult {
+ return &AcceptedOrderResult{
+ Order: &OrderWithMetadata{
+ Hash: Hash(info.OrderHash),
+ ChainID: BigNumber(*info.SignedOrder.ChainID),
+ ExchangeAddress: Address(info.SignedOrder.ExchangeAddress),
+ MakerAddress: Address(info.SignedOrder.MakerAddress),
+ MakerAssetData: Bytes(info.SignedOrder.MakerAssetData),
+ MakerFeeAssetData: Bytes(info.SignedOrder.MakerFeeAssetData),
+ MakerAssetAmount: BigNumber(*info.SignedOrder.MakerAssetAmount),
+ MakerFee: BigNumber(*info.SignedOrder.MakerFee),
+ TakerAddress: Address(info.SignedOrder.TakerAddress),
+ TakerAssetData: Bytes(info.SignedOrder.TakerAssetData),
+ TakerFeeAssetData: Bytes(info.SignedOrder.TakerFeeAssetData),
+ TakerAssetAmount: BigNumber(*info.SignedOrder.TakerAssetAmount),
+ TakerFee: BigNumber(*info.SignedOrder.TakerFee),
+ SenderAddress: Address(info.SignedOrder.SenderAddress),
+ FeeRecipientAddress: Address(info.SignedOrder.FeeRecipientAddress),
+ ExpirationTimeSeconds: BigNumber(*info.SignedOrder.ExpirationTimeSeconds),
+ Salt: BigNumber(*info.SignedOrder.Salt),
+ Signature: Bytes(info.SignedOrder.Signature),
+ FillableTakerAssetAmount: BigNumber(*info.FillableTakerAssetAmount),
+ },
+ IsNew: info.IsNew,
+ }
+}
+
+func AcceptedOrderResultsFromOrderInfos(infos []*ordervalidator.AcceptedOrderInfo) []*AcceptedOrderResult {
+ result := make([]*AcceptedOrderResult, len(infos))
+ for i, info := range infos {
+ result[i] = AcceptedOrderResultFromOrderInfo(info)
+ }
+ return result
+}
+
+func RejectedOrderResultFromOrderInfo(info *ordervalidator.RejectedOrderInfo) (*RejectedOrderResult, error) {
+ var hash *Hash
+ if info.OrderHash.Hex() != "0x" {
+ gqlHash := Hash(info.OrderHash)
+ hash = &gqlHash
+ }
+ code, err := RejectedCodeFromValidatorStatus(info.Status)
+ if err != nil {
+ return nil, err
+ }
+ return &RejectedOrderResult{
+ Hash: hash,
+ Order: &Order{
+ ChainID: BigNumber(*info.SignedOrder.ChainID),
+ ExchangeAddress: Address(info.SignedOrder.ExchangeAddress),
+ MakerAddress: Address(info.SignedOrder.MakerAddress),
+ MakerAssetData: Bytes(info.SignedOrder.MakerAssetData),
+ MakerFeeAssetData: Bytes(info.SignedOrder.MakerFeeAssetData),
+ MakerAssetAmount: BigNumber(*info.SignedOrder.MakerAssetAmount),
+ MakerFee: BigNumber(*info.SignedOrder.MakerFee),
+ TakerAddress: Address(info.SignedOrder.TakerAddress),
+ TakerAssetData: Bytes(info.SignedOrder.TakerAssetData),
+ TakerFeeAssetData: Bytes(info.SignedOrder.TakerFeeAssetData),
+ TakerAssetAmount: BigNumber(*info.SignedOrder.TakerAssetAmount),
+ TakerFee: BigNumber(*info.SignedOrder.TakerFee),
+ SenderAddress: Address(info.SignedOrder.SenderAddress),
+ FeeRecipientAddress: Address(info.SignedOrder.FeeRecipientAddress),
+ ExpirationTimeSeconds: BigNumber(*info.SignedOrder.ExpirationTimeSeconds),
+ Salt: BigNumber(*info.SignedOrder.Salt),
+ Signature: Bytes(info.SignedOrder.Signature),
+ },
+ Code: code,
+ Message: info.Status.Message,
+ }, nil
+}
+
+func RejectedOrderResultsFromOrderInfos(infos []*ordervalidator.RejectedOrderInfo) ([]*RejectedOrderResult, error) {
+ result := make([]*RejectedOrderResult, len(infos))
+ for i, info := range infos {
+ rejectedResult, err := RejectedOrderResultFromOrderInfo(info)
+ if err != nil {
+ return nil, err
+ }
+ result[i] = rejectedResult
+ }
+ return result, nil
+}
+
+func OrderEventFromZeroExType(event *zeroex.OrderEvent) *OrderEvent {
+ return &OrderEvent{
+ Order: &OrderWithMetadata{
+ Hash: Hash(event.OrderHash),
+ ChainID: BigNumber(*event.SignedOrder.ChainID),
+ ExchangeAddress: Address(event.SignedOrder.ExchangeAddress),
+ MakerAddress: Address(event.SignedOrder.MakerAddress),
+ MakerAssetData: Bytes(event.SignedOrder.MakerAssetData),
+ MakerFeeAssetData: Bytes(event.SignedOrder.MakerFeeAssetData),
+ MakerAssetAmount: BigNumber(*event.SignedOrder.MakerAssetAmount),
+ MakerFee: BigNumber(*event.SignedOrder.MakerFee),
+ TakerAddress: Address(event.SignedOrder.TakerAddress),
+ TakerAssetData: Bytes(event.SignedOrder.TakerAssetData),
+ TakerFeeAssetData: Bytes(event.SignedOrder.TakerFeeAssetData),
+ TakerAssetAmount: BigNumber(*event.SignedOrder.TakerAssetAmount),
+ TakerFee: BigNumber(*event.SignedOrder.TakerFee),
+ SenderAddress: Address(event.SignedOrder.SenderAddress),
+ FeeRecipientAddress: Address(event.SignedOrder.FeeRecipientAddress),
+ ExpirationTimeSeconds: BigNumber(*event.SignedOrder.ExpirationTimeSeconds),
+ Salt: BigNumber(*event.SignedOrder.Salt),
+ Signature: Bytes(event.SignedOrder.Signature),
+ FillableTakerAssetAmount: BigNumber(*event.FillableTakerAssetAmount),
+ },
+ EndState: OrderEndState(event.EndState),
+ Timestamp: event.Timestamp,
+ ContractEvents: ContractEventsFromZeroExType(event.ContractEvents),
+ }
+}
+
+func OrderEventsFromZeroExType(orderEvents []*zeroex.OrderEvent) []*OrderEvent {
+ result := make([]*OrderEvent, len(orderEvents))
+ for i, event := range orderEvents {
+ result[i] = OrderEventFromZeroExType(event)
+ }
+ return result
+}
+
+func ContractEventFromZeroExType(event *zeroex.ContractEvent) *ContractEvent {
+ return &ContractEvent{
+ BlockHash: Hash(event.BlockHash),
+ TxHash: Hash(event.TxHash),
+ TxIndex: int(event.TxIndex),
+ LogIndex: int(event.LogIndex),
+ IsRemoved: event.IsRemoved,
+ Address: Address(event.Address),
+ Kind: event.Kind,
+ Parameters: event.Parameters,
+ }
+}
+
+func ContractEventsFromZeroExType(events []*zeroex.ContractEvent) []*ContractEvent {
+ result := make([]*ContractEvent, len(events))
+ for i, event := range events {
+ result[i] = ContractEventFromZeroExType(event)
+ }
+ return result
+}
+
+func RejectedCodeFromValidatorStatus(status ordervalidator.RejectedOrderStatus) (RejectedOrderCode, error) {
+ switch status.Code {
+ case ordervalidator.ROEthRPCRequestFailed.Code:
+ return RejectedOrderCodeEthRPCRequestFailed, nil
+ case ordervalidator.ROInvalidMakerAssetAmount.Code:
+ return RejectedOrderCodeOrderHasInvalidMakerAssetAmount, nil
+ case ordervalidator.ROInvalidTakerAssetAmount.Code:
+ return RejectedOrderCodeOrderHasInvalidTakerAssetAmount, nil
+ case ordervalidator.ROExpired.Code:
+ return RejectedOrderCodeOrderExpired, nil
+ case ordervalidator.ROFullyFilled.Code:
+ return RejectedOrderCodeOrderFullyFilled, nil
+ case ordervalidator.ROCancelled.Code:
+ return RejectedOrderCodeOrderCancelled, nil
+ case ordervalidator.ROUnfunded.Code:
+ return RejectedOrderCodeOrderUnfunded, nil
+ case ordervalidator.ROInvalidMakerAssetData.Code:
+ return RejectedOrderCodeOrderHasInvalidMakerAssetData, nil
+ case ordervalidator.ROInvalidMakerFeeAssetData.Code:
+ return RejectedOrderCodeOrderHasInvalidMakerFeeAssetData, nil
+ case ordervalidator.ROInvalidTakerAssetData.Code:
+ return RejectedOrderCodeOrderHasInvalidTakerAssetData, nil
+ case ordervalidator.ROInvalidTakerFeeAssetData.Code:
+ return RejectedOrderCodeOrderHasInvalidTakerFeeAssetData, nil
+ case ordervalidator.ROInvalidSignature.Code:
+ return RejectedOrderCodeOrderHasInvalidSignature, nil
+ case ordervalidator.ROMaxExpirationExceeded.Code:
+ return RejectedOrderCodeOrderMaxExpirationExceeded, nil
+ case ordervalidator.ROInternalError.Code:
+ return RejectedOrderCodeInternalError, nil
+ case ordervalidator.ROMaxOrderSizeExceeded.Code:
+ return RejectedOrderCodeMaxOrderSizeExceeded, nil
+ case ordervalidator.ROOrderAlreadyStoredAndUnfillable.Code:
+ return RejectedOrderCodeOrderAlreadyStoredAndUnfillable, nil
+ case ordervalidator.ROIncorrectChain.Code:
+ return RejectedOrderCodeOrderForIncorrectChain, nil
+ case ordervalidator.ROIncorrectExchangeAddress.Code:
+ return RejectedOrderCodeIncorrectExchangeAddress, nil
+ case ordervalidator.ROSenderAddressNotAllowed.Code:
+ return RejectedOrderCodeSenderAddressNotAllowed, nil
+ case ordervalidator.RODatabaseFullOfOrders.Code:
+ return RejectedOrderCodeDatabaseFullOfOrders, nil
+ default:
+ return "", fmt.Errorf("unexpected RejectedOrderStatus.Code: %q", status.Code)
+ }
+}
+
+func FilterKindToDBType(kind FilterKind) (db.FilterKind, error) {
+ switch kind {
+ case FilterKindEqual:
+ return db.Equal, nil
+ case FilterKindNotEqual:
+ return db.NotEqual, nil
+ case FilterKindGreater:
+ return db.Greater, nil
+ case FilterKindGreaterOrEqual:
+ return db.GreaterOrEqual, nil
+ case FilterKindLess:
+ return db.Less, nil
+ case FilterKindLessOrEqual:
+ return db.LessOrEqual, nil
+ default:
+ return "", fmt.Errorf("invalid filter kind: %q", kind)
+ }
+}
+
+// FilterValueFromJSON converts the filter value from the JSON type to the
+// corresponding Go type. It returns an error if the JSON type does not match
+// what was expected based on the filter field.
+func FilterValueFromJSON(f OrderFilter) (interface{}, error) {
+ switch f.Field {
+ case OrderFieldChainID, OrderFieldMakerAssetAmount, OrderFieldMakerFee, OrderFieldTakerAssetAmount, OrderFieldTakerFee, OrderFieldExpirationTimeSeconds, OrderFieldSalt, OrderFieldFillableTakerAssetAmount:
+ return stringToBigInt(f.Value)
+ case OrderFieldHash:
+ return stringToHash(f.Value)
+ case OrderFieldExchangeAddress, OrderFieldMakerAddress, OrderFieldTakerAddress, OrderFieldSenderAddress, OrderFieldFeeRecipientAddress:
+ return stringToAddress(f.Value)
+ case OrderFieldMakerAssetData, OrderFieldMakerFeeAssetData, OrderFieldTakerAssetData, OrderFieldTakerFeeAssetData:
+ return stringToBytes(f.Value)
+ default:
+ return "", fmt.Errorf("invalid filter field: %q", f.Field)
+ }
+}
+
+// FilterValueToJSON converts the filter value from a native Go type to the
+// corresponding JSON value. It returns an error if the Go type does not match
+// what was expected based on the filter field.
+func FilterValueToJSON(f OrderFilter) (string, error) {
+ switch f.Field {
+ case OrderFieldChainID, OrderFieldMakerAssetAmount, OrderFieldMakerFee, OrderFieldTakerAssetAmount, OrderFieldTakerFee, OrderFieldExpirationTimeSeconds, OrderFieldSalt, OrderFieldFillableTakerAssetAmount:
+ return bigIntToString(f.Value)
+ case OrderFieldHash:
+ return hashToString(f.Value)
+ case OrderFieldExchangeAddress, OrderFieldMakerAddress, OrderFieldTakerAddress, OrderFieldSenderAddress, OrderFieldFeeRecipientAddress:
+ return addressToString(f.Value)
+ case OrderFieldMakerAssetData, OrderFieldMakerFeeAssetData, OrderFieldTakerAssetData, OrderFieldTakerFeeAssetData:
+ return bytesToString(f.Value)
+ default:
+ return "", fmt.Errorf("invalid filter field: %q", f.Field)
+ }
+}
+
+func bigIntToString(value interface{}) (string, error) {
+ bigInt, ok := value.(*big.Int)
+ if !ok {
+ return "", fmt.Errorf("invalid type for filter value (expected *big.Int but got %T)", value)
+ }
+ return bigInt.String(), nil
+}
+
+func hashToString(value interface{}) (string, error) {
+ hash, ok := value.(common.Hash)
+ if !ok {
+ return "", fmt.Errorf("invalid type for filter value (expected common.Hash but got %T)", value)
+ }
+ return hash.Hex(), nil
+}
+
+func addressToString(value interface{}) (string, error) {
+ address, ok := value.(common.Address)
+ if !ok {
+ return "", fmt.Errorf("invalid type for filter value (expected common.Address but got %T)", value)
+ }
+ return strings.ToLower(address.Hex()), nil
+}
+
+func bytesToString(value interface{}) (string, error) {
+ bytes, ok := value.([]byte)
+ if !ok {
+ return "", fmt.Errorf("invalid type for filter value (expected []byte but got %T)", value)
+ }
+ return common.ToHex(bytes), nil
+}
+
+func filterValueAsString(value interface{}) (string, error) {
+ valueString, ok := value.(string)
+ if !ok {
+ return "", fmt.Errorf("invalid type for filter value (expected string but got %T)", value)
+ }
+ return valueString, nil
+}
+
+func stringToBigInt(value interface{}) (*big.Int, error) {
+ valueString, err := filterValueAsString(value)
+ if err != nil {
+ return nil, err
+ }
+ result, valid := math.ParseBig256(valueString)
+ if !valid {
+ return nil, fmt.Errorf("could not convert %q to *big.Int", value)
+ }
+ return result, nil
+}
+
+func stringToHash(value interface{}) (common.Hash, error) {
+ valueString, err := filterValueAsString(value)
+ if err != nil {
+ return common.Hash{}, err
+ }
+ return common.HexToHash(valueString), nil
+}
+
+func stringToAddress(value interface{}) (common.Address, error) {
+ valueString, err := filterValueAsString(value)
+ if err != nil {
+ return common.Address{}, err
+ }
+ return common.HexToAddress(valueString), nil
+}
+
+func stringToBytes(value interface{}) ([]byte, error) {
+ valueString, err := filterValueAsString(value)
+ if err != nil {
+ return nil, err
+ }
+ return common.FromHex(valueString), nil
+}
+
+func SortDirectionToDBType(direction SortDirection) (db.SortDirection, error) {
+ switch direction {
+ case SortDirectionAsc:
+ return db.Ascending, nil
+ case SortDirectionDesc:
+ return db.Descending, nil
+ default:
+ return "", fmt.Errorf("invalid sort direction: %q", direction)
+ }
+}
diff --git a/graphql/gqltypes/types.go b/graphql/gqltypes/types.go
new file mode 100644
index 000000000..dd38c6287
--- /dev/null
+++ b/graphql/gqltypes/types.go
@@ -0,0 +1,190 @@
+// Contains non-generated custom model code.
+
+package gqltypes
+
+import (
+ "fmt"
+ "io"
+ "math/big"
+ "strconv"
+ "strings"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/math"
+)
+
+// Hash is a 32-byte Keccak256 hash encoded as a hexadecimal string.
+type Hash common.Hash
+
+// MarshalGQL implements the graphql.Marshaler interface
+func (h Hash) MarshalGQL(w io.Writer) {
+ quotedHexString := strconv.Quote(common.Hash(h).Hex())
+ _, _ = w.Write([]byte(quotedHexString))
+}
+
+// UnmarshalGQL implements the graphql.Unmarshaler interface
+func (h *Hash) UnmarshalGQL(v interface{}) error {
+ s, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("Hash must be a hex-encoded string")
+ }
+ hash := common.HexToHash(unquoteIfNeeded(s))
+ if (hash == common.Hash{}) {
+ return fmt.Errorf("invalid Hash value: %q", s)
+ }
+ (*h) = Hash(hash)
+
+ return nil
+}
+
+func (h Hash) MarshalJSON() ([]byte, error) {
+ quotedHexString := strconv.Quote(common.Hash(h).Hex())
+ return []byte(quotedHexString), nil
+}
+
+func (h *Hash) UnmarshalJSON(data []byte) error {
+ unquoted, err := strconv.Unquote(string(data))
+ if err != nil {
+ return fmt.Errorf("Hash should be a hex-encoded string: %s", err)
+ }
+ hash := common.HexToHash(unquoted)
+ if (hash == common.Hash{}) {
+ return fmt.Errorf("invalid Hash value: %q", data)
+ }
+ (*h) = Hash(hash)
+
+ return nil
+}
+
+// Address is an Ethereum address encoded as a hexadecimal string.
+type Address common.Address
+
+// MarshalGQL implements the graphql.Marshaler interface
+func (a Address) MarshalGQL(w io.Writer) {
+ hexString := strings.ToLower(common.Address(a).Hex())
+ quotedHexString := strconv.Quote(hexString)
+ _, _ = w.Write([]byte(quotedHexString))
+}
+
+// UnmarshalGQL implements the graphql.Unmarshaler interface
+func (a *Address) UnmarshalGQL(v interface{}) error {
+ s, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("Address must be a hex-encoded string")
+ }
+ // TODO(albrow): Check if valid hex.
+ address := common.HexToAddress(unquoteIfNeeded(s))
+ (*a) = Address(address)
+
+ return nil
+}
+
+func (a Address) MarshalJSON() ([]byte, error) {
+ hexString := strings.ToLower(common.Address(a).Hex())
+ quotedHexString := strconv.Quote(hexString)
+ return []byte(quotedHexString), nil
+}
+
+func (a *Address) UnmarshalJSON(data []byte) error {
+ // TODO(albrow): Check if valid hex.
+ address := common.HexToAddress(unquoteIfNeeded(string(data)))
+ (*a) = Address(address)
+ return nil
+}
+
+// BigNumber is a uint256 value encoded as a numerical string.
+type BigNumber big.Int
+
+// MarshalGQL implements the graphql.Marshaler interface
+func (b BigNumber) MarshalGQL(w io.Writer) {
+ bigInt := big.Int(b)
+ quotedString := strconv.Quote(bigInt.String())
+ _, _ = w.Write([]byte(quotedString))
+}
+
+// UnmarshalGQL implements the graphql.Unmarshaler interface
+func (b *BigNumber) UnmarshalGQL(v interface{}) error {
+ s, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("BigNumber must be a numerical string but got %T %v", v, v)
+ }
+ bigInt, ok := math.ParseBig256(unquoteIfNeeded(s))
+ if !ok {
+ return fmt.Errorf("invalid BigNumber value: %s", s)
+ }
+ (*b) = BigNumber(*bigInt)
+
+ return nil
+}
+
+func (b BigNumber) MarshalJSON() ([]byte, error) {
+ bigInt := big.Int(b)
+ quotedString := strconv.Quote(bigInt.String())
+ return []byte(quotedString), nil
+}
+
+func (b *BigNumber) UnmarshalJSON(data []byte) error {
+ dataString := unquoteIfNeeded(string(data))
+ bigInt, ok := math.ParseBig256(dataString)
+ if !ok {
+ return fmt.Errorf("invalid BigNumber value: %s", data)
+ }
+ (*b) = BigNumber(*bigInt)
+ return nil
+}
+
+// Bytes is an array of arbitrary bytes encoded as a hexadecimal string.
+type Bytes []byte
+
+// MarshalGQL implements the graphql.Marshaler interface
+func (b Bytes) MarshalGQL(w io.Writer) {
+ if len(b) == 0 {
+ _, _ = w.Write([]byte(`"0x"`))
+ return
+ }
+ quotedHexString := strconv.Quote(common.ToHex([]byte(b)))
+ _, _ = w.Write([]byte(quotedHexString))
+}
+
+func (b *Bytes) UnmarshalGQL(v interface{}) error {
+ s, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("Bytes must be a hex-encoded string")
+ }
+ // TODO(albrow): Check if valid hex.
+ bytes := common.FromHex(unquoteIfNeeded(s))
+ (*b) = Bytes(bytes)
+
+ return nil
+}
+
+func (b Bytes) MarshalJSON() ([]byte, error) {
+ if len(b) == 0 {
+ return []byte(`"0x"`), nil
+ }
+ quotedHexString := strconv.Quote(common.ToHex([]byte(b)))
+ return []byte(quotedHexString), nil
+}
+
+func (b *Bytes) UnmarshalJSON(data []byte) error {
+ // TODO(albrow): Check if valid hex.
+ bytes := common.FromHex(unquoteIfNeeded(string(data)))
+ (*b) = Bytes(bytes)
+
+ return nil
+}
+
+func lowerCaseAndQuote(s string) string {
+ return strconv.Quote(strings.ToLower(s))
+}
+
+// unquoteIfNeeded removes surrounding quotes (if present) from s.
+// Note(albrow): This is needed because generated GraphQL code appears
+// to sometimes strip out quotes.
+func unquoteIfNeeded(s string) string {
+ unquotedString, err := strconv.Unquote(s)
+ if err == nil {
+ return unquotedString
+ }
+ return s
+}
diff --git a/graphql/gqltypes/types_generated.go b/graphql/gqltypes/types_generated.go
new file mode 100644
index 000000000..a25036b6f
--- /dev/null
+++ b/graphql/gqltypes/types_generated.go
@@ -0,0 +1,498 @@
+// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
+
+package gqltypes
+
+import (
+ "fmt"
+ "io"
+ "strconv"
+ "time"
+)
+
+type AcceptedOrderResult struct {
+ // The order that was accepted, including metadata.
+ Order *OrderWithMetadata `json:"order"`
+ // Whether or not the order is new. Set to true if this is the first time this Mesh node has accepted the order
+ // and false otherwise.
+ IsNew bool `json:"isNew"`
+}
+
+// The results of the addOrders mutation. Includes which orders were accepted and which orders where rejected.
+type AddOrdersResults struct {
+ // The set of orders that were accepted. Accepted orders will be watched and order events will be emitted if
+ // their status changes.
+ Accepted []*AcceptedOrderResult `json:"accepted"`
+ // The set of orders that were rejected, including the reason they were rejected. Rejected orders will not be
+ // watched.
+ Rejected []*RejectedOrderResult `json:"rejected"`
+}
+
+// An on-chain contract event.
+type ContractEvent struct {
+ // The hash of the block where the event was generated.
+ BlockHash Hash `json:"blockHash"`
+ // The hash of the transaction where the event was generated.
+ TxHash Hash `json:"txHash"`
+ // The index of the transaction where the event was generated.
+ TxIndex int `json:"txIndex"`
+ // The index of the event log.
+ LogIndex int `json:"logIndex"`
+ // True when this was an event that was removed due to a block-reorg. False otherwise.
+ IsRemoved bool `json:"isRemoved"`
+ // The address of the contract that generated the event.
+ Address Address `json:"address"`
+ // The kind of event (e.g. "ERC20TransferEvent").
+ Kind string `json:"kind"`
+ // The parameters for the event. The parameters are different for each event kind, but will always
+ // be a set of key-value pairs.
+ Parameters interface{} `json:"parameters"`
+}
+
+// The block number and block hash for the latest block that has been processed by Mesh.
+type LatestBlock struct {
+ Number BigNumber `json:"number"`
+ Hash Hash `json:"hash"`
+}
+
+// A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format).
+type NewOrder struct {
+ ChainID BigNumber `json:"chainId"`
+ ExchangeAddress Address `json:"exchangeAddress"`
+ MakerAddress Address `json:"makerAddress"`
+ MakerAssetData Bytes `json:"makerAssetData"`
+ MakerAssetAmount BigNumber `json:"makerAssetAmount"`
+ MakerFeeAssetData Bytes `json:"makerFeeAssetData"`
+ MakerFee BigNumber `json:"makerFee"`
+ TakerAddress Address `json:"takerAddress"`
+ TakerAssetData Bytes `json:"takerAssetData"`
+ TakerAssetAmount BigNumber `json:"takerAssetAmount"`
+ TakerFeeAssetData Bytes `json:"takerFeeAssetData"`
+ TakerFee BigNumber `json:"takerFee"`
+ SenderAddress Address `json:"senderAddress"`
+ FeeRecipientAddress Address `json:"feeRecipientAddress"`
+ ExpirationTimeSeconds BigNumber `json:"expirationTimeSeconds"`
+ Salt BigNumber `json:"salt"`
+ Signature Bytes `json:"signature"`
+}
+
+// A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format.)
+type Order struct {
+ ChainID BigNumber `json:"chainId"`
+ ExchangeAddress Address `json:"exchangeAddress"`
+ MakerAddress Address `json:"makerAddress"`
+ MakerAssetData Bytes `json:"makerAssetData"`
+ MakerAssetAmount BigNumber `json:"makerAssetAmount"`
+ MakerFeeAssetData Bytes `json:"makerFeeAssetData"`
+ MakerFee BigNumber `json:"makerFee"`
+ TakerAddress Address `json:"takerAddress"`
+ TakerAssetData Bytes `json:"takerAssetData"`
+ TakerAssetAmount BigNumber `json:"takerAssetAmount"`
+ TakerFeeAssetData Bytes `json:"takerFeeAssetData"`
+ TakerFee BigNumber `json:"takerFee"`
+ SenderAddress Address `json:"senderAddress"`
+ FeeRecipientAddress Address `json:"feeRecipientAddress"`
+ ExpirationTimeSeconds BigNumber `json:"expirationTimeSeconds"`
+ Salt BigNumber `json:"salt"`
+ Signature Bytes `json:"signature"`
+}
+
+type OrderEvent struct {
+ // The order that was affected.
+ Order *OrderWithMetadata `json:"order"`
+ // A way of classifying the effect that the order event had on the order. You can
+ // think of different end states as different "types" of order events.
+ EndState OrderEndState `json:"endState"`
+ // The timestamp for the order event, which can be used for bookkeeping purposes.
+ // If the order event was generated as a direct result of on-chain events (e.g., FILLED,
+ // UNFUNDED, CANCELED), then it is set to the latest block timestamp at which the order
+ // was re-validated. Otherwise (e.g., for ADDED, STOPPED_WATCHING), the timestamp corresponds
+ // when the event was generated on the server side.
+ Timestamp time.Time `json:"timestamp"`
+ // Contains all the contract events that triggered the order to be re-validated.
+ // All events that _may_ have affected the state of the order are included here.
+ // It is guaranteed that at least one of the events included here will have affected
+ // the order's state, but there may also be some false positives.
+ ContractEvents []*ContractEvent `json:"contractEvents"`
+}
+
+// A filter on orders. Can be used in queries to only return orders that meet certain criteria.
+type OrderFilter struct {
+ Field OrderField `json:"field"`
+ Kind FilterKind `json:"kind"`
+ // value must match the type of the filter field.
+ Value interface{} `json:"value"`
+}
+
+// A sort ordering for orders. Can be used in queries to control the order in which results are returned.
+type OrderSort struct {
+ Field OrderField `json:"field"`
+ Direction SortDirection `json:"direction"`
+}
+
+// A signed 0x order along with some additional metadata about the order which is not part of the 0x protocol specification.
+type OrderWithMetadata struct {
+ ChainID BigNumber `json:"chainId"`
+ ExchangeAddress Address `json:"exchangeAddress"`
+ MakerAddress Address `json:"makerAddress"`
+ MakerAssetData Bytes `json:"makerAssetData"`
+ MakerAssetAmount BigNumber `json:"makerAssetAmount"`
+ MakerFeeAssetData Bytes `json:"makerFeeAssetData"`
+ MakerFee BigNumber `json:"makerFee"`
+ TakerAddress Address `json:"takerAddress"`
+ TakerAssetData Bytes `json:"takerAssetData"`
+ TakerAssetAmount BigNumber `json:"takerAssetAmount"`
+ TakerFeeAssetData Bytes `json:"takerFeeAssetData"`
+ TakerFee BigNumber `json:"takerFee"`
+ SenderAddress Address `json:"senderAddress"`
+ FeeRecipientAddress Address `json:"feeRecipientAddress"`
+ ExpirationTimeSeconds BigNumber `json:"expirationTimeSeconds"`
+ Salt BigNumber `json:"salt"`
+ Signature Bytes `json:"signature"`
+ // The hash, which can be used to uniquely identify an order.
+ Hash Hash `json:"hash"`
+ // The remaining amount of the maker asset which has not yet been filled.
+ FillableTakerAssetAmount BigNumber `json:"fillableTakerAssetAmount"`
+}
+
+type RejectedOrderResult struct {
+ // The hash of the order. May be null if the hash could not be computed.
+ Hash *Hash `json:"hash"`
+ // The order that was rejected.
+ Order *Order `json:"order"`
+ // A machine-readable code indicating why the order was rejected. This code is designed to
+ // be used by programs and applications and will never change without breaking backwards-compatibility.
+ Code RejectedOrderCode `json:"code"`
+ // A human-readable message indicating why the order was rejected. This message may change
+ // in future releases and is not covered by backwards-compatibility guarantees.
+ Message string `json:"message"`
+}
+
+// Contains configuration options and various stats for Mesh.
+type Stats struct {
+ Version string `json:"version"`
+ PubSubTopic string `json:"pubSubTopic"`
+ Rendezvous string `json:"rendezvous"`
+ PeerID string `json:"peerID"`
+ EthereumChainID int `json:"ethereumChainID"`
+ LatestBlock *LatestBlock `json:"latestBlock"`
+ NumPeers int `json:"numPeers"`
+ NumOrders int `json:"numOrders"`
+ NumOrdersIncludingRemoved int `json:"numOrdersIncludingRemoved"`
+ StartOfCurrentUTCDay time.Time `json:"startOfCurrentUTCDay"`
+ EthRPCRequestsSentInCurrentUTCDay int `json:"ethRPCRequestsSentInCurrentUTCDay"`
+ EthRPCRateLimitExpiredRequests int `json:"ethRPCRateLimitExpiredRequests"`
+ MaxExpirationTime BigNumber `json:"maxExpirationTime"`
+}
+
+// The kind of comparison to be used in a filter.
+type FilterKind string
+
+const (
+ FilterKindEqual FilterKind = "EQUAL"
+ FilterKindNotEqual FilterKind = "NOT_EQUAL"
+ FilterKindGreater FilterKind = "GREATER"
+ FilterKindGreaterOrEqual FilterKind = "GREATER_OR_EQUAL"
+ FilterKindLess FilterKind = "LESS"
+ FilterKindLessOrEqual FilterKind = "LESS_OR_EQUAL"
+)
+
+var AllFilterKind = []FilterKind{
+ FilterKindEqual,
+ FilterKindNotEqual,
+ FilterKindGreater,
+ FilterKindGreaterOrEqual,
+ FilterKindLess,
+ FilterKindLessOrEqual,
+}
+
+func (e FilterKind) IsValid() bool {
+ switch e {
+ case FilterKindEqual, FilterKindNotEqual, FilterKindGreater, FilterKindGreaterOrEqual, FilterKindLess, FilterKindLessOrEqual:
+ return true
+ }
+ return false
+}
+
+func (e FilterKind) String() string {
+ return string(e)
+}
+
+func (e *FilterKind) UnmarshalGQL(v interface{}) error {
+ str, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("enums must be strings")
+ }
+
+ *e = FilterKind(str)
+ if !e.IsValid() {
+ return fmt.Errorf("%s is not a valid FilterKind", str)
+ }
+ return nil
+}
+
+func (e FilterKind) MarshalGQL(w io.Writer) {
+ fmt.Fprint(w, strconv.Quote(e.String()))
+}
+
+type OrderEndState string
+
+const (
+ // The order was successfully validated and added to the Mesh node. The order is now being watched and any changes to
+ // the fillability will result in subsequent order events.
+ OrderEndStateAdded OrderEndState = "ADDED"
+ // The order was filled for a partial amount. The order is still fillable up to the fillableTakerAssetAmount.
+ OrderEndStateFilled OrderEndState = "FILLED"
+ // The order was fully filled and its remaining fillableTakerAssetAmount is 0. The order is no longer fillable.
+ OrderEndStateFullyFilled OrderEndState = "FULLY_FILLED"
+ // The order was cancelled and is no longer fillable.
+ OrderEndStateCancelled OrderEndState = "CANCELLED"
+ // The order expired and is no longer fillable.
+ OrderEndStateExpired OrderEndState = "EXPIRED"
+ // The order was previously expired, but due to a block re-org it is no longer considered expired (should be rare).
+ OrderEndStateUnexpired OrderEndState = "UNEXPIRED"
+ // The order has become unfunded and is no longer fillable. This can happen if the maker makes a transfer or changes their allowance.
+ OrderEndStateUnfunded OrderEndState = "UNFUNDED"
+ // The fillability of the order has increased. This can happen if a previously processed fill event gets reverted due to a block re-org,
+ // or if a maker makes a transfer or changes their allowance.
+ OrderEndStateFillabilityIncreased OrderEndState = "FILLABILITY_INCREASED"
+ // The order is potentially still valid but was removed for a different reason (e.g.
+ // the database is full or the peer that sent the order was misbehaving). The order will no longer be watched
+ // and no further events for this order will be emitted. In some cases, the order may be re-added in the
+ // future.
+ OrderEndStateStoppedWatching OrderEndState = "STOPPED_WATCHING"
+)
+
+var AllOrderEndState = []OrderEndState{
+ OrderEndStateAdded,
+ OrderEndStateFilled,
+ OrderEndStateFullyFilled,
+ OrderEndStateCancelled,
+ OrderEndStateExpired,
+ OrderEndStateUnexpired,
+ OrderEndStateUnfunded,
+ OrderEndStateFillabilityIncreased,
+ OrderEndStateStoppedWatching,
+}
+
+func (e OrderEndState) IsValid() bool {
+ switch e {
+ case OrderEndStateAdded, OrderEndStateFilled, OrderEndStateFullyFilled, OrderEndStateCancelled, OrderEndStateExpired, OrderEndStateUnexpired, OrderEndStateUnfunded, OrderEndStateFillabilityIncreased, OrderEndStateStoppedWatching:
+ return true
+ }
+ return false
+}
+
+func (e OrderEndState) String() string {
+ return string(e)
+}
+
+func (e *OrderEndState) UnmarshalGQL(v interface{}) error {
+ str, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("enums must be strings")
+ }
+
+ *e = OrderEndState(str)
+ if !e.IsValid() {
+ return fmt.Errorf("%s is not a valid OrderEndState", str)
+ }
+ return nil
+}
+
+func (e OrderEndState) MarshalGQL(w io.Writer) {
+ fmt.Fprint(w, strconv.Quote(e.String()))
+}
+
+// An enum containing all the order fields for which filters and/or sorting is supported.
+type OrderField string
+
+const (
+ OrderFieldHash OrderField = "hash"
+ OrderFieldChainID OrderField = "chainId"
+ OrderFieldExchangeAddress OrderField = "exchangeAddress"
+ OrderFieldMakerAddress OrderField = "makerAddress"
+ OrderFieldMakerAssetData OrderField = "makerAssetData"
+ OrderFieldMakerAssetAmount OrderField = "makerAssetAmount"
+ OrderFieldMakerFeeAssetData OrderField = "makerFeeAssetData"
+ OrderFieldMakerFee OrderField = "makerFee"
+ OrderFieldTakerAddress OrderField = "takerAddress"
+ OrderFieldTakerAssetData OrderField = "takerAssetData"
+ OrderFieldTakerAssetAmount OrderField = "takerAssetAmount"
+ OrderFieldTakerFeeAssetData OrderField = "takerFeeAssetData"
+ OrderFieldTakerFee OrderField = "takerFee"
+ OrderFieldSenderAddress OrderField = "senderAddress"
+ OrderFieldFeeRecipientAddress OrderField = "feeRecipientAddress"
+ OrderFieldExpirationTimeSeconds OrderField = "expirationTimeSeconds"
+ OrderFieldSalt OrderField = "salt"
+ OrderFieldFillableTakerAssetAmount OrderField = "fillableTakerAssetAmount"
+)
+
+var AllOrderField = []OrderField{
+ OrderFieldHash,
+ OrderFieldChainID,
+ OrderFieldExchangeAddress,
+ OrderFieldMakerAddress,
+ OrderFieldMakerAssetData,
+ OrderFieldMakerAssetAmount,
+ OrderFieldMakerFeeAssetData,
+ OrderFieldMakerFee,
+ OrderFieldTakerAddress,
+ OrderFieldTakerAssetData,
+ OrderFieldTakerAssetAmount,
+ OrderFieldTakerFeeAssetData,
+ OrderFieldTakerFee,
+ OrderFieldSenderAddress,
+ OrderFieldFeeRecipientAddress,
+ OrderFieldExpirationTimeSeconds,
+ OrderFieldSalt,
+ OrderFieldFillableTakerAssetAmount,
+}
+
+func (e OrderField) IsValid() bool {
+ switch e {
+ case OrderFieldHash, OrderFieldChainID, OrderFieldExchangeAddress, OrderFieldMakerAddress, OrderFieldMakerAssetData, OrderFieldMakerAssetAmount, OrderFieldMakerFeeAssetData, OrderFieldMakerFee, OrderFieldTakerAddress, OrderFieldTakerAssetData, OrderFieldTakerAssetAmount, OrderFieldTakerFeeAssetData, OrderFieldTakerFee, OrderFieldSenderAddress, OrderFieldFeeRecipientAddress, OrderFieldExpirationTimeSeconds, OrderFieldSalt, OrderFieldFillableTakerAssetAmount:
+ return true
+ }
+ return false
+}
+
+func (e OrderField) String() string {
+ return string(e)
+}
+
+func (e *OrderField) UnmarshalGQL(v interface{}) error {
+ str, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("enums must be strings")
+ }
+
+ *e = OrderField(str)
+ if !e.IsValid() {
+ return fmt.Errorf("%s is not a valid OrderField", str)
+ }
+ return nil
+}
+
+func (e OrderField) MarshalGQL(w io.Writer) {
+ fmt.Fprint(w, strconv.Quote(e.String()))
+}
+
+// A set of all possible codes included in RejectedOrderResult.
+type RejectedOrderCode string
+
+const (
+ RejectedOrderCodeEthRPCRequestFailed RejectedOrderCode = "ETH_RPC_REQUEST_FAILED"
+ RejectedOrderCodeOrderHasInvalidMakerAssetAmount RejectedOrderCode = "ORDER_HAS_INVALID_MAKER_ASSET_AMOUNT"
+ RejectedOrderCodeOrderHasInvalidTakerAssetAmount RejectedOrderCode = "ORDER_HAS_INVALID_TAKER_ASSET_AMOUNT"
+ RejectedOrderCodeOrderExpired RejectedOrderCode = "ORDER_EXPIRED"
+ RejectedOrderCodeOrderFullyFilled RejectedOrderCode = "ORDER_FULLY_FILLED"
+ RejectedOrderCodeOrderCancelled RejectedOrderCode = "ORDER_CANCELLED"
+ RejectedOrderCodeOrderUnfunded RejectedOrderCode = "ORDER_UNFUNDED"
+ RejectedOrderCodeOrderHasInvalidMakerAssetData RejectedOrderCode = "ORDER_HAS_INVALID_MAKER_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidMakerFeeAssetData RejectedOrderCode = "ORDER_HAS_INVALID_MAKER_FEE_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidTakerAssetData RejectedOrderCode = "ORDER_HAS_INVALID_TAKER_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidTakerFeeAssetData RejectedOrderCode = "ORDER_HAS_INVALID_TAKER_FEE_ASSET_DATA"
+ RejectedOrderCodeOrderHasInvalidSignature RejectedOrderCode = "ORDER_HAS_INVALID_SIGNATURE"
+ RejectedOrderCodeOrderMaxExpirationExceeded RejectedOrderCode = "ORDER_MAX_EXPIRATION_EXCEEDED"
+ RejectedOrderCodeInternalError RejectedOrderCode = "INTERNAL_ERROR"
+ RejectedOrderCodeMaxOrderSizeExceeded RejectedOrderCode = "MAX_ORDER_SIZE_EXCEEDED"
+ RejectedOrderCodeOrderAlreadyStoredAndUnfillable RejectedOrderCode = "ORDER_ALREADY_STORED_AND_UNFILLABLE"
+ RejectedOrderCodeOrderForIncorrectChain RejectedOrderCode = "ORDER_FOR_INCORRECT_CHAIN"
+ RejectedOrderCodeIncorrectExchangeAddress RejectedOrderCode = "INCORRECT_EXCHANGE_ADDRESS"
+ RejectedOrderCodeSenderAddressNotAllowed RejectedOrderCode = "SENDER_ADDRESS_NOT_ALLOWED"
+ RejectedOrderCodeDatabaseFullOfOrders RejectedOrderCode = "DATABASE_FULL_OF_ORDERS"
+)
+
+var AllRejectedOrderCode = []RejectedOrderCode{
+ RejectedOrderCodeEthRPCRequestFailed,
+ RejectedOrderCodeOrderHasInvalidMakerAssetAmount,
+ RejectedOrderCodeOrderHasInvalidTakerAssetAmount,
+ RejectedOrderCodeOrderExpired,
+ RejectedOrderCodeOrderFullyFilled,
+ RejectedOrderCodeOrderCancelled,
+ RejectedOrderCodeOrderUnfunded,
+ RejectedOrderCodeOrderHasInvalidMakerAssetData,
+ RejectedOrderCodeOrderHasInvalidMakerFeeAssetData,
+ RejectedOrderCodeOrderHasInvalidTakerAssetData,
+ RejectedOrderCodeOrderHasInvalidTakerFeeAssetData,
+ RejectedOrderCodeOrderHasInvalidSignature,
+ RejectedOrderCodeOrderMaxExpirationExceeded,
+ RejectedOrderCodeInternalError,
+ RejectedOrderCodeMaxOrderSizeExceeded,
+ RejectedOrderCodeOrderAlreadyStoredAndUnfillable,
+ RejectedOrderCodeOrderForIncorrectChain,
+ RejectedOrderCodeIncorrectExchangeAddress,
+ RejectedOrderCodeSenderAddressNotAllowed,
+ RejectedOrderCodeDatabaseFullOfOrders,
+}
+
+func (e RejectedOrderCode) IsValid() bool {
+ switch e {
+ case RejectedOrderCodeEthRPCRequestFailed, RejectedOrderCodeOrderHasInvalidMakerAssetAmount, RejectedOrderCodeOrderHasInvalidTakerAssetAmount, RejectedOrderCodeOrderExpired, RejectedOrderCodeOrderFullyFilled, RejectedOrderCodeOrderCancelled, RejectedOrderCodeOrderUnfunded, RejectedOrderCodeOrderHasInvalidMakerAssetData, RejectedOrderCodeOrderHasInvalidMakerFeeAssetData, RejectedOrderCodeOrderHasInvalidTakerAssetData, RejectedOrderCodeOrderHasInvalidTakerFeeAssetData, RejectedOrderCodeOrderHasInvalidSignature, RejectedOrderCodeOrderMaxExpirationExceeded, RejectedOrderCodeInternalError, RejectedOrderCodeMaxOrderSizeExceeded, RejectedOrderCodeOrderAlreadyStoredAndUnfillable, RejectedOrderCodeOrderForIncorrectChain, RejectedOrderCodeIncorrectExchangeAddress, RejectedOrderCodeSenderAddressNotAllowed, RejectedOrderCodeDatabaseFullOfOrders:
+ return true
+ }
+ return false
+}
+
+func (e RejectedOrderCode) String() string {
+ return string(e)
+}
+
+func (e *RejectedOrderCode) UnmarshalGQL(v interface{}) error {
+ str, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("enums must be strings")
+ }
+
+ *e = RejectedOrderCode(str)
+ if !e.IsValid() {
+ return fmt.Errorf("%s is not a valid RejectedOrderCode", str)
+ }
+ return nil
+}
+
+func (e RejectedOrderCode) MarshalGQL(w io.Writer) {
+ fmt.Fprint(w, strconv.Quote(e.String()))
+}
+
+// The direction to sort in. Ascending means lowest to highest. Descending means highest to lowest.
+type SortDirection string
+
+const (
+ SortDirectionAsc SortDirection = "ASC"
+ SortDirectionDesc SortDirection = "DESC"
+)
+
+var AllSortDirection = []SortDirection{
+ SortDirectionAsc,
+ SortDirectionDesc,
+}
+
+func (e SortDirection) IsValid() bool {
+ switch e {
+ case SortDirectionAsc, SortDirectionDesc:
+ return true
+ }
+ return false
+}
+
+func (e SortDirection) String() string {
+ return string(e)
+}
+
+func (e *SortDirection) UnmarshalGQL(v interface{}) error {
+ str, ok := v.(string)
+ if !ok {
+ return fmt.Errorf("enums must be strings")
+ }
+
+ *e = SortDirection(str)
+ if !e.IsValid() {
+ return fmt.Errorf("%s is not a valid SortDirection", str)
+ }
+ return nil
+}
+
+func (e SortDirection) MarshalGQL(w io.Writer) {
+ fmt.Fprint(w, strconv.Quote(e.String()))
+}
diff --git a/graphql/gqltypes/types_test.go b/graphql/gqltypes/types_test.go
new file mode 100644
index 000000000..d5bdcfe08
--- /dev/null
+++ b/graphql/gqltypes/types_test.go
@@ -0,0 +1,80 @@
+package gqltypes
+
+import (
+ "bytes"
+ "encoding/json"
+ "reflect"
+ "testing"
+
+ "github.com/99designs/gqlgen/graphql"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/math"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+type marshalUnmarshalTestCase struct {
+ // original is the value we start with.
+ original interface{}
+ // holderType is the type of the value.
+ holderType reflect.Type
+}
+
+var marshalUnmarshalTestCases = []marshalUnmarshalTestCase{
+ {
+ original: BigNumber(*math.MaxBig256),
+ holderType: reflect.TypeOf(BigNumber{}),
+ },
+ {
+ original: Bytes([]byte("abcdefg")),
+ holderType: reflect.TypeOf(Bytes{}),
+ },
+ {
+ original: Bytes([]byte{}),
+ holderType: reflect.TypeOf(Bytes{}),
+ },
+ {
+ original: Hash(common.HexToHash("0x6a7e632d4cf18534b7dd85c43a5b819324c9cf9640a74a227570921ca99efb56")),
+ holderType: reflect.TypeOf(Hash{}),
+ },
+ {
+ original: Address(common.HexToAddress("0x61935cbdd02287b511119ddb11aeb42f1593b7ef")),
+ holderType: reflect.TypeOf(Address{}),
+ },
+}
+
+func TestMarshalUnmarshalJSON(t *testing.T) {
+ // For each test case, we marshal the original value to JSON and
+ // then unmarshal it back into a value of type holderType. Then
+ // we check that the original value is equal to the holder value.
+ for _, tc := range marshalUnmarshalTestCases {
+ buf := &bytes.Buffer{}
+ require.NoError(t, json.NewEncoder(buf).Encode(tc.original))
+ holderRef := reflect.New(tc.holderType).Interface()
+ require.NoError(t, json.NewDecoder(buf).Decode(holderRef))
+ holder := reflect.ValueOf(holderRef).Elem().Interface()
+ assert.Equal(t, tc.original, holder)
+ }
+}
+
+func TestMarshalUnmarshalGQL(t *testing.T) {
+ // For each test case, we marshal the original value to GraphQL and
+ // then unmarshal it back into a value of type holderType. Then
+ // we check that the original value is equal to the holder value.
+ for _, tc := range marshalUnmarshalTestCases {
+ buf := &bytes.Buffer{}
+ marshaler, ok := tc.original.(graphql.Marshaler)
+ if !ok {
+ t.Errorf("Type %T does not implement graphql.Marshaler", tc.original)
+ }
+ marshaler.MarshalGQL(buf)
+ holderRef := reflect.New(tc.holderType).Interface()
+ unmarshaler, ok := holderRef.(graphql.Unmarshaler)
+ if !ok {
+ t.Errorf("Type %T does not implement graphql.Unmarshaler", holderRef)
+ }
+ require.NoError(t, unmarshaler.UnmarshalGQL(buf.String()))
+ holder := reflect.ValueOf(holderRef).Elem().Interface()
+ assert.Equal(t, tc.original, holder)
+ }
+}
diff --git a/graphql/resolver.go b/graphql/resolver.go
new file mode 100644
index 000000000..bf8f88d0a
--- /dev/null
+++ b/graphql/resolver.go
@@ -0,0 +1,13 @@
+package graphql
+
+import "github.com/0xProject/0x-mesh/core"
+
+type Resolver struct {
+ app *core.App
+}
+
+func NewResolver(app *core.App) *Resolver {
+ return &Resolver{
+ app: app,
+ }
+}
diff --git a/graphql/schema.graphql b/graphql/schema.graphql
new file mode 100644
index 000000000..dc8e3e19c
--- /dev/null
+++ b/graphql/schema.graphql
@@ -0,0 +1,421 @@
+"""
+A 32-byte Keccak256 hash encoded as a hexadecimal string.
+"""
+scalar Hash
+"""
+An Ethereum address encoded as a hexadecimal string.
+"""
+scalar Address
+"""
+A BigNumber or uint256 value encoded as a numerical string.
+"""
+scalar BigNumber
+"""
+An array of arbitrary bytes encoded as a hexadecimal string.
+"""
+scalar Bytes
+"""
+A time encoded as a string using the RFC3339 standard.
+"""
+scalar Time
+"""
+Arbitrary value of any type.
+"""
+scalar Any
+
+"""
+A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format.)
+"""
+type Order {
+ chainId: BigNumber!
+ exchangeAddress: Address!
+ makerAddress: Address!
+ makerAssetData: Bytes!
+ makerAssetAmount: BigNumber!
+ makerFeeAssetData: Bytes!
+ makerFee: BigNumber!
+ takerAddress: Address!
+ takerAssetData: Bytes!
+ takerAssetAmount: BigNumber!
+ takerFeeAssetData: Bytes!
+ takerFee: BigNumber!
+ senderAddress: Address!
+ feeRecipientAddress: Address!
+ expirationTimeSeconds: BigNumber!
+ salt: BigNumber!
+ signature: Bytes!
+}
+
+"""
+A signed 0x order along with some additional metadata about the order which is not part of the 0x protocol specification.
+"""
+type OrderWithMetadata {
+ chainId: BigNumber!
+ exchangeAddress: Address!
+ makerAddress: Address!
+ makerAssetData: Bytes!
+ makerAssetAmount: BigNumber!
+ makerFeeAssetData: Bytes!
+ makerFee: BigNumber!
+ takerAddress: Address!
+ takerAssetData: Bytes!
+ takerAssetAmount: BigNumber!
+ takerFeeAssetData: Bytes!
+ takerFee: BigNumber!
+ senderAddress: Address!
+ feeRecipientAddress: Address!
+ expirationTimeSeconds: BigNumber!
+ salt: BigNumber!
+ signature: Bytes!
+ """
+ The hash, which can be used to uniquely identify an order.
+ """
+ hash: Hash!
+ """
+ The remaining amount of the maker asset which has not yet been filled.
+ """
+ fillableTakerAssetAmount: BigNumber!
+}
+
+"""
+An enum containing all the order fields for which filters and/or sorting is supported.
+"""
+enum OrderField {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ fillableTakerAssetAmount
+}
+
+"""
+The kind of comparison to be used in a filter.
+"""
+enum FilterKind {
+ EQUAL
+ NOT_EQUAL
+ GREATER
+ GREATER_OR_EQUAL
+ LESS
+ LESS_OR_EQUAL
+}
+
+"""
+The direction to sort in. Ascending means lowest to highest. Descending means highest to lowest.
+"""
+enum SortDirection {
+ ASC
+ DESC
+}
+
+"""
+A filter on orders. Can be used in queries to only return orders that meet certain criteria.
+"""
+input OrderFilter {
+ field: OrderField!
+ kind: FilterKind!
+ """
+ value must match the type of the filter field.
+ """
+ value: Any!
+}
+
+"""
+A sort ordering for orders. Can be used in queries to control the order in which results are returned.
+"""
+input OrderSort {
+ field: OrderField!
+ direction: SortDirection!
+}
+
+"""
+The block number and block hash for the latest block that has been processed by Mesh.
+"""
+type LatestBlock {
+ number: BigNumber!
+ hash: Hash!
+}
+
+"""
+Contains configuration options and various stats for Mesh.
+"""
+type Stats {
+ version: String!
+ pubSubTopic: String!
+ rendezvous: String!
+ peerID: String!
+ ethereumChainID: Int! # TODO(albrow): This should be BigNumber
+ latestBlock: LatestBlock
+ numPeers: Int!
+ numOrders: Int!
+ numOrdersIncludingRemoved: Int!
+ startOfCurrentUTCDay: Time!
+ ethRPCRequestsSentInCurrentUTCDay: Int!
+ ethRPCRateLimitExpiredRequests: Int!
+ maxExpirationTime: BigNumber!
+}
+
+type Query {
+ """
+ Returns the order with the specified hash, or null if no order is found with that hash.
+ """
+ order(hash: Hash!): OrderWithMetadata
+ """
+ Returns an array of orders that satisfy certain criteria.
+ """
+ orders(
+ """
+ Determines the order of the results. If more than one sort option is provided, results we be sorted by the
+ first option first, then by any subsequent options. By default, orders are sorted by hash in ascending order.
+ """
+ sort: [OrderSort!] = [{ field: hash, direction: ASC }]
+ """
+ A set of filters. Only the orders that match all filters will be included in the results. By default no
+ filters are used.
+ """
+ filters: [OrderFilter!] = []
+ """
+ The maximum number of orders to be included in the results. Defaults to 20.
+ """
+ limit: Int = 20
+ ): [OrderWithMetadata!]!
+ """
+ Returns the current stats.
+ """
+ stats: Stats!
+}
+
+"""
+A signed 0x order according to the [protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v3/v3-specification.md#order-message-format).
+"""
+input NewOrder {
+ chainId: BigNumber!
+ exchangeAddress: Address!
+ makerAddress: Address!
+ makerAssetData: Bytes!
+ makerAssetAmount: BigNumber!
+ makerFeeAssetData: Bytes!
+ makerFee: BigNumber!
+ takerAddress: Address!
+ takerAssetData: Bytes!
+ takerAssetAmount: BigNumber!
+ takerFeeAssetData: Bytes!
+ takerFee: BigNumber!
+ senderAddress: Address!
+ feeRecipientAddress: Address!
+ expirationTimeSeconds: BigNumber!
+ salt: BigNumber!
+ signature: Bytes!
+}
+
+"""
+The results of the addOrders mutation. Includes which orders were accepted and which orders where rejected.
+"""
+type AddOrdersResults {
+ """
+ The set of orders that were accepted. Accepted orders will be watched and order events will be emitted if
+ their status changes.
+ """
+ accepted: [AcceptedOrderResult!]!
+ """
+ The set of orders that were rejected, including the reason they were rejected. Rejected orders will not be
+ watched.
+ """
+ rejected: [RejectedOrderResult!]!
+}
+
+type AcceptedOrderResult {
+ """
+ The order that was accepted, including metadata.
+ """
+ order: OrderWithMetadata!
+ """
+ Whether or not the order is new. Set to true if this is the first time this Mesh node has accepted the order
+ and false otherwise.
+ """
+ isNew: Boolean!
+}
+
+type RejectedOrderResult {
+ """
+ The hash of the order. May be null if the hash could not be computed.
+ """
+ hash: Hash
+ """
+ The order that was rejected.
+ """
+ order: Order!
+ """
+ A machine-readable code indicating why the order was rejected. This code is designed to
+ be used by programs and applications and will never change without breaking backwards-compatibility.
+ """
+ code: RejectedOrderCode!
+ """
+ A human-readable message indicating why the order was rejected. This message may change
+ in future releases and is not covered by backwards-compatibility guarantees.
+ """
+ message: String!
+}
+
+"""
+A set of all possible codes included in RejectedOrderResult.
+"""
+enum RejectedOrderCode {
+ ETH_RPC_REQUEST_FAILED
+ ORDER_HAS_INVALID_MAKER_ASSET_AMOUNT
+ ORDER_HAS_INVALID_TAKER_ASSET_AMOUNT
+ ORDER_EXPIRED
+ ORDER_FULLY_FILLED
+ ORDER_CANCELLED
+ ORDER_UNFUNDED
+ ORDER_HAS_INVALID_MAKER_ASSET_DATA
+ ORDER_HAS_INVALID_MAKER_FEE_ASSET_DATA
+ ORDER_HAS_INVALID_TAKER_ASSET_DATA
+ ORDER_HAS_INVALID_TAKER_FEE_ASSET_DATA
+ ORDER_HAS_INVALID_SIGNATURE
+ ORDER_MAX_EXPIRATION_EXCEEDED
+ INTERNAL_ERROR
+ MAX_ORDER_SIZE_EXCEEDED
+ ORDER_ALREADY_STORED_AND_UNFILLABLE
+ ORDER_FOR_INCORRECT_CHAIN
+ INCORRECT_EXCHANGE_ADDRESS
+ SENDER_ADDRESS_NOT_ALLOWED
+ DATABASE_FULL_OF_ORDERS
+}
+
+type Mutation {
+ """
+ Adds one or more orders to Mesh.
+ """
+ addOrders(orders: [NewOrder!]!, pinned: Boolean = true): AddOrdersResults!
+}
+
+type OrderEvent {
+ """
+ The order that was affected.
+ """
+ order: OrderWithMetadata!
+ """
+ A way of classifying the effect that the order event had on the order. You can
+ think of different end states as different "types" of order events.
+ """
+ endState: OrderEndState!
+ """
+ The timestamp for the order event, which can be used for bookkeeping purposes.
+ If the order event was generated as a direct result of on-chain events (e.g., FILLED,
+ UNFUNDED, CANCELED), then it is set to the latest block timestamp at which the order
+ was re-validated. Otherwise (e.g., for ADDED, STOPPED_WATCHING), the timestamp corresponds
+ when the event was generated on the server side.
+ """
+ timestamp: Time!
+ """
+ Contains all the contract events that triggered the order to be re-validated.
+ All events that _may_ have affected the state of the order are included here.
+ It is guaranteed that at least one of the events included here will have affected
+ the order's state, but there may also be some false positives.
+ """
+ contractEvents: [ContractEvent!]!
+}
+
+enum OrderEndState {
+ """
+ The order was successfully validated and added to the Mesh node. The order is now being watched and any changes to
+ the fillability will result in subsequent order events.
+ """
+ ADDED
+ """
+ The order was filled for a partial amount. The order is still fillable up to the fillableTakerAssetAmount.
+ """
+ FILLED
+ """
+ The order was fully filled and its remaining fillableTakerAssetAmount is 0. The order is no longer fillable.
+ """
+ FULLY_FILLED
+ """
+ The order was cancelled and is no longer fillable.
+ """
+ CANCELLED
+ """
+ The order expired and is no longer fillable.
+ """
+ EXPIRED
+ """
+ The order was previously expired, but due to a block re-org it is no longer considered expired (should be rare).
+ """
+ UNEXPIRED
+ """
+ The order has become unfunded and is no longer fillable. This can happen if the maker makes a transfer or changes their allowance.
+ """
+ UNFUNDED
+ """
+ The fillability of the order has increased. This can happen if a previously processed fill event gets reverted due to a block re-org,
+ or if a maker makes a transfer or changes their allowance.
+ """
+ FILLABILITY_INCREASED
+ """
+ The order is potentially still valid but was removed for a different reason (e.g.
+ the database is full or the peer that sent the order was misbehaving). The order will no longer be watched
+ and no further events for this order will be emitted. In some cases, the order may be re-added in the
+ future.
+ """
+ STOPPED_WATCHING
+}
+
+"""
+An on-chain contract event.
+"""
+type ContractEvent {
+ """
+ The hash of the block where the event was generated.
+ """
+ blockHash: Hash!
+ """
+ The hash of the transaction where the event was generated.
+ """
+ txHash: Hash!
+ """
+ The index of the transaction where the event was generated.
+ """
+ txIndex: Int!
+ """
+ The index of the event log.
+ """
+ logIndex: Int!
+ """
+ True when this was an event that was removed due to a block-reorg. False otherwise.
+ """
+ isRemoved: Boolean!
+ """
+ The address of the contract that generated the event.
+ """
+ address: Address!
+ """
+ The kind of event (e.g. "ERC20TransferEvent").
+ """
+ kind: String!
+ """
+ The parameters for the event. The parameters are different for each event kind, but will always
+ be a set of key-value pairs.
+ """
+ parameters: Any!
+}
+
+type Subscription {
+ """
+ Subscribe to all order events. Events are emitted whenever the status of a watched order changes.
+ """
+ orderEvents: [OrderEvent!]!
+}
diff --git a/graphql/schema.resolvers.go b/graphql/schema.resolvers.go
new file mode 100644
index 000000000..e38b3b64d
--- /dev/null
+++ b/graphql/schema.resolvers.go
@@ -0,0 +1,134 @@
+package graphql
+
+// This file will be automatically regenerated based on the schema, any resolver implementations
+// will be copied through when generating and any unknown code will be moved to the end.
+
+import (
+ "context"
+
+ "github.com/0xProject/0x-mesh/db"
+ "github.com/0xProject/0x-mesh/graphql/generated"
+ "github.com/0xProject/0x-mesh/graphql/gqltypes"
+ "github.com/0xProject/0x-mesh/zeroex"
+ "github.com/ethereum/go-ethereum/common"
+)
+
+func (r *mutationResolver) AddOrders(ctx context.Context, orders []*gqltypes.NewOrder, pinned *bool) (*gqltypes.AddOrdersResults, error) {
+ isPinned := false
+ if pinned != nil {
+ isPinned = (*pinned)
+ }
+ signedOrders := gqltypes.NewOrdersToSignedOrders(orders)
+ results, err := r.app.AddOrders(ctx, signedOrders, isPinned)
+ if err != nil {
+ return nil, err
+ }
+ return gqltypes.AddOrdersResultsFromValidationResults(results)
+}
+
+func (r *queryResolver) Order(ctx context.Context, hash gqltypes.Hash) (*gqltypes.OrderWithMetadata, error) {
+ order, err := r.app.GetOrder(common.Hash(hash))
+ if err != nil {
+ if err == db.ErrNotFound {
+ return nil, nil
+ }
+ return nil, err
+ }
+ return gqltypes.OrderWithMetadataFromCommonType(order), nil
+}
+
+func (r *queryResolver) Orders(ctx context.Context, sort []*gqltypes.OrderSort, filters []*gqltypes.OrderFilter, limit *int) ([]*gqltypes.OrderWithMetadata, error) {
+ // TODO(albrow): More validation of query args. We can assume
+ // basic structure is correct but may need to validate
+ // some of the semantics.
+ query := &db.OrderQuery{
+ // We never include orders that are marked as removed.
+ Filters: []db.OrderFilter{
+ {
+ Field: db.OFIsRemoved,
+ Kind: db.Equal,
+ Value: false,
+ },
+ },
+ }
+ if limit != nil {
+ query.Limit = uint(*limit)
+ }
+ for _, filter := range filters {
+ kind, err := gqltypes.FilterKindToDBType(filter.Kind)
+ if err != nil {
+ return nil, err
+ }
+ filterValue, err := gqltypes.FilterValueFromJSON(*filter)
+ if err != nil {
+ return nil, err
+ }
+ query.Filters = append(query.Filters, db.OrderFilter{
+ Field: db.OrderField(filter.Field),
+ Kind: kind,
+ Value: filterValue,
+ })
+ }
+ for _, sort := range sort {
+ direction, err := gqltypes.SortDirectionToDBType(sort.Direction)
+ if err != nil {
+ return nil, err
+ }
+ query.Sort = append(query.Sort, db.OrderSort{
+ Field: db.OrderField(sort.Field),
+ Direction: direction,
+ })
+ }
+
+ orders, err := r.app.FindOrders(query)
+ if err != nil {
+ return nil, err
+ }
+ return gqltypes.OrdersWithMetadataFromCommonType(orders), nil
+}
+
+func (r *queryResolver) Stats(ctx context.Context) (*gqltypes.Stats, error) {
+ stats, err := r.app.GetStats()
+ if err != nil {
+ return nil, err
+ }
+ return gqltypes.StatsFromCommonType(stats), nil
+}
+
+func (r *subscriptionResolver) OrderEvents(ctx context.Context) (<-chan []*gqltypes.OrderEvent, error) {
+ zeroExChan := make(chan []*zeroex.OrderEvent, orderEventBufferSize)
+ gqlChan := make(chan []*gqltypes.OrderEvent, orderEventBufferSize)
+ subscription := r.app.SubscribeToOrderEvents(zeroExChan)
+ // TODO(albrow): Call subscription.Unsubscribe for slow or disconnected clients.
+ go func() {
+ for {
+ select {
+ case <-ctx.Done():
+ subscription.Unsubscribe()
+ return
+ case err := <-subscription.Err():
+ // TODO(albrow): Can we handle this better?
+ if err != nil {
+ subscription.Unsubscribe()
+ panic(err)
+ }
+ case orderEvents := <-zeroExChan:
+ gqlChan <- gqltypes.OrderEventsFromZeroExType(orderEvents)
+ }
+ }
+ }()
+ return gqlChan, nil
+}
+
+// Mutation returns generated.MutationResolver implementation.
+func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} }
+
+// Query returns generated.QueryResolver implementation.
+func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }
+
+// Subscription returns generated.SubscriptionResolver implementation.
+func (r *Resolver) Subscription() generated.SubscriptionResolver { return &subscriptionResolver{r} }
+
+type mutationResolver struct{ *Resolver }
+type queryResolver struct{ *Resolver }
+type subscriptionResolver struct{ *Resolver }
diff --git a/integration-tests/browser_integration_test.go b/integration-tests/browser_integration_test.go
index 6e83822a3..0a366f26c 100644
--- a/integration-tests/browser_integration_test.go
+++ b/integration-tests/browser_integration_test.go
@@ -10,14 +10,13 @@ import (
"math/big"
"net/http"
"net/http/httptest"
- "strconv"
"sync"
"sync/atomic"
"testing"
"time"
"github.com/0xProject/0x-mesh/constants"
- "github.com/0xProject/0x-mesh/rpc"
+ gqlclient "github.com/0xProject/0x-mesh/graphql/client"
"github.com/0xProject/0x-mesh/scenario"
"github.com/0xProject/0x-mesh/scenario/orderopts"
"github.com/0xProject/0x-mesh/zeroex"
@@ -81,29 +80,25 @@ func TestBrowserIntegration(t *testing.T) {
orderopts.MakerAssetAmount(big.NewInt(1000)),
)
- // Creating a valid order involves transferring sufficient funds to the maker, and setting their allowance for
- // the maker asset. These transactions must be mined and Mesh's BlockWatcher poller must process these blocks
- // in order for the order validation run at order submission to occur at a block number equal or higher then
- // the one where these state changes were included. With the BlockWatcher poller configured to run every 200ms,
- // we wait 500ms here to give it ample time to run before submitting the above order to the Mesh node.
- time.Sleep(500 * time.Millisecond)
+ time.Sleep(blockProcessingWaitTime)
standaloneOrderHash, err := standaloneOrder.ComputeOrderHash()
require.NoError(t, err, "could not compute order hash for standalone order")
- // In a separate goroutine, send standaloneOrder through the RPC endpoint for
+ // In a separate goroutine, send standaloneOrder through the GraphQL API for
// the standalone node.
wg.Add(1)
go func() {
defer wg.Done()
- // Wait for the WS RPC server to start before sending the order.
- _, err := waitForLogSubstring(ctx, standaloneLogMessages, "started WS RPC server")
- require.NoError(t, err, "WS RPC server didn't start")
- rpcClient, err := rpc.NewClient(standaloneWSRPCEndpointPrefix + strconv.Itoa(wsRPCPort+count))
+ // Wait for the GraphQL server to start before sending the order.
+ _, err := waitForLogSubstring(ctx, standaloneLogMessages, "starting GraphQL server")
+ require.NoError(t, err, "GraphQL server didn't start")
+ time.Sleep(serverStartWaitTime)
+ graphQLClient := gqlclient.New(graphQLServerURL)
require.NoError(t, err)
- results, err := rpcClient.AddOrders([]*zeroex.SignedOrder{standaloneOrder})
+ results, err := graphQLClient.AddOrders(ctx, []*zeroex.SignedOrder{standaloneOrder})
require.NoError(t, err)
- assert.Len(t, results.Accepted, 1, "Expected 1 order to be accepted over RPC")
- assert.Len(t, results.Rejected, 0, "Expected 0 orders to be rejected over RPC")
+ assert.Len(t, results.Accepted, 1, "Expected 1 order to be accepted via GraphQL API")
+ assert.Len(t, results.Rejected, 0, "Expected 0 orders to be rejected via GraphQL API")
}()
// Start a simple HTTP server to serve the web page for the browser node.
diff --git a/integration-tests/constants.go b/integration-tests/constants.go
index c87e452dd..cf67e3bdb 100644
--- a/integration-tests/constants.go
+++ b/integration-tests/constants.go
@@ -1,15 +1,14 @@
package integrationtests
+import "time"
+
const (
ethereumRPCURL = "http://localhost:8545"
ethereumChainID = 1337
- wsRPCPort = 60501
- httpRPCPort = 60701
+ graphQLServerAddr = "localhost:60501"
+ graphQLServerURL = "http://localhost:60501/graphql"
browserIntegrationTestDataDir = "./data/standalone-0"
- standaloneWSRPCEndpointPrefix = "ws://localhost:"
- standaloneHTTPRPCEndpointPrefix = "http://localhost:"
- standaloneRPCAddrPrefix = "localhost:"
standaloneBlockPollingInterval = "200ms"
standaloneEthereumRPCMaxRequestsPer24HrUtc = "550000"
@@ -20,4 +19,16 @@ const (
bootstrapPeerID = "16Uiu2HAmGd949LwaV4KNvK2WDSiMVy7xEmW983VH75CMmefmMpP7"
bootstrapList = "/ip4/127.0.0.1/tcp/60500/ws/ipfs/16Uiu2HAmGd949LwaV4KNvK2WDSiMVy7xEmW983VH75CMmefmMpP7"
bootstrapDataDir = "./data/bootstrap-0"
+
+ // serverStartWaitTime is the amount of time to wait after seeing the "starting GraphQL server"
+ // log message before attempting to connect to the server.
+ serverStartWaitTime = 100 * time.Millisecond
+
+ // blockProcessingWaitTime is the amount of time to wait for blockwatcher and orderwatcher to process block
+ // events. Creating a valid order involves transferring sufficient funds to the maker, and setting their allowance for
+ // the maker asset. These transactions must be mined and Mesh's BlockWatcher poller must process these blocks
+ // in order for the order validation run at order submission to occur at a block number equal or higher then
+ // the one where these state changes were included. With the BlockWatcher poller configured to run every 200ms,
+ // we wait 500ms to give it ample time to run before submitting the above order to the Mesh node.
+ blockProcessingWaitTime = 500 * time.Millisecond
)
diff --git a/integration-tests/graphql_integration_test.go b/integration-tests/graphql_integration_test.go
new file mode 100644
index 000000000..780c5d4d2
--- /dev/null
+++ b/integration-tests/graphql_integration_test.go
@@ -0,0 +1,358 @@
+// +build !js
+
+package integrationtests
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "math/big"
+ "sort"
+ "sync"
+ "sync/atomic"
+ "testing"
+ "time"
+
+ "github.com/0xProject/0x-mesh/constants"
+ "github.com/0xProject/0x-mesh/ethereum/ratelimit"
+ gqlclient "github.com/0xProject/0x-mesh/graphql/client"
+ "github.com/0xProject/0x-mesh/scenario"
+ "github.com/0xProject/0x-mesh/scenario/orderopts"
+ "github.com/0xProject/0x-mesh/zeroex"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestAddOrdersSuccess(t *testing.T) {
+ teardownSubTest := setupSubTest(t)
+ defer teardownSubTest(t)
+
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ wg := &sync.WaitGroup{}
+ client, _ := buildAndStartGraphQLServer(t, ctx, wg)
+
+ // Create a new valid order.
+ signedTestOrder := scenario.NewSignedTestOrder(t, orderopts.SetupMakerState(true))
+ time.Sleep(blockProcessingWaitTime)
+
+ // Send the "AddOrders" request to the GraphQL server.
+ validationResponse, err := client.AddOrders(ctx, []*zeroex.SignedOrder{signedTestOrder})
+ require.NoError(t, err)
+
+ // Ensure that the validation results contain only the order that was
+ // sent to the GraphQL server and that the order was marked as valid.
+ require.Len(t, validationResponse.Accepted, 1)
+ assert.Len(t, validationResponse.Rejected, 0)
+ accepted := validationResponse.Accepted[0]
+ expectedFillableTakerAssetAmount := signedTestOrder.TakerAssetAmount
+ expectedOrderHash, err := signedTestOrder.ComputeOrderHash()
+ require.NoError(t, err, "could not compute order hash for standalone order")
+ expectedAcceptedOrder := &gqlclient.OrderWithMetadata{
+ ChainID: signedTestOrder.ChainID,
+ ExchangeAddress: signedTestOrder.ExchangeAddress,
+ MakerAddress: signedTestOrder.MakerAddress,
+ MakerAssetData: signedTestOrder.MakerAssetData,
+ MakerAssetAmount: signedTestOrder.MakerAssetAmount,
+ MakerFeeAssetData: signedTestOrder.MakerFeeAssetData,
+ MakerFee: signedTestOrder.MakerFee,
+ TakerAddress: signedTestOrder.TakerAddress,
+ TakerAssetData: signedTestOrder.TakerAssetData,
+ TakerAssetAmount: signedTestOrder.TakerAssetAmount,
+ TakerFeeAssetData: signedTestOrder.TakerFeeAssetData,
+ TakerFee: signedTestOrder.TakerFee,
+ SenderAddress: signedTestOrder.SenderAddress,
+ FeeRecipientAddress: signedTestOrder.FeeRecipientAddress,
+ ExpirationTimeSeconds: signedTestOrder.ExpirationTimeSeconds,
+ Salt: signedTestOrder.Salt,
+ Signature: signedTestOrder.Signature,
+ Hash: expectedOrderHash,
+ FillableTakerAssetAmount: expectedFillableTakerAssetAmount,
+ }
+ assert.Equal(t, expectedAcceptedOrder, accepted.Order, "accepted.Order")
+ assert.Equal(t, true, accepted.IsNew, "accepted.IsNew")
+
+ cancel()
+ wg.Wait()
+}
+
+func TestGetOrder(t *testing.T) {
+ teardownSubTest := setupSubTest(t)
+ defer teardownSubTest(t)
+
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ wg := &sync.WaitGroup{}
+ client, _ := buildAndStartGraphQLServer(t, ctx, wg)
+
+ orderOptions := orderopts.SetupMakerState(true)
+ signedTestOrder := scenario.NewSignedTestOrder(t, orderOptions)
+ time.Sleep(blockProcessingWaitTime)
+
+ validationResponse, err := client.AddOrders(ctx, []*zeroex.SignedOrder{signedTestOrder})
+ require.NoError(t, err)
+ assert.Len(t, validationResponse.Accepted, 1)
+ assert.Len(t, validationResponse.Rejected, 0)
+
+ expectedHash, err := signedTestOrder.ComputeOrderHash()
+ require.NoError(t, err)
+ expectedOrder := &gqlclient.OrderWithMetadata{
+ ChainID: signedTestOrder.ChainID,
+ ExchangeAddress: signedTestOrder.ExchangeAddress,
+ MakerAddress: signedTestOrder.MakerAddress,
+ MakerAssetData: signedTestOrder.MakerAssetData,
+ MakerAssetAmount: signedTestOrder.MakerAssetAmount,
+ MakerFeeAssetData: signedTestOrder.MakerFeeAssetData,
+ MakerFee: signedTestOrder.MakerFee,
+ TakerAddress: signedTestOrder.TakerAddress,
+ TakerAssetData: signedTestOrder.TakerAssetData,
+ TakerAssetAmount: signedTestOrder.TakerAssetAmount,
+ TakerFeeAssetData: signedTestOrder.TakerFeeAssetData,
+ TakerFee: signedTestOrder.TakerFee,
+ SenderAddress: signedTestOrder.SenderAddress,
+ FeeRecipientAddress: signedTestOrder.FeeRecipientAddress,
+ ExpirationTimeSeconds: signedTestOrder.ExpirationTimeSeconds,
+ Salt: signedTestOrder.Salt,
+ Signature: signedTestOrder.Signature,
+ Hash: expectedHash,
+ FillableTakerAssetAmount: signedTestOrder.TakerAssetAmount,
+ }
+ actualOrder, err := client.GetOrder(ctx, expectedHash)
+ require.NoError(t, err)
+ require.Equal(t, expectedOrder, actualOrder)
+
+ cancel()
+ wg.Wait()
+}
+
+func TestGetOrders(t *testing.T) {
+ teardownSubTest := setupSubTest(t)
+ defer teardownSubTest(t)
+
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ wg := &sync.WaitGroup{}
+ client, _ := buildAndStartGraphQLServer(t, ctx, wg)
+
+ // Create 10 new valid orders.
+ numOrders := 10
+ orderOptions := scenario.OptionsForAll(orderopts.SetupMakerState(true))
+ signedTestOrders := scenario.NewSignedTestOrdersBatch(t, numOrders, orderOptions)
+ time.Sleep(blockProcessingWaitTime)
+
+ // Send the newly created order to "AddOrders." The order is valid, and this should
+ // be reflected in the validation results.
+ validationResponse, err := client.AddOrders(ctx, signedTestOrders)
+ require.NoError(t, err)
+ assert.Len(t, validationResponse.Accepted, numOrders)
+ assert.Len(t, validationResponse.Rejected, 0)
+
+ // Get orders without any options.
+ actualOrders, err := client.GetOrders(ctx)
+ require.NoError(t, err)
+ require.Len(t, actualOrders, 10)
+ expectedOrders := make([]*gqlclient.OrderWithMetadata, len(signedTestOrders))
+ for i, signedOrder := range signedTestOrders {
+ hash, err := signedOrder.ComputeOrderHash()
+ require.NoError(t, err)
+ expectedOrders[i] = &gqlclient.OrderWithMetadata{
+ ChainID: signedOrder.ChainID,
+ ExchangeAddress: signedOrder.ExchangeAddress,
+ MakerAddress: signedOrder.MakerAddress,
+ MakerAssetData: signedOrder.MakerAssetData,
+ MakerAssetAmount: signedOrder.MakerAssetAmount,
+ MakerFeeAssetData: signedOrder.MakerFeeAssetData,
+ MakerFee: signedOrder.MakerFee,
+ TakerAddress: signedOrder.TakerAddress,
+ TakerAssetData: signedOrder.TakerAssetData,
+ TakerAssetAmount: signedOrder.TakerAssetAmount,
+ TakerFeeAssetData: signedOrder.TakerFeeAssetData,
+ TakerFee: signedOrder.TakerFee,
+ SenderAddress: signedOrder.SenderAddress,
+ FeeRecipientAddress: signedOrder.FeeRecipientAddress,
+ ExpirationTimeSeconds: signedOrder.ExpirationTimeSeconds,
+ Salt: signedOrder.Salt,
+ Signature: signedOrder.Signature,
+ Hash: hash,
+ FillableTakerAssetAmount: signedOrder.TakerAssetAmount,
+ }
+ }
+ assertOrdersAreUnsortedEqual(t, expectedOrders, actualOrders)
+
+ // Get orders with filter, sort, and limit.
+ opts := gqlclient.GetOrdersOpts{
+ Filters: []gqlclient.OrderFilter{
+ {
+ Field: gqlclient.OrderFieldChainID,
+ Kind: gqlclient.FilterKindEqual,
+ Value: signedTestOrders[0].ChainID,
+ },
+ {
+ Field: gqlclient.OrderFieldExpirationTimeSeconds,
+ Kind: gqlclient.FilterKindGreaterOrEqual,
+ Value: big.NewInt(0),
+ },
+ },
+ Sort: []gqlclient.OrderSort{
+ {
+ Field: gqlclient.OrderFieldHash,
+ Direction: gqlclient.SortDirectionDesc,
+ },
+ },
+ Limit: 5,
+ }
+ actualOrdersWithOpts, err := client.GetOrders(ctx, opts)
+ require.NoError(t, err)
+ require.Len(t, actualOrdersWithOpts, 5)
+ sortOrdersByHashDesc(expectedOrders)
+ expectedOrdersWithOpts := expectedOrders[:5]
+ assertOrderSlicesAreEqual(t, expectedOrdersWithOpts, actualOrdersWithOpts)
+
+ cancel()
+ wg.Wait()
+}
+
+func TestGetStats(t *testing.T) {
+ teardownSubTest := setupSubTest(t)
+ defer teardownSubTest(t)
+
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ wg := &sync.WaitGroup{}
+ client, peerID := buildAndStartGraphQLServer(t, ctx, wg)
+
+ actualStats, err := client.GetStats(ctx)
+ require.NoError(t, err)
+
+ // Ensure that the "LatestBlock" in the stats response is non-nil and has a nonzero block number.
+ assert.NotNil(t, actualStats.LatestBlock)
+ assert.True(t, actualStats.LatestBlock.Number.String() != "0", "stats.LatestBlock.Number should not be 0")
+ assert.NotEmpty(t, actualStats.LatestBlock.Hash, "stats.LatestBlock.Hash should not be empty")
+
+ expectedStats := &gqlclient.Stats{
+ Version: "development",
+ PubSubTopic: "/0x-orders/version/3/chain/1337/schema/e30=",
+ Rendezvous: "/0x-mesh/network/1337/version/2",
+ PeerID: peerID,
+ EthereumChainID: 1337,
+ // NOTE(jalextowle): Since this test uses an actual mesh node, we can't know in advance which block
+ // should be the latest block.
+ LatestBlock: actualStats.LatestBlock,
+ NumOrders: 0,
+ NumOrdersIncludingRemoved: 0,
+ NumPeers: 0,
+ MaxExpirationTime: constants.UnlimitedExpirationTime,
+ StartOfCurrentUTCDay: ratelimit.GetUTCMidnightOfDate(time.Now()),
+ EthRPCRequestsSentInCurrentUTCDay: 0,
+ EthRPCRateLimitExpiredRequests: 0,
+ }
+ assert.Equal(t, expectedStats, actualStats)
+
+ cancel()
+ wg.Wait()
+}
+
+type rawResponse struct {
+ Stats statsWithJustNumOrders `json:"stats"`
+}
+
+type statsWithJustNumOrders struct {
+ NumOrders int `json:"numOrders"`
+}
+
+func TestRawQuery(t *testing.T) {
+ teardownSubTest := setupSubTest(t)
+ defer teardownSubTest(t)
+
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ wg := &sync.WaitGroup{}
+ client, _ := buildAndStartGraphQLServer(t, ctx, wg)
+
+ query := `{
+ stats {
+ numOrders
+ }
+ }`
+ var actualResponse rawResponse
+ require.NoError(t, client.RawQuery(ctx, query, &actualResponse))
+ expectedResponse := rawResponse{
+ Stats: statsWithJustNumOrders{
+ NumOrders: 0,
+ },
+ }
+ require.Equal(t, expectedResponse, actualResponse)
+
+ cancel()
+ wg.Wait()
+}
+
+func assertOrdersAreUnsortedEqual(t *testing.T, expected, actual []*gqlclient.OrderWithMetadata) {
+ // Make a copy of the given orders so we don't mess up the original when sorting them.
+ expectedCopy := make([]*gqlclient.OrderWithMetadata, len(expected))
+ copy(expectedCopy, expected)
+ sortOrdersByHashAsc(expectedCopy)
+ actualCopy := make([]*gqlclient.OrderWithMetadata, len(actual))
+ copy(actualCopy, actual)
+ sortOrdersByHashAsc(actualCopy)
+ assertOrderSlicesAreEqual(t, expectedCopy, actualCopy)
+}
+
+func assertOrderSlicesAreEqual(t *testing.T, expected, actual []*gqlclient.OrderWithMetadata) {
+ assert.Equal(t, len(expected), len(actual), "wrong number of orders")
+ for i, expectedOrder := range expected {
+ if i >= len(actual) {
+ break
+ }
+ actualOrder := actual[i]
+ assert.Equal(t, expectedOrder, actualOrder)
+ }
+ if t.Failed() {
+ expectedJSON, err := json.MarshalIndent(expected, "", " ")
+ require.NoError(t, err)
+ actualJSON, err := json.MarshalIndent(actual, "", " ")
+ require.NoError(t, err)
+ t.Logf("\nexpected:\n%s\n\n", string(expectedJSON))
+ t.Logf("\nactual:\n%s\n\n", string(actualJSON))
+ assert.Equal(t, string(expectedJSON), string(actualJSON))
+ }
+}
+
+func sortOrdersByHashAsc(orders []*gqlclient.OrderWithMetadata) {
+ sort.SliceStable(orders, func(i, j int) bool {
+ return bytes.Compare(orders[i].Hash.Bytes(), orders[j].Hash.Bytes()) == -1
+ })
+}
+
+func sortOrdersByHashDesc(orders []*gqlclient.OrderWithMetadata) {
+ sort.SliceStable(orders, func(i, j int) bool {
+ return bytes.Compare(orders[i].Hash.Bytes(), orders[j].Hash.Bytes()) == 1
+ })
+}
+
+func buildAndStartGraphQLServer(t *testing.T, ctx context.Context, wg *sync.WaitGroup) (client *gqlclient.Client, peerID string) {
+ removeOldFiles(t, ctx)
+ buildStandaloneForTests(t, ctx)
+
+ // Start a standalone node with a wait group that is completed when the goroutine completes.
+ wg.Add(1)
+ logMessages := make(chan string, 1024)
+ count := int(atomic.AddInt32(&nodeCount, 1))
+ go func() {
+ defer wg.Done()
+ startStandaloneNode(t, ctx, count, "", "", logMessages)
+ }()
+
+ // Wait for the GraphQL server to start and extract the PeerID from the log.
+ var jsonLog struct {
+ PeerID string `json:"myPeerID"`
+ }
+ log, err := waitForLogSubstring(ctx, logMessages, "starting GraphQL server")
+ require.NoError(t, err, fmt.Sprintf("GraphQL server didn't start"))
+ err = json.Unmarshal([]byte(log), &jsonLog)
+ require.NoError(t, err)
+
+ time.Sleep(serverStartWaitTime)
+ return gqlclient.New(graphQLServerURL), jsonLog.PeerID
+}
diff --git a/integration-tests/rpc_integration_test.go b/integration-tests/rpc_integration_test.go
deleted file mode 100644
index b75e9fd0c..000000000
--- a/integration-tests/rpc_integration_test.go
+++ /dev/null
@@ -1,365 +0,0 @@
-// +build !js
-
-package integrationtests
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "strconv"
- "sync"
- "sync/atomic"
- "testing"
- "time"
-
- "github.com/0xProject/0x-mesh/common/types"
- "github.com/0xProject/0x-mesh/constants"
- "github.com/0xProject/0x-mesh/ethereum/ratelimit"
- "github.com/0xProject/0x-mesh/rpc"
- "github.com/0xProject/0x-mesh/scenario"
- "github.com/0xProject/0x-mesh/scenario/orderopts"
- "github.com/0xProject/0x-mesh/zeroex"
- "github.com/ethereum/go-ethereum/common"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-func TestWSAddOrdersSuccess(t *testing.T) {
- runAddOrdersSuccessTest(t, standaloneWSRPCEndpointPrefix, "WS", wsRPCPort)
-}
-
-func TestHTTPAddOrdersSuccess(t *testing.T) {
- runAddOrdersSuccessTest(t, standaloneHTTPRPCEndpointPrefix, "HTTP", httpRPCPort)
-}
-
-func runAddOrdersSuccessTest(t *testing.T, rpcEndpointPrefix, rpcServerType string, rpcPort int) {
- teardownSubTest := setupSubTest(t)
- defer teardownSubTest(t)
-
- ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
- defer cancel()
-
- removeOldFiles(t, ctx)
- buildStandaloneForTests(t, ctx)
-
- // Start a standalone node with a wait group that is completed when the goroutine completes.
- wg := &sync.WaitGroup{}
- wg.Add(1)
- logMessages := make(chan string, 1024)
- count := int(atomic.AddInt32(&nodeCount, 1))
- go func() {
- defer wg.Done()
- startStandaloneNode(t, ctx, count, "", "", logMessages)
- }()
-
- // Wait until the rpc server has been started, and then create an rpc client
- // that connects to the rpc server.
- _, err := waitForLogSubstring(ctx, logMessages, fmt.Sprintf("started %s RPC server", rpcServerType))
- require.NoError(t, err, fmt.Sprintf("%s RPC server didn't start", rpcServerType))
- client, err := rpc.NewClient(rpcEndpointPrefix + strconv.Itoa(rpcPort+count))
- require.NoError(t, err)
-
- // Create a new valid order.
- signedTestOrder := scenario.NewSignedTestOrder(t, orderopts.SetupMakerState(true))
- // Creating a valid order involves transferring sufficient funds to the maker, and setting their allowance for
- // the maker asset. These transactions must be mined and Mesh's BlockWatcher poller must process these blocks
- // in order for the order validation run at order submission to occur at a block number equal or higher then
- // the one where these state changes were included. With the BlockWatcher poller configured to run every 200ms,
- // we wait 500ms here to give it ample time to run before submitting the above order to the Mesh node.
- time.Sleep(500 * time.Millisecond)
-
- // Send the "AddOrders" request to the rpc server.
- validationResponse, err := client.AddOrders([]*zeroex.SignedOrder{signedTestOrder})
- require.NoError(t, err)
-
- // Ensure that the validation results contain only the order that was
- // sent to the rpc server and that the order was marked as valid.
- require.Len(t, validationResponse.Accepted, 1)
- assert.Len(t, validationResponse.Rejected, 0)
- acceptedOrderInfo := validationResponse.Accepted[0]
- expectedFillableTakerAssetAmount := signedTestOrder.TakerAssetAmount
- expectedOrderHash, err := signedTestOrder.ComputeOrderHash()
- require.NoError(t, err, "could not compute order hash for standalone order")
- signedTestOrder.ResetHash()
- assert.Equal(t, expectedFillableTakerAssetAmount, acceptedOrderInfo.FillableTakerAssetAmount, "fillableTakerAssetAmount did not match")
- assert.Equal(t, expectedOrderHash, acceptedOrderInfo.OrderHash, "orderHashes did not match")
- assert.Equal(t, signedTestOrder, acceptedOrderInfo.SignedOrder, "signedOrder did not match")
-
- cancel()
- wg.Wait()
-}
-
-func TestWSGetOrders(t *testing.T) {
- runGetOrdersTest(t, standaloneWSRPCEndpointPrefix, "WS", wsRPCPort)
-}
-
-func TestHTTPGetOrders(t *testing.T) {
- runGetOrdersTest(t, standaloneHTTPRPCEndpointPrefix, "HTTP", httpRPCPort)
-}
-
-// TODO(jalextowle): Since the uuid creation process is inherently random, we
-// can't meaningfully sanity check the returnedSnapshotID in
-// this test. Unit testing should be implemented to verify that
-// this logic is correct, if necessary.
-func runGetOrdersTest(t *testing.T, rpcEndpointPrefix, rpcServerType string, rpcPort int) {
- teardownSubTest := setupSubTest(t)
- defer teardownSubTest(t)
-
- ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
- defer cancel()
-
- removeOldFiles(t, ctx)
- buildStandaloneForTests(t, ctx)
-
- // Start a standalone node with a wait group that is completed when the goroutine completes.
- wg := &sync.WaitGroup{}
- wg.Add(1)
- logMessages := make(chan string, 1024)
- count := int(atomic.AddInt32(&nodeCount, 1))
- go func() {
- defer wg.Done()
- startStandaloneNode(t, ctx, count, "", "", logMessages)
- }()
-
- _, err := waitForLogSubstring(ctx, logMessages, fmt.Sprintf("started %s RPC server", rpcServerType))
- require.NoError(t, err, fmt.Sprintf("%s RPC server didn't start", rpcServerType))
-
- client, err := rpc.NewClient(rpcEndpointPrefix + strconv.Itoa(rpcPort+count))
- require.NoError(t, err)
-
- // Create 10 new valid orders.
- numOrders := 10
- orderOptions := scenario.OptionsForAll(orderopts.SetupMakerState(true))
- signedTestOrders := scenario.NewSignedTestOrdersBatch(t, numOrders, orderOptions)
- // Creating a valid order involves transferring sufficient funds to the maker, and setting their allowance for
- // the maker asset. These transactions must be mined and Mesh's BlockWatcher poller must process these blocks
- // in order for the order validation run at order submission to occur at a block number equal or higher then
- // the one where these state changes were included. With the BlockWatcher poller configured to run every 200ms,
- // we wait 500ms here to give it ample time to run before submitting the above order to the Mesh node.
- time.Sleep(500 * time.Millisecond)
-
- // Send the newly created order to "AddOrders." The order is valid, and this should
- // be reflected in the validation results.
- validationResponse, err := client.AddOrders(signedTestOrders)
- require.NoError(t, err)
- assert.Len(t, validationResponse.Accepted, numOrders)
- assert.Len(t, validationResponse.Rejected, 0)
-
- getOrdersResponse, err := client.GetOrders(10, common.Hash{})
- require.NoError(t, err)
- // NOTE(jalextowle) This statement holds true for many pagination algorithms, but it may be necessary
- // to drop this requirement if the `GetOrders` endpoint changes dramatically.
- require.Len(t, getOrdersResponse.OrdersInfos, 10)
-
- // Make a new "GetOrders" request with different pagination parameters.
- for _, testCase := range []struct {
- ordersPerPage int
- }{
- {
- ordersPerPage: -1,
- },
- {
- ordersPerPage: 0,
- },
- {
- ordersPerPage: 3,
- },
- {
- ordersPerPage: 5,
- },
- } {
- if testCase.ordersPerPage <= 0 {
- _, err := client.GetOrders(testCase.ordersPerPage, common.Hash{})
- require.EqualError(t, err, "perPage cannot be zero")
- } else {
- // Iterate through enough pages to get all of the orders in the mesh nodes database. Compare the
- // responses to the orders that we expect to be in the database.
- var responseOrders []*types.OrderInfo
- currentMinHash := common.Hash{}
- for {
- expectedTimestamp := time.Now().UTC()
- getOrdersResponse, err := client.GetOrders(testCase.ordersPerPage, currentMinHash)
- assert.WithinDuration(t, expectedTimestamp, getOrdersResponse.Timestamp, time.Second)
- require.NoError(t, err)
- orderInfos := getOrdersResponse.OrdersInfos
- assert.LessOrEqual(t, len(orderInfos), testCase.ordersPerPage, "response contained too many orders")
- responseOrders = append(responseOrders, orderInfos...)
- if len(orderInfos) > 0 {
- currentMinHash = orderInfos[len(orderInfos)-1].OrderHash
- } else {
- break
- }
- }
- assertSignedOrdersMatch(t, signedTestOrders, responseOrders)
- }
- }
-
- cancel()
- wg.Wait()
-}
-
-func TestWSGetStats(t *testing.T) {
- runGetStatsTest(t, standaloneWSRPCEndpointPrefix, "WS", wsRPCPort)
-}
-
-func TestHTTPGetStats(t *testing.T) {
- runGetStatsTest(t, standaloneHTTPRPCEndpointPrefix, "HTTP", httpRPCPort)
-}
-
-func runGetStatsTest(t *testing.T, rpcEndpointPrefix, rpcServerType string, rpcPort int) {
- teardownSubTest := setupSubTest(t)
- defer teardownSubTest(t)
-
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
-
- removeOldFiles(t, ctx)
- buildStandaloneForTests(t, ctx)
-
- // Start a standalone node with a wait group that is completed when the goroutine completes.
- wg := &sync.WaitGroup{}
- wg.Add(1)
- logMessages := make(chan string, 1024)
- count := int(atomic.AddInt32(&nodeCount, 1))
- go func() {
- defer wg.Done()
- startStandaloneNode(t, ctx, count, "", "", logMessages)
- }()
-
- // Wait for the rpc server to start and get the peer ID of the node. Start the
- // rpc client after the server has been started,
- var jsonLog struct {
- PeerID string `json:"myPeerID"`
- }
- log, err := waitForLogSubstring(ctx, logMessages, fmt.Sprintf("started %s RPC server", rpcServerType))
- require.NoError(t, err, fmt.Sprintf("%s RPC server didn't start", rpcServerType))
- err = json.Unmarshal([]byte(log), &jsonLog)
- require.NoError(t, err)
- client, err := rpc.NewClient(rpcEndpointPrefix + strconv.Itoa(rpcPort+count))
- require.NoError(t, err)
-
- getStatsResponse, err := client.GetStats()
- require.NoError(t, err)
-
- // Ensure that the "LatestBlock" in the stats response is non-nil and has a nonzero block number.
- assert.NotNil(t, getStatsResponse.LatestBlock)
- assert.True(t, getStatsResponse.LatestBlock.Number > 0)
-
- // NOTE(jalextowle): Since this test uses an actual mesh node, we can't know in advance which block
- // should be the latest block.
- getStatsResponse.LatestBlock = types.LatestBlock{}
-
- // Ensure that the correct response was logged by "GetStats"
- require.Equal(t, "/0x-orders/version/3/chain/1337/schema/e30=", getStatsResponse.PubSubTopic, "PubSubTopic")
- require.Equal(t, "/0x-mesh/network/1337/version/2", getStatsResponse.Rendezvous, "Rendezvous")
- require.Equal(t, []string{}, getStatsResponse.SecondaryRendezvous, "SecondaryRendezvous")
- require.Equal(t, jsonLog.PeerID, getStatsResponse.PeerID, "PeerID")
- require.Equal(t, 1337, getStatsResponse.EthereumChainID, "EthereumChainID")
- require.Equal(t, types.LatestBlock{}, getStatsResponse.LatestBlock, "LatestBlock")
- require.Equal(t, 0, getStatsResponse.NumOrders, "NumOrders")
- require.Equal(t, 0, getStatsResponse.NumPeers, "NumPeers")
- require.Equal(t, constants.UnlimitedExpirationTime.String(), getStatsResponse.MaxExpirationTime, "MaxExpirationTime")
- require.Equal(t, ratelimit.GetUTCMidnightOfDate(time.Now()), getStatsResponse.StartOfCurrentUTCDay, "StartOfCurrentDay")
-
- cancel()
- wg.Wait()
-}
-
-func TestOrdersSubscription(t *testing.T) {
- teardownSubTest := setupSubTest(t)
- defer teardownSubTest(t)
-
- ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
- defer cancel()
-
- removeOldFiles(t, ctx)
- buildStandaloneForTests(t, ctx)
-
- // Start a standalone node with a wait group that is completed when the goroutine completes.
- wg := &sync.WaitGroup{}
- wg.Add(1)
- logMessages := make(chan string, 1024)
- count := int(atomic.AddInt32(&nodeCount, 1))
- go func() {
- defer wg.Done()
- startStandaloneNode(t, ctx, count, "", "", logMessages)
- }()
-
- // Wait for the rpc server to start and then start the rpc client.
- _, err := waitForLogSubstring(ctx, logMessages, "started WS RPC server")
- require.NoError(t, err, "WS RPC server didn't start")
- client, err := rpc.NewClient(standaloneWSRPCEndpointPrefix + strconv.Itoa(wsRPCPort+count))
- require.NoError(t, err)
-
- // Subscribe to order events through the rpc client and ensure that the subscription
- // is valid.
- orderEventChan := make(chan []*zeroex.OrderEvent, 1)
- clientSubscription, err := client.SubscribeToOrders(ctx, orderEventChan)
- require.NoError(t, err)
- assert.NotNil(t, clientSubscription, "clientSubscription not nil")
-
- // Create a valid order and send it to the rpc client's "AddOrders" endpoint.
- signedTestOrder := scenario.NewSignedTestOrder(t, orderopts.SetupMakerState(true))
- // Creating a valid order involves transferring sufficient funds to the maker, and setting their allowance for
- // the maker asset. These transactions must be mined and Mesh's BlockWatcher poller must process these blocks
- // in order for the order validation run at order submission to occur at a block number equal or higher then
- // the one where these state changes were included. With the BlockWatcher poller configured to run every 200ms,
- // we wait 500ms here to give it ample time to run before submitting the above order to the Mesh node.
- time.Sleep(500 * time.Millisecond)
- expectedOrderHash, err := signedTestOrder.ComputeOrderHash()
- require.NoError(t, err, "could not compute order hash for standalone order")
- _, err = client.AddOrders([]*zeroex.SignedOrder{signedTestOrder})
- require.NoError(t, err)
-
- // Ensure that the "AddOrders" request triggered an order event that was
- // passed through the subscription.
- orderEvents := <-orderEventChan
- signedTestOrder.ResetHash()
- expectedFillableTakerAssetAmount := signedTestOrder.TakerAssetAmount
- assert.Len(t, orderEvents, 1)
- orderEvent := orderEvents[0]
- assert.Equal(t, expectedOrderHash, orderEvent.OrderHash)
- assert.Equal(t, signedTestOrder, orderEvent.SignedOrder)
- assert.Equal(t, zeroex.ESOrderAdded, orderEvent.EndState)
- assert.Equal(t, expectedFillableTakerAssetAmount, orderEvent.FillableTakerAssetAmount)
- assert.Equal(t, []*zeroex.ContractEvent{}, orderEvent.ContractEvents)
-}
-
-func TestHeartbeatSubscription(t *testing.T) {
- teardownSubTest := setupSubTest(t)
- defer teardownSubTest(t)
-
- ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
- defer cancel()
-
- removeOldFiles(t, ctx)
- buildStandaloneForTests(t, ctx)
-
- // Start a standalone node with a wait group that is completed when the goroutine completes.
- wg := &sync.WaitGroup{}
- wg.Add(1)
- logMessages := make(chan string, 1024)
- count := int(atomic.AddInt32(&nodeCount, 1))
- go func() {
- defer wg.Done()
- startStandaloneNode(t, ctx, count, "", "", logMessages)
- }()
-
- // Wait for the rpc server to start and then start the rpc client
- _, err := waitForLogSubstring(ctx, logMessages, "started WS RPC server")
- require.NoError(t, err, "WS RPC server didn't start")
- client, err := rpc.NewClient(standaloneWSRPCEndpointPrefix + strconv.Itoa(wsRPCPort+count))
- require.NoError(t, err)
-
- // Send the "SubscribeToHeartbeat" request through the rpc client and assert
- // that the subscription is not nil.
- heartbeatChan := make(chan string)
- clientSubscription, err := client.SubscribeToHeartbeat(ctx, heartbeatChan)
- defer clientSubscription.Unsubscribe()
- require.NoError(t, err)
- assert.NotNil(t, clientSubscription, "clientSubscription not nil")
-
- // Ensure that a valid heartbeat was received
- heartbeat := <-heartbeatChan
- assert.Equal(t, "tick", heartbeat)
-}
diff --git a/integration-tests/utils.go b/integration-tests/utils.go
index c46e4bcc6..b3153f790 100644
--- a/integration-tests/utils.go
+++ b/integration-tests/utils.go
@@ -162,8 +162,8 @@ func startStandaloneNode(t *testing.T, ctx context.Context, nodeID int, dataDir
"BOOTSTRAP_LIST="+bootstrapList,
"ETHEREUM_RPC_URL="+ethereumRPCURL,
"ETHEREUM_CHAIN_ID="+strconv.Itoa(ethereumChainID),
- "WS_RPC_ADDR="+standaloneRPCAddrPrefix+strconv.Itoa(wsRPCPort+nodeID),
- "HTTP_RPC_ADDR="+standaloneRPCAddrPrefix+strconv.Itoa(httpRPCPort+nodeID),
+ "ENABLE_GRAPHQL_SERVER=true",
+ "GRAPHQL_SERVER_ADDR="+graphQLServerAddr,
"BLOCK_POLLING_INTERVAL="+standaloneBlockPollingInterval,
"ETHEREUM_RPC_MAX_REQUESTS_PER_24_HR_UTC="+standaloneEthereumRPCMaxRequestsPer24HrUtc,
)
@@ -308,7 +308,7 @@ func assertSignedOrdersMatch(t *testing.T, expectedSignedOrders []*zeroex.Signed
}
// A holder type for parsing logged OrderEvents. These are received by either
-// an RPC subscription or in the TypeScript bindings and are not usually logged
+// a GraphQL subscription or in the TypeScript bindings and are not usually logged
// by Mesh. They need to be explicitly logged.
type orderEventLog struct {
OrderHash string `json:"orderHash"`
diff --git a/issue_template.md b/issue_template.md
index 7ef16548c..8da0c84ba 100644
--- a/issue_template.md
+++ b/issue_template.md
@@ -11,7 +11,7 @@ Please provide any relevant information about your setup
- Are you running Mesh in the browser or as a standalone server? Are running Mesh inside of Docker or directly running the binary?
- What version of Mesh are you running? Be as specific as possible (e.g., `8.0.1` instead of `latest` or `8`).
-- Are you using an RPC client and if so, which one? (e.g., Typescript or Golang client, the exact version)
+- Are you using one of our GraphQL clients and if so, which one? (e.g., Typescript or Golang client, the exact version)
# Expected Behavior
diff --git a/packages/mesh-browser-lite/src/mesh.ts b/packages/mesh-browser-lite/src/mesh.ts
index 6643ae82f..eec48aa84 100644
--- a/packages/mesh-browser-lite/src/mesh.ts
+++ b/packages/mesh-browser-lite/src/mesh.ts
@@ -217,8 +217,6 @@ export class Mesh {
return Promise.reject(new Error('Mesh is still loading. Try again soon.'));
}
- // TODO(albrow): De-dupe this code with the method by the same name
- // in the TypeScript RPC client.
let getOrdersResponse = await this.getOrdersForPageAsync(perPage);
let ordersInfos = getOrdersResponse.ordersInfos;
let allOrderInfos: OrderInfo[] = [];
diff --git a/packages/mesh-browser-lite/src/types.ts b/packages/mesh-browser-lite/src/types.ts
index 8f0610c80..8c7dcfb92 100644
--- a/packages/mesh-browser-lite/src/types.ts
+++ b/packages/mesh-browser-lite/src/types.ts
@@ -637,8 +637,14 @@ export interface RejectedOrderStatus {
message: string;
}
+/** @ignore */
+export interface WrapperLatestBlock {
+ number: string;
+ hash: string;
+}
+
export interface LatestBlock {
- number: number;
+ number: BigNumber;
hash: string;
}
@@ -650,7 +656,7 @@ export interface WrapperStats {
secondaryRendezvous: string[];
peerID: string;
ethereumChainID: number;
- latestBlock: LatestBlock;
+ latestBlock: WrapperLatestBlock;
numPeers: number;
numOrders: number;
numOrdersIncludingRemoved: number;
@@ -668,7 +674,7 @@ export interface Stats {
secondaryRendezvous: string[];
peerID: string;
ethereumChainID: number;
- latestBlock: LatestBlock;
+ latestBlock?: LatestBlock;
numPeers: number;
numOrders: number;
numOrdersIncludingRemoved: number;
diff --git a/packages/mesh-browser-lite/src/wrapper_conversion.ts b/packages/mesh-browser-lite/src/wrapper_conversion.ts
index 671bc3167..4a55cae50 100644
--- a/packages/mesh-browser-lite/src/wrapper_conversion.ts
+++ b/packages/mesh-browser-lite/src/wrapper_conversion.ts
@@ -19,6 +19,7 @@ import {
ERC721ApprovalForAllEvent,
ExchangeCancelEvent,
GetOrdersResponse,
+ LatestBlock,
OrderEvent,
OrderInfo,
RejectedOrderInfo,
@@ -36,6 +37,7 @@ import {
WrapperExchangeCancelUpToEvent,
WrapperExchangeFillEvent,
WrapperGetOrdersResponse,
+ WrapperLatestBlock,
WrapperOrderEvent,
WrapperOrderInfo,
WrapperRejectedOrderInfo,
@@ -274,11 +276,19 @@ export function wrapperRejectedOrderInfoToRejectedOrderInfo(
export function wrapperStatsToStats(wrapperStats: WrapperStats): Stats {
return {
...wrapperStats,
+ latestBlock: wrapperLatestBlockToLatestBlock(wrapperStats.latestBlock),
startOfCurrentUTCDay: new Date(wrapperStats.startOfCurrentUTCDay),
maxExpirationTime: new BigNumber(wrapperStats.maxExpirationTime),
};
}
+export function wrapperLatestBlockToLatestBlock(wrapperLatestBlock: WrapperLatestBlock): LatestBlock {
+ return {
+ ...wrapperLatestBlock,
+ number: new BigNumber(wrapperLatestBlock.number),
+ };
+}
+
export function wrapperGetOrdersResponseToGetOrdersResponse(
wrapperGetOrdersResponse: WrapperGetOrdersResponse,
): GetOrdersResponse {
diff --git a/packages/mesh-browser/conversion-tests/conversion_test.ts b/packages/mesh-browser/conversion-tests/conversion_test.ts
index 0f7f6faa1..978113552 100644
--- a/packages/mesh-browser/conversion-tests/conversion_test.ts
+++ b/packages/mesh-browser/conversion-tests/conversion_test.ts
@@ -632,7 +632,7 @@ function testOrderEvents(orderEvents: WrapperOrderEvent[]): void {
printer('contractEvents.txHash', orderEvents[1].contractEvents[0].txHash === hexUtils.leftPad('0x2', 32));
printer('contractEvents.txIndex', orderEvents[1].contractEvents[0].txIndex === 123);
printer('contractEvents.logIndex', orderEvents[1].contractEvents[0].logIndex === 321);
- printer('contractEvents.isRemoved', orderEvents[1].contractEvents[0].isRemoved === false);
+ printer('contractEvents.isRemoved', !orderEvents[1].contractEvents[0].isRemoved);
printer('contractEvents.address', orderEvents[1].contractEvents[0].address === hexUtils.leftPad('0x5', 20));
printer('contractEvents.kind', orderEvents[1].contractEvents[0].kind === 'ExchangeFillEvent');
}
@@ -707,7 +707,7 @@ function testStats(stats: WrapperStats[]): void {
printer('peerID', stats[0].peerID === '16Uiu2HAmGd949LwaV4KNvK2WDSiMVy7xEmW983VH75CMmefmMpP7');
printer('ethereumChainID', stats[0].ethereumChainID === 1337);
printer('latestBlock | hash', stats[0].latestBlock.hash === hexUtils.leftPad('0x1', 32));
- printer('latestBlock | number', stats[0].latestBlock.number === 1500);
+ printer('latestBlock | number', stats[0].latestBlock.number === '1500');
printer('numOrders', stats[0].numOrders === 100000);
printer('numPeers', stats[0].numPeers === 200);
printer('numOrdersIncludingRemoved', stats[0].numOrdersIncludingRemoved === 200000);
diff --git a/packages/mesh-browser/go/conversion-test/main.go b/packages/mesh-browser/go/conversion-test/main.go
index 7590bba40..eb973eeec 100644
--- a/packages/mesh-browser/go/conversion-test/main.go
+++ b/packages/mesh-browser/go/conversion-test/main.go
@@ -18,6 +18,7 @@ import (
"github.com/0xProject/0x-mesh/zeroex/ordervalidator"
"github.com/0xProject/0x-mesh/zeroex/orderwatch/decoder"
"github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/math"
)
const (
@@ -491,13 +492,13 @@ func setGlobals() {
EthereumChainID: 1337,
LatestBlock: types.LatestBlock{
Hash: common.HexToHash("0x1"),
- Number: 1500,
+ Number: big.NewInt(1500),
},
NumPeers: 200,
NumOrders: 100000,
NumOrdersIncludingRemoved: 200000,
NumPinnedOrders: 400,
- MaxExpirationTime: "115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ MaxExpirationTime: math.MaxBig256,
StartOfCurrentUTCDay: time.Date(2006, time.January, 1, 0, 0, 0, 0, time.UTC),
EthRPCRequestsSentInCurrentUTCDay: 100000,
EthRPCRateLimitExpiredRequests: 5000,
diff --git a/packages/mesh-browser/go/mesh-browser/main.go b/packages/mesh-browser/go/mesh-browser/main.go
index 95a23ffd4..b742c7d30 100644
--- a/packages/mesh-browser/go/mesh-browser/main.go
+++ b/packages/mesh-browser/go/mesh-browser/main.go
@@ -146,7 +146,7 @@ func (cw *MeshWrapper) AddOrders(rawOrders js.Value, pinned bool) (js.Value, err
if err := jsutil.InefficientlyConvertFromJS(rawOrders, &rawMessages); err != nil {
return js.Undefined(), err
}
- results, err := cw.app.AddOrders(cw.ctx, rawMessages, pinned)
+ results, err := cw.app.AddOrdersRaw(cw.ctx, rawMessages, pinned)
if err != nil {
return js.Undefined(), err
}
diff --git a/packages/mesh-rpc-client/README.md b/packages/mesh-graphql-client/README.md
similarity index 84%
rename from packages/mesh-rpc-client/README.md
rename to packages/mesh-graphql-client/README.md
index 9131af214..9fcfdc04b 100644
--- a/packages/mesh-rpc-client/README.md
+++ b/packages/mesh-graphql-client/README.md
@@ -1,11 +1,11 @@
-## @0x/mesh-rpc-client
+## @0x/mesh-graphql-client
-A Javascript library for interacting with the Mesh JSON RPC API over WebSockets.
+A client for the Mesh GraphQL API.
## Installation
```bash
-yarn add @0x/mesh-rpc-client
+yarn add @0x/mesh-graphql-client
```
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
diff --git a/packages/mesh-graphql-client/apollo.config.js b/packages/mesh-graphql-client/apollo.config.js
new file mode 100644
index 000000000..a9b72b9a1
--- /dev/null
+++ b/packages/mesh-graphql-client/apollo.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ client: {
+ service: { localSchemaFile: '../../graphql/schema.graphql' },
+ },
+};
diff --git a/packages/mesh-graphql-client/package.json b/packages/mesh-graphql-client/package.json
new file mode 100644
index 000000000..1a638c54a
--- /dev/null
+++ b/packages/mesh-graphql-client/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "@0x/mesh-graphql-client",
+ "version": "1.0.0",
+ "description": "A client for the Mesh GraphQL API",
+ "main": "./lib/index.js",
+ "license": "Apache-2.0",
+ "scripts": {
+ "build": "yarn build:ts",
+ "build:ts": "tsc -b",
+ "test": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --timeout 200000 --exit",
+ "clean": "shx rm -r ./lib && shx rm tsconfig.tsbuildinfo || exit 0",
+ "watch:ts": "tsc -b -w",
+ "docs:md": "ts-doc-gen --sourceDir=./src --output=${npm_package_config_docsPath}",
+ "lint": "tslint --format stylish --project ."
+ },
+ "config": {
+ "docsPath": "../../docs/graphql-client"
+ },
+ "devDependencies": {
+ "@0x/contract-addresses": "^4.11.0",
+ "@0x/contracts-erc20": "^3.2.1",
+ "@0x/contracts-exchange": "^3.2.7",
+ "@0x/contracts-test-utils": "^5.3.4",
+ "@0x/dev-utils": "^3.3.0",
+ "@0x/order-utils": "^10.3.0",
+ "@0x/subproviders": "^6.1.1",
+ "@0x/ts-doc-gen": "^0.0.16",
+ "@0x/types": "^3.2.0",
+ "@0x/web3-wrapper": "^7.2.0",
+ "@types/jsonstream": "^0.8.30",
+ "@types/ramda": "^0.27.14",
+ "@types/rimraf": "^3.0.0",
+ "@types/websocket": "^1.0.1",
+ "chai": "^4.2.0",
+ "chai-as-promised": "^7.1.1",
+ "chai-bignumber": "^3.0.0",
+ "dirty-chai": "^2.0.1",
+ "jsonstream": "^1.0.3",
+ "mocha": "^8.1.0",
+ "rimraf": "^3.0.2",
+ "shx": "^0.3.2",
+ "typedoc": "^0.15.0",
+ "typescript": "^3.9.3",
+ "websocket": "^1.0.31"
+ },
+ "dependencies": {
+ "@0x/mesh-browser-lite": "^9.4.2",
+ "@0x/types": "^3.2.0",
+ "@0x/utils": "^5.4.0",
+ "@apollo/client": "^3.1.1",
+ "@types/ws": "^7.2.6",
+ "graphql": "^15.3.0",
+ "react": "*",
+ "subscriptions-transport-ws": "^0.9.17",
+ "ws": "^7.3.1",
+ "zen-observable": "^0.8.15"
+ }
+}
diff --git a/packages/mesh-graphql-client/src/index.ts b/packages/mesh-graphql-client/src/index.ts
new file mode 100644
index 000000000..7a9e665ab
--- /dev/null
+++ b/packages/mesh-graphql-client/src/index.ts
@@ -0,0 +1,391 @@
+import { SignedOrder } from '@0x/types';
+import { from, HttpLink, split } from '@apollo/client';
+import {
+ ApolloClient,
+ ApolloQueryResult,
+ FetchResult,
+ gql,
+ InMemoryCache,
+ NormalizedCacheObject,
+ OperationVariables,
+ QueryOptions,
+} from '@apollo/client/core';
+import { onError } from '@apollo/client/link/error';
+import { WebSocketLink } from '@apollo/client/link/ws';
+import { getMainDefinition } from '@apollo/client/utilities';
+import { SubscriptionClient } from 'subscriptions-transport-ws';
+import * as ws from 'ws';
+import * as Observable from 'zen-observable';
+
+import {
+ AddOrdersResponse,
+ AddOrdersResults,
+ convertFilterValue,
+ fromStringifiedAddOrdersResults,
+ fromStringifiedOrderEvent,
+ fromStringifiedOrderWithMetadata,
+ fromStringifiedStats,
+ OrderEvent,
+ OrderEventResponse,
+ OrderQuery,
+ OrderResponse,
+ OrdersResponse,
+ OrderWithMetadata,
+ Stats,
+ StatsResponse,
+ toStringifiedSignedOrder,
+} from './types';
+
+export {
+ AddOrdersResults,
+ OrderEvent,
+ OrderQuery,
+ OrderWithMetadata,
+ Stats,
+ OrderFilter,
+ FilterKind,
+ OrderField,
+ OrderSort,
+ SortDirection,
+ OrderEventEndState,
+ RejectedOrderCode,
+} from './types';
+export { SignedOrder } from '@0x/types';
+export { ApolloQueryResult, QueryOptions } from '@apollo/client/core';
+export { Observable };
+
+const defaultOrderQueryLimit = 100;
+
+const statsQuery = gql`
+ query Stats {
+ stats {
+ version
+ pubSubTopic
+ rendezvous
+ peerID
+ ethereumChainID
+ latestBlock {
+ number
+ hash
+ }
+ numPeers
+ numOrders
+ numOrdersIncludingRemoved
+ startOfCurrentUTCDay
+ ethRPCRequestsSentInCurrentUTCDay
+ ethRPCRateLimitExpiredRequests
+ maxExpirationTime
+ }
+ }
+`;
+
+const addOrdersMutation = gql`
+ mutation AddOrders($orders: [NewOrder!]!, $pinned: Boolean = true) {
+ addOrders(orders: $orders, pinned: $pinned) {
+ accepted {
+ order {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ isNew
+ }
+ rejected {
+ hash
+ code
+ message
+ order {
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ }
+ }
+ }
+ }
+`;
+
+const orderQuery = gql`
+ query Order($hash: Hash!) {
+ order(hash: $hash) {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ }
+`;
+
+const ordersQuery = gql`
+ query Orders(
+ $filters: [OrderFilter!] = []
+ $sort: [OrderSort!] = [{ field: hash, direction: ASC }]
+ $limit: Int = 100
+ ) {
+ orders(filters: $filters, sort: $sort, limit: $limit) {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ }
+`;
+
+const orderEventsSubscription = gql`
+ subscription {
+ orderEvents {
+ timestamp
+ endState
+ order {
+ hash
+ chainId
+ exchangeAddress
+ makerAddress
+ makerAssetData
+ makerAssetAmount
+ makerFeeAssetData
+ makerFee
+ takerAddress
+ takerAssetData
+ takerAssetAmount
+ takerFeeAssetData
+ takerFee
+ senderAddress
+ feeRecipientAddress
+ expirationTimeSeconds
+ salt
+ signature
+ fillableTakerAssetAmount
+ }
+ contractEvents {
+ blockHash
+ txHash
+ txIndex
+ logIndex
+ isRemoved
+ address
+ kind
+ parameters
+ }
+ }
+ }
+`;
+
+export class MeshGraphQLClient {
+ private readonly _subscriptionClient: SubscriptionClient;
+ private readonly _client: ApolloClient;
+ constructor(httpUrl: string, webSocketUrl: string) {
+ // Set up an apollo client with WebSocket and HTTP links. This allows
+ // us to use the appropriate transport based on the type of the query.
+ const httpLink = new HttpLink({
+ uri: httpUrl,
+ });
+ const wsSubClient = new SubscriptionClient(
+ webSocketUrl,
+ {
+ reconnect: false,
+ },
+ // Use ws in Node.js and native WebSocket in browsers.
+ (process as any).browser ? undefined : ws,
+ );
+ const wsLink = new WebSocketLink(wsSubClient);
+ const splitLink = split(
+ ({ query }) => {
+ const definition = getMainDefinition(query);
+ return definition.kind === 'OperationDefinition' && definition.operation === 'subscription';
+ },
+ wsLink,
+ httpLink,
+ );
+ const errorLink = onError(({ graphQLErrors, networkError }) => {
+ if (graphQLErrors != null && graphQLErrors.length > 0) {
+ const allMessages = graphQLErrors.map(err => err.message).join('\n');
+ throw new Error(`GraphQL error(s): ${allMessages}`);
+ }
+ if (networkError != null) {
+ throw new Error(`Network error: ${networkError.message}`);
+ }
+ });
+ const link = from([errorLink, splitLink]);
+ this._subscriptionClient = wsSubClient;
+ this._client = new ApolloClient({
+ cache: new InMemoryCache({
+ // This custom merge function is required for our orderEvents subscription.
+ // See https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function
+ typePolicies: {
+ Subscription: {
+ fields: {
+ orderEvents: {
+ merge(existing: OrderEvent[] = [], incoming: OrderEvent[]): OrderEvent[] {
+ return [...existing, ...incoming];
+ },
+ },
+ },
+ },
+ },
+ // Stop apollo client from injecting `__typename` fields. These extra fields mess up our tests.
+ addTypename: false,
+ }),
+ link,
+ });
+ }
+
+ public async getStatsAsync(): Promise {
+ const resp: ApolloQueryResult = await this._client.query({
+ query: statsQuery,
+ });
+ if (resp.data === undefined) {
+ throw new Error('received no data');
+ }
+ const stats = resp.data.stats;
+ return fromStringifiedStats(stats);
+ }
+
+ public async addOrdersAsync(orders: SignedOrder[], pinned: boolean = true): Promise {
+ const resp: FetchResult = await this._client.mutate({
+ mutation: addOrdersMutation,
+ variables: {
+ orders: orders.map(toStringifiedSignedOrder),
+ pinned,
+ },
+ });
+ if (resp.data == null) {
+ throw new Error('received no data');
+ }
+ const results = resp.data.addOrders;
+ return fromStringifiedAddOrdersResults(results);
+ }
+
+ public async getOrderAsync(hash: string): Promise {
+ const resp: ApolloQueryResult = await this._client.query({
+ query: orderQuery,
+ variables: {
+ hash,
+ },
+ });
+ if (resp.data == null) {
+ throw new Error('received no data');
+ }
+ if (resp.data.order == null) {
+ return null;
+ }
+ return fromStringifiedOrderWithMetadata(resp.data.order);
+ }
+
+ public async getOrdersAsync(
+ query: OrderQuery = { sort: [], filters: [], limit: defaultOrderQueryLimit },
+ ): Promise {
+ const resp: ApolloQueryResult = await this._client.query({
+ query: ordersQuery,
+ variables: {
+ sort: query.sort || [],
+ filters: query.filters?.map(convertFilterValue) || [],
+ limit: query.limit || defaultOrderQueryLimit,
+ },
+ });
+ if (resp.data == null) {
+ throw new Error('received no data');
+ }
+ return resp.data.orders.map(fromStringifiedOrderWithMetadata);
+ }
+
+ public onOrderEvents(): Observable {
+ // We handle incomingObservable and return a new outgoingObservable. This
+ // can be thought of as "wrapping" the observable and we do it for two reasons:
+ //
+ // 1. Convert FetchResult to OrderEvent[]
+ // 2. Handle errors and disconnects from the underlying websocket transport. If we don't
+ // do this, Apollo Client just ignores them completely and acts like everything is fine :(
+ //
+ const incomingObservable = this._client.subscribe({
+ query: orderEventsSubscription,
+ }) as Observable>;
+ const outgoingObservable = new Observable(observer => {
+ this._subscriptionClient.onError((err: ErrorEvent) => {
+ observer.error(new Error(err.message));
+ });
+ this._subscriptionClient.onDisconnected((event: Event) => {
+ observer.error(new Error('WebSocket connection lost'));
+ });
+ incomingObservable.subscribe({
+ next: (result: FetchResult) => {
+ if (result.errors != null && result.errors.length > 0) {
+ result.errors.forEach(err => observer.error(err));
+ } else if (result.data == null) {
+ observer.error(new Error('received no data'));
+ } else {
+ observer.next(result.data.orderEvents.map(fromStringifiedOrderEvent));
+ }
+ },
+ error: err => observer.error(err),
+ complete: () => observer.complete(),
+ });
+ });
+ return outgoingObservable;
+ }
+
+ public async rawQueryAsync(
+ options: QueryOptions,
+ ): Promise> {
+ return this._client.query(options);
+ }
+}
diff --git a/packages/mesh-graphql-client/src/types.ts b/packages/mesh-graphql-client/src/types.ts
new file mode 100644
index 000000000..a1b7bf586
--- /dev/null
+++ b/packages/mesh-graphql-client/src/types.ts
@@ -0,0 +1,398 @@
+import { SignedOrder } from '@0x/types';
+import { BigNumber } from '@0x/utils';
+
+export interface StatsResponse {
+ stats: StringifiedStats;
+}
+
+export interface AddOrdersResponse {
+ addOrders: StringifiedAddOrdersResults;
+}
+
+export interface OrderResponse {
+ order: StringifiedOrderWithMetadata | null;
+}
+
+export interface OrdersResponse {
+ orders: StringifiedOrderWithMetadata[];
+}
+
+export interface OrderEventResponse {
+ orderEvents: StringifiedOrderEvent[];
+}
+
+export interface Stats {
+ version: string;
+ pubSubTopic: string;
+ rendezvous: string;
+ secondaryRendezvous: string[];
+ peerID: string;
+ ethereumChainID: number;
+ latestBlock: LatestBlock;
+ numPeers: number;
+ numOrders: number;
+ numOrdersIncludingRemoved: number;
+ numPinnedOrders: number;
+ maxExpirationTime: BigNumber;
+ startOfCurrentUTCDay: Date;
+ ethRPCRequestsSentInCurrentUTCDay: number;
+ ethRPCRateLimitExpiredRequests: number;
+}
+
+export interface LatestBlock {
+ number: BigNumber;
+ hash: string;
+}
+
+export interface OrderWithMetadata extends SignedOrder {
+ hash: string;
+ fillableTakerAssetAmount: BigNumber;
+}
+
+export interface AddOrdersResults {
+ // The set of orders that were accepted. Accepted orders will be watched and order events will be emitted if
+ // their status changes.
+ accepted: AcceptedOrderResult[];
+ // The set of orders that were rejected, including the reason they were rejected. Rejected orders will not be
+ // watched.
+ rejected: RejectedOrderResult[];
+}
+
+export interface AcceptedOrderResult {
+ // The order that was accepted, including metadata.
+ order: OrderWithMetadata;
+ // Whether or not the order is new. Set to true if this is the first time this Mesh node has accepted the order
+ // and false otherwise.
+ isNew: boolean;
+}
+
+export interface RejectedOrderResult {
+ // The hash of the order. May be null if the hash could not be computed.
+ hash?: string;
+ // The order that was rejected.
+ order: SignedOrder;
+ // A machine-readable code indicating why the order was rejected. This code is designed to
+ // be used by programs and applications and will never change without breaking backwards-compatibility.
+ code: RejectedOrderCode;
+ // A human-readable message indicating why the order was rejected. This message may change
+ // in future releases and is not covered by backwards-compatibility guarantees.
+ message: string;
+}
+
+export enum RejectedOrderCode {
+ EthRpcRequestFailed = 'ETH_RPC_REQUEST_FAILED',
+ OrderHasInvalidMakerAssetAmount = 'ORDER_HAS_INVALID_MAKER_ASSET_AMOUNT',
+ OrderHasInvalidTakerAssetAmount = 'ORDER_HAS_INVALID_TAKER_ASSET_AMOUNT',
+ OrderExpired = 'ORDER_EXPIRED',
+ OrderFullyFilled = 'ORDER_FULLY_FILLED',
+ OrderCancelled = 'ORDER_CANCELLED',
+ OrderUnfunded = 'ORDER_UNFUNDED',
+ OrderHasInvalidMakerAssetData = 'ORDER_HAS_INVALID_MAKER_ASSET_DATA',
+ OrderHasInvalidMakerFeeAssetData = 'ORDER_HAS_INVALID_MAKER_FEE_ASSET_DATA',
+ OrderHasInvalidTakerAssetData = 'ORDER_HAS_INVALID_TAKER_ASSET_DATA',
+ OrderHasInvalidTakerFeeAssetData = 'ORDER_HAS_INVALID_TAKER_FEE_ASSET_DATA',
+ OrderHasInvalidSignature = 'ORDER_HAS_INVALID_SIGNATURE',
+ OrderMaxExpirationExceeded = 'ORDER_MAX_EXPIRATION_EXCEEDED',
+ InternalError = 'INTERNAL_ERROR',
+ MaxOrderSizeExceeded = 'MAX_ORDER_SIZE_EXCEEDED',
+ OrderAlreadyStoredAndUnfillable = 'ORDER_ALREADY_STORED_AND_UNFILLABLE',
+ OrderForIncorrectChain = 'ORDER_FOR_INCORRECT_CHAIN',
+ IncorrectExchangeAddress = 'INCORRECT_EXCHANGE_ADDRESS',
+ SenderAddressNotAllowed = 'SENDER_ADDRESS_NOT_ALLOWED',
+ DatabaseFullOfOrders = 'DATABASE_FULL_OF_ORDERS',
+}
+
+export interface OrderEvent {
+ timestampMs: number;
+ order: OrderWithMetadata;
+ endState: OrderEventEndState;
+ contractEvents: ContractEvent[];
+}
+
+export interface ContractEvent {
+ blockHash: string;
+ txHash: string;
+ txIndex: number;
+ logIndex: number;
+ isRemoved: boolean;
+ address: string;
+ kind: ContractEventKind;
+ // TODO(albrow): Use a union type for parameters?
+ parameters: any;
+}
+
+export enum ContractEventKind {
+ ERC20TransferEvent = 'ERC20TransferEvent',
+ ERC20ApprovalEvent = 'ERC20ApprovalEvent',
+ ERC721TransferEvent = 'ERC721TransferEvent',
+ ERC721ApprovalEvent = 'ERC721ApprovalEvent',
+ ERC721ApprovalForAllEvent = 'ERC721ApprovalForAllEvent',
+ ERC1155ApprovalForAllEvent = 'ERC1155ApprovalForAllEvent',
+ ERC1155TransferSingleEvent = 'ERC1155TransferSingleEvent',
+ ERC1155TransferBatchEvent = 'ERC1155TransferBatchEvent',
+ ExchangeFillEvent = 'ExchangeFillEvent',
+ ExchangeCancelEvent = 'ExchangeCancelEvent',
+ ExchangeCancelUpToEvent = 'ExchangeCancelUpToEvent',
+ WethDepositEvent = 'WethDepositEvent',
+ WethWithdrawalEvent = 'WethWithdrawalEvent',
+}
+
+export enum OrderEventEndState {
+ // The order was successfully validated and added to the Mesh node. The order is now being watched and any changes to
+ // the fillability will result in subsequent order events.
+ Added = 'ADDED',
+ // The order was filled for a partial amount. The order is still fillable up to the fillableTakerAssetAmount.
+ Filled = 'FILLED',
+ // The order was fully filled and its remaining fillableTakerAssetAmount is 0. The order is no longer fillable.
+ FullyFilled = 'FULLY_FILLED',
+ // The order was cancelled and is no longer fillable.
+ Cancelled = 'CANCELLED',
+ // The order expired and is no longer fillable.
+ Expired = 'EXPIRED',
+ // The order was previously expired, but due to a block re-org it is no longer considered expired (should be rare).
+ Unexpired = 'UNEXPIRED',
+ // The order has become unfunded and is no longer fillable. This can happen if the maker makes a transfer or changes their allowance.
+ Unfunded = 'UNFUNDED',
+ // The fillability of the order has increased. This can happen if a previously processed fill event gets reverted due to a block re-org,
+ // or if a maker makes a transfer or changes their allowance.
+ FillabilityIncreased = 'FILLABILITY_INCREASED',
+ // The order is potentially still valid but was removed for a different reason (e.g.
+ // the database is full or the peer that sent the order was misbehaving). The order will no longer be watched
+ // and no further events for this order will be emitted. In some cases, the order may be re-added in the
+ // future.
+ StoppedWatching = 'STOPPED_WATCHING',
+}
+
+export type OrderField = Extract;
+
+export enum SortDirection {
+ Asc = 'ASC',
+ Desc = 'DESC',
+}
+
+export enum FilterKind {
+ Equal = 'EQUAL',
+ NotEqual = 'NOT_EQUAL',
+ Greater = 'GREATER',
+ GreaterOrEqual = 'GREATER_OR_EQUAL',
+ Less = 'LESS',
+ LessOrEqual = 'LESS_OR_EQUAL',
+}
+
+export interface OrderSort {
+ field: OrderField;
+ direction: SortDirection;
+}
+
+export interface OrderFilter {
+ field: OrderField;
+ kind: FilterKind;
+ value: OrderWithMetadata[OrderField];
+}
+
+export interface OrderQuery {
+ filters?: OrderFilter[];
+ sort?: OrderSort[];
+ limit?: number;
+}
+
+export interface StringifiedLatestBlock {
+ number: string;
+ hash: string;
+}
+
+export interface StringifiedStats {
+ version: string;
+ pubSubTopic: string;
+ rendezvous: string;
+ secondaryRendezvous: string[];
+ peerID: string;
+ ethereumChainID: number;
+ latestBlock: StringifiedLatestBlock;
+ numPeers: number;
+ numOrders: number;
+ numOrdersIncludingRemoved: number;
+ numPinnedOrders: number;
+ maxExpirationTime: string;
+ startOfCurrentUTCDay: string;
+ ethRPCRequestsSentInCurrentUTCDay: number;
+ ethRPCRateLimitExpiredRequests: number;
+}
+
+export interface StringifiedSignedOrder {
+ chainId: string;
+ exchangeAddress: string;
+ makerAddress: string;
+ takerAddress: string;
+ feeRecipientAddress: string;
+ senderAddress: string;
+ makerAssetAmount: string;
+ takerAssetAmount: string;
+ makerFee: string;
+ takerFee: string;
+ expirationTimeSeconds: string;
+ salt: string;
+ makerAssetData: string;
+ takerAssetData: string;
+ makerFeeAssetData: string;
+ takerFeeAssetData: string;
+ signature: string;
+}
+
+export interface StringifiedOrderWithMetadata extends StringifiedSignedOrder {
+ hash: string;
+ fillableTakerAssetAmount: string;
+}
+
+export interface StringifiedAddOrdersResults {
+ accepted: StringifiedAcceptedOrderResult[];
+ rejected: StringifiedRejectedOrderResult[];
+}
+
+export interface StringifiedAcceptedOrderResult {
+ order: StringifiedOrderWithMetadata;
+ isNew: boolean;
+}
+
+export interface StringifiedRejectedOrderResult {
+ hash?: string;
+ order: StringifiedSignedOrder;
+ code: RejectedOrderCode;
+ message: string;
+}
+
+export interface StringifiedOrderEvent {
+ timestamp: string;
+ order: StringifiedOrderWithMetadata;
+ endState: OrderEventEndState;
+ fillableTakerAssetAmount: BigNumber;
+ contractEvents: ContractEvent[];
+}
+
+/**
+ * Converts StringifiedStats to Stats
+ */
+export function fromStringifiedStats(stats: StringifiedStats): Stats {
+ return {
+ ...stats,
+ latestBlock: fromStringifiedLatestBlock(stats.latestBlock),
+ maxExpirationTime: new BigNumber(stats.maxExpirationTime),
+ startOfCurrentUTCDay: new Date(stats.startOfCurrentUTCDay),
+ };
+}
+
+/**
+ * Converts StringifiedLatestBlock to LatestBlock
+ */
+export function fromStringifiedLatestBlock(latestBlock: StringifiedLatestBlock): LatestBlock {
+ return {
+ ...latestBlock,
+ number: new BigNumber(latestBlock.number),
+ };
+}
+
+/**
+ * Converts SignedOrder to StringifiedSignedOrder
+ */
+export function toStringifiedSignedOrder(order: SignedOrder): StringifiedSignedOrder {
+ return {
+ ...order,
+ chainId: order.chainId.toString(),
+ makerAssetAmount: order.makerAssetAmount.toString(),
+ takerAssetAmount: order.takerAssetAmount.toString(),
+ makerFee: order.makerFee.toString(),
+ takerFee: order.takerFee.toString(),
+ expirationTimeSeconds: order.expirationTimeSeconds.toString(),
+ salt: order.salt.toString(),
+ };
+}
+
+/**
+ * Converts StringifiedOrderWithMetadata to OrderWithMetadata
+ */
+export function fromStringifiedOrderWithMetadata(order: StringifiedOrderWithMetadata): OrderWithMetadata {
+ return {
+ ...order,
+ // tslint:disable-next-line: custom-no-magic-numbers
+ chainId: Number.parseInt(order.chainId, 10),
+ makerAssetAmount: new BigNumber(order.makerAssetAmount),
+ takerAssetAmount: new BigNumber(order.takerAssetAmount),
+ makerFee: new BigNumber(order.makerFee),
+ takerFee: new BigNumber(order.takerFee),
+ expirationTimeSeconds: new BigNumber(order.expirationTimeSeconds),
+ salt: new BigNumber(order.salt),
+ fillableTakerAssetAmount: new BigNumber(order.fillableTakerAssetAmount),
+ };
+}
+
+/**
+ * Converts StringifiedSignedOrder to SignedOrder
+ */
+export function fromStringifiedSignedOrder(order: StringifiedSignedOrder): SignedOrder {
+ return {
+ ...order,
+ // tslint:disable-next-line: custom-no-magic-numbers
+ chainId: Number.parseInt(order.chainId, 10),
+ makerAssetAmount: new BigNumber(order.makerAssetAmount),
+ takerAssetAmount: new BigNumber(order.takerAssetAmount),
+ makerFee: new BigNumber(order.makerFee),
+ takerFee: new BigNumber(order.takerFee),
+ expirationTimeSeconds: new BigNumber(order.expirationTimeSeconds),
+ salt: new BigNumber(order.salt),
+ };
+}
+
+/**
+ * Converts StringifiedAddOrdersResults to AddOrdersResults
+ */
+export function fromStringifiedAddOrdersResults(results: StringifiedAddOrdersResults): AddOrdersResults {
+ return {
+ accepted: results.accepted.map(fromStringifiedAcceptedOrderResult),
+ rejected: results.rejected.map(fromStringifiedRejectedOrderResult),
+ };
+}
+
+/**
+ * Converts StringifiedAcceptedOrderResult to AcceptedOrderResult
+ */
+export function fromStringifiedAcceptedOrderResult(
+ acceptedResult: StringifiedAcceptedOrderResult,
+): AcceptedOrderResult {
+ return {
+ ...acceptedResult,
+ order: fromStringifiedOrderWithMetadata(acceptedResult.order),
+ };
+}
+
+/**
+ * Converts StringifiedRejectedOrderResult to RejectedOrderResult
+ */
+export function fromStringifiedRejectedOrderResult(
+ rejectedResult: StringifiedRejectedOrderResult,
+): RejectedOrderResult {
+ return {
+ ...rejectedResult,
+ order: fromStringifiedSignedOrder(rejectedResult.order),
+ };
+}
+
+/**
+ * Converts StringifiedOrderEvent to OrderEvent
+ */
+export function fromStringifiedOrderEvent(event: StringifiedOrderEvent): OrderEvent {
+ return {
+ ...event,
+ timestampMs: new Date(event.timestamp).getUTCMilliseconds(),
+ order: fromStringifiedOrderWithMetadata(event.order),
+ };
+}
+
+/**
+ * Converts filter.value the the appropriate JSON/GraphQL type (e.g. BigNumber gets converted to string).
+ */
+export function convertFilterValue(filter: OrderFilter): OrderFilter {
+ return {
+ ...filter,
+ value: BigNumber.isBigNumber(filter.value) ? filter.value.toString() : filter.value,
+ };
+}
diff --git a/packages/mesh-graphql-client/test/graphql_client_test.ts b/packages/mesh-graphql-client/test/graphql_client_test.ts
new file mode 100644
index 000000000..d5cfcc188
--- /dev/null
+++ b/packages/mesh-graphql-client/test/graphql_client_test.ts
@@ -0,0 +1,442 @@
+import { getContractAddressesForChainOrThrow } from '@0x/contract-addresses';
+import { DummyERC20TokenContract } from '@0x/contracts-erc20';
+import { ExchangeContract } from '@0x/contracts-exchange';
+import { blockchainTests, constants, expect, OrderFactory, orderHashUtils } from '@0x/contracts-test-utils';
+import { BlockchainLifecycle, Web3Config, web3Factory } from '@0x/dev-utils';
+import { assetDataUtils } from '@0x/order-utils';
+import { Web3ProviderEngine } from '@0x/subproviders';
+import { DoneCallback, SignedOrder } from '@0x/types';
+import { BigNumber, hexUtils } from '@0x/utils';
+import { Web3Wrapper } from '@0x/web3-wrapper';
+import { gql } from '@apollo/client';
+import 'mocha';
+
+import {
+ FilterKind,
+ OrderEvent,
+ OrderEventEndState,
+ OrderWithMetadata,
+ RejectedOrderCode,
+ SortDirection,
+} from '../src/index';
+
+import { MeshDeployment, startServerAndClientAsync } from './utils/graphql_server';
+
+blockchainTests.resets('GraphQLClient', env => {
+ describe('integration tests', () => {
+ let deployment: MeshDeployment;
+ let exchange: ExchangeContract;
+ let exchangeAddress: string;
+ let makerAddress: string;
+ let orderFactory: OrderFactory;
+ let provider: Web3ProviderEngine;
+
+ beforeEach(async () => {
+ deployment = await startServerAndClientAsync();
+ });
+
+ afterEach(async () => {
+ deployment.mesh.stopMesh();
+ });
+
+ before(async () => {
+ const chainId = await env.getChainIdAsync();
+ const accounts = await env.getAccountAddressesAsync();
+ [makerAddress] = accounts;
+
+ // Create a new provider so that the ganache instance running on port
+ // 8545 will be used instead of the in-process ganache instance.
+ const providerConfigs: Web3Config = {
+ total_accounts: constants.NUM_TEST_ACCOUNTS,
+ shouldUseInProcessGanache: false,
+ shouldAllowUnlimitedContractSize: true,
+ unlocked_accounts: [makerAddress],
+ };
+ provider = web3Factory.getRpcProvider(providerConfigs);
+
+ // HACK(jalextowle): We can't currently specify an out of process provider for a blockchainTests
+ // suite, so we need to update env.blockchainLifecycle so that the resets suite works as expected.
+ env.blockchainLifecycle = new BlockchainLifecycle(new Web3Wrapper(provider));
+
+ exchangeAddress = getContractAddressesForChainOrThrow(chainId).exchange;
+ exchange = new ExchangeContract(exchangeAddress, provider);
+ const erc20ProxyAddress = getContractAddressesForChainOrThrow(chainId).erc20Proxy;
+
+ // Configure two tokens and an order factory with a maker address so
+ // that valid orders can be created easily in the tests. The two dummy tokens are
+ // used in the makerToken and feeToken fields.
+ const makerToken = new DummyERC20TokenContract('0x34d402f14d58e001d8efbe6585051bf9706aa064', provider);
+ const feeToken = new DummyERC20TokenContract('0xcdb594a32b1cc3479d8746279712c39d18a07fc0', provider);
+ const mintAmount = new BigNumber('100e18');
+ // tslint:disable-next-line: await-promise
+ await makerToken.mint(mintAmount).awaitTransactionSuccessAsync({ from: makerAddress });
+ // tslint:disable-next-line: await-promise
+ await feeToken.mint(mintAmount).awaitTransactionSuccessAsync({ from: makerAddress });
+ // tslint:disable-next-line: await-promise
+ await makerToken
+ .approve(erc20ProxyAddress, new BigNumber('100e18'))
+ .awaitTransactionSuccessAsync({ from: makerAddress });
+ // tslint:disable-next-line: await-promise
+ await feeToken
+ .approve(erc20ProxyAddress, new BigNumber('100e18'))
+ .awaitTransactionSuccessAsync({ from: makerAddress });
+ orderFactory = new OrderFactory(constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)], {
+ ...constants.STATIC_ORDER_PARAMS,
+ feeRecipientAddress: constants.NULL_ADDRESS,
+ makerAddress,
+ exchangeAddress,
+ chainId: 1337,
+ makerAssetData: assetDataUtils.encodeERC20AssetData(makerToken.address),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(makerToken.address),
+ makerFeeAssetData: assetDataUtils.encodeERC20AssetData(feeToken.address),
+ takerFeeAssetData: assetDataUtils.encodeERC20AssetData(feeToken.address),
+ });
+ });
+
+ describe('#addOrdersAsync', async () => {
+ it('accepts valid order', async () => {
+ const order = await orderFactory.newSignedOrderAsync({});
+ const validationResults = await deployment.client.addOrdersAsync([order]);
+ expect(validationResults).to.be.deep.eq({
+ accepted: [
+ {
+ isNew: true,
+ order: {
+ ...order,
+ hash: orderHashUtils.getOrderHashHex(order),
+ fillableTakerAssetAmount: order.takerAssetAmount,
+ },
+ },
+ ],
+ rejected: [],
+ });
+ });
+
+ it('rejects order with invalid signature', async () => {
+ const invalidOrder = {
+ ...(await orderFactory.newSignedOrderAsync({})),
+ signature: hexUtils.hash('0x0'),
+ };
+ const validationResults = await deployment.client.addOrdersAsync([invalidOrder]);
+ expect(validationResults).to.be.deep.eq({
+ accepted: [],
+ rejected: [
+ {
+ hash: orderHashUtils.getOrderHashHex(invalidOrder),
+ order: invalidOrder,
+ code: RejectedOrderCode.OrderHasInvalidSignature,
+ message: 'order signature must be valid',
+ },
+ ],
+ });
+ });
+ });
+
+ describe('#getStatsAsync', () => {
+ it('Ensure that the stats are correct when no orders have been added', async () => {
+ const stats = await deployment.client.getStatsAsync();
+
+ // NOTE(jalextowle): Ensure that the latest block of the returned
+ // stats is valid and then clear the field since we don't know
+ // the block number of the stats in this test a priori.
+ expect(stats.latestBlock).to.not.be.undefined();
+ expect(stats.latestBlock.number).to.be.bignumber.greaterThan(0);
+ stats.latestBlock = {
+ number: new BigNumber(0),
+ hash: '',
+ };
+
+ const now = new Date(Date.now());
+ const expectedStartOfCurrentUTCDay = `${now.getUTCFullYear()}-${leftPad(
+ now.getUTCMonth() + 1,
+ )}-${leftPad(now.getUTCDate())}T00:00:00Z`;
+ const expectedStats = {
+ version: 'development',
+ pubSubTopic: '/0x-orders/version/3/chain/1337/schema/e30=',
+ rendezvous: '/0x-mesh/network/1337/version/2',
+ peerID: deployment.peerID,
+ ethereumChainID: 1337,
+ latestBlock: {
+ number: new BigNumber(0),
+ hash: '',
+ },
+ numPeers: 0,
+ numOrders: 0,
+ numOrdersIncludingRemoved: 0,
+ maxExpirationTime: constants.MAX_UINT256,
+ startOfCurrentUTCDay: new Date(expectedStartOfCurrentUTCDay),
+ ethRPCRequestsSentInCurrentUTCDay: 0,
+ ethRPCRateLimitExpiredRequests: 0,
+ };
+ expect(stats).to.be.deep.eq(expectedStats);
+ });
+ });
+
+ describe('#getOrderAsync', async () => {
+ it('gets an order by its hash', async () => {
+ const order = await orderFactory.newSignedOrderAsync({});
+ const validationResults = await deployment.client.addOrdersAsync([order]);
+ expect(validationResults.accepted.length).to.be.eq(1);
+
+ const orderHash = orderHashUtils.getOrderHashHex(order);
+ const foundOrder = await deployment.client.getOrderAsync(orderHash);
+ const expectedOrder = {
+ ...order,
+ hash: orderHash,
+ fillableTakerAssetAmount: order.takerAssetAmount,
+ };
+ expect(foundOrder).to.be.deep.eq(expectedOrder);
+ });
+ it('returns null when the order does not exist', async () => {
+ const nonExistentOrderHash = '0xabcd46910c6a8a4730878e6e8a4abb328844c0b58f0cdfbb5b6ad28ee0bae347';
+ const foundOrder = await deployment.client.getOrderAsync(nonExistentOrderHash);
+ expect(foundOrder).to.be.null();
+ });
+ });
+
+ describe('#getOrdersAsync', async () => {
+ it('returns all orders when no options are provided', async () => {
+ const ordersLength = 10;
+ const orders = [];
+ for (let i = 0; i < ordersLength; i++) {
+ orders[i] = await orderFactory.newSignedOrderAsync({});
+ }
+ const validationResults = await deployment.client.addOrdersAsync(orders);
+ expect(validationResults.accepted.length).to.be.eq(ordersLength);
+
+ // Verify that all of the orders that were added to the mesh node
+ // were returned in the response.
+ const gotOrders = await deployment.client.getOrdersAsync();
+ const expectedOrders = orders.map(order => ({
+ ...order,
+ hash: orderHashUtils.getOrderHashHex(order),
+ fillableTakerAssetAmount: order.takerAssetAmount,
+ }));
+ expectContainsOrders(gotOrders, expectedOrders);
+ });
+ it('returns orders that match a given query', async () => {
+ const ordersLength = 10;
+ const orders = [];
+ // Create some orders with makerAssetAmount = 1, 2, 3, etc.
+ for (let i = 0; i < ordersLength; i++) {
+ orders[i] = await orderFactory.newSignedOrderAsync({
+ makerAssetAmount: new BigNumber(i + 1),
+ });
+ }
+ const validationResults = await deployment.client.addOrdersAsync(orders);
+ expect(validationResults.accepted.length).to.be.eq(ordersLength);
+
+ // Verify that all of the orders that were added to the mesh node
+ // were returned in the response.
+ const gotOrders = await deployment.client.getOrdersAsync({
+ filters: [{ field: 'makerAssetAmount', kind: FilterKind.LessOrEqual, value: new BigNumber(7) }],
+ sort: [{ field: 'makerAssetAmount', direction: SortDirection.Desc }],
+ limit: 5,
+ });
+ // We expect 5 orders sorted in descending order by makerAssetAmount starting at 7.
+ // I.e. orders with makerAmounts of 7, 6, 5, 4, and 3.
+ const expectedOrders = orders.map(order => ({
+ ...order,
+ hash: orderHashUtils.getOrderHashHex(order),
+ fillableTakerAssetAmount: order.takerAssetAmount,
+ }));
+ const sortedExpectedOrders = sortOrdersByMakerAssetAmount(expectedOrders).reverse();
+ // tslint:disable-next-line: custom-no-magic-numbers
+ expect(gotOrders).to.be.deep.eq(sortedExpectedOrders.slice(3, 8));
+ });
+ });
+
+ describe('#rawQueryAsync', async () => {
+ it('runs a raw query and returns raw results', async () => {
+ const response = await deployment.client.rawQueryAsync({
+ query: gql`
+ {
+ stats {
+ numOrders
+ }
+ }
+ `,
+ });
+ const expectedResponse = {
+ data: {
+ stats: {
+ numOrders: 0,
+ },
+ },
+ loading: false,
+ networkStatus: 7,
+ };
+ expect(response).to.be.deep.eq(expectedResponse);
+ });
+ });
+
+ describe('#subscribeToOrdersAsync', async () => {
+ it('should receive subscription updates about added orders', (done: DoneCallback) => {
+ (async () => {
+ // Keep track of whether or not the test is complete. Used to determine
+ // whether WebSocket errors should be considered test failures.
+ let isDone = false;
+ // Create orders to add to the mesh node.
+ const ordersLength = 10;
+ const orders = [] as SignedOrder[];
+ for (let i = 0; i < ordersLength; i++) {
+ orders[i] = await orderFactory.newSignedOrderAsync({});
+ }
+
+ // Subscribe to orders and wait for order events.
+ const orderEvents = deployment.client.onOrderEvents();
+ orderEvents.subscribe({
+ error: err => {
+ if (isDone && err.message === 'WebSocket connection lost') {
+ // This error is expected to happen after the server is shut down.
+ } else {
+ // Other errors are not expected.
+ throw err;
+ }
+ },
+ next: (events: OrderEvent[]) => {
+ expect(events.length).to.be.eq(orders.length);
+ for (const orderEvent of events) {
+ expect(orderEvent.endState).to.be.eq(OrderEventEndState.Added);
+ const now = new Date().getUTCMilliseconds();
+ // tslint:disable-next-line:custom-no-magic-numbers
+ assertRoughlyEquals(now, orderEvent.timestampMs, secondsToMs(10));
+ }
+
+ // Ensure that all of the orders that were added had an associated order event emitted.
+ for (const order of orders) {
+ const orderHash = orderHashUtils.getOrderHashHex(order);
+ let hasSeenMatch = false;
+ for (const event of events) {
+ if (orderHash === event.order.hash) {
+ hasSeenMatch = true;
+ const expectedOrder = {
+ ...order,
+ hash: orderHash,
+ fillableTakerAssetAmount: order.takerAssetAmount,
+ };
+ expect(event.order).to.be.deep.eq(expectedOrder);
+ break;
+ }
+ }
+ expect(hasSeenMatch).to.be.true();
+ }
+ isDone = true;
+ done();
+ },
+ });
+ const validationResults = await deployment.client.addOrdersAsync(orders);
+ expect(validationResults.accepted.length).to.be.eq(ordersLength);
+ })().catch(done);
+ });
+
+ it('should receive subscription updates about cancelled orders', (done: DoneCallback) => {
+ (async () => {
+ // Keep track of whether or not the test is complete. Used to determine
+ // whether WebSocket errors should be considered test failures.
+ let isDone = false;
+ // Add an order and then cancel it.
+ const order = await orderFactory.newSignedOrderAsync({});
+ const validationResults = await deployment.client.addOrdersAsync([order]);
+ expect(validationResults.accepted.length).to.be.eq(1);
+
+ // Subscribe to order events and assert that only a single cancel event was received.
+ const orderEvents = deployment.client.onOrderEvents();
+ orderEvents.subscribe({
+ error: err => {
+ if (isDone && err.message === 'WebSocket connection lost') {
+ // This error is expected to happen after the server is shut down.
+ } else {
+ // Other errors are not expected.
+ throw err;
+ }
+ },
+ next: (events: OrderEvent[]) => {
+ // Ensure that the correct cancel event was logged.
+ expect(events.length).to.be.eq(1);
+ const [orderEvent] = events;
+ expect(orderEvent.endState).to.be.eq(OrderEventEndState.Cancelled);
+ const expectedOrder = {
+ ...order,
+ hash: orderHashUtils.getOrderHashHex(order),
+ fillableTakerAssetAmount: constants.ZERO_AMOUNT,
+ };
+ expect(orderEvent.order).to.be.deep.eq(expectedOrder);
+ const now = new Date().getUTCMilliseconds();
+ assertRoughlyEquals(orderEvent.timestampMs, now, secondsToMs(2));
+ expect(orderEvent.contractEvents.length).to.be.eq(1);
+
+ // Ensure that the contract event is correct.
+ const [contractEvent] = orderEvent.contractEvents;
+ expect(contractEvent.address).to.be.eq(exchangeAddress);
+ expect(contractEvent.kind).to.be.equal('ExchangeCancelEvent');
+ expect(contractEvent.logIndex).to.be.eq(0);
+ expect(contractEvent.isRemoved).to.be.false();
+ expect(contractEvent.txIndex).to.be.eq(0);
+ const hashLength = 66;
+ expect(contractEvent.blockHash.length).to.be.eq(hashLength);
+ expect(contractEvent.blockHash).to.not.be.eq(constants.NULL_BYTES32);
+ expect(contractEvent.txHash.length).to.be.eq(hashLength);
+ const parameters = contractEvent.parameters;
+ parameters.makerAddress = parameters.makerAddress.toLowerCase();
+ parameters.senderAddress = parameters.makerAddress;
+ expect(parameters.feeRecipientAddress.toLowerCase()).to.be.eq(order.feeRecipientAddress);
+ expect(parameters.makerAddress.toLowerCase()).to.be.eq(makerAddress);
+ expect(parameters.makerAssetData).to.be.eq(order.makerAssetData);
+ expect(parameters.orderHash).to.be.eq(orderHashUtils.getOrderHashHex(order));
+ expect(parameters.senderAddress.toLowerCase()).to.be.eq(makerAddress);
+ expect(parameters.takerAssetData).to.be.eq(order.takerAssetData);
+ isDone = true;
+ done();
+ },
+ });
+
+ // Cancel an order and then wait for the emitted order event.
+ // tslint:disable-next-line: await-promise
+ await exchange.cancelOrder(order).awaitTransactionSuccessAsync({ from: makerAddress });
+ })().catch(done);
+ });
+ });
+ });
+});
+
+function assertRoughlyEquals(a: number, b: number, delta: number): void {
+ expect(Math.abs(a - b)).to.be.lessThan(delta);
+}
+
+function leftPad(a: number, paddingDigits: number = 2): string {
+ return `${'0'.repeat(paddingDigits - a.toString().length)}${a.toString()}`;
+}
+
+function secondsToMs(seconds: number): number {
+ const msPerSecond = 1000;
+ return seconds * msPerSecond;
+}
+
+function sortOrdersByMakerAssetAmount(orders: OrderWithMetadata[]): OrderWithMetadata[] {
+ return orders.sort((a, b) => {
+ if (a.makerAssetAmount.gt(b.makerAssetAmount)) {
+ return 1;
+ } else if (a.makerAssetAmount.lt(b.makerAssetAmount)) {
+ return -1;
+ }
+ return 0;
+ });
+}
+
+// Verify that all of the orders that were added to the mesh node
+// were returned in the `getOrders` rpc response
+function expectContainsOrders(gotOrders: OrderWithMetadata[], expectedOrders: OrderWithMetadata[]): void {
+ for (const expectedOrder of expectedOrders) {
+ let hasSeenMatch = false;
+ for (const gotOrder of gotOrders) {
+ if (expectedOrder.hash === gotOrder.hash) {
+ hasSeenMatch = true;
+ expect(gotOrder).to.be.deep.eq(expectedOrder);
+ break;
+ }
+ }
+ expect(hasSeenMatch).to.be.true();
+ }
+}
+// tslint:disable-line:max-file-line-count
diff --git a/packages/mesh-rpc-client/test/utils/chai_setup.ts b/packages/mesh-graphql-client/test/utils/chai_setup.ts
similarity index 100%
rename from packages/mesh-rpc-client/test/utils/chai_setup.ts
rename to packages/mesh-graphql-client/test/utils/chai_setup.ts
diff --git a/packages/mesh-rpc-client/test/utils/ws_server.ts b/packages/mesh-graphql-client/test/utils/graphql_server.ts
similarity index 68%
rename from packages/mesh-rpc-client/test/utils/ws_server.ts
rename to packages/mesh-graphql-client/test/utils/graphql_server.ts
index d4c6984ac..73bebc1cc 100644
--- a/packages/mesh-rpc-client/test/utils/ws_server.ts
+++ b/packages/mesh-graphql-client/test/utils/graphql_server.ts
@@ -3,7 +3,9 @@ import * as jsonstream from 'jsonstream';
import { join } from 'path';
import * as rimraf from 'rimraf';
-import { WSClient } from '../../src';
+import { MeshGraphQLClient } from '../../src';
+
+const dataDir = '/tmp/mesh-graphql-integration-testing/data/';
async function buildBinaryAsync(): Promise {
const cwd = join(__dirname, '../../../../../').normalize();
@@ -20,7 +22,7 @@ async function buildBinaryAsync(): Promise {
async function cleanupAsync(): Promise {
await new Promise((resolve, reject) => {
- rimraf('./0x_mesh', err => {
+ rimraf(dataDir, err => {
if (err != null) {
reject(err);
}
@@ -30,14 +32,18 @@ async function cleanupAsync(): Promise {
}
export interface MeshDeployment {
- client: WSClient;
+ client: MeshGraphQLClient;
mesh: MeshHarness;
peerID: string;
}
+// The amount of time to wait after seeing the "starting GraphQL server" log message
+// before attempting to connect to the GraphQL server.
+const serverStartWaitTimeMs = 100;
+
/**
- * Start a RPC client connected to a RPC server that is ready for use.
- * @return A mesh deployment including a RPC client, mesh manager, and the
+ * Start a GraphQL client connected to a GraphQL server that is ready for use.
+ * @return A mesh deployment including a GraphQL client, mesh manager, and the
* peer ID of the mesh process that is running in the mesh manager.
*/
export async function startServerAndClientAsync(): Promise {
@@ -45,9 +51,13 @@ export async function startServerAndClientAsync(): Promise {
await buildBinaryAsync();
const mesh = new MeshHarness();
- const log = await mesh.waitForPatternAsync(/started WS RPC server/);
+ const log = await mesh.waitForPatternAsync(/starting GraphQL server/);
const peerID = JSON.parse(log.toString()).myPeerID;
- const client = new WSClient(`ws://localhost:${mesh.wsPort}`);
+ await sleepAsync(serverStartWaitTimeMs);
+ const client = new MeshGraphQLClient(
+ `http://localhost:${mesh._graphQLServerPort}/graphql`,
+ `ws://localhost:${mesh._graphQLServerPort}/graphql`,
+ );
return {
client,
mesh,
@@ -59,7 +69,7 @@ export class MeshHarness {
public static readonly DEFAULT_TIMEOUT = 1000;
protected static _serverPort = 64321;
- public readonly wsPort: number;
+ public readonly _graphQLServerPort: number;
private readonly _mesh: ChildProcessWithoutNullStreams;
private _killed = false;
@@ -75,6 +85,8 @@ export class MeshHarness {
return new Promise((resolve, reject) => {
const stream = jsonstream.parse(true);
stream.on('data', data => {
+ // Note(albrow): Uncomment this if you need to see the output from the server.
+ // console.log(data);
const dataString = JSON.stringify(data);
if (pattern.test(dataString)) {
resolve(dataString);
@@ -95,14 +107,21 @@ export class MeshHarness {
public constructor() {
const env = Object.create(process.env);
- this.wsPort = MeshHarness._serverPort++;
+ this._graphQLServerPort = MeshHarness._serverPort++;
+ env.DATA_DIR = dataDir;
env.ETHEREUM_RPC_URL = 'http://localhost:8545';
env.ETHEREUM_CHAIN_ID = '1337';
env.VERBOSITY = '5';
- env.WS_RPC_ADDR = `localhost:${this.wsPort}`;
+ env.USE_BOOTSTRAP_LIST = false;
+ env.ENABLE_GRAPHQL_SERVER = true;
+ env.GRAPHQL_SERVER_ADDR = `localhost:${this._graphQLServerPort}`;
this._mesh = spawn('mesh', [], { env });
this._mesh.stderr.on('error', error => {
throw new Error(`${error.name} - ${error.message}`);
});
}
}
+
+async function sleepAsync(ms: number): Promise {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
diff --git a/packages/mesh-rpc-client/tsconfig.json b/packages/mesh-graphql-client/tsconfig.json
similarity index 100%
rename from packages/mesh-rpc-client/tsconfig.json
rename to packages/mesh-graphql-client/tsconfig.json
diff --git a/packages/mesh-rpc-client/tslint.json b/packages/mesh-graphql-client/tslint.json
similarity index 100%
rename from packages/mesh-rpc-client/tslint.json
rename to packages/mesh-graphql-client/tslint.json
diff --git a/packages/mesh-rpc-client/.npmignore b/packages/mesh-rpc-client/.npmignore
deleted file mode 100644
index a0ad39549..000000000
--- a/packages/mesh-rpc-client/.npmignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Blacklist all files
-.*
-*
-# Whitelist lib
-!lib/**/*
-# Blacklist tests and publish scripts
-/lib/test/*
-# Package specific ignore
diff --git a/packages/mesh-rpc-client/LICENSE b/packages/mesh-rpc-client/LICENSE
deleted file mode 100644
index f6696f7bc..000000000
--- a/packages/mesh-rpc-client/LICENSE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2019 ZeroEx Intl.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/packages/mesh-rpc-client/package.json b/packages/mesh-rpc-client/package.json
deleted file mode 100644
index f647d1de0..000000000
--- a/packages/mesh-rpc-client/package.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "name": "@0x/mesh-rpc-client",
- "version": "1.0.0",
- "engines": {
- "node": ">=6.12"
- },
- "description": "A Javascript library for interacting with the Mesh JSON RPC API over WebSockets",
- "keywords": [
- "p2p",
- "mesh",
- "0xproject",
- "ethereum",
- "tokens",
- "exchange"
- ],
- "main": "lib/src/index.js",
- "types": "lib/src/index.d.ts",
- "scripts": {
- "build": "tsc -b",
- "watch:ts": "tsc -b -w",
- "clean": "shx rm -r ./lib && shx rm tsconfig.tsbuildinfo || exit 0",
- "lint": "tslint --format stylish --project .",
- "test": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --timeout 200000 --exit",
- "s3:sync": "aws s3 sync ${npm_package_config_docsPath} s3://docs-markdown/${npm_package_name}/v${npm_package_version} --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers",
- "docs:md": "ts-doc-gen --sourceDir=./src --output=${npm_package_config_docsPath}"
- },
- "config": {
- "docsPath": "../../docs/json_rpc_clients/typescript"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/0xProject/0x-mesh.git"
- },
- "author": "Fabio Berger",
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/0xProject/0x-mesh/issues"
- },
- "homepage": "https://github.com/0xProject/0x-mesh/rpc/clients/typescript/README.md",
- "devDependencies": {
- "@0x/contract-addresses": "^4.1.0",
- "@0x/contracts-erc20": "^3.1.0",
- "@0x/contracts-exchange": "^3.2.0",
- "@0x/contracts-test-utils": "^5.1.4",
- "@0x/dev-utils": "^3.2.0",
- "@0x/order-utils": "^10.0.1",
- "@0x/subproviders": "^6.0.2",
- "@0x/ts-doc-gen": "^0.0.13",
- "@0x/tslint-config": "^4.0.0",
- "@0x/web3-wrapper": "^7.0.6",
- "@types/jsonstream": "^0.8.30",
- "@types/rimraf": "^2.0.3",
- "@types/uuid": "^3.4.3",
- "@types/uuid-validate": "^0.0.1",
- "@types/websocket": "^0.0.40",
- "chai": "^4.0.1",
- "chai-as-promised": "^7.1.0",
- "chai-bignumber": "^3.0.0",
- "dirty-chai": "^2.0.1",
- "jsonstream": "^1.0.3",
- "make-promises-safe": "^1.1.0",
- "mocha": "^4.1.0",
- "rimraf": "^3.0.0",
- "shx": "^0.3.2",
- "tslint": "5.11.0",
- "typedoc": "^0.15.0",
- "typescript": "3.9.3",
- "uuid-validate": "^0.0.3"
- },
- "dependencies": {
- "@0x/assert": "^3.0.6",
- "@0x/types": "^3.1.2",
- "@0x/typescript-typings": "^5.0.2",
- "@0x/utils": "^5.4.0",
- "uuid": "^3.3.2",
- "web3-providers": "^2.0.0-alpha.1",
- "websocket": "^1.0.29"
- },
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/packages/mesh-rpc-client/src/globals.d.ts b/packages/mesh-rpc-client/src/globals.d.ts
deleted file mode 100644
index 783b92913..000000000
--- a/packages/mesh-rpc-client/src/globals.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*.json' {
- const value: any;
- export default value;
-}
diff --git a/packages/mesh-rpc-client/src/index.ts b/packages/mesh-rpc-client/src/index.ts
deleted file mode 100644
index 17e860b98..000000000
--- a/packages/mesh-rpc-client/src/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export { WSClient } from './ws_client';
-export {
- ClientConfig,
- WSOpts,
- OrderEventEndState,
- OrderEventPayload,
- OrderEvent,
- OrderInfo,
- AcceptedOrderInfo,
- RejectedKind,
- RejectedCode,
- RejectedStatus,
- RejectedOrderInfo,
- ValidationResults,
- GetOrdersResponse,
- GetStatsResponse,
-} from './types';
-export { SignedOrder } from '@0x/types';
-export { BigNumber } from '@0x/utils';
diff --git a/packages/mesh-rpc-client/src/types.ts b/packages/mesh-rpc-client/src/types.ts
deleted file mode 100644
index b85f2cad3..000000000
--- a/packages/mesh-rpc-client/src/types.ts
+++ /dev/null
@@ -1,441 +0,0 @@
-import { SignedOrder } from '@0x/types';
-import { BigNumber } from '@0x/utils';
-
-export { BigNumber } from '@0x/utils';
-
-/**
- * WebSocketClient configs
- * Source: https://github.com/theturtle32/WebSocket-Node/blob/master/docs/WebSocketClient.md#client-config-options
- */
-export interface ClientConfig {
- webSocketVersion?: number;
- maxReceivedFrameSize?: number;
- maxReceivedMessageSize?: number;
- fragmentOutgoingMessages?: boolean;
- fragmentationThreshold?: number;
- assembleFragments?: boolean;
- closeTimeout?: number;
- tlsOptions?: any;
-}
-
-/**
- * timeout: timeout in milliseconds to enforce on every WS request that expects a response
- * headers: Request headers (e.g., authorization)
- * protocol: requestOptions should be either null or an object specifying additional configuration options to be
- * passed to http.request or https.request. This can be used to pass a custom agent to enable WebSocketClient usage
- * from behind an HTTP or HTTPS proxy server using koichik/node-tunnel or similar.
- * clientConfig: The client configs documented here: https://github.com/theturtle32/WebSocket-Node/blob/master/docs/WebSocketClient.md
- * reconnectDelay: time in milliseconds after which to attempt to reconnect to WS server after an error occurred (default: 5000)
- */
-export interface WSOpts {
- timeout?: number;
- headers?: {};
- protocol?: string;
- clientConfig?: ClientConfig;
- reconnectDelay?: number;
-}
-
-export interface StringifiedSignedOrder {
- senderAddress: string;
- makerAddress: string;
- takerAddress: string;
- makerFee: string;
- takerFee: string;
- makerAssetAmount: string;
- takerAssetAmount: string;
- makerAssetData: string;
- takerAssetData: string;
- salt: string;
- exchangeAddress: string;
- feeRecipientAddress: string;
- expirationTimeSeconds: string;
- signature: string;
-}
-
-export interface ERC20TransferEvent {
- from: string;
- to: string;
- value: BigNumber;
-}
-
-export interface StringifiedERC20TransferEvent {
- from: string;
- to: string;
- value: string;
-}
-
-export interface ERC20ApprovalEvent {
- owner: string;
- spender: string;
- value: BigNumber;
-}
-
-export interface StringifiedERC20ApprovalEvent {
- owner: string;
- spender: string;
- value: string;
-}
-
-export interface ERC721TransferEvent {
- from: string;
- to: string;
- tokenId: BigNumber;
-}
-
-export interface StringifiedERC721TransferEvent {
- from: string;
- to: string;
- tokenId: string;
-}
-
-export interface ERC721ApprovalEvent {
- owner: string;
- approved: string;
- tokenId: BigNumber;
-}
-
-export interface StringifiedERC721ApprovalEvent {
- owner: string;
- approved: string;
- tokenId: string;
-}
-
-export interface ERC721ApprovalForAllEvent {
- owner: string;
- operator: string;
- approved: boolean;
-}
-
-export interface ERC1155TransferSingleEvent {
- operator: string;
- from: string;
- to: string;
- id: BigNumber;
- value: BigNumber;
-}
-
-export interface StringifiedERC1155TransferSingleEvent {
- operator: string;
- from: string;
- to: string;
- id: string;
- value: string;
-}
-
-export interface ERC1155TransferBatchEvent {
- operator: string;
- from: string;
- to: string;
- ids: BigNumber[];
- values: BigNumber[];
-}
-
-export interface StringifiedERC1155TransferBatchEvent {
- operator: string;
- from: string;
- to: string;
- ids: string[];
- values: string[];
-}
-
-export interface ERC1155ApprovalForAllEvent {
- owner: string;
- operator: string;
- approved: boolean;
-}
-
-export interface ExchangeFillEvent {
- makerAddress: string;
- takerAddress: string;
- senderAddress: string;
- feeRecipientAddress: string;
- makerAssetFilledAmount: BigNumber;
- takerAssetFilledAmount: BigNumber;
- makerFeePaid: BigNumber;
- takerFeePaid: BigNumber;
- orderHash: string;
- makerAssetData: string;
- takerAssetData: string;
-}
-
-export interface StringifiedExchangeFillEvent {
- makerAddress: string;
- takerAddress: string;
- senderAddress: string;
- feeRecipientAddress: string;
- makerAssetFilledAmount: string;
- takerAssetFilledAmount: string;
- makerFeePaid: string;
- takerFeePaid: string;
- orderHash: string;
- makerAssetData: string;
- takerAssetData: string;
-}
-
-export interface ExchangeCancelEvent {
- makerAddress: string;
- senderAddress: string;
- feeRecipientAddress: string;
- orderHash: string;
- makerAssetData: string;
- takerAssetData: string;
-}
-
-export interface ExchangeCancelUpToEvent {
- makerAddress: string;
- senderAddress: string;
- orderEpoch: BigNumber;
-}
-
-export interface StringifiedExchangeCancelUpToEvent {
- makerAddress: string;
- senderAddress: string;
- orderEpoch: string;
-}
-
-export interface WethWithdrawalEvent {
- owner: string;
- value: BigNumber;
-}
-
-export interface StringifiedWethWithdrawalEvent {
- owner: string;
- value: string;
-}
-
-export interface WethDepositEvent {
- owner: string;
- value: BigNumber;
-}
-
-export interface StringifiedWethDepositEvent {
- owner: string;
- value: string;
-}
-
-export enum ContractEventKind {
- ERC20TransferEvent = 'ERC20TransferEvent',
- ERC20ApprovalEvent = 'ERC20ApprovalEvent',
- ERC721TransferEvent = 'ERC721TransferEvent',
- ERC721ApprovalEvent = 'ERC721ApprovalEvent',
- ERC721ApprovalForAllEvent = 'ERC721ApprovalForAllEvent',
- ERC1155ApprovalForAllEvent = 'ERC1155ApprovalForAllEvent',
- ERC1155TransferSingleEvent = 'ERC1155TransferSingleEvent',
- ERC1155TransferBatchEvent = 'ERC1155TransferBatchEvent',
- ExchangeFillEvent = 'ExchangeFillEvent',
- ExchangeCancelEvent = 'ExchangeCancelEvent',
- ExchangeCancelUpToEvent = 'ExchangeCancelUpToEvent',
- WethDepositEvent = 'WethDepositEvent',
- WethWithdrawalEvent = 'WethWithdrawalEvent',
-}
-
-export type StringifiedContractEventParameters =
- | StringifiedERC20TransferEvent
- | StringifiedERC20ApprovalEvent
- | StringifiedERC721TransferEvent
- | StringifiedERC721ApprovalEvent
- | StringifiedExchangeFillEvent
- | StringifiedExchangeCancelUpToEvent
- | StringifiedWethWithdrawalEvent
- | StringifiedWethDepositEvent
- | ERC721ApprovalForAllEvent
- | ERC1155ApprovalForAllEvent
- | StringifiedERC1155TransferSingleEvent
- | StringifiedERC1155TransferBatchEvent
- | ExchangeCancelEvent;
-
-export interface StringifiedContractEvent {
- blockHash: string;
- txHash: string;
- txIndex: number;
- logIndex: number;
- isRemoved: string;
- address: string;
- kind: string;
- parameters: StringifiedContractEventParameters;
-}
-
-export type ContractEventParameters =
- | ERC20TransferEvent
- | ERC20ApprovalEvent
- | ERC721TransferEvent
- | ERC721ApprovalEvent
- | ExchangeFillEvent
- | ExchangeCancelUpToEvent
- | WethWithdrawalEvent
- | WethDepositEvent
- | ERC721ApprovalForAllEvent
- | ExchangeCancelEvent
- | ERC1155ApprovalForAllEvent
- | ERC1155TransferSingleEvent
- | ERC1155TransferBatchEvent;
-
-export interface ContractEvent {
- blockHash: string;
- txHash: string;
- txIndex: number;
- logIndex: number;
- isRemoved: string;
- address: string;
- kind: ContractEventKind;
- parameters: ContractEventParameters;
-}
-
-export enum OrderEventEndState {
- Invalid = 'INVALID',
- Added = 'ADDED',
- Filled = 'FILLED',
- FullyFilled = 'FULLY_FILLED',
- Cancelled = 'CANCELLED',
- Expired = 'EXPIRED',
- Unexpired = 'UNEXPIRED',
- StoppedWatching = 'STOPPED_WATCHING',
- Unfunded = 'UNFUNDED',
- FillabilityIncreased = 'FILLABILITY_INCREASED',
-}
-
-export interface OrderEventPayload {
- subscription: string;
- result: RawOrderEvent[];
-}
-
-export interface HeartbeatEventPayload {
- subscription: string;
- result: string;
-}
-
-export interface RawOrderEvent {
- timestamp: string;
- orderHash: string;
- signedOrder: StringifiedSignedOrder;
- endState: OrderEventEndState;
- fillableTakerAssetAmount: string;
- contractEvents: StringifiedContractEvent[];
-}
-
-export interface OrderEvent {
- timestampMs: number;
- orderHash: string;
- signedOrder: SignedOrder;
- endState: OrderEventEndState;
- fillableTakerAssetAmount: BigNumber;
- contractEvents: ContractEvent[];
-}
-
-export interface RawAcceptedOrderInfo {
- orderHash: string;
- signedOrder: StringifiedSignedOrder;
- fillableTakerAssetAmount: string;
- isNew: boolean;
-}
-
-export interface AcceptedOrderInfo {
- orderHash: string;
- signedOrder: SignedOrder;
- fillableTakerAssetAmount: BigNumber;
- isNew: boolean;
-}
-
-export interface RawOrderInfo {
- orderHash: string;
- signedOrder: StringifiedSignedOrder;
- fillableTakerAssetAmount: string;
-}
-
-export interface OrderInfo {
- orderHash: string;
- signedOrder: SignedOrder;
- fillableTakerAssetAmount: BigNumber;
-}
-
-export enum RejectedKind {
- ZeroexValidation = 'ZEROEX_VALIDATION',
- MeshError = 'MESH_ERROR',
- MeshValidation = 'MESH_VALIDATION',
-}
-
-export enum RejectedCode {
- InternalError = 'InternalError',
- MaxOrderSizeExceeded = 'MaxOrderSizeExceeded',
- OrderAlreadyStored = 'OrderAlreadyStored',
- OrderForIncorrectChain = 'OrderForIncorrectChain',
- NetworkRequestFailed = 'NetworkRequestFailed',
- OrderHasInvalidMakerAssetAmount = 'OrderHasInvalidMakerAssetAmount',
- OrderHasInvalidTakerAssetAmount = 'OrderHasInvalidTakerAssetAmount',
- OrderExpired = 'OrderExpired',
- OrderFullyFilled = 'OrderFullyFilled',
- OrderCancelled = 'OrderCancelled',
- OrderUnfunded = 'OrderUnfunded',
- OrderHasInvalidMakerAssetData = 'OrderHasInvalidMakerAssetData',
- OrderHasInvalidTakerAssetData = 'OrderHasInvalidTakerAssetData',
- OrderHasInvalidSignature = 'OrderHasInvalidSignature',
-}
-
-export interface RejectedStatus {
- code: RejectedCode;
- message: string;
-}
-
-export interface RawRejectedOrderInfo {
- orderHash: string;
- signedOrder: StringifiedSignedOrder;
- kind: RejectedKind;
- status: RejectedStatus;
-}
-
-export interface RejectedOrderInfo {
- orderHash: string;
- signedOrder: SignedOrder;
- kind: RejectedKind;
- status: RejectedStatus;
-}
-
-export interface RawValidationResults {
- accepted: RawAcceptedOrderInfo[];
- rejected: RawRejectedOrderInfo[];
-}
-
-export interface ValidationResults {
- accepted: AcceptedOrderInfo[];
- rejected: RejectedOrderInfo[];
-}
-
-export interface RawGetOrdersResponse {
- timestamp: string;
- ordersInfos: RawAcceptedOrderInfo[];
-}
-
-// GetOrdersResponse is the response returned when calling the mesh_getOrders
-// method. The `snapshotTimestamp` is the second UTC timestamp of when the Mesh
-// was queried for these orders
-export interface GetOrdersResponse {
- timestamp: number;
- ordersInfos: OrderInfo[];
-}
-
-export interface WSMessage {
- type: string;
- utf8Data: string;
-}
-
-export interface LatestBlock {
- number: number;
- hash: string;
-}
-
-export interface GetStatsResponse {
- version: string;
- pubSubTopic: string;
- rendezvous: string;
- peerID: string;
- ethereumChainID: number;
- latestBlock: LatestBlock;
- numPeers: number;
- numOrders: number;
- numOrdersIncludingRemoved: number;
- numPinnedOrders: number;
- maxExpirationTime: string;
- startOfCurrentUTCDay: string;
- ethRPCRequestsSentInCurrentUTCDay: number;
- ethRPCRateLimitExpiredRequests: number;
-}
diff --git a/packages/mesh-rpc-client/src/ws_client.ts b/packages/mesh-rpc-client/src/ws_client.ts
deleted file mode 100644
index c854d997f..000000000
--- a/packages/mesh-rpc-client/src/ws_client.ts
+++ /dev/null
@@ -1,455 +0,0 @@
-import { assert } from '@0x/assert';
-import { ObjectMap, SignedOrder } from '@0x/types';
-import { BigNumber } from '@0x/utils';
-import { v4 as uuid } from 'uuid';
-import * as Web3Providers from 'web3-providers';
-import * as WebSocket from 'websocket';
-
-import {
- AcceptedOrderInfo,
- ContractEvent,
- ContractEventKind,
- ContractEventParameters,
- ERC1155ApprovalForAllEvent,
- ERC721ApprovalForAllEvent,
- ExchangeCancelEvent,
- GetOrdersResponse,
- GetStatsResponse,
- HeartbeatEventPayload,
- OrderEvent,
- OrderEventPayload,
- OrderInfo,
- RawAcceptedOrderInfo,
- RawGetOrdersResponse,
- RawOrderEvent,
- RawOrderInfo,
- RawValidationResults,
- RejectedOrderInfo,
- StringifiedContractEvent,
- StringifiedERC1155TransferBatchEvent,
- StringifiedERC1155TransferSingleEvent,
- StringifiedERC20ApprovalEvent,
- StringifiedERC20TransferEvent,
- StringifiedERC721ApprovalEvent,
- StringifiedERC721TransferEvent,
- StringifiedExchangeCancelUpToEvent,
- StringifiedExchangeFillEvent,
- StringifiedWethDepositEvent,
- StringifiedWethWithdrawalEvent,
- ValidationResults,
- WSOpts,
-} from './types';
-
-const CLOSE_REASON_NO_HEARTBEAT = 3001;
-const CLOSE_DESCRIPTION_NO_HEARTBEAT = 'No heartbeat received';
-
-const DEFAULT_RECONNECT_AFTER_MS = 5000;
-const DEFAULT_RPC_REQUEST_TIMEOUT = 30000;
-const DEFAULT_WS_OPTS = {
- clientConfig: {
- // For some reason fragmenting the payloads causes the connection to close
- // Source: https://github.com/theturtle32/WebSocket-Node/issues/359
- fragmentOutgoingMessages: false,
- },
- timeout: DEFAULT_RPC_REQUEST_TIMEOUT,
- reconnectDelay: DEFAULT_RECONNECT_AFTER_MS,
-};
-
-/**
- * This class includes all the functionality related to interacting with a Mesh JSON RPC
- * websocket endpoint.
- */
-export class WSClient {
- private readonly _subscriptionIdToMeshSpecificId: ObjectMap;
- private _heartbeatCheckIntervalId: number | undefined;
- private readonly _wsProvider: Web3Providers.WebsocketProvider;
- private static _convertRawAcceptedOrderInfos(rawAcceptedOrderInfos: RawAcceptedOrderInfo[]): AcceptedOrderInfo[] {
- const acceptedOrderInfos: AcceptedOrderInfo[] = [];
- rawAcceptedOrderInfos.forEach(rawAcceptedOrderInfo => {
- const acceptedOrderInfo: AcceptedOrderInfo = {
- orderHash: rawAcceptedOrderInfo.orderHash,
- signedOrder: WSClient._convertOrderStringFieldsToBigNumber(rawAcceptedOrderInfo.signedOrder),
- fillableTakerAssetAmount: new BigNumber(rawAcceptedOrderInfo.fillableTakerAssetAmount),
- isNew: rawAcceptedOrderInfo.isNew,
- };
- acceptedOrderInfos.push(acceptedOrderInfo);
- });
- return acceptedOrderInfos;
- }
- private static _convertRawOrderInfos(rawOrderInfos: RawOrderInfo[]): OrderInfo[] {
- const orderInfos: OrderInfo[] = [];
- rawOrderInfos.forEach(rawOrderInfo => {
- const orderInfo: OrderInfo = {
- orderHash: rawOrderInfo.orderHash,
- signedOrder: WSClient._convertOrderStringFieldsToBigNumber(rawOrderInfo.signedOrder),
- fillableTakerAssetAmount: new BigNumber(rawOrderInfo.fillableTakerAssetAmount),
- };
- orderInfos.push(orderInfo);
- });
- return orderInfos;
- }
- private static _convertStringsFieldsToBigNumbers(obj: any, fields: string[]): any {
- const result = { ...obj };
- fields.forEach(field => {
- if (result[field] === undefined) {
- throw new Error(`Could not find field '${field}' while converting string fields to BigNumber.`);
- }
- result[field] = new BigNumber(result[field]);
- });
- return result;
- }
- private static _convertOrderStringFieldsToBigNumber(order: any): any {
- return WSClient._convertStringsFieldsToBigNumbers(order, [
- 'makerAssetAmount',
- 'takerAssetAmount',
- 'makerFee',
- 'takerFee',
- 'expirationTimeSeconds',
- 'salt',
- ]);
- }
- private static _convertRawGetOrdersResponse(rawGetOrdersResponse: RawGetOrdersResponse): GetOrdersResponse {
- return {
- // tslint:disable-next-line:custom-no-magic-numbers
- timestamp: Math.round(new Date(rawGetOrdersResponse.timestamp).getTime() / 1000),
- ordersInfos: WSClient._convertRawOrderInfos(rawGetOrdersResponse.ordersInfos),
- };
- }
- private static _convertStringifiedContractEvents(rawContractEvents: StringifiedContractEvent[]): ContractEvent[] {
- const contractEvents: ContractEvent[] = [];
- if (rawContractEvents === null) {
- return contractEvents;
- }
- rawContractEvents.forEach(rawContractEvent => {
- const kind = rawContractEvent.kind as ContractEventKind;
- const rawParameters = rawContractEvent.parameters;
- let parameters: ContractEventParameters;
- switch (kind) {
- case ContractEventKind.ERC20TransferEvent:
- const erc20TransferEvent = rawParameters as StringifiedERC20TransferEvent;
- parameters = {
- from: erc20TransferEvent.from,
- to: erc20TransferEvent.to,
- value: new BigNumber(erc20TransferEvent.value),
- };
- break;
- case ContractEventKind.ERC20ApprovalEvent:
- const erc20ApprovalEvent = rawParameters as StringifiedERC20ApprovalEvent;
- parameters = {
- owner: erc20ApprovalEvent.owner,
- spender: erc20ApprovalEvent.spender,
- value: new BigNumber(erc20ApprovalEvent.value),
- };
- break;
- case ContractEventKind.ERC721TransferEvent:
- const erc721TransferEvent = rawParameters as StringifiedERC721TransferEvent;
- parameters = {
- from: erc721TransferEvent.from,
- to: erc721TransferEvent.to,
- tokenId: new BigNumber(erc721TransferEvent.tokenId),
- };
- break;
- case ContractEventKind.ERC721ApprovalEvent:
- const erc721ApprovalEvent = rawParameters as StringifiedERC721ApprovalEvent;
- parameters = {
- owner: erc721ApprovalEvent.owner,
- approved: erc721ApprovalEvent.approved,
- tokenId: new BigNumber(erc721ApprovalEvent.tokenId),
- };
- break;
- case ContractEventKind.ERC721ApprovalForAllEvent:
- parameters = rawParameters as ERC721ApprovalForAllEvent;
- break;
- case ContractEventKind.ERC1155ApprovalForAllEvent:
- parameters = rawParameters as ERC1155ApprovalForAllEvent;
- break;
- case ContractEventKind.ERC1155TransferSingleEvent:
- const erc1155TransferSingleEvent = rawParameters as StringifiedERC1155TransferSingleEvent;
- parameters = {
- operator: erc1155TransferSingleEvent.operator,
- from: erc1155TransferSingleEvent.from,
- to: erc1155TransferSingleEvent.to,
- id: new BigNumber(erc1155TransferSingleEvent.id),
- value: new BigNumber(erc1155TransferSingleEvent.value),
- };
- break;
- case ContractEventKind.ERC1155TransferBatchEvent:
- const erc1155TransferBatchEvent = rawParameters as StringifiedERC1155TransferBatchEvent;
- const ids: BigNumber[] = [];
- erc1155TransferBatchEvent.ids.forEach(id => {
- ids.push(new BigNumber(id));
- });
- const values: BigNumber[] = [];
- erc1155TransferBatchEvent.values.forEach(value => {
- values.push(new BigNumber(value));
- });
- parameters = {
- operator: erc1155TransferBatchEvent.operator,
- from: erc1155TransferBatchEvent.from,
- to: erc1155TransferBatchEvent.to,
- ids,
- values,
- };
- break;
- case ContractEventKind.ExchangeFillEvent:
- const exchangeFillEvent = rawParameters as StringifiedExchangeFillEvent;
- parameters = {
- makerAddress: exchangeFillEvent.makerAddress,
- takerAddress: exchangeFillEvent.takerAddress,
- senderAddress: exchangeFillEvent.senderAddress,
- feeRecipientAddress: exchangeFillEvent.feeRecipientAddress,
- makerAssetFilledAmount: new BigNumber(exchangeFillEvent.makerAssetFilledAmount),
- takerAssetFilledAmount: new BigNumber(exchangeFillEvent.takerAssetFilledAmount),
- makerFeePaid: new BigNumber(exchangeFillEvent.makerFeePaid),
- takerFeePaid: new BigNumber(exchangeFillEvent.takerFeePaid),
- orderHash: exchangeFillEvent.orderHash,
- makerAssetData: exchangeFillEvent.makerAssetData,
- takerAssetData: exchangeFillEvent.takerAssetData,
- };
- break;
- case ContractEventKind.ExchangeCancelEvent:
- parameters = rawParameters as ExchangeCancelEvent;
- break;
- case ContractEventKind.ExchangeCancelUpToEvent:
- const exchangeCancelUpToEvent = rawParameters as StringifiedExchangeCancelUpToEvent;
- parameters = {
- makerAddress: exchangeCancelUpToEvent.makerAddress,
- senderAddress: exchangeCancelUpToEvent.senderAddress,
- orderEpoch: new BigNumber(exchangeCancelUpToEvent.orderEpoch),
- };
- break;
- case ContractEventKind.WethDepositEvent:
- const wethDepositEvent = rawParameters as StringifiedWethDepositEvent;
- parameters = {
- owner: wethDepositEvent.owner,
- value: new BigNumber(wethDepositEvent.value),
- };
- break;
- case ContractEventKind.WethWithdrawalEvent:
- const wethWithdrawalEvent = rawParameters as StringifiedWethWithdrawalEvent;
- parameters = {
- owner: wethWithdrawalEvent.owner,
- value: new BigNumber(wethWithdrawalEvent.value),
- };
- break;
- default:
- throw new Error(`Unrecognized ContractEventKind: ${kind}`);
- }
- const contractEvent: ContractEvent = {
- blockHash: rawContractEvent.blockHash,
- txHash: rawContractEvent.txHash,
- txIndex: rawContractEvent.txIndex,
- logIndex: rawContractEvent.logIndex,
- isRemoved: rawContractEvent.isRemoved,
- address: rawContractEvent.address,
- kind,
- parameters,
- };
- contractEvents.push(contractEvent);
- });
- return contractEvents;
- }
- /**
- * Instantiates a new WSClient instance
- * @param url WS server endpoint
- * @param wsOpts WebSocket options
- * @return An instance of WSClient
- */
- constructor(url: string, wsOpts?: WSOpts) {
- this._subscriptionIdToMeshSpecificId = {};
- if (wsOpts !== undefined && wsOpts.reconnectDelay === undefined) {
- wsOpts.reconnectDelay = DEFAULT_RECONNECT_AFTER_MS;
- }
- this._wsProvider = new Web3Providers.WebsocketProvider(
- url,
- wsOpts !== undefined ? (wsOpts as any) : DEFAULT_WS_OPTS,
- );
- // Intentional fire-and-forget
- // tslint:disable-next-line:no-floating-promises
- this._startInternalLivenessCheckAsync();
- }
- /**
- * Adds an array of 0x signed orders to the Mesh node.
- * @param signedOrders signedOrders to add
- * @param pinned Whether or not the orders should be pinned. Pinned
- * orders will not be affected by any DDoS prevention or incentive
- * mechanisms and will always stay in storage until they are no longer
- * fillable.
- * @returns validation results
- */
- public async addOrdersAsync(signedOrders: SignedOrder[], pinned: boolean = true): Promise {
- assert.isArray('signedOrders', signedOrders);
- const rawValidationResults: RawValidationResults = await this._wsProvider.send('mesh_addOrders', [
- signedOrders,
- { pinned },
- ]);
- const validationResults: ValidationResults = {
- accepted: WSClient._convertRawAcceptedOrderInfos(rawValidationResults.accepted),
- rejected: [],
- };
- rawValidationResults.rejected.forEach(rawRejectedOrderInfo => {
- const rejectedOrderInfo: RejectedOrderInfo = {
- orderHash: rawRejectedOrderInfo.orderHash,
- signedOrder: WSClient._convertOrderStringFieldsToBigNumber(rawRejectedOrderInfo.signedOrder),
- kind: rawRejectedOrderInfo.kind,
- status: rawRejectedOrderInfo.status,
- };
- validationResults.rejected.push(rejectedOrderInfo);
- });
- return validationResults;
- }
- public async getStatsAsync(): Promise {
- const stats = await this._wsProvider.send('mesh_getStats', []);
- return stats;
- }
- /**
- * Get all 0x signed orders currently stored in the Mesh node
- * @param perPage number of signedOrders to fetch per paginated request
- * @returns the snapshotID, snapshotTimestamp and all orders, their hashes and fillableTakerAssetAmounts
- */
- public async getOrdersAsync(perPage: number = 200): Promise {
- let getOrdersResponse = await this.getOrdersForPageAsync(perPage);
- let ordersInfos = getOrdersResponse.ordersInfos;
- let allOrderInfos: OrderInfo[] = [];
-
- while (ordersInfos.length > 0) {
- allOrderInfos = [...allOrderInfos, ...ordersInfos];
- const minOrderHash = ordersInfos[ordersInfos.length - 1].orderHash;
- getOrdersResponse = await this.getOrdersForPageAsync(perPage, minOrderHash);
- ordersInfos = getOrdersResponse.ordersInfos;
- }
-
- getOrdersResponse = {
- timestamp: getOrdersResponse.timestamp,
- ordersInfos: allOrderInfos,
- };
- return getOrdersResponse;
- }
- /**
- * Get page of 0x signed orders stored on the Mesh node at the specified snapshot
- * @param page Page index at which to retrieve orders
- * @param perPage number of signedOrders to fetch per paginated request
- * @param snapshotID The DB snapshot at which to fetch orders. If omitted, a new snapshot is created
- * @returns the snapshotID, snapshotTimestamp and all orders, their hashes and fillableTakerAssetAmounts
- */
- public async getOrdersForPageAsync(perPage: number = 200, minOrderHash: string = ''): Promise {
- const rawGetOrdersResponse: RawGetOrdersResponse = await this._wsProvider.send('mesh_getOrders', [
- perPage,
- minOrderHash,
- ]);
- const getOrdersResponse = WSClient._convertRawGetOrdersResponse(rawGetOrdersResponse);
- return getOrdersResponse;
- }
- /**
- * Subscribe to the 'orders' topic and receive order events from Mesh. This method returns a
- * subscriptionId that can be used to `unsubscribe()` from this subscription.
- * @param cb callback function where you'd like to get notified about order events
- * @return subscriptionId
- */
- public async subscribeToOrdersAsync(cb: (orderEvents: OrderEvent[]) => void): Promise {
- assert.isFunction('cb', cb);
- const orderEventsSubscriptionId = await this._wsProvider.subscribe('mesh_subscribe', 'orders', []);
- const id = uuid();
- this._subscriptionIdToMeshSpecificId[id] = orderEventsSubscriptionId;
-
- const orderEventsCallback = (eventPayload: OrderEventPayload) => {
- this._subscriptionIdToMeshSpecificId[id] = eventPayload.subscription;
- const rawOrderEvents: RawOrderEvent[] = eventPayload.result;
- const orderEvents: OrderEvent[] = [];
- rawOrderEvents.forEach(rawOrderEvent => {
- const orderEvent = {
- timestampMs: new Date(rawOrderEvent.timestamp).getTime(),
- orderHash: rawOrderEvent.orderHash,
- signedOrder: WSClient._convertOrderStringFieldsToBigNumber(rawOrderEvent.signedOrder),
- endState: rawOrderEvent.endState,
- fillableTakerAssetAmount: new BigNumber(rawOrderEvent.fillableTakerAssetAmount),
- contractEvents: WSClient._convertStringifiedContractEvents(rawOrderEvent.contractEvents),
- };
- orderEvents.push(orderEvent);
- });
- cb(orderEvents);
- };
- this._wsProvider.on(orderEventsSubscriptionId, orderEventsCallback as any);
- return id;
- }
- /**
- * Unsubscribe from a subscription
- * @param subscriptionId identifier of the subscription to cancel
- */
- public async unsubscribeAsync(subscriptionId: string): Promise {
- assert.isString('subscriptionId', subscriptionId);
- const meshSubscriptionId = this._subscriptionIdToMeshSpecificId[subscriptionId];
- await this._wsProvider.send('mesh_unsubscribe', [meshSubscriptionId]);
- }
- /**
- * Get notified when the underlying WS connection closes normally. If it closes with an
- * error, WSClient automatically attempts to re-connect without emitting a `close` event.
- * @param cb callback to call when WS connection closes
- */
- public onClose(cb: () => void): void {
- (this._wsProvider as any).connection.addEventListener('close', () => {
- cb();
- });
- }
- /**
- * Get notified when a connection to the underlying WS connection is re-established
- * @param cb callback to call with the error when it occurs
- */
- public onReconnected(cb: () => void): void {
- this._wsProvider.on('reconnected', () => {
- cb();
- });
- }
- /**
- * destroy unsubscribes all active subscriptions, closes the websocket connection
- * and stops the internal heartbeat connection liveness check.
- */
- public destroy(): void {
- clearInterval(this._heartbeatCheckIntervalId);
- this._wsProvider.clearSubscriptions('mesh_unsubscribe');
- this._wsProvider.disconnect(WebSocket.connection.CLOSE_REASON_NORMAL, 'Normal connection closure');
- }
- /**
- * Subscribe to the 'heartbeat' topic and receive an ack from the Mesh every 5 seconds. This method
- * returns a subscriptionId that can be used to `unsubscribe()` from this subscription.
- * @param cb callback function where you'd like to get notified about heartbeats
- * @return subscriptionId
- */
- private async _subscribeToHeartbeatAsync(cb: (ack: string) => void): Promise {
- assert.isFunction('cb', cb);
- const heartbeatSubscriptionId = await this._wsProvider.subscribe('mesh_subscribe', 'heartbeat', []);
- const id = uuid();
- this._subscriptionIdToMeshSpecificId[id] = heartbeatSubscriptionId;
-
- const orderEventsCallback = (eventPayload: HeartbeatEventPayload) => {
- this._subscriptionIdToMeshSpecificId[id] = eventPayload.subscription;
- cb(eventPayload.result);
- };
- this._wsProvider.on(heartbeatSubscriptionId, orderEventsCallback as any);
- return id;
- }
- private async _startInternalLivenessCheckAsync(): Promise {
- let lastHeartbeatTimestampMs = new Date().getTime();
- try {
- await this._subscribeToHeartbeatAsync((ack: string) => {
- lastHeartbeatTimestampMs = new Date().getTime();
- });
- } catch (err) {
- throw new Error('Failed to establish under-the-hood heartbeat subscription');
- }
- const oneSecondInMs = 1000;
- this._heartbeatCheckIntervalId = setInterval(() => {
- const twentySecondsInMs = 20000;
- // tslint:disable-next-line:boolean-naming
- const haveTwentySecondsPastWithoutAHeartBeat =
- lastHeartbeatTimestampMs + twentySecondsInMs < new Date().getTime();
- if (haveTwentySecondsPastWithoutAHeartBeat) {
- // If connected, we haven't received a heartbeat in over 20 seconds, re-connect
- if (this._wsProvider.connected) {
- this._wsProvider.disconnect(CLOSE_REASON_NO_HEARTBEAT, CLOSE_DESCRIPTION_NO_HEARTBEAT);
- }
- lastHeartbeatTimestampMs = new Date().getTime();
- }
- }, oneSecondInMs) as any;
- }
-}
diff --git a/packages/mesh-rpc-client/test/utils/mock_ws_server.ts b/packages/mesh-rpc-client/test/utils/mock_ws_server.ts
deleted file mode 100644
index 54286f46c..000000000
--- a/packages/mesh-rpc-client/test/utils/mock_ws_server.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import * as http from 'http';
-import * as WebSocket from 'websocket';
-
-const DEFAULT_STATUS_CODE = 404;
-export const SERVER_PORT = 64321;
-// tslint:disable-next-line:custom-no-magic-numbers
-const sixtyFourMB = 64 * 1024 * 1024; // 64MiB
-
-let server: http.Server;
-let wsServer: WebSocket.server;
-
-/**
- * Sets up a new test WS server
- * @return A WS server
- */
-export async function setupServerAsync(): Promise {
- return new Promise((resolve, reject) => {
- server = http.createServer((_request, response) => {
- response.writeHead(DEFAULT_STATUS_CODE);
- response.end();
- });
-
- wsServer = new WebSocket.server({
- httpServer: server,
- autoAcceptConnections: true,
- maxReceivedFrameSize: sixtyFourMB,
- maxReceivedMessageSize: sixtyFourMB,
- fragmentOutgoingMessages: false,
- keepalive: false,
- disableNagleAlgorithm: false,
- });
-
- server.listen(SERVER_PORT, () => {
- resolve(wsServer);
- });
- });
-}
-
-/**
- * Stops the test WS server
- */
-export function stopServer(): void {
- try {
- wsServer.shutDown();
- server.close();
- } catch (e) {
- // tslint:disable-next-line:no-console
- console.log('stopServer threw', e);
- }
-}
diff --git a/packages/mesh-rpc-client/test/ws_client_test.ts b/packages/mesh-rpc-client/test/ws_client_test.ts
deleted file mode 100644
index 0b9d29383..000000000
--- a/packages/mesh-rpc-client/test/ws_client_test.ts
+++ /dev/null
@@ -1,509 +0,0 @@
-import { getContractAddressesForChainOrThrow } from '@0x/contract-addresses';
-import { DummyERC20TokenContract } from '@0x/contracts-erc20';
-import { ExchangeContract } from '@0x/contracts-exchange';
-import { blockchainTests, constants, expect, OrderFactory, orderHashUtils } from '@0x/contracts-test-utils';
-import { BlockchainLifecycle, callbackErrorReporter, Web3Config, web3Factory } from '@0x/dev-utils';
-import { assetDataUtils } from '@0x/order-utils';
-import { Web3ProviderEngine } from '@0x/subproviders';
-import { DoneCallback, SignedOrder } from '@0x/types';
-import { BigNumber, hexUtils } from '@0x/utils';
-import { Web3Wrapper } from '@0x/web3-wrapper';
-import 'mocha';
-import * as WebSocket from 'websocket';
-
-import { OrderEvent, OrderEventEndState, WSClient } from '../src/index';
-import { ContractEventKind, ExchangeCancelEvent, OrderInfo, RejectedKind, WSMessage } from '../src/types';
-
-import { SERVER_PORT, setupServerAsync, stopServer } from './utils/mock_ws_server';
-import { MeshDeployment, startServerAndClientAsync } from './utils/ws_server';
-
-blockchainTests.resets('WSClient', env => {
- describe('integration tests', () => {
- let deployment: MeshDeployment;
- let exchange: ExchangeContract;
- let exchangeAddress: string;
- let makerAddress: string;
- let orderFactory: OrderFactory;
- let provider: Web3ProviderEngine;
-
- beforeEach(async () => {
- deployment = await startServerAndClientAsync();
- });
-
- afterEach(async () => {
- deployment.mesh.stopMesh();
- });
-
- before(async () => {
- const chainId = await env.getChainIdAsync();
- const accounts = await env.getAccountAddressesAsync();
- [makerAddress] = accounts;
-
- // Create a new provider so that the ganache instance running on port
- // 8545 will be used instead of the in-process ganache instance.
- const providerConfigs: Web3Config = {
- total_accounts: constants.NUM_TEST_ACCOUNTS,
- shouldUseInProcessGanache: false,
- shouldAllowUnlimitedContractSize: true,
- unlocked_accounts: [makerAddress],
- };
- provider = web3Factory.getRpcProvider(providerConfigs);
-
- // HACK(jalextowle): We can't currently specify an out of process provider for a blockchainTests
- // suite, so we need to update env.blockchainLifecycle so that the resets suite works as expected.
- env.blockchainLifecycle = new BlockchainLifecycle(new Web3Wrapper(provider));
-
- exchangeAddress = getContractAddressesForChainOrThrow(chainId).exchange;
- exchange = new ExchangeContract(exchangeAddress, provider);
- const erc20ProxyAddress = getContractAddressesForChainOrThrow(chainId).erc20Proxy;
-
- // Configure two tokens and an order factory with a maker address so
- // that valid orders can be created easily in the tests.
- const makerToken = new DummyERC20TokenContract('0x34d402f14d58e001d8efbe6585051bf9706aa064', provider);
- const feeToken = new DummyERC20TokenContract('0xcdb594a32b1cc3479d8746279712c39d18a07fc0', provider);
- const mintAmount = new BigNumber('100e18');
- await makerToken.mint(mintAmount).awaitTransactionSuccessAsync({ from: makerAddress });
- await feeToken.mint(mintAmount).awaitTransactionSuccessAsync({ from: makerAddress });
- await makerToken
- .approve(erc20ProxyAddress, new BigNumber('100e18'))
- .awaitTransactionSuccessAsync({ from: makerAddress });
- await feeToken
- .approve(erc20ProxyAddress, new BigNumber('100e18'))
- .awaitTransactionSuccessAsync({ from: makerAddress });
- orderFactory = new OrderFactory(constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)], {
- ...constants.STATIC_ORDER_PARAMS,
- feeRecipientAddress: constants.NULL_ADDRESS,
- makerAddress,
- exchangeAddress,
- chainId: 1337,
- makerAssetData: assetDataUtils.encodeERC20AssetData(makerToken.address),
- takerAssetData: assetDataUtils.encodeERC20AssetData(makerToken.address),
- makerFeeAssetData: assetDataUtils.encodeERC20AssetData(feeToken.address),
- takerFeeAssetData: assetDataUtils.encodeERC20AssetData(feeToken.address),
- });
- });
-
- describe('#addOrdersAsync', async () => {
- it('accepts valid order', async () => {
- const order = await orderFactory.newSignedOrderAsync({});
- const validationResults = await deployment.client.addOrdersAsync([order]);
- expect(validationResults).to.be.deep.eq({
- accepted: [
- {
- fillableTakerAssetAmount: order.takerAssetAmount,
- isNew: true,
- orderHash: orderHashUtils.getOrderHashHex(order),
- signedOrder: order,
- },
- ],
- rejected: [],
- });
- });
-
- it('rejects order with invalid signature', async () => {
- const invalidOrder = {
- ...(await orderFactory.newSignedOrderAsync({})),
- signature: hexUtils.hash('0x0'),
- };
- const validationResults = await deployment.client.addOrdersAsync([invalidOrder]);
- expect(validationResults).to.be.deep.eq({
- accepted: [],
- rejected: [
- {
- kind: RejectedKind.ZeroexValidation,
- orderHash: orderHashUtils.getOrderHashHex(invalidOrder),
- signedOrder: invalidOrder,
- status: {
- code: 'OrderHasInvalidSignature',
- message: 'order signature must be valid',
- },
- },
- ],
- });
- });
- });
-
- describe('#getStats', () => {
- it('Ensure that the stats are correct when no orders have been added', async () => {
- const stats = await deployment.client.getStatsAsync();
-
- // NOTE(jalextowle): Ensure that the latest block of the returned
- // stats is valid and then clear the field since we don't know
- // the block number of the stats in this test a priori.
- expect(stats.latestBlock).to.not.be.undefined();
- expect(stats.latestBlock.number).to.be.greaterThan(0);
- stats.version = '';
- stats.latestBlock = {
- number: 0,
- hash: '',
- };
-
- const now = new Date(Date.now());
- const expectedStartOfCurrentUTCDay = `${now.getUTCFullYear()}-${leftPad(
- now.getUTCMonth() + 1,
- )}-${leftPad(now.getUTCDate())}T00:00:00Z`;
- const expectedStats = {
- version: '',
- pubSubTopic: '/0x-orders/version/3/chain/1337/schema/e30=',
- rendezvous: '/0x-mesh/network/1337/version/2',
- secondaryRendezvous: [],
- peerID: deployment.peerID,
- ethereumChainID: 1337,
- latestBlock: {
- number: 0,
- hash: '',
- },
- numPeers: 0,
- numOrders: 0,
- numOrdersIncludingRemoved: 0,
- numPinnedOrders: 0,
- maxExpirationTime: constants.MAX_UINT256.toString(),
- startOfCurrentUTCDay: expectedStartOfCurrentUTCDay,
- ethRPCRequestsSentInCurrentUTCDay: 0,
- ethRPCRateLimitExpiredRequests: 0,
- };
- expect(stats).to.be.deep.eq(expectedStats);
- });
- });
-
- describe('#getOrdersAsync', async () => {
- it('properly makes multiple paginated requests under-the-hood and returns all signedOrders', async () => {
- const ordersLength = 10;
- const orders = [];
- for (let i = 0; i < ordersLength; i++) {
- orders[i] = await orderFactory.newSignedOrderAsync({});
- }
- const validationResults = await deployment.client.addOrdersAsync(orders);
- expect(validationResults.accepted.length).to.be.eq(ordersLength);
-
- // NOTE(jalextowle): The time returned by Date uses milliseconds, but
- // the mesh timestamp only uses second. Multiplying the seconds timestamp
- // by 1000 gives us a comparable value. We only try to ensure that this
- // timestamp is approximately equal (within 1 second) because the server
- // will receive the request slightly after it is sent.
- const now = new Date(Date.now()).getTime();
- const perPage = ordersLength / 2;
- const response = await deployment.client.getOrdersAsync(perPage);
- assertRoughlyEquals(now, response.timestamp * secondsToMs(1), secondsToMs(2));
-
- // Verify that all of the orders that were added to the mesh node
- // were returned in the `getOrders` rpc response
- expectContainsOrders(orders, response.ordersInfos);
- });
- });
-
- describe('#getOrdersForPageAsync', async () => {
- it('properly makes paginated request and returns signedOrders', async () => {
- const ordersLength = 10;
- const orders = [];
- for (let i = 0; i < ordersLength; i++) {
- orders[i] = await orderFactory.newSignedOrderAsync({});
- }
- const validationResults = await deployment.client.addOrdersAsync(orders);
- expect(validationResults.accepted.length).to.be.eq(ordersLength);
-
- // NOTE(jalextowle): The time returned by Date uses milliseconds, but
- // the mesh timestamp only uses second. Multiplying the seconds timestamp
- // by 1000 gives us a comparable value. We only try to ensure that this
- // timestamp is approximately equal (within 1 second) because the server
- // will receive the request slightly after it is sent.
- const now = new Date(Date.now()).getTime();
- const perPage = 5;
- // First request for page index 0
- let response = await deployment.client.getOrdersForPageAsync(perPage);
- assertRoughlyEquals(now, response.timestamp * secondsToMs(1), secondsToMs(2));
-
- let responseOrders = response.ordersInfos;
- expect(responseOrders.length).to.be.eq(perPage);
- const nextMinOrderHash = responseOrders[responseOrders.length - 1].orderHash;
-
- // Second request for page index 1
- response = await deployment.client.getOrdersForPageAsync(perPage, nextMinOrderHash);
-
- // Combine orders found in first and second paginated requests
- responseOrders = [...responseOrders, ...response.ordersInfos];
-
- // Verify that all of the orders that were added to the mesh node
- // were returned in the two `getOrders` rpc response
- expectContainsOrders(orders, responseOrders);
- });
- });
-
- describe('#_subscribeToHeartbeatAsync', async () => {
- it('should receive subscription updates', (done: DoneCallback) => {
- (async () => {
- const expectToBeCalledOnce = true;
- const callback = callbackErrorReporter.reportNoErrorCallbackErrors(
- done,
- expectToBeCalledOnce,
- )(async (ack: string) => {
- expect(ack).to.be.equal('tick');
- });
- // NOTE(jalextowle): We use string literal access here to
- // avoid casting `deployment.client` to `any` (this method
- // preserves most types of type-checking) and to allow us to
- // access the private method `_subscribeToHeartbeatAsync`.
- // Source: https://stackoverflow.com/a/35991491
- // tslint:disable-next-line:no-string-literal
- await deployment.client['_subscribeToHeartbeatAsync'](callback);
- })().catch(done);
- });
- });
-
- describe('#subscribeToOrdersAsync', async () => {
- it('should receive subscription updates about added orders', (done: DoneCallback) => {
- (async () => {
- // Create orders to add to the mesh node.
- const ordersLength = 10;
- const orders = [] as SignedOrder[];
- for (let i = 0; i < ordersLength; i++) {
- orders[i] = await orderFactory.newSignedOrderAsync({});
- }
-
- // Subscribe to orders and wait for order events.
- let now: number;
- const subscription = deployment.client.subscribeToOrdersAsync((orderEvents: OrderEvent[]) => {
- expect(orderEvents.length).to.be.eq(orders.length);
- for (const orderEvent of orderEvents) {
- expect(orderEvent.endState).to.be.eq(OrderEventEndState.Added);
- // tslint:disable-next-line:custom-no-magic-numbers
- assertRoughlyEquals(now, orderEvent.timestampMs, secondsToMs(10));
- }
-
- // Ensure that all of the orders that were added had an associated order event emitted.
- for (const order of orders) {
- const orderHash = orderHashUtils.getOrderHashHex(order);
- let hasSeenMatch = false;
- for (const orderEvent of orderEvents) {
- if (orderHash === orderEvent.orderHash) {
- hasSeenMatch = true;
- expect(orderEvent.signedOrder).to.be.deep.eq(order);
- expect(orderEvent.fillableTakerAssetAmount).to.be.bignumber.eq(
- order.takerAssetAmount,
- );
- break;
- }
- }
- expect(hasSeenMatch).to.be.true();
- }
- done();
- });
- now = Date.now();
- const validationResults = await deployment.client.addOrdersAsync(orders);
- expect(validationResults.accepted.length).to.be.eq(ordersLength);
- await subscription;
- })().catch(done);
- });
-
- it('should receive subscription updates about cancelled orders', (done: DoneCallback) => {
- (async () => {
- // Add an order and then cancel it.
- const order = await orderFactory.newSignedOrderAsync({});
- const validationResults = await deployment.client.addOrdersAsync([order]);
- expect(validationResults.accepted.length).to.be.eq(1);
-
- // Subscribe to order events and assert that only a single cancel event was received.
- const now = new Date(Date.now()).getTime();
- const subscription = deployment.client.subscribeToOrdersAsync((orderEvents: OrderEvent[]) => {
- // Ensure that the correct cancel event was logged.
- expect(orderEvents.length).to.be.eq(1);
- const [orderEvent] = orderEvents;
- expect(orderEvent.endState).to.be.eq(OrderEventEndState.Cancelled);
- expect(orderEvent.fillableTakerAssetAmount).to.be.bignumber.eq(constants.ZERO_AMOUNT);
- expect(orderEvent.signedOrder).to.be.deep.eq(order);
- assertRoughlyEquals(orderEvent.timestampMs, now, secondsToMs(2));
- expect(orderEvent.contractEvents.length).to.be.eq(1);
-
- // Ensure that the contract event is correct.
- const [contractEvent] = orderEvent.contractEvents;
- expect(contractEvent.address).to.be.eq(exchangeAddress);
- expect(contractEvent.kind).to.be.equal(ContractEventKind.ExchangeCancelEvent);
- expect(contractEvent.logIndex).to.be.eq(0);
- expect(contractEvent.isRemoved).to.be.false();
- expect(contractEvent.txIndex).to.be.eq(0);
- const hashLength = 66;
- expect(contractEvent.blockHash.length).to.be.eq(hashLength);
- expect(contractEvent.blockHash).to.not.be.eq(constants.NULL_BYTES32);
- expect(contractEvent.txHash.length).to.be.eq(hashLength);
- const parameters = contractEvent.parameters as ExchangeCancelEvent;
- parameters.makerAddress = parameters.makerAddress.toLowerCase();
- parameters.senderAddress = parameters.makerAddress;
- expect(parameters.feeRecipientAddress.toLowerCase()).to.be.eq(order.feeRecipientAddress);
- expect(parameters.makerAddress.toLowerCase()).to.be.eq(makerAddress);
- expect(parameters.makerAssetData).to.be.eq(order.makerAssetData);
- expect(parameters.orderHash).to.be.eq(orderHashUtils.getOrderHashHex(order));
- expect(parameters.senderAddress.toLowerCase()).to.be.eq(makerAddress);
- expect(parameters.takerAssetData).to.be.eq(order.takerAssetData);
- done();
- });
-
- // Cancel an order and then wait for the emitted order event.
- await exchange.cancelOrder(order).awaitTransactionSuccessAsync({ from: makerAddress });
- await subscription;
- })().catch(done);
- });
- });
-
- describe('#unsubscribeAsync', async () => {
- it('should unsubscribe successfully', async () => {
- // tslint:disable-next-line:no-empty
- const subscriptionID = await deployment.client.subscribeToOrdersAsync(() => {});
- await deployment.client.unsubscribeAsync(subscriptionID);
- });
-
- it('should throw an error after unsubscribing redundantly', async () => {
- // tslint:disable-next-line:no-empty
- const subscriptionID = await deployment.client.subscribeToOrdersAsync(() => {});
- await deployment.client.unsubscribeAsync(subscriptionID);
- let thrownError: Error = new Error('');
- try {
- await deployment.client.unsubscribeAsync(subscriptionID);
- } catch (error) {
- thrownError = error;
- }
- expect(thrownError.name).to.be.eq('Error');
- expect(thrownError.message).to.be.eq('Node error: {"code":-32000,"message":"subscription not found"}');
- });
- });
- });
-
- describe('unit tests', () => {
- describe('#onClose', () => {
- it('should trigger when connection is closed', (done: DoneCallback) => {
- // tslint:disable-next-line:no-floating-promises
- (async () => {
- const wsServer = await setupServerAsync();
- wsServer.on('connect', async (connection: WebSocket.connection) => {
- // tslint:disable-next-line:custom-no-magic-numbers
- await sleepAsync(100);
- connection.close();
- });
-
- const client = new WSClient(`ws://localhost:${SERVER_PORT}`);
- client.onClose(() => {
- client.destroy();
- stopServer();
- done();
- });
- })().catch(done);
- });
- });
- describe('#onReconnected', async () => {
- it('should trigger the callback when reconnected', (done: DoneCallback) => {
- // tslint:disable-next-line:no-floating-promises
- (async () => {
- const wsServer = await setupServerAsync();
- let connectionNum = 0;
- wsServer.on('connect', async (connection: WebSocket.connection) => {
- let requestNum = 0;
- connectionNum++;
- connection.on('message', (async (message: WSMessage) => {
- const jsonRpcRequest = JSON.parse(message.utf8Data);
- if (requestNum === 0) {
- const response = `
- {
- "id": "${jsonRpcRequest.id}",
- "jsonrpc": "2.0",
- "result": "0xab1a3e8af590364c09d0fa6a12103ada"
- }
- `;
- connection.sendUTF(response);
- if (connectionNum === 1) {
- // tslint:disable-next-line:custom-no-magic-numbers
- await sleepAsync(100);
- const reasonCode = WebSocket.connection.CLOSE_REASON_PROTOCOL_ERROR;
- const description = (WebSocket.connection as any).CLOSE_DESCRIPTIONS[reasonCode];
- connection.drop(reasonCode, description);
- }
- }
- requestNum++;
- }) as any);
- });
-
- const client = new WSClient(`ws://localhost:${SERVER_PORT}`, { reconnectDelay: 100 });
- client.onReconnected(async () => {
- // We need to add a sleep here so that we leave time for the client
- // to get connected before destroying it.
- // tslint:disable-next-line:custom-no-magic-numbers
- await sleepAsync(100);
- client.destroy();
- stopServer();
- done();
- });
- })().catch(done);
- });
- });
- describe('#destroy', async () => {
- it('should unsubscribe and trigger onClose when close() is called', (done: DoneCallback) => {
- // tslint:disable-next-line:no-floating-promises
- (async () => {
- const wsServer = await setupServerAsync();
- let hasReceivedUnsubscribeMessage = false;
- wsServer.on('connect', (connection: WebSocket.connection) => {
- connection.on('message', async (message: WebSocket.IMessage) => {
- const wsMessage = message as WSMessage;
- const jsonRpcRequest = JSON.parse(wsMessage.utf8Data);
- if (jsonRpcRequest.method === 'mesh_subscribe') {
- const response = `
- {
- "id": "${jsonRpcRequest.id}",
- "jsonrpc": "2.0",
- "result": "0xab1a3e8af590364c09d0fa6a12103ada"
- }
- `;
- connection.sendUTF(response);
- } else if (jsonRpcRequest.method === 'mesh_unsubscribe') {
- hasReceivedUnsubscribeMessage = true;
- }
- });
- });
-
- const client = new WSClient(`ws://localhost:${SERVER_PORT}`);
- client.onClose(() => {
- expect(hasReceivedUnsubscribeMessage).to.be.equal(true);
- done();
- });
- // We need to add a sleep here so that we leave time for the client
- // to get connected before destroying it.
- // tslint:disable-next-line:custom-no-magic-numbers
- await sleepAsync(100);
- client.destroy();
- })().catch(done);
- });
- });
- });
-});
-
-function assertRoughlyEquals(a: number, b: number, delta: number): void {
- expect(Math.abs(a - b)).to.be.lessThan(delta);
-}
-
-function leftPad(a: number, paddingDigits: number = 2): string {
- return `${'0'.repeat(paddingDigits - a.toString().length)}${a.toString()}`;
-}
-
-function secondsToMs(seconds: number): number {
- const msPerSecond = 1000;
- return seconds * msPerSecond;
-}
-
-async function sleepAsync(ms: number): Promise {
- return new Promise(resolve => setTimeout(resolve, ms));
-}
-
-// Verify that all of the orders that were added to the mesh node
-// were returned in the `getOrders` rpc response
-function expectContainsOrders(expectedOrders: SignedOrder[], ordersInfos: OrderInfo[]): void {
- for (const order of expectedOrders) {
- let hasSeenMatch = false;
- for (const responseOrder of ordersInfos) {
- if (orderHashUtils.getOrderHashHex(order) === responseOrder.orderHash) {
- hasSeenMatch = true;
- expect(order).to.be.deep.eq(responseOrder.signedOrder);
- break;
- }
- }
- expect(hasSeenMatch).to.be.true();
- }
-}
-// tslint:disable-line:max-file-line-count
diff --git a/packages/mesh-rpc-client/yarn.lock b/packages/mesh-rpc-client/yarn.lock
deleted file mode 100644
index 15f9bdafa..000000000
--- a/packages/mesh-rpc-client/yarn.lock
+++ /dev/null
@@ -1,7928 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@0x/assert@^3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.2.tgz#412c6d06807b59d8a7747d32e87ba56c76a4bac8"
- integrity sha512-kYRCP/eOoGX3S0zTXskIcy8jA0zxOm20BCDK7EImAQ8HvdmfZr8R6dqUm5UEBLd/JJ6jywR97Y+yCUiteIGg0g==
- dependencies:
- "@0x/json-schemas" "^5.0.2"
- "@0x/typescript-typings" "^5.0.1"
- "@0x/utils" "^5.1.1"
- lodash "^4.17.11"
- valid-url "^1.0.9"
-
-"@0x/assert@^3.0.6":
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.6.tgz#b7cf0e076987a8ae9027a9b45baf6f272a307a42"
- integrity sha512-hvlXxG0ilJVRWF1BJGhWYnN8J+cdYsN1oFk9ogdAh3OxyU1EDSla7GIxxuVQAwfD0yxB9CMXQ/jbPOJVFFZD7Q==
- dependencies:
- "@0x/json-schemas" "^5.0.6"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- lodash "^4.17.11"
- valid-url "^1.0.9"
-
-"@0x/base-contract@^6.0.2":
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/@0x/base-contract/-/base-contract-6.0.2.tgz#198bad06398bdb58da1b98a93bf41f4322e9a6cd"
- integrity sha512-UR6A0KTOqkOLjzaHRy0++WDaWl3Xn6WuaIoAPk9/LD7vnKTCK+NzohCh3pBRbgkkEylng2000jldbDMZkM5FXA==
- dependencies:
- "@0x/assert" "^3.0.2"
- "@0x/json-schemas" "^5.0.2"
- "@0x/utils" "^5.1.1"
- "@0x/web3-wrapper" "^7.0.2"
- ethereumjs-account "^3.0.0"
- ethereumjs-blockstream "^7.0.0"
- ethereumjs-util "^5.1.1"
- ethereumjs-vm "^4.0.0"
- ethers "~4.0.4"
- js-sha3 "^0.7.0"
- uuid "^3.3.2"
-
-"@0x/base-contract@^6.2.0":
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/@0x/base-contract/-/base-contract-6.2.0.tgz#9da77f751529ffbc68a981954dabf7b40aab2abe"
- integrity sha512-XoaxY0mJLgvbRNV/IL8f2K7P4yek6XeP+xWbfAjm9CbXfiiHDHoYJ12QdatEpxNro9KoJy3jZCBJKdFssdu92g==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/json-schemas" "^5.0.6"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- ethereumjs-account "^3.0.0"
- ethereumjs-blockstream "^7.0.0"
- ethereumjs-util "^5.1.1"
- ethereumjs-vm "^4.0.0"
- ethers "~4.0.4"
- js-sha3 "^0.7.0"
- uuid "^3.3.2"
-
-"@0x/contract-addresses@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@0x/contract-addresses/-/contract-addresses-4.1.0.tgz#baa09961e9773457adca6988051412937b985cb9"
- integrity sha512-scx2Gv6//fBj1Gb3AuqiH6s3qTw1mlcUW6YPp1RnjEGtBPH44cc0PvWmyIeOcCAcEZSVGk8glgTR25QrBAPJnw==
- dependencies:
- lodash "^4.17.11"
-
-"@0x/contract-addresses@^4.6.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@0x/contract-addresses/-/contract-addresses-4.6.0.tgz#98ff1546b86b1a4ba198b46d7380de420333f93c"
- integrity sha512-uWT5e8hAeE4a0dnzGXCEy5B1iSCVPJ05zfiN+hIpYE8NOWc9VMR6HKsplFDivFWJw5UKEsdlMBsXszCr2sRWfw==
- dependencies:
- lodash "^4.17.11"
-
-"@0x/contract-wrappers@^13.2.0":
- version "13.2.0"
- resolved "https://registry.yarnpkg.com/@0x/contract-wrappers/-/contract-wrappers-13.2.0.tgz#d03e3fd3e70a2b9223ab0409c576378e61dd7ed9"
- integrity sha512-XvQFdLIleba6CApbvEzFuHwvvBESzerniWecUjf+1imxOZkqRuxOR8XuvWFSp7XZcU37rRgICABmyK3Csu8Cmw==
- dependencies:
- "@0x/assert" "^3.0.2"
- "@0x/base-contract" "^6.0.2"
- "@0x/contract-addresses" "^4.1.0"
- "@0x/json-schemas" "^5.0.2"
- "@0x/types" "^3.1.1"
- "@0x/utils" "^5.1.1"
- "@0x/web3-wrapper" "^7.0.2"
- ethereum-types "^3.0.0"
- ethers "~4.0.4"
-
-"@0x/contract-wrappers@^13.6.0":
- version "13.6.0"
- resolved "https://registry.yarnpkg.com/@0x/contract-wrappers/-/contract-wrappers-13.6.0.tgz#78255efaa3b7a3a83bf3e57e6236b8ff2a5b8f19"
- integrity sha512-vS+su9qkQhmvsX59TmlTcpx4SODNa1bhBNoLmslSLIIKWOKTIw5ZAp6dR7mlw3mdKvg7L/caM2W5cdYgq3O7yw==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/base-contract" "^6.2.0"
- "@0x/contract-addresses" "^4.6.0"
- "@0x/json-schemas" "^5.0.6"
- "@0x/types" "^3.1.2"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- ethereum-types "^3.1.0"
- ethers "~4.0.4"
-
-"@0x/contracts-dev-utils@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@0x/contracts-dev-utils/-/contracts-dev-utils-1.1.1.tgz#7835501b7388cfbcd372cf25b4ea5a4b18aaa040"
- integrity sha512-rmEX914SyLauZA0caRN/t9QEa/4gxzT55VNrQKWSO0IoPHff01OkrSimo6JwKK2U8oW0boVCGSOQycSfJS9pgg==
- dependencies:
- "@0x/base-contract" "^6.2.0"
-
-"@0x/contracts-erc1155@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@0x/contracts-erc1155/-/contracts-erc1155-2.1.1.tgz#b5582e3142f469aeebad33fc776b3d43614fed7f"
- integrity sha512-uGGycf86+xFhgQvgS0Sgd/Snjk/v0pgX/M0Hu8L7O5W0JfHxdiUgJVj1V18HnLzjhQ+7Pxb0irXhkABNxZ7JEw==
- dependencies:
- "@0x/base-contract" "^6.2.0"
- "@0x/contracts-test-utils" "^5.1.5"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- lodash "^4.17.11"
-
-"@0x/contracts-erc20@^3.1.0", "@0x/contracts-erc20@^3.1.1":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@0x/contracts-erc20/-/contracts-erc20-3.1.1.tgz#c496b3ec9935fc031b93b023fc15c7a90c5946c7"
- integrity sha512-rPMhp7e3794f3CpR+vQrYaSmGd9GfeTaZEsgzS6fCElPMS63yPgHa/xdpULN/iPN6bMSl+AFB65QBFH7InMvNQ==
- dependencies:
- "@0x/base-contract" "^6.2.0"
-
-"@0x/contracts-erc721@^3.1.1":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@0x/contracts-erc721/-/contracts-erc721-3.1.1.tgz#efaa3f6dc9f86ec69538a7f4442dcc46340c950c"
- integrity sha512-rQRxaJuB9rhow7XjN29CPR1grh1hMQ8g4g14V/ftkm2w3z5jAiFVQ2euW09b+UH0FcHo/fJhEb4it4+wFIuElw==
- dependencies:
- "@0x/base-contract" "^6.2.0"
-
-"@0x/contracts-exchange@^3.2.0":
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/@0x/contracts-exchange/-/contracts-exchange-3.2.1.tgz#cd6bf239537a9047554a1ca37e362c4caf13a96e"
- integrity sha512-AvytB0wE2NUo1cdbStRSJiKpaggb8KRPK8n2KUVeBVh2fEfBeNFF48vISIZdnGU/LXa1nr+eUDodZBxgviSFxA==
- dependencies:
- "@0x/base-contract" "^6.2.0"
- "@0x/contracts-dev-utils" "^1.1.1"
- "@0x/contracts-erc1155" "^2.1.1"
- "@0x/contracts-erc20" "^3.1.1"
- "@0x/contracts-erc721" "^3.1.1"
- "@0x/order-utils" "^10.2.1"
- "@0x/utils" "^5.4.0"
- lodash "^4.17.11"
-
-"@0x/contracts-test-utils@^5.1.4", "@0x/contracts-test-utils@^5.1.5":
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/@0x/contracts-test-utils/-/contracts-test-utils-5.1.5.tgz#ed09630b2ab4965a0e1950a9520aa369db2d4790"
- integrity sha512-CsKcQcceTB201URGGjVL/JoMfgKQFfjn2GNmn1+Ib2PPePKil3OVoKojd+pt1OYmQXMVwpZbmD7FRzmDbFSZdw==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/base-contract" "^6.2.0"
- "@0x/contract-addresses" "^4.6.0"
- "@0x/dev-utils" "^3.2.0"
- "@0x/json-schemas" "^5.0.6"
- "@0x/order-utils" "^10.2.1"
- "@0x/sol-coverage" "^4.0.7"
- "@0x/sol-profiler" "^4.0.7"
- "@0x/sol-trace" "^3.0.7"
- "@0x/subproviders" "^6.0.7"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- "@types/bn.js" "^4.11.0"
- "@types/js-combinatorics" "^0.5.29"
- "@types/lodash" "4.14.104"
- "@types/mocha" "^5.2.7"
- "@types/node" "*"
- bn.js "^4.11.8"
- chai "^4.0.1"
- chai-as-promised "^7.1.0"
- chai-bignumber "^3.0.0"
- decimal.js "^10.2.0"
- dirty-chai "^2.0.1"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- js-combinatorics "^0.5.3"
- lodash "^4.17.11"
- make-promises-safe "^1.1.0"
- mocha "^6.2.0"
-
-"@0x/dev-utils@^3.2.0":
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/@0x/dev-utils/-/dev-utils-3.2.0.tgz#9a13dabb270a8b4e42f4c5ba5872d4e5566f6d38"
- integrity sha512-MDs9qrkEU1Ctsb/w4SdoDnAvh02WdW0+j5spOss1Fz3Gvmlc770ISSxXiMODc17AXInRflC91W2OKlw4oZPoqA==
- dependencies:
- "@0x/subproviders" "^6.0.7"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- "@types/web3-provider-engine" "^14.0.0"
- chai "^4.0.1"
- chai-as-promised "^7.1.0"
- chai-bignumber "^3.0.0"
- dirty-chai "^2.0.1"
- ethereum-types "^3.1.0"
- lodash "^4.17.11"
- web3-provider-engine "14.0.6"
-
-"@0x/json-schemas@^5.0.2":
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-5.0.2.tgz#70d1804141d2b66126ad180e77dc25249819ca74"
- integrity sha512-2mwC42aWx6tvOCh58pRyYCSrmdajHdmfbDSCsII/8EOWRI6gYYenRMl/edVMnqKw7FH0QLsfWdx5GeP+jNoxDA==
- dependencies:
- "@0x/typescript-typings" "^5.0.1"
- "@types/node" "*"
- jsonschema "^1.2.0"
- lodash.values "^4.3.0"
-
-"@0x/json-schemas@^5.0.6":
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-5.0.6.tgz#be7558e9b59cd25c107d50174985192e99866c93"
- integrity sha512-2wCSM/06afNsnsJIfiCxVdldefyYyqFjv8kwJ/FtP4wwci6HcczIe7OHWizJmlK81ELyoZjRGgof+cjELlbDjg==
- dependencies:
- "@0x/typescript-typings" "^5.0.2"
- "@types/node" "*"
- jsonschema "^1.2.0"
- lodash.values "^4.3.0"
-
-"@0x/order-utils@^10.0.1":
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/@0x/order-utils/-/order-utils-10.0.1.tgz#5cd887e70e76df3117051582a01c74087c4cb9fa"
- integrity sha512-NZsDciNSQtn3ARPmWc+pNK62GK2miELKryhPwwQzqpQs7bi8RSCTf26TmTMtYeXUg3t0gVfhfRD8FGBur53N9A==
- dependencies:
- "@0x/assert" "^3.0.2"
- "@0x/contract-wrappers" "^13.2.0"
- "@0x/json-schemas" "^5.0.2"
- "@0x/utils" "^5.1.1"
- "@0x/web3-wrapper" "^7.0.2"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- lodash "^4.17.11"
-
-"@0x/order-utils@^10.2.1":
- version "10.2.1"
- resolved "https://registry.yarnpkg.com/@0x/order-utils/-/order-utils-10.2.1.tgz#73e59a9e63823fc5204b0145ac73372234eb0547"
- integrity sha512-bkfUgqAb6ilk8zrzMsfKySRStDgbtbf1U+qUikXzf2EeZsQkAht5AkjxjH3EjK60O5VBf/61zTg86wdjYtH3gg==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/contract-wrappers" "^13.6.0"
- "@0x/json-schemas" "^5.0.6"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- lodash "^4.17.11"
-
-"@0x/sol-compiler@^4.0.7":
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/@0x/sol-compiler/-/sol-compiler-4.0.7.tgz#8e1f7eb6fd07cb657937b5cf0bf0c1a40e4e27ef"
- integrity sha512-GgoG8ypGJ9qZegQbpCNsJz0W4s4No+YV3/B1ZJtzek/5C1jG/ekayCu+YXrBaY8Tv1iapgAGqVz3CDStbkDAPg==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/json-schemas" "^5.0.6"
- "@0x/sol-resolver" "^3.0.3"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- "@types/yargs" "^11.0.0"
- chalk "^2.3.0"
- chokidar "^3.0.2"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- lodash "^4.17.11"
- mkdirp "^0.5.1"
- pluralize "^7.0.0"
- require-from-string "^2.0.1"
- semver "5.5.0"
- solc "^0.5.5"
- source-map-support "^0.5.0"
- web3-eth-abi "^1.0.0-beta.24"
- yargs "^10.0.3"
-
-"@0x/sol-coverage@^4.0.7":
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/@0x/sol-coverage/-/sol-coverage-4.0.7.tgz#37611a27b603be8da6f9a4a67f8d206da8c73e5b"
- integrity sha512-lbcV9EJSx4RT1/Z/Q2u1vGcqPXLAK4XVkW07HQsfafvxe3MdGSQ7HtbVaykQsmOppMuzPXHZrLA3f4Py8XAkmQ==
- dependencies:
- "@0x/sol-tracing-utils" "^7.0.7"
- "@0x/subproviders" "^6.0.7"
- "@0x/typescript-typings" "^5.0.2"
- "@types/minimatch" "^3.0.3"
- ethereum-types "^3.1.0"
- lodash "^4.17.11"
- minimatch "^3.0.4"
- web3-provider-engine "14.0.6"
-
-"@0x/sol-profiler@^4.0.7":
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/@0x/sol-profiler/-/sol-profiler-4.0.7.tgz#4e6346560f75e1f44bcd7fa81decff3620b40263"
- integrity sha512-hLIcEvVzLY8LiqWz/Zvt4VEbrwmC/zN/F3eL8FXQAF/buJL0BMs9JzfHAxIH8ohMVaj4MsrqpUzRSwAXHWDvQA==
- dependencies:
- "@0x/sol-tracing-utils" "^7.0.7"
- "@0x/subproviders" "^6.0.7"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- lodash "^4.17.11"
- web3-provider-engine "14.0.6"
-
-"@0x/sol-resolver@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-3.0.3.tgz#da969e04d5512f8cc88c117dd377bdb04f3f4410"
- integrity sha512-8Pn53YZd8y8RCjWjZDcZlp39fcqZIuEJo7o4q1P2umfatIfl4ihXgfgzw7iNxA64jTY2CWtltLpRHLhyOcvqxw==
- dependencies:
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- lodash "^4.17.11"
-
-"@0x/sol-trace@^3.0.7":
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/@0x/sol-trace/-/sol-trace-3.0.7.tgz#4fb6f77853ecd5be80cb36d3083af84f0770ba5f"
- integrity sha512-7BJDoKgF6mjDjMJEF6RqOy9pMqioBLighWA/dnro+nRjC/Ff6EPgtczKmzhoRHGwdnjQWU9RzzuhGFKuzNLJIA==
- dependencies:
- "@0x/sol-tracing-utils" "^7.0.7"
- "@0x/subproviders" "^6.0.7"
- "@0x/typescript-typings" "^5.0.2"
- chalk "^2.3.0"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- lodash "^4.17.11"
- loglevel "^1.6.1"
- web3-provider-engine "14.0.6"
-
-"@0x/sol-tracing-utils@^7.0.7":
- version "7.0.7"
- resolved "https://registry.yarnpkg.com/@0x/sol-tracing-utils/-/sol-tracing-utils-7.0.7.tgz#241d2d48831496400fb2882e547654ee264f4538"
- integrity sha512-4T76E+gBjF0NPCFdzS3SPPUULUTqVsppuFwe1qxHj7Yc4iIgW+uhJ6qIZ1IRlOTHAAA2a/7uvtQ0tNf2h3TYdg==
- dependencies:
- "@0x/dev-utils" "^3.2.0"
- "@0x/sol-compiler" "^4.0.7"
- "@0x/sol-resolver" "^3.0.3"
- "@0x/subproviders" "^6.0.7"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- "@types/solidity-parser-antlr" "^0.2.3"
- chalk "^2.3.0"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- glob "^7.1.2"
- istanbul "^0.4.5"
- lodash "^4.17.11"
- loglevel "^1.6.1"
- mkdirp "^0.5.1"
- rimraf "^2.6.2"
- semaphore-async-await "^1.5.1"
- solc "^0.5.5"
- solidity-parser-antlr "^0.4.2"
-
-"@0x/subproviders@^6.0.2":
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.0.2.tgz#2d00a62d0db81d865dedd0ae43d7594c061e033e"
- integrity sha512-YEu+FSSTDqhdnqwVEuT/BgX62iy6aZHIax6L7mPGSyV2o+scFtbR4FKsYRJGeHv2l7BkjCv8rHeSvE4oaw5Lew==
- dependencies:
- "@0x/assert" "^3.0.2"
- "@0x/types" "^3.1.1"
- "@0x/typescript-typings" "^5.0.1"
- "@0x/utils" "^5.1.1"
- "@0x/web3-wrapper" "^7.0.2"
- "@ledgerhq/hw-app-eth" "^4.3.0"
- "@ledgerhq/hw-transport-u2f" "4.24.0"
- "@types/hdkey" "^0.7.0"
- "@types/web3-provider-engine" "^14.0.0"
- bip39 "^2.5.0"
- bn.js "^4.11.8"
- ethereum-types "^3.0.0"
- ethereumjs-tx "^1.3.5"
- ethereumjs-util "^5.1.1"
- ganache-core "^2.6.0"
- hdkey "^0.7.1"
- json-rpc-error "2.0.0"
- lodash "^4.17.11"
- semaphore-async-await "^1.5.1"
- web3-provider-engine "14.0.6"
- optionalDependencies:
- "@ledgerhq/hw-transport-node-hid" "^4.3.0"
-
-"@0x/subproviders@^6.0.7":
- version "6.0.7"
- resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.0.7.tgz#caa6cfb06add691a254908e8ec210bb4417b0665"
- integrity sha512-hhQtn2Rt+OmQoEIc2Ub2u4t/RTAj5VMP8kPxabkbz0eVFxcU4XYxfBJ1hBkG2F+reNhPGCQYmvZucLqWvgCH5Q==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- "@0x/web3-wrapper" "^7.0.6"
- "@ledgerhq/hw-app-eth" "^4.3.0"
- "@ledgerhq/hw-transport-u2f" "4.24.0"
- "@types/hdkey" "^0.7.0"
- "@types/web3-provider-engine" "^14.0.0"
- bip39 "^2.5.0"
- bn.js "^4.11.8"
- ethereum-types "^3.1.0"
- ethereumjs-tx "^1.3.5"
- ethereumjs-util "^5.1.1"
- ganache-core "^2.9.0-istanbul.0"
- hdkey "^0.7.1"
- json-rpc-error "2.0.0"
- lodash "^4.17.11"
- semaphore-async-await "^1.5.1"
- web3-provider-engine "14.0.6"
- optionalDependencies:
- "@ledgerhq/hw-transport-node-hid" "^4.3.0"
-
-"@0x/ts-doc-gen@^0.0.13":
- version "0.0.13"
- resolved "https://registry.yarnpkg.com/@0x/ts-doc-gen/-/ts-doc-gen-0.0.13.tgz#0f646d03f951db34b0362948b9ff068d55f30672"
- integrity sha512-vEOWfWl9qXDnGG9QBamf0pLzYtIo+cppTU/GzhDhetdcU/3ay57kDU+5Ytg6xybsfQ4I4Mk2Dee+Gg5Lhoi5uw==
- dependencies:
- "@0x/typescript-typings" "^4.2.2"
- "@0x/utils" "^4.3.3"
- glob "^7.1.4"
- promisify-child-process "^3.1.1"
- rimraf "^2.6.3"
- typedoc "^0.15.0"
- typedoc-plugin-markdown "^2.1.0"
- yargs "^10.0.3"
-
-"@0x/tslint-config@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@0x/tslint-config/-/tslint-config-4.0.0.tgz#f73eb8d4b84e8825e986df787711dc68ed896b46"
- integrity sha512-kFTp6huh3aAzxBr+41LYyYSS4P040vdAcyVRYfQE6jvtzVCG0NpMo5x3RVdXJrQxGJ1yAUMLaWYT3QOzFhIhJg==
- dependencies:
- lodash "^4.17.11"
- tslint "5.11.0"
- tslint-eslint-rules "5.4.0"
- tslint-react "^3.2.0"
- tsutils "3.0.0"
-
-"@0x/types@^2.4.1":
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/@0x/types/-/types-2.4.3.tgz#ea014889789e9013fdf48ce97b79f2c016e10fb3"
- integrity sha512-3z4ca9fb9pyTu9lJhTSll5EuEthkA3tLAayyZixCoCnwi4ok6PJ83PnMMsSxlRY2iXr7QGbrQr6nU64YWk2WjA==
- dependencies:
- "@types/node" "*"
- bignumber.js "~8.0.2"
- ethereum-types "^2.1.6"
-
-"@0x/types@^3.1.1":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.1.1.tgz#b20ca76e9516201b9c27621f941696f41ffc9fac"
- integrity sha512-+TQmzH+chWeDWpc+Lce3/q4X2UEHFfAwZcWrV7tEQ5EVAJvph7gpKawRW2XRsmHeQDSHBmiiBdSZ8Rc/OAjvlQ==
- dependencies:
- "@types/node" "*"
- bignumber.js "~9.0.0"
- ethereum-types "^3.0.0"
-
-"@0x/types@^3.1.2":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.1.2.tgz#85fb2e6de4b459bcb162a6065dcd7dc8bdb233ce"
- integrity sha512-jweDayth9SSmvhx2Z5cARqQAdB9luzDm+GCzmpqQXYpdPPUzUMXQWjepGouLUgLEoBEq7Xm7DkY+qcTq3ekrSQ==
- dependencies:
- "@types/node" "*"
- bignumber.js "~9.0.0"
- ethereum-types "^3.1.0"
-
-"@0x/typescript-typings@^4.2.2":
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-4.2.4.tgz#0858639ddfdf7e9e1a3f9fd8f7d8f2e8ebfdce85"
- integrity sha512-yIg8q/bj9+Y0OzNuq59D3JDe4OoQR3bU2QKy+7d8NV6CIfA0GqfWWS+JFdUB45S45qT5P0EmThh/szQ7zuW4oQ==
- dependencies:
- "@types/bn.js" "^4.11.0"
- "@types/react" "*"
- bignumber.js "~8.0.2"
- ethereum-types "^2.1.4"
- popper.js "1.14.3"
-
-"@0x/typescript-typings@^4.2.4":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-4.3.0.tgz#4813a996ac5101841d1c22f4aa1738ab56168857"
- integrity sha512-6IH2JyKyl33+40tJ5rEhaMPTS2mVuRvoNmoXlCd/F0GPYSsDHMGObIXOkx+Qsw5SyCmqNs/3CTLeeCCqiSUdaw==
- dependencies:
- "@types/bn.js" "^4.11.0"
- "@types/react" "*"
- bignumber.js "~8.0.2"
- ethereum-types "^2.1.6"
- popper.js "1.14.3"
-
-"@0x/typescript-typings@^5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.0.1.tgz#031e291cc506ecd26d3fe10adf618f4f51ff1510"
- integrity sha512-zSA39URHkFnL16WD30VMa8wL8va0Khpx9APHffdPWpBOr9SUPdADtae5HO4iNCYvSgo3mrtPlKID2nIqREIHOQ==
- dependencies:
- "@types/bn.js" "^4.11.0"
- "@types/react" "*"
- bignumber.js "~9.0.0"
- ethereum-types "^3.0.0"
- popper.js "1.14.3"
-
-"@0x/typescript-typings@^5.0.2":
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.0.2.tgz#5589ee8721165d0aa2e5290e28372c560970ab9d"
- integrity sha512-syOJE/cN8lg4Homh/TGZPiS493NBmKBFjlaeOpnrjjzGcCG2SqY4nbj+VjGrvhJdw9/KM/J1nWqsCV+KSDORhg==
- dependencies:
- "@types/bn.js" "^4.11.0"
- "@types/react" "*"
- bignumber.js "~9.0.0"
- ethereum-types "^3.1.0"
- popper.js "1.14.3"
-
-"@0x/utils@^4.3.3":
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-4.4.2.tgz#8c7899f0f768859a92e805cfa93e57f921cf6122"
- integrity sha512-kR0KncZP/m+V5HDUlNNOgcQXmnLA2e7lfovUxNI1XWB8djXDlB42ukqK8A4KRtxlt+A8CsXR64OcXvO8c6wQgA==
- dependencies:
- "@0x/types" "^2.4.1"
- "@0x/typescript-typings" "^4.2.4"
- "@types/node" "*"
- abortcontroller-polyfill "^1.1.9"
- bignumber.js "~8.0.2"
- chalk "^2.3.0"
- detect-node "2.0.3"
- ethereum-types "^2.1.4"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- isomorphic-fetch "2.2.1"
- js-sha3 "^0.7.0"
- lodash "^4.17.11"
-
-"@0x/utils@^5.1.1":
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.1.1.tgz#1895529b5ec313f7056819458c8f55fbb19256cb"
- integrity sha512-DRNKtAqZR0vFA1XdUhBwaIz2qEjWS1xqdvzQl/Dn8OLJH+1sxb+1UmtG6fOlbu7pTLbF+CWoaYf2+pvQfcF//g==
- dependencies:
- "@0x/types" "^3.1.1"
- "@0x/typescript-typings" "^5.0.1"
- "@types/node" "*"
- abortcontroller-polyfill "^1.1.9"
- bignumber.js "~9.0.0"
- chalk "^2.3.0"
- detect-node "2.0.3"
- ethereum-types "^3.0.0"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- isomorphic-fetch "2.2.1"
- js-sha3 "^0.7.0"
- lodash "^4.17.11"
-
-"@0x/utils@^5.4.0":
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.4.0.tgz#1266a28a142e54319d9731028cf20adfdc31465f"
- integrity sha512-0Tc7D/AGmppc4gLdWWTxTmZWVWLgI8crjwp2i5njBSPMGeLpwBR24m7kRlZMX0FvtmRRrQQnYC2VyJLgABFSkA==
- dependencies:
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@types/node" "*"
- abortcontroller-polyfill "^1.1.9"
- bignumber.js "~9.0.0"
- chalk "^2.3.0"
- detect-node "2.0.3"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- isomorphic-fetch "2.2.1"
- js-sha3 "^0.7.0"
- lodash "^4.17.11"
-
-"@0x/web3-wrapper@^7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.0.2.tgz#afdd12a3c2518207d56372397ae91e4a90634f46"
- integrity sha512-kSmrg0E0ZmuNKTKmanxHlRUO5dom8Wr2eDmgG+NZcuWY3EJKIkuxFsz6KRUfoYbVOVT22ZQZazzZIGwoz/LObg==
- dependencies:
- "@0x/assert" "^3.0.2"
- "@0x/json-schemas" "^5.0.2"
- "@0x/typescript-typings" "^5.0.1"
- "@0x/utils" "^5.1.1"
- ethereum-types "^3.0.0"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- lodash "^4.17.11"
-
-"@0x/web3-wrapper@^7.0.6":
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.0.6.tgz#d0ccbc59839b5dc35fa5f94e1fdd6fb37b2d53ab"
- integrity sha512-ErVNPzD4qjVCEigzg7SA7nSnKW1XnoF0krSbUNKqg2AXiLWU4J81bp+lqf08IzjcMdq4k+d7VYc9jYh88xRTRw==
- dependencies:
- "@0x/assert" "^3.0.6"
- "@0x/json-schemas" "^5.0.6"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.0"
- ethereum-types "^3.1.0"
- ethereumjs-util "^5.1.1"
- ethers "~4.0.4"
- lodash "^4.17.11"
-
-"@babel/runtime@^7.1.5", "@babel/runtime@^7.3.1":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
- integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
- dependencies:
- regenerator-runtime "^0.13.2"
-
-"@ledgerhq/devices@^4.68.0":
- version "4.68.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.68.0.tgz#bc674a6b00261ab916b1a34c4f2b5a62f0c94107"
- integrity sha512-qVTy3YNDjBpg9oJGJxl00ZGPJLBCw+2PHHHLZw/xK57sPKRAdHJ+KTAxS707hRdNaT4xhLiTQuCHpPfIsYVDcQ==
- dependencies:
- "@ledgerhq/errors" "^4.68.0"
- "@ledgerhq/logs" "^4.64.0"
- rxjs "^6.5.2"
-
-"@ledgerhq/errors@^4.68.0":
- version "4.68.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.68.0.tgz#311980a3e2b3d43b2f7381cb6b122f5a57e2539b"
- integrity sha512-C+VjnCili9OgT4xaCpn0CYH+ri6BaJ4If7fFb5cXEj5WrahXBOLx6+tOWLaVXUIbBBaK+ia62+eSLecV2VMCqw==
-
-"@ledgerhq/hw-app-eth@^4.3.0":
- version "4.68.1"
- resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.68.1.tgz#ba99a3d0655cc3c5efdb00002ddbdf6ba62b3a40"
- integrity sha512-Vq0QMgZndjnf3zc6312tiX32Ktw0ddaL7d0P9S1XpP1Swx7EdjMYbxbGSdFD4iHiZ/ZVhfJNq1T7wEQ3K23RNA==
- dependencies:
- "@ledgerhq/errors" "^4.68.0"
- "@ledgerhq/hw-transport" "^4.68.0"
-
-"@ledgerhq/hw-transport-node-hid-noevents@^4.68.0":
- version "4.68.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.68.0.tgz#8b679b84132c38e1a5f9cad685994f07c05ac791"
- integrity sha512-05I+svIggJPhJnEGssdrYuNbhs2DLbuA2d9T0cU0ZQYrsn9YuPefKCvPpiq6Z0kysJzOorthPYbEwm/3JCKh2Q==
- dependencies:
- "@ledgerhq/devices" "^4.68.0"
- "@ledgerhq/errors" "^4.68.0"
- "@ledgerhq/hw-transport" "^4.68.0"
- "@ledgerhq/logs" "^4.64.0"
- node-hid "^0.7.9"
-
-"@ledgerhq/hw-transport-node-hid@^4.3.0":
- version "4.68.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.68.0.tgz#85d7dc76af4178941eb9d781ae240a6a1b98d66c"
- integrity sha512-c62tqDy7MkRswUXEA7w3GXOryeBH34YV4/g4HwgaWGlQv0M7fWPZGCEvaDPHdJxc6WbfKLbUFK8/RMUK5ei1gg==
- dependencies:
- "@ledgerhq/devices" "^4.68.0"
- "@ledgerhq/errors" "^4.68.0"
- "@ledgerhq/hw-transport" "^4.68.0"
- "@ledgerhq/hw-transport-node-hid-noevents" "^4.68.0"
- "@ledgerhq/logs" "^4.64.0"
- lodash "^4.17.11"
- node-hid "^0.7.9"
- usb "^1.6.0"
-
-"@ledgerhq/hw-transport-u2f@4.24.0":
- version "4.24.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-4.24.0.tgz#d67cfc4abf6d9a900ed45f2e2df7fe06dfdff5c7"
- integrity sha512-/gFjhkM0sJfZ7iUf8HoIkGufAWgPacrbb1LW0TvWnZwvsATVJ1BZJBtrr90Wo401PKsjVwYtFt3Ce4gOAUv9jQ==
- dependencies:
- "@ledgerhq/hw-transport" "^4.24.0"
- u2f-api "0.2.7"
-
-"@ledgerhq/hw-transport@^4.24.0", "@ledgerhq/hw-transport@^4.68.0":
- version "4.68.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.68.0.tgz#47a2f2de6bb4ad7003a4da1f2f61730bb86f2f28"
- integrity sha512-+zvy8uI/4hB1lIjN/GBseCHG1hLDzySuJpcI4V4Zy5TPP8D/igw1F56nha5A8fRvzCCPl1zPQvTwg6Fj9lKdSw==
- dependencies:
- "@ledgerhq/devices" "^4.68.0"
- "@ledgerhq/errors" "^4.68.0"
- events "^3.0.0"
-
-"@ledgerhq/logs@^4.64.0":
- version "4.64.0"
- resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-4.64.0.tgz#19a335e3f2d9188188437f8dabb06e0fd45b0052"
- integrity sha512-NwgA7q1CXWMkqxoHVaSTk0gJUGbiBbWTM7Uod/Zz8EWNa1Ns0yHthCcSS279htP6oQplEaSppzsie5bcbwNApg==
-
-"@sindresorhus/is@^0.14.0":
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
- integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
-
-"@szmarczak/http-timer@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
- integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
- dependencies:
- defer-to-connect "^1.0.1"
-
-"@types/bignumber.js@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969"
- integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==
- dependencies:
- bignumber.js "*"
-
-"@types/bn.js@^4.11.0", "@types/bn.js@^4.11.4":
- version "4.11.5"
- resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.5.tgz#40e36197433f78f807524ec623afcf0169ac81dc"
- integrity sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==
- dependencies:
- "@types/node" "*"
-
-"@types/bn.js@^4.11.3":
- version "4.11.6"
- resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
- integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
- dependencies:
- "@types/node" "*"
-
-"@types/ethereum-protocol@*":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/ethereum-protocol/-/ethereum-protocol-1.0.0.tgz#416e3827d5fdfa4658b0045b35a008747871b271"
- integrity sha512-3DiI3Zxf81CgX+VhxNNFJBv/sfr1BFBKQK2sQ85hU9FwWJJMWV5gRDV79OUNShiwj3tYYIezU94qpucsb3dThQ==
- dependencies:
- bignumber.js "7.2.1"
-
-"@types/events@*":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
- integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
-
-"@types/glob@*":
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
- integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
- dependencies:
- "@types/events" "*"
- "@types/minimatch" "*"
- "@types/node" "*"
-
-"@types/hdkey@^0.7.0":
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/@types/hdkey/-/hdkey-0.7.0.tgz#6734d138e3c597f241be8fae2e60c2949bc3af87"
- integrity sha512-hS/ueljJBb6i7r7VqhgmBVmDqGKMqQg2nlGIaf71CCG6+iGNE7yeaHgtBWR/wveD+o+K0ma0VE/XweUBHHTQFQ==
- dependencies:
- "@types/node" "*"
-
-"@types/js-combinatorics@^0.5.29":
- version "0.5.31"
- resolved "https://registry.yarnpkg.com/@types/js-combinatorics/-/js-combinatorics-0.5.31.tgz#a61a3f625009e2e693492c158ac8afb243efecad"
- integrity sha512-0JGeWYJdHIpX2gttyxqnzpKwK3KmyFZysWI8+fnXdiOo/kEFxDMdo/pwhrtBrHvYgRAsDNJCSQzgA+m8vbHvFw==
-
-"@types/jsonstream@^0.8.30":
- version "0.8.30"
- resolved "https://registry.yarnpkg.com/@types/jsonstream/-/jsonstream-0.8.30.tgz#1c6b386df42c6d93bf7f0cd339eab6fb56bdc124"
- integrity sha512-KqHs2eAapKL7ZKUiKI/giUYPVgkoDXkVGFehk3goo+3Q8qwxVVRC3iwg+hK/THORbcri4RRxTtlm3JoSY1KZLQ==
- dependencies:
- "@types/node" "*"
-
-"@types/lodash@4.14.104":
- version "4.14.104"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80"
- integrity sha512-ufQcVg4daO8xQ5kopxRHanqFdL4AI7ondQkV+2f+7mz3gvp0LkBx2zBRC6hfs3T87mzQFmf5Fck7Fi145Ul6NQ==
-
-"@types/minimatch@*", "@types/minimatch@3.0.3", "@types/minimatch@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
- integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
-
-"@types/mocha@^5.2.7":
- version "5.2.7"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea"
- integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==
-
-"@types/node@*":
- version "12.6.8"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
- integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==
-
-"@types/node@^10.12.18", "@types/node@^10.3.2":
- version "10.14.13"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7"
- integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==
-
-"@types/node@^12.6.1":
- version "12.12.21"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.21.tgz#aa44a6363291c7037111c47e4661ad210aded23f"
- integrity sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA==
-
-"@types/prop-types@*":
- version "15.7.1"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6"
- integrity sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==
-
-"@types/react@*":
- version "16.8.23"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2"
- integrity sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA==
- dependencies:
- "@types/prop-types" "*"
- csstype "^2.2.0"
-
-"@types/rimraf@^2.0.3":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.3.tgz#0199a46af106729ba14213fda7b981278d8c84f2"
- integrity sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==
- dependencies:
- "@types/glob" "*"
- "@types/node" "*"
-
-"@types/solidity-parser-antlr@^0.2.3":
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/@types/solidity-parser-antlr/-/solidity-parser-antlr-0.2.3.tgz#bb2d9c6511bf483afe4fc3e2714da8a924e59e3f"
- integrity sha512-FoSyZT+1TTaofbEtGW1oC9wHND1YshvVeHerME/Jh6gIdHbBAWFW8A97YYqO/dpHcFjIwEPEepX0Efl2ckJgwA==
-
-"@types/uuid-validate@^0.0.1":
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/@types/uuid-validate/-/uuid-validate-0.0.1.tgz#b4eedecbd9db25851490d65a58f13feaa89dd509"
- integrity sha512-RbX9q0U00SLoV+l7loYX0Wrtv4QTClBC0QcdNts6x2b5G1HJN8NI9YlS1HNA6THrI9EH3OXSgya6eMQIlDjKFA==
-
-"@types/uuid@^3.4.3":
- version "3.4.5"
- resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.5.tgz#d4dc10785b497a1474eae0ba7f0cb09c0ddfd6eb"
- integrity sha512-MNL15wC3EKyw1VLF+RoVO4hJJdk9t/Hlv3rt1OL65Qvuadm4BYo6g9ZJQqoq7X8NBFSsQXgAujWciovh2lpVjA==
- dependencies:
- "@types/node" "*"
-
-"@types/web3-provider-engine@^14.0.0":
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/@types/web3-provider-engine/-/web3-provider-engine-14.0.0.tgz#43adc3b39dc9812b82aef8cd2d66577665ad59b0"
- integrity sha512-yHr8mX2SoX3JNyfqdLXdO1UobsGhfiwSgtekbVxKLQrzD7vtpPkKbkIVsPFOhvekvNbPsCmDyeDCLkpeI9gSmA==
- dependencies:
- "@types/ethereum-protocol" "*"
-
-"@types/websocket@^0.0.40":
- version "0.0.40"
- resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-0.0.40.tgz#887cd632a8b3d0d11da7b9d0d106af85997b358c"
- integrity sha512-ldteZwWIgl9cOy7FyvYn+39Ah4+PfpVE72eYKw75iy2L0zTbhbcwvzeJ5IOu6DQP93bjfXq0NGHY6FYtmYoqFQ==
- dependencies:
- "@types/events" "*"
- "@types/node" "*"
-
-"@types/yargs@^11.0.0":
- version "11.1.3"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-11.1.3.tgz#33c8ebf05f78f1edeb249c1cde1a42ae57f5664e"
- integrity sha512-moBUF6X8JsK5MbLZGP3vCfG/TVHZHsaePj3EimlLKp8+ESUjGjpXalxyn90a2L9fTM2ZGtW4swb6Am1DvVRNGA==
-
-"@web3-js/scrypt-shim@^0.1.0":
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc"
- integrity sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw==
- dependencies:
- scryptsy "^2.1.0"
- semver "^6.3.0"
-
-"@web3-js/websocket@^1.0.29":
- version "1.0.30"
- resolved "https://registry.yarnpkg.com/@web3-js/websocket/-/websocket-1.0.30.tgz#9ea15b7b582cf3bf3e8bc1f4d3d54c0731a87f87"
- integrity sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==
- dependencies:
- debug "^2.2.0"
- es5-ext "^0.10.50"
- nan "^2.14.0"
- typedarray-to-buffer "^3.1.5"
- yaeti "^0.0.6"
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
- integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
-abbrev@1.0.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
- integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
-
-abortcontroller-polyfill@^1.1.9:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.3.0.tgz#de69af32ae926c210b7efbcc29bf644ee4838b00"
- integrity sha512-lbWQgf+eRvku3va8poBlDBO12FigTQr9Zb7NIjXrePrhxWVKdCP2wbDl1tLDaYa18PWTom3UEWwdH13S46I+yA==
-
-abstract-leveldown@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57"
- integrity sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==
- dependencies:
- xtend "~4.0.0"
-
-abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93"
- integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==
- dependencies:
- xtend "~4.0.0"
-
-abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6"
- integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==
- dependencies:
- xtend "~4.0.0"
-
-abstract-leveldown@~2.6.0:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8"
- integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==
- dependencies:
- xtend "~4.0.0"
-
-accepts@~1.3.7:
- version "1.3.7"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
- integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
- dependencies:
- mime-types "~2.1.24"
- negotiator "0.6.2"
-
-aes-js@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
- integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=
-
-aes-js@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a"
- integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==
-
-ajv@^6.5.5:
- version "6.10.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
- integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
- dependencies:
- fast-deep-equal "^2.0.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
- integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-
-ansi-colors@3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
- integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
- integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-ansi-regex@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
- integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-any-promise@1.3.0, any-promise@^1.0.0, any-promise@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
- integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
-
-anymatch@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
- integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
- integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-are-we-there-yet@~1.1.2:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
- integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.6"
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
- integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-
-asn1.js@^4.0.0:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
- integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-asn1@~0.2.3:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
- integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
- dependencies:
- safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
- integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-assertion-error@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
- integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
-
-async-eventemitter@^0.2.2:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca"
- integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==
- dependencies:
- async "^2.4.0"
-
-async-limiter@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
- integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
-
-async@1.x, async@^1.4.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
- integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-
-async@2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
- integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
- dependencies:
- lodash "^4.17.11"
-
-async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
- integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
- dependencies:
- lodash "^4.17.14"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
- integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
- integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
-
-babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-babel-core@^6.0.14, babel-core@^6.26.0:
- version "6.26.3"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
- integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
- dependencies:
- babel-code-frame "^6.26.0"
- babel-generator "^6.26.0"
- babel-helpers "^6.24.1"
- babel-messages "^6.23.0"
- babel-register "^6.26.0"
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- convert-source-map "^1.5.1"
- debug "^2.6.9"
- json5 "^0.5.1"
- lodash "^4.17.4"
- minimatch "^3.0.4"
- path-is-absolute "^1.0.1"
- private "^0.1.8"
- slash "^1.0.0"
- source-map "^0.5.7"
-
-babel-generator@^6.26.0:
- version "6.26.1"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
- integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
- dependencies:
- babel-messages "^6.23.0"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- detect-indent "^4.0.0"
- jsesc "^1.3.0"
- lodash "^4.17.4"
- source-map "^0.5.7"
- trim-right "^1.0.1"
-
-babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
- integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
- dependencies:
- babel-helper-explode-assignable-expression "^6.24.1"
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-call-delegate@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
- integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
- dependencies:
- babel-helper-hoist-variables "^6.24.1"
- babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-define-map@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
- integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- lodash "^4.17.4"
-
-babel-helper-explode-assignable-expression@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
- integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
- dependencies:
- babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-function-name@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
- integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
- dependencies:
- babel-helper-get-function-arity "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-get-function-arity@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
- integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-hoist-variables@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
- integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-optimise-call-expression@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
- integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-regex@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
- integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=
- dependencies:
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- lodash "^4.17.4"
-
-babel-helper-remap-async-to-generator@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
- integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-replace-supers@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
- integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
- dependencies:
- babel-helper-optimise-call-expression "^6.24.1"
- babel-messages "^6.23.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helpers@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
- integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
- dependencies:
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-messages@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
- integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-check-es2015-constants@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
- integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-syntax-async-functions@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
- integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
-
-babel-plugin-syntax-exponentiation-operator@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
- integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
-
-babel-plugin-syntax-trailing-function-commas@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
- integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
-
-babel-plugin-transform-async-to-generator@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
- integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=
- dependencies:
- babel-helper-remap-async-to-generator "^6.24.1"
- babel-plugin-syntax-async-functions "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-arrow-functions@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
- integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
- integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-block-scoping@^6.23.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
- integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
- dependencies:
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- lodash "^4.17.4"
-
-babel-plugin-transform-es2015-classes@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
- integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
- dependencies:
- babel-helper-define-map "^6.24.1"
- babel-helper-function-name "^6.24.1"
- babel-helper-optimise-call-expression "^6.24.1"
- babel-helper-replace-supers "^6.24.1"
- babel-messages "^6.23.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-computed-properties@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
- integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
- dependencies:
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-destructuring@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
- integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
- integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4=
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-for-of@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
- integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-function-name@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
- integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-literals@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
- integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
- integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=
- dependencies:
- babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
- version "6.26.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
- integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
- dependencies:
- babel-plugin-transform-strict-mode "^6.24.1"
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-types "^6.26.0"
-
-babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
- integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=
- dependencies:
- babel-helper-hoist-variables "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-modules-umd@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
- integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg=
- dependencies:
- babel-plugin-transform-es2015-modules-amd "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-object-super@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
- integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40=
- dependencies:
- babel-helper-replace-supers "^6.24.1"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-parameters@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
- integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
- dependencies:
- babel-helper-call-delegate "^6.24.1"
- babel-helper-get-function-arity "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
- integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-spread@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
- integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-sticky-regex@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
- integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw=
- dependencies:
- babel-helper-regex "^6.24.1"
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-template-literals@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
- integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
- integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-unicode-regex@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
- integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek=
- dependencies:
- babel-helper-regex "^6.24.1"
- babel-runtime "^6.22.0"
- regexpu-core "^2.0.0"
-
-babel-plugin-transform-exponentiation-operator@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
- integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
- dependencies:
- babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
- babel-plugin-syntax-exponentiation-operator "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-regenerator@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
- integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
- dependencies:
- regenerator-transform "^0.10.0"
-
-babel-plugin-transform-strict-mode@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
- integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-preset-env@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
- integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==
- dependencies:
- babel-plugin-check-es2015-constants "^6.22.0"
- babel-plugin-syntax-trailing-function-commas "^6.22.0"
- babel-plugin-transform-async-to-generator "^6.22.0"
- babel-plugin-transform-es2015-arrow-functions "^6.22.0"
- babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
- babel-plugin-transform-es2015-block-scoping "^6.23.0"
- babel-plugin-transform-es2015-classes "^6.23.0"
- babel-plugin-transform-es2015-computed-properties "^6.22.0"
- babel-plugin-transform-es2015-destructuring "^6.23.0"
- babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
- babel-plugin-transform-es2015-for-of "^6.23.0"
- babel-plugin-transform-es2015-function-name "^6.22.0"
- babel-plugin-transform-es2015-literals "^6.22.0"
- babel-plugin-transform-es2015-modules-amd "^6.22.0"
- babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
- babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
- babel-plugin-transform-es2015-modules-umd "^6.23.0"
- babel-plugin-transform-es2015-object-super "^6.22.0"
- babel-plugin-transform-es2015-parameters "^6.23.0"
- babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
- babel-plugin-transform-es2015-spread "^6.22.0"
- babel-plugin-transform-es2015-sticky-regex "^6.22.0"
- babel-plugin-transform-es2015-template-literals "^6.22.0"
- babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
- babel-plugin-transform-es2015-unicode-regex "^6.22.0"
- babel-plugin-transform-exponentiation-operator "^6.22.0"
- babel-plugin-transform-regenerator "^6.22.0"
- browserslist "^3.2.6"
- invariant "^2.2.2"
- semver "^5.3.0"
-
-babel-register@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
- integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
- dependencies:
- babel-core "^6.26.0"
- babel-runtime "^6.26.0"
- core-js "^2.5.0"
- home-or-tmp "^2.0.0"
- lodash "^4.17.4"
- mkdirp "^0.5.1"
- source-map-support "^0.4.15"
-
-babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
- integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.11.0"
-
-babel-template@^6.24.1, babel-template@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
- integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
- dependencies:
- babel-runtime "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- lodash "^4.17.4"
-
-babel-traverse@^6.24.1, babel-traverse@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
- integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
- dependencies:
- babel-code-frame "^6.26.0"
- babel-messages "^6.23.0"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- debug "^2.6.8"
- globals "^9.18.0"
- invariant "^2.2.2"
- lodash "^4.17.4"
-
-babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
- integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
- dependencies:
- babel-runtime "^6.26.0"
- esutils "^2.0.2"
- lodash "^4.17.4"
- to-fast-properties "^1.0.3"
-
-babelify@^7.3.0:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5"
- integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=
- dependencies:
- babel-core "^6.0.14"
- object-assign "^4.0.0"
-
-babylon@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
- integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
-
-backbone@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12"
- integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==
- dependencies:
- underscore ">=1.8.3"
-
-backoff@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"
- integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=
- dependencies:
- precond "0.2"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
- integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-base-x@^3.0.2:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.6.tgz#de047ec95f5f7b99ae63d830a2a894c96538b2cd"
- integrity sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w==
- dependencies:
- safe-buffer "^5.0.1"
-
-base64-js@^1.0.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
- integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
- integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
- dependencies:
- tweetnacl "^0.14.3"
-
-bignumber.js@*, bignumber.js@~9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075"
- integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==
-
-bignumber.js@7.2.1:
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f"
- integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==
-
-bignumber.js@~8.0.2:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.0.2.tgz#d8c4e1874359573b1ef03011a2d861214aeef137"
- integrity sha512-EiuvFrnbv0jFixEQ9f58jo7X0qI2lNGIr/MxntmVzQc5JUweDSh8y8hbTCAomFtqwUPIOWcLXP0VEOSZTG7FFw==
-
-binary-extensions@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
- integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
-
-bindings@^1.2.1, bindings@^1.4.0, bindings@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
- integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
- dependencies:
- file-uri-to-path "1.0.0"
-
-bip39@2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235"
- integrity sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==
- dependencies:
- create-hash "^1.1.0"
- pbkdf2 "^3.0.9"
- randombytes "^2.0.1"
- safe-buffer "^5.0.1"
- unorm "^1.3.3"
-
-bip39@^2.5.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.6.0.tgz#9e3a720b42ec8b3fbe4038f1e445317b6a99321c"
- integrity sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==
- dependencies:
- create-hash "^1.1.0"
- pbkdf2 "^3.0.9"
- randombytes "^2.0.1"
- safe-buffer "^5.0.1"
- unorm "^1.3.3"
-
-bip66@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22"
- integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=
- dependencies:
- safe-buffer "^5.0.1"
-
-bl@^1.0.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
- integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
- dependencies:
- readable-stream "^2.3.5"
- safe-buffer "^5.1.1"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
- dependencies:
- inherits "~2.0.0"
-
-bluebird@^2.9.34:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
- integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=
-
-bluebird@^3.5.0:
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
- integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
-
-bn.js@4.11.6:
- version "4.11.6"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
- integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU=
-
-bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
- integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-
-body-parser@1.19.0, body-parser@^1.16.0:
- version "1.19.0"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
- integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
- dependencies:
- bytes "3.1.0"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.2"
- http-errors "1.7.2"
- iconv-lite "0.4.24"
- on-finished "~2.3.0"
- qs "6.7.0"
- raw-body "2.4.0"
- type-is "~1.6.17"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-brorand@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
- integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-
-browser-stdout@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
- integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
-
-browser-stdout@1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
- integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
- integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
- integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
- integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-browserify-rsa@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
- integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
- dependencies:
- bn.js "^4.1.0"
- randombytes "^2.0.1"
-
-browserify-sha3@^0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/browserify-sha3/-/browserify-sha3-0.0.4.tgz#086c47b8c82316c9d47022c26185954576dd8e26"
- integrity sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=
- dependencies:
- js-sha3 "^0.6.1"
- safe-buffer "^5.1.1"
-
-browserify-sign@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
- integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
- dependencies:
- bn.js "^4.1.1"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.2"
- elliptic "^6.0.0"
- inherits "^2.0.1"
- parse-asn1 "^5.0.0"
-
-browserslist@^3.2.6:
- version "3.2.8"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
- integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==
- dependencies:
- caniuse-lite "^1.0.30000844"
- electron-to-chromium "^1.3.47"
-
-bs58@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
- integrity sha1-VZCNWPGYKrogCPob7Y+RmYopv40=
-
-bs58@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
- integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
- dependencies:
- base-x "^3.0.2"
-
-bs58check@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
- integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
- dependencies:
- bs58 "^4.0.0"
- create-hash "^1.1.0"
- safe-buffer "^5.1.2"
-
-buffer-alloc-unsafe@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
- integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
-
-buffer-alloc@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
- integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
- dependencies:
- buffer-alloc-unsafe "^1.1.0"
- buffer-fill "^1.0.0"
-
-buffer-crc32@~0.2.3:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
- integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
-
-buffer-fill@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
- integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
-
-buffer-from@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-buffer-to-arraybuffer@^0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a"
- integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
- integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
-
-buffer@^5.0.5, buffer@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
- integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
-
-builtin-modules@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
- integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
-
-bytes@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
- integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-
-bytewise-core@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42"
- integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=
- dependencies:
- typewise-core "^1.2"
-
-bytewise@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e"
- integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=
- dependencies:
- bytewise-core "^1.2.2"
- typewise "^1.0.3"
-
-cacheable-request@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
- integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
- dependencies:
- clone-response "^1.0.2"
- get-stream "^5.1.0"
- http-cache-semantics "^4.0.0"
- keyv "^3.0.0"
- lowercase-keys "^2.0.0"
- normalize-url "^4.1.0"
- responselike "^1.0.2"
-
-cachedown@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15"
- integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU=
- dependencies:
- abstract-leveldown "^2.4.1"
- lru-cache "^3.2.0"
-
-camelcase@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
- integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-
-camelcase@^5.0.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-caniuse-lite@^1.0.30000844:
- version "1.0.30000984"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000984.tgz#dc96c3c469e9bcfc6ad5bdd24c77ec918ea76fe0"
- integrity sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA==
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
- integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-
-chai-as-promised@^7.1.0:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
- integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==
- dependencies:
- check-error "^1.0.2"
-
-chai-bignumber@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/chai-bignumber/-/chai-bignumber-3.0.0.tgz#e90cf1f468355bbb11a9acd051222586cd2648a9"
- integrity sha512-SubOtaSI2AILWTWe2j0c6i2yFT/f9J6UBjeVGDuwDiPLkF/U5+/eTWUE3sbCZ1KgcPF6UJsDVYbIxaYA097MQA==
-
-chai@^4.0.1:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
- integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==
- dependencies:
- assertion-error "^1.1.0"
- check-error "^1.0.2"
- deep-eql "^3.0.1"
- get-func-name "^2.0.0"
- pathval "^1.1.0"
- type-detect "^4.0.5"
-
-chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.0.1, chalk@^2.3.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-check-error@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
- integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
-
-checkpoint-store@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06"
- integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=
- dependencies:
- functional-red-black-tree "^1.0.1"
-
-chokidar@^3.0.2:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
- integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==
- dependencies:
- anymatch "~3.1.1"
- braces "~3.0.2"
- glob-parent "~5.1.0"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.3.0"
- optionalDependencies:
- fsevents "~2.1.2"
-
-chownr@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
- integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
-
-chownr@^1.1.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-cliui@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
- integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
- dependencies:
- string-width "^2.1.1"
- strip-ansi "^4.0.0"
- wrap-ansi "^2.0.0"
-
-cliui@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
- integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
- dependencies:
- string-width "^3.1.0"
- strip-ansi "^5.2.0"
- wrap-ansi "^5.1.0"
-
-clone-response@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
- integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
- dependencies:
- mimic-response "^1.0.0"
-
-clone@2.1.2, clone@^2.0.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
- integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
- integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-
-coinstring@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/coinstring/-/coinstring-2.3.0.tgz#cdb63363a961502404a25afb82c2e26d5ff627a4"
- integrity sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=
- dependencies:
- bs58 "^2.0.1"
- create-hash "^1.1.1"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-command-exists@^1.2.8:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
- integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==
-
-commander@2.11.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
- integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==
-
-commander@3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
- integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
-
-commander@^2.12.1, commander@^2.8.1:
- version "2.20.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
- integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
-
-commander@~2.20.3:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commander@~2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
- integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-concat-stream@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
- integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
- integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-
-content-disposition@0.5.3:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
- integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
- dependencies:
- safe-buffer "5.1.2"
-
-content-type@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
- integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-
-convert-source-map@^1.5.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
- integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
- dependencies:
- safe-buffer "~5.1.1"
-
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
- integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
-
-cookie@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
- integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
-
-cookiejar@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"
- integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==
-
-core-js-pure@^3.0.1:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.0.tgz#c86e14d9316659af04dd54266addc9271f6164f8"
- integrity sha512-+YSSo7UFDFuVvMUr1HVFYArb22pYIKRDISBo6V50kRuS0MsXgsuDWmJYFu6dJsJupr77S486xRnDkr/BWQQonw==
-
-core-js@^2.4.0, core-js@^2.5.0:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
- integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cors@^2.8.1:
- version "2.8.5"
- resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
- integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
- dependencies:
- object-assign "^4"
- vary "^1"
-
-create-ecdh@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
- integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
- integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- md5.js "^1.3.4"
- ripemd160 "^2.0.1"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
- integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-fetch@^2.1.0, cross-fetch@^2.1.1:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e"
- integrity sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==
- dependencies:
- node-fetch "2.1.2"
- whatwg-fetch "2.0.4"
-
-cross-spawn@^5.0.1:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
- integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
- dependencies:
- lru-cache "^4.0.1"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-crypto-browserify@3.12.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-csstype@^2.2.0:
- version "2.6.6"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41"
- integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==
-
-d@1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
- integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
- dependencies:
- es5-ext "^0.10.50"
- type "^1.0.1"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
- dependencies:
- assert-plus "^1.0.0"
-
-debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
- dependencies:
- ms "2.0.0"
-
-debug@3.2.6:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
- integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
- dependencies:
- ms "^2.1.1"
-
-decamelize@^1.1.1, decamelize@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
- integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-decimal.js@^10.2.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231"
- integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
- integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-decompress-response@^3.2.0, decompress-response@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
- integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
- dependencies:
- mimic-response "^1.0.0"
-
-decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
- integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
- dependencies:
- file-type "^5.2.0"
- is-stream "^1.1.0"
- tar-stream "^1.5.2"
-
-decompress-tarbz2@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
- integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
- dependencies:
- decompress-tar "^4.1.0"
- file-type "^6.1.0"
- is-stream "^1.1.0"
- seek-bzip "^1.0.5"
- unbzip2-stream "^1.0.9"
-
-decompress-targz@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
- integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
- dependencies:
- decompress-tar "^4.1.1"
- file-type "^5.2.0"
- is-stream "^1.1.0"
-
-decompress-unzip@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
- integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k=
- dependencies:
- file-type "^3.8.0"
- get-stream "^2.2.0"
- pify "^2.3.0"
- yauzl "^2.4.2"
-
-decompress@^4.0.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d"
- integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=
- dependencies:
- decompress-tar "^4.0.0"
- decompress-tarbz2 "^4.0.0"
- decompress-targz "^4.0.0"
- decompress-unzip "^4.0.1"
- graceful-fs "^4.1.10"
- make-dir "^1.0.0"
- pify "^2.3.0"
- strip-dirs "^2.0.0"
-
-deep-eql@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
- integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
- dependencies:
- type-detect "^4.0.0"
-
-deep-equal@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
- integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
- integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-
-defer-to-connect@^1.0.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
- integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
-
-deferred-leveldown@~1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb"
- integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==
- dependencies:
- abstract-leveldown "~2.6.0"
-
-deferred-leveldown@~4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20"
- integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==
- dependencies:
- abstract-leveldown "~5.0.0"
- inherits "^2.0.3"
-
-define-properties@^1.1.2, define-properties@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
- integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
- dependencies:
- object-keys "^1.0.12"
-
-defined@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
- integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
- integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
-depd@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
- integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
-des.js@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
- integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-destroy@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
- integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
-
-detect-indent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
- integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
- dependencies:
- repeating "^2.0.0"
-
-detect-libc@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-
-detect-node@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
- integrity sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=
-
-diff@3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
- integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==
-
-diff@3.5.0, diff@^3.2.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
- integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
-
-diffie-hellman@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
- integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-dirty-chai@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/dirty-chai/-/dirty-chai-2.0.1.tgz#6b2162ef17f7943589da840abc96e75bda01aff3"
- integrity sha512-ys79pWKvDMowIDEPC6Fig8d5THiC0DJ2gmTeGzVAoEH18J8OzLud0Jh7I9IWg3NSk8x2UocznUuFmfHCXYZx9w==
-
-doctrine@0.7.2:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523"
- integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=
- dependencies:
- esutils "^1.1.6"
- isarray "0.0.1"
-
-dom-walk@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
- integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
-
-drbg.js@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b"
- integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=
- dependencies:
- browserify-aes "^1.0.6"
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
-
-duplexer3@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
- integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
-
-ecc-jsbn@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
- integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
- dependencies:
- jsbn "~0.1.0"
- safer-buffer "^2.1.0"
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
- integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-
-electron-to-chromium@^1.3.47:
- version "1.3.194"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.194.tgz#a96452a96d4539131957aade9f634a45721f2819"
- integrity sha512-w0LHR2YD9Ex1o+Sz4IN2hYzCB8vaFtMNW+yJcBf6SZlVqgFahkne/4rGVJdk4fPF98Gch9snY7PiabOh+vqHNg==
-
-elliptic@6.3.3:
- version "6.3.3"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f"
- integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8=
- dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
- hash.js "^1.0.0"
- inherits "^2.0.1"
-
-elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca"
- integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==
- dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.0"
-
-emoji-regex@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
- integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
- integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-
-encoding-down@5.0.4, encoding-down@~5.0.0:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614"
- integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==
- dependencies:
- abstract-leveldown "^5.0.0"
- inherits "^2.0.3"
- level-codec "^9.0.0"
- level-errors "^2.0.0"
- xtend "^4.0.1"
-
-encoding@^0.1.11:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
- integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
- dependencies:
- iconv-lite "~0.4.13"
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
- integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
- dependencies:
- once "^1.4.0"
-
-errno@~0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
- integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
- dependencies:
- prr "~1.0.1"
-
-es-abstract@^1.17.0-next.1:
- version "1.17.0-next.1"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172"
- integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==
- dependencies:
- es-to-primitive "^1.2.1"
- function-bind "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.1"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-inspect "^1.7.0"
- object-keys "^1.1.1"
- object.assign "^4.1.0"
- string.prototype.trimleft "^2.1.0"
- string.prototype.trimright "^2.1.0"
-
-es-abstract@^1.5.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
- integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
- dependencies:
- es-to-primitive "^1.2.0"
- function-bind "^1.1.1"
- has "^1.0.3"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-keys "^1.0.12"
-
-es-to-primitive@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
- integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
- dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
-
-es-to-primitive@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
- integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
- dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
-
-es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14:
- version "0.10.50"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778"
- integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==
- dependencies:
- es6-iterator "~2.0.3"
- es6-symbol "~3.1.1"
- next-tick "^1.0.0"
-
-es6-iterator@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
- integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
- dependencies:
- d "1"
- es5-ext "^0.10.35"
- es6-symbol "^3.1.1"
-
-es6-object-assign@^1.0.3:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
- integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=
-
-es6-symbol@^3.1.1, es6-symbol@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
- integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
- integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escodegen@1.8.x:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
- integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-esprima@2.7.x, esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
- integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
-
-esprima@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
- integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
-
-esutils@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"
- integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
- integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-
-eth-block-tracker@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz#95cd5e763c7293e0b1b2790a2a39ac2ac188a5e1"
- integrity sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug==
- dependencies:
- eth-query "^2.1.0"
- ethereumjs-tx "^1.3.3"
- ethereumjs-util "^5.1.3"
- ethjs-util "^0.1.3"
- json-rpc-engine "^3.6.0"
- pify "^2.3.0"
- tape "^4.6.3"
-
-eth-ens-namehash@2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf"
- integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88=
- dependencies:
- idna-uts46-hx "^2.3.1"
- js-sha3 "^0.5.7"
-
-eth-json-rpc-infura@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.0.tgz#62c3f516b51351038c32a548704467cec113ca8f"
- integrity sha512-FLcpdxPRVBCUc7yoE+wHGvyYg2lATedP+/q7PsKvaSzQpJbgTG4ZjLnyrLanxDr6M1k/dSNa6V5QnILwjUKJcw==
- dependencies:
- cross-fetch "^2.1.1"
- eth-json-rpc-middleware "^1.5.0"
- json-rpc-engine "^3.4.0"
- json-rpc-error "^2.0.0"
- tape "^4.8.0"
-
-eth-json-rpc-middleware@^1.5.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f"
- integrity sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==
- dependencies:
- async "^2.5.0"
- eth-query "^2.1.2"
- eth-tx-summary "^3.1.2"
- ethereumjs-block "^1.6.0"
- ethereumjs-tx "^1.3.3"
- ethereumjs-util "^5.1.2"
- ethereumjs-vm "^2.1.0"
- fetch-ponyfill "^4.0.0"
- json-rpc-engine "^3.6.0"
- json-rpc-error "^2.0.0"
- json-stable-stringify "^1.0.1"
- promise-to-callback "^1.0.0"
- tape "^4.6.3"
-
-eth-lib@0.1.27, eth-lib@^0.1.26:
- version "0.1.27"
- resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.27.tgz#f0b0fd144f865d2d6bf8257a40004f2e75ca1dd6"
- integrity sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==
- dependencies:
- bn.js "^4.11.6"
- elliptic "^6.4.0"
- keccakjs "^0.2.1"
- nano-json-stream-parser "^0.1.2"
- servify "^0.1.12"
- ws "^3.0.0"
- xhr-request-promise "^0.1.2"
-
-eth-lib@0.2.7:
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca"
- integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=
- dependencies:
- bn.js "^4.11.6"
- elliptic "^6.4.0"
- xhr-request-promise "^0.1.2"
-
-eth-lib@0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8"
- integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==
- dependencies:
- bn.js "^4.11.6"
- elliptic "^6.4.0"
- xhr-request-promise "^0.1.2"
-
-eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e"
- integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=
- dependencies:
- json-rpc-random-id "^1.0.0"
- xtend "^4.0.1"
-
-eth-sig-util@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.2.0.tgz#769fa3d296b450f6618dedeefe076642c923a16f"
- integrity sha512-bAxW35bL4U2lrtjjV8rFGJ8B27z4Sn5v9eIaNdpPUnPfUAtrvx5j8atfyV+k+JOnbppcvKhWCO1rQSBk4kkAhw==
- dependencies:
- buffer "^5.2.1"
- elliptic "^6.4.0"
- ethereumjs-abi "0.6.5"
- ethereumjs-util "^5.1.1"
- tweetnacl "^1.0.0"
- tweetnacl-util "^0.15.0"
-
-eth-sig-util@2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.3.0.tgz#c54a6ac8e8796f7e25f59cf436982a930e645231"
- integrity sha512-ugD1AvaggvKaZDgnS19W5qOfepjGc7qHrt7TrAaL54gJw9SHvgIXJ3r2xOMW30RWJZNP+1GlTOy5oye7yXA4xA==
- dependencies:
- buffer "^5.2.1"
- elliptic "^6.4.0"
- ethereumjs-abi "0.6.5"
- ethereumjs-util "^5.1.1"
- tweetnacl "^1.0.0"
- tweetnacl-util "^0.15.0"
-
-eth-sig-util@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210"
- integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=
- dependencies:
- ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git"
- ethereumjs-util "^5.1.1"
-
-eth-tx-summary@^3.1.2:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c"
- integrity sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg==
- dependencies:
- async "^2.1.2"
- clone "^2.0.0"
- concat-stream "^1.5.1"
- end-of-stream "^1.1.0"
- eth-query "^2.0.2"
- ethereumjs-block "^1.4.1"
- ethereumjs-tx "^1.1.1"
- ethereumjs-util "^5.0.1"
- ethereumjs-vm "^2.6.0"
- through2 "^2.0.3"
-
-ethashjs@~0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.7.tgz#30bfe4196726690a0c59d3b8272e70d4d0c34bae"
- integrity sha1-ML/kGWcmaQoMWdO4Jy5w1NDDS64=
- dependencies:
- async "^1.4.2"
- buffer-xor "^1.0.3"
- ethereumjs-util "^4.0.1"
- miller-rabin "^4.0.0"
-
-ethereum-bloom-filters@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.6.tgz#9cdebb3ec20de96ec4a434c6bad6ea5a513037aa"
- integrity sha512-dE9CGNzgOOsdh7msZirvv8qjHtnHpvBlKe2647kM8v+yeF71IRso55jpojemvHV+jMjr48irPWxMRaHuOWzAFA==
- dependencies:
- js-sha3 "^0.8.0"
-
-ethereum-common@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca"
- integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==
-
-ethereum-common@^0.0.18:
- version "0.0.18"
- resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f"
- integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=
-
-ethereum-types@^2.1.4, ethereum-types@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-2.1.6.tgz#57d9d515fad86ab987c0f6962c4203be37da8579"
- integrity sha512-xaN5TxLvkdFCGjGfUQ5wV00GHzDHStozP1j+K/YdmUeQXVGiD15cogYPhBVWG3pQJM/aBjtYrpMrjywvKkNC4A==
- dependencies:
- "@types/node" "*"
- bignumber.js "~8.0.2"
-
-ethereum-types@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-3.0.0.tgz#9fa3a98b8b9b64a0fab1864de7bc7fd7b1699fcd"
- integrity sha512-jRSsiua+e4/89r7M3mqPcP1M2f3TgXxpVmWysy+7pEg2H4lwEQRWarbYfIpWp81NtxrcMQv5bMK+yR1MN4sDpg==
- dependencies:
- "@types/node" "*"
- bignumber.js "~9.0.0"
-
-ethereum-types@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-3.1.0.tgz#76de33b398b5b5375e08e647c92ac00e87a647d9"
- integrity sha512-E4lBfxzRSFjd2OM+BATc0b3nN+xWVpAQhBCwSNS9kbsXVPV2LNhIduwCR8Poc8seQukFfuXp0QoVXOlQbUS2pQ==
- dependencies:
- "@types/node" "*"
- bignumber.js "~9.0.0"
-
-ethereumjs-abi@0.6.5:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241"
- integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE=
- dependencies:
- bn.js "^4.10.0"
- ethereumjs-util "^4.3.0"
-
-ethereumjs-abi@0.6.7, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git":
- version "0.6.7"
- resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#8431eab7b3384e65e8126a4602520b78031666fb"
- dependencies:
- bn.js "^4.11.8"
- ethereumjs-util "^6.0.0"
-
-ethereumjs-account@3.0.0, ethereumjs-account@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9"
- integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA==
- dependencies:
- ethereumjs-util "^6.0.0"
- rlp "^2.2.1"
- safe-buffer "^5.1.1"
-
-ethereumjs-account@^2.0.3:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84"
- integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==
- dependencies:
- ethereumjs-util "^5.0.0"
- rlp "^2.0.0"
- safe-buffer "^5.1.1"
-
-ethereumjs-block@2.2.0, ethereumjs-block@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.0.tgz#8c6c3ab4a5eff0a16d9785fbeedbe643f4dbcbef"
- integrity sha512-Ye+uG/L2wrp364Zihdlr/GfC3ft+zG8PdHcRtsBFNNH1CkOhxOwdB8friBU85n89uRZ9eIMAywCq0F4CwT1wAw==
- dependencies:
- async "^2.0.1"
- ethereumjs-common "^1.1.0"
- ethereumjs-tx "^1.2.2"
- ethereumjs-util "^5.0.0"
- merkle-patricia-tree "^2.1.2"
-
-ethereumjs-block@2.2.2, ethereumjs-block@^2.2.1, ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965"
- integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==
- dependencies:
- async "^2.0.1"
- ethereumjs-common "^1.5.0"
- ethereumjs-tx "^2.1.1"
- ethereumjs-util "^5.0.0"
- merkle-patricia-tree "^2.1.2"
-
-ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f"
- integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==
- dependencies:
- async "^2.0.1"
- ethereum-common "0.2.0"
- ethereumjs-tx "^1.2.2"
- ethereumjs-util "^5.0.0"
- merkle-patricia-tree "^2.1.2"
-
-ethereumjs-blockchain@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-3.4.0.tgz#92240da6ecd86b3d8d324df69510b381f26c966b"
- integrity sha512-wxPSmt6EQjhbywkFbftKcb0qRFIZWocHMuDa8/AB4eWL/UPYalNcDyLaxYbrDytmhHid3Uu8G/tA3C/TxZBuOQ==
- dependencies:
- async "^2.6.1"
- ethashjs "~0.0.7"
- ethereumjs-block "~2.2.0"
- ethereumjs-common "^1.1.0"
- ethereumjs-util "~6.0.0"
- flow-stoplight "^1.0.0"
- level-mem "^3.0.1"
- lru-cache "^5.1.1"
- safe-buffer "^5.1.2"
- semaphore "^1.1.0"
-
-ethereumjs-blockchain@^4.0.2, ethereumjs-blockchain@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.3.tgz#e013034633a30ad2006728e8e2b21956b267b773"
- integrity sha512-0nJWbyA+Gu0ZKZr/cywMtB/77aS/4lOVsIKbgUN2sFQYscXO5rPbUfrEe7G2Zhjp86/a0VqLllemDSTHvx3vZA==
- dependencies:
- async "^2.6.1"
- ethashjs "~0.0.7"
- ethereumjs-block "~2.2.2"
- ethereumjs-common "^1.5.0"
- ethereumjs-util "~6.1.0"
- flow-stoplight "^1.0.0"
- level-mem "^3.0.1"
- lru-cache "^5.1.1"
- rlp "^2.2.2"
- semaphore "^1.1.0"
-
-ethereumjs-blockstream@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-blockstream/-/ethereumjs-blockstream-7.0.0.tgz#b8d7b6257dd1100bc6ddb36d6bef58c2490f9999"
- integrity sha512-lt3uLKDEfNHEqqnl/+W0aC7xp2y7JEsgZsJMZ958CNrYIJH9tZ7oa8npwV2M0KhGlfzmJsyJIpvV/Lvb2mh0tA==
- dependencies:
- immutable "3.8.2"
- source-map-support "0.5.6"
- uuid "3.2.1"
-
-ethereumjs-common@1.5.0, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd"
- integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==
-
-ethereumjs-common@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.3.0.tgz#ca7d152b615d5e1851fcf184d062bf14c62c18e6"
- integrity sha512-/jdFHyHOIS3FiAnunwRZ+oNulFtNNSHyWii3PaNHReOUmBAxij7KMyZLKh0tE16JEsJtXOVz1ceYuq++ILzv+g==
-
-ethereumjs-tx@1.3.7, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.5:
- version "1.3.7"
- resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a"
- integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==
- dependencies:
- ethereum-common "^0.0.18"
- ethereumjs-util "^5.0.0"
-
-ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed"
- integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==
- dependencies:
- ethereumjs-common "^1.5.0"
- ethereumjs-util "^6.0.0"
-
-ethereumjs-util@6.1.0, ethereumjs-util@^6.0.0, ethereumjs-util@~6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8"
- integrity sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==
- dependencies:
- bn.js "^4.11.0"
- create-hash "^1.1.2"
- ethjs-util "0.1.6"
- keccak "^1.0.2"
- rlp "^2.0.0"
- safe-buffer "^5.1.1"
- secp256k1 "^3.0.1"
-
-ethereumjs-util@6.2.0, ethereumjs-util@^6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960"
- integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==
- dependencies:
- "@types/bn.js" "^4.11.3"
- bn.js "^4.11.0"
- create-hash "^1.1.2"
- ethjs-util "0.1.6"
- keccak "^2.0.0"
- rlp "^2.2.3"
- secp256k1 "^3.0.1"
-
-ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6"
- integrity sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=
- dependencies:
- bn.js "^4.8.0"
- create-hash "^1.1.2"
- keccakjs "^0.2.0"
- rlp "^2.0.0"
- secp256k1 "^3.0.1"
-
-ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642"
- integrity sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==
- dependencies:
- bn.js "^4.11.0"
- create-hash "^1.1.2"
- ethjs-util "^0.1.3"
- keccak "^1.0.2"
- rlp "^2.0.0"
- safe-buffer "^5.1.1"
- secp256k1 "^3.0.1"
-
-ethereumjs-util@~6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.0.0.tgz#f14841c182b918615afefd744207c7932c8536c0"
- integrity sha512-E3yKUyl0Fs95nvTFQZe/ZSNcofhDzUsDlA5y2uoRmf1+Ec7gpGhNCsgKkZBRh7Br5op8mJcYF/jFbmjj909+nQ==
- dependencies:
- bn.js "^4.11.0"
- create-hash "^1.1.2"
- ethjs-util "^0.1.6"
- keccak "^1.0.2"
- rlp "^2.0.0"
- safe-buffer "^5.1.1"
- secp256k1 "^3.0.1"
-
-ethereumjs-vm@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-3.0.0.tgz#70fea2964a6797724b0d93fe080f9984ad18fcdd"
- integrity sha512-lNu+G/RWPRCrQM5s24MqgU75PEGiAhL4Ombw0ew6m08d+amsxf/vGAb98yDNdQqqHKV6JbwO/tCGfdqXGI6Cug==
- dependencies:
- async "^2.1.2"
- async-eventemitter "^0.2.2"
- ethereumjs-account "^2.0.3"
- ethereumjs-block "~2.2.0"
- ethereumjs-blockchain "^3.4.0"
- ethereumjs-common "^1.1.0"
- ethereumjs-util "^6.0.0"
- fake-merkle-patricia-tree "^1.0.1"
- functional-red-black-tree "^1.0.1"
- merkle-patricia-tree "^2.3.2"
- rustbn.js "~0.2.0"
- safe-buffer "^5.1.1"
-
-ethereumjs-vm@4.1.3:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.1.3.tgz#dc8eb45f47d775da9f0b2437d5e20896fdf66f37"
- integrity sha512-RTrD0y7My4O6Qr1P2ZIsMfD6RzL6kU/RhBZ0a5XrPzAeR61crBS7or66ohDrvxDI/rDBxMi+6SnsELih6fzalw==
- dependencies:
- async "^2.1.2"
- async-eventemitter "^0.2.2"
- core-js-pure "^3.0.1"
- ethereumjs-account "^3.0.0"
- ethereumjs-block "^2.2.2"
- ethereumjs-blockchain "^4.0.3"
- ethereumjs-common "^1.5.0"
- ethereumjs-tx "^2.1.2"
- ethereumjs-util "^6.2.0"
- fake-merkle-patricia-tree "^1.0.1"
- functional-red-black-tree "^1.0.1"
- merkle-patricia-tree "^2.3.2"
- rustbn.js "~0.2.0"
- safe-buffer "^5.1.1"
- util.promisify "^1.0.0"
-
-ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6"
- integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==
- dependencies:
- async "^2.1.2"
- async-eventemitter "^0.2.2"
- ethereumjs-account "^2.0.3"
- ethereumjs-block "~2.2.0"
- ethereumjs-common "^1.1.0"
- ethereumjs-util "^6.0.0"
- fake-merkle-patricia-tree "^1.0.1"
- functional-red-black-tree "^1.0.1"
- merkle-patricia-tree "^2.3.2"
- rustbn.js "~0.2.0"
- safe-buffer "^5.1.1"
-
-ethereumjs-vm@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.1.1.tgz#ba6f565fd7788a0e7db494fa2096d45f9ea0802b"
- integrity sha512-Bh2avDY9Hyon9TvJ/fmkdyd5JDnmTudLJ5oKhmTfXn0Jjq7UzP4YRNp7e5PWoWXSmdXAGXU9W0DXK5TV9Qy/NQ==
- dependencies:
- async "^2.1.2"
- async-eventemitter "^0.2.2"
- core-js-pure "^3.0.1"
- ethereumjs-account "^3.0.0"
- ethereumjs-block "^2.2.1"
- ethereumjs-blockchain "^4.0.2"
- ethereumjs-common "^1.3.2"
- ethereumjs-tx "^2.1.1"
- ethereumjs-util "~6.1.0"
- fake-merkle-patricia-tree "^1.0.1"
- functional-red-black-tree "^1.0.1"
- merkle-patricia-tree "^2.3.2"
- rustbn.js "~0.2.0"
- safe-buffer "^5.1.1"
- util.promisify "^1.0.0"
-
-ethereumjs-wallet@0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz#b0eae6f327637c2aeb9ccb9047b982ac542e6ab1"
- integrity sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w==
- dependencies:
- aes-js "^3.1.1"
- bs58check "^2.1.2"
- ethereumjs-util "^6.0.0"
- hdkey "^1.1.0"
- randombytes "^2.0.6"
- safe-buffer "^5.1.2"
- scrypt.js "^0.3.0"
- utf8 "^3.0.0"
- uuid "^3.3.2"
-
-ethers@4.0.0-beta.3:
- version "4.0.0-beta.3"
- resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.3.tgz#15bef14e57e94ecbeb7f9b39dd0a4bd435bc9066"
- integrity sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==
- dependencies:
- "@types/node" "^10.3.2"
- aes-js "3.0.0"
- bn.js "^4.4.0"
- elliptic "6.3.3"
- hash.js "1.1.3"
- js-sha3 "0.5.7"
- scrypt-js "2.0.3"
- setimmediate "1.0.4"
- uuid "2.0.1"
- xmlhttprequest "1.8.0"
-
-ethers@~4.0.4:
- version "4.0.33"
- resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.33.tgz#f7b88d2419d731a39aefc37843a3f293e396f918"
- integrity sha512-lAHkSPzBe0Vj+JrhmkEHLtUEKEheVktIjGDyE9gbzF4zf1vibjYgB57LraDHu4/ItqWVkztgsm8GWqcDMN+6vQ==
- dependencies:
- "@types/node" "^10.3.2"
- aes-js "3.0.0"
- bn.js "^4.4.0"
- elliptic "6.3.3"
- hash.js "1.1.3"
- js-sha3 "0.5.7"
- scrypt-js "2.0.4"
- setimmediate "1.0.4"
- uuid "2.0.1"
- xmlhttprequest "1.8.0"
-
-ethjs-unit@0.1.6, ethjs-unit@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699"
- integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=
- dependencies:
- bn.js "4.11.6"
- number-to-bn "1.7.0"
-
-ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536"
- integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==
- dependencies:
- is-hex-prefixed "1.0.0"
- strip-hex-prefix "1.0.0"
-
-eventemitter3@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.1.1.tgz#47786bdaa087caf7b1b75e73abc5c7d540158cd0"
- integrity sha1-R3hr2qCHyvext15zq8XH1UAVjNA=
-
-eventemitter3@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
- integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
-
-eventemitter3@3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
- integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
-
-eventemitter3@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
- integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
-
-events@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
- integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-execa@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
- integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
- dependencies:
- cross-spawn "^5.0.1"
- get-stream "^3.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-expand-template@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
- integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
-
-express@^4.14.0:
- version "4.17.1"
- resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
- integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
- dependencies:
- accepts "~1.3.7"
- array-flatten "1.1.1"
- body-parser "1.19.0"
- content-disposition "0.5.3"
- content-type "~1.0.4"
- cookie "0.4.0"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "~1.1.2"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.5"
- qs "6.7.0"
- range-parser "~1.2.1"
- safe-buffer "5.1.2"
- send "0.17.1"
- serve-static "1.14.1"
- setprototypeof "1.1.1"
- statuses "~1.5.0"
- type-is "~1.6.18"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-extend@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
- integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
- integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-
-fake-merkle-patricia-tree@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3"
- integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM=
- dependencies:
- checkpoint-store "^1.1.0"
-
-fast-deep-equal@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
- integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
-
-fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
- integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-
-fast-levenshtein@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
- integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
-
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
- dependencies:
- pend "~1.2.0"
-
-fetch-ponyfill@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893"
- integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=
- dependencies:
- node-fetch "~1.7.1"
-
-file-type@^3.8.0:
- version "3.9.0"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
- integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
-
-file-type@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
- integrity sha1-LdvqfHP/42No365J3DOMBYwritY=
-
-file-type@^6.1.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
- integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
-
-file-uri-to-path@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
- integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-finalhandler@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
- integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- statuses "~1.5.0"
- unpipe "~1.0.0"
-
-find-up@3.0.0, find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
-flat@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
- integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
- dependencies:
- is-buffer "~2.0.3"
-
-flow-stoplight@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b"
- integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s=
-
-for-each@^0.3.3, for-each@~0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
- dependencies:
- is-callable "^1.1.3"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
- integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
-
-forwarded@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
- integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
-
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
- integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-
-fs-constants@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
- integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-
-fs-extra@^0.30.0:
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
- integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
- klaw "^1.0.0"
- path-is-absolute "^1.0.0"
- rimraf "^2.2.8"
-
-fs-extra@^2.0.0, fs-extra@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
- integrity sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
-
-fs-extra@^4.0.2:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
- integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-extra@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-minipass@^1.2.5:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
- integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
- dependencies:
- minipass "^2.6.0"
-
-fs-promise@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-2.0.3.tgz#f64e4f854bcf689aa8bddcba268916db3db46854"
- integrity sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=
- dependencies:
- any-promise "^1.3.0"
- fs-extra "^2.0.0"
- mz "^2.6.0"
- thenify-all "^1.6.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@~2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
- integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==
-
-fstream@^1.0.12, fstream@^1.0.8:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
- integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
- integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-
-ganache-core@^2.6.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.6.1.tgz#b97156cd53d0492477c1229d57f8a97763d30d46"
- integrity sha512-P3X8yo1GAabYuc8SOnWAFyHL8LhOlNOG6amtItgOEDBTUXMKlkGKP42OxjKovxCAlE7d9CXmYXo1Bu0rffBm9w==
- dependencies:
- abstract-leveldown "3.0.0"
- async "2.6.2"
- bip39 "2.5.0"
- cachedown "1.0.0"
- clone "2.1.2"
- debug "3.2.6"
- encoding-down "5.0.4"
- eth-sig-util "2.2.0"
- ethereumjs-abi "0.6.7"
- ethereumjs-account "3.0.0"
- ethereumjs-block "2.2.0"
- ethereumjs-tx "1.3.7"
- ethereumjs-util "6.1.0"
- ethereumjs-vm "3.0.0"
- heap "0.2.6"
- level-sublevel "6.6.4"
- levelup "3.1.1"
- lodash "4.17.14"
- merkle-patricia-tree "2.3.2"
- seedrandom "3.0.1"
- source-map-support "0.5.12"
- tmp "0.1.0"
- web3-provider-engine "14.2.0"
- websocket "1.0.29"
- optionalDependencies:
- ethereumjs-wallet "0.6.3"
- web3 "1.0.0-beta.35"
-
-ganache-core@^2.9.0-istanbul.0:
- version "2.10.2"
- resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.10.2.tgz#17c171c6c0195b6734a0dd741a9d2afd4f74e292"
- integrity sha512-4XEO0VsqQ1+OW7Za5fQs9/Kk7o8M0T1sRfFSF8h9NeJ2ABaqMO5waqxf567ZMcSkRKaTjUucBSz83xNfZv1HDg==
- dependencies:
- abstract-leveldown "3.0.0"
- async "2.6.2"
- bip39 "2.5.0"
- cachedown "1.0.0"
- clone "2.1.2"
- debug "3.2.6"
- encoding-down "5.0.4"
- eth-sig-util "2.3.0"
- ethereumjs-abi "0.6.7"
- ethereumjs-account "3.0.0"
- ethereumjs-block "2.2.2"
- ethereumjs-common "1.5.0"
- ethereumjs-tx "2.1.2"
- ethereumjs-util "6.2.0"
- ethereumjs-vm "4.1.3"
- heap "0.2.6"
- level-sublevel "6.6.4"
- levelup "3.1.1"
- lodash "4.17.14"
- merkle-patricia-tree "2.3.2"
- seedrandom "3.0.1"
- source-map-support "0.5.12"
- tmp "0.1.0"
- web3-provider-engine "14.2.1"
- websocket "1.0.29"
- optionalDependencies:
- ethereumjs-wallet "0.6.3"
- web3 "1.2.4"
-
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-get-caller-file@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
- integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
-
-get-caller-file@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-func-name@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
- integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
-
-get-stream@^2.2.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
- integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
- dependencies:
- object-assign "^4.0.1"
- pinkie-promise "^2.0.0"
-
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
- integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
-
-get-stream@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
- dependencies:
- pump "^3.0.0"
-
-get-stream@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
- integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
- dependencies:
- pump "^3.0.0"
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
- dependencies:
- assert-plus "^1.0.0"
-
-github-from-package@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
- integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
-
-glob-parent@~5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
- integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
- dependencies:
- is-glob "^4.0.1"
-
-glob@7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^5.0.15:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@~7.1.4:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
- integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.1.2:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-global@~4.3.0:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
- integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
- dependencies:
- min-document "^2.19.0"
- process "~0.5.1"
-
-globals@^9.18.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
- integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
-
-got@7.1.0, got@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
- integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==
- dependencies:
- decompress-response "^3.2.0"
- duplexer3 "^0.1.4"
- get-stream "^3.0.0"
- is-plain-obj "^1.1.0"
- is-retry-allowed "^1.0.0"
- is-stream "^1.0.0"
- isurl "^1.0.0-alpha5"
- lowercase-keys "^1.0.0"
- p-cancelable "^0.3.0"
- p-timeout "^1.1.1"
- safe-buffer "^5.0.1"
- timed-out "^4.0.0"
- url-parse-lax "^1.0.0"
- url-to-options "^1.0.1"
-
-got@9.6.0:
- version "9.6.0"
- resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
- integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
- dependencies:
- "@sindresorhus/is" "^0.14.0"
- "@szmarczak/http-timer" "^1.1.2"
- cacheable-request "^6.0.0"
- decompress-response "^3.3.0"
- duplexer3 "^0.1.4"
- get-stream "^4.1.0"
- lowercase-keys "^1.0.1"
- mimic-response "^1.0.1"
- p-cancelable "^1.0.0"
- to-readable-stream "^1.0.0"
- url-parse-lax "^3.0.0"
-
-graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
- integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==
-
-graceful-fs@^4.1.9:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
- integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
-
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
- integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
-
-growl@1.10.3:
- version "1.10.3"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
- integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==
-
-growl@1.10.5:
- version "1.10.5"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
- integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
-
-handlebars@^4.0.1, handlebars@^4.1.2:
- version "4.7.3"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee"
- integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg==
- dependencies:
- neo-async "^2.6.0"
- optimist "^0.6.1"
- source-map "^0.6.1"
- optionalDependencies:
- uglify-js "^3.1.4"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
- integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.0:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
- dependencies:
- ajv "^6.5.5"
- har-schema "^2.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
- integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
-
-has-flag@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
- integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-symbol-support-x@^1.4.1:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
- integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
-
-has-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
- integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-
-has-symbols@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
- integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
-
-has-to-string-tag-x@^1.2.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
- integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
- dependencies:
- has-symbol-support-x "^1.4.1"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
- integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-
-has@^1.0.1, has@^1.0.3, has@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-hash-base@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
- integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-hash.js@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
- integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.0"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
- integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.1"
-
-hdkey@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632"
- integrity sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=
- dependencies:
- coinstring "^2.0.0"
- secp256k1 "^3.0.1"
-
-hdkey@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.1.tgz#c2b3bfd5883ff9529b72f2f08b28be0972a9f64a"
- integrity sha512-DvHZ5OuavsfWs5yfVJZestsnc3wzPvLWNk6c2nRUfo6X+OtxypGt20vDDf7Ba+MJzjL3KS1og2nw2eBbLCOUTA==
- dependencies:
- coinstring "^2.0.0"
- safe-buffer "^5.1.1"
- secp256k1 "^3.0.1"
-
-he@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
- integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
-
-he@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
- integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
-heap@0.2.6:
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac"
- integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=
-
-highlight.js@^9.15.8:
- version "9.15.9"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.9.tgz#865257da1dbb4a58c4552d46c4b3854f77f0e6d5"
- integrity sha512-M0zZvfLr5p0keDMCAhNBp03XJbKBxUx5AfyfufMdFMEP4N/Xj6dh0IqC75ys7BAzceR34NgcvXjupRVaHBPPVQ==
-
-hmac-drbg@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-home-or-tmp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
- integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.1"
-
-http-cache-semantics@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#13eeb612424bb113d52172c28a13109c46fa85d7"
- integrity sha512-Z2EICWNJou7Tr9Bd2M2UqDJq3A9F2ePG9w3lIpjoyuSyXFP9QbniJVu3XQYytuw5ebmG7dXSXO9PgAjJG8DDKA==
-
-http-errors@1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
- integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.1"
- statuses ">= 1.5.0 < 2"
- toidentifier "1.0.0"
-
-http-errors@~1.7.2:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
- integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.4"
- setprototypeof "1.1.1"
- statuses ">= 1.5.0 < 2"
- toidentifier "1.0.0"
-
-http-https@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b"
- integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-iconv-lite@0.4.24, iconv-lite@~0.4.13:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-idna-uts46-hx@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9"
- integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==
- dependencies:
- punycode "2.1.0"
-
-ieee754@^1.1.4:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
- integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
-
-immediate@^3.2.3, immediate@~3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
- integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=
-
-immutable@3.8.2:
- version "3.8.2"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
- integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-inherits@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@~1.3.0:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
- integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-
-interpret@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
- integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
-
-invariant@^2.2.2:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
- integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
- dependencies:
- loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
- integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
-
-ipaddr.js@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
- integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-buffer@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
- integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
-
-is-callable@^1.1.3, is-callable@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
- integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-
-is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
- integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
-
-is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-finite@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
- integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fn@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c"
- integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-function@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
- integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
-
-is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-hex-prefixed@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"
- integrity sha1-fY035q135dEnFIkTxXPggtd39VQ=
-
-is-natural-number@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
- integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
- integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
-
-is-plain-obj@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
- integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
- dependencies:
- has "^1.0.1"
-
-is-retry-allowed@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
- integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
-
-is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-
-is-symbol@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
- integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
- dependencies:
- has-symbols "^1.0.0"
-
-is-typedarray@^1.0.0, is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
- integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
- integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-isomorphic-fetch@2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
- integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
- dependencies:
- node-fetch "^1.0.1"
- whatwg-fetch ">=0.10.0"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
- integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-istanbul@^0.4.5:
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
- integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=
- dependencies:
- abbrev "1.0.x"
- async "1.x"
- escodegen "1.8.x"
- esprima "2.7.x"
- glob "^5.0.15"
- handlebars "^4.0.1"
- js-yaml "3.x"
- mkdirp "0.5.x"
- nopt "3.x"
- once "1.x"
- resolve "1.1.x"
- supports-color "^3.1.0"
- which "^1.1.1"
- wordwrap "^1.0.0"
-
-isurl@^1.0.0-alpha5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
- integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
- dependencies:
- has-to-string-tag-x "^1.2.0"
- is-object "^1.0.1"
-
-jquery@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
- integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
-
-js-combinatorics@^0.5.3:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/js-combinatorics/-/js-combinatorics-0.5.4.tgz#c92916b8f8171b64ecd7c4435b72cfabc803c756"
- integrity sha512-PCqUIKGqv/Kjao1G4GE/Yni6QkCP2nWW3KnxL+8IGWPlP18vQpT8ufGMf4XUAAY8JHEryUCJbf51zG8329ntMg==
-
-js-sha3@0.5.7, js-sha3@^0.5.7:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
- integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=
-
-js-sha3@0.8.0, js-sha3@^0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
- integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
-
-js-sha3@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.6.1.tgz#5b89f77a7477679877f58c4a075240934b1f95c0"
- integrity sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=
-
-js-sha3@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.7.0.tgz#0a5c57b36f79882573b2d84051f8bb85dd1bd63a"
- integrity sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA==
-
-"js-tokens@^3.0.0 || ^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
- integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-
-js-yaml@3.13.1, js-yaml@3.x, js-yaml@^3.7.0:
- version "3.13.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
- integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
- integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-jsesc@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
- integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
-
-jsesc@~0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
- integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
-
-json-buffer@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
- integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
-
-json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0:
- version "3.8.0"
- resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9"
- integrity sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA==
- dependencies:
- async "^2.0.1"
- babel-preset-env "^1.7.0"
- babelify "^7.3.0"
- json-rpc-error "^2.0.0"
- promise-to-callback "^1.0.0"
- safe-event-emitter "^1.0.1"
-
-json-rpc-error@2.0.0, json-rpc-error@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02"
- integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI=
- dependencies:
- inherits "^2.0.1"
-
-json-rpc-random-id@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8"
- integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg=
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
- integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
-json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-json5@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
- integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-
-jsonfile@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
- integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
-
-jsonparse@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.0.0.tgz#2622f4e66c08e1aac7edbeb76053c9b7e1211f76"
- integrity sha1-JiL05mwI4arH7b63YFPJt+EhH3Y=
-
-jsonschema@^1.2.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.4.tgz#a46bac5d3506a254465bc548876e267c6d0d6464"
- integrity sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==
-
-jsonstream@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/jsonstream/-/jsonstream-1.0.3.tgz#ff2d49c4f479b5bbcdf9f9e56c841cf87f0efa1d"
- integrity sha1-/y1JxPR5tbvN+fnlbIQc+H8O+h0=
- dependencies:
- jsonparse "~1.0.0"
- through ">=2.2.7 <3"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-keccak@^1.0.2:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80"
- integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==
- dependencies:
- bindings "^1.2.1"
- inherits "^2.0.3"
- nan "^2.2.1"
- safe-buffer "^5.1.0"
-
-keccak@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/keccak/-/keccak-2.1.0.tgz#734ea53f2edcfd0f42cdb8d5f4c358fef052752b"
- integrity sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==
- dependencies:
- bindings "^1.5.0"
- inherits "^2.0.4"
- nan "^2.14.0"
- safe-buffer "^5.2.0"
-
-keccakjs@^0.2.0, keccakjs@^0.2.1:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/keccakjs/-/keccakjs-0.2.3.tgz#5e4e969ce39689a3861f445d7752ee3477f9fe72"
- integrity sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==
- dependencies:
- browserify-sha3 "^0.0.4"
- sha3 "^1.2.2"
-
-keyv@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
- integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
- dependencies:
- json-buffer "3.0.0"
-
-klaw@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
- integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
- optionalDependencies:
- graceful-fs "^4.1.9"
-
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
- dependencies:
- invert-kv "^1.0.0"
-
-level-codec@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.1.tgz#042f4aa85e56d4328ace368c950811ba802b7247"
- integrity sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==
-
-level-codec@~7.0.0:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7"
- integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==
-
-level-errors@^1.0.3:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d"
- integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==
- dependencies:
- errno "~0.1.1"
-
-level-errors@^2.0.0, level-errors@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8"
- integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==
- dependencies:
- errno "~0.1.1"
-
-level-errors@~1.0.3:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859"
- integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==
- dependencies:
- errno "~0.1.1"
-
-level-iterator-stream@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4"
- integrity sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig==
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.0.5"
- xtend "^4.0.0"
-
-level-iterator-stream@~1.3.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed"
- integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=
- dependencies:
- inherits "^2.0.1"
- level-errors "^1.0.3"
- readable-stream "^1.0.33"
- xtend "^4.0.0"
-
-level-iterator-stream@~3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730"
- integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.3.6"
- xtend "^4.0.0"
-
-level-mem@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5"
- integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==
- dependencies:
- level-packager "~4.0.0"
- memdown "~3.0.0"
-
-level-packager@~4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6"
- integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==
- dependencies:
- encoding-down "~5.0.0"
- levelup "^3.0.0"
-
-level-post@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0"
- integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==
- dependencies:
- ltgt "^2.1.2"
-
-level-sublevel@6.6.4:
- version "6.6.4"
- resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba"
- integrity sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA==
- dependencies:
- bytewise "~1.1.0"
- level-codec "^9.0.0"
- level-errors "^2.0.0"
- level-iterator-stream "^2.0.3"
- ltgt "~2.1.1"
- pull-defer "^0.2.2"
- pull-level "^2.0.3"
- pull-stream "^3.6.8"
- typewiselite "~1.0.0"
- xtend "~4.0.0"
-
-level-ws@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b"
- integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=
- dependencies:
- readable-stream "~1.0.15"
- xtend "~2.1.1"
-
-levelup@3.1.1, levelup@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189"
- integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==
- dependencies:
- deferred-leveldown "~4.0.0"
- level-errors "~2.0.0"
- level-iterator-stream "~3.0.0"
- xtend "~4.0.0"
-
-levelup@^1.2.1:
- version "1.3.9"
- resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab"
- integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==
- dependencies:
- deferred-leveldown "~1.2.1"
- level-codec "~7.0.0"
- level-errors "~1.0.3"
- level-iterator-stream "~1.3.0"
- prr "~1.0.1"
- semver "~5.4.1"
- xtend "~4.0.0"
-
-levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-lodash.values@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"
- integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=
-
-lodash@4.17.14, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.4:
- version "4.17.14"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
- integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==
-
-lodash@^4.17.15:
- version "4.17.15"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
- integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
-
-log-symbols@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
- integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
- dependencies:
- chalk "^2.0.1"
-
-loglevel@^1.6.1:
- version "1.6.6"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312"
- integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==
-
-looper@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec"
- integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew=
-
-looper@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749"
- integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=
-
-loose-envify@^1.0.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
- integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-
-lowercase-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
- integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-lru-cache@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee"
- integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=
- dependencies:
- pseudomap "^1.0.1"
-
-lru-cache@^4.0.1:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
- integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
- dependencies:
- pseudomap "^1.0.2"
- yallist "^2.1.2"
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
-ltgt@^2.1.2, ltgt@~2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5"
- integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=
-
-ltgt@~2.1.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34"
- integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=
-
-lunr@^2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.6.tgz#f278beee7ffd56ad86e6e478ce02ab2b98c78dd5"
- integrity sha512-swStvEyDqQ85MGpABCMBclZcLI/pBIlu8FFDtmX197+oEgKloJ67QnB+Tidh0340HmLMs39c4GrkPY3cmkXp6Q==
-
-make-dir@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
- integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
- dependencies:
- pify "^3.0.0"
-
-make-promises-safe@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/make-promises-safe/-/make-promises-safe-1.1.0.tgz#b4d28c61ef8ad5502f38dbb3a0ee89627f76ad61"
- integrity sha1-tNKMYe+K1VAvONuzoO6JYn92rWE=
-
-marked@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
- integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==
-
-md5.js@^1.3.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
- integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-media-typer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
- integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-
-mem@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
- integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
- dependencies:
- mimic-fn "^1.0.0"
-
-memdown@^1.0.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215"
- integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=
- dependencies:
- abstract-leveldown "~2.7.1"
- functional-red-black-tree "^1.0.1"
- immediate "^3.2.3"
- inherits "~2.0.1"
- ltgt "~2.2.0"
- safe-buffer "~5.1.1"
-
-memdown@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309"
- integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA==
- dependencies:
- abstract-leveldown "~5.0.0"
- functional-red-black-tree "~1.0.1"
- immediate "~3.2.3"
- inherits "~2.0.1"
- ltgt "~2.2.0"
- safe-buffer "~5.1.1"
-
-memorystream@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
- integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
-
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
- integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-
-merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a"
- integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==
- dependencies:
- async "^1.4.2"
- ethereumjs-util "^5.0.0"
- level-ws "0.0.0"
- levelup "^1.2.1"
- memdown "^1.0.0"
- readable-stream "^2.0.0"
- rlp "^2.0.0"
- semaphore ">=1.0.1"
-
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
- integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
-mime-db@1.40.0:
- version "1.40.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
- integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
-
-mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24:
- version "2.1.24"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
- integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
- dependencies:
- mime-db "1.40.0"
-
-mime@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
- integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-
-mimic-response@^1.0.0, mimic-response@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-min-document@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
- integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
- dependencies:
- dom-walk "^0.1.0"
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
- integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-
-"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
- integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
-minimist@^1.2.0, minimist@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
- integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
- integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-
-minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
- integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
- dependencies:
- safe-buffer "^5.1.2"
- yallist "^3.0.0"
-
-minizlib@^1.2.1:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
- integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
- dependencies:
- minipass "^2.9.0"
-
-mkdirp-promise@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1"
- integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=
- dependencies:
- mkdirp "*"
-
-mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
- dependencies:
- minimist "0.0.8"
-
-mocha@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794"
- integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==
- dependencies:
- browser-stdout "1.3.0"
- commander "2.11.0"
- debug "3.1.0"
- diff "3.3.1"
- escape-string-regexp "1.0.5"
- glob "7.1.2"
- growl "1.10.3"
- he "1.1.1"
- mkdirp "0.5.1"
- supports-color "4.4.0"
-
-mocha@^6.2.0:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20"
- integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==
- dependencies:
- ansi-colors "3.2.3"
- browser-stdout "1.3.1"
- debug "3.2.6"
- diff "3.5.0"
- escape-string-regexp "1.0.5"
- find-up "3.0.0"
- glob "7.1.3"
- growl "1.10.5"
- he "1.2.0"
- js-yaml "3.13.1"
- log-symbols "2.2.0"
- minimatch "3.0.4"
- mkdirp "0.5.1"
- ms "2.1.1"
- node-environment-flags "1.0.5"
- object.assign "4.1.0"
- strip-json-comments "2.0.1"
- supports-color "6.0.0"
- which "1.3.1"
- wide-align "1.1.3"
- yargs "13.3.0"
- yargs-parser "13.1.1"
- yargs-unparser "1.6.0"
-
-mock-fs@^4.1.0:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.10.1.tgz#50a07a20114a6cdb119f35762f61f46266a1e323"
- integrity sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw==
-
-mout@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/mout/-/mout-0.11.1.tgz#ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99"
- integrity sha1-ujYR318OWx/7/QEWa48C0fX6K5k=
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
- integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-ms@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-mz@^2.6.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
- integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
- dependencies:
- any-promise "^1.0.0"
- object-assign "^4.0.1"
- thenify-all "^1.0.0"
-
-nan@2.13.2:
- version "2.13.2"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
- integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==
-
-nan@^2.0.8, nan@^2.13.2, nan@^2.14.0, nan@^2.2.1, nan@^2.3.3:
- version "2.14.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
- integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
-
-nano-json-stream-parser@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f"
- integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=
-
-napi-build-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508"
- integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==
-
-negotiator@0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
- integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-
-neo-async@^2.6.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
- integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-
-next-tick@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
- integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
-
-node-abi@^2.7.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.9.0.tgz#ae4075b298dab2d92dd1e22c48ccc7ffd7f06200"
- integrity sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==
- dependencies:
- semver "^5.4.1"
-
-node-environment-flags@1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a"
- integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==
- dependencies:
- object.getownpropertydescriptors "^2.0.3"
- semver "^5.7.0"
-
-node-fetch@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
- integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
-
-node-fetch@^1.0.1, node-fetch@~1.7.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
-node-hid@^0.7.9:
- version "0.7.9"
- resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.9.tgz#cc0cdf1418a286a7667f0b63642b5eeb544ccd05"
- integrity sha512-vJnonTqmq3frCyTumJqG4g2IZcny3ynkfmbfDfQ90P3ZhRzcWYS/Um1ux6HFmAxmkaQnrZqIYHcGpL7kdqY8jA==
- dependencies:
- bindings "^1.5.0"
- nan "^2.13.2"
- prebuild-install "^5.3.0"
-
-noop-logger@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
- integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
-
-nopt@3.x:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
- dependencies:
- abbrev "1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-url@^4.1.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
- integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
- dependencies:
- path-key "^2.0.0"
-
-npmlog@^4.0.1:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
- integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-number-to-bn@1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0"
- integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=
- dependencies:
- bn.js "4.11.6"
- strip-hex-prefix "1.0.0"
-
-oauth-sign@~0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
- integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-inspect@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
- integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
-
-object-inspect@~1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
- integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
-
-object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object-keys@~0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
- integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
-
-object.assign@4.1.0, object.assign@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
- integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
- dependencies:
- define-properties "^1.1.2"
- function-bind "^1.1.1"
- has-symbols "^1.0.0"
- object-keys "^1.0.11"
-
-object.getownpropertydescriptors@^2.0.3:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
- integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.17.0-next.1"
-
-oboe@2.1.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.3.tgz#2b4865dbd46be81225713f4e9bfe4bcf4f680a4f"
- integrity sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=
- dependencies:
- http-https "^1.0.0"
-
-oboe@2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6"
- integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=
- dependencies:
- http-https "^1.0.0"
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
- dependencies:
- ee-first "1.1.1"
-
-once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-optimist@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
- integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.6"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- word-wrap "~1.2.3"
-
-os-homedir@^1.0.0, os-homedir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
- integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-
-os-locale@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
- integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
- dependencies:
- execa "^0.7.0"
- lcid "^1.0.0"
- mem "^1.1.0"
-
-os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-
-p-cancelable@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
- integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==
-
-p-cancelable@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
- integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
- integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
-p-limit@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
- integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
- dependencies:
- p-try "^2.0.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-timeout@^1.1.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
- integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=
- dependencies:
- p-finally "^1.0.0"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-parse-asn1@^5.0.0:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
- integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
- dependencies:
- asn1.js "^4.0.0"
- browserify-aes "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
- safe-buffer "^5.1.1"
-
-parse-headers@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34"
- integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==
- dependencies:
- for-each "^0.3.3"
- string.prototype.trim "^1.1.2"
-
-parseurl@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
- integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-key@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
-path-parse@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
- integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-
-pathval@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
- integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
-
-pbkdf2@^3.0.3, pbkdf2@^3.0.9:
- version "3.0.17"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
- integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
- integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
-picomatch@^2.0.4, picomatch@^2.0.7:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5"
- integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==
-
-pify@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
- integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-
-pluralize@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
- integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
-
-popper.js@1.14.3:
- version "1.14.3"
- resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.3.tgz#1438f98d046acf7b4d78cd502bf418ac64d4f095"
- integrity sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=
-
-prebuild-install@^5.2.4, prebuild-install@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.0.tgz#58b4d8344e03590990931ee088dd5401b03004c8"
- integrity sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==
- dependencies:
- detect-libc "^1.0.3"
- expand-template "^2.0.3"
- github-from-package "0.0.0"
- minimist "^1.2.0"
- mkdirp "^0.5.1"
- napi-build-utils "^1.0.1"
- node-abi "^2.7.0"
- noop-logger "^0.1.1"
- npmlog "^4.0.1"
- os-homedir "^1.0.1"
- pump "^2.0.1"
- rc "^1.2.7"
- simple-get "^2.7.0"
- tar-fs "^1.13.0"
- tunnel-agent "^0.6.0"
- which-pm-runs "^1.0.0"
-
-precond@0.2:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
- integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
- integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
-prepend-http@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
- integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
-
-prepend-http@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
- integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-
-private@^0.1.6, private@^0.1.8:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
- integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-process@~0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
- integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
-
-progress@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-promise-to-callback@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7"
- integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=
- dependencies:
- is-fn "^1.0.0"
- set-immediate-shim "^1.0.1"
-
-promisify-child-process@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/promisify-child-process/-/promisify-child-process-3.1.1.tgz#3a029c1d97bdb8bbcc8862c765b91f1cee0f2691"
- integrity sha512-683UHZEP4Bm75BvBujEe87AdE9lxnoWpcU5pEw4FG9HCSwwZC9pF7HUj3QmlDAvhyvulkWHLZs1lVRBNTvkbXQ==
- dependencies:
- "@babel/runtime" "^7.1.5"
-
-proxy-addr@~2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
- integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
- dependencies:
- forwarded "~0.1.2"
- ipaddr.js "1.9.0"
-
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
- integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-pseudomap@^1.0.1, pseudomap@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
- integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-
-psl@^1.1.24:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6"
- integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==
-
-public-encrypt@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
- integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
- safe-buffer "^5.1.2"
-
-pull-cat@^1.1.9:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b"
- integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs=
-
-pull-defer@^0.2.2:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113"
- integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA==
-
-pull-level@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac"
- integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg==
- dependencies:
- level-post "^1.0.7"
- pull-cat "^1.1.9"
- pull-live "^1.0.1"
- pull-pushable "^2.0.0"
- pull-stream "^3.4.0"
- pull-window "^2.1.4"
- stream-to-pull-stream "^1.7.1"
-
-pull-live@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5"
- integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU=
- dependencies:
- pull-cat "^1.1.9"
- pull-stream "^3.4.0"
-
-pull-pushable@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581"
- integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE=
-
-pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8:
- version "3.6.13"
- resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.13.tgz#181435322841b0397c7ed44ee5a3fae32662ac1b"
- integrity sha512-enbnbnO+czsPuCq9s9HTTzDzzVQD5TSe60aO3nBioeJ9mevh8RzE4Hxbujo9TReg1fJlmNEL8uyQTUgn8+rSHg==
-
-pull-window@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0"
- integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA=
- dependencies:
- looper "^2.0.0"
-
-pump@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
- integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-pump@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
- integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-punycode@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
- integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=
-
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-qs@6.7.0:
- version "6.7.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
- integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-
-qs@~6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-query-string@^5.0.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
- integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
- dependencies:
- decode-uri-component "^0.2.0"
- object-assign "^4.1.0"
- strict-uri-encode "^1.0.0"
-
-querystringify@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
- integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
- integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
- integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-randomhex@0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/randomhex/-/randomhex-0.1.5.tgz#baceef982329091400f2a2912c6cd02f1094f585"
- integrity sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=
-
-range-parser@~1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
- integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-
-raw-body@2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
- integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
- dependencies:
- bytes "3.1.0"
- http-errors "1.7.2"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
-rc@^1.2.7:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-readable-stream@^1.0.33:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
- integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@~1.0.15:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readdirp@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17"
- integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==
- dependencies:
- picomatch "^2.0.7"
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
- dependencies:
- resolve "^1.1.6"
-
-regenerate@^1.2.1:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
- integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
-
-regenerator-runtime@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
- integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-
-regenerator-runtime@^0.13.2:
- version "0.13.2"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
- integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
-
-regenerator-transform@^0.10.0:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
- integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
- dependencies:
- babel-runtime "^6.18.0"
- babel-types "^6.19.0"
- private "^0.1.6"
-
-regexpu-core@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
- integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
- dependencies:
- regenerate "^1.2.1"
- regjsgen "^0.2.0"
- regjsparser "^0.1.4"
-
-regjsgen@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
- integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
-
-regjsparser@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
- integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
- dependencies:
- jsesc "~0.5.0"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
- dependencies:
- is-finite "^1.0.0"
-
-request@^2.67.0, request@^2.79.0, request@^2.85.0:
- version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
- integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.0"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.4.3"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-
-require-from-string@^2.0.0, require-from-string@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
- integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
- integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
-
-require-main-filename@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
- integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-requires-port@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
- integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-
-resolve@1.1.x:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
- integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-
-resolve@^1.1.6, resolve@^1.3.2, resolve@~1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e"
- integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==
- dependencies:
- path-parse "^1.0.6"
-
-responselike@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
- integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
- dependencies:
- lowercase-keys "^1.0.0"
-
-resumer@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
- integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=
- dependencies:
- through "~2.3.4"
-
-rimraf@2, rimraf@^2.6.3:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
-rimraf@^2.2.8, rimraf@^2.6.2:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
- integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
- dependencies:
- glob "^7.1.3"
-
-rimraf@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b"
- integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==
- dependencies:
- glob "^7.1.3"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
- integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-rlp@^2.0.0, rlp@^2.2.1:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.3.tgz#7f94aef86cec412df87d5ea1d8cb116a47d45f0e"
- integrity sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==
- dependencies:
- bn.js "^4.11.1"
- safe-buffer "^5.1.1"
-
-rlp@^2.2.2, rlp@^2.2.3:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.4.tgz#d6b0e1659e9285fc509a5d169a9bd06f704951c1"
- integrity sha512-fdq2yYCWpAQBhwkZv+Z8o/Z4sPmYm1CUq6P7n6lVTOdb949CnqA0sndXal5C1NleSVSZm6q5F3iEbauyVln/iw==
- dependencies:
- bn.js "^4.11.1"
-
-rustbn.js@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca"
- integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==
-
-rxjs@^6.4.0, rxjs@^6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
- integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
- dependencies:
- tslib "^1.9.0"
-
-safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
- integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-
-safe-event-emitter@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af"
- integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==
- dependencies:
- events "^3.0.0"
-
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-scrypt-js@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4"
- integrity sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=
-
-scrypt-js@2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16"
- integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==
-
-scrypt.js@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.0.tgz#af8d1465b71e9990110bedfc593b9479e03a8ada"
- integrity sha1-r40UZbcemZARC+38WTuUeeA6ito=
- dependencies:
- scrypt "^6.0.2"
- scryptsy "^1.2.1"
-
-scrypt.js@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0"
- integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A==
- dependencies:
- scryptsy "^1.2.1"
- optionalDependencies:
- scrypt "^6.0.2"
-
-scrypt@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d"
- integrity sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=
- dependencies:
- nan "^2.0.8"
-
-scryptsy@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163"
- integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM=
- dependencies:
- pbkdf2 "^3.0.3"
-
-scryptsy@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790"
- integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==
-
-secp256k1@^3.0.1:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.7.1.tgz#12e473e0e9a7c2f2d4d4818e722ad0e14cc1e2f1"
- integrity sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==
- dependencies:
- bindings "^1.5.0"
- bip66 "^1.1.5"
- bn.js "^4.11.8"
- create-hash "^1.2.0"
- drbg.js "^1.0.1"
- elliptic "^6.4.1"
- nan "^2.14.0"
- safe-buffer "^5.1.2"
-
-seedrandom@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083"
- integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg==
-
-seek-bzip@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
- integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
- dependencies:
- commander "~2.8.1"
-
-semaphore-async-await@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa"
- integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo=
-
-semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa"
- integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==
-
-semver@5.5.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
- integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
-
-semver@^5.3.0, semver@^5.4.1:
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
- integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-
-semver@^5.5.0, semver@^5.7.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-semver@~5.4.1:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
- integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==
-
-send@0.17.1:
- version "0.17.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
- integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
- dependencies:
- debug "2.6.9"
- depd "~1.1.2"
- destroy "~1.0.4"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "~1.7.2"
- mime "1.6.0"
- ms "2.1.1"
- on-finished "~2.3.0"
- range-parser "~1.2.1"
- statuses "~1.5.0"
-
-serve-static@1.14.1:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
- integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.17.1"
-
-servify@^0.1.12:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95"
- integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==
- dependencies:
- body-parser "^1.16.0"
- cors "^2.8.1"
- express "^4.14.0"
- request "^2.79.0"
- xhr "^2.3.3"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
- integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
-
-setimmediate@1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f"
- integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=
-
-setimmediate@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-setprototypeof@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
- integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
-
-sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.11"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
- integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-sha3@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.3.tgz#ed5958fa8331df1b1b8529ca9fdf225a340c5418"
- integrity sha512-sOWDZi8cDBRkLfWOw18wvJyNblXDHzwMGnRWut8zNNeIeLnmMRO17bjpLc7OzMuj1ASUgx2IyohzUCAl+Kx5vA==
- dependencies:
- nan "2.13.2"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-
-shelljs@^0.7.3:
- version "0.7.8"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
- integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM=
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-shelljs@^0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
- integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-shx@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/shx/-/shx-0.2.2.tgz#0a304d020b0edf1306ad81570e80f0346df58a39"
- integrity sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=
- dependencies:
- es6-object-assign "^1.0.3"
- minimist "^1.2.0"
- shelljs "^0.7.3"
-
-signal-exit@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
- integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-
-simple-concat@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
- integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
-
-simple-get@^2.7.0:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d"
- integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==
- dependencies:
- decompress-response "^3.3.0"
- once "^1.3.1"
- simple-concat "^1.0.0"
-
-slash@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
- integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
-
-solc@^0.5.5:
- version "0.5.15"
- resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.15.tgz#f674ce93d4d04a86b65a4393657edf03b2f26028"
- integrity sha512-uI+7XtBu/0CXRc8IMjzxbh0haLwaBF32VxAkkks06zEk+mVcsQbHdjvojXX6zQYtZVuXdVYPVccoIjEhvvqKnQ==
- dependencies:
- command-exists "^1.2.8"
- commander "3.0.2"
- fs-extra "^0.30.0"
- js-sha3 "0.8.0"
- memorystream "^0.3.1"
- require-from-string "^2.0.0"
- semver "^5.5.0"
- tmp "0.0.33"
-
-solidity-parser-antlr@^0.4.2:
- version "0.4.11"
- resolved "https://registry.yarnpkg.com/solidity-parser-antlr/-/solidity-parser-antlr-0.4.11.tgz#af43e1f13b3b88309a875455f5d6e565b05ee5f1"
- integrity sha512-4jtxasNGmyC0midtjH/lTFPZYvTTUMy6agYcF+HoMnzW8+cqo3piFrINb4ZCzpPW+7tTVFCGa5ubP34zOzeuMg==
-
-source-map-support@0.5.12:
- version "0.5.12"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
- integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-support@0.5.6:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13"
- integrity sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-support@^0.4.15:
- version "0.4.18"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
- integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
- dependencies:
- source-map "^0.5.6"
-
-source-map-support@^0.5.0:
- version "0.5.16"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
- integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map@^0.5.6, source-map@^0.5.7:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
- dependencies:
- amdefine ">=0.0.4"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-sshpk@^1.7.0:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
- integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- bcrypt-pbkdf "^1.0.0"
- dashdash "^1.12.0"
- ecc-jsbn "~0.1.1"
- getpass "^0.1.1"
- jsbn "~0.1.0"
- safer-buffer "^2.0.2"
- tweetnacl "~0.14.0"
-
-"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
- integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-
-stream-to-pull-stream@^1.7.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece"
- integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg==
- dependencies:
- looper "^3.0.0"
- pull-stream "^3.2.3"
-
-strict-uri-encode@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
- integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
-
-string-width@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string-width@^3.0.0, string-width@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
- integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
- dependencies:
- emoji-regex "^7.0.1"
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.1.0"
-
-string.prototype.trim@^1.1.2, string.prototype.trim@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
- integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.0"
- function-bind "^1.0.2"
-
-string.prototype.trimleft@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
- integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==
- dependencies:
- define-properties "^1.1.3"
- function-bind "^1.1.1"
-
-string.prototype.trimright@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9"
- integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==
- dependencies:
- define-properties "^1.1.3"
- function-bind "^1.1.1"
-
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
- integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
- dependencies:
- ansi-regex "^4.1.0"
-
-strip-dirs@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
- integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
- dependencies:
- is-natural-number "^4.0.1"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
- integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-
-strip-hex-prefix@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
- integrity sha1-DF8VX+8RUTczd96du1iNoFUA428=
- dependencies:
- is-hex-prefixed "1.0.0"
-
-strip-json-comments@2.0.1, strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-supports-color@4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
- integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==
- dependencies:
- has-flag "^2.0.0"
-
-supports-color@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
- integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-
-supports-color@^3.1.0:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
- dependencies:
- has-flag "^1.0.0"
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-swarm-js@0.1.37:
- version "0.1.37"
- resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.37.tgz#27d485317a340bbeec40292af783cc10acfa4663"
- integrity sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==
- dependencies:
- bluebird "^3.5.0"
- buffer "^5.0.5"
- decompress "^4.0.0"
- eth-lib "^0.1.26"
- fs-extra "^2.1.2"
- fs-promise "^2.0.0"
- got "^7.1.0"
- mime-types "^2.1.16"
- mkdirp-promise "^5.0.1"
- mock-fs "^4.1.0"
- setimmediate "^1.0.5"
- tar.gz "^1.0.5"
- xhr-request-promise "^0.1.2"
-
-swarm-js@0.1.39:
- version "0.1.39"
- resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8"
- integrity sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==
- dependencies:
- bluebird "^3.5.0"
- buffer "^5.0.5"
- decompress "^4.0.0"
- eth-lib "^0.1.26"
- fs-extra "^4.0.2"
- got "^7.1.0"
- mime-types "^2.1.16"
- mkdirp-promise "^5.0.1"
- mock-fs "^4.1.0"
- setimmediate "^1.0.5"
- tar "^4.0.2"
- xhr-request-promise "^0.1.2"
-
-tape@^4.4.0, tape@^4.6.3, tape@^4.8.0:
- version "4.11.0"
- resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1"
- integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==
- dependencies:
- deep-equal "~1.0.1"
- defined "~1.0.0"
- for-each "~0.3.3"
- function-bind "~1.1.1"
- glob "~7.1.4"
- has "~1.0.3"
- inherits "~2.0.4"
- minimist "~1.2.0"
- object-inspect "~1.6.0"
- resolve "~1.11.1"
- resumer "~0.0.0"
- string.prototype.trim "~1.1.2"
- through "~2.3.8"
-
-tar-fs@^1.13.0:
- version "1.16.3"
- resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
- integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
- dependencies:
- chownr "^1.0.1"
- mkdirp "^0.5.1"
- pump "^1.0.0"
- tar-stream "^1.1.2"
-
-tar-stream@^1.1.2, tar-stream@^1.5.2:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
- integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
- dependencies:
- bl "^1.0.0"
- buffer-alloc "^1.2.0"
- end-of-stream "^1.0.0"
- fs-constants "^1.0.0"
- readable-stream "^2.3.0"
- to-buffer "^1.1.1"
- xtend "^4.0.0"
-
-tar.gz@^1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/tar.gz/-/tar.gz-1.0.7.tgz#577ef2c595faaa73452ef0415fed41113212257b"
- integrity sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==
- dependencies:
- bluebird "^2.9.34"
- commander "^2.8.1"
- fstream "^1.0.8"
- mout "^0.11.0"
- tar "^2.1.1"
-
-tar@^2.1.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
- integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
- dependencies:
- block-stream "*"
- fstream "^1.0.12"
- inherits "2"
-
-tar@^4.0.2:
- version "4.4.13"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
- integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
- dependencies:
- chownr "^1.1.1"
- fs-minipass "^1.2.5"
- minipass "^2.8.6"
- minizlib "^1.2.1"
- mkdirp "^0.5.0"
- safe-buffer "^5.1.2"
- yallist "^3.0.3"
-
-thenify-all@^1.0.0, thenify-all@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
- integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
- dependencies:
- thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
- integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
- dependencies:
- any-promise "^1.0.0"
-
-through2@^2.0.3:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-"through@>=2.2.7 <3", through@^2.3.8, through@~2.3.4, through@~2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
-timed-out@^4.0.0, timed-out@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
- integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
-
-tmp@0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
- dependencies:
- os-tmpdir "~1.0.2"
-
-tmp@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877"
- integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==
- dependencies:
- rimraf "^2.6.3"
-
-to-buffer@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
- integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
-
-to-fast-properties@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
- integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
-
-to-readable-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
- integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-toidentifier@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
- integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
-
-tough-cookie@~2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
- integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
- dependencies:
- psl "^1.1.24"
- punycode "^1.4.1"
-
-trim-right@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
- integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
-
-tslib@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
- integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
-
-tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
- integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
-
-tslint-eslint-rules@5.4.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5"
- integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==
- dependencies:
- doctrine "0.7.2"
- tslib "1.9.0"
- tsutils "^3.0.0"
-
-tslint-react@^3.2.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1"
- integrity sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==
- dependencies:
- tsutils "^2.13.1"
-
-tslint@5.11.0:
- version "5.11.0"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed"
- integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0=
- dependencies:
- babel-code-frame "^6.22.0"
- builtin-modules "^1.1.1"
- chalk "^2.3.0"
- commander "^2.12.1"
- diff "^3.2.0"
- glob "^7.1.1"
- js-yaml "^3.7.0"
- minimatch "^3.0.4"
- resolve "^1.3.2"
- semver "^5.3.0"
- tslib "^1.8.0"
- tsutils "^2.27.2"
-
-tsutils@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.0.0.tgz#0c5070a17a0503e056da038c48b5a1870a50a9ad"
- integrity sha512-LjHBWR0vWAUHWdIAoTjoqi56Kz+FDKBgVEuL+gVPG/Pv7QW5IdaDDeK9Txlr6U0Cmckp5EgCIq1T25qe3J6hyw==
- dependencies:
- tslib "^1.8.1"
-
-tsutils@^2.13.1, tsutils@^2.27.2:
- version "2.29.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
- integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
- dependencies:
- tslib "^1.8.1"
-
-tsutils@^3.0.0:
- version "3.14.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.14.0.tgz#bf8d5a7bae5369331fa0f2b0a5a10bd7f7396c77"
- integrity sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==
- dependencies:
- tslib "^1.8.1"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl-util@^0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz#4576c1cee5e2d63d207fee52f1ba02819480bc75"
- integrity sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU=
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
- integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-
-tweetnacl@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.1.tgz#2594d42da73cd036bd0d2a54683dd35a6b55ca17"
- integrity sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==
-
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
- dependencies:
- prelude-ls "~1.1.2"
-
-type-detect@^4.0.0, type-detect@^4.0.5:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
- integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
-type-is@~1.6.17, type-is@~1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
- integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.24"
-
-type@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/type/-/type-1.0.1.tgz#084c9a17fcc9151a2cdb1459905c2e45e4bb7d61"
- integrity sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==
-
-typedarray-to-buffer@^3.1.2, typedarray-to-buffer@^3.1.5:
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
- integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
- dependencies:
- is-typedarray "^1.0.0"
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
-typedoc-default-themes@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz#7e73bf54dd9e11550dd0fb576d5176b758f8f8b5"
- integrity sha512-MdTROOojxod78CEv22rIA69o7crMPLnVZPefuDLt/WepXqJwgiSu8Xxq+H36x0Jj3YGc7lOglI2vPJ2GhoOybw==
- dependencies:
- backbone "^1.4.0"
- jquery "^3.4.1"
- lunr "^2.3.6"
- underscore "^1.9.1"
-
-typedoc-plugin-markdown@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.1.0.tgz#17b7b97415b97214985d1a61ef7b9a4dce3e8305"
- integrity sha512-f7CgreapeUIpm85BnC4ec9PZp10INOpLpItSCV4YFlZS4VaBA/a1D2nYv9+7TVJugc084XlSFUY+OX9fwGAUpA==
-
-typedoc@^0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.15.0.tgz#21eaf4db41cf2797bad027a74f2a75cd08ae0c2d"
- integrity sha512-NOtfq5Tis4EFt+J2ozhVq9RCeUnfEYMFKoU6nCXCXUULJz1UQynOM+yH3TkfZCPLzigbqB0tQYGVlktUWweKlw==
- dependencies:
- "@types/minimatch" "3.0.3"
- fs-extra "^8.1.0"
- handlebars "^4.1.2"
- highlight.js "^9.15.8"
- lodash "^4.17.15"
- marked "^0.7.0"
- minimatch "^3.0.0"
- progress "^2.0.3"
- shelljs "^0.8.3"
- typedoc-default-themes "^0.6.0"
- typescript "3.5.x"
-
-typescript@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb"
- integrity sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==
-
-typescript@3.5.x:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977"
- integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==
-
-typewise-core@^1.2, typewise-core@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195"
- integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU=
-
-typewise@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651"
- integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=
- dependencies:
- typewise-core "^1.2.0"
-
-typewiselite@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e"
- integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4=
-
-u2f-api@0.2.7:
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720"
- integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==
-
-uglify-js@^3.1.4:
- version "3.8.0"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805"
- integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ==
- dependencies:
- commander "~2.20.3"
- source-map "~0.6.1"
-
-ultron@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
- integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
-
-unbzip2-stream@^1.0.9:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a"
- integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==
- dependencies:
- buffer "^5.2.1"
- through "^2.3.8"
-
-underscore@1.8.3:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
- integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=
-
-underscore@1.9.1, underscore@>=1.8.3, underscore@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
- integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
-
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-unorm@^1.3.3:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af"
- integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==
-
-unpipe@1.0.0, unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-uri-js@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
- dependencies:
- punycode "^2.1.0"
-
-url-parse-lax@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
- integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
- dependencies:
- prepend-http "^1.0.1"
-
-url-parse-lax@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
- integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
- dependencies:
- prepend-http "^2.0.0"
-
-url-parse@1.4.4:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8"
- integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==
- dependencies:
- querystringify "^2.0.0"
- requires-port "^1.0.0"
-
-url-set-query@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339"
- integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=
-
-url-to-options@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
- integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
-
-usb@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.0.tgz#bc5d4decf4ffca32d1136717edcf73366137a789"
- integrity sha512-52DyWlCk9K+iw3LnvY95WXSnpHjxJoI++aGkV8HiMNPc4zmvDQlYvWAzrkbJ2JH3oUcx26XfU5sZcG4RAcVkMg==
- dependencies:
- bindings "^1.4.0"
- nan "2.13.2"
- prebuild-install "^5.2.4"
-
-utf8@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768"
- integrity sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=
-
-utf8@3.0.0, utf8@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
- integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-util.promisify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
- integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
- dependencies:
- define-properties "^1.1.2"
- object.getownpropertydescriptors "^2.0.3"
-
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
- integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-
-uuid-validate@^0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/uuid-validate/-/uuid-validate-0.0.3.tgz#e30617f75dc742a0e4f95012a11540faf9d39ab4"
- integrity sha512-Fykw5U4eZESbq739BeLvEBFRuJODfrlmjx5eJux7W817LjRaq4b7/i4t2zxQmhcX+fAj4nMfRdTzO4tmwLKn0w==
-
-uuid@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac"
- integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=
-
-uuid@3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
- integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==
-
-uuid@3.3.2, uuid@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
- integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
-
-valid-url@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
- integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=
-
-vary@^1, vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-web3-bzz@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.35.tgz#9d5e1362b3db2afd77d65619b7cd46dd5845c192"
- integrity sha512-BhAU0qhlr8zltm4gs/+P1gki2VkxHJaM2Rrh4DGesDW0lzwufRoNvWFlwx1bKHoFPWNbSmm9PRkHOYOINL/Tgw==
- dependencies:
- got "7.1.0"
- swarm-js "0.1.37"
- underscore "1.8.3"
-
-web3-bzz@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.4.tgz#a4adb7a8cba3d260de649bdb1f14ed359bfb3821"
- integrity sha512-MqhAo/+0iQSMBtt3/QI1rU83uvF08sYq8r25+OUZ+4VtihnYsmkkca+rdU0QbRyrXY2/yGIpI46PFdh0khD53A==
- dependencies:
- "@types/node" "^10.12.18"
- got "9.6.0"
- swarm-js "0.1.39"
- underscore "1.9.1"
-
-web3-core-helpers@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.35.tgz#d681d218a0c6e3283ee1f99a078ab9d3eef037f1"
- integrity sha512-APOu3sEsamyqWt//8o4yq9KF25/uqGm+pQShson/sC4gKzmfJB07fLo2ond0X30E8fIqAPeVCotPXQxGciGUmA==
- dependencies:
- underscore "1.8.3"
- web3-eth-iban "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-core-helpers@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz#ffd425861f4d66b3f38df032afdb39ea0971fc0f"
- integrity sha512-U7wbsK8IbZvF3B7S+QMSNP0tni/6VipnJkB0tZVEpHEIV2WWeBHYmZDnULWcsS/x/jn9yKhJlXIxWGsEAMkjiw==
- dependencies:
- underscore "1.9.1"
- web3-eth-iban "1.2.4"
- web3-utils "1.2.4"
-
-web3-core-helpers@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-2.0.0-alpha.1.tgz#d20db557fe8740578105fb6b5790eb22097d1974"
- integrity sha512-YUDECwESRI2Bw3ijEaGGkYhEAyqQF17KFtul9Y6OZLtYx6W7bJCMKbSFigLl99F3zFLZ8E/dwzCizSrD+DuWIQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- lodash "^4.17.11"
- web3-core "2.0.0-alpha.1"
- web3-eth-iban "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
-
-web3-core-method@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.35.tgz#fc10e2d546cf4886038e6130bd5726b0952a4e5f"
- integrity sha512-jidImCide8q0GpfsO4L73qoHrbkeWgwU3uOH5DKtJtv0ccmG086knNMRgryb/o9ZgetDWLmDEsJnHjBSoIwcbA==
- dependencies:
- underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.35"
- web3-core-promievent "1.0.0-beta.35"
- web3-core-subscriptions "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-core-method@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed"
- integrity sha512-8p9kpL7di2qOVPWgcM08kb+yKom0rxRCMv6m/K+H+yLSxev9TgMbCgMSbPWAHlyiF3SJHw7APFKahK5Z+8XT5A==
- dependencies:
- underscore "1.9.1"
- web3-core-helpers "1.2.4"
- web3-core-promievent "1.2.4"
- web3-core-subscriptions "1.2.4"
- web3-utils "1.2.4"
-
-web3-core-method@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-2.0.0-alpha.1.tgz#6fd59cd229550bd08cb8922c095870fc9bf35f66"
- integrity sha512-RlKYn9spgKAbIU9IV5UCQBLAcblLf5O6LYCGacRk0Iyz2SE0bVMtd7CY1pcsIXegNFiT3CPk+XvcpOIehZBhVQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- eventemitter3 "3.1.0"
- lodash "^4.17.11"
- rxjs "^6.4.0"
- web3-core "2.0.0-alpha.1"
- web3-core-helpers "2.0.0-alpha.1"
- web3-core-subscriptions "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
-
-web3-core-promievent@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.35.tgz#4f1b24737520fa423fee3afee110fbe82bcb8691"
- integrity sha512-GvqXqKq07OmHuVi5uNRg6k79a1/CI0ViCC+EtNv4CORHtDRmYEt5Bvdv6z6FJEiaaQkD0lKbFwNhLxutx7HItw==
- dependencies:
- any-promise "1.3.0"
- eventemitter3 "1.1.1"
-
-web3-core-promievent@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb"
- integrity sha512-gEUlm27DewUsfUgC3T8AxkKi8Ecx+e+ZCaunB7X4Qk3i9F4C+5PSMGguolrShZ7Zb6717k79Y86f3A00O0VAZw==
- dependencies:
- any-promise "1.3.0"
- eventemitter3 "3.1.2"
-
-web3-core-requestmanager@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.35.tgz#2b77cbf6303720ad68899b39fa7f584dc03dbc8f"
- integrity sha512-S+zW2h17ZZQU9oe3yaCJE0E7aJS4C3Kf4kGPDv+nXjW0gKhQQhgVhw1Doq/aYQGqNSWJp7f1VHkz5gQWwg6RRg==
- dependencies:
- underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.35"
- web3-providers-http "1.0.0-beta.35"
- web3-providers-ipc "1.0.0-beta.35"
- web3-providers-ws "1.0.0-beta.35"
-
-web3-core-requestmanager@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz#0a7020a23fb91c6913c611dfd3d8c398d1e4b4a8"
- integrity sha512-eZJDjyNTDtmSmzd3S488nR/SMJtNnn/GuwxnMh3AzYCqG3ZMfOylqTad2eYJPvc2PM5/Gj1wAMQcRpwOjjLuPg==
- dependencies:
- underscore "1.9.1"
- web3-core-helpers "1.2.4"
- web3-providers-http "1.2.4"
- web3-providers-ipc "1.2.4"
- web3-providers-ws "1.2.4"
-
-web3-core-subscriptions@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.35.tgz#c1b76a2ad3c6e80f5d40b8ba560f01e0f4628758"
- integrity sha512-gXzLrWvcGkGiWq1y33Z4Y80XI8XMrwowiQJkrPSjQ81K5PBKquOGwcMffLaKcwdmEy/NpsOXDeFo3eLE1Ghvvw==
- dependencies:
- eventemitter3 "1.1.1"
- underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.35"
-
-web3-core-subscriptions@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz#0dc095b5cfd82baa527a39796e3515a846b21b99"
- integrity sha512-3D607J2M8ymY9V+/WZq4MLlBulwCkwEjjC2U+cXqgVO1rCyVqbxZNCmHyNYHjDDCxSEbks9Ju5xqJxDSxnyXEw==
- dependencies:
- eventemitter3 "3.1.2"
- underscore "1.9.1"
- web3-core-helpers "1.2.4"
-
-web3-core-subscriptions@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-2.0.0-alpha.1.tgz#5c2164ce8649645f6809dcdc34626ae12ec0d19b"
- integrity sha512-fOr5DCz1QjwBPf/ssJ49Q0LVi5PUOkHmJ1y+5aSSJZmcuAZ9h1FJp7ANqAI7p7ssXnm9RpCDMg5vGa8tyYyAXA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- eventemitter3 "^4.0.0"
- lodash "^4.17.11"
-
-web3-core@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.35.tgz#0c44d3c50d23219b0b1531d145607a9bc7cd4b4f"
- integrity sha512-ayGavbgVk4KL9Y88Uv411fBJ0SVgVfKhKEBweKYzmP0zOqneMzWt6YsyD1n6kRvjAbqA0AfUPEOKyMNjcx2tjw==
- dependencies:
- web3-core-helpers "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-core-requestmanager "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-core@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6"
- integrity sha512-CHc27sMuET2cs1IKrkz7xzmTdMfZpYswe7f0HcuyneTwS1yTlTnHyqjAaTy0ZygAb/x4iaVox+Gvr4oSAqSI+A==
- dependencies:
- "@types/bignumber.js" "^5.0.0"
- "@types/bn.js" "^4.11.4"
- "@types/node" "^12.6.1"
- web3-core-helpers "1.2.4"
- web3-core-method "1.2.4"
- web3-core-requestmanager "1.2.4"
- web3-utils "1.2.4"
-
-web3-core@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-2.0.0-alpha.1.tgz#4bb87b860a0bbf9fd19ae380a4773e12ac3b3010"
- integrity sha512-7fBl1h9Z46q0n8ugjYWMZsBP1tLlt8Rp4dRDF11EUNFQo1ll60tHj9PdjQIcKqoTd9EKhjYeZUWIsLf7YuipqA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- "@types/bn.js" "^4.11.4"
- "@types/node" "^12.6.1"
- lodash "^4.17.11"
- web3-core-method "2.0.0-alpha.1"
- web3-providers "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
-
-web3-eth-abi@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.35.tgz#2eb9c1c7c7233db04010defcb192293e0db250e6"
- integrity sha512-KUDC+EtFFYG8z01ZleKrASdjj327/rtWHzEt6RWsEj7bBa0bGp9nEh+nqdZx/Sdgz1O8tnfFzJlrRcXpfr1vGg==
- dependencies:
- bn.js "4.11.6"
- underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-eth-abi@1.2.4, web3-eth-abi@^1.0.0-beta.24:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8"
- integrity sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg==
- dependencies:
- ethers "4.0.0-beta.3"
- underscore "1.9.1"
- web3-utils "1.2.4"
-
-web3-eth-accounts@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.35.tgz#7d0e5a69f510dc93874471599eb7abfa9ddf3e63"
- integrity sha512-duIgRsfht/0kAW/eQ0X9lKtVIykbETrnM2H7EnvplCzPHtQLodpib4o9JXfh9n6ZDgdDC7cuJoiVB9QJg089ew==
- dependencies:
- any-promise "1.3.0"
- crypto-browserify "3.12.0"
- eth-lib "0.2.7"
- scrypt.js "0.2.0"
- underscore "1.8.3"
- uuid "2.0.1"
- web3-core "1.0.0-beta.35"
- web3-core-helpers "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-eth-accounts@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz#ada6edc49542354328a85cafab067acd7f88c288"
- integrity sha512-04LzT/UtWmRFmi4hHRewP5Zz43fWhuHiK5XimP86sUQodk/ByOkXQ3RoXyGXFMNoRxdcAeRNxSfA2DpIBc9xUw==
- dependencies:
- "@web3-js/scrypt-shim" "^0.1.0"
- any-promise "1.3.0"
- crypto-browserify "3.12.0"
- eth-lib "0.2.7"
- ethereumjs-common "^1.3.2"
- ethereumjs-tx "^2.1.1"
- underscore "1.9.1"
- uuid "3.3.2"
- web3-core "1.2.4"
- web3-core-helpers "1.2.4"
- web3-core-method "1.2.4"
- web3-utils "1.2.4"
-
-web3-eth-contract@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.35.tgz#5276242d8a3358d9f1ce92b71575c74f9015935c"
- integrity sha512-foPohOg5O1UCGKGZOIs+kQK5IZdV2QQ7pAWwNxH8WHplUA+fre1MurXNpoxknUmH6mYplFhXjqgYq2MsrBpHrA==
- dependencies:
- underscore "1.8.3"
- web3-core "1.0.0-beta.35"
- web3-core-helpers "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-core-promievent "1.0.0-beta.35"
- web3-core-subscriptions "1.0.0-beta.35"
- web3-eth-abi "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-eth-contract@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz#68ef7cc633232779b0a2c506a810fbe903575886"
- integrity sha512-b/9zC0qjVetEYnzRA1oZ8gF1OSSUkwSYi5LGr4GeckLkzXP7osEnp9lkO/AQcE4GpG+l+STnKPnASXJGZPgBRQ==
- dependencies:
- "@types/bn.js" "^4.11.4"
- underscore "1.9.1"
- web3-core "1.2.4"
- web3-core-helpers "1.2.4"
- web3-core-method "1.2.4"
- web3-core-promievent "1.2.4"
- web3-core-subscriptions "1.2.4"
- web3-eth-abi "1.2.4"
- web3-utils "1.2.4"
-
-web3-eth-ens@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e"
- integrity sha512-g8+JxnZlhdsCzCS38Zm6R/ngXhXzvc3h7bXlxgKU4coTzLLoMpgOAEz71GxyIJinWTFbLXk/WjNY0dazi9NwVw==
- dependencies:
- eth-ens-namehash "2.0.8"
- underscore "1.9.1"
- web3-core "1.2.4"
- web3-core-helpers "1.2.4"
- web3-core-promievent "1.2.4"
- web3-eth-abi "1.2.4"
- web3-eth-contract "1.2.4"
- web3-utils "1.2.4"
-
-web3-eth-iban@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.35.tgz#5aa10327a9abb26bcfc4ba79d7bad18a002b332c"
- integrity sha512-H5wkcNcAIc+h/WoDIKv7ZYmrM2Xqu3O7jBQl1IWo73EDVQji+AoB2i3J8tuwI1yZRInRwrfpI3Zuwuf54hXHmQ==
- dependencies:
- bn.js "4.11.6"
- web3-utils "1.0.0-beta.35"
-
-web3-eth-iban@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz#8e0550fd3fd8e47a39357d87fe27dee9483ee476"
- integrity sha512-D9HIyctru/FLRpXakRwmwdjb5bWU2O6UE/3AXvRm6DCOf2e+7Ve11qQrPtaubHfpdW3KWjDKvlxV9iaFv/oTMQ==
- dependencies:
- bn.js "4.11.8"
- web3-utils "1.2.4"
-
-web3-eth-iban@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-2.0.0-alpha.1.tgz#79f1f6061b95b5bb64eb4243a6c65dadf542077c"
- integrity sha512-I9oD+kjiF/RPYslndfr4UlhU/zdP67+LYG5dMx6zEM+KUmHdwQeMTp4w3NVZny7/pOtXA1w6dJJ2tL/OVfGkkw==
- dependencies:
- "@babel/runtime" "^7.3.1"
- bn.js "4.11.8"
- web3-utils "2.0.0-alpha.1"
-
-web3-eth-personal@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.35.tgz#ecac95b7a53d04a567447062d5cae5f49879e89f"
- integrity sha512-AcM9nnlxu7ZRRxPvkrFB9eLxMM4A2cPfj2aCg21Wb2EpMnhR+b/O1cT33k7ApRowoMpM+T9M8vx2oPNwXfaCOQ==
- dependencies:
- web3-core "1.0.0-beta.35"
- web3-core-helpers "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-net "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-eth-personal@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b"
- integrity sha512-5Russ7ZECwHaZXcN3DLuLS7390Vzgrzepl4D87SD6Sn1DHsCZtvfdPIYwoTmKNp69LG3mORl7U23Ga5YxqkICw==
- dependencies:
- "@types/node" "^12.6.1"
- web3-core "1.2.4"
- web3-core-helpers "1.2.4"
- web3-core-method "1.2.4"
- web3-net "1.2.4"
- web3-utils "1.2.4"
-
-web3-eth@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.35.tgz#c52c804afb95e6624b6f5e72a9af90fbf5005b68"
- integrity sha512-04mcb2nGPXThawuuYICPOxv0xOHofvQKsjZeIq+89nyOC8DQMGTAErDkGyMHQYtjpth5XDhic0wuEsA80AmFZA==
- dependencies:
- underscore "1.8.3"
- web3-core "1.0.0-beta.35"
- web3-core-helpers "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-core-subscriptions "1.0.0-beta.35"
- web3-eth-abi "1.0.0-beta.35"
- web3-eth-accounts "1.0.0-beta.35"
- web3-eth-contract "1.0.0-beta.35"
- web3-eth-iban "1.0.0-beta.35"
- web3-eth-personal "1.0.0-beta.35"
- web3-net "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-eth@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.4.tgz#24c3b1f1ac79351bbfb808b2ab5c585fa57cdd00"
- integrity sha512-+j+kbfmZsbc3+KJpvHM16j1xRFHe2jBAniMo1BHKc3lho6A8Sn9Buyut6odubguX2AxoRArCdIDCkT9hjUERpA==
- dependencies:
- underscore "1.9.1"
- web3-core "1.2.4"
- web3-core-helpers "1.2.4"
- web3-core-method "1.2.4"
- web3-core-subscriptions "1.2.4"
- web3-eth-abi "1.2.4"
- web3-eth-accounts "1.2.4"
- web3-eth-contract "1.2.4"
- web3-eth-ens "1.2.4"
- web3-eth-iban "1.2.4"
- web3-eth-personal "1.2.4"
- web3-net "1.2.4"
- web3-utils "1.2.4"
-
-web3-net@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.35.tgz#5c6688e0dea71fcd910ee9dc5437b94b7f6b3354"
- integrity sha512-bbwaQ/KohGjIJ6HAKbZ6KrklCAaG6/B7hIbAbVLSFLxF+Yz9lmAgQYaDInpidpC/NLb3WOmcbRF+P77J4qMVIA==
- dependencies:
- web3-core "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3-net@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.4.tgz#1d246406d3aaffbf39c030e4e98bce0ca5f25458"
- integrity sha512-wKOsqhyXWPSYTGbp7ofVvni17yfRptpqoUdp3SC8RAhDmGkX6irsiT9pON79m6b3HUHfLoBilFQyt/fTUZOf7A==
- dependencies:
- web3-core "1.2.4"
- web3-core-method "1.2.4"
- web3-utils "1.2.4"
-
-web3-provider-engine@14.0.6:
- version "14.0.6"
- resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0"
- integrity sha512-tr5cGSyxfSC/JqiUpBlJtfZpwQf1yAA8L/zy1C6fDFm0ntR974pobJ4v4676atpZne4Ze5VFy3kPPahHe9gQiQ==
- dependencies:
- async "^2.5.0"
- backoff "^2.5.0"
- clone "^2.0.0"
- cross-fetch "^2.1.0"
- eth-block-tracker "^3.0.0"
- eth-json-rpc-infura "^3.1.0"
- eth-sig-util "^1.4.2"
- ethereumjs-block "^1.2.2"
- ethereumjs-tx "^1.2.0"
- ethereumjs-util "^5.1.5"
- ethereumjs-vm "^2.3.4"
- json-rpc-error "^2.0.0"
- json-stable-stringify "^1.0.1"
- promise-to-callback "^1.0.0"
- readable-stream "^2.2.9"
- request "^2.67.0"
- semaphore "^1.0.3"
- tape "^4.4.0"
- ws "^5.1.1"
- xhr "^2.2.0"
- xtend "^4.0.1"
-
-web3-provider-engine@14.2.0:
- version "14.2.0"
- resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.0.tgz#2efec157b2c429c5c674c079aea96b0a06de8b3d"
- integrity sha512-sfLH5VhGjJrJJT5WcF8aGehcIKRUQ553q9tjQkkLaKU2AaLsRcwffnnWvrgeTkmKSf0y9dwkDTa48RVp+GUCSg==
- dependencies:
- async "^2.5.0"
- backoff "^2.5.0"
- clone "^2.0.0"
- cross-fetch "^2.1.0"
- eth-block-tracker "^3.0.0"
- eth-json-rpc-infura "^3.1.0"
- eth-sig-util "^1.4.2"
- ethereumjs-block "^1.2.2"
- ethereumjs-tx "^1.2.0"
- ethereumjs-util "^5.1.5"
- ethereumjs-vm "^2.3.4"
- json-rpc-error "^2.0.0"
- json-stable-stringify "^1.0.1"
- promise-to-callback "^1.0.0"
- readable-stream "^2.2.9"
- request "^2.85.0"
- semaphore "^1.0.3"
- ws "^5.1.1"
- xhr "^2.2.0"
- xtend "^4.0.1"
-
-web3-provider-engine@14.2.1:
- version "14.2.1"
- resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95"
- integrity sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw==
- dependencies:
- async "^2.5.0"
- backoff "^2.5.0"
- clone "^2.0.0"
- cross-fetch "^2.1.0"
- eth-block-tracker "^3.0.0"
- eth-json-rpc-infura "^3.1.0"
- eth-sig-util "^1.4.2"
- ethereumjs-block "^1.2.2"
- ethereumjs-tx "^1.2.0"
- ethereumjs-util "^5.1.5"
- ethereumjs-vm "^2.3.4"
- json-rpc-error "^2.0.0"
- json-stable-stringify "^1.0.1"
- promise-to-callback "^1.0.0"
- readable-stream "^2.2.9"
- request "^2.85.0"
- semaphore "^1.0.3"
- ws "^5.1.1"
- xhr "^2.2.0"
- xtend "^4.0.1"
-
-web3-providers-http@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.0.0-beta.35.tgz#92059d9d6de6e9f82f4fae30b743efd841afc1e1"
- integrity sha512-DcIMFq52Fb08UpWyZ3ZlES6NsNqJnco4hBS/Ej6eOcASfuUayPI+GLkYVZsnF3cBYqlH+DOKuArcKSuIxK7jIA==
- dependencies:
- web3-core-helpers "1.0.0-beta.35"
- xhr2-cookies "1.1.0"
-
-web3-providers-http@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.4.tgz#514fcad71ae77832c2c15574296282fbbc5f4a67"
- integrity sha512-dzVCkRrR/cqlIrcrWNiPt9gyt0AZTE0J+MfAu9rR6CyIgtnm1wFUVVGaxYRxuTGQRO4Dlo49gtoGwaGcyxqiTw==
- dependencies:
- web3-core-helpers "1.2.4"
- xhr2-cookies "1.1.0"
-
-web3-providers-ipc@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.35.tgz#031afeb10fade2ebb0ef2fb82f5e58c04be842d9"
- integrity sha512-iB0FG0HcpUnayfa8pn4guqEQ4Y1nrroi/jffdtQgFkrNt0sD3fMSwwC0AbmECqj3tDLl0e1slBR0RENll+ZF0g==
- dependencies:
- oboe "2.1.3"
- underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.35"
-
-web3-providers-ipc@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz#9d6659f8d44943fb369b739f48df09092be459bd"
- integrity sha512-8J3Dguffin51gckTaNrO3oMBo7g+j0UNk6hXmdmQMMNEtrYqw4ctT6t06YOf9GgtOMjSAc1YEh3LPrvgIsR7og==
- dependencies:
- oboe "2.1.4"
- underscore "1.9.1"
- web3-core-helpers "1.2.4"
-
-web3-providers-ws@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.35.tgz#5d38603fd450243a26aae0ff7f680644e77fa240"
- integrity sha512-Cx64NgDStynKaUGDIIOfaCd0fZusL8h5avKTkdTjUu2aHhFJhZoVBGVLhoDtUaqZGWIZGcBJOoVf2JkGUOjDRQ==
- dependencies:
- underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.35"
- websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible"
-
-web3-providers-ws@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz#099ee271ee03f6ea4f5df9cfe969e83f4ce0e36f"
- integrity sha512-F/vQpDzeK+++oeeNROl1IVTufFCwCR2hpWe5yRXN0ApLwHqXrMI7UwQNdJ9iyibcWjJf/ECbauEEQ8CHgE+MYQ==
- dependencies:
- "@web3-js/websocket" "^1.0.29"
- underscore "1.9.1"
- web3-core-helpers "1.2.4"
-
-web3-providers@2.0.0-alpha.1, web3-providers@^2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-providers/-/web3-providers-2.0.0-alpha.1.tgz#19486aed4b014ec5d7687fac4eef2042db8b338c"
- integrity sha512-X7hDkLKVN1U5aWeNQeErev494VSgt4gHJpHTgXn2rxrdJYUf7+6e6Al7yvRHlDxoTzhycX+j11HQC+CZlA+uhQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- "@types/node" "^10.12.18"
- eventemitter3 "3.1.0"
- lodash "^4.17.11"
- url-parse "1.4.4"
- web3-core "2.0.0-alpha.1"
- web3-core-helpers "2.0.0-alpha.1"
- web3-core-method "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
- websocket "github:web3-js/WebSocket-Node#polyfill/globalThis"
- xhr2-cookies "1.1.0"
-
-web3-shh@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.35.tgz#7e4a585f8beee0c1927390937c6537748a5d1a58"
- integrity sha512-8qSonk/x0xabERS9Sr6AIADN/Ty+5KwARkkGIfSYHKqFpdMDz+76F7cUCxtoCZoS8K04xgZlDKYe0TJXLYA0Fw==
- dependencies:
- web3-core "1.0.0-beta.35"
- web3-core-method "1.0.0-beta.35"
- web3-core-subscriptions "1.0.0-beta.35"
- web3-net "1.0.0-beta.35"
-
-web3-shh@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd"
- integrity sha512-z+9SCw0dE+69Z/Hv8809XDbLj7lTfEv9Sgu8eKEIdGntZf4v7ewj5rzN5bZZSz8aCvfK7Y6ovz1PBAu4QzS4IQ==
- dependencies:
- web3-core "1.2.4"
- web3-core-method "1.2.4"
- web3-core-subscriptions "1.2.4"
- web3-net "1.2.4"
-
-web3-utils@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.35.tgz#ced9e1df47c65581c441c5f2af76b05a37a273d7"
- integrity sha512-Dq6f0SOKj3BDFRgOPnE6ALbzBDCKVIW8mKWVf7tGVhTDHf+wQaWwQSC3aArFSqdExB75BPBPyDpuMTNszhljpA==
- dependencies:
- bn.js "4.11.6"
- eth-lib "0.1.27"
- ethjs-unit "0.1.6"
- number-to-bn "1.7.0"
- randomhex "0.1.5"
- underscore "1.8.3"
- utf8 "2.1.1"
-
-web3-utils@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951"
- integrity sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ==
- dependencies:
- bn.js "4.11.8"
- eth-lib "0.2.7"
- ethereum-bloom-filters "^1.0.6"
- ethjs-unit "0.1.6"
- number-to-bn "1.7.0"
- randombytes "^2.1.0"
- underscore "1.9.1"
- utf8 "3.0.0"
-
-web3-utils@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-2.0.0-alpha.1.tgz#231442adea3b58bca0c7185ee5b7743c01938682"
- integrity sha512-xZY9rPC/5S2utQV26x2oeWlBjs1cGwO+AAwv0smK2zjNi6UeTZjG9aZ/RJZJpToIapKhdtmQI6yZ8/ZQNDRGGg==
- dependencies:
- "@babel/runtime" "^7.3.1"
- "@types/bn.js" "^4.11.4"
- "@types/node" "^12.6.1"
- bn.js "4.11.8"
- eth-lib "0.2.8"
- ethjs-unit "^0.1.6"
- lodash "^4.17.11"
- number-to-bn "1.7.0"
- randombytes "^2.1.0"
- utf8 "2.1.1"
-
-web3@1.0.0-beta.35:
- version "1.0.0-beta.35"
- resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.35.tgz#6475095bd451a96e50a32b997ddee82279292f11"
- integrity sha512-xwDmUhvTcHQvvNnOPcPZZgCxKUsI2e+GbHy7JkTK3/Rmnutazy8x7fsAXT9myw7V1qpi3GgLoZ3fkglSUbg1Mg==
- dependencies:
- web3-bzz "1.0.0-beta.35"
- web3-core "1.0.0-beta.35"
- web3-eth "1.0.0-beta.35"
- web3-eth-personal "1.0.0-beta.35"
- web3-net "1.0.0-beta.35"
- web3-shh "1.0.0-beta.35"
- web3-utils "1.0.0-beta.35"
-
-web3@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9"
- integrity sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A==
- dependencies:
- "@types/node" "^12.6.1"
- web3-bzz "1.2.4"
- web3-core "1.2.4"
- web3-eth "1.2.4"
- web3-eth-personal "1.2.4"
- web3-net "1.2.4"
- web3-shh "1.2.4"
- web3-utils "1.2.4"
-
-websocket@1.0.29, websocket@^1.0.29, "websocket@github:web3-js/WebSocket-Node#polyfill/globalThis":
- version "1.0.29"
- resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/905deb4812572b344f5801f8c9ce8bb02799d82e"
- dependencies:
- debug "^2.2.0"
- es5-ext "^0.10.50"
- nan "^2.14.0"
- typedarray-to-buffer "^3.1.5"
- yaeti "^0.0.6"
-
-"websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible":
- version "1.0.26"
- resolved "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2"
- dependencies:
- debug "^2.2.0"
- nan "^2.3.3"
- typedarray-to-buffer "^3.1.2"
- yaeti "^0.0.6"
-
-whatwg-fetch@2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
- integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
-
-whatwg-fetch@>=0.10.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
- integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
-
-which-module@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
- integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-
-which-pm-runs@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
- integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
-
-which@1.3.1, which@^1.1.1, which@^1.2.9:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
-
-wide-align@1.1.3, wide-align@^1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
- integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
- dependencies:
- string-width "^1.0.2 || 2"
-
-word-wrap@~1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
- integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-
-wordwrap@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
- integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
- integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrap-ansi@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
- integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
- dependencies:
- ansi-styles "^3.2.0"
- string-width "^3.0.0"
- strip-ansi "^5.0.0"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-ws@^3.0.0:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
- integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
- dependencies:
- async-limiter "~1.0.0"
- safe-buffer "~5.1.0"
- ultron "~1.1.0"
-
-ws@^5.1.1:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
- integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
- dependencies:
- async-limiter "~1.0.0"
-
-xhr-request-promise@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz#343c44d1ee7726b8648069682d0f840c83b4261d"
- integrity sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=
- dependencies:
- xhr-request "^1.0.1"
-
-xhr-request@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed"
- integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==
- dependencies:
- buffer-to-arraybuffer "^0.0.5"
- object-assign "^4.1.1"
- query-string "^5.0.1"
- simple-get "^2.7.0"
- timed-out "^4.0.1"
- url-set-query "^1.0.0"
- xhr "^2.0.4"
-
-xhr2-cookies@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48"
- integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=
- dependencies:
- cookiejar "^2.1.1"
-
-xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
- integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==
- dependencies:
- global "~4.3.0"
- is-function "^1.0.1"
- parse-headers "^2.0.0"
- xtend "^4.0.0"
-
-xmlhttprequest@1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
- integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=
-
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-xtend@~2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
- integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
- dependencies:
- object-keys "~0.4.0"
-
-y18n@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
- integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
-
-y18n@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
- integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
-
-yaeti@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
- integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=
-
-yallist@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
- integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-
-yallist@^3.0.0, yallist@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
- integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
-
-yargs-parser@13.1.1, yargs-parser@^13.1.1:
- version "13.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
- integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
-
-yargs-parser@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
- integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==
- dependencies:
- camelcase "^4.1.0"
-
-yargs-unparser@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f"
- integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==
- dependencies:
- flat "^4.1.0"
- lodash "^4.17.15"
- yargs "^13.3.0"
-
-yargs@13.3.0, yargs@^13.3.0:
- version "13.3.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
- integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
- dependencies:
- cliui "^5.0.0"
- find-up "^3.0.0"
- get-caller-file "^2.0.1"
- require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^3.0.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^13.1.1"
-
-yargs@^10.0.3:
- version "10.1.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
- integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==
- dependencies:
- cliui "^4.0.0"
- decamelize "^1.1.1"
- find-up "^2.1.0"
- get-caller-file "^1.0.1"
- os-locale "^2.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1"
- yargs-parser "^8.1.0"
-
-yauzl@^2.4.2:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
- dependencies:
- buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"
diff --git a/rpc/client.go b/rpc/client.go
deleted file mode 100644
index dd2a3f704..000000000
--- a/rpc/client.go
+++ /dev/null
@@ -1,103 +0,0 @@
-// +build !js
-
-package rpc
-
-import (
- "context"
- "errors"
-
- "github.com/0xProject/0x-mesh/common/types"
- "github.com/0xProject/0x-mesh/zeroex"
- "github.com/0xProject/0x-mesh/zeroex/ordervalidator"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/rpc"
- peer "github.com/libp2p/go-libp2p-core/peer"
- peerstore "github.com/libp2p/go-libp2p-peerstore"
-)
-
-// Client is a JSON RPC 2.0 client implementation over WebSockets. It can be
-// used to communicate with a 0x Mesh node and add orders.
-type Client struct {
- rpcClient *rpc.Client
-}
-
-// NewClient creates and returns a new client. addr is the address of the server
-// (i.e. a 0x Mesh node) to dial.
-func NewClient(addr string) (*Client, error) {
- rpcClient, err := rpc.Dial(addr)
- if err != nil {
- return nil, err
- }
- return &Client{
- rpcClient: rpcClient,
- }, nil
-}
-
-// AddOrders adds orders to the 0x Mesh node and broadcasts them throughout the
-// 0x Mesh network.
-func (c *Client) AddOrders(orders []*zeroex.SignedOrder, opts ...types.AddOrdersOpts) (*ordervalidator.ValidationResults, error) {
- var validationResults ordervalidator.ValidationResults
- if len(opts) > 1 {
- return nil, errors.New("invalid number of add orders opts")
- }
- if len(opts) == 1 {
- if err := c.rpcClient.Call(&validationResults, "mesh_addOrders", orders, opts[0]); err != nil {
- return nil, err
- }
- }
- if err := c.rpcClient.Call(&validationResults, "mesh_addOrders", orders); err != nil {
- return nil, err
- }
- return &validationResults, nil
-}
-
-// GetOrders gets all orders stored on the Mesh node at a particular point in time in a paginated fashion
-func (c *Client) GetOrders(perPage int, minOrderHash common.Hash) (*types.GetOrdersResponse, error) {
- var getOrdersResponse types.GetOrdersResponse
- if err := c.rpcClient.Call(&getOrdersResponse, "mesh_getOrders", perPage, minOrderHash.Hex()); err != nil {
- return nil, err
- }
- return &getOrdersResponse, nil
-}
-
-// AddPeer adds the peer to the node's list of peers. The node will attempt to
-// connect to this new peer and return an error if it cannot.
-func (c *Client) AddPeer(peerInfo peerstore.PeerInfo) error {
- peerIDString := peer.IDB58Encode(peerInfo.ID)
- multiAddrStrings := make([]string, len(peerInfo.Addrs))
- for i, addr := range peerInfo.Addrs {
- multiAddrStrings[i] = addr.String()
- }
- if err := c.rpcClient.Call(nil, "mesh_addPeer", peerIDString, multiAddrStrings); err != nil {
- return err
- }
- return nil
-}
-
-// GetStats retrieves stats about the Mesh node
-func (c *Client) GetStats() (*types.Stats, error) {
- var getStatsResponse *types.Stats
- if err := c.rpcClient.Call(&getStatsResponse, "mesh_getStats"); err != nil {
- return nil, err
- }
- return getStatsResponse, nil
-}
-
-// SubscribeToOrders subscribes a stream of order events
-// Note copied from `go-ethereum` codebase: Slow subscribers will be dropped eventually. Client
-// buffers up to 8000 notifications before considering the subscriber dead. The subscription Err
-// channel will receive ErrSubscriptionQueueOverflow. Use a sufficiently large buffer on the channel
-// or ensure that the channel usually has at least one reader to prevent this issue.
-func (c *Client) SubscribeToOrders(ctx context.Context, ch chan<- []*zeroex.OrderEvent) (*rpc.ClientSubscription, error) {
- return c.rpcClient.Subscribe(ctx, "mesh", ch, "orders")
-}
-
-// SubscribeToHeartbeat subscribes a stream of heartbeats in order to have certainty that the WS
-// connection is still alive.
-// Note copied from `go-ethereum` codebase: Slow subscribers will be dropped eventually. Client
-// buffers up to 8000 notifications before considering the subscriber dead. The subscription Err
-// channel will receive ErrSubscriptionQueueOverflow. Use a sufficiently large buffer on the channel
-// or ensure that the channel usually has at least one reader to prevent this issue.
-func (c *Client) SubscribeToHeartbeat(ctx context.Context, ch chan<- string) (*rpc.ClientSubscription, error) {
- return c.rpcClient.Subscribe(ctx, "mesh", ch, "heartbeat")
-}
diff --git a/rpc/server.go b/rpc/server.go
deleted file mode 100644
index a845a9f40..000000000
--- a/rpc/server.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// +build !js
-
-package rpc
-
-import (
- "context"
- "fmt"
- "net"
- "net/http"
- "strings"
- "sync"
-
- "github.com/ethereum/go-ethereum/rpc"
- log "github.com/sirupsen/logrus"
-)
-
-// Server is a JSON RPC 2.0 server implementation over WebSockets. It accepts
-// requests from a client for adding orders to the 0x Mesh network.
-type Server struct {
- mut sync.Mutex
- addr string
- listenerAddr net.Addr
- rpcHandler RPCHandler
- listener net.Listener
- rpcServer *rpc.Server
-}
-
-// NewServer creates and returns a new server which will listen for new
-// connections on the given addr and use the rpcHandler to handle incoming
-// requests.
-func NewServer(addr string, rpcHandler RPCHandler) (*Server, error) {
- return &Server{
- addr: addr,
- rpcHandler: rpcHandler,
- }, nil
-}
-
-// HandlerType represents the type of handler to attach to the server
-type HandlerType uint8
-
-// HandlerType values
-const (
- HTTPHandler HandlerType = iota
- WSHandler
-)
-
-// Listen causes the server to listen for new WS connections. You can call Close to
-// stop listening. Listen blocks until there is an error or the given context is
-// canceled.
-func (s *Server) Listen(ctx context.Context, handlerType HandlerType) error {
- s.mut.Lock()
-
- rpcService := &rpcService{
- rpcHandler: s.rpcHandler,
- }
- s.rpcServer = rpc.NewServer()
- if err := s.rpcServer.RegisterName("mesh", rpcService); err != nil {
- log.WithField("error", err.Error()).Error("could not register RPC service")
- return err
- }
- listener, err := net.Listen("tcp4", s.addr)
- if err != nil {
- s.mut.Unlock()
- log.WithField("error", err.Error()).Error("could not start listener")
- return err
- }
- s.listener = listener
- s.mut.Unlock()
-
- // Close the server when the context is canceled.
- go func() {
- <-ctx.Done()
- s.rpcServer.Stop()
- _ = s.listener.Close()
- }()
-
- var handler http.Handler
- switch handlerType {
- case HTTPHandler:
- handler = s.rpcServer
- case WSHandler:
- handler = s.rpcServer.WebsocketHandler([]string{"*"})
- default:
- return fmt.Errorf("Unrecognized HandlerType: %d", handlerType)
- }
-
- if err := http.Serve(s.listener, handler); err != nil {
- // HACK(albrow): http.Serve doesn't accept a context. This means that
- // everytime we close the context for our rpc.Server, we see a "use of
- // closed network connection" error.
- if isClosedNetworkConnectionErr(err) {
- // Check whether the context is canceled in order to determine whether we
- // are in the process of tearing down the server.
- select {
- case <-ctx.Done():
- // If we are tearing down the server, this is okay and we don't need to
- // return the error.
- return nil
- default:
- // If we are not tearing down the server, the error is not expected, and
- // we should return it.
- return err
- }
- }
- return err
- }
- return nil
-}
-
-func isClosedNetworkConnectionErr(err error) bool {
- if opErr, ok := err.(*net.OpError); ok {
- if strings.Contains(opErr.Error(), "use of closed network connection") {
- return true
- }
- }
- return false
-}
-
-// Addr returns the address the server is listening on or nil if it has not yet
-// started listening.
-func (s *Server) Addr() net.Addr {
- s.mut.Lock()
- defer s.mut.Unlock()
- if s.listener == nil {
- return nil
- }
- return s.listener.Addr()
-}
diff --git a/rpc/service.go b/rpc/service.go
deleted file mode 100644
index 8b2b938ac..000000000
--- a/rpc/service.go
+++ /dev/null
@@ -1,172 +0,0 @@
-// +build !js
-
-package rpc
-
-import (
- "context"
- "encoding/json"
- "net"
- "strings"
- "time"
-
- "github.com/0xProject/0x-mesh/common/types"
- "github.com/0xProject/0x-mesh/constants"
- "github.com/0xProject/0x-mesh/zeroex/ordervalidator"
- "github.com/ethereum/go-ethereum/rpc"
- ethrpc "github.com/ethereum/go-ethereum/rpc"
- peer "github.com/libp2p/go-libp2p-core/peer"
- peerstore "github.com/libp2p/go-libp2p-peerstore"
- ma "github.com/multiformats/go-multiaddr"
- log "github.com/sirupsen/logrus"
-)
-
-// minHeartbeatInterval specifies the interval at which to emit heartbeat events to a subscriber
-var minHeartbeatInterval = 5 * time.Second
-
-// rpcService is an /ethereum/go-ethereum/rpc compatible service.
-type rpcService struct {
- rpcHandler RPCHandler
-}
-
-// RPCHandler is used to respond to incoming requests from the client.
-type RPCHandler interface {
- // AddOrders is called when the client sends an AddOrders request.
- AddOrders(signedOrdersRaw []*json.RawMessage, opts types.AddOrdersOpts) (*ordervalidator.ValidationResults, error)
- // GetOrders is called when the clients sends a GetOrders request
- GetOrders(perPage int, minOrderHash string) (*types.GetOrdersResponse, error)
- // AddPeer is called when the client sends an AddPeer request.
- AddPeer(peerInfo peerstore.PeerInfo) error
- // GetStats is called when the client sends an GetStats request.
- GetStats() (*types.Stats, error)
- // SubscribeToOrders is called when a client sends a Subscribe to `orders` request
- SubscribeToOrders(ctx context.Context) (*rpc.Subscription, error)
-}
-
-// Orders calls rpcHandler.SubscribeToOrders and returns the rpc subscription.
-func (s *rpcService) Orders(ctx context.Context) (*rpc.Subscription, error) {
- return s.rpcHandler.SubscribeToOrders(ctx)
-}
-
-// Heartbeat calls rpcHandler.SubscribeToHeartbeat and returns the rpc subscription.
-func (s *rpcService) Heartbeat(ctx context.Context) (*rpc.Subscription, error) {
- log.Debug("received heartbeat subscription request via RPC")
- subscription, err := SetupHeartbeat(ctx)
- if err != nil {
- log.WithField("error", err.Error()).Error("internal error in `mesh_subscribe` to `heartbeat` RPC call")
- return nil, constants.ErrInternal
- }
- return subscription, nil
-}
-
-// SetupHeartbeat sets up the heartbeat for a subscription
-func SetupHeartbeat(ctx context.Context) (*ethrpc.Subscription, error) {
- notifier, supported := ethrpc.NotifierFromContext(ctx)
- if !supported {
- return ðrpc.Subscription{}, ethrpc.ErrNotificationsUnsupported
- }
-
- rpcSub := notifier.CreateSubscription()
-
- go func() {
- for {
- select {
- case err := <-rpcSub.Err():
- if err != nil {
- log.WithField("err", err).Error("rpcSub returned an error")
- } else {
- log.Debug("rpcSub was closed without error")
- }
- return
- case <-notifier.Closed():
- return
- default:
- // Continue
- }
-
- start := time.Now()
-
- err := notifier.Notify(rpcSub.ID, "tick")
- if err != nil {
- // TODO(fabio): The current implementation of `notifier.Notify` returns a
- // `write: broken pipe` error when it is called _after_ the client has
- // disconnected but before the corresponding error is received on the
- // `rpcSub.Err()` channel. This race-condition is not problematic beyond
- // the unnecessary computation and log spam resulting from it. Once this is
- // fixed upstream, give all logs an `Error` severity.
- logEntry := log.WithFields(map[string]interface{}{
- "error": err.Error(),
- "subscriptionType": "heartbeat",
- })
- message := "error while calling notifier.Notify"
- // If the network connection disconnects for longer then ~2mins and then comes
- // back up, we've noticed the call to `notifier.Notify` return `i/o timeout`
- // `net.OpError` errors everytime it's called and no values are sent over
- // `rpcSub.Err()` nor `notifier.Closed()`. In order to stop the error from
- // endlessly re-occuring, we unsubscribe and return for encountering this type of
- // error.
- if _, ok := err.(*net.OpError); ok {
- logEntry.Trace(message)
- return
- }
- if strings.Contains(err.Error(), "write: broken pipe") {
- logEntry.Trace(message)
- } else {
- logEntry.Error(message)
- }
- }
-
- // Wait MinCleanupInterval before emitting the next heartbeat.
- time.Sleep(minHeartbeatInterval - time.Since(start))
- }
- }()
-
- return rpcSub, nil
-}
-
-var defaultAddOrdersOpts = types.AddOrdersOpts{
- Pinned: true,
-}
-
-// AddOrders calls rpcHandler.AddOrders and returns the validation results.
-func (s *rpcService) AddOrders(signedOrdersRaw []*json.RawMessage, opts *types.AddOrdersOpts) (*ordervalidator.ValidationResults, error) {
- if opts == nil {
- opts = &defaultAddOrdersOpts
- }
- return s.rpcHandler.AddOrders(signedOrdersRaw, *opts)
-}
-
-// GetOrders calls rpcHandler.GetOrders and returns the validation results.
-func (s *rpcService) GetOrders(perPage int, minOrderHash string) (*types.GetOrdersResponse, error) {
- return s.rpcHandler.GetOrders(perPage, minOrderHash)
-}
-
-// AddPeer builds PeerInfo out of the given peer ID and multiaddresses and
-// calls rpcHandler.AddPeer. If there is an error, it returns it.
-func (s *rpcService) AddPeer(peerID string, multiaddrs []string) error {
- // Parse peer ID.
- parsedPeerID, err := peer.IDB58Decode(peerID)
- if err != nil {
- return err
- }
- peerInfo := peerstore.PeerInfo{
- ID: parsedPeerID,
- }
-
- // Parse each given multiaddress.
- parsedMultiaddrs := make([]ma.Multiaddr, len(multiaddrs))
- for i, addr := range multiaddrs {
- parsed, err := ma.NewMultiaddr(addr)
- if err != nil {
- return err
- }
- parsedMultiaddrs[i] = parsed
- }
- peerInfo.Addrs = parsedMultiaddrs
-
- return s.rpcHandler.AddPeer(peerInfo)
-}
-
-// GetStats calls rpcHandler.GetStats. If there is an error, it returns it.
-func (s *rpcService) GetStats() (*types.Stats, error) {
- return s.rpcHandler.GetStats()
-}
diff --git a/tsconfig.json b/tsconfig.json
index facfe0472..54ac91e80 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -8,8 +8,8 @@
{ "path": "./packages/mesh-browser-lite" },
{ "path": "./packages/mesh-webpack-example" },
{ "path": "./packages/mesh-webpack-example-lite" },
- { "path": "./packages/mesh-rpc-client" },
{ "path": "./packages/mesh-integration-tests" },
- { "path": "./packages/mesh-browser-shim" }
+ { "path": "./packages/mesh-browser-shim" },
+ { "path": "./packages/mesh-graphql-client" }
]
}
diff --git a/yarn.lock b/yarn.lock
index 65d4d5814..813223bc6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,7 +2,7 @@
# yarn lockfile v1
-"@0x/assert@^3.0.6", "@0x/assert@^3.0.7":
+"@0x/assert@^3.0.7":
version "3.0.7"
resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.7.tgz#fb616533ed00480bd642f8419d28e88b547c30df"
integrity sha512-HYdVvIgj/wVb20MVveazLQwICxZGelNuyu/U09ZSMzRy1NrDgrBiMjrU4WrcpW2GTPZjl+7R4U4/7h/C8I/egQ==
@@ -13,6 +13,17 @@
lodash "^4.17.11"
valid-url "^1.0.9"
+"@0x/assert@^3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.9.tgz#4bc750b786c1f02ea0b7ceb701ebe2e46d30c113"
+ integrity sha512-ywQuG8feXtIpRn/3tekPZeXLjKfDJPooA5QJEDxHDv1E5ZjSrKSK6B3wdkVW6NJvNPECw0eKjM50uF2784tbfA==
+ dependencies:
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ lodash "^4.17.11"
+ valid-url "^1.0.9"
+
"@0x/base-contract@^6.2.1":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@0x/base-contract/-/base-contract-6.2.1.tgz#8d3bc64fd1fb7d791306d3dd2faf73b3dfe8bdd4"
@@ -30,7 +41,29 @@
js-sha3 "^0.7.0"
uuid "^3.3.2"
-"@0x/contract-addresses@^4.1.0", "@0x/contract-addresses@^4.9.0":
+"@0x/base-contract@^6.2.3":
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/@0x/base-contract/-/base-contract-6.2.3.tgz#d2025451a26f0f0d948559331e3dacaa05a88fbe"
+ integrity sha512-VZm0l0BhLEi+h5Ncoc/7fnmee2/1W7IjrJmCgD2zFjTYje+RHejdDNFy+U+tGC4CTV4G402hgxH4qzJlxkac5Q==
+ dependencies:
+ "@0x/assert" "^3.0.9"
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
+ ethereumjs-account "^3.0.0"
+ ethereumjs-blockstream "^7.0.0"
+ ethereumjs-util "^5.1.1"
+ ethereumjs-vm "^4.0.0"
+ ethers "~4.0.4"
+ js-sha3 "^0.7.0"
+ uuid "^3.3.2"
+
+"@0x/contract-addresses@^4.11.0":
+ version "4.11.0"
+ resolved "https://registry.yarnpkg.com/@0x/contract-addresses/-/contract-addresses-4.11.0.tgz#945aa81035bfc5605306c39c5f76656b204e01e2"
+ integrity sha512-ovGZzJMhrGDVoq+pofqP2y23niPyQi7QjqSXZNDHcPbo4+XCuV7EvCv0eTlcuwpVNdQDQvcl3Oma9qokDrmx/Q==
+
+"@0x/contract-addresses@^4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@0x/contract-addresses/-/contract-addresses-4.9.0.tgz#4d07695db35970b6073b21e1203fff5898e77a4c"
integrity sha512-hun5mapuUY1FqVOKujnPF0gdIM9CFf3CRSDl4CZZk4QS4OTN+qQ2XFmAiodSwLYy+dpN0jwqD/HGNz0fC9CR4Q==
@@ -50,71 +83,86 @@
ethereum-types "^3.1.0"
ethers "~4.0.4"
-"@0x/contracts-dev-utils@^1.3.3":
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/@0x/contracts-dev-utils/-/contracts-dev-utils-1.3.3.tgz#3bb8e34662d0e9432dbd1b0417c7c9f6a9668dd9"
- integrity sha512-s+hqP7oFbvlek9BZMMcdzodvyWI/FZRZz6rTsiTEZGgo0RPcjFafuwQA31PopM4a/rx4MYN/jReCASubLxsCoA==
- dependencies:
- "@0x/base-contract" "^6.2.1"
-
-"@0x/contracts-erc1155@^2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@0x/contracts-erc1155/-/contracts-erc1155-2.1.5.tgz#746c3d1ecb95a91076606e81ae0fe8d8b87cc7f8"
- integrity sha512-IrUw7R/UqWFiKzDjcpe59TQYAcCmHE3CtTEWoWSY/SU9CamtIFOW1Fog9dq2wIlXvCtaWA9dlAwc0KQ/M9ZIxA==
- dependencies:
- "@0x/base-contract" "^6.2.1"
- "@0x/contracts-test-utils" "^5.3.2"
- "@0x/utils" "^5.4.1"
- "@0x/web3-wrapper" "^7.0.7"
- lodash "^4.17.11"
+"@0x/contract-wrappers@^13.8.0":
+ version "13.8.0"
+ resolved "https://registry.yarnpkg.com/@0x/contract-wrappers/-/contract-wrappers-13.8.0.tgz#565c57354dd7b50c843babc56b18b7c997e701e0"
+ integrity sha512-sTwICA8RfOUIvyyby6MWAChrSkfawH0DwdtESzxya9z7CWIav71Q6b1KNfDCi/rIKOHw+eWaaSJQfwe02UqYjg==
+ dependencies:
+ "@0x/assert" "^3.0.9"
+ "@0x/base-contract" "^6.2.3"
+ "@0x/contract-addresses" "^4.11.0"
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/types" "^3.2.0"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
+ ethereum-types "^3.2.0"
+ ethers "~4.0.4"
-"@0x/contracts-erc20@^3.1.0", "@0x/contracts-erc20@^3.1.5":
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/@0x/contracts-erc20/-/contracts-erc20-3.1.5.tgz#92f0955a5920372ab064af4be8b4a4fdd8440a8e"
- integrity sha512-gM6yOjUeyKbTJ36TzeQCnJh3MPn1an6choh3nHuWEGYy6zwyZZvGtlJnE0pm4ectfW4E/JunNtPdMrKUr6bjrQ==
+"@0x/contracts-dev-utils@^1.3.5":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@0x/contracts-dev-utils/-/contracts-dev-utils-1.3.5.tgz#89a57b64ade605a64df53c6b7ea9c36b991c13dd"
+ integrity sha512-tXOgHYsv+6I9KoGf7AOcJtqY6NuqgJbf+h8MsOreoBGe2GecO00/QJmcpGvcL9B8OAppJTc9NoTsXB3ERbKqsw==
dependencies:
- "@0x/base-contract" "^6.2.1"
+ "@0x/base-contract" "^6.2.3"
-"@0x/contracts-erc721@^3.1.5":
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/@0x/contracts-erc721/-/contracts-erc721-3.1.5.tgz#15ecb70a20b1e57dc8eded1a52492b462320c0f3"
- integrity sha512-puwW9gRUIz37Wkw71fkX29Ck5UcthqRxmRI/NwfybxJrhtqEuyJ2ZUeucxt+7Co4VXnWqVgWlZ5ragfPO259lg==
+"@0x/contracts-erc1155@^2.1.7":
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/@0x/contracts-erc1155/-/contracts-erc1155-2.1.7.tgz#ac9bc37997b9d860c5d44ac612288ea3051a77a3"
+ integrity sha512-5PGQb0POjWwI5Fejc6poRL8oY0EVY6c0q5qXv2W9i+/lpGfV5QFrxBuZGiChDhIxh1fAdd10ay7jpejF8Nwt2g==
dependencies:
- "@0x/base-contract" "^6.2.1"
+ "@0x/base-contract" "^6.2.3"
+ "@0x/contracts-test-utils" "^5.3.4"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
+ lodash "^4.17.11"
-"@0x/contracts-exchange@^3.2.0":
- version "3.2.5"
- resolved "https://registry.yarnpkg.com/@0x/contracts-exchange/-/contracts-exchange-3.2.5.tgz#c59ba9688aa3fcbb3901d56008c77901f0508ebc"
- integrity sha512-/WRuIMVRrt5P+gSglQuEAb9vRNp+K4ch5bEsG/X8yYuJ521+kQvqXXdf8W1myEwXWfAED+/xjuJELQifp6/G3A==
- dependencies:
- "@0x/base-contract" "^6.2.1"
- "@0x/contracts-dev-utils" "^1.3.3"
- "@0x/contracts-erc1155" "^2.1.5"
- "@0x/contracts-erc20" "^3.1.5"
- "@0x/contracts-erc721" "^3.1.5"
- "@0x/order-utils" "^10.2.4"
- "@0x/utils" "^5.4.1"
+"@0x/contracts-erc20@^3.2.1":
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/@0x/contracts-erc20/-/contracts-erc20-3.2.1.tgz#7673f5ea6215eba926c1911a6b558cf2a71be587"
+ integrity sha512-Tuj5P/Oli0PSedbhxXdn4/OHNPkaoVHzyvHYn0l4gIfeXB15ViEJOpjmT/jxInkkD4WpRVUyvXJtnezmeSaQAw==
+ dependencies:
+ "@0x/base-contract" "^6.2.3"
+
+"@0x/contracts-erc721@^3.1.7":
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/@0x/contracts-erc721/-/contracts-erc721-3.1.7.tgz#ae62922538352d1e1fec12679976e792b74768ca"
+ integrity sha512-6AmcxSTb8SgF8i6KqBXIAmyyn/VEaN5WgMF/T4n4xu/yJ6zHrw3tODgQYEilTaUnvkCINxfQSb5GLoNc5vJPNQ==
+ dependencies:
+ "@0x/base-contract" "^6.2.3"
+
+"@0x/contracts-exchange@^3.2.7":
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/@0x/contracts-exchange/-/contracts-exchange-3.2.7.tgz#60b6070d766efc983e62a9cf0ad74fc4f5fc85a0"
+ integrity sha512-JW/wYYH/BVaKT0LBcxiro2bViMmgcdKxLdjC+aNMrq989V0dO2PZRsfGHHzBz0JfD/2bLIRCR53ByRiC7GQxIA==
+ dependencies:
+ "@0x/base-contract" "^6.2.3"
+ "@0x/contracts-dev-utils" "^1.3.5"
+ "@0x/contracts-erc1155" "^2.1.7"
+ "@0x/contracts-erc20" "^3.2.1"
+ "@0x/contracts-erc721" "^3.1.7"
+ "@0x/order-utils" "^10.3.0"
+ "@0x/utils" "^5.5.1"
lodash "^4.17.11"
-"@0x/contracts-test-utils@^5.1.4", "@0x/contracts-test-utils@^5.3.2":
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/@0x/contracts-test-utils/-/contracts-test-utils-5.3.2.tgz#2c96ef7d823770e352a12ead88c7f56aad427784"
- integrity sha512-pok3zfsogie6t6h+CPJ1jy7iSGUrxZeqTtpJk5k3H+ZIiy6Iy9X0+IGviwNvw8fhka0HJhFK5KIFtBfOg+1Qrw==
- dependencies:
- "@0x/assert" "^3.0.7"
- "@0x/base-contract" "^6.2.1"
- "@0x/contract-addresses" "^4.9.0"
- "@0x/dev-utils" "^3.2.1"
- "@0x/json-schemas" "^5.0.7"
- "@0x/order-utils" "^10.2.4"
- "@0x/sol-coverage" "^4.0.8"
- "@0x/sol-profiler" "^4.0.8"
- "@0x/sol-trace" "^3.0.8"
- "@0x/subproviders" "^6.0.8"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.1"
- "@0x/web3-wrapper" "^7.0.7"
+"@0x/contracts-test-utils@^5.3.4":
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/@0x/contracts-test-utils/-/contracts-test-utils-5.3.4.tgz#9392193dd9905790a2e18b3845968a0794778636"
+ integrity sha512-CWDCj/RNJfopM4ei84Z8vivY0iINAixxt0rEgg6xK04v4odQpOI/IxEG5jyW3z/oUC91yMd7MyhjHtLxki/euA==
+ dependencies:
+ "@0x/assert" "^3.0.9"
+ "@0x/base-contract" "^6.2.3"
+ "@0x/contract-addresses" "^4.11.0"
+ "@0x/dev-utils" "^3.3.0"
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/order-utils" "^10.3.0"
+ "@0x/sol-coverage" "^4.0.10"
+ "@0x/sol-profiler" "^4.1.0"
+ "@0x/sol-trace" "^3.0.10"
+ "@0x/subproviders" "^6.1.1"
+ "@0x/types" "^3.2.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
"@types/bn.js" "^4.11.0"
"@types/js-combinatorics" "^0.5.29"
"@types/lodash" "4.14.104"
@@ -126,7 +174,7 @@
chai-bignumber "^3.0.0"
decimal.js "^10.2.0"
dirty-chai "^2.0.1"
- ethereum-types "^3.1.0"
+ ethereum-types "^3.2.0"
ethereumjs-util "^5.1.1"
ethers "~4.0.4"
js-combinatorics "^0.5.3"
@@ -134,22 +182,22 @@
make-promises-safe "^1.1.0"
mocha "^6.2.0"
-"@0x/dev-utils@^3.2.0", "@0x/dev-utils@^3.2.1":
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/@0x/dev-utils/-/dev-utils-3.2.1.tgz#778b89a6ce47af143b526934cab0518f083eb831"
- integrity sha512-+7YVtXTMkEGgnf7HYEO9uqUmgowP+NaIOaNzzzooTJo6SrnwF1EBc0evBQeS/NBzyFoEskLs2w/jcGYP92J0ag==
- dependencies:
- "@0x/subproviders" "^6.0.8"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.1"
- "@0x/web3-wrapper" "^7.0.7"
+"@0x/dev-utils@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@0x/dev-utils/-/dev-utils-3.3.0.tgz#ff56021d13b9630bb7f42d102e30a18f2b9aa7ff"
+ integrity sha512-/SPF/dVrGeYgZMo4vhHjG/YPxEsbnSi3sKA3+R6hySF7AKOH0u+78cUZ1NwrVOhGHToNWmehhci1Ic2BOXxQ9g==
+ dependencies:
+ "@0x/subproviders" "^6.1.1"
+ "@0x/types" "^3.2.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
"@types/web3-provider-engine" "^14.0.0"
chai "^4.0.1"
chai-as-promised "^7.1.0"
chai-bignumber "^3.0.0"
dirty-chai "^2.0.1"
- ethereum-types "^3.1.0"
+ ethereum-types "^3.2.0"
lodash "^4.17.11"
web3-provider-engine "14.0.6"
@@ -163,7 +211,30 @@
jsonschema "^1.2.0"
lodash.values "^4.3.0"
-"@0x/order-utils@^10.0.1", "@0x/order-utils@^10.2.0", "@0x/order-utils@^10.2.4":
+"@0x/json-schemas@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-5.1.0.tgz#3f30529049ea5aa4cfc4aed2c2124c7482d632f1"
+ integrity sha512-qDiCz94AR140puQ0MHT6XyDbmDrvWjw+Zyysmf4tD9PfM8sD+MOhF9dfvaYPNlS51M1CIlOTWZYqo5OUCIBEXQ==
+ dependencies:
+ "@0x/typescript-typings" "^5.1.1"
+ "@types/node" "*"
+ jsonschema "^1.2.0"
+ lodash.values "^4.3.0"
+
+"@0x/mesh-browser-lite@^9.4.2":
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/@0x/mesh-browser-lite/-/mesh-browser-lite-9.4.2.tgz#5492d44975440f24bceac834afb8b0dc0cc126dd"
+ integrity sha512-crC0dLAqkOEM7Ic+3+7cEj3m777wGA8Z5Evl7+7C8Yh9KVWvuYwA82CPy692/8HRdc78RZiKQWLsvSAhJMW22w==
+ dependencies:
+ "@0x/contract-addresses" "^4.9.0"
+ "@0x/order-utils" "^10.2.0"
+ "@0x/utils" "^5.4.0"
+ ajv "^6.12.2"
+ base64-arraybuffer "^0.2.0"
+ browserfs "^1.4.3"
+ ethereum-types "^3.0.0"
+
+"@0x/order-utils@^10.0.1", "@0x/order-utils@^10.2.0":
version "10.2.4"
resolved "https://registry.yarnpkg.com/@0x/order-utils/-/order-utils-10.2.4.tgz#23afe4656c9c71f2cf80f510154f7e2900515d68"
integrity sha512-ekxE/a1zaJEetlYEiBQawNpB4QInUXFAXdSi4uD4203oDvJzcUE4vnoCfyx/VMm3Fr94y6B3kIvXy6uMoC8+3w==
@@ -177,22 +248,37 @@
ethers "~4.0.4"
lodash "^4.17.11"
-"@0x/sol-compiler@^4.0.8":
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/@0x/sol-compiler/-/sol-compiler-4.0.8.tgz#e60634423d47c4241a404e48edbdfff99098ab5f"
- integrity sha512-azwMQbPDcMmp81j/wHtZj9paaoq+Eo8SWkouVbygwUDxB+FSaBN7N+IURRzhKuTpKxY2w/vh2FBrJUE9ii6wog==
- dependencies:
- "@0x/assert" "^3.0.7"
- "@0x/json-schemas" "^5.0.7"
- "@0x/sol-resolver" "^3.0.3"
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.1"
- "@0x/web3-wrapper" "^7.0.7"
+"@0x/order-utils@^10.3.0":
+ version "10.3.0"
+ resolved "https://registry.yarnpkg.com/@0x/order-utils/-/order-utils-10.3.0.tgz#4d6ee873a6e9ff913aa6e45f6c7ddccff7fed986"
+ integrity sha512-kgcBtKjlal6mgEgdrtlIYjjmldadTfZ5P+Vz2eKV4kHSqYE/IC6L/PnX9skcjKxgUf9/o4N9ZOAISBqEuaNOvQ==
+ dependencies:
+ "@0x/assert" "^3.0.9"
+ "@0x/contract-addresses" "^4.11.0"
+ "@0x/contract-wrappers" "^13.8.0"
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
+ ethereumjs-util "^5.1.1"
+ ethers "~4.0.4"
+ lodash "^4.17.11"
+
+"@0x/sol-compiler@^4.1.1":
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/@0x/sol-compiler/-/sol-compiler-4.1.1.tgz#dfab22e2370c03ef8dcfd910d66ced0d46ef5579"
+ integrity sha512-ktcTBz1m0cRn34t1ZkCn1BzssgLEI3ZLB6+aLq1OZzb3hGha9RW/yzl8UC7K/G/GPAK0rb3ip4t3TYHzIH/3lg==
+ dependencies:
+ "@0x/assert" "^3.0.9"
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/sol-resolver" "^3.1.0"
+ "@0x/types" "^3.2.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
"@types/yargs" "^11.0.0"
chalk "^2.3.0"
chokidar "^3.0.2"
- ethereum-types "^3.1.0"
+ ethereum-types "^3.2.0"
ethereumjs-util "^5.1.1"
lodash "^4.17.11"
mkdirp "^0.5.1"
@@ -204,73 +290,73 @@
web3-eth-abi "^1.0.0-beta.24"
yargs "^10.0.3"
-"@0x/sol-coverage@^4.0.8":
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/@0x/sol-coverage/-/sol-coverage-4.0.8.tgz#3ccb647990cdc65e14fb317b1a1a9302bee0530d"
- integrity sha512-vl6NRL8O5oQC6jSI5iT0XhsME4yica1V2XffUfucZ7ENyStE747A2m1IAZD5LXljfaJI8MiGP7uxtgxiCINOuw==
+"@0x/sol-coverage@^4.0.10":
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/@0x/sol-coverage/-/sol-coverage-4.0.10.tgz#92bfd90dd9f4a616e357a0489ea5cfb667d46067"
+ integrity sha512-mn6fD/rpuKfPzJKbDvtlLqxx5HIUYdzpkg1unzzKHAA7KFzfxEyapuxY3cfXSL1gZsTQBLGeE5SOL7b0LFED5g==
dependencies:
- "@0x/sol-tracing-utils" "^7.0.8"
- "@0x/subproviders" "^6.0.8"
- "@0x/typescript-typings" "^5.0.2"
+ "@0x/sol-tracing-utils" "^7.1.0"
+ "@0x/subproviders" "^6.1.1"
+ "@0x/typescript-typings" "^5.1.1"
"@types/minimatch" "^3.0.3"
- ethereum-types "^3.1.0"
+ ethereum-types "^3.2.0"
lodash "^4.17.11"
minimatch "^3.0.4"
web3-provider-engine "14.0.6"
-"@0x/sol-profiler@^4.0.8":
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/@0x/sol-profiler/-/sol-profiler-4.0.8.tgz#19adfc9e9049c53e2cb55d17feabeee24380cf0e"
- integrity sha512-aA0Q5JpS2JdPto5hgUchw9lfGdOxVjeq+N+rNffgyMufkU+5vAYkdj1OjMUt7YOSgC23R32Ny0cxsGbHKYusdw==
- dependencies:
- "@0x/sol-tracing-utils" "^7.0.8"
- "@0x/subproviders" "^6.0.8"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.1"
- ethereum-types "^3.1.0"
+"@0x/sol-profiler@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@0x/sol-profiler/-/sol-profiler-4.1.0.tgz#1467bb7b607811f7123bca6c1385fec3d6b25152"
+ integrity sha512-6CVbmMuWUEsOFV8B/MNhBk+5lrZ4/iJWHT1lElNfHddJ8Swr9fqPvnR7MppLxyKN+dsU5xVs4l5nj/xtogHYbg==
+ dependencies:
+ "@0x/sol-tracing-utils" "^7.1.0"
+ "@0x/subproviders" "^6.1.1"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ ethereum-types "^3.2.0"
ethereumjs-util "^5.1.1"
lodash "^4.17.11"
web3-provider-engine "14.0.6"
-"@0x/sol-resolver@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-3.0.3.tgz#da969e04d5512f8cc88c117dd377bdb04f3f4410"
- integrity sha512-8Pn53YZd8y8RCjWjZDcZlp39fcqZIuEJo7o4q1P2umfatIfl4ihXgfgzw7iNxA64jTY2CWtltLpRHLhyOcvqxw==
+"@0x/sol-resolver@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-3.1.0.tgz#86dbbc6641011df446f5a0e4545cd3360a3af52b"
+ integrity sha512-fyOngwc1qzN/rH+lrsGAACnXd8UuTVHkzj423+s3p5I2qhjDrQcxTfJpxQ1Yuc74fb9R0cXFRQto3A9LevjKxA==
dependencies:
- "@0x/types" "^3.1.2"
- "@0x/typescript-typings" "^5.0.2"
+ "@0x/types" "^3.2.0"
+ "@0x/typescript-typings" "^5.1.1"
lodash "^4.17.11"
-"@0x/sol-trace@^3.0.8":
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/@0x/sol-trace/-/sol-trace-3.0.8.tgz#f234078905c355f0fa8e8d02eb721be54189082a"
- integrity sha512-0Gj8O54QpZ6UIIB4pusi2mI9jEFvG+UnUWNH7SVYxs/uWp+C9YXmoY9ML+wdmQWxAltK5fZeN/amFbU4uBZxiQ==
+"@0x/sol-trace@^3.0.10":
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/@0x/sol-trace/-/sol-trace-3.0.10.tgz#7022fd2fc86774722d9d0e234f0d8180341fd30a"
+ integrity sha512-d7S8hrP+7DJLUJycvTmoFR5vDYxESqt1dOMWQ8fvO10s/Pcs4fdkbLlSnBiqFKn/XSCerPy5q4qk3XqwsppjeQ==
dependencies:
- "@0x/sol-tracing-utils" "^7.0.8"
- "@0x/subproviders" "^6.0.8"
- "@0x/typescript-typings" "^5.0.2"
+ "@0x/sol-tracing-utils" "^7.1.0"
+ "@0x/subproviders" "^6.1.1"
+ "@0x/typescript-typings" "^5.1.1"
chalk "^2.3.0"
- ethereum-types "^3.1.0"
+ ethereum-types "^3.2.0"
ethereumjs-util "^5.1.1"
lodash "^4.17.11"
loglevel "^1.6.1"
web3-provider-engine "14.0.6"
-"@0x/sol-tracing-utils@^7.0.8":
- version "7.0.8"
- resolved "https://registry.yarnpkg.com/@0x/sol-tracing-utils/-/sol-tracing-utils-7.0.8.tgz#f1c2e1bf064d126d988d5574fbb6d45037064e8e"
- integrity sha512-dFZ/CVl4hWJ2rDbcjsnIRif8gd/Eu4lT+5iEDlD427ns1tKaSg/sVPr7Qz0UubipxHDozFY0f69vGdZmNw7Uew==
- dependencies:
- "@0x/dev-utils" "^3.2.1"
- "@0x/sol-compiler" "^4.0.8"
- "@0x/sol-resolver" "^3.0.3"
- "@0x/subproviders" "^6.0.8"
- "@0x/typescript-typings" "^5.0.2"
- "@0x/utils" "^5.4.1"
- "@0x/web3-wrapper" "^7.0.7"
+"@0x/sol-tracing-utils@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@0x/sol-tracing-utils/-/sol-tracing-utils-7.1.0.tgz#85f146de9588c3785681c68f268eeb4436c1d300"
+ integrity sha512-VUn2jcRw4/08esKfP9l1FmAlJ9kzzS+eH7qZ2j7ZfljHVsq5eOtHLObgAVzZithj8DOiGi2ht9OrE/3xLpXQpA==
+ dependencies:
+ "@0x/dev-utils" "^3.3.0"
+ "@0x/sol-compiler" "^4.1.1"
+ "@0x/sol-resolver" "^3.1.0"
+ "@0x/subproviders" "^6.1.1"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
"@types/solidity-parser-antlr" "^0.2.3"
chalk "^2.3.0"
- ethereum-types "^3.1.0"
+ ethereum-types "^3.2.0"
ethereumjs-util "^5.1.1"
ethers "~4.0.4"
glob "^7.1.2"
@@ -283,7 +369,7 @@
solc "^0.5.5"
solidity-parser-antlr "^0.4.2"
-"@0x/subproviders@^6.0.2", "@0x/subproviders@^6.0.5", "@0x/subproviders@^6.0.8":
+"@0x/subproviders@^6.0.2", "@0x/subproviders@^6.0.5":
version "6.0.8"
resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.0.8.tgz#5fd7461201d434785f231e9d5f2b1b1015e8cc1b"
integrity sha512-OEFZ6qdkHfAvkkcvXSLiCJd2V87NGiZvNcZZkNeupCK77mlDnO0k/IpCe3hr9bUu8PV8vOBvrQaE973vjyCfgQ==
@@ -311,19 +397,33 @@
optionalDependencies:
"@ledgerhq/hw-transport-node-hid" "^4.3.0"
-"@0x/ts-doc-gen@^0.0.13":
- version "0.0.13"
- resolved "https://registry.yarnpkg.com/@0x/ts-doc-gen/-/ts-doc-gen-0.0.13.tgz#0f646d03f951db34b0362948b9ff068d55f30672"
- integrity sha512-vEOWfWl9qXDnGG9QBamf0pLzYtIo+cppTU/GzhDhetdcU/3ay57kDU+5Ytg6xybsfQ4I4Mk2Dee+Gg5Lhoi5uw==
+"@0x/subproviders@^6.1.1":
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.1.1.tgz#f0d523055cb889652a7e53263cbe0b9d93bb1d4b"
+ integrity sha512-5rXmQbokPAlq6Am+O/C2QV6VlxKJGREncJ50ymLp0z8Bsyjt864Mgb1sB1ym19Qg6EJEhamQiJzVrrkN4ApbTQ==
dependencies:
- "@0x/typescript-typings" "^4.2.2"
- "@0x/utils" "^4.3.3"
- glob "^7.1.4"
- promisify-child-process "^3.1.1"
- rimraf "^2.6.3"
- typedoc "^0.15.0"
- typedoc-plugin-markdown "^2.1.0"
- yargs "^10.0.3"
+ "@0x/assert" "^3.0.9"
+ "@0x/types" "^3.2.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ "@0x/web3-wrapper" "^7.2.0"
+ "@ledgerhq/hw-app-eth" "^4.3.0"
+ "@ledgerhq/hw-transport-u2f" "4.24.0"
+ "@types/hdkey" "^0.7.0"
+ "@types/web3-provider-engine" "^14.0.0"
+ bip39 "^2.5.0"
+ bn.js "^4.11.8"
+ ethereum-types "^3.2.0"
+ ethereumjs-tx "^1.3.5"
+ ethereumjs-util "^5.1.1"
+ ganache-core "^2.10.2"
+ hdkey "^0.7.1"
+ json-rpc-error "2.0.0"
+ lodash "^4.17.11"
+ semaphore-async-await "^1.5.1"
+ web3-provider-engine "14.0.6"
+ optionalDependencies:
+ "@ledgerhq/hw-transport-node-hid" "^4.3.0"
"@0x/ts-doc-gen@^0.0.16":
version "0.0.16"
@@ -368,6 +468,24 @@
bignumber.js "~9.0.0"
ethereum-types "^3.1.0"
+"@0x/types@^3.1.3":
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.1.3.tgz#f5edbcb0fe38f6c2979cd6cedacf7c132a72aa23"
+ integrity sha512-6lHKOlr90zN5P/Rrg/SfdHXUASU4ZDBr5Y4IBwwKrrPo/XetxNFxdZQcDxmVJT8aG13f7r6xnDwwlEyFtvnWEQ==
+ dependencies:
+ "@types/node" "*"
+ bignumber.js "~9.0.0"
+ ethereum-types "^3.1.1"
+
+"@0x/types@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.2.0.tgz#490627e9440c3ff4e4660b0c10960ccd02d7105f"
+ integrity sha512-HcYXmz7gYtibJmZQjrQCnzV2FjRoo5b/Ul1QoTeQFAZ2M2ggt1wHspQ7vOkEAZEK/7TE4TKA4MlRwRLa4isL1Q==
+ dependencies:
+ "@types/node" "*"
+ bignumber.js "~9.0.0"
+ ethereum-types "^3.2.0"
+
"@0x/typescript-typings@^4.2.2", "@0x/typescript-typings@^4.3.0":
version "4.3.0"
resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-4.3.0.tgz#4813a996ac5101841d1c22f4aa1738ab56168857"
@@ -390,6 +508,28 @@
ethereum-types "^3.1.0"
popper.js "1.14.3"
+"@0x/typescript-typings@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.1.0.tgz#8e81a8605e3ef02bea16b73e4bd229ce010912c6"
+ integrity sha512-djQWgwabVgQ5jH3KFlrzOdLVZhYRpOIwlZtvkeznjToi8Xw2YXBoX0OL6ZJ/PhyNCEgtopO11HsHTR2mcyKyIg==
+ dependencies:
+ "@types/bn.js" "^4.11.0"
+ "@types/react" "*"
+ bignumber.js "~9.0.0"
+ ethereum-types "^3.1.1"
+ popper.js "1.14.3"
+
+"@0x/typescript-typings@^5.1.1":
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.1.1.tgz#e5216f33e5859d48cd441a059da9c56c2b6df36a"
+ integrity sha512-a8/uKPNStHORFQzI/DDEq4ixb4IricPogAJ3P17YnNYr/yF3HwXEu6+cFxs4qi1fr0zGoPe7D3XtqtR+dX/ajQ==
+ dependencies:
+ "@types/bn.js" "^4.11.0"
+ "@types/react" "*"
+ bignumber.js "~9.0.0"
+ ethereum-types "^3.2.0"
+ popper.js "1.14.3"
+
"@0x/utils@^4.3.3":
version "4.5.2"
resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-4.5.2.tgz#6cc89f2d0dda341e0fb4e76049a35abfb67a4ac5"
@@ -428,7 +568,45 @@
js-sha3 "^0.7.0"
lodash "^4.17.11"
-"@0x/web3-wrapper@^7.0.6", "@0x/web3-wrapper@^7.0.7":
+"@0x/utils@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.5.0.tgz#b167a09e3a950035e45e05050f95be709b4d2b79"
+ integrity sha512-2rDKKzdbPEjKXv5HSrkB6VzukZrd1EJGXFhJIlLEN/c2Z9svFnWhQiSlPQX0o1bK435gJQbd1I3B6O3I2TkLrQ==
+ dependencies:
+ "@0x/types" "^3.1.3"
+ "@0x/typescript-typings" "^5.1.0"
+ "@types/node" "*"
+ abortcontroller-polyfill "^1.1.9"
+ bignumber.js "~9.0.0"
+ chalk "^2.3.0"
+ detect-node "2.0.3"
+ ethereum-types "^3.1.1"
+ ethereumjs-util "^5.1.1"
+ ethers "~4.0.4"
+ isomorphic-fetch "2.2.1"
+ js-sha3 "^0.7.0"
+ lodash "^4.17.11"
+
+"@0x/utils@^5.5.1":
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.5.1.tgz#5f131755e1692e7c7b74d03d224d94808d475dd7"
+ integrity sha512-UreVm7R/qEv1v4dVccb4Y6Oz13o8ko2vB10sdNrPAGbstqx3NfdEBkylNxD7I8Bkta/BIwHrLbtCN3jni8CSeg==
+ dependencies:
+ "@0x/types" "^3.2.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@types/node" "*"
+ abortcontroller-polyfill "^1.1.9"
+ bignumber.js "~9.0.0"
+ chalk "^2.3.0"
+ detect-node "2.0.3"
+ ethereum-types "^3.2.0"
+ ethereumjs-util "^5.1.1"
+ ethers "~4.0.4"
+ isomorphic-fetch "2.2.1"
+ js-sha3 "^0.7.0"
+ lodash "^4.17.11"
+
+"@0x/web3-wrapper@^7.0.7":
version "7.0.7"
resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.0.7.tgz#c88b46b1b79e1775e3581d3cbd3e8f26ce220bd1"
integrity sha512-4dqtJW14W2E/hFBL0mTBd6w7QYp3l+OxAsJwhbmB9xnhZj8DfLrQA2RC+cFZnUarhjUeXlUh2B1Zr6YXLv3lEQ==
@@ -442,7 +620,39 @@
ethers "~4.0.4"
lodash "^4.17.11"
-"@babel/runtime@^7.1.5", "@babel/runtime@^7.3.1":
+"@0x/web3-wrapper@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.2.0.tgz#079f59276a7ea4e2920881645c51f71b1c0251e3"
+ integrity sha512-5jRr5Xl/co5VZB2sCFiokuRwuPc2BENeSVuXll/+YNmytP5+C+7oDvVt6GrGP3j5921GIr4EhusZMbvOFw1oKQ==
+ dependencies:
+ "@0x/assert" "^3.0.9"
+ "@0x/json-schemas" "^5.1.0"
+ "@0x/typescript-typings" "^5.1.1"
+ "@0x/utils" "^5.5.1"
+ ethereum-types "^3.2.0"
+ ethereumjs-util "^5.1.1"
+ ethers "~4.0.4"
+ lodash "^4.17.11"
+
+"@apollo/client@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.1.1.tgz#7d57d037be8ee93694fbf82579f703e635c836c1"
+ integrity sha512-c5DxrU81p0B5BsyBXm+5uPJqLCX2epnBsd87PXfRwzDLbp/NiqnWp6a6c5vT5EV2LwJuCq1movmKthoy0gFb0w==
+ dependencies:
+ "@types/zen-observable" "^0.8.0"
+ "@wry/context" "^0.5.2"
+ "@wry/equality" "^0.2.0"
+ fast-json-stable-stringify "^2.0.0"
+ graphql-tag "^2.11.0"
+ hoist-non-react-statics "^3.3.2"
+ optimism "^0.12.1"
+ prop-types "^15.7.2"
+ symbol-observable "^1.2.0"
+ ts-invariant "^0.4.4"
+ tslib "^1.10.0"
+ zen-observable "^0.8.14"
+
+"@babel/runtime@^7.1.5":
version "7.10.1"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.1.tgz#b6eb75cac279588d3100baecd1b9894ea2840822"
integrity sha512-nQbbCbQc9u/rpg1XCxoMYQTbSMVZjCDxErQ1ClCn9Pvcmv1lGads19ep0a2VsEiIJeHqjZley6EQGEC3Yo1xMA==
@@ -465,87 +675,86 @@
"@ethersproject/strings" ">=5.0.0-beta.130"
"@ethersproject/address@>=5.0.0-beta.128":
- version "5.0.0-beta.135"
- resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.135.tgz#8d4697c81dc27758b05e7eb7507c254f2ef0e5dc"
- integrity sha512-y9r/ajYBCDVM1ZD6kKgTRHBOxgURcQ24qTolw3oGyK373XHNrcY9ufDgZ5KR8h0OvLvczb4SGzYhahYvBnyZwA==
- dependencies:
- "@ethersproject/bignumber" ">=5.0.0-beta.138"
- "@ethersproject/bytes" ">=5.0.0-beta.137"
- "@ethersproject/keccak256" ">=5.0.0-beta.131"
- "@ethersproject/logger" ">=5.0.0-beta.137"
- "@ethersproject/rlp" ">=5.0.0-beta.132"
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.2.tgz#80d0ddfb7d4bd0d32657747fa4bdd2defef2e00a"
+ integrity sha512-+rz26RKj7ujGfQynys4V9VJRbR+wpC6eL8F22q3raWMH3152Ha31GwJPWzxE/bEA+43M/zTNVwY0R53gn53L2Q==
+ dependencies:
+ "@ethersproject/bignumber" "^5.0.0"
+ "@ethersproject/bytes" "^5.0.0"
+ "@ethersproject/keccak256" "^5.0.0"
+ "@ethersproject/logger" "^5.0.0"
+ "@ethersproject/rlp" "^5.0.0"
bn.js "^4.4.0"
-"@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@>=5.0.0-beta.138":
- version "5.0.0-beta.139"
- resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.0-beta.139.tgz#12a4fa5a76ee90f77932326311caf04e1de1cae0"
- integrity sha512-h1C1okCmPK3UVWwMGUbuCZykplJmD/TdknPQQHJWL/chK5MqBhyQ5o1Cay7mHXKCBnjWrR9BtwjfkAh76pYtFA==
+"@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0":
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.5.tgz#31bd7e75aad46ace345fae69b1f5bb120906af1b"
+ integrity sha512-24ln7PV0g8ZzjcVZiLW9Wod0i+XCmK6zKkAaxw5enraTIT1p7gVOcSXFSzNQ9WYAwtiFQPvvA+TIO2oEITZNJA==
dependencies:
- "@ethersproject/bytes" ">=5.0.0-beta.137"
- "@ethersproject/logger" ">=5.0.0-beta.137"
- "@ethersproject/properties" ">=5.0.0-beta.140"
+ "@ethersproject/bytes" "^5.0.0"
+ "@ethersproject/logger" "^5.0.0"
bn.js "^4.4.0"
-"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@>=5.0.0-beta.137":
- version "5.0.0-beta.138"
- resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.0-beta.138.tgz#86e1f6c4016443f2b5236627fa656e7c56077a56"
- integrity sha512-q4vaIthv89RJQ0V6gdzh1xuluJE1uYbnfzBUYTegicaXX6jRTCjDDhyiQhyEnNi7pKrGtuOrR3v3+7WtAR8Imw==
+"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0":
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.3.tgz#b3769963ae0188a35713d343890a903bda20af9c"
+ integrity sha512-AyPMAlY+Amaw4Zfp8OAivm1xYPI8mqiUYmEnSUk1CnS2NrQGHEMmFJFiOJdS3gDDpgSOFhWIjZwxKq2VZpqNTA==
dependencies:
- "@ethersproject/logger" ">=5.0.0-beta.137"
+ "@ethersproject/logger" "^5.0.0"
-"@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@>=5.0.0-beta.133":
- version "5.0.0-beta.134"
- resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.0-beta.134.tgz#b81c42373a00cb21604a94aa8642454fb35bb764"
- integrity sha512-tKKL7F3ozL+XgZ4+McNmp12rnPxKf+InKr36asVVAiVLa0WxnNsO9m/+0LkW5dMFbqn2i2VJtBwKfl1OE6GInA==
+"@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.2.tgz#f7ac0b320e2bbec1a5950da075015f8bc4e8fed1"
+ integrity sha512-nNoVlNP6bgpog7pQ2EyD1xjlaXcy1Cl4kK5v1KoskHj58EtB6TK8M8AFGi3GgHTdMldfT4eN3OsoQ/CdOTVNFA==
dependencies:
- "@ethersproject/bignumber" ">=5.0.0-beta.138"
+ "@ethersproject/bignumber" "^5.0.0"
"@ethersproject/hash@>=5.0.0-beta.128":
- version "5.0.0-beta.134"
- resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.0-beta.134.tgz#e1fdb69b42f5d31c343bcbf183043853b9b8e9dd"
- integrity sha512-yvHyu+9Mgi4jn41DakA8tgHwngsSlTEyLBavP08GN3oS6fTiqflEMa4AXUFndztpcvk7UdGlowCOp6UupbmRVQ==
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.2.tgz#6d69558786961836d530b8b4a8714eac5388aec7"
+ integrity sha512-dWGvNwmVRX2bxoQQ3ciMw46Vzl1nqfL+5R8+2ZxsRXD3Cjgw1dL2mdjJF7xMMWPvPdrlhKXWSK0gb8VLwHZ8Cw==
dependencies:
- "@ethersproject/bytes" ">=5.0.0-beta.137"
- "@ethersproject/keccak256" ">=5.0.0-beta.131"
- "@ethersproject/logger" ">=5.0.0-beta.137"
- "@ethersproject/strings" ">=5.0.0-beta.136"
+ "@ethersproject/bytes" "^5.0.0"
+ "@ethersproject/keccak256" "^5.0.0"
+ "@ethersproject/logger" "^5.0.0"
+ "@ethersproject/strings" "^5.0.0"
-"@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@>=5.0.0-beta.131":
- version "5.0.0-beta.132"
- resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.0-beta.132.tgz#38c128194a88aba690b6aca43cae57df420408d7"
- integrity sha512-YpkwYGV4nu1QM7Q+mhYKO1bCk/sbiV7AAU/HnHwZhDiwJZSDRwfjiFkAJQpvTbsAR02Ek9LhFEBg4OfLTEhJLg==
+"@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.2.tgz#7ed4a95bb45ee502cf4532223833740a83602797"
+ integrity sha512-MbroXutc0gPNYIrUjS4Aw0lDuXabdzI7+l7elRWr1G6G+W0v00e/3gbikWkCReGtt2Jnt4lQSgnflhDwQGcIhA==
dependencies:
- "@ethersproject/bytes" ">=5.0.0-beta.137"
+ "@ethersproject/bytes" "^5.0.0"
js-sha3 "0.5.7"
-"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@>=5.0.0-beta.137":
- version "5.0.0-beta.137"
- resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.0-beta.137.tgz#781582b8b04d0ced01e9c1608c9887d31d95b8ee"
- integrity sha512-H36iMhWOY+tco1+o2NZUdQT8Gc6Y9795RSPgvluatvjvyt3X6mHtWXes4F8Rc5N/95px++a/ODYVSkSmlr68+A==
+"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.4.tgz#09fa4765b5691233e3afb6617cb38a700f9dd2e4"
+ integrity sha512-alA2LiAy1LdQ/L1SA9ajUC7MvGAEQLsICEfKK4erX5qhkXE1LwLSPIzobtOWFsMHf2yrXGKBLnnpuVHprI3sAw==
-"@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@>=5.0.0-beta.140":
- version "5.0.0-beta.141"
- resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.0-beta.141.tgz#063e5a870f8bfb249de4de6218e6a104e253f24a"
- integrity sha512-jWHVLlH8tmdMw6L9USaidZsiY/IOV4Br01PKM711oDZ8McBXrbW1FzcgpuzV91SNNMYek9kvrJJzAOPL2vANTQ==
+"@ethersproject/properties@>=5.0.0-beta.131":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.2.tgz#2facb62d2f2d968c7b3d0befa5bcc884cc565d3b"
+ integrity sha512-FxAisPGAOACQjMJzewl9OJG6lsGCPTm5vpUMtfeoxzAlAb2lv+kHzQPUh9h4jfAILzE8AR1jgXMzRmlhwyra1Q==
dependencies:
- "@ethersproject/logger" ">=5.0.0-beta.137"
+ "@ethersproject/logger" "^5.0.0"
-"@ethersproject/rlp@>=5.0.0-beta.132":
- version "5.0.0-beta.133"
- resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.0-beta.133.tgz#e51b2e8d51fd70a5872f85f11741193a6b118110"
- integrity sha512-4zwGZov221uYuz6oXqAf2i5dk3ven7mSNkPRYvS2xdAlUn1Qy8GFUswyRuLaGzpWUGNlKIWCEnvomP5L/CtMPQ==
+"@ethersproject/rlp@^5.0.0":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.2.tgz#d6b550a2ac5e484f15f0f63337e522004d2e78cd"
+ integrity sha512-oE0M5jqQ67fi2SuMcrpoewOpEuoXaD8M9JeR9md1bXRMvDYgKXUtDHs22oevpEOdnO2DPIRabp6MVHa4aDuWmw==
dependencies:
- "@ethersproject/bytes" ">=5.0.0-beta.137"
- "@ethersproject/logger" ">=5.0.0-beta.137"
+ "@ethersproject/bytes" "^5.0.0"
+ "@ethersproject/logger" "^5.0.0"
-"@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@>=5.0.0-beta.136":
- version "5.0.0-beta.137"
- resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.137.tgz#1e9730a701e7a44c3f1b4e1c7e134665cdd51d7b"
- integrity sha512-Z1xKXjoBWM5DOlc8HvjpOKO1zZ8kf4nLpf4C8zZjz+GNhaH03z74tXNNpdLf4UV6otMcHcJtO+X5ATE4TCn9Iw==
+"@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.0":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.2.tgz#1753408c3c889813fd0992abd76393e3e47a2619"
+ integrity sha512-oNa+xvSqsFU96ndzog0IBTtsRFGOqGpzrXJ7shXLBT7juVeSEyZA/sYs0DMZB5mJ9FEjHdZKxR/rTyBY91vuXg==
dependencies:
- "@ethersproject/bytes" ">=5.0.0-beta.137"
- "@ethersproject/constants" ">=5.0.0-beta.133"
- "@ethersproject/logger" ">=5.0.0-beta.137"
+ "@ethersproject/bytes" "^5.0.0"
+ "@ethersproject/constants" "^5.0.0"
+ "@ethersproject/logger" "^5.0.0"
"@jest/types@^24.9.0":
version "24.9.0"
@@ -670,17 +879,11 @@
dependencies:
bignumber.js "7.2.1"
-"@types/events@*":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
- integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
-
"@types/glob@*":
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
- integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
+ integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
dependencies:
- "@types/events" "*"
"@types/minimatch" "*"
"@types/node" "*"
@@ -758,6 +961,13 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+"@types/ramda@^0.27.14":
+ version "0.27.14"
+ resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.27.14.tgz#95f5f676ebdff89cbc7ded8cd011911fa6854daf"
+ integrity sha512-vbw/VAtEJeSJ6Z61QT+epirlnBeJiJIO7ndK1BJ0fKswnfbiTNga/jBG6R3OnBaFYx+UJv6Iv7ZfWDFSsSzNqA==
+ dependencies:
+ ts-toolbelt "^6.3.3"
+
"@types/react@*":
version "16.9.35"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368"
@@ -766,10 +976,10 @@
"@types/prop-types" "*"
csstype "^2.2.0"
-"@types/rimraf@^2.0.3":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46"
- integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==
+"@types/rimraf@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.0.tgz#b9d03f090ece263671898d57bb7bb007023ac19f"
+ integrity sha512-7WhJ0MdpFgYQPXlF4Dx+DhgvlPCfz/x5mHaeDQAKhcenvQP1KCpLQ18JklAqeGMYSAT2PxLpzd0g2/HE7fj7hQ==
dependencies:
"@types/glob" "*"
"@types/node" "*"
@@ -779,16 +989,6 @@
resolved "https://registry.yarnpkg.com/@types/solidity-parser-antlr/-/solidity-parser-antlr-0.2.3.tgz#bb2d9c6511bf483afe4fc3e2714da8a924e59e3f"
integrity sha512-FoSyZT+1TTaofbEtGW1oC9wHND1YshvVeHerME/Jh6gIdHbBAWFW8A97YYqO/dpHcFjIwEPEepX0Efl2ckJgwA==
-"@types/uuid-validate@^0.0.1":
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/@types/uuid-validate/-/uuid-validate-0.0.1.tgz#b4eedecbd9db25851490d65a58f13feaa89dd509"
- integrity sha512-RbX9q0U00SLoV+l7loYX0Wrtv4QTClBC0QcdNts6x2b5G1HJN8NI9YlS1HNA6THrI9EH3OXSgya6eMQIlDjKFA==
-
-"@types/uuid@^3.4.3":
- version "3.4.9"
- resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.9.tgz#fcf01997bbc9f7c09ae5f91383af076d466594e1"
- integrity sha512-XDwyIlt/47l2kWLTzw/mtrpLdB+GPSskR2n/PIcPn+VYhVO77rGhRncIR5GPU0KRzXuqkDO+J5qqrG0Y8P6jzQ==
-
"@types/web3-provider-engine@^14.0.0":
version "14.0.0"
resolved "https://registry.yarnpkg.com/@types/web3-provider-engine/-/web3-provider-engine-14.0.0.tgz#43adc3b39dc9812b82aef8cd2d66577665ad59b0"
@@ -796,12 +996,18 @@
dependencies:
"@types/ethereum-protocol" "*"
-"@types/websocket@^0.0.40":
- version "0.0.40"
- resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-0.0.40.tgz#887cd632a8b3d0d11da7b9d0d106af85997b358c"
- integrity sha512-ldteZwWIgl9cOy7FyvYn+39Ah4+PfpVE72eYKw75iy2L0zTbhbcwvzeJ5IOu6DQP93bjfXq0NGHY6FYtmYoqFQ==
+"@types/websocket@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.1.tgz#039272c196c2c0e4868a0d8a1a27bbb86e9e9138"
+ integrity sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q==
+ dependencies:
+ "@types/node" "*"
+
+"@types/ws@^7.2.6":
+ version "7.2.6"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d"
+ integrity sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ==
dependencies:
- "@types/events" "*"
"@types/node" "*"
"@types/yargs-parser@*":
@@ -821,6 +1027,11 @@
dependencies:
"@types/yargs-parser" "*"
+"@types/zen-observable@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
+ integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
+
"@web3-js/scrypt-shim@^0.1.0":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc"
@@ -985,6 +1196,20 @@
"@webassemblyjs/wast-parser" "1.9.0"
"@xtuc/long" "4.2.2"
+"@wry/context@^0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.5.2.tgz#f2a5d5ab9227343aa74c81e06533c1ef84598ec7"
+ integrity sha512-B/JLuRZ/vbEKHRUiGj6xiMojST1kHhu4WcreLfNN7q9DqQFrb97cWgf/kiYsPSUCAMVN0HzfFc8XjJdzgZzfjw==
+ dependencies:
+ tslib "^1.9.3"
+
+"@wry/equality@^0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.2.0.tgz#a312d1b6a682d0909904c2bcd355b02303104fb7"
+ integrity sha512-Y4d+WH6hs+KZJUC8YKLYGarjGekBrhslDbf/R20oV+AakHPINSitHfDRQz3EGcEWc1luXYNUvMhawWtZVWNGvQ==
+ dependencies:
+ tslib "^1.9.3"
+
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
@@ -1091,6 +1316,11 @@ ansi-colors@3.2.3:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
+ansi-colors@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
@@ -1184,6 +1414,16 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+array.prototype.map@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec"
+ integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ es-array-method-boxes-properly "^1.0.0"
+ is-string "^1.0.4"
+
asn1.js@^4.0.0:
version "4.10.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@@ -1252,7 +1492,7 @@ async@2.6.2:
dependencies:
lodash "^4.17.11"
-async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1:
+async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.4.0, async@^2.5.0, async@^2.6.1:
version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
@@ -1805,6 +2045,11 @@ backbone@^1.4.0:
dependencies:
underscore ">=1.8.3"
+backo2@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
backoff@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"
@@ -1952,7 +2197,7 @@ bn.js@4.11.8:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0:
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0:
version "4.11.9"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
@@ -2014,16 +2259,19 @@ brorand@^1.0.1:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-browser-stdout@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
- integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
-
browser-stdout@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+browserfs@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/browserfs/-/browserfs-1.4.3.tgz#92ffc6063967612daccdb8566d3fc03f521205fb"
+ integrity sha512-tz8HClVrzTJshcyIu8frE15cjqjcBIu15Bezxsvl/i+6f59iNCN3kznlWjz0FEb3DlnDx3gW5szxeT6D1x0s0w==
+ dependencies:
+ async "^2.1.4"
+ pako "^1.0.4"
+
browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6:
version "1.2.0"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
@@ -2269,7 +2517,7 @@ camelcase@^4.1.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-camelcase@^5.0.0:
+camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
@@ -2284,7 +2532,7 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-chai-as-promised@^7.1.0:
+chai-as-promised@^7.1.0, chai-as-promised@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==
@@ -2296,7 +2544,7 @@ chai-bignumber@^3.0.0:
resolved "https://registry.yarnpkg.com/chai-bignumber/-/chai-bignumber-3.0.0.tgz#e90cf1f468355bbb11a9acd051222586cd2648a9"
integrity sha512-SubOtaSI2AILWTWe2j0c6i2yFT/f9J6UBjeVGDuwDiPLkF/U5+/eTWUE3sbCZ1KgcPF6UJsDVYbIxaYA097MQA==
-chai@^4.0.1:
+chai@^4.0.1, chai@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==
@@ -2308,7 +2556,7 @@ chai@^4.0.1:
pathval "^1.1.0"
type-detect "^4.0.5"
-chalk@2.4.2, chalk@^2.0.1, chalk@^2.3.0:
+chalk@2.4.2, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -2340,6 +2588,21 @@ checkpoint-store@^1.1.0:
dependencies:
functional-red-black-tree "^1.0.1"
+chokidar@3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
+ integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.3.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -2359,7 +2622,22 @@ chokidar@^2.1.8:
optionalDependencies:
fsevents "^1.2.7"
-chokidar@^3.0.2, chokidar@^3.4.0:
+chokidar@^3.0.2:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1"
+ integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.4.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chokidar@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
@@ -2479,11 +2757,6 @@ command-exists@^1.2.8:
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
-commander@2.11.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
- integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==
-
commander@3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
@@ -2723,13 +2996,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
dependencies:
ms "2.0.0"
-debug@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
- dependencies:
- ms "2.0.0"
-
debug@3.2.6, debug@^3.2.6:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
@@ -2957,16 +3223,16 @@ dexie@*, dexie@^3.0.1:
resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.0.1.tgz#faafeb94be0d5e18b25d700546a2c05725511cfc"
integrity sha512-/s4KzlaerQnCad/uY1ZNdFckTrbdMVhLlziYQzz62Ff9Ick1lHGomvTXNfwh4ApEZATyXRyVk5F6/y8UU84B0w==
-diff@3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
- integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==
-
diff@3.5.0, diff@^3.2.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+diff@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
diffie-hellman@^5.0.0:
version "5.0.3"
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@@ -3165,6 +3431,41 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
string.prototype.trimleft "^2.1.1"
string.prototype.trimright "^2.1.1"
+es-abstract@^1.17.4:
+ version "1.17.6"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
+ integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.0"
+ is-regex "^1.1.0"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
+es-array-method-boxes-properly@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
+ integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
+
+es-get-iterator@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8"
+ integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==
+ dependencies:
+ es-abstract "^1.17.4"
+ has-symbols "^1.0.1"
+ is-arguments "^1.0.4"
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-string "^1.0.5"
+ isarray "^2.0.5"
+
es-to-primitive@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@@ -3449,6 +3750,22 @@ ethereum-types@^3.0.0, ethereum-types@^3.1.0:
"@types/node" "*"
bignumber.js "~9.0.0"
+ethereum-types@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-3.1.1.tgz#fc9ea72f0d4b93cd651e31ed79b9af4126e15f5a"
+ integrity sha512-4PRpHfzN4v+IhgrEOS4KYugtKliuDESGtWjmhpPmOC2RUilo6wQDYKK2PKaq4rYG+dzHxIfXrPh/AnQpRgSNhw==
+ dependencies:
+ "@types/node" "*"
+ bignumber.js "~9.0.0"
+
+ethereum-types@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-3.2.0.tgz#5bd27cadc3c1b3c2e2bf94654fa2bc3618a4520f"
+ integrity sha512-osxikvWF2CuHauo2jiBpGalLXbCj5xWm2WcNr+Z4sNTk7z6DArPNXwsgANu2bA+aAsqSSF4NgsNx8JS1d3xdOQ==
+ dependencies:
+ "@types/node" "*"
+ bignumber.js "~9.0.0"
+
ethereumjs-abi@0.6.5:
version "0.6.5"
resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241"
@@ -3718,7 +4035,7 @@ ethers@~4.0.4:
uuid "2.0.1"
xmlhttprequest "1.8.0"
-ethjs-unit@0.1.6, ethjs-unit@^0.1.6:
+ethjs-unit@0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699"
integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=
@@ -3734,21 +4051,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3:
is-hex-prefixed "1.0.0"
strip-hex-prefix "1.0.0"
-eventemitter3@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
- integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
-
-eventemitter3@3.1.2:
+eventemitter3@3.1.2, eventemitter3@^3.1.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
-eventemitter3@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
- integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
-
events@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
@@ -4017,6 +4324,14 @@ find-up@3.0.0, find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
+find-up@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
@@ -4184,7 +4499,7 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-ganache-core@^2.9.0-istanbul.0:
+ganache-core@^2.10.2, ganache-core@^2.9.0-istanbul.0:
version "2.10.2"
resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.10.2.tgz#17c171c6c0195b6734a0dd741a9d2afd4f74e292"
integrity sha512-4XEO0VsqQ1+OW7Za5fQs9/Kk7o8M0T1sRfFSF8h9NeJ2ABaqMO5waqxf567ZMcSkRKaTjUucBSz83xNfZv1HDg==
@@ -4306,10 +4621,10 @@ glob-parent@~5.1.0:
dependencies:
is-glob "^4.0.1"
-glob@7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+glob@7.1.3:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -4318,10 +4633,10 @@ glob@7.1.2:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -4341,18 +4656,6 @@ glob@^5.0.15:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
global-modules@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -4449,10 +4752,15 @@ graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
-growl@1.10.3:
- version "1.10.3"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
- integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==
+graphql-tag@^2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd"
+ integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==
+
+graphql@^15.3.0:
+ version "15.3.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.3.0.tgz#3ad2b0caab0d110e3be4a5a9b2aa281e362b5278"
+ integrity sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==
growl@1.10.5:
version "1.10.5"
@@ -4496,16 +4804,16 @@ has-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
-has-flag@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
- integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
-
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
has-symbol-support-x@^1.4.1:
version "1.4.2"
resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
@@ -4608,11 +4916,6 @@ hdkey@^1.1.0:
safe-buffer "^5.1.1"
secp256k1 "^3.0.1"
-he@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
- integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
-
he@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -4637,6 +4940,13 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
+hoist-non-react-statics@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
home-or-tmp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
@@ -4865,6 +5175,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+is-callable@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
+ integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
+
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -4965,6 +5280,11 @@ is-hex-prefixed@1.0.0:
resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"
integrity sha1-fY035q135dEnFIkTxXPggtd39VQ=
+is-map@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1"
+ integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==
+
is-natural-number@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
@@ -5006,16 +5326,33 @@ is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5:
dependencies:
has "^1.0.3"
+is-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff"
+ integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==
+ dependencies:
+ has-symbols "^1.0.1"
+
is-retry-allowed@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+is-set@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43"
+ integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==
+
is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+is-string@^1.0.4, is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
is-symbol@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
@@ -5048,6 +5385,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -5106,6 +5448,24 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
+iterall@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
+ integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
+
+iterate-iterator@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6"
+ integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==
+
+iterate-value@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57"
+ integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==
+ dependencies:
+ es-get-iterator "^1.0.2"
+ iterate-iterator "^1.0.1"
+
jest-changed-files@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039"
@@ -5557,6 +5917,13 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
lodash.values@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"
@@ -5579,6 +5946,13 @@ log-symbols@2.2.0:
dependencies:
chalk "^2.0.1"
+log-symbols@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"
+ integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==
+ dependencies:
+ chalk "^2.4.2"
+
loglevel@^1.6.1:
version "1.6.8"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
@@ -5594,7 +5968,7 @@ looper@^3.0.0:
resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749"
integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=
-loose-envify@^1.0.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -5887,11 +6261,6 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
dependencies:
brace-expansion "^1.1.7"
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
- integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@~1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -5953,13 +6322,6 @@ mkdirp@*:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-mkdirp@0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
- dependencies:
- minimist "0.0.8"
-
mkdirp@0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512"
@@ -5974,22 +6336,6 @@ mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4:
dependencies:
minimist "^1.2.5"
-mocha@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794"
- integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==
- dependencies:
- browser-stdout "1.3.0"
- commander "2.11.0"
- debug "3.1.0"
- diff "3.3.1"
- escape-string-regexp "1.0.5"
- glob "7.1.2"
- growl "1.10.3"
- he "1.1.1"
- mkdirp "0.5.1"
- supports-color "4.4.0"
-
mocha@^6.2.0:
version "6.2.3"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912"
@@ -6019,6 +6365,37 @@ mocha@^6.2.0:
yargs-parser "13.1.2"
yargs-unparser "1.6.0"
+mocha@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.0.tgz#e651d05dcc5e42389f3412c2173ca13352a8bacd"
+ integrity sha512-sI0gaI1I/jPVu3KFpnveWGadfe3JNBAENqgTUPgLZAUppu725zS2mrVztzAgIR8DUscuS4doEBTx9LATC+HSeA==
+ dependencies:
+ ansi-colors "4.1.1"
+ browser-stdout "1.3.1"
+ chokidar "3.3.1"
+ debug "3.2.6"
+ diff "4.0.2"
+ escape-string-regexp "1.0.5"
+ find-up "4.1.0"
+ glob "7.1.6"
+ growl "1.10.5"
+ he "1.2.0"
+ js-yaml "3.13.1"
+ log-symbols "3.0.0"
+ minimatch "3.0.4"
+ ms "2.1.2"
+ object.assign "4.1.0"
+ promise.allsettled "1.0.2"
+ serialize-javascript "4.0.0"
+ strip-json-comments "3.0.1"
+ supports-color "7.1.0"
+ which "2.0.2"
+ wide-align "1.1.3"
+ workerpool "6.0.0"
+ yargs "13.3.2"
+ yargs-parser "13.1.2"
+ yargs-unparser "1.6.1"
+
mock-fs@^4.1.0:
version "4.12.0"
resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.12.0.tgz#a5d50b12d2d75e5bec9dac3b67ffe3c41d31ade4"
@@ -6046,7 +6423,7 @@ ms@2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-ms@^2.1.1:
+ms@2.1.2, ms@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
@@ -6382,6 +6759,13 @@ once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
+optimism@^0.12.1:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.12.1.tgz#933f9467b9aef0e601655adb9638f893e486ad02"
+ integrity sha512-t8I7HM1dw0SECitBYAqFOVHoBAHEQBTeKjIL9y9ImHzAVkdyPK4ifTgM4VJRDtTUY4r/u5Eqxs4XcGPHaoPkeQ==
+ dependencies:
+ "@wry/context" "^0.5.2"
+
optionator@^0.8.1:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@@ -6467,7 +6851,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
-p-limit@^2.0.0:
+p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -6488,6 +6872,13 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
p-timeout@^1.1.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
@@ -6505,7 +6896,7 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-pako@~1.0.5:
+pako@^1.0.4, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
@@ -6566,6 +6957,11 @@ path-exists@^3.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -6612,7 +7008,7 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
@@ -6750,6 +7146,17 @@ promise-to-callback@^1.0.0:
is-fn "^1.0.0"
set-immediate-shim "^1.0.1"
+promise.allsettled@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9"
+ integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==
+ dependencies:
+ array.prototype.map "^1.0.1"
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ iterate-value "^1.0.0"
+
promisify-child-process@^3.1.1:
version "3.1.4"
resolved "https://registry.yarnpkg.com/promisify-child-process/-/promisify-child-process-3.1.4.tgz#3321827f283c0be30de1354bec1c6c627f02d53c"
@@ -6757,6 +7164,15 @@ promisify-child-process@^3.1.1:
dependencies:
"@babel/runtime" "^7.1.5"
+prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
proxy-addr@~2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
@@ -6926,11 +7342,6 @@ querystring@0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-querystringify@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
- integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
-
qunit-puppeteer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/qunit-puppeteer/-/qunit-puppeteer-1.0.1.tgz#453048fbd3e5ece377ee455ba442f112e3dd7e95"
@@ -6978,6 +7389,20 @@ rc@^1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
+react-is@^16.7.0, react-is@^16.8.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react@*:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
+ integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
@@ -7029,6 +7454,13 @@ readdirp@^2.2.1:
micromatch "^3.1.10"
readable-stream "^2.0.2"
+readdirp@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17"
+ integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==
+ dependencies:
+ picomatch "^2.0.7"
+
readdirp@~3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
@@ -7172,11 +7604,6 @@ require-main-filename@^2.0.0:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-requires-port@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
- integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-
resolve-cwd@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
@@ -7240,7 +7667,7 @@ rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
dependencies:
glob "^7.1.3"
-rimraf@^3.0.0:
+rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@@ -7274,7 +7701,7 @@ rustbn.js@~0.2.0:
resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca"
integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==
-rxjs@^6.4.0, rxjs@^6.5.3:
+rxjs@^6.5.3:
version "6.5.5"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
@@ -7437,6 +7864,13 @@ send@0.17.1:
range-parser "~1.2.1"
statuses "~1.5.0"
+serialize-javascript@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
serialize-javascript@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
@@ -7828,7 +8262,7 @@ string.prototype.trim@~1.2.1:
es-abstract "^1.17.0-next.1"
function-bind "^1.1.1"
-string.prototype.trimend@^1.0.0:
+string.prototype.trimend@^1.0.0, string.prototype.trimend@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
@@ -7854,7 +8288,7 @@ string.prototype.trimright@^2.1.1:
es-abstract "^1.17.5"
string.prototype.trimend "^1.0.0"
-string.prototype.trimstart@^1.0.0:
+string.prototype.trimstart@^1.0.0, string.prototype.trimstart@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
@@ -7926,12 +8360,21 @@ strip-json-comments@2.0.1, strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-supports-color@4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
- integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==
+strip-json-comments@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
+subscriptions-transport-ws@^0.9.17:
+ version "0.9.17"
+ resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.17.tgz#e30e40f0caae0d2781903c01a8cb51b6e2682098"
+ integrity sha512-hNHi2N80PBz4T0V0QhnnsMGvG3XDFDS9mS6BhZ3R12T6EBywC8d/uJscsga0cVO4DKtXCkCRrWm2sOYrbOdhEA==
dependencies:
- has-flag "^2.0.0"
+ backo2 "^1.0.2"
+ eventemitter3 "^3.1.0"
+ iterall "^1.2.1"
+ symbol-observable "^1.0.4"
+ ws "^5.2.0"
supports-color@6.0.0:
version "6.0.0"
@@ -7947,6 +8390,13 @@ supports-color@6.1.0:
dependencies:
has-flag "^3.0.0"
+supports-color@7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
+ dependencies:
+ has-flag "^4.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -7984,6 +8434,11 @@ swarm-js@0.1.39:
tar "^4.0.2"
xhr-request-promise "^0.1.2"
+symbol-observable@^1.0.4, symbol-observable@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -8195,6 +8650,13 @@ trim-right@^1.0.1:
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+ts-invariant@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86"
+ integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==
+ dependencies:
+ tslib "^1.9.3"
+
ts-loader@^6.0.4, ts-loader@^6.2.1:
version "6.2.2"
resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58"
@@ -8206,12 +8668,17 @@ ts-loader@^6.0.4, ts-loader@^6.2.1:
micromatch "^4.0.0"
semver "^6.0.0"
+ts-toolbelt@^6.3.3:
+ version "6.13.37"
+ resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.13.37.tgz#3bf7993c973b02371a598348c586e599faea4fe6"
+ integrity sha512-K8P25O7Fx+zHuSBJNQkdwg1OYRA/zerWNltt1EXLoPHQ8kP5ADhJREQgZzi+ka+rHtx0/i/4AdWHJi5V1fdEow==
+
tslib@1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
-tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
+tslib@^1.10.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
@@ -8380,7 +8847,7 @@ typescript@3.7.x:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
-typescript@3.9.3, typescript@^3.9.3:
+typescript@^3.9.3:
version "3.9.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a"
integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==
@@ -8515,14 +8982,6 @@ url-parse-lax@^3.0.0:
dependencies:
prepend-http "^2.0.0"
-url-parse@1.4.4:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8"
- integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==
- dependencies:
- querystringify "^2.0.0"
- requires-port "^1.0.0"
-
url-set-query@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339"
@@ -8555,11 +9014,6 @@ use@^3.1.0:
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-utf8@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768"
- integrity sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=
-
utf8@3.0.0, utf8@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
@@ -8599,11 +9053,6 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-uuid-validate@^0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/uuid-validate/-/uuid-validate-0.0.3.tgz#e30617f75dc742a0e4f95012a11540faf9d39ab4"
- integrity sha512-Fykw5U4eZESbq739BeLvEBFRuJODfrlmjx5eJux7W817LjRaq4b7/i4t2zxQmhcX+fAj4nMfRdTzO4tmwLKn0w==
-
uuid@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac"
@@ -8690,17 +9139,6 @@ web3-core-helpers@1.2.4:
web3-eth-iban "1.2.4"
web3-utils "1.2.4"
-web3-core-helpers@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-2.0.0-alpha.1.tgz#d20db557fe8740578105fb6b5790eb22097d1974"
- integrity sha512-YUDECwESRI2Bw3ijEaGGkYhEAyqQF17KFtul9Y6OZLtYx6W7bJCMKbSFigLl99F3zFLZ8E/dwzCizSrD+DuWIQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- lodash "^4.17.11"
- web3-core "2.0.0-alpha.1"
- web3-eth-iban "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
-
web3-core-method@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed"
@@ -8712,20 +9150,6 @@ web3-core-method@1.2.4:
web3-core-subscriptions "1.2.4"
web3-utils "1.2.4"
-web3-core-method@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-2.0.0-alpha.1.tgz#6fd59cd229550bd08cb8922c095870fc9bf35f66"
- integrity sha512-RlKYn9spgKAbIU9IV5UCQBLAcblLf5O6LYCGacRk0Iyz2SE0bVMtd7CY1pcsIXegNFiT3CPk+XvcpOIehZBhVQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- eventemitter3 "3.1.0"
- lodash "^4.17.11"
- rxjs "^6.4.0"
- web3-core "2.0.0-alpha.1"
- web3-core-helpers "2.0.0-alpha.1"
- web3-core-subscriptions "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
-
web3-core-promievent@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb"
@@ -8754,15 +9178,6 @@ web3-core-subscriptions@1.2.4:
underscore "1.9.1"
web3-core-helpers "1.2.4"
-web3-core-subscriptions@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-2.0.0-alpha.1.tgz#5c2164ce8649645f6809dcdc34626ae12ec0d19b"
- integrity sha512-fOr5DCz1QjwBPf/ssJ49Q0LVi5PUOkHmJ1y+5aSSJZmcuAZ9h1FJp7ANqAI7p7ssXnm9RpCDMg5vGa8tyYyAXA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- eventemitter3 "^4.0.0"
- lodash "^4.17.11"
-
web3-core@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6"
@@ -8776,19 +9191,6 @@ web3-core@1.2.4:
web3-core-requestmanager "1.2.4"
web3-utils "1.2.4"
-web3-core@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-2.0.0-alpha.1.tgz#4bb87b860a0bbf9fd19ae380a4773e12ac3b3010"
- integrity sha512-7fBl1h9Z46q0n8ugjYWMZsBP1tLlt8Rp4dRDF11EUNFQo1ll60tHj9PdjQIcKqoTd9EKhjYeZUWIsLf7YuipqA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- "@types/bn.js" "^4.11.4"
- "@types/node" "^12.6.1"
- lodash "^4.17.11"
- web3-core-method "2.0.0-alpha.1"
- web3-providers "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
-
web3-eth-abi@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8"
@@ -8799,13 +9201,13 @@ web3-eth-abi@1.2.4:
web3-utils "1.2.4"
web3-eth-abi@^1.0.0-beta.24:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.8.tgz#7537138f3e5cd1ccf98233fa07f388aa8dc1fff1"
- integrity sha512-OKp/maLdKHPpQxZhEd0HgnCJFQajsGe42WOG6SVftlgzyR8Jjv4KNm46TKvb3hv5OJTKZWU7nZIxkEG+fyI58w==
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0"
+ integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg==
dependencies:
"@ethersproject/abi" "5.0.0-beta.153"
underscore "1.9.1"
- web3-utils "1.2.8"
+ web3-utils "1.2.11"
web3-eth-accounts@1.2.4:
version "1.2.4"
@@ -8862,15 +9264,6 @@ web3-eth-iban@1.2.4:
bn.js "4.11.8"
web3-utils "1.2.4"
-web3-eth-iban@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-2.0.0-alpha.1.tgz#79f1f6061b95b5bb64eb4243a6c65dadf542077c"
- integrity sha512-I9oD+kjiF/RPYslndfr4UlhU/zdP67+LYG5dMx6zEM+KUmHdwQeMTp4w3NVZny7/pOtXA1w6dJJ2tL/OVfGkkw==
- dependencies:
- "@babel/runtime" "^7.3.1"
- bn.js "4.11.8"
- web3-utils "2.0.0-alpha.1"
-
web3-eth-personal@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b"
@@ -8990,23 +9383,6 @@ web3-providers-ws@1.2.4:
underscore "1.9.1"
web3-core-helpers "1.2.4"
-web3-providers@2.0.0-alpha.1, web3-providers@^2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-providers/-/web3-providers-2.0.0-alpha.1.tgz#19486aed4b014ec5d7687fac4eef2042db8b338c"
- integrity sha512-X7hDkLKVN1U5aWeNQeErev494VSgt4gHJpHTgXn2rxrdJYUf7+6e6Al7yvRHlDxoTzhycX+j11HQC+CZlA+uhQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- "@types/node" "^10.12.18"
- eventemitter3 "3.1.0"
- lodash "^4.17.11"
- url-parse "1.4.4"
- web3-core "2.0.0-alpha.1"
- web3-core-helpers "2.0.0-alpha.1"
- web3-core-method "2.0.0-alpha.1"
- web3-utils "2.0.0-alpha.1"
- websocket "github:web3-js/WebSocket-Node#polyfill/globalThis"
- xhr2-cookies "1.1.0"
-
web3-shh@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd"
@@ -9017,13 +9393,13 @@ web3-shh@1.2.4:
web3-core-subscriptions "1.2.4"
web3-net "1.2.4"
-web3-utils@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951"
- integrity sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ==
+web3-utils@1.2.11:
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82"
+ integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==
dependencies:
- bn.js "4.11.8"
- eth-lib "0.2.7"
+ bn.js "^4.11.9"
+ eth-lib "0.2.8"
ethereum-bloom-filters "^1.0.6"
ethjs-unit "0.1.6"
number-to-bn "1.7.0"
@@ -9031,10 +9407,10 @@ web3-utils@1.2.4:
underscore "1.9.1"
utf8 "3.0.0"
-web3-utils@1.2.8:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.8.tgz#5321d91715cd4c0869005705a33c4c042a532b18"
- integrity sha512-9SIVGFLajwlmo5joC4DGxuy2OeDkRCXVWT8JWcDQ+BayNVHyAWGvn0oGkQ0ys14Un0KK6bjjKoD0xYs4k+FaVw==
+web3-utils@1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951"
+ integrity sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ==
dependencies:
bn.js "4.11.8"
eth-lib "0.2.7"
@@ -9045,22 +9421,6 @@ web3-utils@1.2.8:
underscore "1.9.1"
utf8 "3.0.0"
-web3-utils@2.0.0-alpha.1:
- version "2.0.0-alpha.1"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-2.0.0-alpha.1.tgz#231442adea3b58bca0c7185ee5b7743c01938682"
- integrity sha512-xZY9rPC/5S2utQV26x2oeWlBjs1cGwO+AAwv0smK2zjNi6UeTZjG9aZ/RJZJpToIapKhdtmQI6yZ8/ZQNDRGGg==
- dependencies:
- "@babel/runtime" "^7.3.1"
- "@types/bn.js" "^4.11.4"
- "@types/node" "^12.6.1"
- bn.js "4.11.8"
- eth-lib "0.2.8"
- ethjs-unit "^0.1.6"
- lodash "^4.17.11"
- number-to-bn "1.7.0"
- randombytes "^2.1.0"
- utf8 "2.1.1"
-
web3@1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9"
@@ -9134,7 +9494,7 @@ webpack@^4.39.2, webpack@^4.41.5, webpack@^4.43.0:
watchpack "^1.6.1"
webpack-sources "^1.4.1"
-websocket@1.0.29, "websocket@github:web3-js/WebSocket-Node#polyfill/globalThis":
+websocket@1.0.29:
version "1.0.29"
resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400"
dependencies:
@@ -9144,7 +9504,7 @@ websocket@1.0.29, "websocket@github:web3-js/WebSocket-Node#polyfill/globalThis":
typedarray-to-buffer "^3.1.5"
yaeti "^0.0.6"
-websocket@^1.0.29:
+websocket@^1.0.31:
version "1.0.31"
resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.31.tgz#e5d0f16c3340ed87670e489ecae6144c79358730"
integrity sha512-VAouplvGKPiKFDTeCCO65vYHsyay8DqoBSlzIO3fayrfOgU94lQN5a1uWVnFrMLceTJw/+fQXR5PGbUVRaHshQ==
@@ -9182,6 +9542,13 @@ which@1.3.1, which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.1:
dependencies:
isexe "^2.0.0"
+which@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
wide-align@1.1.3, wide-align@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
@@ -9206,6 +9573,11 @@ worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"
+workerpool@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58"
+ integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==
+
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
@@ -9246,13 +9618,18 @@ ws@^3.0.0:
safe-buffer "~5.1.0"
ultron "~1.1.0"
-ws@^5.1.1:
+ws@^5.1.1, ws@^5.2.0:
version "5.2.2"
resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
dependencies:
async-limiter "~1.0.0"
+ws@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
+ integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
+
wsrun@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.0.tgz#a7c0587cb371ea29352f0b3cad002ea839a25b0f"
@@ -9355,6 +9732,14 @@ yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^15.0.1:
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
+ integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
yargs-parser@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
@@ -9378,6 +9763,17 @@ yargs-unparser@1.6.0:
lodash "^4.17.15"
yargs "^13.3.0"
+yargs-unparser@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.1.tgz#bd4b0ee05b4c94d058929c32cb09e3fce71d3c5f"
+ integrity sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==
+ dependencies:
+ camelcase "^5.3.1"
+ decamelize "^1.2.0"
+ flat "^4.1.0"
+ is-plain-obj "^1.1.0"
+ yargs "^14.2.3"
+
yargs@13.2.4:
version "13.2.4"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
@@ -9447,6 +9843,23 @@ yargs@^11.1.1:
y18n "^3.2.1"
yargs-parser "^9.0.2"
+yargs@^14.2.3:
+ version "14.2.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
+ integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
+ dependencies:
+ cliui "^5.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^15.0.1"
+
yauzl@^2.10.0, yauzl@^2.4.2:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
@@ -9454,3 +9867,8 @@ yauzl@^2.10.0, yauzl@^2.4.2:
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+
+zen-observable@^0.8.14, zen-observable@^0.8.15:
+ version "0.8.15"
+ resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
+ integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
diff --git a/zeroex/order.go b/zeroex/order.go
index 988af1413..3f6f8de4b 100644
--- a/zeroex/order.go
+++ b/zeroex/order.go
@@ -118,8 +118,8 @@ func (c ContractEvent) MarshalJSON() ([]byte, error) {
return json.Marshal(m)
}
-// OrderEvent is the order event emitted by Mesh nodes on the "orders" topic
-// when calling JSON-RPC method `mesh_subscribe`
+// OrderEvent is the order event emitted by the Mesh GraphQL API or the SubScribeToOrderEvents
+// method in core.
type OrderEvent struct {
// Timestamp is an order event timestamp that can be used for bookkeeping purposes.
// If the OrderEvent represents a Mesh-specific event (e.g., ADDED, STOPPED_WATCHING),
diff --git a/zeroex/ordervalidator/order_validator.go b/zeroex/ordervalidator/order_validator.go
index f68aafd6b..0474e5b54 100644
--- a/zeroex/ordervalidator/order_validator.go
+++ b/zeroex/ordervalidator/order_validator.go
@@ -687,6 +687,9 @@ func (o *OrderValidator) computeOptimalChunkSizes(signedOrders []*zeroex.SignedO
}
func isSupportedSignature(signature []byte, orderHash common.Hash) bool {
+ if len(signature) == 0 {
+ return false
+ }
signatureType := zeroex.SignatureType(signature[len(signature)-1])
switch signatureType {
diff --git a/zeroex/orderwatch/order_watcher.go b/zeroex/orderwatch/order_watcher.go
index da6ae283c..359bafc97 100644
--- a/zeroex/orderwatch/order_watcher.go
+++ b/zeroex/orderwatch/order_watcher.go
@@ -1111,7 +1111,7 @@ func (w *Watcher) add(orderInfos []*ordervalidator.AcceptedOrderInfo, validation
// orders in orderInfos were actually not added. This should not happen
// often. For now, we respond by emitting an ADDED event (above) immediately
// followed by a STOPPED_WATCHING event. If this order was submitted via
- // RPC, the RPC client will see a response that indicates the order was
+ // GraphQL, the GraphQL client will see a response that indicates the order was
// successfully added, and then it will look like we immediately stopped
// watching it. This is not too far off from what really happened but is
// slightly inefficient.
@@ -1121,8 +1121,8 @@ func (w *Watcher) add(orderInfos []*ordervalidator.AcceptedOrderInfo, validation
//
// TODO(albrow): In the future, we should add an additional return value and
// then react to that differently depending on whether the order was
- // received via RPC or from a peer. In the former case, we should return an
- // RPC error response indicating that the order was not in fact added. In
+ // received via GraphQL or from a peer. In the former case, we should return an
+ // GraphQL error response indicating that the order was not in fact added. In
// the latter case, we should not emit any order events but might potentially
// want to adjust the peer's score.
for _, orderToAdd := range orderInfos {