Initial subscription impl

This commit is contained in:
Wyatt Johnson
2017-03-23 11:09:14 -06:00
parent 7e65ba6371
commit 63ef49d595
17 changed files with 533 additions and 235 deletions
+2
View File
@@ -83,6 +83,8 @@ app.use(passport.session());
// GraphQL Router
//==============================================================================
graph.createSubscriptionManager(app, '/api/v1/live');
// GraphQL endpoint.
app.use('/api/v1/graph/ql', apollo.graphqlExpress(graph.createGraphOptions));
+7 -3
View File
@@ -2,12 +2,13 @@
const app = require('../app');
const program = require('./commander');
const http = require('http');
const {createServer} = require('http');
const scraper = require('../services/scraper');
const mailer = require('../services/mailer');
const kue = require('../services/kue');
const mongoose = require('../services/mongoose');
const util = require('./util');
const {createSubscriptionManager} = require('../graph');
/**
* Get port from environment and store in Express.
@@ -20,7 +21,7 @@ app.set('port', port);
/**
* Create HTTP server.
*/
const server = http.createServer(app);
const server = createServer(app);
/**
* Event listener for HTTP server "error" event.
@@ -89,7 +90,10 @@ function startApp() {
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.listen(port, () => {
createSubscriptionManager(server, '/api/v1/live');
});
server.on('error', onError);
server.on('listening', onListening);
}
+107
View File
@@ -0,0 +1,107 @@
import React from 'react';
import {graphql} from 'react-apollo';
import gql from 'graphql-tag';
class Embed extends React.Component {
static propTypes = {
assetID: React.PropTypes.string.isRequired,
subscribeToNewComments: React.PropTypes.func.isRequired,
data: React.PropTypes.shape({
loading: React.PropTypes.bool.isRequired,
asset: React.PropTypes.object,
}).isRequired
}
componentWillMount() {
const {assetID} = this.props;
this.props.subscribeToNewComments({assetID});
}
render() {
console.log(this.props);
const {asset, loading} = this.props.data;
return (
<div>
<h1>Live Stream</h1>
<ul>
{!loading && asset && asset.comments && asset.comments.map((comment) => (
<li key={comment.id}>
<span>{comment.id} {comment.body}</span>
</li>
))}
</ul>
</div>
);
}
}
const COMMENT_QUERY = gql`
query Comment($assetID: ID!) {
asset(id: $assetID) {
comments {
id
body
user {
username
}
}
}
}
`;
const COMMENTS_SUBSCRIPTION = gql`
subscription onCommentAdded($assetID: ID!){
commentAdded(asset_id: $assetID) {
id
body
user {
username
}
}
}
`;
const withData = graphql(COMMENT_QUERY, {
options: ({assetID}) => ({
variables: {
assetID
},
}),
props: (props) => ({
...props,
subscribeToNewComments: ({assetID}) => {
return props.data.subscribeToMore({
document: COMMENTS_SUBSCRIPTION,
variables: {assetID},
updateQuery: (before, {subscriptionData}) => {
if (!subscriptionData.data) {
return before;
}
const newComment = subscriptionData.data.commentAdded;
if (!newComment) {
console.warn('last comment was null :/');
return before;
}
let after = {
...before,
asset: {
...before.asset,
comments: [newComment, ...before.asset.comments]
}
};
console.log('updateQuery', before, after);
return after;
}
});
}
})
});
export default withData(Embed);
@@ -0,0 +1,16 @@
import React from 'react';
import {render} from 'react-dom';
import {ApolloProvider} from 'react-apollo';
import {client} from 'coral-framework/services/client';
// import store from 'coral-framework/services/store';
import Embed from './Embed';
render(
<ApolloProvider client={client}>
<Embed assetID='8377903e-2601-47d9-af8a-1baab5651da9' />
</ApolloProvider>
, document.querySelector('#coralStream')
);
+11 -1
View File
@@ -1,6 +1,16 @@
import ApolloClient, {addTypename} from 'apollo-client';
import getNetworkInterface from './transport';
import {SubscriptionClient, addGraphQLSubscriptions} from 'subscriptions-transport-ws';
const wsClient = new SubscriptionClient('ws://localhost:3001/api/v1/live', {
reconnect: true
});
const networkInterface = getNetworkInterface();
const networkInterfaceWithSubscriptions = addGraphQLSubscriptions(
networkInterface,
wsClient,
);
export const client = new ApolloClient({
connectToDevTools: true,
queryTransformer: addTypename,
@@ -10,5 +20,5 @@ export const client = new ApolloClient({
}
return null;
},
networkInterface: getNetworkInterface()
networkInterface: networkInterfaceWithSubscriptions,
});
+4 -1
View File
@@ -31,7 +31,7 @@ const decorateContextPlugins = (context, contextPlugins) => contextPlugins.reduc
* Stores the request context.
*/
class Context {
constructor({user = null}) {
constructor({user = null}, pubsub) {
// Load the current logged in user to `user`, otherwise this'll be null.
if (user) {
@@ -46,6 +46,9 @@ class Context {
// Decorate the plugin context.
this.plugins = decorateContextPlugins(this, contextPlugins);
// Bind the publish/subscribe to the context.
this.pubsub = pubsub;
}
}
+28 -1
View File
@@ -1,7 +1,15 @@
const schema = require('./schema');
const Context = require('./context');
const {connectionOptions} = require('../services/redis');
const {RedisPubSub} = require('graphql-redis-subscriptions');
const {SubscriptionManager} = require('graphql-subscriptions');
const {SubscriptionServer} = require('subscriptions-transport-ws');
const pubsub = new RedisPubSub(connectionOptions);
module.exports = {
pubsub,
createGraphOptions: (req) => ({
// Schema is created already, so just include it.
@@ -9,6 +17,25 @@ module.exports = {
// Load in the new context here, this'll create the loaders + mutators for
// the lifespan of this request.
context: new Context(req)
context: new Context(req, pubsub)
}),
createSubscriptionManager: (server, path) => new SubscriptionServer({
subscriptionManager: new SubscriptionManager({
schema,
pubsub,
setupFunctions: {
commentAdded: (options, args) => ({
commentAdded: {
filter: (comment) => comment.asset_id === args.asset_id
},
}),
}
}),
// onConnect: (connectionParams, webSocket) => {
// console.log(webSocket.upgradeReq.headers);
// }
}, {
server,
path
})
};
+4 -1
View File
@@ -16,7 +16,7 @@ const Wordlist = require('../../services/wordlist');
* @param {String} [status='NONE'] the status of the new comment
* @return {Promise} resolves to the created comment
*/
const createComment = ({user, loaders: {Comments}}, {body, asset_id, parent_id = null}, status = 'NONE') => {
const createComment = ({user, loaders: {Comments}, pubsub}, {body, asset_id, parent_id = null}, status = 'NONE') => {
let tags = [];
if (user.hasRoles('ADMIN') || user.hasRoles('MODERATOR')) {
@@ -44,6 +44,9 @@ const createComment = ({user, loaders: {Comments}}, {body, asset_id, parent_id =
Comments.parentCountByAssetID.incr(asset_id);
}
Comments.countByAssetID.incr(asset_id);
// Publish the newly added comment via the subscription.
pubsub.publish('commentAdded', comment);
}
return comment;
+2
View File
@@ -16,6 +16,7 @@ const LikeAction = require('./like_action');
const RootMutation = require('./root_mutation');
const RootQuery = require('./root_query');
const Settings = require('./settings');
const Subscription = require('./subscription');
const UserError = require('./user_error');
const User = require('./user');
const ValidationUserError = require('./validation_user_error');
@@ -39,6 +40,7 @@ let resolvers = {
RootMutation,
RootQuery,
Settings,
Subscription,
UserError,
User,
ValidationUserError,
+7
View File
@@ -0,0 +1,7 @@
const Subscription = {
commentAdded(comment) {
return comment;
}
};
module.exports = Subscription;
+9
View File
@@ -706,6 +706,14 @@ type RootMutation {
removeCommentTag(id: ID!, tag: String!): RemoveCommentTagResponse
}
################################################################################
## Subscriptions
################################################################################
type Subscription {
commentAdded(asset_id: ID!): Comment
}
################################################################################
## Schema
################################################################################
@@ -713,4 +721,5 @@ type RootMutation {
schema {
query: RootQuery
mutation: RootMutation
subscription: Subscription
}
+22 -19
View File
@@ -50,45 +50,47 @@
"homepage": "https://github.com/coralproject/talk#readme",
"dependencies": {
"bcrypt": "^1.0.2",
"body-parser": "^1.15.2",
"body-parser": "^1.17.1",
"cli-table": "^0.3.1",
"commander": "^2.9.0",
"connect-redis": "^3.1.0",
"csurf": "^1.9.0",
"dataloader": "^1.2.0",
"debug": "^2.2.0",
"dataloader": "^1.3.0",
"debug": "^2.6.3",
"dotenv": "^4.0.0",
"ejs": "^2.5.2",
"ejs": "^2.5.6",
"env-rewrite": "^1.0.2",
"express": "^4.14.0",
"express-session": "^1.14.2",
"gql-merge": "^0.0.4",
"express": "^4.15.2",
"express-session": "^1.15.1",
"form-data": "^2.1.2",
"graphql": "^0.8.2",
"gql-merge": "^0.0.4",
"graphql": "^0.9.1",
"graphql-errors": "^2.1.0",
"graphql-server-express": "^0.5.0",
"graphql-tools": "^0.9.0",
"helmet": "^3.1.0",
"inquirer": "^3.0.1",
"jsonwebtoken": "^7.1.9",
"graphql-redis-subscriptions": "^1.1.5",
"graphql-server-express": "^0.6.0",
"graphql-subscriptions": "^0.3.1",
"graphql-tools": "^0.10.1",
"helmet": "^3.5.0",
"inquirer": "^3.0.6",
"jsonwebtoken": "^7.3.0",
"kue": "^0.11.5",
"linkify-it": "^2.0.3",
"lodash": "^4.16.6",
"metascraper": "^1.0.6",
"minimist": "^1.2.0",
"mongoose": "^4.6.5",
"morgan": "^1.7.0",
"natural": "^0.4.0",
"mongoose": "^4.9.1",
"morgan": "^1.8.1",
"natural": "^0.5.0",
"node-fetch": "^1.6.3",
"nodemailer": "^2.6.4",
"parse-duration": "^0.1.1",
"passport": "^0.3.2",
"passport-facebook": "^2.1.1",
"passport-local": "^1.0.0",
"react-apollo": "^0.10.0",
"react-apollo": "^1.0.0-rc.3",
"react-recaptcha": "^2.2.6",
"redis": "^2.6.5",
"uuid": "^2.0.3"
"redis": "^2.7.1",
"uuid": "^3.0.1"
},
"devDependencies": {
"apollo-client": "^0.8.3",
@@ -165,6 +167,7 @@
"regenerator": "^0.8.46",
"selenium-standalone": "^5.11.2",
"style-loader": "^0.13.1",
"subscriptions-transport-ws": "^0.5.5-alpha.0",
"supertest": "^2.0.1",
"timeago.js": "^2.0.3",
"webpack": "^2.2.1"
+2
View File
@@ -13,6 +13,8 @@ router.use('/:embed', (req, res, next) => {
return res.render('embed/stream', {customCssUrl, data});
});
case 'live-stream':
return res.render('embed/live-stream');
default:
// will return a 404.
+27 -23
View File
@@ -2,31 +2,35 @@ const redis = require('redis');
const debug = require('debug')('talk:redis');
const url = process.env.TALK_REDIS_URL || 'redis://localhost';
const connectionOptions = {
url,
retry_strategy: function(options) {
if (options.error && options.error.code === 'ECONNREFUSED') {
// End reconnecting on a specific error and flush all commands with a individual error
return new Error('The server refused the connection');
}
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands with a individual error
return new Error('Retry time exhausted');
}
if (options.times_connected > 10) {
// End reconnecting with built in error
return undefined;
}
// reconnect after
return Math.max(options.attempt * 100, 3000);
}
};
module.exports = {
connectionOptions,
createClient() {
let client = redis.createClient(url, {
retry_strategy: function(options) {
if (options.error && options.error.code === 'ECONNREFUSED') {
// End reconnecting on a specific error and flush all commands with a individual error
return new Error('The server refused the connection');
}
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands with a individual error
return new Error('Retry time exhausted');
}
if (options.times_connected > 10) {
// End reconnecting with built in error
return undefined;
}
// reconnect after
return Math.max(options.attempt * 100, 3000);
}
});
let client = redis.createClient(connectionOptions);
client.ping((err) => {
if (err) {
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<title>Live Stream</title>
</head>
<body>
<div id="coralStream"></div>
<script src="/client/embed/live-stream/bundle.js"></script>
</body>
</html>
+2 -1
View File
@@ -13,7 +13,8 @@ const buildTargets = [
];
const buildEmbeds = [
'stream'
'stream',
'live-stream'
];
module.exports = {
+273 -185
View File
@@ -34,6 +34,10 @@
version "0.0.30"
resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.30.tgz#a21717624cde9a48c2db53a4e500fc5c32a99bbc"
"@types/isomorphic-fetch@0.0.33":
version "0.0.33"
resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.33.tgz#3ea1b86f8b73e6a7430d01d4dbd5b1f63fd72718"
"@types/mime@*":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
@@ -49,6 +53,12 @@
"@types/express-serve-static-core" "*"
"@types/mime" "*"
"@types/ws@0.0.38":
version "0.0.38"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-0.0.38.tgz#42106fff4b422ca956734e29f0d73a6d893194d3"
dependencies:
"@types/node" "*"
abab@^1.0.0, abab@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
@@ -189,6 +199,20 @@ apollo-client@^0.8.3:
"@types/graphql" "^0.8.0"
"@types/isomorphic-fetch" "0.0.30"
apollo-client@^1.0.0-rc.2:
version "1.0.0-rc.5"
resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-1.0.0-rc.5.tgz#862bbd72a267a998627009665b5581ed13e26010"
dependencies:
graphql-anywhere "^3.0.1"
graphql-tag "^1.3.1"
redux "^3.4.0"
symbol-observable "^1.0.2"
whatwg-fetch "^2.0.0"
optionalDependencies:
"@types/async" "^2.0.31"
"@types/graphql" "^0.8.0"
"@types/isomorphic-fetch" "0.0.33"
"apparatus@>= 0.0.9":
version "0.0.9"
resolved "https://registry.yarnpkg.com/apparatus/-/apparatus-0.0.9.tgz#37dcd25834ad0b651076596291db823eeb1908bd"
@@ -323,7 +347,7 @@ async@1.x, async@^1.4.0, async@^1.4.2, async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@2.1.4, async@^2.1.2, async@^2.1.4:
async@2.1.4, async@^2.0.1, async@^2.1.2, async@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
dependencies:
@@ -1055,6 +1079,10 @@ babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0:
version "6.15.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
backo2@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
balanced-match@0.1.0, balanced-match@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a"
@@ -1079,9 +1107,9 @@ base64url@2.0.0, base64url@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
basic-auth@~1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290"
basic-auth@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
bcrypt-pbkdf@^1.0.0:
version "1.0.0"
@@ -1145,18 +1173,18 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.6"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
body-parser@^1.12.2, body-parser@^1.15.2:
version "1.16.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b"
body-parser@^1.12.2, body-parser@^1.17.1:
version "1.17.1"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47"
dependencies:
bytes "2.4.0"
content-type "~1.0.2"
debug "2.6.0"
debug "2.6.1"
depd "~1.1.0"
http-errors "~1.5.1"
http-errors "~1.6.1"
iconv-lite "0.4.15"
on-finished "~2.3.0"
qs "6.2.1"
qs "6.4.0"
raw-body "~2.2.0"
type-is "~1.6.14"
@@ -1734,12 +1762,12 @@ connect-redis@^3.1.0:
debug "^2.2.0"
redis "^2.1.0"
connect@3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198"
connect@3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e"
dependencies:
debug "~2.2.0"
finalhandler "0.5.0"
debug "2.6.1"
finalhandler "1.0.0"
parseurl "~1.3.1"
utils-merge "1.0.0"
@@ -2075,21 +2103,17 @@ data-uri-to-buffer@0:
version "0.0.4"
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz#46e13ab9da8e309745c8d01ce547213ebdb2fe3f"
dataloader@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.2.0.tgz#3f73ea657c492c860c1633348adc55ca9bf2107e"
date-format@^0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/date-format/-/date-format-0.0.0.tgz#09206863ab070eb459acea5542cbd856b11966b3"
dataloader@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.3.0.tgz#6fec5be4b30a712e4afd30b86b4334566b97673b"
date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
debug@*, debug@2, debug@2.6.0, debug@^2.1.1, debug@^2.2.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
debug@*, debug@2, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d"
dependencies:
ms "0.7.2"
@@ -2105,7 +2129,13 @@ debug@2.3.3:
dependencies:
ms "0.7.2"
debug@^0.7.2, debug@~0.7.4:
debug@2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
dependencies:
ms "0.7.2"
debug@~0.7.4:
version "0.7.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
@@ -2191,7 +2221,7 @@ delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
depd@~1.1.0:
depd@1.1.0, depd@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
@@ -2328,9 +2358,9 @@ ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
ejs@^2.5.2:
version "2.5.5"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77"
ejs@^2.5.6:
version "2.5.6"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88"
ejs@~0.8.3:
version "0.8.8"
@@ -2469,7 +2499,7 @@ es6-promise@3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
es6-promise@^3.0.2:
es6-promise@^3.0.2, es6-promise@^3.2.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
@@ -2483,10 +2513,6 @@ es6-set@~0.1.3:
es6-symbol "3"
event-emitter "~0.3.4"
es6-shim@^0.35.3:
version "0.35.3"
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26"
es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
@@ -2686,9 +2712,9 @@ esutils@^2.0.0, esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
etag@~1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8"
etag@~1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
event-emitter@~0.3.4:
version "0.3.4"
@@ -2709,6 +2735,10 @@ event-stream@~3.3.0:
stream-combiner "~0.0.4"
through "~2.3.1"
eventemitter3@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.2.tgz#20ce4891909ce9f35b088c94fab40e2c96f473ac"
events@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
@@ -2742,23 +2772,23 @@ exports-loader@^0.6.3:
loader-utils "0.2.x"
source-map "0.1.x"
express-session@^1.14.2:
version "1.15.0"
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.0.tgz#67131dd5b78a42bc57b50af0a14880265c03f919"
express-session@^1.15.1:
version "1.15.1"
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.1.tgz#9abba15971beea7ad98da5a4d25ed92ba4a2984e"
dependencies:
cookie "0.3.1"
cookie-signature "1.0.6"
crc "3.4.4"
debug "2.6.0"
debug "2.6.1"
depd "~1.1.0"
on-headers "~1.0.1"
parseurl "~1.3.1"
uid-safe "~2.1.3"
utils-merge "1.0.0"
express@^4.12.2, express@^4.14.0:
version "4.14.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.14.1.tgz#646c237f766f148c2120aff073817b9e4d7e0d33"
express@^4.12.2, express@^4.15.2:
version "4.15.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35"
dependencies:
accepts "~1.3.3"
array-flatten "1.1.1"
@@ -2766,23 +2796,25 @@ express@^4.12.2, express@^4.14.0:
content-type "~1.0.2"
cookie "0.3.1"
cookie-signature "1.0.6"
debug "~2.2.0"
debug "2.6.1"
depd "~1.1.0"
encodeurl "~1.0.1"
escape-html "~1.0.3"
etag "~1.7.0"
finalhandler "0.5.1"
fresh "0.3.0"
etag "~1.8.0"
finalhandler "~1.0.0"
fresh "0.5.0"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "~2.3.0"
parseurl "~1.3.1"
path-to-regexp "0.1.7"
proxy-addr "~1.1.3"
qs "6.2.0"
qs "6.4.0"
range-parser "~1.2.0"
send "0.14.2"
serve-static "~1.11.2"
send "0.15.1"
serve-static "1.12.1"
setprototypeof "1.0.3"
statuses "~1.3.1"
type-is "~1.6.14"
utils-merge "1.0.0"
vary "~1.1.0"
@@ -2890,23 +2922,15 @@ fill-range@^2.1.0:
repeat-element "^1.1.2"
repeat-string "^1.5.2"
finalhandler@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7"
finalhandler@1.0.0, finalhandler@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755"
dependencies:
debug "~2.2.0"
escape-html "~1.0.3"
on-finished "~2.3.0"
statuses "~1.3.0"
unpipe "~1.0.0"
finalhandler@0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd"
dependencies:
debug "~2.2.0"
debug "2.6.1"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.1"
statuses "~1.3.1"
unpipe "~1.0.0"
@@ -2999,9 +3023,9 @@ frameguard@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.0.0.tgz#7bcad469ee7b96e91d12ceb3959c78235a9272e9"
fresh@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
fresh@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
from@~0:
version "0.1.3"
@@ -3337,10 +3361,14 @@ graceful-fs@~2.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
graphql-anywhere@^2.0.0, graphql-anywhere@^2.1.0:
graphql-anywhere@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-2.1.0.tgz#888c0a1718db3ff866b313070747777380560f69"
graphql-anywhere@^3.0.0, graphql-anywhere@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-3.0.1.tgz#73531db861174c8f212eafb9f8e84944b38b4e5a"
graphql-docs@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/graphql-docs/-/graphql-docs-0.2.0.tgz#cf803f9c9d354fa03e89073d74e419261a5bfa74"
@@ -3356,35 +3384,57 @@ graphql-errors@^2.1.0:
babel-runtime "^6.6.1"
uuid "^2.0.2"
graphql-server-core@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/graphql-server-core/-/graphql-server-core-0.5.2.tgz#7e23fc516cb754e42c16f92928b595c354d6c8a7"
graphql-redis-subscriptions@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/graphql-redis-subscriptions/-/graphql-redis-subscriptions-1.1.5.tgz#69166bebd8d92243d6f8e80c97ebf4c588d80c8d"
dependencies:
es6-shim "^0.35.3"
async "^2.0.1"
graphql-subscriptions "^0.2.0"
redis "^2.6.3"
graphql-server-core@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/graphql-server-core/-/graphql-server-core-0.6.0.tgz#468625cba4a00f80275c065432faa481985f5a65"
optionalDependencies:
"@types/graphql" "^0.8.5"
graphql-server-express@^0.5.0:
version "0.5.2"
resolved "https://registry.yarnpkg.com/graphql-server-express/-/graphql-server-express-0.5.2.tgz#c358110ddb2f82939b4d4c9d97ffb5afded7944a"
graphql-server-express@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/graphql-server-express/-/graphql-server-express-0.6.0.tgz#516090b4add82e6ed2c4a70dd2d925031fdcc289"
dependencies:
graphql-server-core "^0.5.2"
graphql-server-module-graphiql "^0.5.2"
graphql-server-core "^0.6.0"
graphql-server-module-graphiql "^0.6.0"
optionalDependencies:
"@types/express" "^4.0.35"
"@types/graphql" "^0.8.6"
graphql-server-module-graphiql@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/graphql-server-module-graphiql/-/graphql-server-module-graphiql-0.5.2.tgz#7e2a0c78b0267e784f8483ce5633810baf558dee"
graphql-server-module-graphiql@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/graphql-server-module-graphiql/-/graphql-server-module-graphiql-0.6.0.tgz#e37634b05f000731981e8ed13103f9a5861e5da0"
graphql-tag@^1.1.1, graphql-tag@^1.2.3:
graphql-subscriptions@^0.2.0:
version "0.2.3"
resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.2.3.tgz#75f9a02cb6d2b456b1703ce95670f793dacee607"
dependencies:
es6-promise "^3.2.1"
graphql-subscriptions@^0.3.0, graphql-subscriptions@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.3.1.tgz#0cedc2d507420cf26cf414080b079f05402f0303"
dependencies:
es6-promise "^3.2.1"
graphql-tag@^1.1.1, graphql-tag@^1.2.4, graphql-tag@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-1.3.2.tgz#7abb3a8fd9f3415d07163314ed237061c785b759"
graphql-tag@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-1.2.3.tgz#74c62443fbf3e693647426d7359f7e3e6ce7dace"
graphql-tools@^0.9.0:
version "0.9.2"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-0.9.2.tgz#c3f42d0b78d2d6c57cea5ef2894863de34af9a11"
graphql-tools@^0.10.1:
version "0.10.1"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-0.10.1.tgz#274aa338d50b1c0b3ed6936eafd8ed3a19ed1828"
dependencies:
deprecated-decorator "^0.1.6"
lodash "^4.3.0"
@@ -3398,11 +3448,11 @@ graphql@^0.7.2:
dependencies:
iterall "1.0.2"
graphql@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.8.2.tgz#eb1bb524b38104bbf2c9157f9abc67db2feba7d2"
graphql@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.9.1.tgz#f4d154cbec054d4a5d3b1be95f23435c09aa86c8"
dependencies:
iterall "1.0.2"
iterall "1.0.3"
growl@1.8.1:
version "1.8.1"
@@ -3470,9 +3520,9 @@ hawk@~3.1.3:
hoek "2.x.x"
sntp "1.x.x"
helmet-csp@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.3.0.tgz#bc341939dfef5266cc817abcf53f079f61fe7e3f"
helmet-csp@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.4.0.tgz#7e53a157167a0645aadd7177d12ae6c605c1842e"
dependencies:
camelize "1.0.0"
content-security-policy-builder "1.1.0"
@@ -3480,15 +3530,15 @@ helmet-csp@2.3.0:
lodash.reduce "4.6.0"
platform "1.3.3"
helmet@^3.1.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.4.0.tgz#05a9437486b05ca219ed8d21dc5e3b6ec0c18118"
helmet@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.5.0.tgz#e1d6de27d2e3317d3182e00d672df3d0e1e12539"
dependencies:
connect "3.5.0"
connect "3.6.0"
dns-prefetch-control "0.1.0"
dont-sniff-mimetype "1.0.0"
frameguard "3.0.0"
helmet-csp "2.3.0"
helmet-csp "2.4.0"
hide-powered-by "1.0.0"
hpkp "2.0.0"
hsts "2.0.0"
@@ -3531,9 +3581,9 @@ home-or-tmp@^2.0.0:
os-homedir "^1.0.0"
os-tmpdir "^1.0.1"
hooks-fixed@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-1.2.0.tgz#0d2772d4d7d685ff9244724a9f0b5b2559aac96b"
hooks-fixed@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba"
hosted-git-info@^2.1.4:
version "2.1.5"
@@ -3584,7 +3634,7 @@ htmlparser2@~3.8.1:
entities "1.0"
readable-stream "1.1"
http-errors@~1.5.0, http-errors@~1.5.1:
http-errors@~1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
dependencies:
@@ -3592,6 +3642,15 @@ http-errors@~1.5.0, http-errors@~1.5.1:
setprototypeof "1.0.2"
statuses ">= 1.3.1 < 2"
http-errors@~1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
dependencies:
depd "1.1.0"
inherits "2.0.3"
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
http-proxy-agent@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a"
@@ -3764,9 +3823,9 @@ inquirer@0.8.2:
rx "^2.4.3"
through "^2.3.6"
inquirer@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.1.tgz#6dfbffaf4d697dd76c8fe349f919de01c28afc4d"
inquirer@^3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
dependencies:
ansi-escapes "^1.1.0"
chalk "^1.0.0"
@@ -4143,6 +4202,10 @@ iterall@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.0.2.tgz#41a2e96ce9eda5e61c767ee5dc312373bb046e91"
iterall@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.0.3.tgz#e0b31958f835013c323ff0b10943829ac69aa4b7"
jade@0.26.3:
version "0.26.3"
resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c"
@@ -4284,9 +4347,9 @@ jsonpointer@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
jsonwebtoken@^7.1.9:
version "7.2.1"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.2.1.tgz#0fc7217473fc02b4c9aa1e188aa70b51bba4fccb"
jsonwebtoken@^7.3.0:
version "7.3.0"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.3.0.tgz#85118d6a70e3fccdf14389f4e7a1c3f9c8a9fbba"
dependencies:
joi "^6.10.1"
jws "^3.1.4"
@@ -4333,9 +4396,9 @@ jws@^3.1.4:
jwa "^1.1.4"
safe-buffer "^5.0.1"
kareem@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.2.0.tgz#59851e833feb1ce6cf60000e0c23acf75c8a3547"
kareem@1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.2.1.tgz#acdb8c8119845834abbfa58ade1cf9dea63dc752"
keymaster@^1.6.2:
version "1.6.2"
@@ -4641,6 +4704,10 @@ lodash.isobject@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"
lodash.isstring@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
lodash.keys@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
@@ -4711,14 +4778,6 @@ lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.6, lo
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
log4js@*:
version "1.1.0"
resolved "https://registry.yarnpkg.com/log4js/-/log4js-1.1.0.tgz#c7d2b616d91bbf47cc65fb79d6fe04581c8096fa"
dependencies:
debug "^2.2.0"
semver "^5.3.0"
streamroller "^0.2.1"
longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
@@ -4972,44 +5031,44 @@ moment@2.x.x, moment@^2.10.3:
version "2.17.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82"
mongodb-core@2.1.7:
version "2.1.7"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.7.tgz#6a27909b98142ef2508d924c274969008954fa29"
mongodb-core@2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.9.tgz#85aa71ee4fb716196e06b787557bf139f801daf5"
dependencies:
bson "~1.0.4"
require_optional "~1.0.0"
mongodb@2.2.22:
version "2.2.22"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.22.tgz#d67c588fc08f922db19754b1d2e03e2d7d1319fb"
mongodb@2.2.25:
version "2.2.25"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.25.tgz#d3b25dad00eda2bdfcbc996210ba082ac686a6b6"
dependencies:
es6-promise "3.2.1"
mongodb-core "2.1.7"
mongodb-core "2.1.9"
readable-stream "2.1.5"
mongoose@^4.6.5:
version "4.8.1"
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.8.1.tgz#1dbd3014fb39e9344271a53ec5dd741205864aae"
mongoose@^4.9.1:
version "4.9.1"
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.9.1.tgz#e621d9e7356f46d1e39980a71063857405fa9099"
dependencies:
async "2.1.4"
bson "~1.0.4"
hooks-fixed "1.2.0"
kareem "1.2.0"
mongodb "2.2.22"
hooks-fixed "2.0.0"
kareem "1.2.1"
mongodb "2.2.25"
mpath "0.2.1"
mpromise "0.5.5"
mquery "2.2.1"
mquery "2.3.0"
ms "0.7.2"
muri "1.2.0"
muri "1.2.1"
regexp-clone "0.0.1"
sliced "1.0.1"
morgan@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.7.0.tgz#eb10ca8e50d1abe0f8d3dad5c0201d052d981c62"
morgan@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.8.1.tgz#f93023d3887bd27b78dfd6023cea7892ee27a4b1"
dependencies:
basic-auth "~1.0.3"
debug "~2.2.0"
basic-auth "~1.1.0"
debug "2.6.1"
depd "~1.1.0"
on-finished "~2.3.0"
on-headers "~1.0.1"
@@ -5022,9 +5081,9 @@ mpromise@0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6"
mquery@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.2.1.tgz#aa31076419adce2b06e9757f4cfc5d7f371b47ce"
mquery@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.3.0.tgz#3d1717ad8958d0c99e42ea2461a109f3e5f3e458"
dependencies:
bluebird "2.10.2"
debug "2.2.0"
@@ -5039,9 +5098,9 @@ ms@0.7.2, ms@^0.7.1:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
muri@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.0.tgz#b86383c902920b09ebe62af0e75c94de5f33cd3d"
muri@1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c"
mute-stream@0.0.4:
version "0.0.4"
@@ -5071,12 +5130,11 @@ natural@^0.2.0:
sylvester ">= 0.0.12"
underscore ">=1.3.1"
natural@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/natural/-/natural-0.4.0.tgz#3eb692d956a76ff05f4a379a277d455333906764"
natural@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/natural/-/natural-0.5.0.tgz#55a9bb68eccf5ece5535486004a57de264ae3180"
dependencies:
apparatus ">= 0.0.9"
log4js "*"
sylvester ">= 0.0.12"
underscore ">=1.3.1"
@@ -5424,6 +5482,10 @@ optionator@^0.8.1, optionator@^0.8.2:
type-check "~0.3.2"
wordwrap "~1.0.0"
options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
os-browserify@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
@@ -6351,13 +6413,9 @@ q@^1.1.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
qs@6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
qs@6.2.1, qs@^6.1.0, qs@^6.2.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
qs@6.4.0, qs@^6.1.0, qs@^6.2.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
qs@~6.3.0:
version "6.3.0"
@@ -6430,11 +6488,13 @@ react-addons-test-utils@15.3.2:
version "15.3.2"
resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.3.2.tgz#c09a44f583425a4a9c1b38444d7a6c3e6f0f41f6"
react-apollo@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-0.10.1.tgz#97fd50855f8575672aa68330b9c64a201cd13343"
react-apollo@^1.0.0-rc.3:
version "1.0.0-rc.3"
resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-1.0.0-rc.3.tgz#a1d613785d1f07dcf012d7cde4f2c3a0507ceb03"
dependencies:
graphql-anywhere "^2.0.0"
apollo-client "^1.0.0-rc.2"
graphql-anywhere "^3.0.0"
graphql-tag "^1.3.1"
hoist-non-react-statics "^1.2.0"
invariant "^2.2.1"
lodash.flatten "^4.2.0"
@@ -6547,7 +6607,7 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
readable-stream@1.1, readable-stream@1.1.x, readable-stream@^1.1.7:
readable-stream@1.1, readable-stream@1.1.x:
version "1.1.13"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
dependencies:
@@ -6632,15 +6692,23 @@ redis-commands@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b"
redis-parser@^2.0.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.4.0.tgz#018ea743077aae944d0b798b2fd12587320bf3c9"
redis-parser@^2.0.0, redis-parser@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.5.0.tgz#79fc2b1d4a6e4d2870b35368433639271fca2617"
redis@^0.12.1:
version "0.12.1"
resolved "https://registry.yarnpkg.com/redis/-/redis-0.12.1.tgz#64df76ad0fc8acebaebd2a0645e8a48fac49185e"
redis@^2.1.0, redis@^2.6.5, redis@~2.6.0-2:
redis@^2.1.0, redis@^2.6.3, redis@^2.7.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/redis/-/redis-2.7.1.tgz#7d56f7875b98b20410b71539f1d878ed58ebf46a"
dependencies:
double-ended-queue "^2.1.0-0"
redis-commands "^1.2.0"
redis-parser "^2.5.0"
redis@~2.6.0-2:
version "2.6.5"
resolved "https://registry.yarnpkg.com/redis/-/redis-2.6.5.tgz#87c1eff4a489f94b70871f3d08b6988f23a95687"
dependencies:
@@ -6964,32 +7032,32 @@ semver@~5.0.1:
version "5.0.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
send@0.14.2:
version "0.14.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef"
send@0.15.1:
version "0.15.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f"
dependencies:
debug "~2.2.0"
debug "2.6.1"
depd "~1.1.0"
destroy "~1.0.4"
encodeurl "~1.0.1"
escape-html "~1.0.3"
etag "~1.7.0"
fresh "0.3.0"
http-errors "~1.5.1"
etag "~1.8.0"
fresh "0.5.0"
http-errors "~1.6.1"
mime "1.3.4"
ms "0.7.2"
on-finished "~2.3.0"
range-parser "~1.2.0"
statuses "~1.3.1"
serve-static@~1.11.2:
version "1.11.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.2.tgz#2cf9889bd4435a320cc36895c9aa57bd662e6ac7"
serve-static@1.12.1:
version "1.12.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039"
dependencies:
encodeurl "~1.0.1"
escape-html "~1.0.3"
parseurl "~1.3.1"
send "0.14.2"
send "0.15.1"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
@@ -7007,6 +7075,10 @@ setprototypeof@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
setprototypeof@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
sha.js@^2.3.6:
version "2.4.8"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
@@ -7191,7 +7263,7 @@ stable@~0.1.3:
version "0.1.5"
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.5.tgz#08232f60c732e9890784b5bed0734f8b32a887b9"
"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1:
"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
@@ -7232,14 +7304,6 @@ stream-to@~0.2.0:
version "0.2.2"
resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d"
streamroller@^0.2.1:
version "0.2.2"
resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.2.2.tgz#a13420e04169e573db068f5920ee23d881abfe33"
dependencies:
date-format "^0.0.0"
debug "^0.7.2"
readable-stream "^1.1.7"
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@@ -7332,6 +7396,19 @@ stylus@0.54.5, stylus@~0.54.5:
sax "0.5.x"
source-map "0.1.x"
subscriptions-transport-ws@^0.5.5-alpha.0:
version "0.5.5-alpha.0"
resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.5.5-alpha.0.tgz#f7ac4f8889fa032fa44f9d68459d552e3af41c7c"
dependencies:
"@types/ws" "0.0.38"
backo2 "^1.0.2"
eventemitter3 "^2.0.2"
graphql-subscriptions "^0.3.0"
graphql-tag "^1.2.4"
lodash.isobject "^3.0.2"
lodash.isstring "^4.0.1"
ws "^1.1.0"
sugarss@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-0.2.0.tgz#ac34237563327c6ff897b64742bf6aec190ad39e"
@@ -7663,6 +7740,10 @@ uid2@0.0.x:
version "0.0.3"
resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
undefsafe@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f"
@@ -7953,6 +8034,13 @@ write@^0.2.1:
dependencies:
mkdirp "^0.5.1"
ws@^1.1.0:
version "1.1.4"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61"
dependencies:
options ">=0.0.5"
ultron "1.0.x"
x-xss-protection@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.0.0.tgz#898afb93869b24661cf9c52f9ee8db8ed0764dd9"