Merge pull request #84 from vulcanize/improve-postgraphile-interaction
Add support for restricted graphql users
This commit is contained in:
commit
13cd7126cc
1
.gitignore
vendored
1
.gitignore
vendored
@ -15,3 +15,4 @@ vulcanizedb.log
|
||||
db/migrations/20*.sql
|
||||
plugins/*.so
|
||||
postgraphile/*.toml
|
||||
postgraphile/schema.graphql
|
||||
|
@ -9,18 +9,31 @@ 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
|
||||
* Run the container (ex. `docker run -e DATABASE_HOST=localhost -e DATABASE_NAME=vulcanize_public -e DATABASE_USER=vulcanize -e DATABASE_PASSWORD=vulcanize -d m0ar/images:postgraphile-alpine`)
|
||||
* GraphiQL is available at `:3000/graphiql`
|
||||
* 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 - to add other schemas, use a config file `config.toml` and set the env var `CONFIG_PATH` to point to its location. Example `toml`:
|
||||
By default, this build will expose only the "public" schema - to add other schemas, use either the env variables,
|
||||
or a 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
|
||||
schemas = ["public", "yourschema"]
|
||||
gq_schemas = ["public", "yourschema"]
|
||||
gq_user = "graphql"
|
||||
gq_password = "graphql"
|
||||
```
|
||||
|
||||
## Building
|
||||
@ -29,8 +42,6 @@ By default, this build will expose only the "public" schema - to add other schem
|
||||
|
||||
Install dependencies with `yarn` and execute `yarn build`. The bundle produced by Webpack will be present in `build/dist/`.
|
||||
|
||||
This application currently uses the Postgraphile supporter plugin. This plugin is present in the `vendor/` directory and is copied to `node_modules/` after installation of packages. It is a fresh checkout of the plugin as of August 31st, 2018.
|
||||
|
||||
## Running
|
||||
|
||||
Provide the built bundle to node as a runnable script: `node ./build/dist/vulcanize-postgraphile-server.js`
|
||||
|
@ -5,7 +5,6 @@
|
||||
"scripts": {
|
||||
"build": "rm -rf ./build/dist && webpack --config=./webpack.config.js",
|
||||
"lint": "tslint --project ./tsconfig.json --config ./tslint.json",
|
||||
"postinstall": "rm -rf node_modules/@graphile && mkdir node_modules/@graphile && cp -R ./vendor/postgraphile-supporter/ ./node_modules/@graphile/plugin-supporter/",
|
||||
"start": "npm run build && node ./build/dist/vulcanize-postgraphile-server.js",
|
||||
"dev": "./node_modules/typescript/bin/tsc && node build/dist/src/index.js",
|
||||
"test": "rm -rf ./build/spec && tsc --build ./tsconfig.test.json && jasmine --config=./spec/support/jasmine.json",
|
||||
@ -28,7 +27,7 @@
|
||||
"passport": "0.4.0",
|
||||
"pg": "6.4.2",
|
||||
"pg-native": "3.0.0",
|
||||
"postgraphile": "4.0.0-rc.4",
|
||||
"postgraphile": "4.4.0-beta.11",
|
||||
"subscriptions-transport-ws": "0.9.14",
|
||||
"toml": "2.3.3"
|
||||
},
|
||||
@ -40,6 +39,7 @@
|
||||
"@types/lodash": "4.14.116",
|
||||
"@types/node": "^10.12.21",
|
||||
"@types/passport": "0.4.6",
|
||||
"@graphile-contrib/pg-simplify-inflector": "3.0.0",
|
||||
"awesome-typescript-loader": "5.2.0",
|
||||
"jasmine": "3.2.0",
|
||||
"jasmine-ts-console-reporter": "3.1.1",
|
||||
|
@ -24,15 +24,15 @@ describe('buildServerConfig', () => {
|
||||
databaseConfig = {
|
||||
host: 'example.com',
|
||||
database: 'example_database',
|
||||
schemas: ['public']
|
||||
schemas: ['public'],
|
||||
ownerConnectionString: 'postgres://admin:admin@host'
|
||||
};
|
||||
|
||||
postgraphileMiddleware = jasmine
|
||||
.createSpyObj<PostgraphileMiddleware>(['call']),
|
||||
.createSpyObj<PostgraphileMiddleware>(['call']);
|
||||
|
||||
serverUtilities = {
|
||||
pluginHook: jasmine.createSpy('pluginHook'),
|
||||
enableSubscriptions: jasmine.createSpy('enableSubscriptions'),
|
||||
express: jasmine.createSpy('express'),
|
||||
expressSession: jasmine.createSpy('expressSession'),
|
||||
httpServerFactory: jasmine.createSpy('httpServerFactory'),
|
||||
@ -66,10 +66,6 @@ describe('buildServerConfig', () => {
|
||||
expect(serverConfig.options).not.toBeNull();
|
||||
});
|
||||
|
||||
it('enables simple subscriptions', () => {
|
||||
expect(serverConfig.options.simpleSubscriptions).toBe(true);
|
||||
});
|
||||
|
||||
it('it adds the express session handler as the first middleware', () => {
|
||||
expect(serverConfig.options.webSocketMiddlewares[0])
|
||||
.toBe(expressSessionHandler);
|
||||
|
@ -15,7 +15,6 @@ describe('bootServer', () => {
|
||||
beforeEach(() => {
|
||||
serverUtilities = {
|
||||
pluginHook: jasmine.createSpy('pluginHook'),
|
||||
enableSubscriptions: jasmine.createSpy('enableSubscriptions'),
|
||||
express: jasmine.createSpy('express'),
|
||||
expressSession: jasmine.createSpy('expressSession'),
|
||||
httpServerFactory: jasmine.createSpy('httpServerFactory'),
|
||||
@ -25,12 +24,16 @@ describe('bootServer', () => {
|
||||
|
||||
serverConfig = {
|
||||
middleware: jasmine.createSpyObj<PostgraphileMiddleware>(['call']),
|
||||
options: {
|
||||
options: {
|
||||
appendPlugins: [],
|
||||
disableDefaultMutations: false,
|
||||
enableCors: true,
|
||||
exportGqlSchemaPath: '',
|
||||
graphiql: true,
|
||||
ignoreRBAC: false,
|
||||
ownerConnectionString: '',
|
||||
pluginHook: jasmine.createSpy('pluginHook'),
|
||||
watchPg: true,
|
||||
enableCors: true,
|
||||
simpleSubscriptions: true,
|
||||
graphiql: true,
|
||||
webSocketMiddlewares: [] },
|
||||
port: 5678
|
||||
};
|
||||
@ -56,14 +59,6 @@ describe('bootServer', () => {
|
||||
expect(useSpy).toHaveBeenCalledWith(serverConfig.middleware);
|
||||
});
|
||||
|
||||
it('enahances the Node HTTP server with Postgraphile subscriptions', () => {
|
||||
expect(serverUtilities.enableSubscriptions)
|
||||
.toHaveBeenCalledWith(
|
||||
mockHttpServer,
|
||||
serverConfig.middleware,
|
||||
serverConfig.options);
|
||||
});
|
||||
|
||||
it('instructs the server to listen on the given port', () => {
|
||||
const listenSpy = mockHttpServer.listen as jasmine.Spy;
|
||||
expect(listenSpy).toHaveBeenCalledWith(serverConfig.port);
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { RequestHandler } from 'express';
|
||||
import { Server } from 'http';
|
||||
import { PluginHookFn } from 'postgraphile/build/postgraphile/pluginHook';
|
||||
import {PluginHookFn } from 'postgraphile/build/postgraphile/pluginHook';
|
||||
import {Plugin} from 'postgraphile';
|
||||
|
||||
// NOTE: Shape of the middleware is not
|
||||
// currently important to this application, but if a need arises,
|
||||
@ -9,12 +9,16 @@ import { PluginHookFn } from 'postgraphile/build/postgraphile/pluginHook';
|
||||
export interface PostgraphileMiddleware extends RequestHandler {}
|
||||
|
||||
export interface PostgraphileOptions {
|
||||
pluginHook: PluginHookFn;
|
||||
simpleSubscriptions: boolean;
|
||||
watchPg: boolean;
|
||||
appendPlugins: Plugin[];
|
||||
disableDefaultMutations: boolean;
|
||||
enableCors: boolean;
|
||||
exportGqlSchemaPath: string;
|
||||
graphiql: boolean;
|
||||
// NOTE: Shape of the middlewares is not
|
||||
ignoreRBAC: boolean;
|
||||
ownerConnectionString: string;
|
||||
pluginHook: PluginHookFn;
|
||||
watchPg: boolean;
|
||||
// NOTE Shape of the middlewares is not
|
||||
// currently important to this application, but if a need arises,
|
||||
// any needed shape can be assigned from a custom type here.
|
||||
webSocketMiddlewares: object[];
|
||||
@ -26,8 +30,3 @@ export type PostgraphileInitCallback = (
|
||||
options: PostgraphileOptions
|
||||
) => PostgraphileMiddleware;
|
||||
|
||||
export type AddSubscriptionsCallback = (
|
||||
httpServer: Server,
|
||||
middleware: PostgraphileMiddleware,
|
||||
options: PostgraphileOptions
|
||||
) => void;
|
||||
|
@ -21,7 +21,9 @@ export function parseConfig(
|
||||
let database = '';
|
||||
let user = '';
|
||||
let password = '';
|
||||
let schemas = ['public'];
|
||||
let gqSchemas = ['public'];
|
||||
let gqUser = '';
|
||||
let gqPassword = '';
|
||||
|
||||
if (configPath) {
|
||||
const tomlContents = readCallback(`${configPath}`).toString();
|
||||
@ -32,7 +34,9 @@ export function parseConfig(
|
||||
database = parsedToml['database']['name'];
|
||||
user = parsedToml['database']['user'];
|
||||
password = parsedToml['database']['password'];
|
||||
schemas = parsedToml['database']['schemas'];
|
||||
gqSchemas = parsedToml['database']['gq_schemas'];
|
||||
gqUser = parsedToml['database']['gq_user'] || gqUser;
|
||||
gqPassword = parsedToml['database']['gq_password'] || gqPassword;
|
||||
}
|
||||
|
||||
// Overwrite config values with env. vars if such are set
|
||||
@ -41,6 +45,11 @@ export function parseConfig(
|
||||
database = process.env.DATABASE_NAME || database;
|
||||
user = process.env.DATABASE_USER || user;
|
||||
password = process.env.DATABASE_PASSWORD || password;
|
||||
gqSchemas = process.env.GQ_SCHEMAS
|
||||
? process.env.GQ_SCHEMAS.split(',')
|
||||
: gqSchemas;
|
||||
gqUser = process.env.GQ_USER || gqUser;
|
||||
gqPassword = process.env.GQ_PASSWORD || gqPassword;
|
||||
|
||||
if (!host) {
|
||||
throw new Error(MISSING_HOST_MESSAGE);
|
||||
@ -55,8 +64,11 @@ export function parseConfig(
|
||||
}
|
||||
|
||||
return {
|
||||
host: `postgres://${user}:${password}@${host}:${port}`,
|
||||
host: gqUser && gqPassword
|
||||
? `postgres://${gqUser}:${gqPassword}@${host}:${port}`
|
||||
: `postgres://${user}:${password}@${host}:${port}`,
|
||||
database,
|
||||
schemas
|
||||
schemas: gqSchemas,
|
||||
ownerConnectionString: `postgres://${user}:${password}@${host}:${port}/${database}`
|
||||
};
|
||||
}
|
||||
|
@ -7,11 +7,7 @@ import passport = require('passport');
|
||||
import session = require('express-session');
|
||||
import toml = require('toml');
|
||||
|
||||
const {
|
||||
default: PostGraphileSupporter,
|
||||
enhanceHttpServerWithSubscriptions,
|
||||
} = require('@graphile/plugin-supporter');
|
||||
const pluginHook = makePluginHook([PostGraphileSupporter]);
|
||||
const pluginHook = makePluginHook([]);
|
||||
|
||||
import { ServerUtilities } from './server/interface';
|
||||
import { bootServer } from './server/runtime';
|
||||
@ -27,7 +23,6 @@ const configPath = process.env[CONFIG_PATH_KEY];
|
||||
const serverPort = process.env[SERVER_PORT_KEY];
|
||||
|
||||
const serverUtilities: ServerUtilities = {
|
||||
enableSubscriptions: enhanceHttpServerWithSubscriptions,
|
||||
express,
|
||||
expressSession: session,
|
||||
httpServerFactory: createServer,
|
||||
|
@ -23,13 +23,18 @@ export function buildServerConfig(
|
||||
const passportInitializer = utilities.passport.initialize();
|
||||
const passportSessionHandler = utilities.passport.session();
|
||||
const pluginHook = utilities.pluginHook;
|
||||
const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector');
|
||||
|
||||
const options: PostgraphileOptions = {
|
||||
pluginHook: pluginHook,
|
||||
simpleSubscriptions: true,
|
||||
watchPg: true,
|
||||
appendPlugins: [PgSimplifyInflectorPlugin],
|
||||
disableDefaultMutations: true,
|
||||
enableCors: true,
|
||||
exportGqlSchemaPath: 'schema.graphql',
|
||||
graphiql: true,
|
||||
ignoreRBAC: false,
|
||||
ownerConnectionString: databaseConfig.ownerConnectionString,
|
||||
pluginHook: pluginHook,
|
||||
watchPg: true,
|
||||
webSocketMiddlewares: [
|
||||
expressSessionHandler,
|
||||
passportInitializer,
|
||||
|
@ -7,7 +7,6 @@ import {
|
||||
} from '../adapters/session';
|
||||
|
||||
import {
|
||||
AddSubscriptionsCallback,
|
||||
PostgraphileInitCallback,
|
||||
PostgraphileMiddleware,
|
||||
PostgraphileOptions
|
||||
@ -18,6 +17,7 @@ export interface DatabaseConfig {
|
||||
host: string;
|
||||
database: string;
|
||||
schemas: string[];
|
||||
ownerConnectionString: string;
|
||||
}
|
||||
|
||||
export interface ServerConfig {
|
||||
@ -27,7 +27,6 @@ export interface ServerConfig {
|
||||
}
|
||||
|
||||
export interface ServerUtilities {
|
||||
enableSubscriptions: AddSubscriptionsCallback;
|
||||
express: ExpressInitCallback;
|
||||
expressSession: ExpressSessionInitCallback;
|
||||
httpServerFactory: CreateHttpServerCallback;
|
||||
|
@ -8,11 +8,6 @@ export function bootServer(
|
||||
expressApp.use(config.middleware);
|
||||
|
||||
const httpServer = utilities.httpServerFactory(expressApp);
|
||||
|
||||
utilities.enableSubscriptions(
|
||||
httpServer,
|
||||
config.middleware,
|
||||
config.options);
|
||||
|
||||
httpServer.listen(config.port);
|
||||
}
|
||||
|
@ -2,6 +2,11 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@graphile-contrib/pg-simplify-inflector@3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@graphile-contrib/pg-simplify-inflector/-/pg-simplify-inflector-3.0.0.tgz#fb668befb3be0536911dba48aafd9845a8a2b2d2"
|
||||
integrity sha512-/3D75/BBJLftUBkidAsqGyfJEvzQqGQNJGIhoMwd3lB6a+UW9ofAC9A0h4a7o/mch8m9XZnYjy399ikwwsNE+g==
|
||||
|
||||
"@types/accepts@*":
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
|
||||
@ -62,6 +67,11 @@
|
||||
version "0.13.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.13.4.tgz#55ae9c29f0fd6b85ee536f5c72b4769d5c5e06b1"
|
||||
|
||||
"@types/graphql@^14.0.3":
|
||||
version "14.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.2.0.tgz#74e1da5f2a4a744ac6eb3ed57b48242ea9367202"
|
||||
integrity sha512-lELg5m6eBOmATWyCZl8qULEOvnPIUG6B443yXKj930glXIgwQirIBPp5rthP2amJW0YSzUg2s5sfgba4mRRCNw==
|
||||
|
||||
"@types/http-assert@*":
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.3.0.tgz#5e932606153da28e1d04f9043f4912cf61fd55dd"
|
||||
@ -84,13 +94,13 @@
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.2.tgz#dc106e000bbf92a3ac900f756df47344887ee847"
|
||||
|
||||
"@types/koa@2.0.44":
|
||||
version "2.0.44"
|
||||
resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.44.tgz#4d972a3dec4d6eb89bd3c16775de26305d1c51a6"
|
||||
"@types/koa@^2.0.44":
|
||||
version "2.0.48"
|
||||
resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.48.tgz#29162783029d3e5df8b58c55f6bf0d35f78fc39f"
|
||||
integrity sha512-CiIUYhHlOFJhSCTmsFoFkV2t9ij1JwW26nt0W9XZoWTvmAw6zTE0+k3IAoGICtjzIfhZpZcO323NHmI1LGmdDw==
|
||||
dependencies:
|
||||
"@types/accepts" "*"
|
||||
"@types/cookies" "*"
|
||||
"@types/events" "*"
|
||||
"@types/http-assert" "*"
|
||||
"@types/keygrip" "*"
|
||||
"@types/koa-compose" "*"
|
||||
@ -144,6 +154,14 @@
|
||||
"@types/express-serve-static-core" "*"
|
||||
"@types/mime" "*"
|
||||
|
||||
"@types/ws@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.1.tgz#ca7a3f3756aa12f62a0a62145ed14c6db25d5a28"
|
||||
integrity sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==
|
||||
dependencies:
|
||||
"@types/events" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@webassemblyjs/ast@1.5.13":
|
||||
version "1.5.13"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25"
|
||||
@ -832,10 +850,15 @@ color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||
|
||||
commander@^2.12.1, commander@^2.9.0:
|
||||
commander@^2.12.1:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||
|
||||
commander@^2.19.0:
|
||||
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.13.0:
|
||||
version "2.13.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
|
||||
@ -1665,40 +1688,46 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2:
|
||||
version "4.1.11"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||
|
||||
graphile-build-pg@4.0.0-rc.9:
|
||||
version "4.0.0-rc.9"
|
||||
resolved "https://registry.yarnpkg.com/graphile-build-pg/-/graphile-build-pg-4.0.0-rc.9.tgz#241d3776bbb12b48cb7cbc599b80f51cf4133a00"
|
||||
graphile-build-pg@4.4.0-beta.11:
|
||||
version "4.4.0-beta.11"
|
||||
resolved "https://registry.yarnpkg.com/graphile-build-pg/-/graphile-build-pg-4.4.0-beta.11.tgz#1510cd6f7be13b39c8784727bb28ecbcaf192493"
|
||||
integrity sha512-wQ++s0m9GO7d5erj7xFGQhwqpC5saPDUJmaeD/kPleFyUODybJFa27aNym1XlRV9tWfh6RiX9KSfTsyT5r9veg==
|
||||
dependencies:
|
||||
chalk "^2.1.0"
|
||||
debug ">=2 <3"
|
||||
graphile-build "4.0.0-rc.9"
|
||||
graphql-iso-date "^3.2.0"
|
||||
graphile-build "4.4.0-beta.11"
|
||||
graphql-iso-date "^3.6.0"
|
||||
jsonwebtoken "^8.1.1"
|
||||
lodash ">=4 <5"
|
||||
lru-cache ">=4 <5"
|
||||
pg-sql2 "2.2.1"
|
||||
postgres-interval "1.1.1"
|
||||
postgres-interval "^1.1.1"
|
||||
|
||||
graphile-build@4.0.0-rc.9:
|
||||
version "4.0.0-rc.9"
|
||||
resolved "https://registry.yarnpkg.com/graphile-build/-/graphile-build-4.0.0-rc.9.tgz#8fb16994c65f21b7900c76dd6a67c037f5bb00ee"
|
||||
graphile-build@4.4.0-beta.11:
|
||||
version "4.4.0-beta.11"
|
||||
resolved "https://registry.yarnpkg.com/graphile-build/-/graphile-build-4.4.0-beta.11.tgz#0c16f7e740636c246c0079a62a0e1b03bf513b74"
|
||||
integrity sha512-KxrKgsna/gqQlEqo0dTXWhDCkJ4kmJ1x+c3iCQ8+QUNof6Vb9XFItF3HbX8heSyT83RY9z88NG6gVpYTs1g8aA==
|
||||
dependencies:
|
||||
"@types/graphql" "^0.13.4"
|
||||
"@types/graphql" "^14.0.3"
|
||||
chalk "^2.1.0"
|
||||
debug ">=2 <3"
|
||||
graphql-parse-resolve-info "4.0.0-rc.8"
|
||||
graphql-parse-resolve-info "4.1.0"
|
||||
lodash ">=4 <5"
|
||||
lru-cache ">=4 <5"
|
||||
pluralize "7.0.0"
|
||||
lru-cache "^5.0.0"
|
||||
pluralize "^7.0.0"
|
||||
semver "^5.6.0"
|
||||
|
||||
graphql-iso-date@^3.2.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql-iso-date/-/graphql-iso-date-3.5.0.tgz#55a1be0efa8d28c1453afd2eb5ce1d052189a513"
|
||||
graphql-iso-date@^3.6.0:
|
||||
version "3.6.1"
|
||||
resolved "https://registry.yarnpkg.com/graphql-iso-date/-/graphql-iso-date-3.6.1.tgz#bd2d0dc886e0f954cbbbc496bbf1d480b57ffa96"
|
||||
integrity sha512-AwFGIuYMJQXOEAgRlJlFL4H1ncFM8n8XmoVDTNypNOZyQ8LFDG2ppMFlsS862BSTCDcSUfHp8PD3/uJhv7t59Q==
|
||||
|
||||
graphql-parse-resolve-info@4.0.0-rc.8:
|
||||
version "4.0.0-rc.8"
|
||||
resolved "https://registry.yarnpkg.com/graphql-parse-resolve-info/-/graphql-parse-resolve-info-4.0.0-rc.8.tgz#32ef7981411c72e7292fc765222127710cc088dc"
|
||||
graphql-parse-resolve-info@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql-parse-resolve-info/-/graphql-parse-resolve-info-4.1.0.tgz#fa52bc9d8aeec210e3ad92cca30d3c36a5e814c3"
|
||||
integrity sha512-qDRgykBm1rbyGAlduPuGtKXHlZtUcNgM8Rg6C/gDVcLww9vNV6h0nmCulpYYPWzATnAVGV8ISnLUDFCU9Y+qcA==
|
||||
dependencies:
|
||||
"@types/graphql" "^0.13.4"
|
||||
"@types/graphql" "^14.0.3"
|
||||
debug ">=2 <3"
|
||||
|
||||
graphql-subscriptions@0.5.8:
|
||||
@ -1707,11 +1736,12 @@ graphql-subscriptions@0.5.8:
|
||||
dependencies:
|
||||
iterall "^1.2.1"
|
||||
|
||||
"graphql@^0.6.0 || ^0.7.0 || ^0.8.0-b || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0":
|
||||
version "0.13.2"
|
||||
resolved "http://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz#4c740ae3c222823e7004096f832e7b93b2108270"
|
||||
"graphql@^0.6.0 || ^0.7.0 || ^0.8.0-b || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.2":
|
||||
version "14.2.1"
|
||||
resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.2.1.tgz#779529bf9a01e7207b977a54c20670b48ca6e95c"
|
||||
integrity sha512-2PL1UbvKeSjy/lUeJqHk+eR9CvuErXoCNwJI4jm3oNFEeY+9ELqHNKO1ZuSxAkasPkpWbmT/iMRMFxd3cEL3tQ==
|
||||
dependencies:
|
||||
iterall "^1.2.1"
|
||||
iterall "^1.2.2"
|
||||
|
||||
handle-thing@^2.0.0:
|
||||
version "2.0.0"
|
||||
@ -2128,7 +2158,7 @@ isobject@^3.0.0, isobject@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
|
||||
iterall@^1.2.1:
|
||||
iterall@^1.0.2, iterall@^1.2.1, iterall@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
|
||||
|
||||
@ -2315,7 +2345,7 @@ lodash.once@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
|
||||
|
||||
"lodash@>=3.5 <5", "lodash@>=4 <5", lodash@^4.17.10, lodash@^4.17.5:
|
||||
"lodash@>=4 <5", lodash@^4.17.10, lodash@^4.17.5:
|
||||
version "4.17.10"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
|
||||
|
||||
@ -2357,6 +2387,13 @@ long@^3.2.0:
|
||||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
lru-cache@^5.0.0:
|
||||
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"
|
||||
|
||||
make-dir@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
|
||||
@ -2921,7 +2958,12 @@ parse-asn1@^5.0.0:
|
||||
evp_bytestokey "^1.0.0"
|
||||
pbkdf2 "^3.0.3"
|
||||
|
||||
parseurl@^1.3.1, parseurl@~1.3.2:
|
||||
parseurl@^1.3.2:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
||||
|
||||
parseurl@~1.3.2:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
|
||||
|
||||
@ -3009,9 +3051,10 @@ pg-pool@1.*:
|
||||
generic-pool "2.4.3"
|
||||
object-assign "4.1.0"
|
||||
|
||||
pg-sql2@2.2.1:
|
||||
pg-sql2@2.2.1, pg-sql2@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/pg-sql2/-/pg-sql2-2.2.1.tgz#a37612e5243887c5135a6849dec1f20b2cf00553"
|
||||
integrity sha512-S4XyLvUJv/rUMNk4+4LuT7S/aWKlQifi6ekHeshNWn0FZJxq5t4qw2VzCfbTNM3mQN7c9B6rM01FcnbRI37Y2Q==
|
||||
dependencies:
|
||||
"@types/pg" "^7.4.10"
|
||||
debug ">=2 <3"
|
||||
@ -3081,9 +3124,10 @@ pkg-dir@^3.0.0:
|
||||
dependencies:
|
||||
find-up "^3.0.0"
|
||||
|
||||
pluralize@7.0.0:
|
||||
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==
|
||||
|
||||
portfinder@^1.0.20:
|
||||
version "1.0.20"
|
||||
@ -3098,39 +3142,43 @@ posix-character-classes@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||
|
||||
postgraphile-core@4.0.0-rc.9:
|
||||
version "4.0.0-rc.9"
|
||||
resolved "https://registry.yarnpkg.com/postgraphile-core/-/postgraphile-core-4.0.0-rc.9.tgz#7dc9bf1d0da3a4f81bd68b3977d27ed174a5c72f"
|
||||
postgraphile-core@4.4.0-beta.11:
|
||||
version "4.4.0-beta.11"
|
||||
resolved "https://registry.yarnpkg.com/postgraphile-core/-/postgraphile-core-4.4.0-beta.11.tgz#44c89fe23bd17b59c0605c23c2bfd5564bfb547a"
|
||||
integrity sha512-6efS40Pi9Cj83KlhCe8S2DKsOBh++hGrtA5T0QL8wUYrQJhPdcKmmec9BxWnSRpHE/H/EO0nJPDZm51ixxPu+A==
|
||||
dependencies:
|
||||
"@types/graphql" "^0.13.4"
|
||||
graphile-build "4.0.0-rc.9"
|
||||
graphile-build-pg "4.0.0-rc.9"
|
||||
"@types/graphql" "^14.0.3"
|
||||
graphile-build "4.4.0-beta.11"
|
||||
graphile-build-pg "4.4.0-beta.11"
|
||||
|
||||
postgraphile@4.0.0-rc.4:
|
||||
version "4.0.0-rc.4"
|
||||
resolved "https://registry.yarnpkg.com/postgraphile/-/postgraphile-4.0.0-rc.4.tgz#15a610c28bce2e077fc34d5b4600504c2b86cb39"
|
||||
postgraphile@4.4.0-beta.11:
|
||||
version "4.4.0-beta.11"
|
||||
resolved "https://registry.yarnpkg.com/postgraphile/-/postgraphile-4.4.0-beta.11.tgz#19f1a81f4fb9dce92c57c3f6a92e626539f2c95b"
|
||||
integrity sha512-EFPEApgbDVAT43AnW46KHfIQEQA5PxkKs5YpCsVpC5WKY/4aB0mmDjqX4wdZf1PfP6G5qZjBQZ/Jx4/z6XgScw==
|
||||
dependencies:
|
||||
"@types/graphql" "^0.13.4"
|
||||
"@types/graphql" "^14.0.3"
|
||||
"@types/jsonwebtoken" "<7.2.1"
|
||||
"@types/koa" "2.0.44"
|
||||
"@types/koa" "^2.0.44"
|
||||
"@types/pg" "^7.4.10"
|
||||
"@types/ws" "^6.0.1"
|
||||
body-parser "^1.15.2"
|
||||
chalk "^1.1.3"
|
||||
commander "^2.9.0"
|
||||
commander "^2.19.0"
|
||||
debug "^2.3.3"
|
||||
finalhandler "^1.0.6"
|
||||
graphql "^0.6.0 || ^0.7.0 || ^0.8.0-b || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0"
|
||||
graphql "^0.6.0 || ^0.7.0 || ^0.8.0-b || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.2"
|
||||
http-errors "^1.5.1"
|
||||
iterall "^1.0.2"
|
||||
jsonwebtoken "^8.0.0"
|
||||
lodash ">=3.5 <5"
|
||||
lru-cache ">=4 <5"
|
||||
parseurl "^1.3.1"
|
||||
parseurl "^1.3.2"
|
||||
pg ">=6.1.0 <8"
|
||||
pg-connection-string "^0.1.3"
|
||||
pg-sql2 "2.2.1"
|
||||
postgraphile-core "4.0.0-rc.9"
|
||||
send "^0.16.1"
|
||||
pg-sql2 "^2.2.1"
|
||||
postgraphile-core "4.4.0-beta.11"
|
||||
subscriptions-transport-ws "^0.9.15"
|
||||
tslib "^1.5.0"
|
||||
ws "^6.1.3"
|
||||
|
||||
postgres-array@~1.0.0:
|
||||
version "1.0.2"
|
||||
@ -3144,18 +3192,19 @@ postgres-date@~1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz#e2d89702efdb258ff9d9cee0fe91bd06975257a8"
|
||||
|
||||
postgres-interval@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.1.tgz#acdb0f897b4b1c6e496d9d4e0a853e1c428f06f0"
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
postgres-interval@^1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.2.tgz#bf71ff902635f21cb241a013fc421d81d1db15a9"
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
postgres-interval@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
|
||||
integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
@ -3485,12 +3534,17 @@ semver@^5.3.0, semver@^5.5.0:
|
||||
version "5.5.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
|
||||
|
||||
semver@^5.6.0:
|
||||
version "5.7.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
|
||||
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
|
||||
|
||||
semver@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65"
|
||||
integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==
|
||||
|
||||
send@0.16.2, send@^0.16.1:
|
||||
send@0.16.2:
|
||||
version "0.16.2"
|
||||
resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
|
||||
dependencies:
|
||||
@ -3829,6 +3883,17 @@ subscriptions-transport-ws@0.9.14:
|
||||
symbol-observable "^1.0.4"
|
||||
ws "^5.2.0"
|
||||
|
||||
subscriptions-transport-ws@^0.9.15:
|
||||
version "0.9.16"
|
||||
resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec"
|
||||
integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==
|
||||
dependencies:
|
||||
backo2 "^1.0.2"
|
||||
eventemitter3 "^3.1.0"
|
||||
iterall "^1.2.1"
|
||||
symbol-observable "^1.0.4"
|
||||
ws "^5.2.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
@ -4303,6 +4368,13 @@ ws@^5.2.0:
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
ws@^6.1.3:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
|
||||
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
xregexp@4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
|
||||
|
Loading…
Reference in New Issue
Block a user