├── .dockerignore ├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── README.md ├── apollo-gateway.js ├── apollo.js ├── env.js ├── graph-manager.js ├── index.js ├── lambda.js ├── lib ├── graph-manager-sdk.d.ts ├── graph-manager-sdk.js └── graph-manager-sdk.js.map ├── makefile ├── package-lock.json ├── package.json ├── src └── graph-manager-sdk.ts └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | 4 | links.graphql -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | links.graphql 2 | .env 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | 11 | # Runtime data 12 | pids 13 | *.pid 14 | *.seed 15 | *.pid.lock 16 | 17 | # Directory for instrumented libs generated by jscoverage/JSCover 18 | lib-cov 19 | 20 | # Coverage directory used by tools like istanbul 21 | coverage 22 | 23 | # nyc test coverage 24 | .nyc_output 25 | 26 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 27 | .grunt 28 | 29 | # Bower dependency directory (https://bower.io/) 30 | bower_components 31 | 32 | # node-waf configuration 33 | .lock-wscript 34 | 35 | # Compiled binary addons (http://nodejs.org/api/addons.html) 36 | build/Release 37 | 38 | # Dependency directories 39 | node_modules/ 40 | jspm_packages/ 41 | 42 | # Typescript v1 declaration files 43 | typings/ 44 | 45 | # Optional npm cache directory 46 | .npm 47 | 48 | # Optional eslint cache 49 | .eslintcache 50 | 51 | # Optional REPL history 52 | .node_repl_history 53 | 54 | # Output of 'npm pack' 55 | *.tgz 56 | 57 | # Yarn Integrity file 58 | .yarn-integrity 59 | 60 | # dotenv environment variables file 61 | .env 62 | 63 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | sudo: false 3 | services: 4 | - docker 5 | node_js: 6 | - 8.9.0 7 | before_script: 8 | - npm install -g codecov 9 | jobs: 10 | include: 11 | - stage: deploy 12 | script: make build push 13 | if: tag IS present OR branch = master 14 | - stage: lambda 15 | script: make build-lambda && mkdir release && mv lambda.zip release/lambda.zip 16 | if: tag IS present OR branch = master 17 | after_success: 18 | - codecov 19 | deploy: 20 | - provider: releases 21 | api_key: 22 | secure: taVT+YyTfIVESIXWqMX1JKDrUUN2vY+JcKqUyBizJ6QChqGynhM/+XEEfNuuQRpJXkjcQyjmx2DgnOAueJPEhNBYoN3EsoFhWGPOb3hCHCZuXHysnqWTdEhDXpvNWvNRU2LsqFLRTPOZ49wsywtrB9QIYrangptSwhpJLCCgxtjIaQQ2wOqM7YHW23lKaN+7Kz5a+CXIM/+XqetTxIUn0sp1nkRqblyRbW4Vya6CO/NN9ivGncrwqEHcv4PBY959IKgk57lX4YSH66DDpZt4yfzJU1fenoamDfHYau2QuaGiHDb3CBnH+vq0lj5ChKoG7W7QyKHJ8xTvB9sFK2LE+p4Fc5MgFxx8xgCS+CWXrH8s0s/yVy4Bt2QNz27yo1PouPjuxGLHiyht7OPU4g9ysSE7A/jpDyLZyUJuoeVPfjYLwS+9LSsUjWBiYQD+eVdujg2RKhZAly9CFalYNJfd6uSO0YhCNgPk98ILb5h1dJycx/NgoU02IqM7hFZFyJE8umzx9OYHhHl8EoDRyOdmMcLYwaQCI8aV+VApQNRAMCd5G3kzxSpk90a8fsPmIsC4ec5yj4rkA2EJ+YeOYaWkcXlerq9z5DrTsrWzpSKwz3wjpbNZYDObvX7xdYRV8219Rk9t8q1TUAU8HG8g/5AdgGou1Xi1/cjZjdhxsYvKavU= 23 | file: release/lambda.zip 24 | skip_cleanup: true 25 | on: 26 | tags: true 27 | repo: graphql-services/graphql-gateway 28 | condition: $TRAVIS_BUILD_STAGE_NAME = lambda 29 | - provider: s3 30 | access_key_id: $AWS_ACCESS_KEY_ID 31 | secret_access_key: $AWS_SECRET_ACCESS_KEY 32 | glob: "*.*" 33 | bucket: "novacloud-lambda-functions" 34 | skip_cleanup: true 35 | region: eu-central-1 36 | upload-dir: github.com/$TRAVIS_REPO_SLUG/$TRAVIS_BRANCH 37 | local_dir: release 38 | on: 39 | tags: true 40 | repo: $TRAVIS_REPO_SLUG 41 | condition: $TRAVIS_BUILD_STAGE_NAME = lambda 42 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8.9.0-alpine 2 | 3 | COPY . /code 4 | WORKDIR /code 5 | 6 | RUN npm install --only=production && \ 7 | npm install apollo-engine-binary-linux 8 | 9 | ENTRYPOINT [ "npm" ] 10 | CMD [ "start" ] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 graphql-gateway 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graphql-gateway 2 | 3 | [![Build Status](https://travis-ci.org/graphql-services/graphql-gateway.svg?branch=master)](https://travis-ci.org/graphql-services/graphql-gateway) 4 | 5 | Apollo federation gateway wrapped in Docker image or AWS Lambda package. 6 | 7 | ## Docker 8 | 9 | You can start docker container directly: 10 | 11 | ``` 12 | docker run --rm -p 8080:80 -e GRAPHQL_URL_0=https://api.graphloc.com/graphql graphql/gateway 13 | ``` 14 | 15 | Or using docker-compose: 16 | 17 | ``` 18 | version: '2' 19 | services: 20 | graphql-gateway: 21 | image: graphql/gateway 22 | links: 23 | - my-custom-service 24 | ports: 25 | - 8080:80 26 | environment: 27 | - GRAPHQL_URL_0=https://graphql-demo.azurewebsites.net/ 28 | - GRAPHQL_URL_1=https://api.graphloc.com/graphql 29 | - GRAPHQL_URL_2=http://my-custom-service/graphql 30 | - GRAPHQL_UPDATE_GATEWAY=true 31 | - GRAPHQL_UPDATE_GATEWAY_INTERVAL_MS=60000 32 | my-custom-service: 33 | image: ... 34 | ``` 35 | 36 | ## Using graph-manager 37 | 38 | You can connect gateway to [graph-manager service](https://github.com/graphql-services/graph-manager). 39 | 40 | Docker compose: 41 | 42 | ``` 43 | version: '3.4' 44 | services: 45 | graphql-gateway: 46 | image: graphql/gateway 47 | links: 48 | - graph-manager 49 | ports: 50 | - 8080:80 51 | environment: 52 | - GRAPH_MANAGER_URL=http://graph-manager/graphql 53 | - GRAPH_MANAGER_GATEWAY_ID=my-gateway-id 54 | graph-manager: 55 | image: graphql/graph-manager 56 | ``` 57 | 58 | See more details about integration on graph-manager repository https://github.com/graphql-services/graph-manager 59 | 60 | ## Merging GraphQL API's running in AWS Lambda 61 | 62 | Gateway can also call AWS Lambda functions directly, just provide url in this format: 63 | 64 | ``` 65 | GRAPHQL_URL_0=lambda://my-function-name/graphql[?version=my-version] 66 | // specific version 67 | GRAPHQL_URL_0=lambda://my-function-name/graphql?version=my-version 68 | ``` 69 | 70 | ## Autoupdating the schema 71 | 72 | In case You want the schema to be updated automatically on regular basis, You can turn on autoupdates using following envvars: 73 | 74 | ``` 75 | # enable feature 76 | GRAPHQL_UPDATE_GATEWAY=true 77 | # specify interval for updating the schema 78 | GRAPHQL_UPDATE_GATEWAY_INTERVAL_MS=60000 79 | ``` 80 | 81 | ## Apollo engine support 82 | 83 | If you provide environment variable: 84 | 85 | ``` 86 | APOLLO_ENGINE_KEY=... 87 | ``` 88 | 89 | The gateway automatically starts with Engine proxy. 90 | 91 | ## Prometheus metrics 92 | 93 | This gateway automatically exports prometheus metrics on `/metrics` endpoint using [apollo-metrics](https://github.com/dotellie/apollo-metrics). 94 | You can disable this feature by settings environment variable `PROMETHEUS_METRICS_ENABLED=false` 95 | -------------------------------------------------------------------------------- /apollo-gateway.js: -------------------------------------------------------------------------------- 1 | const { ApolloGateway, RemoteGraphQLDataSource } = require("@apollo/gateway"); 2 | const { LambdaGraphQLDataSource } = require("apollo-gateway-aws-lambda"); 3 | const { URL } = require("url"); 4 | 5 | const buildApolloGateway = async (gwConfig) => { 6 | const gateway = new ApolloGateway({ 7 | ...gwConfig, 8 | buildService({ name, url }) { 9 | if (url.indexOf("lambda://") === 0) { 10 | const parsedUrl = new URL(url); 11 | const fn = parsedUrl.host; 12 | const path = parsedUrl.pathname; 13 | const version = parsedUrl.searchParams.get("version"); 14 | const functionName = fn + (version ? ":" + version : ""); 15 | return new LambdaGraphQLDataSource({ 16 | functionName, 17 | path, 18 | willSendRequest({ request, context }) { 19 | // request.http.headers.set('x-correlation-id', '...'); 20 | if ( 21 | context.req && 22 | context.req.headers && 23 | context.req.headers["authorization"] 24 | ) { 25 | request.http.headers.set( 26 | "authorization", 27 | context.req.headers["authorization"] 28 | ); 29 | } 30 | // console.log('will send request -> ', name, JSON.stringify(request)); 31 | }, 32 | }); 33 | } 34 | return new RemoteGraphQLDataSource({ 35 | url, 36 | willSendRequest({ request, context }) { 37 | // request.http.headers.set('x-correlation-id', '...'); 38 | if ( 39 | context.req && 40 | context.req.headers && 41 | context.req.headers["authorization"] 42 | ) { 43 | request.http.headers.set( 44 | "authorization", 45 | context.req.headers["authorization"] 46 | ); 47 | } 48 | // console.log('will send request -> ', name, JSON.stringify(request)); 49 | }, 50 | }); 51 | }, 52 | }); 53 | 54 | return gateway; 55 | }; 56 | 57 | module.exports.buildApolloGateway = buildApolloGateway; 58 | -------------------------------------------------------------------------------- /apollo.js: -------------------------------------------------------------------------------- 1 | const { getENVArray, getENV } = require("./env"); 2 | const { GraphQLClient } = require("graphql-request"); 3 | 4 | const { ApolloServer } = require("apollo-server-express"); 5 | const { 6 | getSdk, 7 | OnGatewayVersionUpdatedDocument, 8 | } = require("./lib/graph-manager-sdk"); 9 | const { createSubscriptionObservable } = require("./graph-manager"); 10 | const { buildApolloGateway } = require("./apollo-gateway"); 11 | const { parse } = require("graphql"); 12 | 13 | const createMetricsPlugin = require("apollo-metrics"); 14 | const { register } = require("prom-client"); 15 | 16 | const urls = getENVArray("GRAPHQL_URL"); 17 | const names = getENVArray("GRAPHQL_NAME", []); 18 | const graphManagerURL = getENV("GRAPH_MANAGER_URL", null); 19 | const graphManagerGatewayID = getENV("GRAPH_MANAGER_GATEWAY_ID", null); 20 | 21 | const prometheusMetricsEnabled = 22 | getENV("PROMETHEUS_METRICS_ENABLED", "true") === "true"; 23 | 24 | const getApolloServer = async (gateway, lambdaEnvironment = false) => { 25 | const { schema, executor } = await gateway.load(); 26 | 27 | const apolloMetricsPlugin = createMetricsPlugin(register); 28 | 29 | const server = new ApolloServer({ 30 | schema, 31 | executor, 32 | context: ({ req }) => ({ req }), 33 | plugins: prometheusMetricsEnabled ? [apolloMetricsPlugin] : [], 34 | tracing: prometheusMetricsEnabled, 35 | engine: { 36 | sendReportsImmediately: lambdaEnvironment, 37 | }, 38 | }); 39 | 40 | return server; 41 | }; 42 | 43 | const getApolloServerMiddleware = async (lambdaEnvironment = false) => { 44 | if (graphManagerURL && graphManagerGatewayID) { 45 | return getApolloServerMiddlewareFromGraphManager(); 46 | } 47 | 48 | const gwConfig = { 49 | serviceList: urls.map((x, i) => ({ name: names[i] || x, url: x })), 50 | }; 51 | 52 | const gateway = await buildApolloGateway(gwConfig); 53 | const server = await getApolloServer(gateway, lambdaEnvironment); 54 | let middleware = server.getMiddleware({}); 55 | 56 | const activateUpdateGatewayInterval = 57 | getENV("GRAPHQL_UPDATE_GATEWAY", "false") === "true"; 58 | const updateGatewayInterval = getENV( 59 | "GRAPHQL_UPDATE_GATEWAY_INTERVAL_MS", 60 | "60000" 61 | ); 62 | if (activateUpdateGatewayInterval === true) { 63 | setInterval(async () => { 64 | try { 65 | const server = await getApolloServer(); 66 | middleware = server.getMiddleware({}); 67 | } catch (error) { 68 | console.error(error); 69 | } 70 | }, updateGatewayInterval); 71 | } 72 | 73 | return (req, res, next) => { 74 | middleware(req, res, next); 75 | }; 76 | }; 77 | 78 | const getApolloServerMiddlewareFromGraphManager = async ( 79 | lambdaEnvironment = false 80 | ) => { 81 | console.log( 82 | `Using graph-manager on ${graphManagerURL} and gateway ID '${graphManagerGatewayID}'` 83 | ); 84 | 85 | const client = new GraphQLClient(graphManagerURL); 86 | const sdk = getSdk(client); 87 | const gw = await sdk.getGateway({ id: graphManagerGatewayID }); 88 | 89 | if (!gw.gateway.currentVersion) { 90 | throw new Error("Gateway has no currentVersion"); 91 | } 92 | const gwConfig = { 93 | serviceList: urls.map((x, i) => ({ name: names[i] || x, url: x })), 94 | localServiceList: gw.gateway.currentVersion.serviceSchemas.map( 95 | (schema) => ({ 96 | typeDefs: parse(schema.typeDefs), 97 | name: schema.service.name, 98 | url: schema.service.url, 99 | }) 100 | ), 101 | }; 102 | 103 | const gateway = await buildApolloGateway(gwConfig); 104 | const server = await getApolloServer(gateway, lambdaEnvironment); 105 | let middleware = server.getMiddleware({}); 106 | 107 | const subscriptionClient = createSubscriptionObservable( 108 | graphManagerURL, // GraphQL endpoint 109 | OnGatewayVersionUpdatedDocument, // Subscription query 110 | { gatewayId: graphManagerGatewayID } // Query variables 111 | ); 112 | subscriptionClient.subscribe( 113 | async (eventData) => { 114 | console.log("Received updated from graph-manager"); 115 | // console.log(JSON.stringify(eventData, null, 2)); 116 | const gwConfig = { 117 | serviceList: urls.map((x, i) => ({ name: names[i] || x, url: x })), 118 | localServiceList: eventData.data.gatewayVersionUpdated.gateway.currentVersion.serviceSchemas.map( 119 | (schema) => ({ 120 | typeDefs: parse(schema.typeDefs), 121 | name: schema.service.name, 122 | url: schema.service.url, 123 | }) 124 | ), 125 | }; 126 | const gateway = await buildApolloGateway(gwConfig); 127 | const server = await getApolloServer(gateway, lambdaEnvironment); 128 | middleware = server.getMiddleware({}); 129 | }, 130 | (err) => { 131 | console.log("Failed to get subscription data from graph-manager", err); 132 | } 133 | ); 134 | 135 | return (req, res, next) => { 136 | middleware(req, res, next); 137 | }; 138 | }; 139 | 140 | module.exports.getApolloServer = getApolloServer; 141 | module.exports.getApolloServerMiddleware = getApolloServerMiddleware; 142 | -------------------------------------------------------------------------------- /env.js: -------------------------------------------------------------------------------- 1 | try { 2 | require("dotenv").config(); 3 | } catch (err) {} 4 | 5 | getENV = (name, defaultValue) => { 6 | const value = process.env[name]; 7 | 8 | if (typeof value === "undefined") { 9 | if (typeof defaultValue === "undefined") { 10 | throw new Error(`Missing environment varialbe '${name}'`); 11 | } 12 | return defaultValue; 13 | } 14 | 15 | return value; 16 | }; 17 | module.exports.getENV = getENV; 18 | 19 | module.exports.getENVArray = (prefix) => { 20 | let result = []; 21 | 22 | let value = getENV(prefix, null); 23 | if (typeof value === "string") { 24 | result.push(value); 25 | } 26 | 27 | for (let i = 0; i < 100; i++) { 28 | let indexKey = `${prefix}_${i}`; 29 | let value = getENV(indexKey, null); 30 | if (typeof value === "string") { 31 | result.push(value); 32 | } else { 33 | break; 34 | } 35 | } 36 | return result; 37 | }; 38 | -------------------------------------------------------------------------------- /graph-manager.js: -------------------------------------------------------------------------------- 1 | const { execute } = require("apollo-link"); 2 | const { WebSocketLink } = require("apollo-link-ws"); 3 | const { SubscriptionClient } = require("subscriptions-transport-ws"); 4 | const ws = require("ws"); 5 | 6 | const getWsClient = function (wsurl) { 7 | const client = new SubscriptionClient(wsurl, { reconnect: true }, ws); 8 | return client; 9 | }; 10 | 11 | const createSubscriptionObservable = (wsurl, query, variables) => { 12 | const link = new WebSocketLink(getWsClient(wsurl)); 13 | return execute(link, { query: query, variables: variables }); 14 | }; 15 | module.exports.createSubscriptionObservable = createSubscriptionObservable; 16 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { getENV } = require("./env"); 2 | const express = require("express"); 3 | const { getApolloServerMiddleware } = require("./apollo"); 4 | const { register } = require("prom-client"); 5 | 6 | const prometheusMetricsEnabled = 7 | getENV("PROMETHEUS_METRICS_ENABLED", "true") === "true"; 8 | 9 | (async () => { 10 | const app = express(); 11 | const jsonBodyLimit = getENV("GRAPHQL_JSON_BODY_LIMIT", "2mb"); 12 | app.use(express.json({ limit: jsonBodyLimit })); 13 | 14 | if (prometheusMetricsEnabled) { 15 | app.get("/metrics", (_, res) => res.send(register.metrics())); 16 | } 17 | 18 | let middleware = await getApolloServerMiddleware(); 19 | app.use(middleware); 20 | 21 | const HOST = getENV("HOST", "http://localhost"); 22 | const PORT = getENV("PORT", "80"); 23 | 24 | app.listen({ port: PORT }, () => { 25 | console.log(`🚀 Server ready at ${HOST}:${PORT}/graphql`); 26 | }); 27 | })(); 28 | -------------------------------------------------------------------------------- /lambda.js: -------------------------------------------------------------------------------- 1 | const awsServerlessExpress = require("aws-serverless-express"); 2 | 3 | const express = require("express"); 4 | const { getApolloServerMiddleware } = require("./apollo"); 5 | const { register } = require("prom-client"); 6 | 7 | const prometheusMetricsEnabled = 8 | getENV("PROMETHEUS_METRICS_ENABLED", "true") === "true"; 9 | 10 | let server = null; 11 | 12 | const binaryMimeTypes = ["*/*"]; 13 | const getServer = async () => { 14 | if (!server) { 15 | const app = express(); 16 | const jsonBodyLimit = getENV("GRAPHQL_JSON_BODY_LIMIT", "2mb"); 17 | app.use(express.json({ limit: jsonBodyLimit })); 18 | 19 | if (prometheusMetricsEnabled) { 20 | app.get("/metrics", (_, res) => res.send(register.metrics())); 21 | } 22 | 23 | const middleware = await getApolloServerMiddleware(true); 24 | app.use(middleware); 25 | 26 | server = awsServerlessExpress.createServer(app, null, binaryMimeTypes); 27 | } 28 | return server; 29 | }; 30 | 31 | exports.handler = async (event, context) => { 32 | const server = await getServer(); 33 | return awsServerlessExpress.proxy(server, event, context, "PROMISE").promise; 34 | }; 35 | -------------------------------------------------------------------------------- /lib/graph-manager-sdk.d.ts: -------------------------------------------------------------------------------- 1 | import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from "graphql"; 2 | import { GraphQLClient } from "graphql-request"; 3 | export declare type Maybe = T | null; 4 | export declare type Exact = { 7 | [K in keyof T]: T[K]; 8 | }; 9 | export declare type RequireFields = { 10 | [X in Exclude]?: T[X]; 11 | } & { 12 | [P in K]-?: NonNullable; 13 | }; 14 | export declare type Scalars = { 15 | ID: string; 16 | String: string; 17 | Boolean: boolean; 18 | Int: number; 19 | Float: number; 20 | DateTime: any; 21 | }; 22 | export declare type Service = { 23 | __typename?: "Service"; 24 | id: Scalars["ID"]; 25 | createdAt: Scalars["DateTime"]; 26 | name: Scalars["String"]; 27 | url: Scalars["String"]; 28 | schemas: Array; 29 | latestSchema?: Maybe; 30 | }; 31 | export declare type ServiceSchema = { 32 | __typename?: "ServiceSchema"; 33 | id: Scalars["ID"]; 34 | createdAt: Scalars["DateTime"]; 35 | version: Scalars["String"]; 36 | typeDefs: Scalars["String"]; 37 | service: Service; 38 | gatewayVersions: Array; 39 | }; 40 | export declare type GatewayVersion = { 41 | __typename?: "GatewayVersion"; 42 | id: Scalars["ID"]; 43 | createdAt: Scalars["DateTime"]; 44 | status: GatewayVersionStatus; 45 | validationError?: Maybe; 46 | gateway: Gateway; 47 | serviceSchemas: Array; 48 | }; 49 | export declare enum GatewayVersionStatus { 50 | Pending = "PENDING", 51 | Valid = "VALID", 52 | Invalid = "INVALID" 53 | } 54 | export declare type Gateway = { 55 | __typename?: "Gateway"; 56 | id: Scalars["ID"]; 57 | createdAt: Scalars["DateTime"]; 58 | name: Scalars["String"]; 59 | services: Array; 60 | versions: Array; 61 | currentVersion?: Maybe; 62 | }; 63 | export declare type Query = { 64 | __typename?: "Query"; 65 | gateway?: Maybe; 66 | service?: Maybe; 67 | }; 68 | export declare type QueryGatewayArgs = { 69 | id: Scalars["ID"]; 70 | }; 71 | export declare type QueryServiceArgs = { 72 | id: Scalars["ID"]; 73 | }; 74 | export declare type Mutation = { 75 | __typename?: "Mutation"; 76 | createGateway: Gateway; 77 | deleteGateway: Scalars["Boolean"]; 78 | createService: Service; 79 | deleteService: Scalars["Boolean"]; 80 | addServiceToGateway: Scalars["Boolean"]; 81 | removeServiceFromGateway: Scalars["Boolean"]; 82 | publishServiceSchema: ServiceSchema; 83 | }; 84 | export declare type MutationCreateGatewayArgs = { 85 | input: GatewayInput; 86 | }; 87 | export declare type MutationDeleteGatewayArgs = { 88 | id: Scalars["ID"]; 89 | }; 90 | export declare type MutationCreateServiceArgs = { 91 | input: ServiceInput; 92 | }; 93 | export declare type MutationDeleteServiceArgs = { 94 | id: Scalars["ID"]; 95 | }; 96 | export declare type MutationAddServiceToGatewayArgs = { 97 | gatewayId: Scalars["ID"]; 98 | serviceId: Scalars["ID"]; 99 | }; 100 | export declare type MutationRemoveServiceFromGatewayArgs = { 101 | gatewayId: Scalars["ID"]; 102 | serviceId: Scalars["ID"]; 103 | }; 104 | export declare type MutationPublishServiceSchemaArgs = { 105 | input: ServiceSchemaInput; 106 | }; 107 | export declare type GatewayInput = { 108 | id?: Maybe; 109 | name: Scalars["String"]; 110 | }; 111 | export declare type ServiceInput = { 112 | id?: Maybe; 113 | name: Scalars["String"]; 114 | url: Scalars["String"]; 115 | }; 116 | export declare type ServiceSchemaInput = { 117 | serviceId: Scalars["ID"]; 118 | version: Scalars["String"]; 119 | typeDefs: Scalars["String"]; 120 | }; 121 | export declare type Subscription = { 122 | __typename?: "Subscription"; 123 | gatewayVersionUpdated: GatewayVersion; 124 | }; 125 | export declare type SubscriptionGatewayVersionUpdatedArgs = { 126 | gatewayId: Scalars["ID"]; 127 | }; 128 | export declare type ResolverTypeWrapper = Promise | T; 129 | export declare type LegacyStitchingResolver = { 130 | fragment: string; 131 | resolve: ResolverFn; 132 | }; 133 | export declare type NewStitchingResolver = { 134 | selectionSet: string; 135 | resolve: ResolverFn; 136 | }; 137 | export declare type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; 138 | export declare type Resolver = ResolverFn | StitchingResolver; 139 | export declare type ResolverFn = (parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => Promise | TResult; 140 | export declare type SubscriptionSubscribeFn = (parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => AsyncIterator | Promise>; 141 | export declare type SubscriptionResolveFn = (parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => TResult | Promise; 142 | export interface SubscriptionSubscriberObject { 143 | subscribe: SubscriptionSubscribeFn<{ 144 | [key in TKey]: TResult; 145 | }, TParent, TContext, TArgs>; 146 | resolve?: SubscriptionResolveFn; 149 | } 150 | export interface SubscriptionResolverObject { 151 | subscribe: SubscriptionSubscribeFn; 152 | resolve: SubscriptionResolveFn; 153 | } 154 | export declare type SubscriptionObject = SubscriptionSubscriberObject | SubscriptionResolverObject; 155 | export declare type SubscriptionResolver = ((...args: any[]) => SubscriptionObject) | SubscriptionObject; 156 | export declare type TypeResolveFn = (parent: TParent, context: TContext, info: GraphQLResolveInfo) => Maybe | Promise>; 157 | export declare type IsTypeOfResolverFn = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise; 158 | export declare type NextResolverFn = () => Promise; 159 | export declare type DirectiveResolverFn = (next: NextResolverFn, parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => TResult | Promise; 160 | export declare type ResolversTypes = { 161 | String: ResolverTypeWrapper; 162 | Boolean: ResolverTypeWrapper; 163 | Service: ResolverTypeWrapper; 164 | ID: ResolverTypeWrapper; 165 | DateTime: ResolverTypeWrapper; 166 | ServiceSchema: ResolverTypeWrapper; 167 | GatewayVersion: ResolverTypeWrapper; 168 | GatewayVersionStatus: GatewayVersionStatus; 169 | Gateway: ResolverTypeWrapper; 170 | Query: ResolverTypeWrapper<{}>; 171 | Mutation: ResolverTypeWrapper<{}>; 172 | GatewayInput: GatewayInput; 173 | ServiceInput: ServiceInput; 174 | ServiceSchemaInput: ServiceSchemaInput; 175 | Subscription: ResolverTypeWrapper<{}>; 176 | }; 177 | export declare type ResolversParentTypes = { 178 | String: Scalars["String"]; 179 | Boolean: Scalars["Boolean"]; 180 | Service: Service; 181 | ID: Scalars["ID"]; 182 | DateTime: Scalars["DateTime"]; 183 | ServiceSchema: ServiceSchema; 184 | GatewayVersion: GatewayVersion; 185 | Gateway: Gateway; 186 | Query: {}; 187 | Mutation: {}; 188 | GatewayInput: GatewayInput; 189 | ServiceInput: ServiceInput; 190 | ServiceSchemaInput: ServiceSchemaInput; 191 | Subscription: {}; 192 | }; 193 | export declare type ServiceResolvers = { 194 | id?: Resolver; 195 | createdAt?: Resolver; 196 | name?: Resolver; 197 | url?: Resolver; 198 | schemas?: Resolver, ParentType, ContextType>; 199 | latestSchema?: Resolver, ParentType, ContextType>; 200 | __isTypeOf?: IsTypeOfResolverFn; 201 | }; 202 | export interface DateTimeScalarConfig extends GraphQLScalarTypeConfig { 203 | name: "DateTime"; 204 | } 205 | export declare type ServiceSchemaResolvers = { 206 | id?: Resolver; 207 | createdAt?: Resolver; 208 | version?: Resolver; 209 | typeDefs?: Resolver; 210 | service?: Resolver; 211 | gatewayVersions?: Resolver, ParentType, ContextType>; 212 | __isTypeOf?: IsTypeOfResolverFn; 213 | }; 214 | export declare type GatewayVersionResolvers = { 215 | id?: Resolver; 216 | createdAt?: Resolver; 217 | status?: Resolver; 218 | validationError?: Resolver, ParentType, ContextType>; 219 | gateway?: Resolver; 220 | serviceSchemas?: Resolver, ParentType, ContextType>; 221 | __isTypeOf?: IsTypeOfResolverFn; 222 | }; 223 | export declare type GatewayResolvers = { 224 | id?: Resolver; 225 | createdAt?: Resolver; 226 | name?: Resolver; 227 | services?: Resolver, ParentType, ContextType>; 228 | versions?: Resolver, ParentType, ContextType>; 229 | currentVersion?: Resolver, ParentType, ContextType>; 230 | __isTypeOf?: IsTypeOfResolverFn; 231 | }; 232 | export declare type QueryResolvers = { 233 | gateway?: Resolver, ParentType, ContextType, RequireFields>; 234 | service?: Resolver, ParentType, ContextType, RequireFields>; 235 | }; 236 | export declare type MutationResolvers = { 237 | createGateway?: Resolver>; 238 | deleteGateway?: Resolver>; 239 | createService?: Resolver>; 240 | deleteService?: Resolver>; 241 | addServiceToGateway?: Resolver>; 242 | removeServiceFromGateway?: Resolver>; 243 | publishServiceSchema?: Resolver>; 244 | }; 245 | export declare type SubscriptionResolvers = { 246 | gatewayVersionUpdated?: SubscriptionResolver>; 247 | }; 248 | export declare type Resolvers = { 249 | Service?: ServiceResolvers; 250 | DateTime?: GraphQLScalarType; 251 | ServiceSchema?: ServiceSchemaResolvers; 252 | GatewayVersion?: GatewayVersionResolvers; 253 | Gateway?: GatewayResolvers; 254 | Query?: QueryResolvers; 255 | Mutation?: MutationResolvers; 256 | Subscription?: SubscriptionResolvers; 257 | }; 258 | export declare type IResolvers = Resolvers; 259 | export declare type GetGatewayQueryVariables = Exact<{ 260 | id: Scalars["ID"]; 261 | }>; 262 | export declare type GetGatewayQuery = { 263 | __typename?: "Query"; 264 | } & { 265 | gateway?: Maybe<{ 266 | __typename?: "Gateway"; 267 | } & Pick & { 268 | currentVersion?: Maybe<{ 269 | __typename?: "GatewayVersion"; 270 | } & Pick & { 271 | serviceSchemas: Array<{ 272 | __typename?: "ServiceSchema"; 273 | } & Pick & { 274 | service: { 275 | __typename?: "Service"; 276 | } & Pick; 277 | }>; 278 | }>; 279 | }>; 280 | }; 281 | export declare type PublishServiceSchemaMutationVariables = Exact<{ 282 | input: ServiceSchemaInput; 283 | }>; 284 | export declare type PublishServiceSchemaMutation = { 285 | __typename?: "Mutation"; 286 | } & { 287 | publishServiceSchema: { 288 | __typename?: "ServiceSchema"; 289 | } & Pick; 290 | }; 291 | export declare const GetGatewayDocument: any; 292 | export declare const PublishServiceSchemaDocument: any; 293 | export declare type SdkFunctionWrapper = (action: () => Promise) => Promise; 294 | export declare function getSdk(client: GraphQLClient, withWrapper?: SdkFunctionWrapper): { 295 | getGateway(variables: GetGatewayQueryVariables): Promise; 296 | publishServiceSchema(variables: PublishServiceSchemaMutationVariables): Promise; 297 | }; 298 | export declare type Sdk = ReturnType; 299 | -------------------------------------------------------------------------------- /lib/graph-manager-sdk.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.getSdk = exports.PublishServiceSchemaDocument = exports.GetGatewayDocument = exports.GatewayVersionStatus = void 0; 4 | const graphql_tag_1 = require("graphql-tag"); 5 | const graphql_1 = require("graphql"); 6 | var GatewayVersionStatus; 7 | (function (GatewayVersionStatus) { 8 | GatewayVersionStatus["Pending"] = "PENDING"; 9 | GatewayVersionStatus["Valid"] = "VALID"; 10 | GatewayVersionStatus["Invalid"] = "INVALID"; 11 | })(GatewayVersionStatus = exports.GatewayVersionStatus || (exports.GatewayVersionStatus = {})); 12 | exports.GetGatewayDocument = graphql_tag_1.default ` 13 | query getGateway($id: ID!) { 14 | gateway(id: $id) { 15 | id 16 | name 17 | currentVersion { 18 | id 19 | status 20 | validationError 21 | serviceSchemas { 22 | id 23 | version 24 | typeDefs 25 | service { 26 | name 27 | url 28 | } 29 | } 30 | } 31 | createdAt 32 | } 33 | } 34 | `; 35 | exports.PublishServiceSchemaDocument = graphql_tag_1.default ` 36 | mutation publishServiceSchema($input: ServiceSchemaInput!) { 37 | publishServiceSchema(input: $input) { 38 | id 39 | version 40 | typeDefs 41 | } 42 | } 43 | `; 44 | const defaultWrapper = (sdkFunction) => sdkFunction(); 45 | function getSdk(client, withWrapper = defaultWrapper) { 46 | return { 47 | getGateway(variables) { 48 | return withWrapper(() => client.request(graphql_1.print(exports.GetGatewayDocument), variables)); 49 | }, 50 | publishServiceSchema(variables) { 51 | return withWrapper(() => client.request(graphql_1.print(exports.PublishServiceSchemaDocument), variables)); 52 | }, 53 | }; 54 | } 55 | exports.getSdk = getSdk; 56 | //# sourceMappingURL=graph-manager-sdk.js.map -------------------------------------------------------------------------------- /lib/graph-manager-sdk.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"graph-manager-sdk.js","sourceRoot":"","sources":["../src/graph-manager-sdk.ts"],"names":[],"mappings":";;;AAOA,6CAA8B;AAC9B,qCAAgC;AAkDhC,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,2CAAmB,CAAA;AACrB,CAAC,EAJW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAI/B;AA4dY,QAAA,kBAAkB,GAAG,qBAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;CAsBpC,CAAC;AACW,QAAA,4BAA4B,GAAG,qBAAG,CAAA;;;;;;;;CAQ9C,CAAC;AAIF,MAAM,cAAc,GAAuB,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;AAC1E,SAAgB,MAAM,CACpB,MAAqB,EACrB,cAAkC,cAAc;IAEhD,OAAO;QACL,UAAU,CAAC,SAAmC;YAC5C,OAAO,WAAW,CAAC,GAAG,EAAE,CACtB,MAAM,CAAC,OAAO,CAAkB,eAAK,CAAC,0BAAkB,CAAC,EAAE,SAAS,CAAC,CACtE,CAAC;QACJ,CAAC;QACD,oBAAoB,CAClB,SAAgD;YAEhD,OAAO,WAAW,CAAC,GAAG,EAAE,CACtB,MAAM,CAAC,OAAO,CACZ,eAAK,CAAC,oCAA4B,CAAC,EACnC,SAAS,CACV,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AArBD,wBAqBC"} -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | OWNER=graphql 2 | IMAGE_NAME=gateway 3 | QNAME=$(OWNER)/$(IMAGE_NAME) 4 | 5 | TAG=$(QNAME):`echo $(TRAVIS_BRANCH) | sed 's/master/latest/;s/develop/unstable/' | sed 's/\//-/'` 6 | 7 | lint: 8 | docker run -it --rm -v "$(PWD)/Dockerfile:/Dockerfile:ro" redcoolbeans/dockerlint 9 | 10 | build: 11 | docker build -t $(TAG) . 12 | 13 | login: 14 | @docker login -u "$(DOCKER_USER)" -p "$(DOCKER_PASS)" 15 | push: login 16 | docker push $(TAG) 17 | 18 | build-lambda: 19 | docker run --rm -v "$PWD":/var/task lambci/lambda:build-nodejs10.x rm -rf node_modules && npm i && zip -9yr lambda.zip . 20 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@apollo/federation": { 6 | "version": "0.11.0", 7 | "resolved": "https://registry.npmjs.org/@apollo/federation/-/federation-0.11.0.tgz", 8 | "integrity": "sha512-kzhnNl+G9G18R3tSkZ9kZKvDZq0Pq1X9WtbOLC+K2GfTvYLTIE5BG/21LuPZb9gO7W1/Xf1iquvMMGZdpILwRw==", 9 | "requires": { 10 | "apollo-graphql": "^0.3.4", 11 | "apollo-server-env": "^2.4.3", 12 | "core-js": "^3.4.0", 13 | "lodash.xorby": "^4.7.0" 14 | }, 15 | "dependencies": { 16 | "apollo-graphql": { 17 | "version": "0.3.4", 18 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.3.4.tgz", 19 | "integrity": "sha512-w+Az1qxePH4oQ8jvbhQBl5iEVvqcqynmU++x/M7MM5xqN1C7m1kyIzpN17gybXlTJXY4Oxej2WNURC2/hwpfYw==", 20 | "requires": { 21 | "apollo-env": "^0.5.1", 22 | "lodash.sortby": "^4.7.0" 23 | } 24 | }, 25 | "apollo-server-env": { 26 | "version": "2.4.3", 27 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.3.tgz", 28 | "integrity": "sha512-23R5Xo9OMYX0iyTu2/qT0EUb+AULCBriA9w8HDfMoChB8M+lFClqUkYtaTTHDfp6eoARLW8kDBhPOBavsvKAjA==", 29 | "requires": { 30 | "node-fetch": "^2.1.2", 31 | "util.promisify": "^1.0.0" 32 | } 33 | }, 34 | "core-js": { 35 | "version": "3.4.1", 36 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.1.tgz", 37 | "integrity": "sha512-KX/dnuY/J8FtEwbnrzmAjUYgLqtk+cxM86hfG60LGiW3MmltIc2yAmDgBgEkfm0blZhUrdr1Zd84J2Y14mLxzg==" 38 | } 39 | } 40 | }, 41 | "@apollo/gateway": { 42 | "version": "0.11.0", 43 | "resolved": "https://registry.npmjs.org/@apollo/gateway/-/gateway-0.11.0.tgz", 44 | "integrity": "sha512-aTsn3yOoEcejrTTX8mF3EBjh2BB7qDyMG4AEE90pxXsDepKcgTXft7sBtqM/aCqa7zjvuQu2K11HB7C86klCpg==", 45 | "requires": { 46 | "@apollo/federation": "^0.11.0", 47 | "apollo-engine-reporting-protobuf": "^0.4.1", 48 | "apollo-env": "^0.5.1", 49 | "apollo-graphql": "^0.3.4", 50 | "apollo-server-caching": "^0.5.0", 51 | "apollo-server-core": "^2.9.9", 52 | "apollo-server-env": "^2.4.3", 53 | "apollo-server-types": "^0.2.5", 54 | "graphql-extensions": "^0.10.4", 55 | "loglevel": "^1.6.1", 56 | "loglevel-debug": "^0.0.1", 57 | "pretty-format": "^24.7.0" 58 | }, 59 | "dependencies": { 60 | "apollo-cache-control": { 61 | "version": "0.8.5", 62 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.5.tgz", 63 | "integrity": "sha512-2yQ1vKgJQ54SGkoQS/ZLZrDX3La6cluAYYdruFYJMJtL4zQrSdeOCy11CQliCMYEd6eKNyE70Rpln51QswW2Og==", 64 | "requires": { 65 | "apollo-server-env": "^2.4.3", 66 | "graphql-extensions": "^0.10.4" 67 | } 68 | }, 69 | "apollo-datasource": { 70 | "version": "0.6.3", 71 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.6.3.tgz", 72 | "integrity": "sha512-gRYyFVpJgHE2hhS+VxMeOerxXQ/QYxWG7T6QddfugJWYAG9DRCl65e2b7txcGq2NP3r+O1iCm4GNwhRBDJbd8A==", 73 | "requires": { 74 | "apollo-server-caching": "^0.5.0", 75 | "apollo-server-env": "^2.4.3" 76 | } 77 | }, 78 | "apollo-engine-reporting": { 79 | "version": "1.4.7", 80 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.7.tgz", 81 | "integrity": "sha512-qsKDz9VkoctFhojM3Nj3nvRBO98t8TS2uTgtiIjUGs3Hln2poKMP6fIQ37Nm2Q2B3JJst76HQtpPwXmRJd1ZUg==", 82 | "requires": { 83 | "apollo-engine-reporting-protobuf": "^0.4.1", 84 | "apollo-graphql": "^0.3.4", 85 | "apollo-server-caching": "^0.5.0", 86 | "apollo-server-env": "^2.4.3", 87 | "apollo-server-types": "^0.2.5", 88 | "async-retry": "^1.2.1", 89 | "graphql-extensions": "^0.10.4" 90 | } 91 | }, 92 | "apollo-engine-reporting-protobuf": { 93 | "version": "0.4.1", 94 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.1.tgz", 95 | "integrity": "sha512-d7vFFZ2oUrvGaN0Hpet8joe2ZG0X0lIGilN+SwgVP38dJnOuadjsaYMyrD9JudGQJg0bJA5wVQfYzcCVy0slrw==", 96 | "requires": { 97 | "protobufjs": "^6.8.6" 98 | } 99 | }, 100 | "apollo-graphql": { 101 | "version": "0.3.4", 102 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.3.4.tgz", 103 | "integrity": "sha512-w+Az1qxePH4oQ8jvbhQBl5iEVvqcqynmU++x/M7MM5xqN1C7m1kyIzpN17gybXlTJXY4Oxej2WNURC2/hwpfYw==", 104 | "requires": { 105 | "apollo-env": "^0.5.1", 106 | "lodash.sortby": "^4.7.0" 107 | } 108 | }, 109 | "apollo-server-core": { 110 | "version": "2.9.9", 111 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.9.tgz", 112 | "integrity": "sha512-JxtYDasqeem5qUwPrCVh2IsBOgSQF4MKrRgy8dpxd+ymWfaaVelCUows1VE8vghgRxqDExnM9ibOxcZeI6mO6g==", 113 | "requires": { 114 | "@apollographql/apollo-tools": "^0.4.0", 115 | "@apollographql/graphql-playground-html": "1.6.24", 116 | "@types/graphql-upload": "^8.0.0", 117 | "@types/ws": "^6.0.0", 118 | "apollo-cache-control": "^0.8.5", 119 | "apollo-datasource": "^0.6.3", 120 | "apollo-engine-reporting": "^1.4.7", 121 | "apollo-server-caching": "^0.5.0", 122 | "apollo-server-env": "^2.4.3", 123 | "apollo-server-errors": "^2.3.4", 124 | "apollo-server-plugin-base": "^0.6.5", 125 | "apollo-server-types": "^0.2.5", 126 | "apollo-tracing": "^0.8.5", 127 | "fast-json-stable-stringify": "^2.0.0", 128 | "graphql-extensions": "^0.10.4", 129 | "graphql-tag": "^2.9.2", 130 | "graphql-tools": "^4.0.0", 131 | "graphql-upload": "^8.0.2", 132 | "sha.js": "^2.4.11", 133 | "subscriptions-transport-ws": "^0.9.11", 134 | "ws": "^6.0.0" 135 | } 136 | }, 137 | "apollo-server-env": { 138 | "version": "2.4.3", 139 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.3.tgz", 140 | "integrity": "sha512-23R5Xo9OMYX0iyTu2/qT0EUb+AULCBriA9w8HDfMoChB8M+lFClqUkYtaTTHDfp6eoARLW8kDBhPOBavsvKAjA==", 141 | "requires": { 142 | "node-fetch": "^2.1.2", 143 | "util.promisify": "^1.0.0" 144 | } 145 | }, 146 | "apollo-server-errors": { 147 | "version": "2.3.4", 148 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.4.tgz", 149 | "integrity": "sha512-Y0PKQvkrb2Kd18d1NPlHdSqmlr8TgqJ7JQcNIfhNDgdb45CnqZlxL1abuIRhr8tiw8OhVOcFxz2KyglBi8TKdA==" 150 | }, 151 | "apollo-server-plugin-base": { 152 | "version": "0.6.5", 153 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.5.tgz", 154 | "integrity": "sha512-z2ve7HEPWmZI3EzL0iiY9qyt1i0hitT+afN5PzssCw594LB6DfUQWsI14UW+W+gcw8hvl8VQUpXByfUntAx5vw==", 155 | "requires": { 156 | "apollo-server-types": "^0.2.5" 157 | } 158 | }, 159 | "apollo-server-types": { 160 | "version": "0.2.5", 161 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.5.tgz", 162 | "integrity": "sha512-6iJQsPh59FWu4K7ABrVmpnQVgeK8Ockx8BcawBh+saFYWTlVczwcLyGSZPeV1tPSKwFwKZutyEslrYSafcarXQ==", 163 | "requires": { 164 | "apollo-engine-reporting-protobuf": "^0.4.1", 165 | "apollo-server-caching": "^0.5.0", 166 | "apollo-server-env": "^2.4.3" 167 | } 168 | }, 169 | "apollo-tracing": { 170 | "version": "0.8.5", 171 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.5.tgz", 172 | "integrity": "sha512-lZn10/GRBZUlMxVYLghLMFsGcLN0jTYDd98qZfBtxw+wEWUx+PKkZdljDT+XNoOm/kDvEutFGmi5tSLhArIzWQ==", 173 | "requires": { 174 | "apollo-server-env": "^2.4.3", 175 | "graphql-extensions": "^0.10.4" 176 | } 177 | }, 178 | "graphql-extensions": { 179 | "version": "0.10.4", 180 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.4.tgz", 181 | "integrity": "sha512-lE6MroluEYocbR/ICwccv39w+Pz4cBPadJ11z1rJkbZv5wstISEganbDOwl9qN21rcZGiWzh7QUNxUiFUXXEDw==", 182 | "requires": { 183 | "@apollographql/apollo-tools": "^0.4.0", 184 | "apollo-server-env": "^2.4.3", 185 | "apollo-server-types": "^0.2.5" 186 | } 187 | } 188 | } 189 | }, 190 | "@apollo/protobufjs": { 191 | "version": "1.0.4", 192 | "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.4.tgz", 193 | "integrity": "sha512-EE3zx+/D/wur/JiLp6VCiw1iYdyy1lCJMf8CGPkLeDt5QJrN4N8tKFx33Ah4V30AUQzMk7Uz4IXKZ1LOj124gA==", 194 | "requires": { 195 | "@protobufjs/aspromise": "^1.1.2", 196 | "@protobufjs/base64": "^1.1.2", 197 | "@protobufjs/codegen": "^2.0.4", 198 | "@protobufjs/eventemitter": "^1.1.0", 199 | "@protobufjs/fetch": "^1.1.0", 200 | "@protobufjs/float": "^1.0.2", 201 | "@protobufjs/inquire": "^1.1.0", 202 | "@protobufjs/path": "^1.1.2", 203 | "@protobufjs/pool": "^1.1.0", 204 | "@protobufjs/utf8": "^1.1.0", 205 | "@types/long": "^4.0.0", 206 | "@types/node": "^10.1.0", 207 | "long": "^4.0.0" 208 | } 209 | }, 210 | "@apollographql/apollo-tools": { 211 | "version": "0.4.0", 212 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.0.tgz", 213 | "integrity": "sha512-7wEO+S+zgz/wVe3ilFQqICufRBYYDSNUkd1V03JWvXuSydbYq2SM5EgvWmFF+04iadt+aQ0XCCsRzCzRPQODfQ==", 214 | "requires": { 215 | "apollo-env": "0.5.1" 216 | } 217 | }, 218 | "@apollographql/graphql-playground-html": { 219 | "version": "1.6.24", 220 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz", 221 | "integrity": "sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ==" 222 | }, 223 | "@jest/types": { 224 | "version": "24.9.0", 225 | "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", 226 | "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", 227 | "requires": { 228 | "@types/istanbul-lib-coverage": "^2.0.0", 229 | "@types/istanbul-reports": "^1.1.1", 230 | "@types/yargs": "^13.0.0" 231 | } 232 | }, 233 | "@protobufjs/aspromise": { 234 | "version": "1.1.2", 235 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 236 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 237 | }, 238 | "@protobufjs/base64": { 239 | "version": "1.1.2", 240 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 241 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 242 | }, 243 | "@protobufjs/codegen": { 244 | "version": "2.0.4", 245 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 246 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 247 | }, 248 | "@protobufjs/eventemitter": { 249 | "version": "1.1.0", 250 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 251 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 252 | }, 253 | "@protobufjs/fetch": { 254 | "version": "1.1.0", 255 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 256 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 257 | "requires": { 258 | "@protobufjs/aspromise": "^1.1.1", 259 | "@protobufjs/inquire": "^1.1.0" 260 | } 261 | }, 262 | "@protobufjs/float": { 263 | "version": "1.0.2", 264 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 265 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 266 | }, 267 | "@protobufjs/inquire": { 268 | "version": "1.1.0", 269 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 270 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 271 | }, 272 | "@protobufjs/path": { 273 | "version": "1.1.2", 274 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 275 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 276 | }, 277 | "@protobufjs/pool": { 278 | "version": "1.1.0", 279 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 280 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 281 | }, 282 | "@protobufjs/utf8": { 283 | "version": "1.1.0", 284 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 285 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 286 | }, 287 | "@types/accepts": { 288 | "version": "1.3.5", 289 | "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", 290 | "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", 291 | "requires": { 292 | "@types/node": "*" 293 | } 294 | }, 295 | "@types/body-parser": { 296 | "version": "1.17.0", 297 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", 298 | "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", 299 | "requires": { 300 | "@types/connect": "*", 301 | "@types/node": "*" 302 | } 303 | }, 304 | "@types/connect": { 305 | "version": "3.4.32", 306 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", 307 | "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", 308 | "requires": { 309 | "@types/node": "*" 310 | } 311 | }, 312 | "@types/continuation-local-storage": { 313 | "version": "3.2.2", 314 | "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.2.tgz", 315 | "integrity": "sha512-aItm+aYPJ4rT1cHmAxO+OdWjSviQ9iB5UKb5f0Uvgln0N4hS2mcDodHtPiqicYBXViUYhqyBjhA5uyOcT+S34Q==", 316 | "requires": { 317 | "@types/node": "*" 318 | } 319 | }, 320 | "@types/cookies": { 321 | "version": "0.7.2", 322 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.2.tgz", 323 | "integrity": "sha512-jnihWgshWystcJKrz8C9hV+Ot9lqOUyAh2RF+o3BEo6K6AS2l4zYCb9GYaBuZ3C6Il59uIGqpE3HvCun4KKeJA==", 324 | "requires": { 325 | "@types/connect": "*", 326 | "@types/express": "*", 327 | "@types/keygrip": "*", 328 | "@types/node": "*" 329 | } 330 | }, 331 | "@types/cors": { 332 | "version": "2.8.6", 333 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz", 334 | "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==", 335 | "requires": { 336 | "@types/express": "*" 337 | } 338 | }, 339 | "@types/express": { 340 | "version": "4.17.0", 341 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz", 342 | "integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==", 343 | "requires": { 344 | "@types/body-parser": "*", 345 | "@types/express-serve-static-core": "*", 346 | "@types/serve-static": "*" 347 | } 348 | }, 349 | "@types/express-serve-static-core": { 350 | "version": "4.16.7", 351 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz", 352 | "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==", 353 | "requires": { 354 | "@types/node": "*", 355 | "@types/range-parser": "*" 356 | } 357 | }, 358 | "@types/fs-capacitor": { 359 | "version": "2.0.0", 360 | "resolved": "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz", 361 | "integrity": "sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==", 362 | "requires": { 363 | "@types/node": "*" 364 | } 365 | }, 366 | "@types/graphql": { 367 | "version": "14.2.3", 368 | "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.2.3.tgz", 369 | "integrity": "sha512-UoCovaxbJIxagCvVfalfK7YaNhmxj3BQFRQ2RHQKLiu+9wNXhJnlbspsLHt/YQM99IaLUUFJNzCwzc6W0ypMeQ==" 370 | }, 371 | "@types/graphql-upload": { 372 | "version": "8.0.1", 373 | "resolved": "https://registry.npmjs.org/@types/graphql-upload/-/graphql-upload-8.0.1.tgz", 374 | "integrity": "sha512-xiOwkegzlHXRtcVMDrIjDQ4XbKLzUcJNyW0RKfNjEbiC0iBk1FwSmaiC/8ObXwQaCgE4PfUle3MT12Me8xIVVA==", 375 | "requires": { 376 | "@types/express": "*", 377 | "@types/fs-capacitor": "*", 378 | "@types/graphql": "*", 379 | "@types/koa": "*" 380 | } 381 | }, 382 | "@types/http-assert": { 383 | "version": "1.5.0", 384 | "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.0.tgz", 385 | "integrity": "sha512-8CBLG8RmxSvoY07FE6M/QpvJ7J5KzeKqF8eWN7Dq6Ks+lBTQae8Roc2G81lUu2Kw5Ju1gymOuvgyUsussbjAaA==" 386 | }, 387 | "@types/istanbul-lib-coverage": { 388 | "version": "2.0.1", 389 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", 390 | "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" 391 | }, 392 | "@types/istanbul-lib-report": { 393 | "version": "1.1.1", 394 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", 395 | "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", 396 | "requires": { 397 | "@types/istanbul-lib-coverage": "*" 398 | } 399 | }, 400 | "@types/istanbul-reports": { 401 | "version": "1.1.1", 402 | "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", 403 | "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", 404 | "requires": { 405 | "@types/istanbul-lib-coverage": "*", 406 | "@types/istanbul-lib-report": "*" 407 | } 408 | }, 409 | "@types/keygrip": { 410 | "version": "1.0.1", 411 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.1.tgz", 412 | "integrity": "sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg=" 413 | }, 414 | "@types/koa": { 415 | "version": "2.0.49", 416 | "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.0.49.tgz", 417 | "integrity": "sha512-WQWpCH8O4Dslk8IcXfazff40aM1jXX7BQRbADIj/fKozVPu76P/wQE4sRe2SCWMn8yNkOcare2MkDrnZqLMkPQ==", 418 | "requires": { 419 | "@types/accepts": "*", 420 | "@types/cookies": "*", 421 | "@types/http-assert": "*", 422 | "@types/keygrip": "*", 423 | "@types/koa-compose": "*", 424 | "@types/node": "*" 425 | } 426 | }, 427 | "@types/koa-compose": { 428 | "version": "3.2.4", 429 | "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.4.tgz", 430 | "integrity": "sha512-ioou0rxkuWL+yBQYsHUQAzRTfVxAg8Y2VfMftU+Y3RA03/MzuFL0x/M2sXXj3PkfnENbHsjeHR1aMdezLYpTeA==", 431 | "requires": { 432 | "@types/koa": "*" 433 | } 434 | }, 435 | "@types/long": { 436 | "version": "4.0.0", 437 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", 438 | "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" 439 | }, 440 | "@types/mime": { 441 | "version": "2.0.1", 442 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", 443 | "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" 444 | }, 445 | "@types/mysql": { 446 | "version": "2.15.8", 447 | "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.8.tgz", 448 | "integrity": "sha512-l0TUdg6KDEaLO75/yjdjksobJDRWv8iZlpRfv/WW1lQZCQDKdTDnKCkeH10oapzP/JTuKiTy6Cvq/sm/0GgcUw==", 449 | "requires": { 450 | "@types/node": "*" 451 | } 452 | }, 453 | "@types/node": { 454 | "version": "10.14.15", 455 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.15.tgz", 456 | "integrity": "sha512-CBR5avlLcu0YCILJiDIXeU2pTw7UK/NIxfC63m7d7CVamho1qDEzXKkOtEauQRPMy6MI8mLozth+JJkas7HY6g==" 457 | }, 458 | "@types/node-fetch": { 459 | "version": "2.5.7", 460 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", 461 | "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", 462 | "requires": { 463 | "@types/node": "*", 464 | "form-data": "^3.0.0" 465 | } 466 | }, 467 | "@types/pg": { 468 | "version": "7.14.1", 469 | "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz", 470 | "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==", 471 | "requires": { 472 | "@types/node": "*", 473 | "@types/pg-types": "*" 474 | } 475 | }, 476 | "@types/pg-types": { 477 | "version": "1.11.5", 478 | "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz", 479 | "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==" 480 | }, 481 | "@types/qs": { 482 | "version": "6.9.3", 483 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz", 484 | "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==" 485 | }, 486 | "@types/range-parser": { 487 | "version": "1.2.3", 488 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 489 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" 490 | }, 491 | "@types/serve-static": { 492 | "version": "1.13.2", 493 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", 494 | "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", 495 | "requires": { 496 | "@types/express-serve-static-core": "*", 497 | "@types/mime": "*" 498 | } 499 | }, 500 | "@types/ws": { 501 | "version": "6.0.2", 502 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.2.tgz", 503 | "integrity": "sha512-22XiR1ox9LftTaAtn/c5JCninwc7moaqbkJfaDUb7PkaUitcf5vbTZHdq9dxSMviCm9C3W85rzB8e6yNR70apQ==", 504 | "requires": { 505 | "@types/node": "*" 506 | } 507 | }, 508 | "@types/yargs": { 509 | "version": "13.0.3", 510 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", 511 | "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", 512 | "requires": { 513 | "@types/yargs-parser": "*" 514 | } 515 | }, 516 | "@types/yargs-parser": { 517 | "version": "13.1.0", 518 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", 519 | "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" 520 | }, 521 | "@types/zen-observable": { 522 | "version": "0.8.1", 523 | "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.1.tgz", 524 | "integrity": "sha512-wmk0xQI6Yy7Fs/il4EpOcflG4uonUpYGqvZARESLc2oy4u69fkatFLbJOeW4Q6awO15P4rduAe6xkwHevpXcUQ==" 525 | }, 526 | "@wry/equality": { 527 | "version": "0.1.9", 528 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.9.tgz", 529 | "integrity": "sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ==", 530 | "requires": { 531 | "tslib": "^1.9.3" 532 | } 533 | }, 534 | "accepts": { 535 | "version": "1.3.7", 536 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 537 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 538 | "requires": { 539 | "mime-types": "~2.1.24", 540 | "negotiator": "0.6.2" 541 | } 542 | }, 543 | "ansi-regex": { 544 | "version": "4.1.0", 545 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 546 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 547 | }, 548 | "ansi-styles": { 549 | "version": "3.2.1", 550 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 551 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 552 | "requires": { 553 | "color-convert": "^1.9.0" 554 | } 555 | }, 556 | "apollo-cache": { 557 | "version": "1.3.5", 558 | "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.5.tgz", 559 | "integrity": "sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA==", 560 | "requires": { 561 | "apollo-utilities": "^1.3.4", 562 | "tslib": "^1.10.0" 563 | }, 564 | "dependencies": { 565 | "apollo-utilities": { 566 | "version": "1.3.4", 567 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", 568 | "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", 569 | "requires": { 570 | "@wry/equality": "^0.1.2", 571 | "fast-json-stable-stringify": "^2.0.0", 572 | "ts-invariant": "^0.4.0", 573 | "tslib": "^1.10.0" 574 | } 575 | } 576 | } 577 | }, 578 | "apollo-cache-control": { 579 | "version": "0.11.0", 580 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.0.tgz", 581 | "integrity": "sha512-dmRnQ9AXGw2SHahVGLzB/p4UW/taFBAJxifxubp8hqY5p9qdlSu4MPRq8zvV2ULMYf50rBtZyC4C+dZLqmHuHQ==", 582 | "requires": { 583 | "apollo-server-env": "^2.4.4", 584 | "apollo-server-plugin-base": "^0.9.0" 585 | } 586 | }, 587 | "apollo-client": { 588 | "version": "2.6.10", 589 | "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.10.tgz", 590 | "integrity": "sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA==", 591 | "requires": { 592 | "@types/zen-observable": "^0.8.0", 593 | "apollo-cache": "1.3.5", 594 | "apollo-link": "^1.0.0", 595 | "apollo-utilities": "1.3.4", 596 | "symbol-observable": "^1.0.2", 597 | "ts-invariant": "^0.4.0", 598 | "tslib": "^1.10.0", 599 | "zen-observable": "^0.8.0" 600 | }, 601 | "dependencies": { 602 | "apollo-utilities": { 603 | "version": "1.3.4", 604 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", 605 | "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", 606 | "requires": { 607 | "@wry/equality": "^0.1.2", 608 | "fast-json-stable-stringify": "^2.0.0", 609 | "ts-invariant": "^0.4.0", 610 | "tslib": "^1.10.0" 611 | } 612 | } 613 | } 614 | }, 615 | "apollo-datasource": { 616 | "version": "0.7.1", 617 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.1.tgz", 618 | "integrity": "sha512-h++/jQAY7GA+4TBM+7ezvctFmmGNLrAPf51KsagZj+NkT9qvxp585rdsuatynVbSl59toPK2EuVmc6ilmQHf+g==", 619 | "requires": { 620 | "apollo-server-caching": "^0.5.1", 621 | "apollo-server-env": "^2.4.4" 622 | }, 623 | "dependencies": { 624 | "apollo-server-caching": { 625 | "version": "0.5.1", 626 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz", 627 | "integrity": "sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw==", 628 | "requires": { 629 | "lru-cache": "^5.0.0" 630 | } 631 | } 632 | } 633 | }, 634 | "apollo-engine-reporting": { 635 | "version": "2.0.0", 636 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.0.0.tgz", 637 | "integrity": "sha512-FvNwORsh3nxEfvQqd2xbd468a0q/R3kYar/Bk6YQdBX5qwqUhqmOcOSxLFk8Zb77HpwHij5CPpPWJb53TU1zcA==", 638 | "requires": { 639 | "apollo-engine-reporting-protobuf": "^0.5.1", 640 | "apollo-graphql": "^0.4.0", 641 | "apollo-server-caching": "^0.5.1", 642 | "apollo-server-env": "^2.4.4", 643 | "apollo-server-errors": "^2.4.1", 644 | "apollo-server-plugin-base": "^0.9.0", 645 | "apollo-server-types": "^0.5.0", 646 | "async-retry": "^1.2.1", 647 | "uuid": "^8.0.0" 648 | }, 649 | "dependencies": { 650 | "apollo-server-caching": { 651 | "version": "0.5.1", 652 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz", 653 | "integrity": "sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw==", 654 | "requires": { 655 | "lru-cache": "^5.0.0" 656 | } 657 | }, 658 | "uuid": { 659 | "version": "8.1.0", 660 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz", 661 | "integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==" 662 | } 663 | } 664 | }, 665 | "apollo-engine-reporting-protobuf": { 666 | "version": "0.5.1", 667 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.5.1.tgz", 668 | "integrity": "sha512-TSfr9iAaInV8dhXkesdcmqsthRkVcJkzznmiM+1Ob/GScK7r6hBYCjVDt2613EHAg9SUzTOltIKlGD+N+GJRUw==", 669 | "requires": { 670 | "@apollo/protobufjs": "^1.0.3" 671 | } 672 | }, 673 | "apollo-env": { 674 | "version": "0.5.1", 675 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.5.1.tgz", 676 | "integrity": "sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw==", 677 | "requires": { 678 | "core-js": "^3.0.1", 679 | "node-fetch": "^2.2.0", 680 | "sha.js": "^2.4.11" 681 | } 682 | }, 683 | "apollo-gateway-aws-lambda": { 684 | "version": "0.2.1", 685 | "resolved": "https://registry.npmjs.org/apollo-gateway-aws-lambda/-/apollo-gateway-aws-lambda-0.2.1.tgz", 686 | "integrity": "sha512-wogYe/kRomaUgdxn/Cdw3ChDGLjJQRBDxG7rDjR0feg/HGpKGVV5f8yew5c3ufQveeUAxE94gLMOISbX4LVIyQ==", 687 | "requires": { 688 | "aws-xray-sdk": "^2.5.0" 689 | } 690 | }, 691 | "apollo-graphql": { 692 | "version": "0.4.4", 693 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.4.4.tgz", 694 | "integrity": "sha512-i012iRKT5nfsOaNMx4MTwHw2jrlyaF1zikpejxsGHsKIf3OngGvGh3pyw20bEmwj413OrNQpRxvvIz5A7W/8xw==", 695 | "requires": { 696 | "apollo-env": "^0.6.5", 697 | "lodash.sortby": "^4.7.0" 698 | }, 699 | "dependencies": { 700 | "apollo-env": { 701 | "version": "0.6.5", 702 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.5.tgz", 703 | "integrity": "sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==", 704 | "requires": { 705 | "@types/node-fetch": "2.5.7", 706 | "core-js": "^3.0.1", 707 | "node-fetch": "^2.2.0", 708 | "sha.js": "^2.4.11" 709 | } 710 | } 711 | } 712 | }, 713 | "apollo-link": { 714 | "version": "1.2.14", 715 | "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", 716 | "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", 717 | "requires": { 718 | "apollo-utilities": "^1.3.0", 719 | "ts-invariant": "^0.4.0", 720 | "tslib": "^1.9.3", 721 | "zen-observable-ts": "^0.8.21" 722 | } 723 | }, 724 | "apollo-link-ws": { 725 | "version": "1.0.20", 726 | "resolved": "https://registry.npmjs.org/apollo-link-ws/-/apollo-link-ws-1.0.20.tgz", 727 | "integrity": "sha512-mjSFPlQxmoLArpHBeUb2Xj+2HDYeTaJqFGOqQ+I8NVJxgL9lJe84PDWcPah/yMLv3rB7QgBDSuZ0xoRFBPlySw==", 728 | "requires": { 729 | "apollo-link": "^1.2.14", 730 | "tslib": "^1.9.3" 731 | } 732 | }, 733 | "apollo-metrics": { 734 | "version": "1.0.1", 735 | "resolved": "https://registry.npmjs.org/apollo-metrics/-/apollo-metrics-1.0.1.tgz", 736 | "integrity": "sha512-fSrZqzIITkvVgseVmpB5s8jiQ3Vit5EzLY0BG+cv0rKw9GWOLeteJZlDAAwfv6dIvsVrCoH/W91FaaC1k3nbEQ==", 737 | "requires": { 738 | "apollo-server-plugin-base": "^0.6.8", 739 | "apollo-tracing": "^0.8.8" 740 | }, 741 | "dependencies": { 742 | "@apollographql/apollo-tools": { 743 | "version": "0.4.8", 744 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz", 745 | "integrity": "sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA==", 746 | "requires": { 747 | "apollo-env": "^0.6.5" 748 | } 749 | }, 750 | "apollo-engine-reporting-protobuf": { 751 | "version": "0.4.4", 752 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.4.tgz", 753 | "integrity": "sha512-SGrIkUR7Q/VjU8YG98xcvo340C4DaNUhg/TXOtGsMlfiJDzHwVau/Bv6zifAzBafp2lj0XND6Daj5kyT/eSI/w==", 754 | "requires": { 755 | "@apollo/protobufjs": "^1.0.3" 756 | } 757 | }, 758 | "apollo-env": { 759 | "version": "0.6.5", 760 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.5.tgz", 761 | "integrity": "sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==", 762 | "requires": { 763 | "@types/node-fetch": "2.5.7", 764 | "core-js": "^3.0.1", 765 | "node-fetch": "^2.2.0", 766 | "sha.js": "^2.4.11" 767 | } 768 | }, 769 | "apollo-server-caching": { 770 | "version": "0.5.2", 771 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.2.tgz", 772 | "integrity": "sha512-HUcP3TlgRsuGgeTOn8QMbkdx0hLPXyEJehZIPrcof0ATz7j7aTPA4at7gaiFHCo8gk07DaWYGB3PFgjboXRcWQ==", 773 | "requires": { 774 | "lru-cache": "^5.0.0" 775 | } 776 | }, 777 | "apollo-server-plugin-base": { 778 | "version": "0.6.10", 779 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.10.tgz", 780 | "integrity": "sha512-/xT7UT/tbCDIoTQ4lcEQsJ0ACh7h7QG0BDmeSlDXjwDuENRI50bQ2QoluCMPitZXGe+FCQfLhvzFgzbsZGT0IA==", 781 | "requires": { 782 | "apollo-server-types": "^0.2.10" 783 | } 784 | }, 785 | "apollo-server-types": { 786 | "version": "0.2.10", 787 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.10.tgz", 788 | "integrity": "sha512-ke9ViPEWfW+2XLe66CaKGVZdS7duSLbamSKSprmmeMBd8s6tmjf0FumUVxV7X4quxPZi0OPo8x0LoLU7GWsmaA==", 789 | "requires": { 790 | "apollo-engine-reporting-protobuf": "^0.4.4", 791 | "apollo-server-caching": "^0.5.1", 792 | "apollo-server-env": "^2.4.3" 793 | } 794 | }, 795 | "apollo-tracing": { 796 | "version": "0.8.11", 797 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.11.tgz", 798 | "integrity": "sha512-Z0wDZ5QOBmpGoajB74ZKGTM7GzG6rqZRzAph4kxud6axcyNqUDKiKZ3Eere+NSLwvvt8M3qnPW4UJSUy/wwOXg==", 799 | "requires": { 800 | "apollo-server-env": "^2.4.3", 801 | "graphql-extensions": "^0.10.10" 802 | } 803 | }, 804 | "graphql-extensions": { 805 | "version": "0.10.10", 806 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.10.tgz", 807 | "integrity": "sha512-pNb1DmUk6vsGtCjCRecpKoXadKNMyKxyLyE9IX65N9aKSmLL+AF7dJOOc4MWhdaAXlzxaDDhe54GpaOfoH7AOw==", 808 | "requires": { 809 | "@apollographql/apollo-tools": "^0.4.3", 810 | "apollo-server-env": "^2.4.3", 811 | "apollo-server-types": "^0.2.10" 812 | } 813 | } 814 | } 815 | }, 816 | "apollo-server": { 817 | "version": "2.14.2", 818 | "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.14.2.tgz", 819 | "integrity": "sha512-H+X3HprWGxV8DIhQyXzheMheKRxSlD9/lMuzIHyW/7VPspc7rX0xsHaFcTwQGcxLz18LhM+HtMBtvzi/KlRIbA==", 820 | "requires": { 821 | "apollo-server-core": "^2.14.2", 822 | "apollo-server-express": "^2.14.2", 823 | "express": "^4.0.0", 824 | "graphql-subscriptions": "^1.0.0", 825 | "graphql-tools": "^4.0.0" 826 | }, 827 | "dependencies": { 828 | "@types/body-parser": { 829 | "version": "1.19.0", 830 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", 831 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", 832 | "requires": { 833 | "@types/connect": "*", 834 | "@types/node": "*" 835 | } 836 | }, 837 | "@types/express": { 838 | "version": "4.17.4", 839 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.4.tgz", 840 | "integrity": "sha512-DO1L53rGqIDUEvOjJKmbMEQ5Z+BM2cIEPy/eV3En+s166Gz+FeuzRerxcab757u/U4v4XF4RYrZPmqKa+aY/2w==", 841 | "requires": { 842 | "@types/body-parser": "*", 843 | "@types/express-serve-static-core": "*", 844 | "@types/qs": "*", 845 | "@types/serve-static": "*" 846 | } 847 | }, 848 | "apollo-server-express": { 849 | "version": "2.14.2", 850 | "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.14.2.tgz", 851 | "integrity": "sha512-iYyZm0kQqkM561i9l0WC9HbJsGZJbHP9bhnWaa1Itd+yNBS2AJFp6mRR3hQacsWXUw7ewaKAracMIggvfSH5Aw==", 852 | "requires": { 853 | "@apollographql/graphql-playground-html": "1.6.24", 854 | "@types/accepts": "^1.3.5", 855 | "@types/body-parser": "1.19.0", 856 | "@types/cors": "^2.8.4", 857 | "@types/express": "4.17.4", 858 | "accepts": "^1.3.5", 859 | "apollo-server-core": "^2.14.2", 860 | "apollo-server-types": "^0.5.0", 861 | "body-parser": "^1.18.3", 862 | "cors": "^2.8.4", 863 | "express": "^4.17.1", 864 | "graphql-subscriptions": "^1.0.0", 865 | "graphql-tools": "^4.0.0", 866 | "parseurl": "^1.3.2", 867 | "subscriptions-transport-ws": "^0.9.16", 868 | "type-is": "^1.6.16" 869 | } 870 | } 871 | } 872 | }, 873 | "apollo-server-caching": { 874 | "version": "0.5.0", 875 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.0.tgz", 876 | "integrity": "sha512-l7ieNCGxUaUAVAAp600HjbUJxVaxjJygtPV0tPTe1Q3HkPy6LEWoY6mNHV7T268g1hxtPTxcdRu7WLsJrg7ufw==", 877 | "requires": { 878 | "lru-cache": "^5.0.0" 879 | } 880 | }, 881 | "apollo-server-core": { 882 | "version": "2.14.2", 883 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.14.2.tgz", 884 | "integrity": "sha512-8G6Aoz+k+ecuQco1KNLFbMrxhe/8uR4AOaOYEvT/N5m/6lrkPYzvBAxbpRIub5AxEwpBPcIrI452rR3PD9DItA==", 885 | "requires": { 886 | "@apollographql/apollo-tools": "^0.4.3", 887 | "@apollographql/graphql-playground-html": "1.6.24", 888 | "@types/graphql-upload": "^8.0.0", 889 | "@types/ws": "^7.0.0", 890 | "apollo-cache-control": "^0.11.0", 891 | "apollo-datasource": "^0.7.1", 892 | "apollo-engine-reporting": "^2.0.0", 893 | "apollo-server-caching": "^0.5.1", 894 | "apollo-server-env": "^2.4.4", 895 | "apollo-server-errors": "^2.4.1", 896 | "apollo-server-plugin-base": "^0.9.0", 897 | "apollo-server-types": "^0.5.0", 898 | "apollo-tracing": "^0.11.0", 899 | "fast-json-stable-stringify": "^2.0.0", 900 | "graphql-extensions": "^0.12.2", 901 | "graphql-tag": "^2.9.2", 902 | "graphql-tools": "^4.0.0", 903 | "graphql-upload": "^8.0.2", 904 | "loglevel": "^1.6.7", 905 | "sha.js": "^2.4.11", 906 | "subscriptions-transport-ws": "^0.9.11", 907 | "ws": "^6.0.0" 908 | }, 909 | "dependencies": { 910 | "@apollographql/apollo-tools": { 911 | "version": "0.4.8", 912 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz", 913 | "integrity": "sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA==", 914 | "requires": { 915 | "apollo-env": "^0.6.5" 916 | } 917 | }, 918 | "@types/ws": { 919 | "version": "7.2.5", 920 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.5.tgz", 921 | "integrity": "sha512-4UEih9BI1nBKii385G9id1oFrSkLcClbwtDfcYj8HJLQqZVAtb/42vXVrYvRWCcufNF/a+rZD3MxNwghA7UmCg==", 922 | "requires": { 923 | "@types/node": "*" 924 | } 925 | }, 926 | "apollo-env": { 927 | "version": "0.6.5", 928 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.5.tgz", 929 | "integrity": "sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==", 930 | "requires": { 931 | "@types/node-fetch": "2.5.7", 932 | "core-js": "^3.0.1", 933 | "node-fetch": "^2.2.0", 934 | "sha.js": "^2.4.11" 935 | } 936 | }, 937 | "apollo-server-caching": { 938 | "version": "0.5.1", 939 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz", 940 | "integrity": "sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw==", 941 | "requires": { 942 | "lru-cache": "^5.0.0" 943 | } 944 | }, 945 | "loglevel": { 946 | "version": "1.6.8", 947 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", 948 | "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" 949 | } 950 | } 951 | }, 952 | "apollo-server-env": { 953 | "version": "2.4.4", 954 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.4.tgz", 955 | "integrity": "sha512-c2oddDS3lwAl6QNCIKCLEzt/dF9M3/tjjYRVdxOVN20TidybI7rAbnT4QOzf4tORnGXtiznEAvr/Kc9ahhKADg==", 956 | "requires": { 957 | "node-fetch": "^2.1.2", 958 | "util.promisify": "^1.0.0" 959 | } 960 | }, 961 | "apollo-server-errors": { 962 | "version": "2.4.1", 963 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.4.1.tgz", 964 | "integrity": "sha512-7oEd6pUxqyWYUbQ9TA8tM0NU/3aGtXSEibo6+txUkuHe7QaxfZ2wHRp+pfT1LC1K3RXYjKj61/C2xEO19s3Kdg==" 965 | }, 966 | "apollo-server-express": { 967 | "version": "2.14.2", 968 | "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.14.2.tgz", 969 | "integrity": "sha512-iYyZm0kQqkM561i9l0WC9HbJsGZJbHP9bhnWaa1Itd+yNBS2AJFp6mRR3hQacsWXUw7ewaKAracMIggvfSH5Aw==", 970 | "requires": { 971 | "@apollographql/graphql-playground-html": "1.6.24", 972 | "@types/accepts": "^1.3.5", 973 | "@types/body-parser": "1.19.0", 974 | "@types/cors": "^2.8.4", 975 | "@types/express": "4.17.4", 976 | "accepts": "^1.3.5", 977 | "apollo-server-core": "^2.14.2", 978 | "apollo-server-types": "^0.5.0", 979 | "body-parser": "^1.18.3", 980 | "cors": "^2.8.4", 981 | "express": "^4.17.1", 982 | "graphql-subscriptions": "^1.0.0", 983 | "graphql-tools": "^4.0.0", 984 | "parseurl": "^1.3.2", 985 | "subscriptions-transport-ws": "^0.9.16", 986 | "type-is": "^1.6.16" 987 | }, 988 | "dependencies": { 989 | "@types/body-parser": { 990 | "version": "1.19.0", 991 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", 992 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", 993 | "requires": { 994 | "@types/connect": "*", 995 | "@types/node": "*" 996 | } 997 | }, 998 | "@types/express": { 999 | "version": "4.17.4", 1000 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.4.tgz", 1001 | "integrity": "sha512-DO1L53rGqIDUEvOjJKmbMEQ5Z+BM2cIEPy/eV3En+s166Gz+FeuzRerxcab757u/U4v4XF4RYrZPmqKa+aY/2w==", 1002 | "requires": { 1003 | "@types/body-parser": "*", 1004 | "@types/express-serve-static-core": "*", 1005 | "@types/qs": "*", 1006 | "@types/serve-static": "*" 1007 | } 1008 | } 1009 | } 1010 | }, 1011 | "apollo-server-plugin-base": { 1012 | "version": "0.9.0", 1013 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.9.0.tgz", 1014 | "integrity": "sha512-LWcPrsy2+xqwlNseh/QaGa/MPNopS8c4qGgh0g0cAn0lZBRrJ9Yab7dq+iQ6vdUBwIhUWYN6s9dwUWCZw2SL8g==", 1015 | "requires": { 1016 | "apollo-server-types": "^0.5.0" 1017 | } 1018 | }, 1019 | "apollo-server-types": { 1020 | "version": "0.5.0", 1021 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.5.0.tgz", 1022 | "integrity": "sha512-zhtsqqqfdeoJQAfc41Sy6WnnBVxKNgZ34BKXf/Q+kXmw7rbZ/B5SG3SJMvj1iFsbzZxILmWdUsE9aD20lEr0bg==", 1023 | "requires": { 1024 | "apollo-engine-reporting-protobuf": "^0.5.1", 1025 | "apollo-server-caching": "^0.5.1", 1026 | "apollo-server-env": "^2.4.4" 1027 | }, 1028 | "dependencies": { 1029 | "apollo-server-caching": { 1030 | "version": "0.5.1", 1031 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz", 1032 | "integrity": "sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw==", 1033 | "requires": { 1034 | "lru-cache": "^5.0.0" 1035 | } 1036 | } 1037 | } 1038 | }, 1039 | "apollo-tracing": { 1040 | "version": "0.11.0", 1041 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.11.0.tgz", 1042 | "integrity": "sha512-I9IFb/8lkBW8ZwOAi4LEojfT7dMfUSkpnV8LHQI8Rcj0HtzL9HObQ3woBmzyGHdGHLFuD/6/VHyFD67SesSrJg==", 1043 | "requires": { 1044 | "apollo-server-env": "^2.4.4", 1045 | "apollo-server-plugin-base": "^0.9.0" 1046 | } 1047 | }, 1048 | "apollo-utilities": { 1049 | "version": "1.3.2", 1050 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", 1051 | "integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==", 1052 | "requires": { 1053 | "@wry/equality": "^0.1.2", 1054 | "fast-json-stable-stringify": "^2.0.0", 1055 | "ts-invariant": "^0.4.0", 1056 | "tslib": "^1.9.3" 1057 | } 1058 | }, 1059 | "array-flatten": { 1060 | "version": "1.1.1", 1061 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1062 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 1063 | }, 1064 | "async": { 1065 | "version": "1.0.0", 1066 | "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", 1067 | "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" 1068 | }, 1069 | "async-limiter": { 1070 | "version": "1.0.1", 1071 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 1072 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 1073 | }, 1074 | "async-listener": { 1075 | "version": "0.6.10", 1076 | "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", 1077 | "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", 1078 | "requires": { 1079 | "semver": "^5.3.0", 1080 | "shimmer": "^1.1.0" 1081 | } 1082 | }, 1083 | "async-retry": { 1084 | "version": "1.2.3", 1085 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", 1086 | "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", 1087 | "requires": { 1088 | "retry": "0.12.0" 1089 | } 1090 | }, 1091 | "asynckit": { 1092 | "version": "0.4.0", 1093 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1094 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1095 | }, 1096 | "atomic-batcher": { 1097 | "version": "1.0.2", 1098 | "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", 1099 | "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" 1100 | }, 1101 | "aws-sdk": { 1102 | "version": "2.580.0", 1103 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.580.0.tgz", 1104 | "integrity": "sha512-YUn/LgaSjWuFDCAIOiOvyXbuRpNEzTPLbwRs3GpEmrP1hJrOChXh0p7GH61sTZdeJZarCSETUOWU5ngjpCOjKA==", 1105 | "requires": { 1106 | "buffer": "^4.9.1", 1107 | "events": "^1.1.1", 1108 | "ieee754": "^1.1.13", 1109 | "jmespath": "^0.15.0", 1110 | "querystring": "^0.2.0", 1111 | "sax": "^1.2.1", 1112 | "url": "^0.10.3", 1113 | "uuid": "^3.3.2", 1114 | "xml2js": "^0.4.19" 1115 | } 1116 | }, 1117 | "aws-serverless-express": { 1118 | "version": "3.3.6", 1119 | "resolved": "https://registry.npmjs.org/aws-serverless-express/-/aws-serverless-express-3.3.6.tgz", 1120 | "integrity": "sha512-VTn8YQpPpMAEdMeGjyaSygy7Rc0057C9MUjeZION0NBqmwTyphpu9Tc5DCHRNF4qNFQ9x1xcOte6OXKzJvvDhw==", 1121 | "requires": { 1122 | "binary-case": "^1.0.0", 1123 | "type-is": "^1.6.16" 1124 | } 1125 | }, 1126 | "aws-xray-sdk": { 1127 | "version": "2.5.0", 1128 | "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-2.5.0.tgz", 1129 | "integrity": "sha512-KBTF9QUq0zu24t+gFh3VATYDNx295VzZUUjpZ1OmIEbcs3Zqmox5L6VAqjCgGfJeLaCUAWPLkduxau3LuDpqcw==", 1130 | "requires": { 1131 | "aws-xray-sdk-core": "^2.5.0", 1132 | "aws-xray-sdk-express": "^2.5.0", 1133 | "aws-xray-sdk-mysql": "^2.5.0", 1134 | "aws-xray-sdk-postgres": "^2.5.0", 1135 | "pkginfo": "^0.4.0" 1136 | } 1137 | }, 1138 | "aws-xray-sdk-core": { 1139 | "version": "2.5.0", 1140 | "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-2.5.0.tgz", 1141 | "integrity": "sha512-qe60bv0kn5KY6gAIF88TPCOIdu/A3dTmcKISj+kE4OH02eF6kMm1ctL7OgoBAasnsDNSn0VMLhIaA1izgoWuxA==", 1142 | "requires": { 1143 | "@types/continuation-local-storage": "*", 1144 | "atomic-batcher": "^1.0.2", 1145 | "aws-sdk": "^2.304.0", 1146 | "continuation-local-storage": "^3.2.0", 1147 | "date-fns": "^1.29.0", 1148 | "pkginfo": "^0.4.0", 1149 | "semver": "^5.3.0", 1150 | "winston": "^2.4.4" 1151 | } 1152 | }, 1153 | "aws-xray-sdk-express": { 1154 | "version": "2.5.0", 1155 | "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-2.5.0.tgz", 1156 | "integrity": "sha512-VfUXlxFlI+gr6ImMF+3000fqPRTBS9MbAywdtC8dt/U57WQbLFDjPW+V6oJowTwrkgKwpOKSXncQDfBs8QHvIw==", 1157 | "requires": { 1158 | "@types/express": "*" 1159 | } 1160 | }, 1161 | "aws-xray-sdk-mysql": { 1162 | "version": "2.5.0", 1163 | "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-2.5.0.tgz", 1164 | "integrity": "sha512-OI3cDkVcKTiWytwoOE1Oj0D2UbchOVHkiQNXWktDk9QYzqbOz+GNEwD5QneqyxFu0z0bQieClBM+0okUprFBXQ==", 1165 | "requires": { 1166 | "@types/mysql": "*" 1167 | } 1168 | }, 1169 | "aws-xray-sdk-postgres": { 1170 | "version": "2.5.0", 1171 | "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-2.5.0.tgz", 1172 | "integrity": "sha512-8LcXTjr272gKMSg9a+QSGQPjAabQb87SA0c4ZlVcPqzoG7nAd3pULR6/HDtujeukbRAb6rEoxzKvPX0s18NyFw==", 1173 | "requires": { 1174 | "@types/pg": "*" 1175 | } 1176 | }, 1177 | "backo2": { 1178 | "version": "1.0.2", 1179 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 1180 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 1181 | }, 1182 | "base64-js": { 1183 | "version": "1.3.1", 1184 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 1185 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 1186 | }, 1187 | "binary-case": { 1188 | "version": "1.1.4", 1189 | "resolved": "https://registry.npmjs.org/binary-case/-/binary-case-1.1.4.tgz", 1190 | "integrity": "sha512-9Kq8m6NZTAgy05Ryuh7U3Qc4/ujLQU1AZ5vMw4cr3igTdi5itZC6kCNrRr2X8NzPiDn2oUIFTfa71DKMnue/Zg==" 1191 | }, 1192 | "bintrees": { 1193 | "version": "1.0.1", 1194 | "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz", 1195 | "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ=" 1196 | }, 1197 | "body-parser": { 1198 | "version": "1.19.0", 1199 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 1200 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 1201 | "requires": { 1202 | "bytes": "3.1.0", 1203 | "content-type": "~1.0.4", 1204 | "debug": "2.6.9", 1205 | "depd": "~1.1.2", 1206 | "http-errors": "1.7.2", 1207 | "iconv-lite": "0.4.24", 1208 | "on-finished": "~2.3.0", 1209 | "qs": "6.7.0", 1210 | "raw-body": "2.4.0", 1211 | "type-is": "~1.6.17" 1212 | }, 1213 | "dependencies": { 1214 | "http-errors": { 1215 | "version": "1.7.2", 1216 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 1217 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 1218 | "requires": { 1219 | "depd": "~1.1.2", 1220 | "inherits": "2.0.3", 1221 | "setprototypeof": "1.1.1", 1222 | "statuses": ">= 1.5.0 < 2", 1223 | "toidentifier": "1.0.0" 1224 | } 1225 | }, 1226 | "inherits": { 1227 | "version": "2.0.3", 1228 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1229 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1230 | } 1231 | } 1232 | }, 1233 | "buffer": { 1234 | "version": "4.9.2", 1235 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 1236 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 1237 | "requires": { 1238 | "base64-js": "^1.0.2", 1239 | "ieee754": "^1.1.4", 1240 | "isarray": "^1.0.0" 1241 | } 1242 | }, 1243 | "busboy": { 1244 | "version": "0.3.1", 1245 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", 1246 | "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", 1247 | "requires": { 1248 | "dicer": "0.3.0" 1249 | } 1250 | }, 1251 | "bytes": { 1252 | "version": "3.1.0", 1253 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 1254 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 1255 | }, 1256 | "color-convert": { 1257 | "version": "1.9.3", 1258 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1259 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1260 | "requires": { 1261 | "color-name": "1.1.3" 1262 | } 1263 | }, 1264 | "color-name": { 1265 | "version": "1.1.3", 1266 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1267 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1268 | }, 1269 | "colors": { 1270 | "version": "1.0.3", 1271 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", 1272 | "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" 1273 | }, 1274 | "combined-stream": { 1275 | "version": "1.0.8", 1276 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1277 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1278 | "requires": { 1279 | "delayed-stream": "~1.0.0" 1280 | } 1281 | }, 1282 | "content-disposition": { 1283 | "version": "0.5.3", 1284 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 1285 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 1286 | "requires": { 1287 | "safe-buffer": "5.1.2" 1288 | }, 1289 | "dependencies": { 1290 | "safe-buffer": { 1291 | "version": "5.1.2", 1292 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1293 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1294 | } 1295 | } 1296 | }, 1297 | "content-type": { 1298 | "version": "1.0.4", 1299 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 1300 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 1301 | }, 1302 | "continuation-local-storage": { 1303 | "version": "3.2.1", 1304 | "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", 1305 | "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", 1306 | "requires": { 1307 | "async-listener": "^0.6.0", 1308 | "emitter-listener": "^1.1.1" 1309 | } 1310 | }, 1311 | "cookie": { 1312 | "version": "0.4.0", 1313 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 1314 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 1315 | }, 1316 | "cookie-signature": { 1317 | "version": "1.0.6", 1318 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1319 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 1320 | }, 1321 | "core-js": { 1322 | "version": "3.2.1", 1323 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", 1324 | "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" 1325 | }, 1326 | "cors": { 1327 | "version": "2.8.5", 1328 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 1329 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 1330 | "requires": { 1331 | "object-assign": "^4", 1332 | "vary": "^1" 1333 | } 1334 | }, 1335 | "cross-fetch": { 1336 | "version": "3.0.6", 1337 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", 1338 | "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", 1339 | "requires": { 1340 | "node-fetch": "2.6.1" 1341 | } 1342 | }, 1343 | "cycle": { 1344 | "version": "1.0.3", 1345 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", 1346 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" 1347 | }, 1348 | "date-fns": { 1349 | "version": "1.30.1", 1350 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", 1351 | "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" 1352 | }, 1353 | "debug": { 1354 | "version": "2.6.9", 1355 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1356 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1357 | "requires": { 1358 | "ms": "2.0.0" 1359 | } 1360 | }, 1361 | "define-properties": { 1362 | "version": "1.1.3", 1363 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1364 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1365 | "requires": { 1366 | "object-keys": "^1.0.12" 1367 | } 1368 | }, 1369 | "delayed-stream": { 1370 | "version": "1.0.0", 1371 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1372 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1373 | }, 1374 | "depd": { 1375 | "version": "1.1.2", 1376 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1377 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 1378 | }, 1379 | "deprecated-decorator": { 1380 | "version": "0.1.6", 1381 | "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", 1382 | "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" 1383 | }, 1384 | "destroy": { 1385 | "version": "1.0.4", 1386 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 1387 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 1388 | }, 1389 | "dicer": { 1390 | "version": "0.3.0", 1391 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", 1392 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", 1393 | "requires": { 1394 | "streamsearch": "0.1.2" 1395 | } 1396 | }, 1397 | "dotenv": { 1398 | "version": "5.0.1", 1399 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", 1400 | "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", 1401 | "dev": true 1402 | }, 1403 | "ee-first": { 1404 | "version": "1.1.1", 1405 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1406 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 1407 | }, 1408 | "emitter-listener": { 1409 | "version": "1.1.2", 1410 | "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", 1411 | "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", 1412 | "requires": { 1413 | "shimmer": "^1.2.0" 1414 | } 1415 | }, 1416 | "encodeurl": { 1417 | "version": "1.0.2", 1418 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1419 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 1420 | }, 1421 | "es-abstract": { 1422 | "version": "1.13.0", 1423 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", 1424 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", 1425 | "requires": { 1426 | "es-to-primitive": "^1.2.0", 1427 | "function-bind": "^1.1.1", 1428 | "has": "^1.0.3", 1429 | "is-callable": "^1.1.4", 1430 | "is-regex": "^1.0.4", 1431 | "object-keys": "^1.0.12" 1432 | } 1433 | }, 1434 | "es-to-primitive": { 1435 | "version": "1.2.0", 1436 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 1437 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 1438 | "requires": { 1439 | "is-callable": "^1.1.4", 1440 | "is-date-object": "^1.0.1", 1441 | "is-symbol": "^1.0.2" 1442 | } 1443 | }, 1444 | "escape-html": { 1445 | "version": "1.0.3", 1446 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1447 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 1448 | }, 1449 | "etag": { 1450 | "version": "1.8.1", 1451 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1452 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 1453 | }, 1454 | "eventemitter3": { 1455 | "version": "3.1.2", 1456 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 1457 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" 1458 | }, 1459 | "events": { 1460 | "version": "1.1.1", 1461 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 1462 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" 1463 | }, 1464 | "express": { 1465 | "version": "4.17.1", 1466 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 1467 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 1468 | "requires": { 1469 | "accepts": "~1.3.7", 1470 | "array-flatten": "1.1.1", 1471 | "body-parser": "1.19.0", 1472 | "content-disposition": "0.5.3", 1473 | "content-type": "~1.0.4", 1474 | "cookie": "0.4.0", 1475 | "cookie-signature": "1.0.6", 1476 | "debug": "2.6.9", 1477 | "depd": "~1.1.2", 1478 | "encodeurl": "~1.0.2", 1479 | "escape-html": "~1.0.3", 1480 | "etag": "~1.8.1", 1481 | "finalhandler": "~1.1.2", 1482 | "fresh": "0.5.2", 1483 | "merge-descriptors": "1.0.1", 1484 | "methods": "~1.1.2", 1485 | "on-finished": "~2.3.0", 1486 | "parseurl": "~1.3.3", 1487 | "path-to-regexp": "0.1.7", 1488 | "proxy-addr": "~2.0.5", 1489 | "qs": "6.7.0", 1490 | "range-parser": "~1.2.1", 1491 | "safe-buffer": "5.1.2", 1492 | "send": "0.17.1", 1493 | "serve-static": "1.14.1", 1494 | "setprototypeof": "1.1.1", 1495 | "statuses": "~1.5.0", 1496 | "type-is": "~1.6.18", 1497 | "utils-merge": "1.0.1", 1498 | "vary": "~1.1.2" 1499 | }, 1500 | "dependencies": { 1501 | "safe-buffer": { 1502 | "version": "5.1.2", 1503 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1504 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1505 | } 1506 | } 1507 | }, 1508 | "extract-files": { 1509 | "version": "9.0.0", 1510 | "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", 1511 | "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" 1512 | }, 1513 | "eyes": { 1514 | "version": "0.1.8", 1515 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 1516 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" 1517 | }, 1518 | "fast-json-stable-stringify": { 1519 | "version": "2.0.0", 1520 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1521 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 1522 | }, 1523 | "finalhandler": { 1524 | "version": "1.1.2", 1525 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 1526 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 1527 | "requires": { 1528 | "debug": "2.6.9", 1529 | "encodeurl": "~1.0.2", 1530 | "escape-html": "~1.0.3", 1531 | "on-finished": "~2.3.0", 1532 | "parseurl": "~1.3.3", 1533 | "statuses": "~1.5.0", 1534 | "unpipe": "~1.0.0" 1535 | } 1536 | }, 1537 | "form-data": { 1538 | "version": "3.0.0", 1539 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", 1540 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", 1541 | "requires": { 1542 | "asynckit": "^0.4.0", 1543 | "combined-stream": "^1.0.8", 1544 | "mime-types": "^2.1.12" 1545 | } 1546 | }, 1547 | "forwarded": { 1548 | "version": "0.1.2", 1549 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 1550 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 1551 | }, 1552 | "fresh": { 1553 | "version": "0.5.2", 1554 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1555 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 1556 | }, 1557 | "fs-capacitor": { 1558 | "version": "2.0.4", 1559 | "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", 1560 | "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" 1561 | }, 1562 | "function-bind": { 1563 | "version": "1.1.1", 1564 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1565 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1566 | }, 1567 | "graphql": { 1568 | "version": "14.4.2", 1569 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.4.2.tgz", 1570 | "integrity": "sha512-6uQadiRgnpnSS56hdZUSvFrVcQ6OF9y6wkxJfKquFtHlnl7+KSuWwSJsdwiK1vybm1HgcdbpGkCpvhvsVQ0UZQ==", 1571 | "requires": { 1572 | "iterall": "^1.2.2" 1573 | } 1574 | }, 1575 | "graphql-extensions": { 1576 | "version": "0.12.2", 1577 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.2.tgz", 1578 | "integrity": "sha512-vFaZua5aLiCOOzxfY5qzHZ6S52BCqW7VVOwzvV52Wb5edRm3dn6u+1MR9yYyEqUHSf8LvdhEojYlOkKiaQ4ghA==", 1579 | "requires": { 1580 | "@apollographql/apollo-tools": "^0.4.3", 1581 | "apollo-server-env": "^2.4.4", 1582 | "apollo-server-types": "^0.5.0" 1583 | }, 1584 | "dependencies": { 1585 | "@apollographql/apollo-tools": { 1586 | "version": "0.4.8", 1587 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz", 1588 | "integrity": "sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA==", 1589 | "requires": { 1590 | "apollo-env": "^0.6.5" 1591 | } 1592 | }, 1593 | "apollo-env": { 1594 | "version": "0.6.5", 1595 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.5.tgz", 1596 | "integrity": "sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==", 1597 | "requires": { 1598 | "@types/node-fetch": "2.5.7", 1599 | "core-js": "^3.0.1", 1600 | "node-fetch": "^2.2.0", 1601 | "sha.js": "^2.4.11" 1602 | } 1603 | } 1604 | } 1605 | }, 1606 | "graphql-request": { 1607 | "version": "3.1.0", 1608 | "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-3.1.0.tgz", 1609 | "integrity": "sha512-Flg2Bd4Ek9BDJ5qacZC/iYuiS3LroHxQTmlUnfqjo/6jKwowY25FVtoLTnssMCBrYspRYEYEIfF1GN8J3/o5JQ==", 1610 | "requires": { 1611 | "cross-fetch": "^3.0.5", 1612 | "extract-files": "^9.0.0", 1613 | "form-data": "^3.0.0" 1614 | } 1615 | }, 1616 | "graphql-subscriptions": { 1617 | "version": "1.1.0", 1618 | "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", 1619 | "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", 1620 | "requires": { 1621 | "iterall": "^1.2.1" 1622 | } 1623 | }, 1624 | "graphql-tag": { 1625 | "version": "2.10.1", 1626 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", 1627 | "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" 1628 | }, 1629 | "graphql-tools": { 1630 | "version": "4.0.5", 1631 | "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.5.tgz", 1632 | "integrity": "sha512-kQCh3IZsMqquDx7zfIGWBau42xe46gmqabwYkpPlCLIjcEY1XK+auP7iGRD9/205BPyoQdY8hT96MPpgERdC9Q==", 1633 | "requires": { 1634 | "apollo-link": "^1.2.3", 1635 | "apollo-utilities": "^1.0.1", 1636 | "deprecated-decorator": "^0.1.6", 1637 | "iterall": "^1.1.3", 1638 | "uuid": "^3.1.0" 1639 | } 1640 | }, 1641 | "graphql-upload": { 1642 | "version": "8.0.7", 1643 | "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.7.tgz", 1644 | "integrity": "sha512-gi2yygbDPXbHPC7H0PNPqP++VKSoNoJO4UrXWq4T0Bi4IhyUd3Ycop/FSxhx2svWIK3jdXR/i0vi91yR1aAF0g==", 1645 | "requires": { 1646 | "busboy": "^0.3.1", 1647 | "fs-capacitor": "^2.0.4", 1648 | "http-errors": "^1.7.2", 1649 | "object-path": "^0.11.4" 1650 | } 1651 | }, 1652 | "has": { 1653 | "version": "1.0.3", 1654 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1655 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1656 | "requires": { 1657 | "function-bind": "^1.1.1" 1658 | } 1659 | }, 1660 | "has-symbols": { 1661 | "version": "1.0.0", 1662 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 1663 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" 1664 | }, 1665 | "http-errors": { 1666 | "version": "1.7.3", 1667 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 1668 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 1669 | "requires": { 1670 | "depd": "~1.1.2", 1671 | "inherits": "2.0.4", 1672 | "setprototypeof": "1.1.1", 1673 | "statuses": ">= 1.5.0 < 2", 1674 | "toidentifier": "1.0.0" 1675 | } 1676 | }, 1677 | "iconv-lite": { 1678 | "version": "0.4.24", 1679 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1680 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1681 | "requires": { 1682 | "safer-buffer": ">= 2.1.2 < 3" 1683 | } 1684 | }, 1685 | "ieee754": { 1686 | "version": "1.1.13", 1687 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1688 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 1689 | }, 1690 | "inherits": { 1691 | "version": "2.0.4", 1692 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1693 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1694 | }, 1695 | "ipaddr.js": { 1696 | "version": "1.9.0", 1697 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", 1698 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" 1699 | }, 1700 | "is-callable": { 1701 | "version": "1.1.4", 1702 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 1703 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" 1704 | }, 1705 | "is-date-object": { 1706 | "version": "1.0.1", 1707 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 1708 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" 1709 | }, 1710 | "is-regex": { 1711 | "version": "1.0.4", 1712 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 1713 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 1714 | "requires": { 1715 | "has": "^1.0.1" 1716 | } 1717 | }, 1718 | "is-symbol": { 1719 | "version": "1.0.2", 1720 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 1721 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 1722 | "requires": { 1723 | "has-symbols": "^1.0.0" 1724 | } 1725 | }, 1726 | "isarray": { 1727 | "version": "1.0.0", 1728 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1729 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1730 | }, 1731 | "isstream": { 1732 | "version": "0.1.2", 1733 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1734 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1735 | }, 1736 | "iterall": { 1737 | "version": "1.2.2", 1738 | "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", 1739 | "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" 1740 | }, 1741 | "jmespath": { 1742 | "version": "0.15.0", 1743 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", 1744 | "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" 1745 | }, 1746 | "lodash.sortby": { 1747 | "version": "4.7.0", 1748 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1749 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 1750 | }, 1751 | "lodash.xorby": { 1752 | "version": "4.7.0", 1753 | "resolved": "https://registry.npmjs.org/lodash.xorby/-/lodash.xorby-4.7.0.tgz", 1754 | "integrity": "sha1-nBmm+fBjputT3QPBtocXmYAUY9c=" 1755 | }, 1756 | "loglevel": { 1757 | "version": "1.6.6", 1758 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", 1759 | "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==" 1760 | }, 1761 | "loglevel-debug": { 1762 | "version": "0.0.1", 1763 | "resolved": "https://registry.npmjs.org/loglevel-debug/-/loglevel-debug-0.0.1.tgz", 1764 | "integrity": "sha1-ifidPboTy6iiy0YV1dOtcYn0iik=", 1765 | "requires": { 1766 | "loglevel": "^1.4.0" 1767 | } 1768 | }, 1769 | "long": { 1770 | "version": "4.0.0", 1771 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1772 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1773 | }, 1774 | "lru-cache": { 1775 | "version": "5.1.1", 1776 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1777 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1778 | "requires": { 1779 | "yallist": "^3.0.2" 1780 | } 1781 | }, 1782 | "media-typer": { 1783 | "version": "0.3.0", 1784 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1785 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1786 | }, 1787 | "merge-descriptors": { 1788 | "version": "1.0.1", 1789 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1790 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1791 | }, 1792 | "methods": { 1793 | "version": "1.1.2", 1794 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1795 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1796 | }, 1797 | "mime": { 1798 | "version": "1.6.0", 1799 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1800 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1801 | }, 1802 | "mime-db": { 1803 | "version": "1.40.0", 1804 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 1805 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 1806 | }, 1807 | "mime-types": { 1808 | "version": "2.1.24", 1809 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 1810 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 1811 | "requires": { 1812 | "mime-db": "1.40.0" 1813 | } 1814 | }, 1815 | "ms": { 1816 | "version": "2.0.0", 1817 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1818 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1819 | }, 1820 | "negotiator": { 1821 | "version": "0.6.2", 1822 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1823 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1824 | }, 1825 | "node-fetch": { 1826 | "version": "2.6.1", 1827 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1828 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1829 | }, 1830 | "object-assign": { 1831 | "version": "4.1.1", 1832 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1833 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1834 | }, 1835 | "object-keys": { 1836 | "version": "1.1.1", 1837 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1838 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 1839 | }, 1840 | "object-path": { 1841 | "version": "0.11.5", 1842 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz", 1843 | "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==" 1844 | }, 1845 | "object.getownpropertydescriptors": { 1846 | "version": "2.0.3", 1847 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 1848 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 1849 | "requires": { 1850 | "define-properties": "^1.1.2", 1851 | "es-abstract": "^1.5.1" 1852 | } 1853 | }, 1854 | "on-finished": { 1855 | "version": "2.3.0", 1856 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1857 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1858 | "requires": { 1859 | "ee-first": "1.1.1" 1860 | } 1861 | }, 1862 | "parseurl": { 1863 | "version": "1.3.3", 1864 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1865 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1866 | }, 1867 | "path-to-regexp": { 1868 | "version": "0.1.7", 1869 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1870 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1871 | }, 1872 | "pkginfo": { 1873 | "version": "0.4.1", 1874 | "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", 1875 | "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" 1876 | }, 1877 | "pretty-format": { 1878 | "version": "24.9.0", 1879 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", 1880 | "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", 1881 | "requires": { 1882 | "@jest/types": "^24.9.0", 1883 | "ansi-regex": "^4.0.0", 1884 | "ansi-styles": "^3.2.0", 1885 | "react-is": "^16.8.4" 1886 | } 1887 | }, 1888 | "prom-client": { 1889 | "version": "12.0.0", 1890 | "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz", 1891 | "integrity": "sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ==", 1892 | "requires": { 1893 | "tdigest": "^0.1.1" 1894 | } 1895 | }, 1896 | "protobufjs": { 1897 | "version": "6.8.8", 1898 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", 1899 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", 1900 | "requires": { 1901 | "@protobufjs/aspromise": "^1.1.2", 1902 | "@protobufjs/base64": "^1.1.2", 1903 | "@protobufjs/codegen": "^2.0.4", 1904 | "@protobufjs/eventemitter": "^1.1.0", 1905 | "@protobufjs/fetch": "^1.1.0", 1906 | "@protobufjs/float": "^1.0.2", 1907 | "@protobufjs/inquire": "^1.1.0", 1908 | "@protobufjs/path": "^1.1.2", 1909 | "@protobufjs/pool": "^1.1.0", 1910 | "@protobufjs/utf8": "^1.1.0", 1911 | "@types/long": "^4.0.0", 1912 | "@types/node": "^10.1.0", 1913 | "long": "^4.0.0" 1914 | } 1915 | }, 1916 | "proxy-addr": { 1917 | "version": "2.0.5", 1918 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", 1919 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", 1920 | "requires": { 1921 | "forwarded": "~0.1.2", 1922 | "ipaddr.js": "1.9.0" 1923 | } 1924 | }, 1925 | "punycode": { 1926 | "version": "1.3.2", 1927 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1928 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 1929 | }, 1930 | "qs": { 1931 | "version": "6.7.0", 1932 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1933 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 1934 | }, 1935 | "querystring": { 1936 | "version": "0.2.0", 1937 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1938 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 1939 | }, 1940 | "range-parser": { 1941 | "version": "1.2.1", 1942 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1943 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1944 | }, 1945 | "raw-body": { 1946 | "version": "2.4.0", 1947 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1948 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1949 | "requires": { 1950 | "bytes": "3.1.0", 1951 | "http-errors": "1.7.2", 1952 | "iconv-lite": "0.4.24", 1953 | "unpipe": "1.0.0" 1954 | }, 1955 | "dependencies": { 1956 | "http-errors": { 1957 | "version": "1.7.2", 1958 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 1959 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 1960 | "requires": { 1961 | "depd": "~1.1.2", 1962 | "inherits": "2.0.3", 1963 | "setprototypeof": "1.1.1", 1964 | "statuses": ">= 1.5.0 < 2", 1965 | "toidentifier": "1.0.0" 1966 | } 1967 | }, 1968 | "inherits": { 1969 | "version": "2.0.3", 1970 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1971 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1972 | } 1973 | } 1974 | }, 1975 | "react-is": { 1976 | "version": "16.12.0", 1977 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", 1978 | "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" 1979 | }, 1980 | "retry": { 1981 | "version": "0.12.0", 1982 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 1983 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" 1984 | }, 1985 | "safe-buffer": { 1986 | "version": "5.2.0", 1987 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1988 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1989 | }, 1990 | "safer-buffer": { 1991 | "version": "2.1.2", 1992 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1993 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1994 | }, 1995 | "sax": { 1996 | "version": "1.2.4", 1997 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1998 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1999 | }, 2000 | "semver": { 2001 | "version": "5.7.1", 2002 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2003 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 2004 | }, 2005 | "send": { 2006 | "version": "0.17.1", 2007 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 2008 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 2009 | "requires": { 2010 | "debug": "2.6.9", 2011 | "depd": "~1.1.2", 2012 | "destroy": "~1.0.4", 2013 | "encodeurl": "~1.0.2", 2014 | "escape-html": "~1.0.3", 2015 | "etag": "~1.8.1", 2016 | "fresh": "0.5.2", 2017 | "http-errors": "~1.7.2", 2018 | "mime": "1.6.0", 2019 | "ms": "2.1.1", 2020 | "on-finished": "~2.3.0", 2021 | "range-parser": "~1.2.1", 2022 | "statuses": "~1.5.0" 2023 | }, 2024 | "dependencies": { 2025 | "ms": { 2026 | "version": "2.1.1", 2027 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 2028 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 2029 | } 2030 | } 2031 | }, 2032 | "serve-static": { 2033 | "version": "1.14.1", 2034 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 2035 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 2036 | "requires": { 2037 | "encodeurl": "~1.0.2", 2038 | "escape-html": "~1.0.3", 2039 | "parseurl": "~1.3.3", 2040 | "send": "0.17.1" 2041 | } 2042 | }, 2043 | "setprototypeof": { 2044 | "version": "1.1.1", 2045 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 2046 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 2047 | }, 2048 | "sha.js": { 2049 | "version": "2.4.11", 2050 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2051 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2052 | "requires": { 2053 | "inherits": "^2.0.1", 2054 | "safe-buffer": "^5.0.1" 2055 | } 2056 | }, 2057 | "shimmer": { 2058 | "version": "1.2.1", 2059 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", 2060 | "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" 2061 | }, 2062 | "stack-trace": { 2063 | "version": "0.0.10", 2064 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 2065 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" 2066 | }, 2067 | "statuses": { 2068 | "version": "1.5.0", 2069 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 2070 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 2071 | }, 2072 | "streamsearch": { 2073 | "version": "0.1.2", 2074 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 2075 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 2076 | }, 2077 | "subscriptions-transport-ws": { 2078 | "version": "0.9.18", 2079 | "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz", 2080 | "integrity": "sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA==", 2081 | "requires": { 2082 | "backo2": "^1.0.2", 2083 | "eventemitter3": "^3.1.0", 2084 | "iterall": "^1.2.1", 2085 | "symbol-observable": "^1.0.4", 2086 | "ws": "^5.2.0" 2087 | }, 2088 | "dependencies": { 2089 | "ws": { 2090 | "version": "5.2.2", 2091 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", 2092 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", 2093 | "requires": { 2094 | "async-limiter": "~1.0.0" 2095 | } 2096 | } 2097 | } 2098 | }, 2099 | "symbol-observable": { 2100 | "version": "1.2.0", 2101 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 2102 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 2103 | }, 2104 | "tdigest": { 2105 | "version": "0.1.1", 2106 | "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz", 2107 | "integrity": "sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=", 2108 | "requires": { 2109 | "bintrees": "1.0.1" 2110 | } 2111 | }, 2112 | "toidentifier": { 2113 | "version": "1.0.0", 2114 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 2115 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 2116 | }, 2117 | "ts-invariant": { 2118 | "version": "0.4.4", 2119 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", 2120 | "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", 2121 | "requires": { 2122 | "tslib": "^1.9.3" 2123 | } 2124 | }, 2125 | "tslib": { 2126 | "version": "1.10.0", 2127 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 2128 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" 2129 | }, 2130 | "type-is": { 2131 | "version": "1.6.18", 2132 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2133 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2134 | "requires": { 2135 | "media-typer": "0.3.0", 2136 | "mime-types": "~2.1.24" 2137 | } 2138 | }, 2139 | "unpipe": { 2140 | "version": "1.0.0", 2141 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2142 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2143 | }, 2144 | "url": { 2145 | "version": "0.10.3", 2146 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 2147 | "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", 2148 | "requires": { 2149 | "punycode": "1.3.2", 2150 | "querystring": "0.2.0" 2151 | } 2152 | }, 2153 | "util.promisify": { 2154 | "version": "1.0.0", 2155 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", 2156 | "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", 2157 | "requires": { 2158 | "define-properties": "^1.1.2", 2159 | "object.getownpropertydescriptors": "^2.0.3" 2160 | } 2161 | }, 2162 | "utils-merge": { 2163 | "version": "1.0.1", 2164 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2165 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2166 | }, 2167 | "uuid": { 2168 | "version": "3.3.2", 2169 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 2170 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 2171 | }, 2172 | "vary": { 2173 | "version": "1.1.2", 2174 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2175 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2176 | }, 2177 | "winston": { 2178 | "version": "2.4.4", 2179 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", 2180 | "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", 2181 | "requires": { 2182 | "async": "~1.0.0", 2183 | "colors": "1.0.x", 2184 | "cycle": "1.0.x", 2185 | "eyes": "0.1.x", 2186 | "isstream": "0.1.x", 2187 | "stack-trace": "0.0.x" 2188 | } 2189 | }, 2190 | "ws": { 2191 | "version": "6.2.1", 2192 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 2193 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 2194 | "requires": { 2195 | "async-limiter": "~1.0.0" 2196 | } 2197 | }, 2198 | "xml2js": { 2199 | "version": "0.4.22", 2200 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", 2201 | "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", 2202 | "requires": { 2203 | "sax": ">=0.6.0", 2204 | "util.promisify": "~1.0.0", 2205 | "xmlbuilder": "~11.0.0" 2206 | } 2207 | }, 2208 | "xmlbuilder": { 2209 | "version": "11.0.1", 2210 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 2211 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 2212 | }, 2213 | "yallist": { 2214 | "version": "3.0.3", 2215 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", 2216 | "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" 2217 | }, 2218 | "zen-observable": { 2219 | "version": "0.8.14", 2220 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", 2221 | "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" 2222 | }, 2223 | "zen-observable-ts": { 2224 | "version": "0.8.21", 2225 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", 2226 | "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", 2227 | "requires": { 2228 | "tslib": "^1.9.3", 2229 | "zen-observable": "^0.8.0" 2230 | } 2231 | } 2232 | } 2233 | } 2234 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@apollo/gateway": "^0.11.0", 4 | "apollo-client": "^2.6.10", 5 | "apollo-gateway-aws-lambda": "^0.2.1", 6 | "apollo-link": "^1.2.14", 7 | "apollo-link-ws": "^1.0.20", 8 | "apollo-metrics": "^1.0.1", 9 | "apollo-server": "^2.14.2", 10 | "apollo-server-express": "^2.14.2", 11 | "aws-serverless-express": "^3.3.6", 12 | "express": "^4.17.1", 13 | "graphql": "^14.4.2", 14 | "graphql-request": "^3.1.0", 15 | "subscriptions-transport-ws": "^0.9.18", 16 | "prom-client": "^12.0.0" 17 | }, 18 | "scripts": { 19 | "start": "node index", 20 | "start-local": "PORT=3000 node index" 21 | }, 22 | "devDependencies": { 23 | "aws-sdk": "^2.580.0", 24 | "dotenv": "^5.0.1" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/graph-manager-sdk.ts: -------------------------------------------------------------------------------- 1 | import { 2 | GraphQLResolveInfo, 3 | GraphQLScalarType, 4 | GraphQLScalarTypeConfig, 5 | } from "graphql"; 6 | 7 | import { GraphQLClient } from "graphql-request"; 8 | import gql from "graphql-tag"; 9 | import { print } from "graphql"; 10 | export type Maybe = T | null; 11 | export type Exact = { 12 | [K in keyof T]: T[K]; 13 | }; 14 | export type RequireFields = { 15 | [X in Exclude]?: T[X]; 16 | } & 17 | { [P in K]-?: NonNullable }; 18 | /** All built-in and custom scalars, mapped to their actual values */ 19 | export type Scalars = { 20 | ID: string; 21 | String: string; 22 | Boolean: boolean; 23 | Int: number; 24 | Float: number; 25 | /** A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format. */ 26 | DateTime: any; 27 | }; 28 | 29 | export type Service = { 30 | __typename?: "Service"; 31 | id: Scalars["ID"]; 32 | createdAt: Scalars["DateTime"]; 33 | name: Scalars["String"]; 34 | url: Scalars["String"]; 35 | schemas: Array; 36 | latestSchema?: Maybe; 37 | }; 38 | 39 | export type ServiceSchema = { 40 | __typename?: "ServiceSchema"; 41 | id: Scalars["ID"]; 42 | createdAt: Scalars["DateTime"]; 43 | version: Scalars["String"]; 44 | typeDefs: Scalars["String"]; 45 | service: Service; 46 | gatewayVersions: Array; 47 | }; 48 | 49 | export type GatewayVersion = { 50 | __typename?: "GatewayVersion"; 51 | id: Scalars["ID"]; 52 | createdAt: Scalars["DateTime"]; 53 | status: GatewayVersionStatus; 54 | validationError?: Maybe; 55 | gateway: Gateway; 56 | serviceSchemas: Array; 57 | }; 58 | 59 | export enum GatewayVersionStatus { 60 | Pending = "PENDING", 61 | Valid = "VALID", 62 | Invalid = "INVALID", 63 | } 64 | 65 | export type Gateway = { 66 | __typename?: "Gateway"; 67 | id: Scalars["ID"]; 68 | createdAt: Scalars["DateTime"]; 69 | name: Scalars["String"]; 70 | services: Array; 71 | versions: Array; 72 | currentVersion?: Maybe; 73 | }; 74 | 75 | export type Query = { 76 | __typename?: "Query"; 77 | gateway?: Maybe; 78 | service?: Maybe; 79 | }; 80 | 81 | export type QueryGatewayArgs = { 82 | id: Scalars["ID"]; 83 | }; 84 | 85 | export type QueryServiceArgs = { 86 | id: Scalars["ID"]; 87 | }; 88 | 89 | export type Mutation = { 90 | __typename?: "Mutation"; 91 | createGateway: Gateway; 92 | deleteGateway: Scalars["Boolean"]; 93 | createService: Service; 94 | deleteService: Scalars["Boolean"]; 95 | addServiceToGateway: Scalars["Boolean"]; 96 | removeServiceFromGateway: Scalars["Boolean"]; 97 | publishServiceSchema: ServiceSchema; 98 | }; 99 | 100 | export type MutationCreateGatewayArgs = { 101 | input: GatewayInput; 102 | }; 103 | 104 | export type MutationDeleteGatewayArgs = { 105 | id: Scalars["ID"]; 106 | }; 107 | 108 | export type MutationCreateServiceArgs = { 109 | input: ServiceInput; 110 | }; 111 | 112 | export type MutationDeleteServiceArgs = { 113 | id: Scalars["ID"]; 114 | }; 115 | 116 | export type MutationAddServiceToGatewayArgs = { 117 | gatewayId: Scalars["ID"]; 118 | serviceId: Scalars["ID"]; 119 | }; 120 | 121 | export type MutationRemoveServiceFromGatewayArgs = { 122 | gatewayId: Scalars["ID"]; 123 | serviceId: Scalars["ID"]; 124 | }; 125 | 126 | export type MutationPublishServiceSchemaArgs = { 127 | input: ServiceSchemaInput; 128 | }; 129 | 130 | export type GatewayInput = { 131 | id?: Maybe; 132 | name: Scalars["String"]; 133 | }; 134 | 135 | export type ServiceInput = { 136 | id?: Maybe; 137 | name: Scalars["String"]; 138 | url: Scalars["String"]; 139 | }; 140 | 141 | export type ServiceSchemaInput = { 142 | serviceId: Scalars["ID"]; 143 | version: Scalars["String"]; 144 | typeDefs: Scalars["String"]; 145 | }; 146 | 147 | export type Subscription = { 148 | __typename?: "Subscription"; 149 | gatewayVersionUpdated: GatewayVersion; 150 | }; 151 | 152 | export type SubscriptionGatewayVersionUpdatedArgs = { 153 | gatewayId: Scalars["ID"]; 154 | }; 155 | 156 | export type ResolverTypeWrapper = Promise | T; 157 | 158 | export type LegacyStitchingResolver = { 159 | fragment: string; 160 | resolve: ResolverFn; 161 | }; 162 | 163 | export type NewStitchingResolver = { 164 | selectionSet: string; 165 | resolve: ResolverFn; 166 | }; 167 | export type StitchingResolver = 168 | | LegacyStitchingResolver 169 | | NewStitchingResolver; 170 | export type Resolver = 171 | | ResolverFn 172 | | StitchingResolver; 173 | 174 | export type ResolverFn = ( 175 | parent: TParent, 176 | args: TArgs, 177 | context: TContext, 178 | info: GraphQLResolveInfo 179 | ) => Promise | TResult; 180 | 181 | export type SubscriptionSubscribeFn = ( 182 | parent: TParent, 183 | args: TArgs, 184 | context: TContext, 185 | info: GraphQLResolveInfo 186 | ) => AsyncIterator | Promise>; 187 | 188 | export type SubscriptionResolveFn = ( 189 | parent: TParent, 190 | args: TArgs, 191 | context: TContext, 192 | info: GraphQLResolveInfo 193 | ) => TResult | Promise; 194 | 195 | export interface SubscriptionSubscriberObject< 196 | TResult, 197 | TKey extends string, 198 | TParent, 199 | TContext, 200 | TArgs 201 | > { 202 | subscribe: SubscriptionSubscribeFn< 203 | { [key in TKey]: TResult }, 204 | TParent, 205 | TContext, 206 | TArgs 207 | >; 208 | resolve?: SubscriptionResolveFn< 209 | TResult, 210 | { [key in TKey]: TResult }, 211 | TContext, 212 | TArgs 213 | >; 214 | } 215 | 216 | export interface SubscriptionResolverObject { 217 | subscribe: SubscriptionSubscribeFn; 218 | resolve: SubscriptionResolveFn; 219 | } 220 | 221 | export type SubscriptionObject< 222 | TResult, 223 | TKey extends string, 224 | TParent, 225 | TContext, 226 | TArgs 227 | > = 228 | | SubscriptionSubscriberObject 229 | | SubscriptionResolverObject; 230 | 231 | export type SubscriptionResolver< 232 | TResult, 233 | TKey extends string, 234 | TParent = {}, 235 | TContext = {}, 236 | TArgs = {} 237 | > = 238 | | (( 239 | ...args: any[] 240 | ) => SubscriptionObject) 241 | | SubscriptionObject; 242 | 243 | export type TypeResolveFn = ( 244 | parent: TParent, 245 | context: TContext, 246 | info: GraphQLResolveInfo 247 | ) => Maybe | Promise>; 248 | 249 | export type IsTypeOfResolverFn = ( 250 | obj: T, 251 | context: TContext, 252 | info: GraphQLResolveInfo 253 | ) => boolean | Promise; 254 | 255 | export type NextResolverFn = () => Promise; 256 | 257 | export type DirectiveResolverFn< 258 | TResult = {}, 259 | TParent = {}, 260 | TContext = {}, 261 | TArgs = {} 262 | > = ( 263 | next: NextResolverFn, 264 | parent: TParent, 265 | args: TArgs, 266 | context: TContext, 267 | info: GraphQLResolveInfo 268 | ) => TResult | Promise; 269 | 270 | /** Mapping between all available schema types and the resolvers types */ 271 | export type ResolversTypes = { 272 | String: ResolverTypeWrapper; 273 | Boolean: ResolverTypeWrapper; 274 | Service: ResolverTypeWrapper; 275 | ID: ResolverTypeWrapper; 276 | DateTime: ResolverTypeWrapper; 277 | ServiceSchema: ResolverTypeWrapper; 278 | GatewayVersion: ResolverTypeWrapper; 279 | GatewayVersionStatus: GatewayVersionStatus; 280 | Gateway: ResolverTypeWrapper; 281 | Query: ResolverTypeWrapper<{}>; 282 | Mutation: ResolverTypeWrapper<{}>; 283 | GatewayInput: GatewayInput; 284 | ServiceInput: ServiceInput; 285 | ServiceSchemaInput: ServiceSchemaInput; 286 | Subscription: ResolverTypeWrapper<{}>; 287 | }; 288 | 289 | /** Mapping between all available schema types and the resolvers parents */ 290 | export type ResolversParentTypes = { 291 | String: Scalars["String"]; 292 | Boolean: Scalars["Boolean"]; 293 | Service: Service; 294 | ID: Scalars["ID"]; 295 | DateTime: Scalars["DateTime"]; 296 | ServiceSchema: ServiceSchema; 297 | GatewayVersion: GatewayVersion; 298 | Gateway: Gateway; 299 | Query: {}; 300 | Mutation: {}; 301 | GatewayInput: GatewayInput; 302 | ServiceInput: ServiceInput; 303 | ServiceSchemaInput: ServiceSchemaInput; 304 | Subscription: {}; 305 | }; 306 | 307 | export type ServiceResolvers< 308 | ContextType = any, 309 | ParentType extends ResolversParentTypes["Service"] = ResolversParentTypes["Service"] 310 | > = { 311 | id?: Resolver; 312 | createdAt?: Resolver; 313 | name?: Resolver; 314 | url?: Resolver; 315 | schemas?: Resolver< 316 | Array, 317 | ParentType, 318 | ContextType 319 | >; 320 | latestSchema?: Resolver< 321 | Maybe, 322 | ParentType, 323 | ContextType 324 | >; 325 | __isTypeOf?: IsTypeOfResolverFn; 326 | }; 327 | 328 | export interface DateTimeScalarConfig 329 | extends GraphQLScalarTypeConfig { 330 | name: "DateTime"; 331 | } 332 | 333 | export type ServiceSchemaResolvers< 334 | ContextType = any, 335 | ParentType extends ResolversParentTypes["ServiceSchema"] = ResolversParentTypes["ServiceSchema"] 336 | > = { 337 | id?: Resolver; 338 | createdAt?: Resolver; 339 | version?: Resolver; 340 | typeDefs?: Resolver; 341 | service?: Resolver; 342 | gatewayVersions?: Resolver< 343 | Array, 344 | ParentType, 345 | ContextType 346 | >; 347 | __isTypeOf?: IsTypeOfResolverFn; 348 | }; 349 | 350 | export type GatewayVersionResolvers< 351 | ContextType = any, 352 | ParentType extends ResolversParentTypes["GatewayVersion"] = ResolversParentTypes["GatewayVersion"] 353 | > = { 354 | id?: Resolver; 355 | createdAt?: Resolver; 356 | status?: Resolver< 357 | ResolversTypes["GatewayVersionStatus"], 358 | ParentType, 359 | ContextType 360 | >; 361 | validationError?: Resolver< 362 | Maybe, 363 | ParentType, 364 | ContextType 365 | >; 366 | gateway?: Resolver; 367 | serviceSchemas?: Resolver< 368 | Array, 369 | ParentType, 370 | ContextType 371 | >; 372 | __isTypeOf?: IsTypeOfResolverFn; 373 | }; 374 | 375 | export type GatewayResolvers< 376 | ContextType = any, 377 | ParentType extends ResolversParentTypes["Gateway"] = ResolversParentTypes["Gateway"] 378 | > = { 379 | id?: Resolver; 380 | createdAt?: Resolver; 381 | name?: Resolver; 382 | services?: Resolver< 383 | Array, 384 | ParentType, 385 | ContextType 386 | >; 387 | versions?: Resolver< 388 | Array, 389 | ParentType, 390 | ContextType 391 | >; 392 | currentVersion?: Resolver< 393 | Maybe, 394 | ParentType, 395 | ContextType 396 | >; 397 | __isTypeOf?: IsTypeOfResolverFn; 398 | }; 399 | 400 | export type QueryResolvers< 401 | ContextType = any, 402 | ParentType extends ResolversParentTypes["Query"] = ResolversParentTypes["Query"] 403 | > = { 404 | gateway?: Resolver< 405 | Maybe, 406 | ParentType, 407 | ContextType, 408 | RequireFields 409 | >; 410 | service?: Resolver< 411 | Maybe, 412 | ParentType, 413 | ContextType, 414 | RequireFields 415 | >; 416 | }; 417 | 418 | export type MutationResolvers< 419 | ContextType = any, 420 | ParentType extends ResolversParentTypes["Mutation"] = ResolversParentTypes["Mutation"] 421 | > = { 422 | createGateway?: Resolver< 423 | ResolversTypes["Gateway"], 424 | ParentType, 425 | ContextType, 426 | RequireFields 427 | >; 428 | deleteGateway?: Resolver< 429 | ResolversTypes["Boolean"], 430 | ParentType, 431 | ContextType, 432 | RequireFields 433 | >; 434 | createService?: Resolver< 435 | ResolversTypes["Service"], 436 | ParentType, 437 | ContextType, 438 | RequireFields 439 | >; 440 | deleteService?: Resolver< 441 | ResolversTypes["Boolean"], 442 | ParentType, 443 | ContextType, 444 | RequireFields 445 | >; 446 | addServiceToGateway?: Resolver< 447 | ResolversTypes["Boolean"], 448 | ParentType, 449 | ContextType, 450 | RequireFields 451 | >; 452 | removeServiceFromGateway?: Resolver< 453 | ResolversTypes["Boolean"], 454 | ParentType, 455 | ContextType, 456 | RequireFields< 457 | MutationRemoveServiceFromGatewayArgs, 458 | "gatewayId" | "serviceId" 459 | > 460 | >; 461 | publishServiceSchema?: Resolver< 462 | ResolversTypes["ServiceSchema"], 463 | ParentType, 464 | ContextType, 465 | RequireFields 466 | >; 467 | }; 468 | 469 | export type SubscriptionResolvers< 470 | ContextType = any, 471 | ParentType extends ResolversParentTypes["Subscription"] = ResolversParentTypes["Subscription"] 472 | > = { 473 | gatewayVersionUpdated?: SubscriptionResolver< 474 | ResolversTypes["GatewayVersion"], 475 | "gatewayVersionUpdated", 476 | ParentType, 477 | ContextType, 478 | RequireFields 479 | >; 480 | }; 481 | 482 | export type Resolvers = { 483 | Service?: ServiceResolvers; 484 | DateTime?: GraphQLScalarType; 485 | ServiceSchema?: ServiceSchemaResolvers; 486 | GatewayVersion?: GatewayVersionResolvers; 487 | Gateway?: GatewayResolvers; 488 | Query?: QueryResolvers; 489 | Mutation?: MutationResolvers; 490 | Subscription?: SubscriptionResolvers; 491 | }; 492 | 493 | /** 494 | * @deprecated 495 | * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config. 496 | */ 497 | export type IResolvers = Resolvers; 498 | 499 | export type GetGatewayQueryVariables = Exact<{ 500 | id: Scalars["ID"]; 501 | }>; 502 | 503 | export type GetGatewayQuery = { __typename?: "Query" } & { 504 | gateway?: Maybe< 505 | { __typename?: "Gateway" } & Pick & { 506 | currentVersion?: Maybe< 507 | { __typename?: "GatewayVersion" } & Pick< 508 | GatewayVersion, 509 | "id" | "status" | "validationError" 510 | > & { 511 | serviceSchemas: Array< 512 | { __typename?: "ServiceSchema" } & Pick< 513 | ServiceSchema, 514 | "id" | "version" | "typeDefs" 515 | > & { 516 | service: { __typename?: "Service" } & Pick< 517 | Service, 518 | "name" | "url" 519 | >; 520 | } 521 | >; 522 | } 523 | >; 524 | } 525 | >; 526 | }; 527 | 528 | export type PublishServiceSchemaMutationVariables = Exact<{ 529 | input: ServiceSchemaInput; 530 | }>; 531 | 532 | export type PublishServiceSchemaMutation = { __typename?: "Mutation" } & { 533 | publishServiceSchema: { __typename?: "ServiceSchema" } & Pick< 534 | ServiceSchema, 535 | "id" | "version" | "typeDefs" 536 | >; 537 | }; 538 | 539 | export const GetGatewayDocument = gql` 540 | query getGateway($id: ID!) { 541 | gateway(id: $id) { 542 | id 543 | name 544 | currentVersion { 545 | id 546 | status 547 | validationError 548 | serviceSchemas { 549 | id 550 | version 551 | typeDefs 552 | service { 553 | name 554 | url 555 | } 556 | } 557 | } 558 | createdAt 559 | } 560 | } 561 | `; 562 | export const PublishServiceSchemaDocument = gql` 563 | mutation publishServiceSchema($input: ServiceSchemaInput!) { 564 | publishServiceSchema(input: $input) { 565 | id 566 | version 567 | typeDefs 568 | } 569 | } 570 | `; 571 | 572 | export type SdkFunctionWrapper = (action: () => Promise) => Promise; 573 | 574 | const defaultWrapper: SdkFunctionWrapper = (sdkFunction) => sdkFunction(); 575 | export function getSdk( 576 | client: GraphQLClient, 577 | withWrapper: SdkFunctionWrapper = defaultWrapper 578 | ) { 579 | return { 580 | getGateway(variables: GetGatewayQueryVariables): Promise { 581 | return withWrapper(() => 582 | client.request(print(GetGatewayDocument), variables) 583 | ); 584 | }, 585 | publishServiceSchema( 586 | variables: PublishServiceSchemaMutationVariables 587 | ): Promise { 588 | return withWrapper(() => 589 | client.request( 590 | print(PublishServiceSchemaDocument), 591 | variables 592 | ) 593 | ); 594 | }, 595 | }; 596 | } 597 | export type Sdk = ReturnType; 598 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "removeComments": true, 6 | "noImplicitAny": false, 7 | "moduleResolution": "node", 8 | "sourceMap": true, 9 | "baseUrl": ".", 10 | "strictNullChecks": true, 11 | "declaration": true, 12 | "outDir": "lib", 13 | "lib": ["esnext", "dom"], 14 | "paths": { 15 | "*": ["node_modules/*", "src/types/*"] 16 | } 17 | }, 18 | "include": ["./src/*"] 19 | } 20 | --------------------------------------------------------------------------------