diff options
author | Kris Shinn <raggamuffin.music@gmail.com> | 2019-01-21 22:38:13 +0800 |
---|---|---|
committer | Guillaume Ballet <gballet@gmail.com> | 2019-01-21 22:38:13 +0800 |
commit | f91312dbdbb9e04ef578946226e5d8069d5dfd5a (patch) | |
tree | 0f931ae2c506db08c4732e3f0b718a115571924d /graphql/graphiql.go | |
parent | 105008b6a121ade656bf63125cecb467e2434d95 (diff) | |
download | go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.tar go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.tar.gz go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.tar.bz2 go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.tar.lz go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.tar.xz go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.tar.zst go-tangerine-f91312dbdbb9e04ef578946226e5d8069d5dfd5a.zip |
GraphQL master FF for review (#18445)
* Initial work on a graphql API
* Added receipts, and more transaction fields.
* Finish receipts, add logs
* Add transactionCount to block
* Add types and .
* Update Block type to be compatible with ethql
* Rename nonce to transactionCount in Account, to be compatible with ethql
* Update transaction, receipt and log to match ethql
* Add query operator, for a range of blocks
* Added ommerCount to Block
* Add transactionAt and ommerAt to Block
* Added sendRawTransaction mutation
* Add Call and EstimateGas to graphQL API
* Refactored to use hexutil.Bytes instead of HexBytes
* Replace BigNum with hexutil.Big
* Refactor call and estimateGas to use ethapi struct type
* Replace ethgraphql.Address with common.Address
* Replace ethgraphql.Hash with common.Hash
* Converted most quantities to Long instead of Int
* Add support for logs
* Fix bug in runFilter
* Restructured Transaction to work primarily with headers, so uncle data is reported properly
* Add gasPrice API
* Add protocolVersion API
* Add syncing API
* Moved schema into its own source file
* Move some single use args types into anonymous structs
* Add doc-comments
* Fixed backend fetching to use context
* Added (very) basic tests
* Add documentation to the graphql schema
* Fix reversion for formatting of big numbers
* Correct spelling error
* s/BigInt/Long/
* Update common/types.go
* Fixes in response to review
* Fix lint error
* Updated calls on private functions
* Fix typo in graphql.go
* Rollback ethapi breaking changes for graphql support
Co-Authored-By: Arachnid <arachnid@notdot.net>
Diffstat (limited to 'graphql/graphiql.go')
-rw-r--r-- | graphql/graphiql.go | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/graphql/graphiql.go b/graphql/graphiql.go new file mode 100644 index 000000000..6d9dda3e8 --- /dev/null +++ b/graphql/graphiql.go @@ -0,0 +1,95 @@ +// The MIT License (MIT) +// +// Copyright (c) 2016 Muhammed Thanish +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package graphql + +import ( + "bytes" + "fmt" + "net/http" +) + +// GraphiQL is an in-browser IDE for exploring GraphiQL APIs. +// This handler returns GraphiQL when requested. +// +// For more information, see https://github.com/graphql/graphiql. +type GraphiQL struct{} + +func respond(w http.ResponseWriter, body []byte, code int) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Header().Set("X-Content-Type-Options", "nosniff") + w.WriteHeader(code) + _, _ = w.Write(body) +} + +func errorJSON(msg string) []byte { + buf := bytes.Buffer{} + fmt.Fprintf(&buf, `{"error": "%s"}`, msg) + return buf.Bytes() +} + +func (h GraphiQL) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + respond(w, errorJSON("only GET requests are supported"), http.StatusMethodNotAllowed) + return + } + + w.Write(graphiql) +} + +var graphiql = []byte(` +<!DOCTYPE html> +<html> + <head> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/graphiql/0.11.11/graphiql.css"/> + <script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/2.0.3/fetch.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.2.0/umd/react.production.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.2.0/umd/react-dom.production.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/graphiql/0.11.11/graphiql.min.js"></script> + </head> + <body style="width: 100%; height: 100%; margin: 0; overflow: hidden;"> + <div id="graphiql" style="height: 100vh;">Loading...</div> + <script> + function fetchGQL(params) { + return fetch("/graphql", { + method: "post", + body: JSON.stringify(params), + credentials: "include", + }).then(function (resp) { + return resp.text(); + }).then(function (body) { + try { + return JSON.parse(body); + } catch (error) { + return body; + } + }); + } + + ReactDOM.render( + React.createElement(GraphiQL, {fetcher: fetchGQL}), + document.getElementById("graphiql") + ) + </script> + </body> +</html> +`) |