ipld-eth-server/postgraphile
2019-04-29 17:18:34 -04:00
..
spec Disable default mutations is now in config file 2019-04-29 17:18:34 -04:00
src Disable default mutations is now in config file 2019-04-29 17:18:34 -04:00
.dockerignore Dockerize postgraphile 2019-02-11 11:27:27 +01:00
Dockerfile Nuke OpenRC from docker image, update readme's 2019-02-11 11:27:33 +01:00
package.json Remove old deps 2019-04-18 12:59:51 +02:00
README.md Disable default mutations is now in config file 2019-04-29 17:18:34 -04:00
tsconfig.json Add Postgraphile subscription exposure 2018-09-04 20:20:43 -05:00
tsconfig.test.json Add Postgraphile subscription exposure 2018-09-04 20:20:43 -05:00
tslint.json Add Postgraphile subscription exposure 2018-09-04 20:20:43 -05:00
webpack.config.js Add Postgraphile subscription exposure 2018-09-04 20:20:43 -05:00
yarn.lock Add support for restricted graphql user 2019-04-18 11:04:14 +02:00

Vulcanize GraphQL API

This application utilizes Postgraphile to expose GraphQL endpoints for exposure of the varied data that VulcanizeDB tracks.

Docker use

Note: currently this image is ~500MB large (unpacked)

Build the docker image in this directory. Start the GraphiQL frontend by:

  • Setting the env variables for the database connection: DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD (and optionally DATABASE_PORT if running on non-standard port).
    • The specified user needs to be superuser on the vulcanizeDB database, so postgraphile can setup watch fixtures keeping track of live schema changes.
  • To limit the amount of available queries in GraphQL, a restricted user can be used for postgraphile introspection by adding env variables GQ_USER and GQ_PASSWORD.
    • By doing GRANT [SELECT | EXECUTE] on tables/functions for this user, you can selectively assign things you want available in GraphQL.
    • You still need to pass in a superuser with DATABASE_USER & DATABASE_PASSWORD for the postgraphile watch fixtures to work.
  • By default, postgraphile publishes the public schema. This can be expanded with for example GQ_SCHEMAS=public,maker
  • Run the container (ex. docker run -e DATABASE_HOST=localhost -e DATABASE_NAME=my_database -e DATABASE_USER=superuser -e DATABASE_PASSWORD=superuser -e GQ_USER=graphql -e GQ_PASSWORD=graphql -e GQ_SCHEMAS=public,anotherSchema -d my-postgraphile-image)
  • GraphiQL frontend is available at :3000/graphiql GraphQL endpoint is available at :3000/graphql

By default, this build will expose only the "public" schema and will disable mutations - to change mutation behaviour, you can use an optional config file config.toml and set the env var CONFIG_PATH to point to its location. Example toml:

[database]
    name     = "vulcanize_public"
    hostname = "localhost"
    port = 5432
    gq_schemas = ["public", "yourschema"]
    gq_user = "graphql"
    gq_password = "graphql"
    disable_default_mutations = false

Building

This application assumes the use of the Yarn package manager. The use of npm may produce unexpected results.

Install dependencies with yarn and execute yarn build. The bundle produced by Webpack will be present in build/dist/.

Running

Provide the built bundle to node as a runnable script: node ./build/dist/vulcanize-postgraphile-server.js

Testing

Tests are executed via Jasmine with a console reporter via the yarn test task.