diff --git a/.vscode/settings.json b/.vscode/settings.json index 9acbf50bd..2091e5e03 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,4 +9,4 @@ ], "editor.formatOnSave": false, "eslint.autoFixOnSave": true -} \ No newline at end of file +} diff --git a/backend/package.json b/backend/package.json index cd51dee0b..5d5f41be3 100644 --- a/backend/package.json +++ b/backend/package.json @@ -43,19 +43,18 @@ "dependencies": { "@hapi/joi": "^16.1.4", "@sentry/node": "^5.6.2", - "activitystrea.ms": "~2.1.3", "apollo-cache-inmemory": "~1.6.3", "apollo-client": "~2.6.4", "apollo-link-context": "~1.0.19", "apollo-link-http": "~1.5.16", - "apollo-server": "~2.9.3", + "apollo-server": "~2.9.4", "apollo-server-express": "^2.9.4", "babel-plugin-transform-runtime": "^6.23.0", "bcryptjs": "~2.4.3", "cheerio": "~1.0.0-rc.3", "cors": "~2.8.5", "cross-env": "~6.0.0", - "date-fns": "2.3.0", + "date-fns": "2.4.1", "debug": "~4.1.1", "dotenv": "~8.1.0", "express": "^4.17.1", @@ -63,8 +62,8 @@ "graphql": "^14.5.8", "graphql-custom-directives": "~0.2.14", "graphql-iso-date": "~3.6.1", - "graphql-middleware": "~3.0.5", - "graphql-middleware-sentry": "^3.2.0", + "graphql-middleware": "~4.0.1", + "graphql-middleware-sentry": "^3.2.1", "graphql-shield": "~6.1.0", "graphql-tag": "~2.10.1", "helmet": "~3.21.1", @@ -73,21 +72,21 @@ "lodash": "~4.17.14", "merge-graphql-schemas": "^1.7.0", "metascraper": "^4.10.3", - "metascraper-audio": "^5.7.5", - "metascraper-author": "^5.7.4", + "metascraper-audio": "^5.7.6", + "metascraper-author": "^5.7.6", "metascraper-clearbit-logo": "^5.3.0", - "metascraper-date": "^5.7.4", + "metascraper-date": "^5.7.6", "metascraper-description": "^5.7.5", - "metascraper-image": "^5.7.5", - "metascraper-lang": "^5.7.4", + "metascraper-image": "^5.7.6", + "metascraper-lang": "^5.7.6", "metascraper-lang-detector": "^4.8.5", - "metascraper-logo": "^5.7.5", - "metascraper-publisher": "^5.7.4", - "metascraper-soundcloud": "^5.7.4", - "metascraper-title": "^5.7.5", - "metascraper-url": "^5.7.5", - "metascraper-video": "^5.7.5", - "metascraper-youtube": "^5.7.5", + "metascraper-logo": "^5.7.6", + "metascraper-publisher": "^5.7.6", + "metascraper-soundcloud": "^5.7.6", + "metascraper-title": "^5.7.6", + "metascraper-url": "^5.7.6", + "metascraper-video": "^5.7.6", + "metascraper-youtube": "^5.7.6", "minimatch": "^3.0.4", "mustache": "^3.1.0", "neo4j-driver": "~1.7.6", @@ -108,9 +107,9 @@ "devDependencies": { "@babel/cli": "~7.6.2", "@babel/core": "~7.6.2", - "@babel/node": "~7.6.1", + "@babel/node": "~7.6.2", "@babel/plugin-proposal-throw-expressions": "^7.2.0", - "@babel/preset-env": "~7.6.0", + "@babel/preset-env": "~7.6.2", "@babel/register": "~7.6.2", "apollo-server-testing": "~2.9.4", "babel-core": "~7.0.0-0", @@ -118,7 +117,7 @@ "babel-jest": "~24.9.0", "chai": "~4.2.0", "cucumber": "~5.1.0", - "eslint": "~6.4.0", + "eslint": "~6.5.1", "eslint-config-prettier": "~6.3.0", "eslint-config-standard": "~14.1.0", "eslint-plugin-import": "~2.18.2", @@ -129,7 +128,7 @@ "eslint-plugin-standard": "~4.0.1", "graphql-request": "~1.8.2", "jest": "~24.9.0", - "nodemon": "~1.19.2", + "nodemon": "~1.19.3", "prettier": "~1.18.2", "supertest": "~4.0.2" } diff --git a/backend/src/activitypub/ActivityPub.js b/backend/src/activitypub/ActivityPub.js index 01e95d4f4..1794c2d3b 100644 --- a/backend/src/activitypub/ActivityPub.js +++ b/backend/src/activitypub/ActivityPub.js @@ -1,7 +1,9 @@ -import { extractNameFromId, extractDomainFromUrl, signAndSend } from './utils' -import { isPublicAddressed, sendAcceptActivity, sendRejectActivity } from './utils/activity' +// import { extractDomainFromUrl, signAndSend } from './utils' +import { extractNameFromId, signAndSend } from './utils' +import { isPublicAddressed } from './utils/activity' +// import { isPublicAddressed, sendAcceptActivity, sendRejectActivity } from './utils/activity' import request from 'request' -import as from 'activitystrea.ms' +// import as from 'activitystrea.ms' import NitroDataSource from './NitroDataSource' import router from './routes' import Collections from './Collections' @@ -33,71 +35,71 @@ export default class ActivityPub { } } - handleFollowActivity(activity) { - debug(`inside FOLLOW ${activity.actor}`) - const toActorName = extractNameFromId(activity.object) - const fromDomain = extractDomainFromUrl(activity.actor) - const dataSource = this.dataSource + // handleFollowActivity(activity) { + // debug(`inside FOLLOW ${activity.actor}`) + // const toActorName = extractNameFromId(activity.object) + // const fromDomain = extractDomainFromUrl(activity.actor) + // const dataSource = this.dataSource - return new Promise((resolve, reject) => { - request( - { - url: activity.actor, - headers: { - Accept: 'application/activity+json', - }, - }, - async (err, response, toActorObject) => { - if (err) return reject(err) - // save shared inbox - toActorObject = JSON.parse(toActorObject) - await this.dataSource.addSharedInboxEndpoint(toActorObject.endpoints.sharedInbox) + // return new Promise((resolve, reject) => { + // request( + // { + // url: activity.actor, + // headers: { + // Accept: 'application/activity+json', + // }, + // }, + // async (err, response, toActorObject) => { + // if (err) return reject(err) + // // save shared inbox + // toActorObject = JSON.parse(toActorObject) + // await this.dataSource.addSharedInboxEndpoint(toActorObject.endpoints.sharedInbox) - const followersCollectionPage = await this.dataSource.getFollowersCollectionPage( - activity.object, - ) + // const followersCollectionPage = await this.dataSource.getFollowersCollectionPage( + // activity.object, + // ) - const followActivity = as - .follow() - .id(activity.id) - .actor(activity.actor) - .object(activity.object) + // const followActivity = as + // .follow() + // .id(activity.id) + // .actor(activity.actor) + // .object(activity.object) - // add follower if not already in collection - if (followersCollectionPage.orderedItems.includes(activity.actor)) { - debug('follower already in collection!') - debug(`inbox = ${toActorObject.inbox}`) - resolve( - sendRejectActivity(followActivity, toActorName, fromDomain, toActorObject.inbox), - ) - } else { - followersCollectionPage.orderedItems.push(activity.actor) - } - debug(`toActorObject = ${toActorObject}`) - toActorObject = - typeof toActorObject !== 'object' ? JSON.parse(toActorObject) : toActorObject - debug(`followers = ${JSON.stringify(followersCollectionPage.orderedItems, null, 2)}`) - debug(`inbox = ${toActorObject.inbox}`) - debug(`outbox = ${toActorObject.outbox}`) - debug(`followers = ${toActorObject.followers}`) - debug(`following = ${toActorObject.following}`) + // // add follower if not already in collection + // if (followersCollectionPage.orderedItems.includes(activity.actor)) { + // debug('follower already in collection!') + // debug(`inbox = ${toActorObject.inbox}`) + // resolve( + // sendRejectActivity(followActivity, toActorName, fromDomain, toActorObject.inbox), + // ) + // } else { + // followersCollectionPage.orderedItems.push(activity.actor) + // } + // debug(`toActorObject = ${toActorObject}`) + // toActorObject = + // typeof toActorObject !== 'object' ? JSON.parse(toActorObject) : toActorObject + // debug(`followers = ${JSON.stringify(followersCollectionPage.orderedItems, null, 2)}`) + // debug(`inbox = ${toActorObject.inbox}`) + // debug(`outbox = ${toActorObject.outbox}`) + // debug(`followers = ${toActorObject.followers}`) + // debug(`following = ${toActorObject.following}`) - try { - await dataSource.saveFollowersCollectionPage(followersCollectionPage) - debug('follow activity saved') - resolve( - sendAcceptActivity(followActivity, toActorName, fromDomain, toActorObject.inbox), - ) - } catch (e) { - debug('followers update error!', e) - resolve( - sendRejectActivity(followActivity, toActorName, fromDomain, toActorObject.inbox), - ) - } - }, - ) - }) - } + // try { + // await dataSource.saveFollowersCollectionPage(followersCollectionPage) + // debug('follow activity saved') + // resolve( + // sendAcceptActivity(followActivity, toActorName, fromDomain, toActorObject.inbox), + // ) + // } catch (e) { + // debug('followers update error!', e) + // resolve( + // sendRejectActivity(followActivity, toActorName, fromDomain, toActorObject.inbox), + // ) + // } + // }, + // ) + // }) + // } handleUndoActivity(activity) { debug('inside UNDO') diff --git a/backend/src/activitypub/routes/inbox.js b/backend/src/activitypub/routes/inbox.js index b31b89ed4..18f1890af 100644 --- a/backend/src/activitypub/routes/inbox.js +++ b/backend/src/activitypub/routes/inbox.js @@ -18,9 +18,9 @@ router.post('/', async function(req, res, next) { case 'Undo': await activityPub.handleUndoActivity(req.body).catch(next) break - case 'Follow': - await activityPub.handleFollowActivity(req.body).catch(next) - break + // case 'Follow': + // await activityPub.handleFollowActivity(req.body).catch(next) + // break case 'Delete': await activityPub.handleDeleteActivity(req.body).catch(next) break diff --git a/backend/src/activitypub/routes/user.js b/backend/src/activitypub/routes/user.js index 9dc9b5071..84486fd19 100644 --- a/backend/src/activitypub/routes/user.js +++ b/backend/src/activitypub/routes/user.js @@ -56,9 +56,9 @@ router.post('/:name/inbox', verify, async function(req, res, next) { case 'Undo': await activityPub.handleUndoActivity(req.body).catch(next) break - case 'Follow': - await activityPub.handleFollowActivity(req.body).catch(next) - break + // case 'Follow': + // await activityPub.handleFollowActivity(req.body).catch(next) + // break case 'Delete': await activityPub.handleDeleteActivity(req.body).catch(next) break diff --git a/backend/src/activitypub/utils/activity.js b/backend/src/activitypub/utils/activity.js index baf13e1bf..2199361d8 100644 --- a/backend/src/activitypub/utils/activity.js +++ b/backend/src/activitypub/utils/activity.js @@ -1,10 +1,11 @@ import { activityPub } from '../ActivityPub' -import { signAndSend, throwErrorIfApolloErrorOccurred } from './index' +import { throwErrorIfApolloErrorOccurred } from './index' +// import { signAndSend, throwErrorIfApolloErrorOccurred } from './index' import crypto from 'crypto' -import as from 'activitystrea.ms' +// import as from 'activitystrea.ms' import gql from 'graphql-tag' -const debug = require('debug')('ea:utils:activity') +// const debug = require('debug')('ea:utils:activity') export function createNoteObject(text, name, id, published) { const createUuid = crypto.randomBytes(16).toString('hex') @@ -62,41 +63,41 @@ export async function getActorId(name) { } } -export function sendAcceptActivity(theBody, name, targetDomain, url) { - as.accept() - .id( - `${activityPub.endpoint}/activitypub/users/${name}/status/` + - crypto.randomBytes(16).toString('hex'), - ) - .actor(`${activityPub.endpoint}/activitypub/users/${name}`) - .object(theBody) - .prettyWrite((err, doc) => { - if (!err) { - return signAndSend(doc, name, targetDomain, url) - } else { - debug(`error serializing Accept object: ${err}`) - throw new Error('error serializing Accept object') - } - }) -} +// export function sendAcceptActivity(theBody, name, targetDomain, url) { +// as.accept() +// .id( +// `${activityPub.endpoint}/activitypub/users/${name}/status/` + +// crypto.randomBytes(16).toString('hex'), +// ) +// .actor(`${activityPub.endpoint}/activitypub/users/${name}`) +// .object(theBody) +// .prettyWrite((err, doc) => { +// if (!err) { +// return signAndSend(doc, name, targetDomain, url) +// } else { +// debug(`error serializing Accept object: ${err}`) +// throw new Error('error serializing Accept object') +// } +// }) +// } -export function sendRejectActivity(theBody, name, targetDomain, url) { - as.reject() - .id( - `${activityPub.endpoint}/activitypub/users/${name}/status/` + - crypto.randomBytes(16).toString('hex'), - ) - .actor(`${activityPub.endpoint}/activitypub/users/${name}`) - .object(theBody) - .prettyWrite((err, doc) => { - if (!err) { - return signAndSend(doc, name, targetDomain, url) - } else { - debug(`error serializing Accept object: ${err}`) - throw new Error('error serializing Accept object') - } - }) -} +// export function sendRejectActivity(theBody, name, targetDomain, url) { +// as.reject() +// .id( +// `${activityPub.endpoint}/activitypub/users/${name}/status/` + +// crypto.randomBytes(16).toString('hex'), +// ) +// .actor(`${activityPub.endpoint}/activitypub/users/${name}`) +// .object(theBody) +// .prettyWrite((err, doc) => { +// if (!err) { +// return signAndSend(doc, name, targetDomain, url) +// } else { +// debug(`error serializing Accept object: ${err}`) +// throw new Error('error serializing Accept object') +// } +// }) +// } export function isPublicAddressed(postObject) { if (typeof postObject.to === 'string') { diff --git a/backend/src/middleware/activityPubMiddleware.js b/backend/src/middleware/activityPubMiddleware.js index e6fb2385c..712ca6c8a 100644 --- a/backend/src/middleware/activityPubMiddleware.js +++ b/backend/src/middleware/activityPubMiddleware.js @@ -1,51 +1,51 @@ import { generateRsaKeyPair } from '../activitypub/security' import { activityPub } from '../activitypub/ActivityPub' -import as from 'activitystrea.ms' +// import as from 'activitystrea.ms' -const debug = require('debug')('backend:schema') +// const debug = require('debug')('backend:schema') export default { Mutation: { - CreatePost: async (resolve, root, args, context, info) => { - args.activityId = activityPub.generateStatusId(context.user.slug) - args.objectId = activityPub.generateStatusId(context.user.slug) + // CreatePost: async (resolve, root, args, context, info) => { + // args.activityId = activityPub.generateStatusId(context.user.slug) + // args.objectId = activityPub.generateStatusId(context.user.slug) - const post = await resolve(root, args, context, info) + // const post = await resolve(root, args, context, info) - const { user: author } = context - const actorId = author.actorId - debug(`actorId = ${actorId}`) - const createActivity = await new Promise((resolve, reject) => { - as.create() - .id(`${actorId}/status/${args.activityId}`) - .actor(`${actorId}`) - .object( - as - .article() - .id(`${actorId}/status/${post.id}`) - .content(post.content) - .to('https://www.w3.org/ns/activitystreams#Public') - .publishedNow() - .attributedTo(`${actorId}`), - ) - .prettyWrite((err, doc) => { - if (err) { - reject(err) - } else { - debug(doc) - const parsedDoc = JSON.parse(doc) - parsedDoc.send = true - resolve(JSON.stringify(parsedDoc)) - } - }) - }) - try { - await activityPub.sendActivity(createActivity) - } catch (e) { - debug(`error sending post activity\n${e}`) - } - return post - }, + // const { user: author } = context + // const actorId = author.actorId + // debug(`actorId = ${actorId}`) + // const createActivity = await new Promise((resolve, reject) => { + // as.create() + // .id(`${actorId}/status/${args.activityId}`) + // .actor(`${actorId}`) + // .object( + // as + // .article() + // .id(`${actorId}/status/${post.id}`) + // .content(post.content) + // .to('https://www.w3.org/ns/activitystreams#Public') + // .publishedNow() + // .attributedTo(`${actorId}`), + // ) + // .prettyWrite((err, doc) => { + // if (err) { + // reject(err) + // } else { + // debug(doc) + // const parsedDoc = JSON.parse(doc) + // parsedDoc.send = true + // resolve(JSON.stringify(parsedDoc)) + // } + // }) + // }) + // try { + // await activityPub.sendActivity(createActivity) + // } catch (e) { + // debug(`error sending post activity\n${e}`) + // } + // return post + // }, SignupVerification: async (resolve, root, args, context, info) => { const keys = generateRsaKeyPair() Object.assign(args, keys) diff --git a/backend/src/middleware/email/emailMiddleware.js b/backend/src/middleware/email/emailMiddleware.js index e5b0678b8..bea1bf9b3 100644 --- a/backend/src/middleware/email/emailMiddleware.js +++ b/backend/src/middleware/email/emailMiddleware.js @@ -21,7 +21,7 @@ if (!hasEmailConfig) { const transporter = nodemailer.createTransport({ host: CONFIG.SMTP_HOST, port: CONFIG.SMTP_PORT, - ignoreTLS: CONFIG.SMTP_IGNORE_TLS, + ignoreTLS: CONFIG.SMTP_IGNORE_TLS === 'true', secure: false, // true for 465, false for other ports auth: hasAuthData && { user: CONFIG.SMTP_USERNAME, diff --git a/backend/yarn.lock b/backend/yarn.lock index 557988bfb..d1f0baf95 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -241,16 +241,17 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/node@~7.6.1": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.6.1.tgz#84f8f4f1d86647d99537a681f32e65e70bb59f19" - integrity sha512-q2sJw+7aES/5wwjccECJfOuIgM1XIbZcn7b63JZM6VpaZwvOq913jL+tXRIn41Eg/Hr+BeIGWnvnjLTuT579pA== +"@babel/node@~7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.6.2.tgz#a94479f95ee2008342f4847346c8bb8ff2770f44" + integrity sha512-59UxvVtRpVpL5i0KTcw41FqLNPT/Jc9k/48Rq00wfN49lAIQeRKGwZ6xX1FWlCfcIGP+5l4rfZajORvmYkhfGg== dependencies: - "@babel/polyfill" "^7.6.0" - "@babel/register" "^7.6.0" + "@babel/register" "^7.6.2" commander "^2.8.1" + core-js "^3.2.1" lodash "^4.17.13" node-environment-flags "^1.0.5" + regenerator-runtime "^0.13.3" v8flags "^3.1.1" "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": @@ -283,10 +284,10 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" - integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" @@ -307,14 +308,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-throw-expressions" "^7.2.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-proposal-unicode-property-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" + integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + regexpu-core "^4.6.0" "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" @@ -381,10 +382,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz#c49e21228c4bbd4068a35667e6d951c75439b1dc" - integrity sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA== +"@babel/plugin-transform-block-scoping@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79" + integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" @@ -417,14 +418,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== +"@babel/plugin-transform-dotall-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" + integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + regexpu-core "^4.6.0" "@babel/plugin-transform-duplicate-keys@^7.5.0": version "7.5.0" @@ -506,12 +507,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz#1e6e663097813bb4f53d42df0750cf28ad3bb3f1" - integrity sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew== +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b" + integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g== dependencies: - regexp-tree "^0.1.13" + regexpu-core "^4.6.0" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -565,10 +566,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -595,16 +596,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-unicode-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" + integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + regexpu-core "^4.6.0" -"@babel/polyfill@^7.2.3", "@babel/polyfill@^7.6.0": +"@babel/polyfill@^7.2.3": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.6.0.tgz#6d89203f8b6cd323e8d946e47774ea35dc0619cc" integrity sha512-q5BZJI0n/B10VaQQvln1IlDK3BTBJFbADx7tv+oXDPIDZuTo37H5Adb9jhlXm/fEN4Y7/64qD9mnrJJG7rmaTw== @@ -612,19 +613,19 @@ core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@babel/preset-env@~7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.0.tgz#aae4141c506100bb2bfaa4ac2a5c12b395619e50" - integrity sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg== +"@babel/preset-env@~7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" + integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" "@babel/plugin-proposal-dynamic-import" "^7.5.0" "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" "@babel/plugin-syntax-async-generators" "^7.2.0" "@babel/plugin-syntax-dynamic-import" "^7.2.0" "@babel/plugin-syntax-json-strings" "^7.2.0" @@ -633,11 +634,11 @@ "@babel/plugin-transform-arrow-functions" "^7.2.0" "@babel/plugin-transform-async-to-generator" "^7.5.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.0" + "@babel/plugin-transform-block-scoping" "^7.6.2" "@babel/plugin-transform-classes" "^7.5.5" "@babel/plugin-transform-computed-properties" "^7.2.0" "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.6.2" "@babel/plugin-transform-duplicate-keys" "^7.5.0" "@babel/plugin-transform-exponentiation-operator" "^7.2.0" "@babel/plugin-transform-for-of" "^7.4.4" @@ -648,7 +649,7 @@ "@babel/plugin-transform-modules-commonjs" "^7.6.0" "@babel/plugin-transform-modules-systemjs" "^7.5.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.5.5" "@babel/plugin-transform-parameters" "^7.4.4" @@ -656,11 +657,11 @@ "@babel/plugin-transform-regenerator" "^7.4.5" "@babel/plugin-transform-reserved-words" "^7.2.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" "@babel/plugin-transform-sticky-regex" "^7.2.0" "@babel/plugin-transform-template-literals" "^7.4.4" "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" + "@babel/plugin-transform-unicode-regex" "^7.6.2" "@babel/types" "^7.6.0" browserslist "^4.6.0" core-js-compat "^3.1.1" @@ -668,7 +669,7 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/register@^7.6.0", "@babel/register@~7.6.2": +"@babel/register@^7.6.2", "@babel/register@~7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.2.tgz#25765a922202cb06f8bdac5a3b1e70cd6bf3dd45" integrity sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ== @@ -970,10 +971,10 @@ url-regex "~4.1.1" video-extensions "~1.1.0" -"@metascraper/helpers@^5.7.4", "@metascraper/helpers@^5.7.5": - version "5.7.5" - resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.7.5.tgz#fb4ca0e2825f836f1398dcc85227443a36eeb84c" - integrity sha512-ayeJIJqlqeiJHYPYi7fmhjvOg7FHTjfqd57nZCLo0fkqj2exsCa788G5Ihk5qHsk1ASVOgH+flp1XeyMl1vcXQ== +"@metascraper/helpers@^5.7.5", "@metascraper/helpers@^5.7.6": + version "5.7.6" + resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.7.6.tgz#84007215d3b31525995fd85cf0d28bf6a12bf7bb" + integrity sha512-AD2VTQmMWl/KCUXl9h0fP84VacoiTI/8y8CBgErmYZnm+sliKGedQrDZO3JmzNg73Z5z08GQTjME1WHIDiIQDw== dependencies: audio-extensions "0.0.0" chrono-node "~1.3.11" @@ -989,7 +990,7 @@ lodash "~4.17.15" mem "~5.1.1" mime-types "~2.1.24" - normalize-url "~4.4.1" + normalize-url "~4.5.0" smartquotes "~2.3.1" title "~3.4.1" truncate "~2.1.0" @@ -1451,33 +1452,6 @@ acorn@^7.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== -activitystrea.ms@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/activitystrea.ms/-/activitystrea.ms-2.1.3.tgz#553548733e367dc0b6a7badc25fa6f8996cd80c3" - integrity sha512-iiG5g5fYgfdaaqqFPaFIZC/KX8/4mOWkvniK+BNwJY6XDDKdIu56wmc9r0x1INHVnbFOTGuM8mZEntaM3I+YXw== - dependencies: - activitystreams-context "^3.0.0" - jsonld "^0.4.11" - jsonld-signatures "^1.1.5" - moment "^2.17.1" - readable-stream "^2.2.3" - reasoner "2.0.0" - rfc5646 "^2.0.0" - vocabs-as "^3.0.0" - vocabs-asx "^0.11.1" - vocabs-interval "^0.11.1" - vocabs-ldp "^0.1.0" - vocabs-owl "^0.11.1" - vocabs-rdf "^0.11.1" - vocabs-rdfs "^0.11.1" - vocabs-social "^0.11.1" - vocabs-xsd "^0.11.1" - -activitystreams-context@>=3.0.0, activitystreams-context@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/activitystreams-context/-/activitystreams-context-3.1.0.tgz#28334e129f17cfb937e8c702c52c1bcb1d2830c7" - integrity sha512-KBQ+igwf1tezMXGVw5MvRSEm0gp97JI1hTZ45I6MEkWv25lEgNoA9L6wqfaOiCX8wnMRWw9pwRsPZKypdtxAtg== - agent-base@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -1694,7 +1668,7 @@ apollo-server-caching@^0.5.0: dependencies: lru-cache "^5.0.0" -apollo-server-core@^2.9.3, apollo-server-core@^2.9.4: +apollo-server-core@^2.9.4: version "2.9.4" resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.9.4.tgz#0404455884951804d23ea64e45514c73afd34e5e" integrity sha512-6mzipnn9woJxgo/JQFWTlY13svS7HCr0ZsN035eRmKOsXzROfB9ugXcTuc6MP94ICM7TlB/DtJOP+bLX53mijw== @@ -1734,7 +1708,7 @@ apollo-server-errors@^2.3.3: resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.3.tgz#83763b00352c10dc68fbb0d41744ade66de549ff" integrity sha512-MO4oJ129vuCcbqwr5ZwgxqGGiLz3hCyowz0bstUF7MR+vNGe4oe3DWajC9lv4CxrhcqUHQOeOPViOdIo1IxE3g== -apollo-server-express@^2.9.3, apollo-server-express@^2.9.4: +apollo-server-express@^2.9.4: version "2.9.4" resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.9.4.tgz#ae7ca0b70a644ba9fa5e3ac395d1e2d9a4b23522" integrity sha512-diX9n81E0tIJ0Sy2bHvDGPM9QsFBsZ76Nx/dszinY00ViyWG0yIAYEYWeRbsoKTeNDWWTvlMrh/3Eu2oaCIEhQ== @@ -1779,13 +1753,13 @@ apollo-server-types@^0.2.4: apollo-server-caching "^0.5.0" apollo-server-env "^2.4.3" -apollo-server@~2.9.3: - version "2.9.3" - resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.9.3.tgz#2a79fcee25da0b0673eb70d73839c40c3c4b8cca" - integrity sha512-JQoeseSo3yOBu3WJzju0NTreoqYckNILybgXNUOhdurE55VFpZ8dsBEO6nMfdO2y1A70W14mnnVWCBEm+1rE8w== +apollo-server@~2.9.4: + version "2.9.4" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.9.4.tgz#564a0d0ec6dbefc86dbabe15bd23a83e48f58314" + integrity sha512-huAgQizkmzUkREixsSJHNM4ZnJ08plkwK70dm36mX9j+yYbc0h9J5b5o4E2Fb9U5PMR8kEVto1dz2rOJ0XPApA== dependencies: - apollo-server-core "^2.9.3" - apollo-server-express "^2.9.3" + apollo-server-core "^2.9.4" + apollo-server-express "^2.9.4" express "^4.0.0" graphql-subscriptions "^1.0.0" graphql-tools "^4.0.0" @@ -1957,11 +1931,6 @@ async-retry@^1.2.1: dependencies: retry "0.12.0" -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2114,39 +2083,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bitcore-lib@^0.13.7: - version "0.13.19" - resolved "https://registry.yarnpkg.com/bitcore-lib/-/bitcore-lib-0.13.19.tgz#48af1e9bda10067c1ab16263472b5add2000f3dc" - integrity sha1-SK8em9oQBnwasWJjRyta3SAA89w= - dependencies: - bn.js "=2.0.4" - bs58 "=2.0.0" - buffer-compare "=1.0.0" - elliptic "=3.0.3" - inherits "=2.0.1" - lodash "=3.10.1" - -"bitcore-message@github:CoMakery/bitcore-message#dist": - version "1.0.2" - resolved "https://codeload.github.com/CoMakery/bitcore-message/tar.gz/8799cc327029c3d34fc725f05b2cf981363f6ebf" - dependencies: - bitcore-lib "^0.13.7" - bluebird@^3.4.1: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== -bn.js@=2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.0.4.tgz#220a7cd677f7f1bfa93627ff4193776fe7819480" - integrity sha1-Igp81nf38b+pNif/QZN3b+eBlIA= - -bn.js@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.2.0.tgz#12162bc2ae71fc40a5626c33438f3a875cd37625" - integrity sha1-EhYrwq5x/EClYmwzQ486h1zTdiU= - body-parser@1.19.0, body-parser@^1.18.3: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2210,11 +2151,6 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -2236,11 +2172,6 @@ browserslist@^4.6.0, browserslist@^4.6.6: electron-to-chromium "^1.3.191" node-releases "^1.1.25" -bs58@=2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.0.tgz#72b713bed223a0ac518bbda0e3ce3f4817f39eb5" - integrity sha1-crcTvtIjoKxRi72g484/SBfznrU= - bser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" @@ -2248,11 +2179,6 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-compare@=1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-compare/-/buffer-compare-1.0.0.tgz#acaa7a966e98eee9fae14b31c39a5f158fb3c4a2" - integrity sha1-rKp6lm6Y7un64Usxw5pfFY+zxKI= - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -2566,13 +2492,6 @@ commander@^2.8.1, commander@^2.9.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2682,7 +2601,7 @@ core-js@^2.4.0, core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== -core-js@^3.0.1: +core-js@^3.0.1, core-js@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== @@ -2867,10 +2786,10 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.3.0.tgz#017eae725d0c46173b572da025fb5e4e534270fd" - integrity sha512-A8o+iXBVqQayl9Z39BHgb7m/zLOfhF7LK82t+n9Fq1adds1vaUn8ByVoADqWLe4OTc6BZYc/FdbdTwufNYqkJw== +date-fns@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.4.1.tgz#b53f9bb65ae6bd9239437035710e01cf383b625e" + integrity sha512-2RhmH/sjDSCYW2F3ZQxOUx/I7PvzXpi89aQL2d3OAxSTwLx6NilATeUbe0menFE3Lu5lFkOFci36ivimwYHHxw== debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" @@ -3159,16 +3078,6 @@ electron-to-chromium@^1.3.191: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.237.tgz#39c5d1da59d6fd16ff705b97e772bb3b5dfda7e4" integrity sha512-SPAFjDr/7iiVK2kgTluwxela6eaWjjFkS9rO/iYpB/KGXgccUom5YC7OIf19c8m8GGptWxLU0Em8xM64A/N7Fg== -elliptic@=3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-3.0.3.tgz#865c9b420bfbe55006b9f969f97a0d2c44966595" - integrity sha1-hlybQgv75VAGuflp+XoNLESWZZU= - dependencies: - bn.js "^2.0.0" - brorand "^1.0.1" - hash.js "^1.0.0" - inherits "^2.0.1" - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -3254,26 +3163,11 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" - integrity sha1-lu258v2wGZWCKyY92KratnSBgbw= - es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -es6-promise@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.0.1.tgz#ccc4963e679f0ca9fb187c777b9e583d3c7573c2" - integrity sha1-zMSWPmefDKn7GHx3e55YPTx1c8I= - -es6-promise@~4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" - integrity sha1-eILzCt3lskDM+n99eMVIMwlRrkI= - es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" @@ -3428,10 +3322,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a" - integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA== +eslint@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6" + integrity sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -4081,11 +3975,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= - graphql-auth-directives@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/graphql-auth-directives/-/graphql-auth-directives-2.1.0.tgz#85b83817844e2ec5fba8fe5de444287d6dd0f85a" @@ -4127,15 +4016,15 @@ graphql-iso-date@~3.6.1: resolved "https://registry.yarnpkg.com/graphql-iso-date/-/graphql-iso-date-3.6.1.tgz#bd2d0dc886e0f954cbbbc496bbf1d480b57ffa96" integrity sha512-AwFGIuYMJQXOEAgRlJlFL4H1ncFM8n8XmoVDTNypNOZyQ8LFDG2ppMFlsS862BSTCDcSUfHp8PD3/uJhv7t59Q== -graphql-middleware-sentry@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/graphql-middleware-sentry/-/graphql-middleware-sentry-3.2.0.tgz#a72872ae4b9fbe286980023a3c531286b8258df7" - integrity sha512-tIrxJIL+MRh2pxoot+EYJIrFfPgB3OF4nqmmh1gi54q/V1rgv7w46Ahn2jgl2nTu4bKw6mtGVF4CKikWCMPa5Q== +graphql-middleware-sentry@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/graphql-middleware-sentry/-/graphql-middleware-sentry-3.2.1.tgz#b5653d78903d655cf4212a602cfa6e26689cda07" + integrity sha512-lAwmHwsyey1db6scQg32javmqAFifabhqPIr0SUzx46O4kvjQlLZZn7KrRT12XDwgW7i6goAotdSPl9Fq+TBrQ== -graphql-middleware@~3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.5.tgz#8cbce45ce4be95bd4600ffe5332e1936ec721e10" - integrity sha512-84HBmvJlMKxgavbygbRgn2i1fOSrZ7KhxWToWDpe4xOgnWxGb5WY1rwRIkyK25ajh4qRwLtGPbBxtClzwGngCQ== +graphql-middleware@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-4.0.1.tgz#8c627b22cc046a47e9474a813cf9e0bd50fa0c4b" + integrity sha512-r9r+pcHV4yZW7LAOcjQYTbNY6nR9SrLgpVZKbrtgXxpQW/MUc1N8q3PESciebvp5s0EEUgRchcRjUkyaArCIFw== dependencies: graphql-tools "^4.0.5" @@ -4309,14 +4198,6 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" -hash.js@^1.0.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - he@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2" @@ -4548,7 +4429,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1, inherits@=2.0.1: +inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= @@ -5480,38 +5361,6 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" -jsonld-signatures@^1.1.5: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-1.2.1.tgz#493df5df9cd3a9f1b1cb296bbd3d081679f20ca8" - integrity sha1-ST3135zTqfGxyylrvT0IFnnyDKg= - dependencies: - async "^1.5.2" - bitcore-message "github:CoMakery/bitcore-message#dist" - commander "~2.9.0" - es6-promise "~4.0.5" - jsonld "0.4.3" - node-forge "~0.6.45" - -jsonld@0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-0.4.3.tgz#0bbc929190064d6650a5af5876e1bfdf0ed288f3" - integrity sha1-C7ySkZAGTWZQpa9YduG/3w7SiPM= - dependencies: - es6-promise "~2.0.1" - pkginfo "~0.3.0" - request "^2.61.0" - xmldom "0.1.19" - -jsonld@^0.4.11: - version "0.4.12" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-0.4.12.tgz#a02f205d5341414df1b6d8414f1b967a712073e8" - integrity sha1-oC8gXVNBQU3xtthBTxuWenEgc+g= - dependencies: - es6-promise "^2.0.0" - pkginfo "~0.4.0" - request "^2.61.0" - xmldom "0.1.19" - jsonwebtoken@^8.3.0, jsonwebtoken@~8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -5746,11 +5595,6 @@ lodash@4.17.15, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.1 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@=3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -5881,19 +5725,19 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -metascraper-audio@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.7.5.tgz#9ccdc85a2e17b6767e91ecfc964faaa83e10e917" - integrity sha512-2uE2VrsB780krOoKSGM08iquxyZmLEWNEG/8P3+wbZJ3aQA+JVTc7He/D8XMhFd93dFTpVZUNV9qLlPIjWnwnw== +metascraper-audio@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.7.6.tgz#05f3a732e8316eb80c0ee58d5981d053baff6cec" + integrity sha512-1CXw5+2WIxF5O0sJ1Hp4Zt8nSg4zXJXa9AUPMhnyhovLJ4cqGBdNVUbsxduuEHfYPiG1PtZyrtgDq+OQqiS5kA== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" -metascraper-author@^5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/metascraper-author/-/metascraper-author-5.7.4.tgz#d02e8c925eb252294b9bddb7fe9e05011af43cbc" - integrity sha512-9me9GQ2T3/Zzmz/BTpnxhbiztj04tF5DxtcNnYTEjNos8hFftcyaZhH426o89bAb8CF/5T/t8EhyJGSGcLSBug== +metascraper-author@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-author/-/metascraper-author-5.7.6.tgz#ccef7c987f433ebe00a444ff9d1bcd1c3f65c825" + integrity sha512-kxUrQIZVZUWzA7GInasT/InTuRZ6VPE3QCWNqrha6p89+nxHfRMpfL1YTgdQWs1Y8MGKETt1uXV20tkKQVbPuw== dependencies: - "@metascraper/helpers" "^5.7.4" + "@metascraper/helpers" "^5.7.6" lodash "~4.17.15" metascraper-clearbit-logo@^5.3.0: @@ -5903,12 +5747,12 @@ metascraper-clearbit-logo@^5.3.0: dependencies: got "~9.6.0" -metascraper-date@^5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-5.7.4.tgz#ab895fa867587da3f46c5229eae3b387394d80d3" - integrity sha512-iFVT9k0o67xpRLsQo8JM7gF5zql37v3fmcf18GCRvgZPBQ3WQzriK6fWTK1tgQWFcjVjxR/oKeulV4q4l4Nnyw== +metascraper-date@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-5.7.6.tgz#6d2e2b39f0a43374abf6f8639017b2500b821a54" + integrity sha512-ikTNuOrKk9nA78/dxeTydkO4kajaFEzR6IAi1GVXTKzhMTaH9A8HA8ra/LndD8KYZMAEmJaIFvefi8vGVVkcUw== dependencies: - "@metascraper/helpers" "^5.7.4" + "@metascraper/helpers" "^5.7.6" metascraper-description@^5.7.5: version "5.7.5" @@ -5917,12 +5761,12 @@ metascraper-description@^5.7.5: dependencies: "@metascraper/helpers" "^5.7.5" -metascraper-image@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-5.7.5.tgz#fef461b706885f6a6be4141e8270318dbc66936d" - integrity sha512-n6SLTCKNugEJuZWHxEISsLOmQKlxs1Rzl+EsZzYeLKYu5fnCI7XegepOC85erofPl3OaivrKyWk3WKUN+qQ3JA== +metascraper-image@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-5.7.6.tgz#77c45dfd28f6f0903417545196c129ec64cdbe6d" + integrity sha512-SIztcREe0m1p1wCUNh+mFVfXPbFQfOu6dZVhU1BIxb6+0km+pUOtPi6Kxnax10ZH4k0ZlFDmLr98yV/ydYdgvw== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" metascraper-lang-detector@^4.8.5: version "4.10.2" @@ -5933,65 +5777,65 @@ metascraper-lang-detector@^4.8.5: franc "~4.0.0" iso-639-3 "~1.1.0" -metascraper-lang@^5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/metascraper-lang/-/metascraper-lang-5.7.4.tgz#be125b95fb331423070de5289ea02cb63a64f7c2" - integrity sha512-/j1vy/8YumxIPNaStbqiBgcSmpRSeU8ZGB2R8aZO0DThcadpBTTcTYTGnCmq7hqQpdNYNxqZnR9t5NUqZKy7qQ== +metascraper-lang@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-lang/-/metascraper-lang-5.7.6.tgz#9d0ac51ed29a99b5864b2291f89b309d08ffe6af" + integrity sha512-RLeAB0Vzz8M3V98unF9VD3Q43I8HqMAx4rpy3Zml4ysvdZAwKsZZUT8IVVWOXhnfWCgjZDstjNhVbgQpsSsthQ== dependencies: - "@metascraper/helpers" "^5.7.4" + "@metascraper/helpers" "^5.7.6" -metascraper-logo@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-5.7.5.tgz#90f9fc30191a495f439e4f36d90af01fd3995a64" - integrity sha512-L+ZyJx+c7V0RyRubr6hITlnTjmEkPVJmXnWHz/bbWXEI++MA8/jI/XVsbxugcliMhdG8/UW+wANZ/uBoRHejdA== +metascraper-logo@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-5.7.6.tgz#92680c8e839c6c357ecb4d7fe0445f46233d0f09" + integrity sha512-0pMHxua4dNUcWLCk4WGCqBcuMoUoMAr3kFT34tJZTAd345iCagtwNNs2iAcNLdpNqyXzKyGIKcZPNkbWByVcCQ== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" -metascraper-publisher@^5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-5.7.4.tgz#5f69ad838636ef1fff015c45a66f683fcc2d3d37" - integrity sha512-l2FI63BC7cSQCvPD5OMKY4yRYpcxhhrrpsIrC0sIViKs6XrYRphb745NcNgFvKgi/PO0yw0bIEyhAroACaJKOA== +metascraper-publisher@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-5.7.6.tgz#d0b04ae2f260a5bf0536fad29b3617fb9b6df296" + integrity sha512-RVvyNbzJnWutA2rSbK0CytokBXu1SVfsnME+IeKOGmtiSnKtGx5Q0lALHNVHt+bIShEYgba0UlVO/mPE37dU8g== dependencies: - "@metascraper/helpers" "^5.7.4" + "@metascraper/helpers" "^5.7.6" -metascraper-soundcloud@^5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.7.4.tgz#94030f0b344e1b742d564856136bc10684677ef3" - integrity sha512-MLsCl0c+hfbE9qI8rUj2Jd6bnJRNufiMu9k+yOEpKrglr4ZmqzgwNmsIn72dVxUvhnsTeVvQO6NNzudQJGsqkQ== +metascraper-soundcloud@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.7.6.tgz#80c725e8746d94c992b5bdd07ac6bd987d09944d" + integrity sha512-fBxX5mYPFf8rWhhEX2XZD5QrmvtUI5IIPzryGuwEWsbPuMGuUkvFA9JjHJiC46uYXoi6UuKLXwSmYHcAACG3Jg== dependencies: - "@metascraper/helpers" "^5.7.4" + "@metascraper/helpers" "^5.7.6" memoize-one "~5.1.1" - tldts "~5.4.0" + tldts "~5.5.0" -metascraper-title@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-5.7.5.tgz#64ea7e9175a6cb2166f3cb13cbc8540c28496d47" - integrity sha512-NEa61pZj3SUMEqKdfqpBZoffNdHyEMCLU626HkP9aeRFQ8e1ejmghRuYf/m4+QmsLSUMs9vlJC+HSoIHBaL9pw== +metascraper-title@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-5.7.6.tgz#346c637e735a040f299af5f67715eb8ed0016850" + integrity sha512-DF6TeMODzzLgJMLyUtN6wLPrz9/3JcRKyUIfWpuuw+WFC3Kx6ON8nWldTRh1yUu9xbSAOleae//f/dn+JhYlCw== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" lodash "~4.17.15" -metascraper-url@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-5.7.5.tgz#f503820e2429036b26f5dad0b55f0e430bd49a6d" - integrity sha512-yY1HUiqZf7PkTMN4DeUfxDhtnMCzqyj7IvGbAVM0dHWzxC+s+RNM5NR1jo+DxVIVUxRygo3REQHwVA0Uu1CATg== +metascraper-url@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-5.7.6.tgz#2f35b50e12ed14e2e6062285fd10cd3f37ec1bd8" + integrity sha512-V0ddB/UKsWOXcO5cQVdiX5IHPkC7wpWnVj6sc7NkHWImzq8GAQR6jWaPQ9t8uhQuLdqiXaW9l+a6x6zX3LC/hw== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" -metascraper-video@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-5.7.5.tgz#15dd760fe26acb21cac7ced60f1ad508b0f130d1" - integrity sha512-LZFSttRIvUz9yEM17Z8CN0XI925CFTrV6pHMMSglD3bQH4qtrne1d+xXDUz6riPhBuR80BA5Xb9OrpRPSNCK2w== +metascraper-video@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-5.7.6.tgz#ae149d6804ba026155d4c71e59b4d2ffb95b3062" + integrity sha512-9Ak7QI3Je21h0+3i09SruGn1sLWUSB7ATLPtiVd7DfRb5O164LWhhmvMBxaMHhoMnvWgU9xuMkzQfI8kY66rBw== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" lodash "~4.17.15" -metascraper-youtube@^5.7.5: - version "5.7.5" - resolved "https://registry.yarnpkg.com/metascraper-youtube/-/metascraper-youtube-5.7.5.tgz#609670989ce4db6712d2cd92065b0bcaa47d85da" - integrity sha512-CvcBQmKK4UiUthXvyIOVHMrcC+gBrYBnMVFtr9HlJouyDjnbVZocfcGBGD4BU3lGZ8R8VLEQuH3IFfNoTVM9sA== +metascraper-youtube@^5.7.6: + version "5.7.6" + resolved "https://registry.yarnpkg.com/metascraper-youtube/-/metascraper-youtube-5.7.6.tgz#4add25d3e86752d0429cf195ef9a130c5f0d1a4a" + integrity sha512-GLjnYeOELQJ7upu6ji6yILpF835i7cttZZwIrPxKWwTJKyAUJ5Ydp0wiqm/xkmMBIsQ6isgRIVSxOb6g9SnH+w== dependencies: - "@metascraper/helpers" "^5.7.5" + "@metascraper/helpers" "^5.7.6" get-video-id "~3.1.4" is-reachable "~4.0.0" memoize-one "~5.1.1" @@ -6065,11 +5909,6 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -6127,7 +5966,7 @@ moment@2.21.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" integrity sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ== -moment@^2.17.1, moment@^2.22.2: +moment@^2.22.2: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== @@ -6171,11 +6010,6 @@ n-gram@^1.0.0: resolved "https://registry.yarnpkg.com/n-gram/-/n-gram-1.1.1.tgz#a374dc176a9063a2388d1be18ed7c35828be2a97" integrity sha512-qibRqvUghLIVsq+RTwVuwOzgOxf0l4DDZKVYAK0bMam5sG9ZzaJ6BUSJyG2Td8kTc7c/HcMUtjiN5ShobZA2bA== -n3@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/n3/-/n3-0.9.1.tgz#430b547d58dc7381408c45784dd8058171903932" - integrity sha1-QwtUfVjcc4FAjEV4TdgFgXGQOTI= - nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -6293,11 +6127,6 @@ node-fetch@2.6.0, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-forge@~0.6.45: - version "0.6.49" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.49.tgz#f1ee95d5d74623938fe19d698aa5a26d54d2f60f" - integrity sha1-8e6V1ddGI5OP4Z1piqWibVTS9g8= - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -6354,10 +6183,10 @@ nodemailer@^6.3.0: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.3.0.tgz#a89b0c62d3937bdcdeecbf55687bd7911b627e12" integrity sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw== -nodemon@~1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.2.tgz#b0975147dc99b3761ceb595b3f9277084931dcc0" - integrity sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw== +nodemon@~1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.3.tgz#db71b3e62aef2a8e1283a9fa00164237356102c0" + integrity sha512-TBNKRmJykEbxpTniZBusqRrUTHIEqa2fpecbTQDQj1Gxjth7kKAPP296ztR0o5gPUWsiYbuEbt73/+XMYab1+w== dependencies: chokidar "^2.1.5" debug "^3.1.0" @@ -6417,10 +6246,10 @@ normalize-url@~4.2.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.2.0.tgz#e747f16b58e6d7f391495fd86415fa04ec7c9897" integrity sha512-n69+KXI+kZApR+sPwSkoAXpGlNkaiYyoHHqKOFPjJWvwZpew/EjKvuPE4+tStNgb42z5yLtdakgZCQI+LalSPg== -normalize-url@~4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.4.1.tgz#81e9c153b0ad5743755696f2aa20488d48e962b6" - integrity sha512-rjH3yRt0Ssx19mUwS0hrDUOdG9VI+oRLpLHJ7tXRdjcuQ7v7wo6qPvOZppHRrqfslTKr0L2yBhjj4UXd7c3cQg== +normalize-url@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== npm-bundled@^1.0.1: version "1.0.6" @@ -6927,16 +6756,6 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkginfo@~0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" - integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE= - -pkginfo@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -7203,7 +7022,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.3, readable-stream@^2.3.5: +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -7241,18 +7060,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -reasoner@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reasoner/-/reasoner-2.0.0.tgz#6ccf76cb9baf96b82c45ab0bd60211c2aa1b701b" - integrity sha1-bM92y5uvlrgsRasL1gIRwqobcBs= - dependencies: - n3 "^0.9.1" - rfc5646 "^2.0.0" - vocabs-asx "^0.11.1" - vocabs-rdf "^0.11.1" - vocabs-rdfs "^0.11.1" - vocabs-xsd "^0.11.1" - referrer-policy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.2.0.tgz#b99cfb8b57090dc454895ef897a4cc35ef67a98e" @@ -7275,7 +7082,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== @@ -7295,11 +7102,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" - integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw== - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -7310,10 +7112,10 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== -regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" @@ -7380,7 +7182,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.61.0, request@^2.87.0, request@^2.88.0, request@~2.88.0: +request@^2.87.0, request@^2.88.0, request@~2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -7480,11 +7282,6 @@ retry@0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -rfc5646@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/rfc5646/-/rfc5646-2.0.0.tgz#ac0c67b6cd04411ef7c80751ba159d9371ce116c" - integrity sha1-rAxnts0EQR73yAdRuhWdk3HOEWw= - rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -8223,17 +8020,17 @@ tlds@^1.187.0, tlds@^1.203.0: resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.203.1.tgz#4dc9b02f53de3315bc98b80665e13de3edfc1dfc" integrity sha512-7MUlYyGJ6rSitEZ3r1Q1QNV8uSIzapS8SmmhSusBuIc7uIxPPwsKllEP0GRp1NS6Ik6F+fRZvnjDWm3ecv2hDw== -tldts-core@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.4.0.tgz#bd69ca3ad96a78ab675c74684c6d0717929777ec" - integrity sha512-kfDnB7fcNgNUcn5k21TPM/MbXqJNt2bBGQRfGyE39H334Qk+qNcSqw9It3YPxvrA7msl7DQ8wvcIsa0y55auug== +tldts-core@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.5.0.tgz#ae22afe586541ac5ecacc520038068639b3420b4" + integrity sha512-o0JzahqioihXz8wj7/1OYtefyhXz/PwLno7VRm5MTwQitEOPpvMPZpj2yjXtjgOMKbi3A5OHvvJwhFf0Hutzng== -tldts@~5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-5.4.0.tgz#ded769383615341660243acf547f197eb48f6795" - integrity sha512-S1CmstJxRb6KK+uLHhMUXXkI/zjA20RGM9QYkLgDEj42C9Zmr+OLjzEqf4Id/EWppuLi1z9FdNsz8/qi/pLCGA== +tldts@~5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-5.5.0.tgz#12ea124593bc5abebd12107c6223986f97972bc1" + integrity sha512-CZ/d7Y4k8onxwerMWz/mTCeKJtX3VAMiL+ajXVFnxsKhH4BV+QavjnZ1Mb9OeCHo3jX0S3Dw6ERNRXqOMVsDvw== dependencies: - tldts-core "^5.4.0" + tldts-core "^5.5.0" tmp@^0.0.33: version "0.0.33" @@ -8657,75 +8454,6 @@ video-extensions@~1.1.0: resolved "https://registry.yarnpkg.com/video-extensions/-/video-extensions-1.1.0.tgz#eaa86b45f29a853c2b873e9d8e23b513712997d6" integrity sha1-6qhrRfKahTwrhz6djiO1E3Epl9Y= -vocabs-as@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vocabs-as/-/vocabs-as-3.0.0.tgz#0dd0549cecb331ba4e917d2c5a4e83b146865c23" - integrity sha512-Dfze+B0CYZzhSK12jWvbxaL8/vXPnlzhhqhQTrEVxkGht+qzU4MmSLXSomQrdiSNKokVVtt16tyKoJWBW9TdNQ== - dependencies: - activitystreams-context ">=3.0.0" - vocabs ">=0.11.2" - -vocabs-asx@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-asx/-/vocabs-asx-0.11.1.tgz#6667e4e174dc4556722b6cb1b9619fb16491519a" - integrity sha1-Zmfk4XTcRVZyK2yxuWGfsWSRUZo= - dependencies: - vocabs ">=0.11.1" - -vocabs-interval@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-interval/-/vocabs-interval-0.11.1.tgz#1c009421f3e88a307aafbb75bfa670ff0f4f6d3c" - integrity sha1-HACUIfPoijB6r7t1v6Zw/w9PbTw= - dependencies: - vocabs ">=0.11.1" - -vocabs-ldp@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/vocabs-ldp/-/vocabs-ldp-0.1.0.tgz#da1728df560471750dfc7050e7e2df1bab901ce6" - integrity sha1-2hco31YEcXUN/HBQ5+LfG6uQHOY= - dependencies: - vocabs ">=0.11.1" - -vocabs-owl@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-owl/-/vocabs-owl-0.11.1.tgz#2355bbd27bfc19c5992d98079bbab3d7d65459e9" - integrity sha1-I1W70nv8GcWZLZgHm7qz19ZUWek= - dependencies: - vocabs ">=0.11.1" - -vocabs-rdf@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-rdf/-/vocabs-rdf-0.11.1.tgz#c7fa91d83b050ffb7b98ce2c72ab25c6fbcd1194" - integrity sha1-x/qR2DsFD/t7mM4scqslxvvNEZQ= - dependencies: - vocabs ">=0.11.1" - -vocabs-rdfs@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-rdfs/-/vocabs-rdfs-0.11.1.tgz#2e2df56ae0de008585b21057570386018da455bf" - integrity sha1-Li31auDeAIWFshBXVwOGAY2kVb8= - dependencies: - vocabs ">=0.11.1" - -vocabs-social@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-social/-/vocabs-social-0.11.1.tgz#d28545868cce325ba0c88e394f3de6e03fad85b1" - integrity sha1-0oVFhozOMlugyI45Tz3m4D+thbE= - dependencies: - vocabs ">=0.11.1" - -vocabs-xsd@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/vocabs-xsd/-/vocabs-xsd-0.11.1.tgz#20e201d8fd0fd330d6650d9061fda60baae6cd6c" - integrity sha1-IOIB2P0P0zDWZQ2QYf2mC6rmzWw= - dependencies: - vocabs ">=0.11.1" - -vocabs@>=0.11.1, vocabs@>=0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/vocabs/-/vocabs-0.11.2.tgz#8944b40f11d415f07db6e259804024a1dbfaa4d4" - integrity sha512-OIon2MWA21ZO42UBsTa5DuMsk5zv72DxMdQNvLsPN1M9GrjVTovn3LgWUZdPVnKBpdWhqWV7Mfbq/Sh0vkHIBw== - w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -8921,11 +8649,6 @@ xmlbuilder@~9.0.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -xmldom@0.1.19: - version "0.1.19" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" - integrity sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw= - xregexp@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.2.4.tgz#02a4aea056d65a42632c02f0233eab8e4d7e57ed" diff --git a/cypress/integration/common/steps.js b/cypress/integration/common/steps.js index d712ee9b1..a25200667 100644 --- a/cypress/integration/common/steps.js +++ b/cypress/integration/common/steps.js @@ -351,10 +351,12 @@ When("I log in with the following credentials:", table => { }); When("open the notification menu and click on the first item", () => { - cy.get(".notifications-menu").click(); + cy.get(".notifications-menu").invoke('show').click(); // "invoke('show')" because of the delay for show the menu cy.get(".notification-mention-post") .first() - .click(); + .click({ + force: true + }); }); Then("see {int} unread notifications in the top menu", count => { diff --git a/cypress/integration/notifications/Mentions.feature b/cypress/integration/notifications/Mentions.feature index d3c123863..7523e3d05 100644 --- a/cypress/integration/notifications/Mentions.feature +++ b/cypress/integration/notifications/Mentions.feature @@ -1,4 +1,4 @@ -Feature: Notifications for a mentions +Feature: Notification for a mention As a user I want to be notified if sb. mentions me in a post or comment In order join conversations about or related to me diff --git a/webapp/app/router.scrollBehavior.js b/webapp/app/router.scrollBehavior.js new file mode 100644 index 000000000..d34c4c38a --- /dev/null +++ b/webapp/app/router.scrollBehavior.js @@ -0,0 +1,10 @@ +export default function(to, from, savedPosition) { + if (savedPosition) return savedPosition + + // Edge case: If you click on a notification from a comment and then on the + // post page you click on 'comments', we avoid a "jumping" scroll behavior, + // ie. jump to the top and scroll back from there + if (to.path === from.path && to.hash !== from.hash) return false + + return { x: 0, y: 0 } +} diff --git a/webapp/components/Comment/Comment.spec.js b/webapp/components/Comment/Comment.spec.js index 381d49bc2..59e3f6c5a 100644 --- a/webapp/components/Comment/Comment.spec.js +++ b/webapp/components/Comment/Comment.spec.js @@ -32,6 +32,7 @@ describe('Comment.vue', () => { truncate: a => a, removeHtml: a => a, }, + $scrollTo: jest.fn(), $apollo: { mutate: jest.fn().mockResolvedValue({ data: { @@ -51,6 +52,8 @@ describe('Comment.vue', () => { }) describe('shallowMount', () => { + beforeEach(jest.useFakeTimers) + Wrapper = () => { const store = new Vuex.Store({ getters, @@ -117,7 +120,35 @@ describe('Comment.vue', () => { }) }) - beforeEach(jest.useFakeTimers) + describe('scrollToAnchor mixin', () => { + describe('$route.hash !== comment.id', () => { + beforeEach(() => { + mocks.$route = { + hash: '', + } + }) + + it('skips $scrollTo', () => { + wrapper = Wrapper() + jest.runAllTimers() + expect(mocks.$scrollTo).not.toHaveBeenCalled() + }) + }) + + describe('$route.hash === comment.id', () => { + beforeEach(() => { + mocks.$route = { + hash: '#commentId-2', + } + }) + + it('calls $scrollTo', () => { + wrapper = Wrapper() + jest.runAllTimers() + expect(mocks.$scrollTo).toHaveBeenCalledWith('#commentId-2') + }) + }) + }) describe('test callbacks', () => { beforeEach(() => { diff --git a/webapp/components/Comment/Comment.vue b/webapp/components/Comment/Comment.vue index 49f29bfe9..31bbc811f 100644 --- a/webapp/components/Comment/Comment.vue +++ b/webapp/components/Comment/Comment.vue @@ -10,7 +10,7 @@
- + @@ -80,8 +80,10 @@ import ContentMenu from '~/components/ContentMenu' import ContentViewer from '~/components/Editor/ContentViewer' import HcCommentForm from '~/components/CommentForm/CommentForm' import CommentMutations from '~/graphql/CommentMutations' +import scrollToAnchor from '~/mixins/scrollToAnchor.js' export default { + mixins: [scrollToAnchor], data: function() { return { isCollapsed: true, @@ -109,6 +111,9 @@ export default { user: 'auth/user', isModerator: 'auth/isModerator', }), + anchor() { + return `commentId-${this.comment.id}` + }, displaysComment() { return !this.unavailable || this.isModerator }, @@ -142,6 +147,9 @@ export default { }, }, methods: { + checkAnchor(anchor) { + return `#${this.anchor}` === anchor + }, isAuthor(id) { return this.user.id === id }, diff --git a/webapp/components/CommentList/CommentList.spec.js b/webapp/components/CommentList/CommentList.spec.js index 4d382b36d..3287b7cd4 100644 --- a/webapp/components/CommentList/CommentList.spec.js +++ b/webapp/components/CommentList/CommentList.spec.js @@ -42,6 +42,7 @@ describe('CommentList.vue', () => { truncate: a => a, removeHtml: a => a, }, + $scrollTo: jest.fn(), $apollo: { queries: { Post: { @@ -65,12 +66,46 @@ describe('CommentList.vue', () => { }) } - beforeEach(() => { + it('displays a comments counter', () => { wrapper = Wrapper() + expect(wrapper.find('span.ds-tag').text()).toEqual('1') }) it('displays a comments counter', () => { + wrapper = Wrapper() expect(wrapper.find('span.ds-tag').text()).toEqual('1') }) + + describe('scrollToAnchor mixin', () => { + beforeEach(jest.useFakeTimers) + + describe('$route.hash !== `#comments`', () => { + beforeEach(() => { + mocks.$route = { + hash: '', + } + }) + + it('skips $scrollTo', () => { + wrapper = Wrapper() + jest.runAllTimers() + expect(mocks.$scrollTo).not.toHaveBeenCalled() + }) + }) + + describe('$route.hash === `#comments`', () => { + beforeEach(() => { + mocks.$route = { + hash: '#comments', + } + }) + + it('calls $scrollTo', () => { + wrapper = Wrapper() + jest.runAllTimers() + expect(mocks.$scrollTo).toHaveBeenCalledWith('#comments') + }) + }) + }) }) }) diff --git a/webapp/components/CommentList/CommentList.vue b/webapp/components/CommentList/CommentList.vue index 6061847d7..f1cdf910b 100644 --- a/webapp/components/CommentList/CommentList.vue +++ b/webapp/components/CommentList/CommentList.vue @@ -30,8 +30,10 @@ diff --git a/webapp/pages/post/_id/_slug/index.vue b/webapp/pages/post/_id/_slug/index.vue index d03cd5c70..0fda144d0 100644 --- a/webapp/pages/post/_id/_slug/index.vue +++ b/webapp/pages/post/_id/_slug/index.vue @@ -197,7 +197,7 @@ export default { .ds-card-image { img { - max-height: 300px; + height: 300px; object-fit: cover; object-position: center; } diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 49375e89c..cf0c4095d 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -4235,6 +4235,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bezier-easing@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bezier-easing/-/bezier-easing-2.1.0.tgz#c04dfe8b926d6ecaca1813d69ff179b7c2025d86" + integrity sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY= + bfj@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48" @@ -5822,10 +5827,10 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.4.0.tgz#e02d1d08ce80ae1db3de40a0028c9f54203d034b" - integrity sha512-xS547fK1omgCgOGbyU0fBY2pdeXQ9/WO/PMsVgX1jtF56dXNHrV3Z+GKWIOE7IG+UEeu+fTyTlnIvBKbxXxdSw== +date-fns@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.4.1.tgz#b53f9bb65ae6bd9239437035710e01cf383b625e" + integrity sha512-2RhmH/sjDSCYW2F3ZQxOUx/I7PvzXpi89aQL2d3OAxSTwLx6NilATeUbe0menFE3Lu5lFkOFci36ivimwYHHxw== date-fns@^1.27.2: version "1.30.1" @@ -6477,11 +6482,12 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" -eslint-loader@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-3.0.1.tgz#03f5693d7c2dc5b710c2bbe85ca500536dc3c852" - integrity sha512-opQF7tGGf793wrpBex6WP7TzcGqJ5/vpQ9nziuznYNWSw/g4dB/5M4y8h7TJP5u6R6tBIFkJheV3MJxsVbNHNg== +eslint-loader@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-3.0.2.tgz#5a627316a51d6f41d357b9f6f0554e91506cdd6e" + integrity sha512-S5VnD+UpVY1PyYRqeBd/4pgsmkvSokbHqTXAQMpvCyRr3XN2tvSLo9spm2nEpqQqh9dezw3os/0zWihLeOg2Rw== dependencies: + fs-extra "^8.1.0" loader-fs-cache "^1.0.2" loader-utils "^1.2.3" object-hash "^1.3.1" @@ -7316,16 +7322,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.0.1.tgz#90294081f978b1f182f347a440a209154344285b" - integrity sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: +fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -12333,10 +12330,10 @@ prosemirror-commands@^1.0.8: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-dropcursor@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.1.1.tgz#c60ed1ed6c58804a06a75db06a0d993b087b7622" - integrity sha512-GeUyMO/tOEf8MXrP7Xb7UIMrfK86OGh0fnyBrHfhav4VjY9cw65mNoqHy87CklE5711AhCP5Qzfp8RL/hVKusg== +prosemirror-dropcursor@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.1.2.tgz#d54428e0fdbc0fb3d4c5809acd1ad031e6cb6855" + integrity sha512-QHZbYPr8AY0g88TC/Wp7jpYbUoSpTSO8sqHNGvvZOInsAyylIdOpsrfhY1NC+/lh+iuwka0YogGtq2mmE7cr4g== dependencies: prosemirror-state "^1.0.0" prosemirror-transform "^1.1.0" @@ -12377,10 +12374,10 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.0.1: prosemirror-state "^1.0.0" w3c-keyname "^1.1.8" -prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.7.1.tgz#f140a6e366e1e283aa7a94dbb8c2c7d13139689e" - integrity sha512-hYrZPbJvdo2QWERmkCuS80BEf5Rcf3+S28ETr4xu8XKPYjmU6aeQn23G1Fu/2rwqUmk5ZyWYo2nyEsN+Cdv2Qg== +prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.7.2.tgz#829abd7fb496783ba088936d2d7aff228206829a" + integrity sha512-mopozod/qNTB6utEyY8q4w1nCLDakpr39d8smzHno/wuAivCzBU8HkC9YOx1MBdTcTU6sXiIEh08hQfkC3damw== dependencies: orderedmap "^1.0.0" @@ -12400,10 +12397,10 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.2.4: prosemirror-model "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-tables@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-0.9.1.tgz#1669100ee9f64b0c269824dcd1c0584c66075acb" - integrity sha512-n5h2OvlnQGsW1ToT1WOIlemV/3PDw4miUQoHEpawOk2oDhi46czKdzEg/rq3z0f/aZ3CwoyxviuqAZChBILC4A== +prosemirror-tables@^0.9.5: + version "0.9.5" + resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-0.9.5.tgz#94d9881a46051e6fff3c51edffafa346da084def" + integrity sha512-RlAF/D7OvnDCOL8B6Qt6KuBkb0w3SedTdrou7wH7Nn2ml7+M5xUalW/h1f7dMD3wjsU47/Cn8zTbEkCDIpIggw== dependencies: prosemirror-keymap "^1.0.0" prosemirror-model "^1.0.0" @@ -12411,10 +12408,10 @@ prosemirror-tables@^0.9.1: prosemirror-transform "^1.0.0" prosemirror-view "^1.0.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz#28cfdf1f9ee514edc40466be7b7db39eed545fdf" - integrity sha512-1O6Di5lOL1mp4nuCnQNkHY7l2roIW5y8RH4ZG3hMYmkmDEWzTaFFnxxAAHsE5ipGLBSRcTlP7SsDhYBIdSuLpQ== +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.1.4.tgz#30b35f02dd7761dd8139e5eb7612831fd031036a" + integrity sha512-1Y3XuaFJtwusYDvojcCxi3VZvNIntPVoh/dpeVaIM5Vf1V+M6xiIWcDgktUWWRovMxEhdibnpt5eyFmYJJhHtQ== dependencies: prosemirror-model "^1.0.0" @@ -12423,10 +12420,10 @@ prosemirror-utils@^0.9.6: resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.9.6.tgz#3d97bd85897e3b535555867dc95a51399116a973" integrity sha512-UC+j9hQQ1POYfMc5p7UFxBTptRiGPR7Kkmbl3jVvU8VgQbkI89tR/GK+3QYC8n+VvBZrtAoCrJItNhWSxX3slA== -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.10.0.tgz#7de5de75f0c90f8b9f09d09ed4467554d59adddb" - integrity sha512-STHw0xHfk+XPMqMLTKykRL1qEMtO+n1GWINBl94IPIq82AmWO1Ors4wVw93HKo/oIadWRrP/7faNJKh1UVLrTg== +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.11.4: + version "1.11.4" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.11.4.tgz#f80aec8924d59d4c3456dcc5bfea733758ec9b40" + integrity sha512-J0g7xiCDx+p3CtpC69E7HvMmnW7yCILEhOXxSANZPX8iIwUrVTfdWKAzufi9F9MoM08ewsaF254xV90NpkGWVQ== dependencies: prosemirror-model "^1.1.0" prosemirror-state "^1.0.0" @@ -14515,62 +14512,62 @@ tippy.js@^4.3.5: dependencies: popper.js "^1.14.7" -tiptap-commands@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.11.0.tgz#8c259e93d70447e93cedefcfa73a36301cd60a81" - integrity sha512-WDX3JfI6Z80CCxkDfKUn6ya2UT3r1AM/McbB63oXq6iUyY5wZmw+qu/9LkSe3aISRTy9tfUKzJLjB7w9UnQ9Ig== +tiptap-commands@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.12.0.tgz#603b1c710c6950950eb1a7fc5279008f36bc2962" + integrity sha512-LWAVHOxsFR4yUJuruEwJ2QMwe0e9S4kHQ4HVIPEIofhuXKW4vmjvvX9Lzgi4cHy5cXC/TBAU2D43BNy7vdH1Kg== dependencies: prosemirror-commands "^1.0.8" prosemirror-inputrules "^1.0.4" - prosemirror-model "^1.7.1" + prosemirror-model "^1.7.2" prosemirror-schema-list "^1.0.3" prosemirror-state "^1.2.4" - prosemirror-tables "^0.9.1" + prosemirror-tables "^0.9.5" prosemirror-utils "^0.9.6" - tiptap-utils "^1.7.0" + tiptap-utils "^1.8.0" -tiptap-extensions@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.27.0.tgz#547d2fbc8234818d195eef45a46e14aed7859a70" - integrity sha512-DVazwQuEkWGjE45nhznB9LbD233s/0KOmWHcN6V1Ixm+/97Gaw1fEPUTIz/tHPYg3WKhPFOxI965sSB8Ne7Dnw== +tiptap-extensions@~1.28.0: + version "1.28.0" + resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.28.0.tgz#4704945e7a4fe33a77de11847f7ca3058008895e" + integrity sha512-yGKXGUnOrLhnXpnhTrL4tDJv+CSgyqVu0//M80uiY097btYnf/K0t7i0StRCY3Xg5mX5YFL9Q01f9Ppyi2jgtQ== dependencies: lowlight "^1.12.1" prosemirror-collab "^1.1.2" prosemirror-history "^1.0.4" - prosemirror-model "^1.7.1" + prosemirror-model "^1.7.2" prosemirror-state "^1.2.4" - prosemirror-tables "^0.9.1" - prosemirror-transform "^1.1.3" + prosemirror-tables "^0.9.5" + prosemirror-transform "^1.1.4" prosemirror-utils "^0.9.6" - prosemirror-view "^1.10.0" - tiptap "^1.25.0" - tiptap-commands "^1.11.0" + prosemirror-view "^1.11.4" + tiptap "^1.26.0" + tiptap-commands "^1.12.0" -tiptap-utils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.7.0.tgz#eb9d1f9e6be7b2e6b50b8aaf0bb47f1a68266b41" - integrity sha512-nJUrzR2cf+kcPyE2bIfzjnOewOynLm9kofQPIk2tMYwXfsgeNvYhMIbul4AJPYNoYyOLGUQ+vGpF6/5eUtC2Ew== +tiptap-utils@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.8.0.tgz#cb03a263a1b1672bf4cccccb2078506fa91bd112" + integrity sha512-0k7zuhwrNpEAnoiH8kjAE9IUnqV8FNX1bv9W7we+jhQZPUuxODcpMX1oUkrN9i1seFVfPcxgQa+SmIy63kRKig== dependencies: - prosemirror-model "^1.7.1" + prosemirror-model "^1.7.2" prosemirror-state "^1.2.4" - prosemirror-tables "^0.9.1" + prosemirror-tables "^0.9.5" prosemirror-utils "^0.9.6" -tiptap@^1.25.0, tiptap@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.25.0.tgz#4e518805ac99bb3d157b99f8b902231ad89f054a" - integrity sha512-wPE96JjoHIMaWTPkZZqz0cayVe+QgR+1J7FR4h5MvJepPgrtwwQmgVVx7jAG7yXXZZdUhhrYlL2yMji4V7Vpjw== +tiptap@^1.26.0, tiptap@~1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.26.0.tgz#edaa07b4b9b6836d433d0b8017d26d37cc0cc3c9" + integrity sha512-lKJnZ4jL3luu3C5Y5aZIEj2spAfNPSwc5HPB+n9HhpSaWAfGM9XTOLm6I0EIbkLHiCnYNjItlLP6p1g+KPdtSw== dependencies: prosemirror-commands "^1.0.8" - prosemirror-dropcursor "^1.1.1" + prosemirror-dropcursor "^1.1.2" prosemirror-gapcursor "^1.0.4" prosemirror-inputrules "^1.0.4" prosemirror-keymap "^1.0.1" - prosemirror-model "^1.7.1" + prosemirror-model "^1.7.2" prosemirror-state "^1.2.4" - prosemirror-view "^1.10.0" - tiptap-commands "^1.11.0" - tiptap-utils "^1.7.0" + prosemirror-view "^1.11.4" + tiptap-commands "^1.12.0" + tiptap-utils "^1.8.0" title-case@^2.1.0: version "2.1.1" @@ -15315,6 +15312,13 @@ vue-router@~3.0.7: resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.7.tgz#b36ca107b4acb8ff5bc4ff824584059c23fcb87b" integrity sha512-utJ+QR3YlIC/6x6xq17UMXeAfxEvXA0VKD3PiSio7hBOZNusA1jXcbxZxVEfJunLp48oonjTepY8ORoIlRx/EQ== +vue-scrollto@^2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/vue-scrollto/-/vue-scrollto-2.17.1.tgz#cd62ee0b98cf7e2ba9fd94f029addcd093978a48" + integrity sha512-uxOJXg6cZL88B+hTXRHDJMR+gHGiaS70ZTNk55fE5Z2TdwyIx9K/IHoNeTrtBrM6u3FASAIymKjZaQLmDf8Ykg== + dependencies: + bezier-easing "2.1.0" + vue-server-renderer@^2.6.10: version "2.6.10" resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.10.tgz#cb2558842ead360ae2ec1f3719b75564a805b375"