diff --git a/.circleci/config.yml b/.circleci/config.yml index c79d8e92fa1b7..3c51012aad748 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,7 +44,7 @@ test-save-npm-cache: &test-save-npm-cache - ./node_modules test-docker-image: &test-docker-image - circleci/node:8.11-stretch-browsers + circleci/node:8.15-stretch-browsers test-with-oplog: &test-with-oplog <<: *defaults @@ -70,8 +70,8 @@ jobs: build: <<: *defaults docker: - - image: circleci/node:8.11-stretch - - image: mongo:3.2 + - image: circleci/node:8.15-stretch + - image: mongo:3.4 steps: - checkout @@ -135,13 +135,15 @@ jobs: keys: - meteor-cache-{{ checksum ".circleci/config.yml" }}-{{ checksum ".meteor/versions" }} - - restore_cache: - keys: - - livechat-meteor-cache-{{ checksum ".circleci/config.yml" }}-{{ checksum "packages/rocketchat-livechat/.app/.meteor/versions" }} - - - restore_cache: - keys: - - livechat-node-modules-cache-{{ checksum ".circleci/config.yml" }}-{{ checksum "packages/rocketchat-livechat/.app/package.json" }} + # To reduce memory need during actual build, build the packages solely first + - run: + name: Build a Meteor cache + command: | + # to do this we can clear the main files and it build the rest + echo "" > server/main.js + echo "" > client/main.js + meteor build --server-only --debug --directory /tmp/build-temp + git checkout -- server/main.js client/main.js - run: name: Build Rocket.Chat @@ -236,7 +238,7 @@ jobs: deploy: <<: *defaults docker: - - image: circleci/node:8.11-stretch + - image: circleci/node:8.15-stretch steps: - attach_workspace: @@ -320,6 +322,7 @@ jobs: echo "Build official Docker image" cp ~/repo/.docker/Dockerfile . + cp ~/repo/.docker/startup.sh . docker build -t assistify/chat:develop . docker push assistify/chat:develop @@ -332,6 +335,79 @@ jobs: exit 0 fi; + pr-build: + <<: *defaults + docker: + - image: circleci/node:8.15-stretch + + steps: + - checkout + + - restore_cache: + keys: + - node-modules-cache-{{ checksum ".circleci/config.yml" }}-{{ checksum "package.json" }} + + - restore_cache: + keys: + - meteor-{{ checksum ".circleci/config.yml" }}-{{ checksum ".meteor/release" }} + + - run: + name: Install Meteor + command: | + # Restore bin from cache + set +e + METEOR_SYMLINK_TARGET=$(readlink ~/.meteor/meteor) + METEOR_TOOL_DIRECTORY=$(dirname "$METEOR_SYMLINK_TARGET") + set -e + LAUNCHER=$HOME/.meteor/$METEOR_TOOL_DIRECTORY/scripts/admin/launch-meteor + if [ -e $LAUNCHER ] + then + echo "Cached Meteor bin found, restoring it" + sudo cp "$LAUNCHER" "/usr/local/bin/meteor" + else + echo "No cached Meteor bin found." + fi + + # only install meteor if bin isn't found + command -v meteor >/dev/null 2>&1 || curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh + + - run: + name: Versions + command: | + npm --versions + node -v + meteor --version + meteor npm --versions + meteor node -v + git version + + - run: + name: Meteor npm install + command: | + # rm -rf node_modules + # rm -f package-lock.json + meteor npm install + + - restore_cache: + keys: + - meteor-cache-{{ checksum ".circleci/config.yml" }}-{{ checksum ".meteor/versions" } + + - run: + name: Build Rocket.Chat + environment: + TOOL_NODE_FLAGS: --max_old_space_size=3072 + command: | + meteor build --server-only /tmp/build-pr + + + - persist_to_workspace: + root: /tmp/ + paths: + - build-pr + + - store_artifacts: + path: /tmp/build-pr + pr-image-build: <<: *defaults @@ -399,6 +475,7 @@ workflows: - deploy: requires: - image-build + - image-build-prod - test-with-oplog-mongo-3-2 - test-with-oplog-mongo-3-4 - test-with-oplog-mongo-3-6 @@ -410,16 +487,22 @@ workflows: - master tags: only: /^v[0-9]+\.[0-9]+\.[0-9]-[0-9]+\.[0-9]+\.[0-9]+$/ - - image-build: + - image-build-prod: requires: - hold filters: branches: only: - - develop - master tags: only: /^v[0-9]+\.[0-9]+\.[0-9]-[0-9]+\.[0-9]+\.[0-9]+$/ + - image-build: + filters: + branches: + only: + - develop + tags: + only: /^v[0-9]+\.[0-9]+\.[0-9]-[0-9]+\.[0-9]+\.[0-9]+$/ - hold: type: approval requires: diff --git a/.meteor/packages b/.meteor/packages index 95b455acb1476..eefefd7c8084c 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -15,32 +15,31 @@ blaze-html-templates check@1.3.1 ddp-rate-limiter@1.0.7 ddp-common@1.4.0 -dynamic-import@0.5.0 +dynamic-import@0.5.1 ecmascript@0.12.4 ejson@1.1.0 email@1.2.3 fastclick@1.0.13 -http@1.4.1 +http@1.4.2 jquery@1.11.10 logging@1.1.20 meteor-base@1.4.0 mobile-experience@1.0.5 -mongo@1.6.0 +mongo@1.6.2 random@1.1.0 rate-limit@1.0.9 -reactive-dict@1.2.1 +reactive-dict@1.3.0 reactive-var@1.0.11 -reload@1.2.0 +reload@1.3.0 service-configuration@1.0.11 session@1.2.0 shell-server@0.4.0 spacebars -standard-minifier-js@2.4.0 +standard-minifier-js@2.4.1 tracker@1.2.0 #rocketchat:google-natural-language rocketchat:livechat -rocketchat:monitoring rocketchat:streamer rocketchat:version @@ -80,23 +79,22 @@ littledata:synced-cron edgee:slingshot jalik:ufs-local@0.2.5 -accounts-base -accounts-oauth -autoupdate -babel-compiler -google-oauth +accounts-base@1.4.3 +accounts-oauth@1.1.16 +autoupdate@1.6.0 +babel-compiler@7.3.4 +google-oauth@1.2.6 htmljs less matb33:collection-hooks meteorhacks:inject-initial -oauth -oauth2 +oauth@1.2.8 +oauth2@1.2.1 raix:eventemitter -routepolicy -sha -swydo:graphql +routepolicy@1.1.0 +sha@1.0.9 templating -webapp -webapp-hashing +webapp@1.7.3 +webapp-hashing@1.0.9 rocketchat:oauth2-server rocketchat:i18n diff --git a/.meteor/release b/.meteor/release index 91e05fc15b2fe..97064e19937b1 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.8.0.2 +METEOR@1.8.1 diff --git a/.meteor/versions b/.meteor/versions index babbbf8f8b29e..d56d3c0bca483 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,17 +1,17 @@ -accounts-base@1.4.3 +accounts-base@1.4.4 accounts-facebook@1.3.2 accounts-github@1.4.2 -accounts-google@1.3.2 +accounts-google@1.3.3 accounts-meteor-developer@1.4.2 accounts-oauth@1.1.16 accounts-password@1.5.1 accounts-twitter@1.4.2 aldeed:simple-schema@1.5.4 allow-deny@1.1.0 -autoupdate@1.5.0 -babel-compiler@7.2.4 +autoupdate@1.6.0 +babel-compiler@7.3.4 babel-runtime@1.3.0 -base64@1.0.11 +base64@1.0.12 binary-heap@1.0.11 blaze@2.3.3 blaze-html-templates@1.1.2 @@ -28,13 +28,13 @@ ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 ddp-rate-limiter@1.0.7 -ddp-server@2.2.0 +ddp-server@2.3.0 deepwell:bootstrap-datepicker2@1.3.0 deps@1.0.12 diff-sequence@1.1.1 dispatch:run-as-user@1.1.1 dynamic-import@0.5.1 -ecmascript@0.12.4 +ecmascript@0.12.7 ecmascript-runtime@0.7.0 ecmascript-runtime-client@0.8.0 ecmascript-runtime-server@0.7.1 @@ -42,9 +42,9 @@ edgee:slingshot@0.7.1 ejson@1.1.0 email@1.2.3 es5-shim@4.8.0 -facebook-oauth@1.5.0 +facebook-oauth@1.6.0 fastclick@1.0.13 -fetch@0.1.0 +fetch@0.1.1 francocatena:status@1.5.3 geojson-utils@1.0.10 github-oauth@1.2.2 @@ -79,24 +79,23 @@ localstorage@1.2.0 logging@1.1.20 matb33:collection-hooks@0.8.4 mdg:validation-error@0.5.1 -meteor@1.9.2 +meteor@1.9.3 meteor-base@1.4.0 meteor-developer-oauth@1.2.1 meteorhacks:inject-initial@1.0.4 -meteorhacks:meteorx@1.4.1 meteorspark:util@0.2.0 -minifier-css@1.4.1 -minifier-js@2.4.0 +minifier-css@1.4.2 +minifier-js@2.4.1 minimongo@1.4.5 mizzao:autocomplete@0.5.1 mizzao:timesync@0.3.4 mobile-experience@1.0.5 mobile-status-bar@1.0.14 -modern-browsers@0.1.3 +modern-browsers@0.1.4 modules@0.13.0 modules-runtime@0.10.3 -mongo@1.6.0 -mongo-decimal@0.1.0 +mongo@1.6.3 +mongo-decimal@0.1.1 mongo-dev-server@1.1.0 mongo-id@1.0.7 mongo-livedata@1.0.12 @@ -105,13 +104,13 @@ mystor:device-detection@0.2.0 nimble:restivus@0.8.12 nooitaf:colors@1.1.2_1 npm-bcrypt@0.9.3 -npm-mongo@3.1.1 -oauth@1.2.7 +npm-mongo@3.1.2 +oauth@1.2.8 oauth1@1.2.2 oauth2@1.2.1 observe-sequence@1.0.16 ordered-dict@1.1.0 -ostrio:cookies@2.3.0 +ostrio:cookies@2.4.0 pauli:accounts-linkedin@5.0.0 pauli:linkedin-oauth@5.0.0 promise@0.11.2 @@ -121,14 +120,13 @@ raix:handlebar-helpers@0.2.5 raix:ui-dropped-event@0.0.7 random@1.1.0 rate-limit@1.0.9 -reactive-dict@1.2.1 +reactive-dict@1.3.0 reactive-var@1.0.11 -reload@1.2.0 +reload@1.3.0 retry@1.1.0 rocketchat:i18n@0.0.1 rocketchat:livechat@0.0.1 rocketchat:mongo-config@0.0.1 -rocketchat:monitoring@2.30.2_3 rocketchat:oauth2-server@2.1.0 rocketchat:push@3.3.1 rocketchat:streamer@1.0.2 @@ -143,8 +141,7 @@ socket-stream-client@0.2.2 spacebars@1.0.15 spacebars-compiler@1.1.3 srp@1.0.12 -standard-minifier-js@2.4.0 -swydo:graphql@0.4.0 +standard-minifier-js@2.4.1 tap:i18n@1.8.2 templating@1.3.2 templating-compiler@1.3.3 @@ -157,5 +154,5 @@ twitter-oauth@1.2.0 ui@1.0.13 underscore@1.0.10 url@1.2.0 -webapp@1.7.2 +webapp@1.7.4 webapp-hashing@1.0.9 diff --git a/.snapcraft/resources/preparenode b/.snapcraft/resources/preparenode index f6e0c58d3cc54..a9f4807fed1fd 100755 --- a/.snapcraft/resources/preparenode +++ b/.snapcraft/resources/preparenode @@ -1,6 +1,6 @@ #!/bin/bash -node_version="v8.11.3" +node_version="v8.15.1" unamem="$(uname -m)" if [[ $unamem == *aarch64* ]]; then diff --git a/app/assets/server/assets.js b/app/assets/server/assets.js index 7dcf409e6e478..bc76743ea1c6b 100644 --- a/app/assets/server/assets.js +++ b/app/assets/server/assets.js @@ -495,7 +495,7 @@ WebApp.connectHandlers.use('/assets/', Meteor.bindEnvironment(function(req, res, if (defaultUrl) { const assetUrl = format && ['png', 'svg'].includes(format) ? defaultUrl.replace(/(svg|png)$/, format) : defaultUrl; req.url = `/${ assetUrl }`; - WebAppInternals.staticFilesMiddleware(WebAppInternals.staticFiles, req, res, next); + WebAppInternals.staticFilesMiddleware(WebAppInternals.staticFilesByArch, req, res, next); } else { res.writeHead(404); res.end(); diff --git a/app/graphql/README.md b/app/graphql/README.md deleted file mode 100644 index 712c36fd39aef..0000000000000 --- a/app/graphql/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# rocketchat:graphql - -GraphQL API diff --git a/app/graphql/index.js b/app/graphql/index.js deleted file mode 100644 index ca39cd0df4b1a..0000000000000 --- a/app/graphql/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './server/index'; diff --git a/app/graphql/server/api.js b/app/graphql/server/api.js deleted file mode 100644 index 60e56262e109a..0000000000000 --- a/app/graphql/server/api.js +++ /dev/null @@ -1,79 +0,0 @@ -import { graphqlExpress, graphiqlExpress } from 'apollo-server-express'; -import { JSAccountsContext as jsAccountsContext } from '@accounts/graphql-api'; -import { SubscriptionServer } from 'subscriptions-transport-ws'; -import { execute, subscribe } from 'graphql'; -import { Meteor } from 'meteor/meteor'; -import { WebApp } from 'meteor/webapp'; -import bodyParser from 'body-parser'; -import express from 'express'; -import cors from 'cors'; - -import { executableSchema } from './schema'; -import { settings } from '../../settings'; - - -const subscriptionPort = settings.get('Graphql_Subscription_Port') || 3100; - -// the Meteor GraphQL server is an Express server -const graphQLServer = express(); - -graphQLServer.disable('x-powered-by'); - -if (settings.get('Graphql_CORS')) { - graphQLServer.use(cors()); -} - -graphQLServer.use('/api/graphql', (req, res, next) => { - if (settings.get('Graphql_Enabled')) { - next(); - } else { - res.status(400).send('Graphql is not enabled in this server'); - } -}); - -graphQLServer.use( - '/api/graphql', - bodyParser.json(), - graphqlExpress((request) => ({ - schema: executableSchema, - context: jsAccountsContext(request), - formatError: (e) => ({ - message: e.message, - locations: e.locations, - path: e.path, - }), - debug: Meteor.isDevelopment, - })) -); - -graphQLServer.use( - '/graphiql', - graphiqlExpress({ - endpointURL: '/api/graphql', - subscriptionsEndpoint: `ws://localhost:${ subscriptionPort }`, - }) -); - -const startSubscriptionServer = () => { - if (settings.get('Graphql_Enabled')) { - SubscriptionServer.create({ - schema: executableSchema, - execute, - subscribe, - onConnect: (connectionParams) => ({ authToken: connectionParams.Authorization }), - }, - { - port: subscriptionPort, - host: process.env.BIND_IP || '0.0.0.0', - }); - - console.log('GraphQL Subscription server runs on port:', subscriptionPort); - } -}; - -WebApp.onListening(() => { - startSubscriptionServer(); -}); - -// this binds the specified paths to the Express server running Apollo + GraphiQL -WebApp.connectHandlers.use(graphQLServer); diff --git a/app/graphql/server/helpers/authenticated.js b/app/graphql/server/helpers/authenticated.js deleted file mode 100644 index 4e542109459cc..0000000000000 --- a/app/graphql/server/helpers/authenticated.js +++ /dev/null @@ -1,5 +0,0 @@ -import { AccountsServer } from '../../../accounts'; -// import { authenticated as _authenticated } from '@accounts/graphql-api'; -import { authenticated as _authenticated } from '../mocks/accounts/graphql-api'; - -export const authenticated = (resolver) => _authenticated(AccountsServer, resolver); diff --git a/app/graphql/server/helpers/dateToFloat.js b/app/graphql/server/helpers/dateToFloat.js deleted file mode 100644 index faf206706f1bf..0000000000000 --- a/app/graphql/server/helpers/dateToFloat.js +++ /dev/null @@ -1,5 +0,0 @@ -export function dateToFloat(date) { - if (date) { - return new Date(date).getTime(); - } -} diff --git a/app/graphql/server/index.js b/app/graphql/server/index.js deleted file mode 100644 index c19d98f29eb55..0000000000000 --- a/app/graphql/server/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import './settings'; -import './api'; diff --git a/app/graphql/server/mocks/accounts/graphql-api.js b/app/graphql/server/mocks/accounts/graphql-api.js deleted file mode 100644 index 4dc6a6783eca5..0000000000000 --- a/app/graphql/server/mocks/accounts/graphql-api.js +++ /dev/null @@ -1,21 +0,0 @@ -// Same as here: https://github.com/js-accounts/graphql/blob/master/packages/graphql-api/src/utils/authenticated-resolver.js -// except code below works -// It might be like that because of async/await, -// maybe Promise is not wrapped with Fiber -// See: https://github.com/meteor/meteor/blob/a362e20a37547362b581fed52f7171d022e83b62/packages/promise/server.js -// Opened issue: https://github.com/js-accounts/graphql/issues/16 -export const authenticated = (Accounts, func) => async (root, args, context, info) => { - const { authToken } = context; - - if (!authToken || authToken === '' || authToken === null) { - throw new Error('Unable to find authorization token in request'); - } - - const userObject = await Accounts.resumeSession(authToken); - - if (userObject === null) { - throw new Error('Invalid or expired token!'); - } - - return func(root, args, Object.assign(context, { user: userObject }), info); -}; diff --git a/app/graphql/server/resolvers/accounts/OauthProvider-type.js b/app/graphql/server/resolvers/accounts/OauthProvider-type.js deleted file mode 100644 index 0444479b4bf37..0000000000000 --- a/app/graphql/server/resolvers/accounts/OauthProvider-type.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/accounts/OauthProvider-type.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/accounts/index.js b/app/graphql/server/resolvers/accounts/index.js deleted file mode 100644 index 8d49638291a71..0000000000000 --- a/app/graphql/server/resolvers/accounts/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import { createJSAccountsGraphQL } from '@accounts/graphql-api'; -import { mergeTypes, mergeResolvers } from 'merge-graphql-schemas'; - - -// queries -import * as oauthProviders from './oauthProviders'; -// types -import * as OauthProviderType from './OauthProvider-type'; -import { AccountsServer } from '../../../../accounts'; - -const accountsGraphQL = createJSAccountsGraphQL(AccountsServer); - -export const schema = mergeTypes([ - accountsGraphQL.schema, - oauthProviders.schema, - OauthProviderType.schema, -]); - -export const resolvers = mergeResolvers([ - accountsGraphQL.extendWithResolvers({}), - oauthProviders.resolver, -]); diff --git a/app/graphql/server/resolvers/accounts/oauthProviders.js b/app/graphql/server/resolvers/accounts/oauthProviders.js deleted file mode 100644 index 7928e07705e31..0000000000000 --- a/app/graphql/server/resolvers/accounts/oauthProviders.js +++ /dev/null @@ -1,38 +0,0 @@ -import { HTTP } from 'meteor/http'; -import { Meteor } from 'meteor/meteor'; - -import schema from '../../schemas/accounts/oauthProviders.graphqls'; - -function isJSON(obj) { - try { - JSON.parse(obj); - return true; - } catch (e) { - return false; - } -} - -const resolver = { - Query: { - oauthProviders: async () => { - // depends on rocketchat:grant package - try { - const result = HTTP.get(Meteor.absoluteUrl('_oauth_apps/providers')).content; - - if (isJSON(result)) { - const providers = JSON.parse(result).data; - - return providers.map((name) => ({ name })); - } - throw new Error('Could not parse the result'); - } catch (e) { - throw new Error('rocketchat:grant not installed'); - } - }, - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/Channel-type.js b/app/graphql/server/resolvers/channels/Channel-type.js deleted file mode 100644 index c21d7102ca840..0000000000000 --- a/app/graphql/server/resolvers/channels/Channel-type.js +++ /dev/null @@ -1,51 +0,0 @@ -import property from 'lodash.property'; - -import { Subscriptions, Users } from '../../../../models'; -import schema from '../../schemas/channels/Channel-type.graphqls'; - -const resolver = { - Channel: { - id: property('_id'), - name: (root, args, { user }) => { - if (root.t === 'd') { - return root.usernames.find((u) => u !== user.username); - } - - return root.name; - }, - members: (root) => { - const ids = Subscriptions.findByRoomIdWhenUserIdExists(root._id, { fields: { 'u._id': 1 } }) - .fetch() - .map((sub) => sub.u._id); - return Users.findByIds(ids).fetch(); - }, - owners: (root) => { - // there might be no owner - if (!root.u) { - return; - } - - return [Users.findOneByUsername(root.u.username)]; - }, - numberOfMembers: (root) => Subscriptions.findByRoomId(root._id).count(), - numberOfMessages: property('msgs'), - readOnly: (root) => root.ro === true, - direct: (root) => root.t === 'd', - privateChannel: (root) => root.t === 'p', - favourite: (root, args, { user }) => { - const room = Subscriptions.findOneByRoomIdAndUserId(root._id, user._id); - - return room && room.f === true; - }, - unseenMessages: (root, args, { user }) => { - const room = Subscriptions.findOneByRoomIdAndUserId(root._id, user._id); - - return (room || {}).unread; - }, - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/ChannelFilter-input.js b/app/graphql/server/resolvers/channels/ChannelFilter-input.js deleted file mode 100644 index c34d51653561a..0000000000000 --- a/app/graphql/server/resolvers/channels/ChannelFilter-input.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/channels/ChannelFilter-input.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/channels/ChannelNameAndDirect-input.js b/app/graphql/server/resolvers/channels/ChannelNameAndDirect-input.js deleted file mode 100644 index 5285a9ac0fc06..0000000000000 --- a/app/graphql/server/resolvers/channels/ChannelNameAndDirect-input.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/channels/ChannelNameAndDirect-input.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/channels/ChannelSort-enum.js b/app/graphql/server/resolvers/channels/ChannelSort-enum.js deleted file mode 100644 index fbd6ec8643627..0000000000000 --- a/app/graphql/server/resolvers/channels/ChannelSort-enum.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/channels/ChannelSort-enum.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/channels/Privacy-enum.js b/app/graphql/server/resolvers/channels/Privacy-enum.js deleted file mode 100644 index b306754f60758..0000000000000 --- a/app/graphql/server/resolvers/channels/Privacy-enum.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/channels/Privacy-enum.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/channels/channelByName.js b/app/graphql/server/resolvers/channels/channelByName.js deleted file mode 100644 index 21fb67f95155b..0000000000000 --- a/app/graphql/server/resolvers/channels/channelByName.js +++ /dev/null @@ -1,24 +0,0 @@ -import { roomPublicFields } from './settings'; -import { Rooms } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/channelByName.graphqls'; - -const resolver = { - Query: { - channelByName: authenticated((root, { name }) => { - const query = { - name, - t: 'c', - }; - - return Rooms.findOne(query, { - fields: roomPublicFields, - }); - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/channels.js b/app/graphql/server/resolvers/channels/channels.js deleted file mode 100644 index 638504a3b5e7c..0000000000000 --- a/app/graphql/server/resolvers/channels/channels.js +++ /dev/null @@ -1,55 +0,0 @@ -import { roomPublicFields } from './settings'; -import { Rooms } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/channels.graphqls'; - -const resolver = { - Query: { - channels: authenticated((root, args) => { - const query = {}; - const options = { - sort: { - name: 1, - }, - fields: roomPublicFields, - }; - - // Filter - if (typeof args.filter !== 'undefined') { - // nameFilter - if (typeof args.filter.nameFilter !== 'undefined') { - query.name = { - $regex: new RegExp(args.filter.nameFilter, 'i'), - }; - } - - // sortBy - if (args.filter.sortBy === 'NUMBER_OF_MESSAGES') { - options.sort = { - msgs: -1, - }; - } - - // privacy - switch (args.filter.privacy) { - case 'PRIVATE': - query.t = 'p'; - break; - case 'PUBLIC': - query.t = { - $ne: 'p', - }; - break; - } - } - - return Rooms.find(query, options).fetch(); - }), - }, -}; - - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/channelsByUser.js b/app/graphql/server/resolvers/channels/channelsByUser.js deleted file mode 100644 index 09cff66757735..0000000000000 --- a/app/graphql/server/resolvers/channels/channelsByUser.js +++ /dev/null @@ -1,31 +0,0 @@ -import { roomPublicFields } from './settings'; -import { Users, Subscriptions, Rooms } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/channelsByUser.graphqls'; - -const resolver = { - Query: { - channelsByUser: authenticated((root, { userId }) => { - const user = Users.findOneById(userId); - - if (!user) { - throw new Error('No user'); - } - - const roomIds = Subscriptions.findByUserId(userId, { fields: { rid: 1 } }).fetch().map((s) => s.rid); - const rooms = Rooms.findByIds(roomIds, { - sort: { - name: 1, - }, - fields: roomPublicFields, - }).fetch(); - - return rooms; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/createChannel.js b/app/graphql/server/resolvers/channels/createChannel.js deleted file mode 100644 index 3ef544bb1994b..0000000000000 --- a/app/graphql/server/resolvers/channels/createChannel.js +++ /dev/null @@ -1,39 +0,0 @@ -import { API } from '../../../../api'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/createChannel.graphqls'; - -const resolver = { - Mutation: { - createChannel: authenticated((root, args, { user }) => { - try { - API.channels.create.validate({ - user: { - value: user._id, - }, - name: { - value: args.name, - key: 'name', - }, - members: { - value: args.membersId, - key: 'membersId', - }, - }); - } catch (e) { - throw e; - } - - const { channel } = API.channels.create.execute(user._id, { - name: args.name, - members: args.membersId, - }); - - return channel; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/deleteChannel.js b/app/graphql/server/resolvers/channels/deleteChannel.js deleted file mode 100644 index 3c3aaca6de96c..0000000000000 --- a/app/graphql/server/resolvers/channels/deleteChannel.js +++ /dev/null @@ -1,41 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Rooms, Subscriptions } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/deleteChannel.graphqls'; - -const resolver = { - Mutation: { - deleteChannel: authenticated((root, { channelId }, { user }) => { - const channel = Rooms.findOne({ - _id: channelId, - t: 'c', - }); - - if (!channel) { - throw new Error('error-room-not-found', 'The required "channelId" param provided does not match any channel'); - } - - const sub = Subscriptions.findOneByRoomIdAndUserId(channel._id, user._id); - - if (!sub) { - throw new Error(`The user/callee is not in the channel "${ channel.name }.`); - } - - if (!sub.open) { - throw new Error(`The channel, ${ channel.name }, is already closed to the sender`); - } - - Meteor.runAsUser(user._id, () => { - Meteor.call('eraseRoom', channel._id); - }); - - return true; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/directChannel.js b/app/graphql/server/resolvers/channels/directChannel.js deleted file mode 100644 index a23219814f177..0000000000000 --- a/app/graphql/server/resolvers/channels/directChannel.js +++ /dev/null @@ -1,36 +0,0 @@ -import { roomPublicFields } from './settings'; -import { Rooms } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/directChannel.graphqls'; - -const resolver = { - Query: { - directChannel: authenticated((root, { username, channelId }, { user }) => { - const query = { - t: 'd', - usernames: user.username, - }; - - if (typeof username !== 'undefined') { - if (username === user.username) { - throw new Error('You cannot specify your username'); - } - - query.usernames = { $all: [user.username, username] }; - } else if (typeof channelId !== 'undefined') { - query.id = channelId; - } else { - throw new Error('Use one of those fields: username, channelId'); - } - - return Rooms.findOne(query, { - fields: roomPublicFields, - }); - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/hideChannel.js b/app/graphql/server/resolvers/channels/hideChannel.js deleted file mode 100644 index b0865c7e4fb1a..0000000000000 --- a/app/graphql/server/resolvers/channels/hideChannel.js +++ /dev/null @@ -1,41 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Rooms, Subscriptions } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/hideChannel.graphqls'; - -const resolver = { - Mutation: { - hideChannel: authenticated((root, args, { user }) => { - const channel = Rooms.findOne({ - _id: args.channelId, - t: 'c', - }); - - if (!channel) { - throw new Error('error-room-not-found', 'The required "channelId" param provided does not match any channel'); - } - - const sub = Subscriptions.findOneByRoomIdAndUserId(channel._id, user._id); - - if (!sub) { - throw new Error(`The user/callee is not in the channel "${ channel.name }.`); - } - - if (!sub.open) { - throw new Error(`The channel, ${ channel.name }, is already closed to the sender`); - } - - Meteor.runAsUser(user._id, () => { - Meteor.call('hideRoom', channel._id); - }); - - return true; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/index.js b/app/graphql/server/resolvers/channels/index.js deleted file mode 100644 index f463dccabea4b..0000000000000 --- a/app/graphql/server/resolvers/channels/index.js +++ /dev/null @@ -1,52 +0,0 @@ -import { mergeTypes, mergeResolvers } from 'merge-graphql-schemas'; - -// queries -import * as channels from './channels'; -import * as channelByName from './channelByName'; -import * as directChannel from './directChannel'; -import * as channelsByUser from './channelsByUser'; -// mutations -import * as createChannel from './createChannel'; -import * as leaveChannel from './leaveChannel'; -import * as hideChannel from './hideChannel'; -import * as deleteChannel from './deleteChannel'; -// types -import * as ChannelType from './Channel-type'; -import * as ChannelSort from './ChannelSort-enum'; -import * as ChannelFilter from './ChannelFilter-input'; -import * as Privacy from './Privacy-enum'; -import * as ChannelNameAndDirect from './ChannelNameAndDirect-input'; - -export const schema = mergeTypes([ - // queries - channels.schema, - channelByName.schema, - directChannel.schema, - channelsByUser.schema, - // mutations - createChannel.schema, - leaveChannel.schema, - hideChannel.schema, - deleteChannel.schema, - // types - ChannelType.schema, - ChannelSort.schema, - ChannelFilter.schema, - Privacy.schema, - ChannelNameAndDirect.schema, -]); - -export const resolvers = mergeResolvers([ - // queries - channels.resolver, - channelByName.resolver, - directChannel.resolver, - channelsByUser.resolver, - // mutations - createChannel.resolver, - leaveChannel.resolver, - hideChannel.resolver, - deleteChannel.resolver, - // types - ChannelType.resolver, -]); diff --git a/app/graphql/server/resolvers/channels/leaveChannel.js b/app/graphql/server/resolvers/channels/leaveChannel.js deleted file mode 100644 index 8448e778b5393..0000000000000 --- a/app/graphql/server/resolvers/channels/leaveChannel.js +++ /dev/null @@ -1,31 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Rooms } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/channels/leaveChannel.graphqls'; - -const resolver = { - Mutation: { - leaveChannel: authenticated((root, args, { user }) => { - const channel = Rooms.findOne({ - _id: args.channelId, - t: 'c', - }); - - if (!channel) { - throw new Error('error-room-not-found', 'The required "channelId" param provided does not match any channel'); - } - - Meteor.runAsUser(user._id, () => { - Meteor.call('leaveRoom', channel._id); - }); - - return true; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/channels/settings.js b/app/graphql/server/resolvers/channels/settings.js deleted file mode 100644 index 4aa8081e1ebbe..0000000000000 --- a/app/graphql/server/resolvers/channels/settings.js +++ /dev/null @@ -1,12 +0,0 @@ -export const roomPublicFields = { - t: 1, - name: 1, - description: 1, - announcement: 1, - topic: 1, - usernames: 1, - msgs: 1, - ro: 1, - u: 1, - archived: 1, -}; diff --git a/app/graphql/server/resolvers/messages/Message-type.js b/app/graphql/server/resolvers/messages/Message-type.js deleted file mode 100644 index 5f9bd1cbc69fa..0000000000000 --- a/app/graphql/server/resolvers/messages/Message-type.js +++ /dev/null @@ -1,74 +0,0 @@ -import property from 'lodash.property'; - -import { Rooms, Users } from '../../../../models'; -import { dateToFloat } from '../../helpers/dateToFloat'; -import schema from '../../schemas/messages/Message-type.graphqls'; - -const resolver = { - Message: { - id: property('_id'), - content: property('msg'), - creationTime: (root) => dateToFloat(root.ts), - author: (root) => { - const user = Users.findOne(root.u._id); - - return user || root.u; - }, - channel: (root) => Rooms.findOne(root.rid), - fromServer: (root) => typeof root.t !== 'undefined', // on a message sent by user `true` otherwise `false` - type: property('t'), - channelRef: (root) => { - if (!root.channels) { - return; - } - - return Rooms.find({ - _id: { - $in: root.channels.map((c) => c._id), - }, - }, { - sort: { - name: 1, - }, - }).fetch(); - }, - userRef: (root) => { - if (!root.mentions) { - return; - } - - return Users.find({ - _id: { - $in: root.mentions.map((c) => c._id), - }, - }, { - sort: { - username: 1, - }, - }).fetch(); - }, - reactions: (root) => { - if (!root.reactions || Object.keys(root.reactions).length === 0) { - return; - } - - const reactions = []; - - Object.keys(root.reactions).forEach((icon) => { - root.reactions[icon].usernames.forEach((username) => { - reactions.push({ - icon, - username, - }); - }); - }); - - return reactions; - }, - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/messages/MessageIdentifier-input.js b/app/graphql/server/resolvers/messages/MessageIdentifier-input.js deleted file mode 100644 index 010001040b606..0000000000000 --- a/app/graphql/server/resolvers/messages/MessageIdentifier-input.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/messages/MessageIdentifier-input.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/messages/MessagesWithCursor-type.js b/app/graphql/server/resolvers/messages/MessagesWithCursor-type.js deleted file mode 100644 index d6a720856b6a4..0000000000000 --- a/app/graphql/server/resolvers/messages/MessagesWithCursor-type.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/messages/MessagesWithCursor-type.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/messages/Reaction-type.js b/app/graphql/server/resolvers/messages/Reaction-type.js deleted file mode 100644 index 843a7a940cd5c..0000000000000 --- a/app/graphql/server/resolvers/messages/Reaction-type.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/messages/Reaction-type.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/messages/addReactionToMessage.js b/app/graphql/server/resolvers/messages/addReactionToMessage.js deleted file mode 100644 index a90b8e57f4938..0000000000000 --- a/app/graphql/server/resolvers/messages/addReactionToMessage.js +++ /dev/null @@ -1,22 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Messages } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/messages/addReactionToMessage.graphqls'; - -const resolver = { - Mutation: { - addReactionToMessage: authenticated((root, { id, icon, shouldReact }, { user }) => new Promise((resolve) => { - Meteor.runAsUser(user._id, () => { - Meteor.call('setReaction', icon, id.messageId, shouldReact, () => { - resolve(Messages.findOne(id.messageId)); - }); - }); - })), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/messages/chatMessageAdded.js b/app/graphql/server/resolvers/messages/chatMessageAdded.js deleted file mode 100644 index dc8ee0ddba7c0..0000000000000 --- a/app/graphql/server/resolvers/messages/chatMessageAdded.js +++ /dev/null @@ -1,52 +0,0 @@ -import { withFilter } from 'graphql-subscriptions'; - -import { Rooms } from '../../../../models'; -import { callbacks } from '../../../../callbacks'; -import { pubsub } from '../../subscriptions'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/messages/chatMessageAdded.graphqls'; - -export const CHAT_MESSAGE_SUBSCRIPTION_TOPIC = 'CHAT_MESSAGE_ADDED'; - -export function publishMessage(message) { - pubsub.publish(CHAT_MESSAGE_SUBSCRIPTION_TOPIC, { chatMessageAdded: message }); -} - -function shouldPublish(message, { id, directTo }, username) { - if (id) { - return message.rid === id; - } if (directTo) { - const room = Rooms.findOne({ - usernames: { $all: [directTo, username] }, - t: 'd', - }); - - return room && room._id === message.rid; - } - - return false; -} - -const resolver = { - Subscription: { - chatMessageAdded: { - subscribe: withFilter(() => pubsub.asyncIterator(CHAT_MESSAGE_SUBSCRIPTION_TOPIC), authenticated((payload, args, { user }) => { - const channel = { - id: args.channelId, - directTo: args.directTo, - }; - - return shouldPublish(payload.chatMessageAdded, channel, user.username); - })), - }, - }, -}; - -callbacks.add('afterSaveMessage', (message) => { - publishMessage(message); -}, callbacks.priority.MEDIUM, 'chatMessageAddedSubscription'); - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/messages/deleteMessage.js b/app/graphql/server/resolvers/messages/deleteMessage.js deleted file mode 100644 index feb2374ba29cc..0000000000000 --- a/app/graphql/server/resolvers/messages/deleteMessage.js +++ /dev/null @@ -1,32 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Messages } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/messages/deleteMessage.graphqls'; - -const resolver = { - Mutation: { - deleteMessage: authenticated((root, { id }, { user }) => { - const msg = Messages.findOneById(id.messageId, { fields: { u: 1, rid: 1 } }); - - if (!msg) { - throw new Error(`No message found with the id of "${ id.messageId }".`); - } - - if (id.channelId !== msg.rid) { - throw new Error('The room id provided does not match where the message is from.'); - } - - Meteor.runAsUser(user._id, () => { - Meteor.call('deleteMessage', { _id: msg._id }); - }); - - return msg; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/messages/editMessage.js b/app/graphql/server/resolvers/messages/editMessage.js deleted file mode 100644 index 9511a3dfc1038..0000000000000 --- a/app/graphql/server/resolvers/messages/editMessage.js +++ /dev/null @@ -1,34 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Messages } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/messages/editMessage.graphqls'; - -const resolver = { - Mutation: { - editMessage: authenticated((root, { id, content }, { user }) => { - const msg = Messages.findOneById(id.messageId); - - // Ensure the message exists - if (!msg) { - throw new Error(`No message found with the id of "${ id.messageId }".`); - } - - if (id.channelId !== msg.rid) { - throw new Error('The channel id provided does not match where the message is from.'); - } - - // Permission checks are already done in the updateMessage method, so no need to duplicate them - Meteor.runAsUser(user._id, () => { - Meteor.call('updateMessage', { _id: msg._id, msg: content, rid: msg.rid }); - }); - - return Messages.findOneById(msg._id); - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/messages/index.js b/app/graphql/server/resolvers/messages/index.js deleted file mode 100644 index 8a77927f97218..0000000000000 --- a/app/graphql/server/resolvers/messages/index.js +++ /dev/null @@ -1,47 +0,0 @@ -import { mergeTypes, mergeResolvers } from 'merge-graphql-schemas'; - -// queries -import * as messages from './messages'; -// mutations -import * as sendMessage from './sendMessage'; -import * as editMessage from './editMessage'; -import * as deleteMessage from './deleteMessage'; -import * as addReactionToMessage from './addReactionToMessage'; -// subscriptions -import * as chatMessageAdded from './chatMessageAdded'; -// types -import * as MessageType from './Message-type'; -import * as MessagesWithCursorType from './MessagesWithCursor-type'; -import * as MessageIdentifier from './MessageIdentifier-input'; -import * as ReactionType from './Reaction-type'; - -export const schema = mergeTypes([ - // queries - messages.schema, - // mutations - sendMessage.schema, - editMessage.schema, - deleteMessage.schema, - addReactionToMessage.schema, - // subscriptions - chatMessageAdded.schema, - // types - MessageType.schema, - MessagesWithCursorType.schema, - MessageIdentifier.schema, - ReactionType.schema, -]); - -export const resolvers = mergeResolvers([ - // queries - messages.resolver, - // mutations - sendMessage.resolver, - editMessage.resolver, - deleteMessage.resolver, - addReactionToMessage.resolver, - // subscriptions - chatMessageAdded.resolver, - // types - MessageType.resolver, -]); diff --git a/app/graphql/server/resolvers/messages/messages.js b/app/graphql/server/resolvers/messages/messages.js deleted file mode 100644 index e52e2d0ac783d..0000000000000 --- a/app/graphql/server/resolvers/messages/messages.js +++ /dev/null @@ -1,90 +0,0 @@ -import { Rooms, Messages } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/messages/messages.graphqls'; - -const resolver = { - Query: { - messages: authenticated((root, args, { user }) => { - const messagesQuery = {}; - const messagesOptions = { - sort: { ts: -1 }, - }; - const channelQuery = {}; - const isPagination = !!args.cursor || args.count > 0; - let cursor; - - if (args.channelId) { - // channelId - channelQuery._id = args.channelId; - } else if (args.directTo) { - // direct message where directTo is a user id - channelQuery.t = 'd'; - channelQuery.usernames = { $all: [args.directTo, user.username] }; - } else if (args.channelName) { - // non-direct channel - channelQuery.t = { $ne: 'd' }; - channelQuery.name = args.channelName; - } else { - console.error('messages query must be called with channelId or directTo'); - return null; - } - - const channel = Rooms.findOne(channelQuery); - - let messagesArray = []; - - if (channel) { - // cursor - if (isPagination && args.cursor) { - const cursorMsg = Messages.findOne(args.cursor, { fields: { ts: 1 } }); - messagesQuery.ts = { $lt: cursorMsg.ts }; - } - - // search - if (typeof args.searchRegex === 'string') { - messagesQuery.msg = { - $regex: new RegExp(args.searchRegex, 'i'), - }; - } - - // count - if (isPagination && args.count) { - messagesOptions.limit = args.count; - } - - // exclude messages generated by server - if (args.excludeServer === true) { - messagesQuery.t = { $exists: false }; - } - - // look for messages that belongs to specific channel - messagesQuery.rid = channel._id; - - const messages = Messages.find(messagesQuery, messagesOptions); - - messagesArray = messages.fetch(); - - if (isPagination) { - // oldest first (because of findOne) - messagesOptions.sort.ts = 1; - - const firstMessage = Messages.findOne(messagesQuery, messagesOptions); - const lastId = (messagesArray[messagesArray.length - 1] || {})._id; - - cursor = !lastId || lastId === firstMessage._id ? null : lastId; - } - } - - return { - cursor, - channel, - messagesArray, - }; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/messages/sendMessage.js b/app/graphql/server/resolvers/messages/sendMessage.js deleted file mode 100644 index 2ed30c83c68e9..0000000000000 --- a/app/graphql/server/resolvers/messages/sendMessage.js +++ /dev/null @@ -1,27 +0,0 @@ -import { processWebhookMessage } from '../../../../lib'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/messages/sendMessage.graphqls'; - -const resolver = { - Mutation: { - sendMessage: authenticated((root, { channelId, directTo, content }, { user }) => { - const options = { - text: content, - channel: channelId || directTo, - }; - - const messageReturn = processWebhookMessage(options, user)[0]; - - if (!messageReturn) { - throw new Error('Unknown error'); - } - - return messageReturn.message; - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/users/User-type.js b/app/graphql/server/resolvers/users/User-type.js deleted file mode 100644 index 0abf0c5751ee9..0000000000000 --- a/app/graphql/server/resolvers/users/User-type.js +++ /dev/null @@ -1,29 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import property from 'lodash.property'; - -import { Avatars, Rooms } from '../../../../models'; -import schema from '../../schemas/users/User-type.graphqls'; - -const resolver = { - User: { - id: property('_id'), - status: ({ status }) => status.toUpperCase(), - avatar: async ({ _id }) => { - // XXX js-accounts/graphql#16 - const avatar = await Avatars.model.rawCollection().findOne({ - userId: _id, - }, { fields: { url: 1 } }); - - if (avatar) { - return avatar.url; - } - }, - channels: Meteor.bindEnvironment(({ _id }) => Rooms.findBySubscriptionUserId(_id).fetch()), - directMessages: ({ username }) => Rooms.findDirectRoomContainingUsername(username).fetch(), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/resolvers/users/UserStatus-enum.js b/app/graphql/server/resolvers/users/UserStatus-enum.js deleted file mode 100644 index c38f2765a17af..0000000000000 --- a/app/graphql/server/resolvers/users/UserStatus-enum.js +++ /dev/null @@ -1,5 +0,0 @@ -import schema from '../../schemas/users/UserStatus-enum.graphqls'; - -export { - schema, -}; diff --git a/app/graphql/server/resolvers/users/index.js b/app/graphql/server/resolvers/users/index.js deleted file mode 100644 index 7a6a31147b3e0..0000000000000 --- a/app/graphql/server/resolvers/users/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import { mergeTypes, mergeResolvers } from 'merge-graphql-schemas'; - -// mutations -import * as setStatus from './setStatus'; -// types -import * as UserType from './User-type'; -import * as UserStatus from './UserStatus-enum'; - -export const schema = mergeTypes([ - // mutations - setStatus.schema, - // types - UserType.schema, - UserStatus.schema, -]); - -export const resolvers = mergeResolvers([ - // mutations - setStatus.resolver, - // types - UserType.resolver, -]); diff --git a/app/graphql/server/resolvers/users/setStatus.js b/app/graphql/server/resolvers/users/setStatus.js deleted file mode 100644 index d4a68da651a65..0000000000000 --- a/app/graphql/server/resolvers/users/setStatus.js +++ /dev/null @@ -1,22 +0,0 @@ -import { Users } from '../../../../models'; -import { authenticated } from '../../helpers/authenticated'; -import schema from '../../schemas/users/setStatus.graphqls'; - -const resolver = { - Mutation: { - setStatus: authenticated((root, { status }, { user }) => { - Users.update(user._id, { - $set: { - status: status.toLowerCase(), - }, - }); - - return Users.findOne(user._id); - }), - }, -}; - -export { - schema, - resolver, -}; diff --git a/app/graphql/server/schema.js b/app/graphql/server/schema.js deleted file mode 100644 index 5988bd1883b40..0000000000000 --- a/app/graphql/server/schema.js +++ /dev/null @@ -1,29 +0,0 @@ -import { makeExecutableSchema } from 'graphql-tools'; -import { mergeTypes, mergeResolvers } from 'merge-graphql-schemas'; - -import * as channels from './resolvers/channels'; -import * as messages from './resolvers/messages'; -import * as accounts from './resolvers/accounts'; -import * as users from './resolvers/users'; - -const schema = mergeTypes([ - channels.schema, - messages.schema, - accounts.schema, - users.schema, -]); - -const resolvers = mergeResolvers([ - channels.resolvers, - messages.resolvers, - accounts.resolvers, - users.resolvers, -]); - -export const executableSchema = makeExecutableSchema({ - typeDefs: [schema], - resolvers, - logger: { - log: (e) => console.log(e), - }, -}); diff --git a/app/graphql/server/schemas/accounts/LoginResult-type.graphqls b/app/graphql/server/schemas/accounts/LoginResult-type.graphqls deleted file mode 100644 index 0bdf1ed7e00bd..0000000000000 --- a/app/graphql/server/schemas/accounts/LoginResult-type.graphqls +++ /dev/null @@ -1,4 +0,0 @@ -type LoginResult { - accessToken: String! - refreshToken: String! -} diff --git a/app/graphql/server/schemas/accounts/OauthProvider-type.graphqls b/app/graphql/server/schemas/accounts/OauthProvider-type.graphqls deleted file mode 100644 index c91fe5e6379a9..0000000000000 --- a/app/graphql/server/schemas/accounts/OauthProvider-type.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type OauthProvider { - name: String! -} diff --git a/app/graphql/server/schemas/accounts/oauthProviders.graphqls b/app/graphql/server/schemas/accounts/oauthProviders.graphqls deleted file mode 100644 index 9ba76de8adb8b..0000000000000 --- a/app/graphql/server/schemas/accounts/oauthProviders.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Query { - oauthProviders: [OauthProvider] -} diff --git a/app/graphql/server/schemas/channels/Channel-type.graphqls b/app/graphql/server/schemas/channels/Channel-type.graphqls deleted file mode 100644 index 03c4557918df1..0000000000000 --- a/app/graphql/server/schemas/channels/Channel-type.graphqls +++ /dev/null @@ -1,16 +0,0 @@ -type Channel { - id: String! - name: String - description: String - announcement: String - topic: String - members: [User] - owners: [User] - numberOfMembers: Int - numberOfMessages: Int - readOnly: Boolean - direct: Boolean - privateChannel: Boolean - favourite: Boolean - unseenMessages: Int -} diff --git a/app/graphql/server/schemas/channels/ChannelFilter-input.graphqls b/app/graphql/server/schemas/channels/ChannelFilter-input.graphqls deleted file mode 100644 index a00850e371cc8..0000000000000 --- a/app/graphql/server/schemas/channels/ChannelFilter-input.graphqls +++ /dev/null @@ -1,6 +0,0 @@ -input ChannelFilter { - nameFilter: String - privacy: Privacy - joinedChannels: Boolean - sortBy: ChannelSort -} diff --git a/app/graphql/server/schemas/channels/ChannelNameAndDirect-input.graphqls b/app/graphql/server/schemas/channels/ChannelNameAndDirect-input.graphqls deleted file mode 100644 index 139567e862e93..0000000000000 --- a/app/graphql/server/schemas/channels/ChannelNameAndDirect-input.graphqls +++ /dev/null @@ -1,4 +0,0 @@ -input ChannelNameAndDirect { - name: String! - direct: Boolean! -} diff --git a/app/graphql/server/schemas/channels/ChannelSort-enum.graphqls b/app/graphql/server/schemas/channels/ChannelSort-enum.graphqls deleted file mode 100644 index 8a2c2902e6dbf..0000000000000 --- a/app/graphql/server/schemas/channels/ChannelSort-enum.graphqls +++ /dev/null @@ -1,4 +0,0 @@ -enum ChannelSort { - NAME - NUMBER_OF_MESSAGES -} diff --git a/app/graphql/server/schemas/channels/Privacy-enum.graphqls b/app/graphql/server/schemas/channels/Privacy-enum.graphqls deleted file mode 100644 index f28a57d51c281..0000000000000 --- a/app/graphql/server/schemas/channels/Privacy-enum.graphqls +++ /dev/null @@ -1,5 +0,0 @@ -enum Privacy { - PRIVATE - PUBLIC - ALL -} diff --git a/app/graphql/server/schemas/channels/channelByName.graphqls b/app/graphql/server/schemas/channels/channelByName.graphqls deleted file mode 100644 index e301ce38f7f6a..0000000000000 --- a/app/graphql/server/schemas/channels/channelByName.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Query { - channelByName(name: String!): Channel -} diff --git a/app/graphql/server/schemas/channels/channels.graphqls b/app/graphql/server/schemas/channels/channels.graphqls deleted file mode 100644 index 6e4ac56082497..0000000000000 --- a/app/graphql/server/schemas/channels/channels.graphqls +++ /dev/null @@ -1,7 +0,0 @@ -type Query { - channels(filter: ChannelFilter = { - privacy: ALL, - joinedChannels: false, - sortBy: NAME - }): [Channel] -} diff --git a/app/graphql/server/schemas/channels/channelsByUser.graphqls b/app/graphql/server/schemas/channels/channelsByUser.graphqls deleted file mode 100644 index 8dfe20a071c59..0000000000000 --- a/app/graphql/server/schemas/channels/channelsByUser.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Query { - channelsByUser(userId: String!): [Channel] -} diff --git a/app/graphql/server/schemas/channels/createChannel.graphqls b/app/graphql/server/schemas/channels/createChannel.graphqls deleted file mode 100644 index 85317c86603a3..0000000000000 --- a/app/graphql/server/schemas/channels/createChannel.graphqls +++ /dev/null @@ -1,8 +0,0 @@ -type Mutation { - createChannel( - name: String!, - private: Boolean = false, - readOnly: Boolean = false, - membersId: [String!] - ): Channel -} diff --git a/app/graphql/server/schemas/channels/deleteChannel.graphqls b/app/graphql/server/schemas/channels/deleteChannel.graphqls deleted file mode 100644 index bf11cc4fbe478..0000000000000 --- a/app/graphql/server/schemas/channels/deleteChannel.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - deleteChannel(channelId: String!): Boolean -} diff --git a/app/graphql/server/schemas/channels/directChannel.graphqls b/app/graphql/server/schemas/channels/directChannel.graphqls deleted file mode 100644 index 4e41994bce80f..0000000000000 --- a/app/graphql/server/schemas/channels/directChannel.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Query { - directChannel(username: String, channelId: String): Channel -} diff --git a/app/graphql/server/schemas/channels/hideChannel.graphqls b/app/graphql/server/schemas/channels/hideChannel.graphqls deleted file mode 100644 index 5ea9517f57418..0000000000000 --- a/app/graphql/server/schemas/channels/hideChannel.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - hideChannel(channelId: String!): Boolean -} diff --git a/app/graphql/server/schemas/channels/leaveChannel.graphqls b/app/graphql/server/schemas/channels/leaveChannel.graphqls deleted file mode 100644 index e6ceb4075c4e7..0000000000000 --- a/app/graphql/server/schemas/channels/leaveChannel.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - leaveChannel(channelId: String!): Boolean -} diff --git a/app/graphql/server/schemas/messages/Message-type.graphqls b/app/graphql/server/schemas/messages/Message-type.graphqls deleted file mode 100644 index 8ccfdebfbf1df..0000000000000 --- a/app/graphql/server/schemas/messages/Message-type.graphqls +++ /dev/null @@ -1,15 +0,0 @@ -type Message { - id: String - author: User - content: String - channel: Channel - creationTime: Float - # Message sent by server e.g. User joined channel - fromServer: Boolean - type: String - # List of mentioned users - userRef: [User] - # list of mentioned channels - channelRef: [Channel] - reactions: [Reaction] -} diff --git a/app/graphql/server/schemas/messages/MessageIdentifier-input.graphqls b/app/graphql/server/schemas/messages/MessageIdentifier-input.graphqls deleted file mode 100644 index 88fbe90711cf9..0000000000000 --- a/app/graphql/server/schemas/messages/MessageIdentifier-input.graphqls +++ /dev/null @@ -1,4 +0,0 @@ -input MessageIdentifier { - channelId: String! - messageId: String! -} diff --git a/app/graphql/server/schemas/messages/MessagesWithCursor-type.graphqls b/app/graphql/server/schemas/messages/MessagesWithCursor-type.graphqls deleted file mode 100644 index e890725f6efb3..0000000000000 --- a/app/graphql/server/schemas/messages/MessagesWithCursor-type.graphqls +++ /dev/null @@ -1,5 +0,0 @@ -type MessagesWithCursor { - cursor: String - channel: Channel - messagesArray: [Message] -} diff --git a/app/graphql/server/schemas/messages/Reaction-type.graphqls b/app/graphql/server/schemas/messages/Reaction-type.graphqls deleted file mode 100644 index e6eedf75d1e18..0000000000000 --- a/app/graphql/server/schemas/messages/Reaction-type.graphqls +++ /dev/null @@ -1,4 +0,0 @@ -type Reaction { - username: String - icon: String -} diff --git a/app/graphql/server/schemas/messages/addReactionToMessage.graphqls b/app/graphql/server/schemas/messages/addReactionToMessage.graphqls deleted file mode 100644 index af9f913a16443..0000000000000 --- a/app/graphql/server/schemas/messages/addReactionToMessage.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - addReactionToMessage(id: MessageIdentifier!, icon: String!, shouldReact: Boolean): Message -} diff --git a/app/graphql/server/schemas/messages/chatMessageAdded.graphqls b/app/graphql/server/schemas/messages/chatMessageAdded.graphqls deleted file mode 100644 index d05c00afc3bcd..0000000000000 --- a/app/graphql/server/schemas/messages/chatMessageAdded.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Subscription { - chatMessageAdded(channelId: String, directTo: String): Message -} diff --git a/app/graphql/server/schemas/messages/deleteMessage.graphqls b/app/graphql/server/schemas/messages/deleteMessage.graphqls deleted file mode 100644 index f298a14ebf98b..0000000000000 --- a/app/graphql/server/schemas/messages/deleteMessage.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - deleteMessage(id: MessageIdentifier!): Message -} diff --git a/app/graphql/server/schemas/messages/editMessage.graphqls b/app/graphql/server/schemas/messages/editMessage.graphqls deleted file mode 100644 index 19900c58b2724..0000000000000 --- a/app/graphql/server/schemas/messages/editMessage.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - editMessage(id: MessageIdentifier!, content: String!): Message -} diff --git a/app/graphql/server/schemas/messages/messages.graphqls b/app/graphql/server/schemas/messages/messages.graphqls deleted file mode 100644 index a81fe2186ca77..0000000000000 --- a/app/graphql/server/schemas/messages/messages.graphqls +++ /dev/null @@ -1,11 +0,0 @@ -type Query { - messages( - channelId: String, - channelName: String, - directTo: String, - cursor: String, - count: Int, - searchRegex: String, - excludeServer: Boolean - ): MessagesWithCursor -} diff --git a/app/graphql/server/schemas/messages/sendMessage.graphqls b/app/graphql/server/schemas/messages/sendMessage.graphqls deleted file mode 100644 index 78933ec6a7635..0000000000000 --- a/app/graphql/server/schemas/messages/sendMessage.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - sendMessage(channelId: String, directTo: String, content: String!): Message -} diff --git a/app/graphql/server/schemas/users/User-type.graphqls b/app/graphql/server/schemas/users/User-type.graphqls deleted file mode 100644 index 2a345415227ef..0000000000000 --- a/app/graphql/server/schemas/users/User-type.graphqls +++ /dev/null @@ -1,8 +0,0 @@ -extend type User { - status: UserStatus - avatar: String - name: String - lastLogin: String - channels: [Channel] - directMessages: [Channel] -} diff --git a/app/graphql/server/schemas/users/UserStatus-enum.graphqls b/app/graphql/server/schemas/users/UserStatus-enum.graphqls deleted file mode 100644 index a360cc2a72b95..0000000000000 --- a/app/graphql/server/schemas/users/UserStatus-enum.graphqls +++ /dev/null @@ -1,7 +0,0 @@ -enum UserStatus { - ONLINE - AWAY - BUSY - INVISIBLE - OFFLINE -} diff --git a/app/graphql/server/schemas/users/setStatus.graphqls b/app/graphql/server/schemas/users/setStatus.graphqls deleted file mode 100644 index 7beb3512a91b2..0000000000000 --- a/app/graphql/server/schemas/users/setStatus.graphqls +++ /dev/null @@ -1,3 +0,0 @@ -type Mutation { - setStatus(status: UserStatus!): User -} diff --git a/app/graphql/server/settings.js b/app/graphql/server/settings.js deleted file mode 100644 index b1d0b7021b087..0000000000000 --- a/app/graphql/server/settings.js +++ /dev/null @@ -1,9 +0,0 @@ -import { settings } from '../../settings'; - -settings.addGroup('General', function() { - this.section('GraphQL API', function() { - this.add('Graphql_Enabled', false, { type: 'boolean', public: false }); - this.add('Graphql_CORS', true, { type: 'boolean', public: false, enableQuery: { _id: 'Graphql_Enabled', value: true } }); - this.add('Graphql_Subscription_Port', 3100, { type: 'int', public: false, enableQuery: { _id: 'Graphql_Enabled', value: true } }); - }); -}); diff --git a/app/graphql/server/subscriptions.js b/app/graphql/server/subscriptions.js deleted file mode 100644 index d86d23f85d055..0000000000000 --- a/app/graphql/server/subscriptions.js +++ /dev/null @@ -1,3 +0,0 @@ -import { PubSub } from 'graphql-subscriptions'; - -export const pubsub = new PubSub(); diff --git a/package-lock.json b/package-lock.json index 92a8453773b18..5a6c129dba84a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -556,6 +556,18 @@ "protobufjs": "6.8.8" } }, + "@kamilkisiela/graphql-tools": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@kamilkisiela/graphql-tools/-/graphql-tools-4.0.6.tgz", + "integrity": "sha512-IPWa+dOFCE4zaCsrJrAMp7yWXnfOZLNhqoMEOmn958WkLM0mmsDc/W/Rh7/7xopIT6P0oizb6/N1iH5HnNXOUA==", + "requires": { + "apollo-link": "1.2.13", + "apollo-utilities": "1.3.2", + "deprecated-decorator": "0.1.6", + "iterall": "1.2.2", + "uuid": "3.3.2" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -693,7 +705,7 @@ "integrity": "sha512-3AlJvlohi7uwYRbKJP/v3uFCAI69J/2bU/rDAfF0GDifGDPsHAfhLIzSOshtjjIiQHtHeJ/Hg9yz/5U6E9pCrg==", "dev": true, "requires": { - "eslint-plugin-import": "^2.17.2" + "eslint-plugin-import": "2.17.2" } }, "@slack/client": { @@ -789,6 +801,16 @@ "@types/node": "9.6.40" } }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "requires": { + "@types/events": "1.2.0", + "@types/minimatch": "3.0.3", + "@types/node": "9.6.40" + } + }, "@types/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", @@ -817,6 +839,11 @@ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, "@types/node": { "version": "9.6.40", "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.40.tgz", @@ -1056,6 +1083,14 @@ "@xtuc/long": "4.2.1" } }, + "@wry/equality": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.9.tgz", + "integrity": "sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ==", + "requires": { + "tslib": "1.9.3" + } + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -1140,6 +1175,15 @@ "es6-promisify": "5.0.0" } }, + "aggregate-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz", + "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==", + "requires": { + "clean-stack": "2.2.0", + "indent-string": "3.2.0" + } + }, "ajv": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", @@ -1302,13 +1346,14 @@ } }, "apollo-link": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.1.tgz", - "integrity": "sha512-6Ghf+j3cQLCIvjXd2dJrLw+16HZbWbwmB1qlTc41BviB2hv+rK1nJr17Y9dWK0UD4p3i9Hfddx3tthpMKrueHg==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.13.tgz", + "integrity": "sha512-+iBMcYeevMm1JpYgwDEIDt/y0BB7VWyvlm/7x+TIPNLHCTCMgcEgDuW5kH86iQZWo0I7mNwQiTOz+/3ShPFmBw==", "requires": { - "@types/node": "9.6.40", - "apollo-utilities": "1.1.3", - "zen-observable-ts": "0.8.15" + "apollo-utilities": "1.3.2", + "ts-invariant": "0.4.4", + "tslib": "1.9.3", + "zen-observable-ts": "0.8.20" } }, "apollo-server-core": { @@ -1344,11 +1389,13 @@ } }, "apollo-utilities": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.3.tgz", - "integrity": "sha512-pF9abhiClX5gfj/WFWZh8DiI33nOLGxRhXH9ZMquaM1V8bhq1WLFPt2QjShWH3kGQVeIGUK+FQefnhe+ZaaAYg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", + "integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==", "requires": { + "@wry/equality": "0.1.9", "fast-json-stable-stringify": "2.0.0", + "ts-invariant": "0.4.4", "tslib": "1.9.3" } }, @@ -1458,8 +1505,8 @@ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "1.1.3", + "es-abstract": "1.12.0" } }, "array-parallel": { @@ -1591,6 +1638,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "asyncro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==" + }, "atlassian-crowd": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/atlassian-crowd/-/atlassian-crowd-0.5.0.tgz", @@ -2877,7 +2929,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -2924,7 +2976,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.5" } }, "fs.realpath": { @@ -2937,14 +2989,14 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" } }, "glob": { @@ -2952,12 +3004,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -2970,7 +3022,7 @@ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -2978,8 +3030,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -2997,7 +3049,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -3010,7 +3062,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -3023,7 +3075,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.5" } }, "mkdirp": { @@ -3061,8 +3113,8 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npmlog": { @@ -3070,10 +3122,10 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -3091,7 +3143,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -3109,8 +3161,8 @@ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -3128,13 +3180,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -3142,7 +3194,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -3175,9 +3227,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -3185,7 +3237,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -3193,7 +3245,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -3561,14 +3613,6 @@ "parse-asn1": "5.1.1" } }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "requires": { - "pako": "0.2.9" - } - }, "browserslist": { "version": "3.2.8", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", @@ -3907,7 +3951,7 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.1.0" + "nan": "2.11.1" } }, "cas": { @@ -4254,7 +4298,7 @@ "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" @@ -4311,7 +4355,7 @@ "mocha": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha1-fYbPvPNcuCnidUwy4XNV7AUzh5Q=", + "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", "dev": true, "requires": { "browser-stdout": "1.3.0", @@ -4329,13 +4373,13 @@ "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -4363,7 +4407,7 @@ "supports-color": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -4385,7 +4429,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.2.7", + "fsevents": "1.2.9", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -4489,6 +4533,11 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -5137,8 +5186,8 @@ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "0.10.50", + "type": "1.0.1" } }, "dashdash": { @@ -5176,8 +5225,8 @@ "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz", "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==", "requires": { - "image-size": "^0.7.3", - "mimer": "^1.0.0" + "image-size": "0.7.4", + "mimer": "1.0.0" }, "dependencies": { "image-size": { @@ -5258,14 +5307,14 @@ "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", "dev": true, "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.15", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" }, "dependencies": { "pify": { @@ -5290,9 +5339,9 @@ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.2" }, "dependencies": { "file-type": { @@ -5309,11 +5358,11 @@ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.3.3" }, "dependencies": { "file-type": { @@ -5330,9 +5379,9 @@ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" }, "dependencies": { "file-type": { @@ -5349,10 +5398,10 @@ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" }, "dependencies": { "fd-slicer": { @@ -5361,7 +5410,7 @@ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "pend": "~1.2.0" + "pend": "1.2.0" } }, "file-type": { @@ -5376,8 +5425,8 @@ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" } }, "pify": { @@ -5392,8 +5441,8 @@ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" } } } @@ -5732,8 +5781,8 @@ "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.48" + "d": "1.0.1", + "es5-ext": "0.10.50" } }, "eastasianwidth": { @@ -5958,9 +6007,9 @@ "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -5969,8 +6018,8 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.48", + "d": "1.0.1", + "es5-ext": "0.10.50", "es6-symbol": "3.1.1" } }, @@ -5993,8 +6042,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.48" + "d": "1.0.1", + "es5-ext": "0.10.50" } }, "escape-html": { @@ -6280,17 +6329,17 @@ "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", "dev": true, "requires": { - "array-includes": "^3.0.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", + "array-includes": "3.0.3", + "contains-path": "0.1.0", + "debug": "2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", - "has": "^1.0.3", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "read-pkg-up": "^2.0.0", - "resolve": "^1.10.0" + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.4.0", + "has": "1.0.3", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0", + "resolve": "1.10.1" }, "dependencies": { "resolve": { @@ -7272,8 +7321,8 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "nan": "2.14.0", + "node-pre-gyp": "0.12.0" }, "dependencies": { "abbrev": { @@ -7302,8 +7351,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { @@ -7317,7 +7366,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -7356,7 +7405,7 @@ "dev": true, "optional": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "deep-extend": { @@ -7387,7 +7436,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.5" } }, "fs.realpath": { @@ -7404,14 +7453,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" } }, "glob": { @@ -7421,12 +7470,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -7443,7 +7492,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -7453,7 +7502,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -7463,8 +7512,8 @@ "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -7485,7 +7534,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -7501,7 +7550,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -7515,8 +7564,8 @@ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, "minizlib": { @@ -7526,7 +7575,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.5" } }, "mkdirp": { @@ -7557,9 +7606,9 @@ "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "4.1.1", + "iconv-lite": "0.4.24", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -7568,16 +7617,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.3.0", + "nopt": "4.0.1", + "npm-packlist": "1.4.1", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.3", + "semver": "5.7.0", + "tar": "4.4.8" } }, "nopt": { @@ -7587,8 +7636,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -7603,8 +7652,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.6" } }, "npmlog": { @@ -7614,10 +7663,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -7638,7 +7687,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -7662,8 +7711,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -7687,10 +7736,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -7709,13 +7758,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -7725,7 +7774,7 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" } }, "safe-buffer": { @@ -7773,9 +7822,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -7785,7 +7834,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -7794,7 +7843,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -7811,13 +7860,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, "util-deprecate": { @@ -7834,7 +7883,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "1.0.2" } }, "wrappy": { @@ -7949,7 +7998,7 @@ "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", "dev": true, "requires": { - "lodash": "^4.14.0" + "lodash": "4.17.11" } } } @@ -8083,7 +8132,7 @@ "requires": { "array-union": "1.0.2", "dir-glob": "2.0.0", - "fast-glob": "2.2.4", + "fast-glob": "2.2.6", "glob": "7.1.3", "ignore": "3.3.10", "pify": "3.0.0", @@ -8114,9 +8163,9 @@ "dev": true, "optional": true, "requires": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "debug": "~2.2.0" + "array-parallel": "0.1.3", + "array-series": "0.1.5", + "debug": "2.2.0" }, "dependencies": { "debug": { @@ -8463,6 +8512,22 @@ } } }, + "graphql-import": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.7.1.tgz", + "integrity": "sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==", + "requires": { + "lodash": "4.17.11", + "resolve-from": "4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, "graphql-subscriptions": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz", @@ -8471,13 +8536,85 @@ "iterall": "1.2.2" } }, + "graphql-toolkit": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/graphql-toolkit/-/graphql-toolkit-0.5.0.tgz", + "integrity": "sha512-tBgqyWPHI/Pgt+jp+uLZZy2EBCzjd6yWAu73oUlmrhgg7XM6f1ONotVHvIO2MK7j8khR+ex/cUe8FgpS1i845w==", + "requires": { + "@kamilkisiela/graphql-tools": "4.0.6", + "@types/glob": "7.1.1", + "aggregate-error": "3.0.0", + "asyncro": "3.0.0", + "cross-fetch": "3.0.4", + "deepmerge": "4.0.0", + "glob": "7.1.4", + "graphql-import": "0.7.1", + "is-glob": "4.0.1", + "is-valid-path": "0.1.1", + "lodash": "4.17.15", + "tslib": "1.9.3", + "valid-url": "1.0.9" + }, + "dependencies": { + "cross-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.4.tgz", + "integrity": "sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==", + "requires": { + "node-fetch": "2.6.0", + "whatwg-fetch": "3.0.0" + } + }, + "deepmerge": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.0.0.tgz", + "integrity": "sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==" + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "2.1.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + } + } + }, "graphql-tools": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.0.2.tgz", - "integrity": "sha512-bhDGrvmSgcJBFX3EZEYagmKPk/EJ9vZIcF1WtSFveWfvSsh7crMFSQ9ldftuIXC9UeRwfutpGf3A1q4UpVLaRg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.1.1.tgz", + "integrity": "sha512-yHvPkweUB0+Q/GWH5wIG60bpt8CTwBklCSzQdEHmRUgAdEQKxw+9B7zB3dG7wB3Ym7M7lfrS4Ej+jtDZfA2UXg==", "requires": { - "apollo-link": "1.2.1", - "apollo-utilities": "1.1.3", + "apollo-link": "1.2.13", + "apollo-utilities": "1.3.2", "deprecated-decorator": "0.1.6", "iterall": "1.2.2", "uuid": "3.3.2" @@ -8528,8 +8665,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -8542,7 +8679,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "once": { @@ -8550,7 +8687,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "path-is-absolute": { @@ -8574,7 +8711,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "^7.0.5" + "glob": "7.1.3" } }, "sax": { @@ -9066,7 +9203,7 @@ "integrity": "sha512-PqWdhnQhq6tqD32hZv+l1e5mJHNSudjnaAzgAHfkGiU0ABN6lmbZF8abJIulQHbZ7oiHhP8yL6O910ICMc+5pw==", "requires": { "is-stream": "1.1.0", - "pinkie-promise": "2.0.1" + "type-fest": "0.3.1" } }, "hawk": { @@ -9393,7 +9530,7 @@ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "image-size": { @@ -9505,8 +9642,7 @@ "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" }, "indexes-of": { "version": "1.0.1", @@ -9888,6 +10024,29 @@ "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", "dev": true }, + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=", + "requires": { + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, "is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -10034,6 +10193,14 @@ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true }, + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=", + "requires": { + "is-invalid-path": "0.1.0" + } + }, "is-whitespace-character": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", @@ -10115,20 +10282,20 @@ "integrity": "sha1-USKWDNXVvEGWqFNF9mozt9ruTrM=", "dev": true, "requires": { - "bignumber.js": "^2.1.0", + "bignumber.js": "2.4.0", "bmp-js": "0.0.1", - "es6-promise": "^3.0.2", - "exif-parser": "^0.1.9", - "file-type": "^3.1.0", - "jpeg-js": "^0.1.1", - "mime": "^1.3.4", - "pixelmatch": "^4.0.0", - "pngjs": "^2.1.0", - "read-chunk": "^1.0.1", - "request": "^2.65.0", - "stream-to-buffer": "^0.1.0", - "tinycolor2": "^1.1.2", - "url-regex": "^3.0.0" + "es6-promise": "3.3.1", + "exif-parser": "0.1.12", + "file-type": "3.9.0", + "jpeg-js": "0.1.2", + "mime": "1.6.0", + "pixelmatch": "4.0.2", + "pngjs": "2.3.1", + "read-chunk": "1.0.1", + "request": "2.88.0", + "stream-to-buffer": "0.1.0", + "tinycolor2": "1.4.1", + "url-regex": "3.2.0" }, "dependencies": { "es6-promise": { @@ -10368,13 +10535,13 @@ "resolved": "https://registry.npmjs.org/juice/-/juice-5.2.0.tgz", "integrity": "sha512-0l6GZmT3efexyaaay3SchKT5kG311N59TEFP5lfvEy0nz9SNqjx311plJ3b4jze7arsmDsiHQLh/xnAuk0HFTQ==", "requires": { - "cheerio": "^0.22.0", - "commander": "^2.15.1", - "cross-spawn": "^6.0.5", - "deep-extend": "^0.6.0", - "mensch": "^0.3.3", - "slick": "^1.12.2", - "web-resource-inliner": "^4.3.1" + "cheerio": "0.22.0", + "commander": "2.17.1", + "cross-spawn": "6.0.5", + "deep-extend": "0.6.0", + "mensch": "0.3.3", + "slick": "1.12.2", + "web-resource-inliner": "4.3.2" } }, "jwa": { @@ -11378,19 +11545,18 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-graphql-schemas": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/merge-graphql-schemas/-/merge-graphql-schemas-1.5.2.tgz", - "integrity": "sha512-KomSriblDYY6A2wixXf9jHRGTPBn37MrhlObEqXY14qA3xwdf4Osb5PR6F+Lgb9rRnXe9wusMIaHwAA1WXdyaw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/merge-graphql-schemas/-/merge-graphql-schemas-1.7.0.tgz", + "integrity": "sha512-uxErpYVjlf91eTBdwHxVEwKtaosmmEHMJaQfe35XHwOEpUfhA9OFbYKRfZX5jUUS53xMnk203HDAl/u0EfjP7A==", "requires": { - "deepmerge": "2.2.1", - "glob": "7.1.3", - "is-glob": "4.0.0" + "graphql-toolkit": "0.5.0", + "tslib": "1.10.0" }, "dependencies": { - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" } } }, @@ -11439,9 +11605,9 @@ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.0" } }, "assert": { @@ -11486,12 +11652,12 @@ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.1", + "safe-buffer": "5.1.1" } }, "browserify-cipher": { @@ -11499,9 +11665,9 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -11509,9 +11675,9 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.1" } }, "browserify-rsa": { @@ -11519,8 +11685,8 @@ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -11528,13 +11694,13 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "parse-asn1": "5.1.0" } }, "browserify-zlib": { @@ -11542,7 +11708,7 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", "requires": { - "pako": "~0.2.0" + "pako": "0.2.9" } }, "buffer": { @@ -11550,8 +11716,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", + "base64-js": "1.2.3", + "ieee754": "1.1.8", "isarray": "1.0.0" } }, @@ -11570,8 +11736,8 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.1", + "safe-buffer": "5.1.1" } }, "concat-map": { @@ -11584,7 +11750,7 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "constants-browserify": { @@ -11597,8 +11763,8 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.0" } }, "create-hash": { @@ -11606,10 +11772,10 @@ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.1", + "ripemd160": "2.0.1", + "sha.js": "2.4.10" } }, "create-hmac": { @@ -11617,12 +11783,12 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.1", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" } }, "crypto-browserify": { @@ -11630,17 +11796,17 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.1", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "date-now": { @@ -11653,8 +11819,8 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.1", + "minimalistic-assert": "1.0.0" } }, "diffie-hellman": { @@ -11662,9 +11828,9 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "domain-browser": { @@ -11677,13 +11843,13 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" } }, "events": { @@ -11696,8 +11862,8 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" } }, "fs.realpath": { @@ -11712,7 +11878,7 @@ "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", - "inherits": "2.0.3", + "inherits": "2.0.1", "minimatch": "3.0.4", "once": "1.4.0", "path-is-absolute": "1.0.1" @@ -11723,7 +11889,7 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "requires": { - "inherits": "^2.0.1" + "inherits": "2.0.1" } }, "hash.js": { @@ -11731,8 +11897,8 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" }, "dependencies": { "inherits": { @@ -11747,9 +11913,9 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" } }, "https-browserify": { @@ -11791,8 +11957,8 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.1" }, "dependencies": { "hash-base": { @@ -11800,8 +11966,8 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.1", + "safe-buffer": "5.1.1" } } } @@ -11811,8 +11977,8 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "minimalistic-assert": { @@ -11856,11 +12022,11 @@ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "asn1.js": "4.10.1", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" } }, "path-browserify": { @@ -11878,11 +12044,11 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" } }, "process": { @@ -11900,11 +12066,11 @@ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" } }, "punycode": { @@ -11927,7 +12093,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.1" } }, "randomfill": { @@ -11935,8 +12101,8 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" } }, "readable-stream": { @@ -11945,12 +12111,19 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "1.0.2", - "inherits": "2.0.3", + "inherits": "2.0.4", "isarray": "1.0.0", "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", + "safe-buffer": "5.1.1", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + } } }, "rimraf": { @@ -11966,8 +12139,8 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", "requires": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" + "hash-base": "2.0.2", + "inherits": "2.0.1" } }, "safe-buffer": { @@ -11980,8 +12153,8 @@ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.1", + "safe-buffer": "5.1.1" } }, "stream-browserify": { @@ -11989,20 +12162,19 @@ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.1", + "readable-stream": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12" }, "dependencies": { "readable-stream": { - "version": "2.3.5", - "resolved": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12", + "version": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12", "requires": { - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.0", - "util-deprecate": "~1.0.1" + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" }, "dependencies": { "inherits": { @@ -12019,11 +12191,11 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.3", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.1", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "string_decoder": { @@ -12031,7 +12203,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.1.1" } }, "timers-browserify": { @@ -12039,7 +12211,7 @@ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "requires": { - "process": "~0.11.0" + "process": "0.11.10" } }, "to-arraybuffer": { @@ -12452,11 +12624,11 @@ "integrity": "sha512-65maFMGR/h/dixhRXaDBEJgkDN5E9OoIDfqR+mt6bbTXFS3kqScA7FDWpzpFopcvkP3z8AzTrA9N1t2u/+vhFg==", "dev": true, "requires": { - "debug": "^3.0.1", - "mongodb": "~2.2.31", - "mongodb-prebuilt": "~6.4.0", - "portfinder": "^1.0.10", - "ps-node": "^0.1.4" + "debug": "3.2.6", + "mongodb": "2.2.36", + "mongodb-prebuilt": "6.4.0", + "portfinder": "1.0.20", + "ps-node": "0.1.6" }, "dependencies": { "debug": { @@ -12465,7 +12637,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -12542,15 +12714,15 @@ "integrity": "sha512-39/eiEmCqig0gCR3tNbmbTk6rIpWzEGqcXT0BE645stlA+DY7WlrIWZGEG51BcI3MUdGzqVYFj+qLoRw+HsJSA==", "dev": true, "requires": { - "debug": "^2.2.0", - "decompress": "^4.0.0", - "fs-extra": "^2.0.0", - "getos": "^2.7.0", + "debug": "2.6.9", + "decompress": "4.2.0", + "fs-extra": "2.1.2", + "getos": "2.8.4", "md5-file": "3.1.1", - "request": "^2.79.0", - "request-promise": "^4.1.1", - "semver": "^5.6.0", - "yargs": "^3.26.0" + "request": "2.88.0", + "request-promise": "4.2.4", + "semver": "5.6.0", + "yargs": "3.32.0" }, "dependencies": { "fs-extra": { @@ -12559,8 +12731,8 @@ "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" + "graceful-fs": "4.1.15", + "jsonfile": "2.4.0" } } } @@ -12571,11 +12743,11 @@ "integrity": "sha512-ws6c31q3QfJ2OowRneseaydQxmF/66wPmtNm4x+F31ZB1myDFjDrn+M0Fs4FhZotBAmYVKtzoSVM6if2ekB7Ew==", "dev": true, "requires": { - "debug": "^2.2.0", - "glob": "^7.1.1", - "mongodb-download": "^2.2.7", + "debug": "2.6.9", + "glob": "7.1.3", + "mongodb-download": "2.2.7", "spawn-sync": "1.0.15", - "yargs": "^3.26.0" + "yargs": "3.32.0" } }, "more-entropy": { @@ -12683,9 +12855,9 @@ "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "3.2.6", + "iconv-lite": "0.4.24", + "sax": "1.2.4" }, "dependencies": { "debug": { @@ -12693,7 +12865,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -12891,16 +13063,16 @@ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.4.0", + "nopt": "4.0.1", + "npm-packlist": "1.4.1", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.3", + "semver": "5.6.0", + "tar": "4.4.8" }, "dependencies": { "rimraf": { @@ -12908,7 +13080,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" } }, "tar": { @@ -12916,13 +13088,13 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "chownr": "1.1.1", + "fs-minipass": "1.2.6", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, "yallist": { @@ -12977,11 +13149,11 @@ "integrity": "sha1-PuNQMZ8x81LO9omaSPa2t4NMaJk=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "minimatch": { @@ -12990,7 +13162,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "^1.0.0" + "brace-expansion": "1.1.11" } }, "underscore": { @@ -13033,8 +13205,8 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "normalize-package-data": { @@ -13081,8 +13253,8 @@ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.6" } }, "npm-run-path": { @@ -13353,8 +13525,8 @@ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "p-cancelable": { @@ -13565,7 +13737,7 @@ "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { "pify": "3.0.0" } @@ -13696,8 +13868,8 @@ "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", "dev": true, "requires": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" } }, "http-signature": { @@ -13842,7 +14014,7 @@ "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", "dev": true, "requires": { - "pngjs": "^3.0.0" + "pngjs": "3.4.0" }, "dependencies": { "pngjs": { @@ -13952,9 +14124,9 @@ "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" }, "dependencies": { "async": { @@ -14543,7 +14715,7 @@ "minimist": "1.2.0", "mkdirp": "0.5.1", "napi-build-utils": "1.0.1", - "node-abi": "2.7.1", + "node-abi": "2.9.0", "noop-logger": "0.1.1", "npmlog": "4.1.2", "os-homedir": "1.0.2", @@ -14691,7 +14863,7 @@ "integrity": "sha1-mvZ6mdex0BMuUaUDCZ04qNKs4sM=", "dev": true, "requires": { - "table-parser": "^0.1.3" + "table-parser": "0.1.3" } }, "pseudomap": { @@ -15254,10 +15426,10 @@ "integrity": "sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg==", "dev": true, "requires": { - "bluebird": "^3.5.0", + "bluebird": "3.5.3", "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "stealthy-require": "1.1.1", + "tough-cookie": "2.4.3" }, "dependencies": { "request-promise-core": { @@ -15266,7 +15438,7 @@ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "4.17.11" } } } @@ -15572,7 +15744,7 @@ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, "requires": { - "commander": "~2.8.1" + "commander": "2.8.1" }, "dependencies": { "commander": { @@ -15581,7 +15753,7 @@ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" } } } @@ -15728,16 +15900,16 @@ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.22.1.tgz", "integrity": "sha512-lXzSk/FL5b/MpWrT1pQZneKe25stVjEbl6uhhJcTULm7PhmJgKKRbTDM/vtjyUuC/RLqL2PRyC4rpKwbv3soEw==", "requires": { - "color": "^3.1.1", - "detect-libc": "^1.0.3", - "fs-copy-file-sync": "^1.1.1", - "nan": "^2.13.2", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.0", - "semver": "^6.0.0", - "simple-get": "^3.0.3", - "tar": "^4.4.8", - "tunnel-agent": "^0.6.0" + "color": "3.1.2", + "detect-libc": "1.0.3", + "fs-copy-file-sync": "1.1.1", + "nan": "2.14.0", + "npmlog": "4.1.2", + "prebuild-install": "5.3.0", + "semver": "6.2.0", + "simple-get": "3.0.3", + "tar": "4.4.10", + "tunnel-agent": "0.6.0" }, "dependencies": { "nan": { @@ -16025,8 +16197,8 @@ "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", "dev": true, "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" + "concat-stream": "1.6.2", + "os-shim": "0.1.3" } }, "spdx-correct": { @@ -16292,7 +16464,7 @@ "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", "dev": true, "requires": { - "stream-to": "~0.2.0" + "stream-to": "0.2.2" } }, "streamsearch": { @@ -16375,7 +16547,7 @@ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { - "is-natural-number": "^4.0.1" + "is-natural-number": "4.0.1" } }, "strip-eof": { @@ -16735,7 +16907,7 @@ "integrity": "sha1-BEHPzhallIFoTCfRtaZ/8VpDx7A=", "dev": true, "requires": { - "connected-domain": "^1.0.0" + "connected-domain": "1.0.0" } }, "tapable": { @@ -16749,13 +16921,13 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "1.1.1", + "fs-minipass": "1.2.6", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" }, "dependencies": { "yallist": { @@ -16937,14 +17109,6 @@ "xtend": "4.0.1" } }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "requires": { - "process": "0.11.10" - } - }, "tiny-emitter": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", @@ -17132,6 +17296,14 @@ "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", "dev": true }, + "ts-invariant": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", + "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", + "requires": { + "tslib": "1.9.3" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -17304,8 +17476,8 @@ "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", "dev": true, "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "buffer": "5.2.1", + "through": "2.3.8" } }, "underscore": { @@ -17595,7 +17767,7 @@ "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", "dev": true, "requires": { - "ip-regex": "^1.0.1" + "ip-regex": "1.0.3" }, "dependencies": { "ip-regex": { @@ -17678,6 +17850,11 @@ "resolved": "http://registry.npmjs.org/valid-data-url/-/valid-data-url-0.1.6.tgz", "integrity": "sha512-FXg2qXMzfAhZc0y2HzELNfUeiOjPr+52hU1DNBWiJJ2luXD+dD1R9NA48Ug5aj0ibbxroeGDc/RJv6ThiGgkDw==" }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -17824,7 +18001,7 @@ "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.2", - "fsevents": "1.2.7", + "fsevents": "1.2.9", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -17888,15 +18065,15 @@ "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.2.tgz", "integrity": "sha512-eVnNqwG20sbAgqv2JONwyr57UNZFJP4oauioeUjpCMY83AM11956eIhxlCGGXfSMi7bRBjR9Vao05bXFzslh7w==", "requires": { - "async": "^2.1.2", - "chalk": "^1.1.3", - "datauri": "^2.0.0", - "htmlparser2": "^3.9.2", - "lodash.unescape": "^4.0.1", - "request": "^2.78.0", - "safer-buffer": "^2.1.2", - "valid-data-url": "^0.1.4", - "xtend": "^4.0.0" + "async": "2.6.1", + "chalk": "1.1.3", + "datauri": "2.0.0", + "htmlparser2": "3.10.0", + "lodash.unescape": "4.0.1", + "request": "2.88.0", + "safer-buffer": "2.1.2", + "valid-data-url": "0.1.6", + "xtend": "4.0.1" } }, "webdav": { @@ -18663,16 +18840,17 @@ } }, "zen-observable": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", - "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", + "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" }, "zen-observable-ts": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz", - "integrity": "sha512-sXKPWiw6JszNEkRv5dQ+lQCttyjHM2Iks74QU5NP8mMPS/NrzTlHDr780gf/wOBqmHkPO6NCLMlsa+fAQ8VE8w==", + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.20.tgz", + "integrity": "sha512-2rkjiPALhOtRaDX6pWyNqK1fnP5KkJJybYebopNSn6wDG1lxBoFs2+nwwXKoA6glHIrtwrfBBy6da0stkKtTAA==", "requires": { - "zen-observable": "0.8.13" + "tslib": "1.9.3", + "zen-observable": "0.8.14" } }, "zip-stream": { diff --git a/server/importPackages.js b/server/importPackages.js index e4df809cae1fa..0b16298d8deb3 100644 --- a/server/importPackages.js +++ b/server/importPackages.js @@ -33,7 +33,6 @@ import '../app/grant'; import '../app/grant-facebook'; import '../app/grant-github'; import '../app/grant-google'; -import '../app/graphql'; import '../app/iframe-login/server'; import '../app/importer/server'; import '../app/importer-csv/server'; diff --git a/tests/end-to-end/api/11-graphql.js b/tests/end-to-end/api/11-graphql.js deleted file mode 100644 index ca307a5773541..0000000000000 --- a/tests/end-to-end/api/11-graphql.js +++ /dev/null @@ -1,343 +0,0 @@ -import supertest from 'supertest'; - -import { adminUsername, adminPassword, adminEmail } from '../../data/user.js'; - -const request = supertest('http://localhost:3000'); - -const user = { username: adminUsername, password: adminPassword, email: adminEmail, accessToken: null }; -const channel = {}; -const message = { content: 'Test Message GraphQL', modifiedContent: 'Test Message GraphQL Modified' }; - -const { expect } = require('chai'); - -const credentials = { - 'X-Auth-Token': undefined, - 'X-User-Id': undefined, -}; - -const login = { - user: adminUsername, - password: adminPassword, -}; - -describe('GraphQL Tests', function() { - this.retries(0); - - before((done) => { - request.post('/api/v1/login') - .send(login) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - credentials['X-Auth-Token'] = res.body.data.authToken; - credentials['X-User-Id'] = res.body.data.userId; - }) - .end(done); - }); - - before((done) => { - request.get('/api/graphql') - .expect(400) - .end(done); - }); - - before((done) => { - request.post('/api/v1/settings/Graphql_Enabled') - .set(credentials) - .send({ value: true }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('success', true); - }) - .end(done); - }); - - after((done) => { - request.post('/api/v1/settings/Graphql_Enabled') - .set(credentials) - .send({ value: false }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('success', true); - }) - .end(done); - }); - - it('Is able to login with username and password', (done) => { - browser.pause(500); - const query = ` - mutation login { - loginWithPassword(user: "${ user.username }", password: "${ user.password }") { - user { - username, - email - }, - tokens { - accessToken - } - } - }`; - request.post('/api/graphql') - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const data = res.body.data.loginWithPassword; - expect(data).to.have.property('user'); - expect(data).to.have.property('tokens'); - user.accessToken = data.tokens.accessToken; - expect(data.user).to.have.property('username', user.username); - expect(data.user).to.have.property('email', user.email); - }) - .end(done); - }); - - it('Is able to login with email and password', (done) => { - const query = ` - mutation login { - loginWithPassword(user: "", userFields: {email: "${ user.email }"}, password: "${ user.password }") { - user { - username, - email, - id - }, - tokens { - accessToken - } - } - }`; - request.post('/api/graphql') - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const data = res.body.data.loginWithPassword; - expect(data).to.have.property('user'); - expect(data).to.have.property('tokens'); - user.accessToken = data.tokens.accessToken; - expect(data.user).to.have.property('username', user.username); - expect(data.user).to.have.property('email', user.email); - }) - .end(done); - }); - - it('Fails when trying to login with wrong password', (done) => { - const query = ` - mutation login { - loginWithPassword(user: "${ user.username }", password: "not!${ user.password }") { - user { - username - }, - tokens { - accessToken - } - } - }`; - request.post('/api/graphql') - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.have.property('errors'); - expect(res.body.data).to.have.property('loginWithPassword', null); - expect(res.body.errors[0]).to.have.property('message', 'Incorrect password'); - }) - .end(done); - }); - - it('Is able to get user data (/me)', (done) => { - const query = ` - { - me { - username, - name, - email, - channels { - id, - name - }, - directMessages { - id, - name - } - } - }`; - request.post('/api/graphql') - .set('Authorization', user.accessToken) - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const { me } = res.body.data; - expect(me).to.have.property('username', user.username); - expect(me).to.have.property('email', user.email); - expect(me.channels).to.be.an('array'); - expect(me.channels[0]).to.have.property('id'); - channel.id = me.channels[0].id; - }) - .end(done); - }); - - it('Is able to send messages to channel', (done) => { - const query = ` - mutation sendMessage{ - sendMessage(channelId: "${ channel.id }", content: "${ message.content }") { - id, - author { - username, - name - }, - content, - channel { - name, - id - }, - reactions { - username, - icon - } - } - }`; - request.post('/api/graphql') - .set('Authorization', user.accessToken) - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const data = res.body.data.sendMessage; - expect(data).to.have.property('id'); - message.id = data.id; - expect(data).to.have.property('author'); - expect(data.author).to.have.property('username', user.username); - expect(data).to.have.property('content', message.content); - expect(data).to.have.property('channel'); - expect(data.channel).to.have.property('id', channel.id); - expect(data).to.have.property('reactions', null); - }) - .end(done); - }); - - it('Is able to edit messages', (done) => { - const query = ` - mutation editMessage { - editMessage(id: {messageId: "${ message.id }", channelId: "${ channel.id }"}, content: "${ message.modifiedContent }") { - id, - content, - author { - username - }, - channel { - id, - name - } - } - }`; - request.post('/api/graphql') - .set('Authorization', user.accessToken) - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const data = res.body.data.editMessage; - expect(data).to.have.property('id'); - expect(data).to.have.property('author'); - expect(data.author).to.have.property('username', user.username); - expect(data).to.have.property('content', message.modifiedContent); - expect(data).to.have.property('channel'); - expect(data.channel).to.have.property('id', channel.id); - }) - .end(done); - }); - - it('Can read messages from channel', (done) => { - const query = ` - { - messages (channelId: "${ channel.id }") { - channel { - id, - name - }, - messagesArray { - id, - author { - username - }, - content - } - } - }`; - request.post('/api/graphql') - .set('Authorization', user.accessToken) - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const data = res.body.data.messages; - expect(data).to.have.property('channel'); - expect(data.channel).to.have.property('id', channel.id); - - expect(data).to.have.property('messagesArray'); - expect(data.messagesArray[0]).to.have.property('id', message.id); - expect(data.messagesArray[0]).to.have.property('author'); - expect(data.messagesArray[0].author).to.have.property('username', user.username); - expect(data.messagesArray[0]).to.have.property('content', message.modifiedContent); - }) - .end(done); - }); - it('Is able to delete messages', (done) => { - const query = ` - mutation deleteMessage { - deleteMessage(id: {messageId: "${ message.id }", channelId: "${ channel.id }"}) { - id, - author { - username - } - } - }`; - request.post('/api/graphql') - .set('Authorization', user.accessToken) - .send({ - query, - }) - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('data'); - expect(res.body).to.not.have.property('errors'); - const data = res.body.data.deleteMessage; - expect(data).to.have.property('id', message.id); - expect(data).to.have.property('author'); - expect(data.author).to.have.property('username', user.username); - }) - .end(done); - }); -}); diff --git a/tests/pageobjects/administration.page.js b/tests/pageobjects/administration.page.js index 2d3537520a801..a2b9461a5ecb7 100644 --- a/tests/pageobjects/administration.page.js +++ b/tests/pageobjects/administration.page.js @@ -126,19 +126,19 @@ class Administration extends Page { // settings get buttonSave() { return browser.element('button.save'); } - get generalButtonExpandIframe() { return browser.element('.section:nth-of-type(4) .expand'); } + get generalButtonExpandIframe() { return browser.element('.section:nth-of-type(3) .expand'); } - get generalButtonExpandNotifications() { return browser.element('.section:nth-of-type(5) .expand'); } + get generalButtonExpandNotifications() { return browser.element('.section:nth-of-type(4) .expand'); } - get generalButtonExpandRest() { return browser.element('.section:nth-of-type(6) .expand'); } + get generalButtonExpandRest() { return browser.element('.section:nth-of-type(5) .expand'); } - get generalButtonExpandReporting() { return browser.element('.section:nth-of-type(7) .expand'); } + get generalButtonExpandReporting() { return browser.element('.section:nth-of-type(6) .expand'); } - get generalButtonExpandStreamCast() { return browser.element('.section:nth-of-type(8) .expand'); } + get generalButtonExpandStreamCast() { return browser.element('.section:nth-of-type(7) .expand'); } - get generalButtonExpandTranslations() { return browser.element('.section:nth-of-type(9) .expand'); } + get generalButtonExpandTranslations() { return browser.element('.section:nth-of-type(8) .expand'); } - get generalButtonExpandUTF8() { return browser.element('.section:nth-of-type(10) .expand'); } + get generalButtonExpandUTF8() { return browser.element('.section:nth-of-type(9) .expand'); } get generalSiteUrl() { return browser.element('[name="Site_Url"]'); }