diff --git a/SUMMARY.md b/SUMMARY.md index c281e2fae..10d997a32 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -28,6 +28,7 @@ * [HTTPS](deployment/digital-ocean/https/README.md) * [Human Connection](deployment/human-connection/README.md) * [Mailserver](deployment/human-connection/mailserver/README.md) + * [Maintenance](deployment/human-connection/maintenance/README.md) * [Volumes](deployment/volumes/README.md) * [Neo4J Offline-Backups](deployment/volumes/neo4j-offline-backup/README.md) * [Volume Snapshots](deployment/volumes/volume-snapshots/README.md) diff --git a/backend/Dockerfile b/backend/Dockerfile index 935077c98..0df78f727 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.6-alpine as base +FROM node:12.7-alpine as base LABEL Description="Backend of the Social Network Human-Connection.org" Vendor="Human Connection gGmbH" Version="0.0.1" Maintainer="Human Connection gGmbH (developer@human-connection.org)" EXPOSE 4000 diff --git a/backend/package.json b/backend/package.json index f82d91dc0..3cc4936c8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,6 +9,7 @@ "dev": "nodemon --exec babel-node src/ -e js,gql", "dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/index.js -e js,gql", "lint": "eslint src --config .eslintrc.js", + "jest": "jest --forceExit --detectOpenHandles --runInBand", "test": "run-s test:jest test:cucumber", "test:before:server": "cross-env GRAPHQL_URI=http://localhost:4123 GRAPHQL_PORT=4123 yarn run dev 2> /dev/null", "test:before:seeder": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DISABLED_MIDDLEWARES=permissions,activityPub yarn run dev 2> /dev/null", @@ -47,13 +48,13 @@ "apollo-client": "~2.6.3", "apollo-link-context": "~1.0.18", "apollo-link-http": "~1.5.15", - "apollo-server": "~2.7.0", - "apollo-server-express": "^2.6.9", + "apollo-server": "~2.8.0", + "apollo-server-express": "^2.7.2", "bcryptjs": "~2.4.3", "cheerio": "~1.0.0-rc.3", "cors": "~2.8.5", "cross-env": "~5.2.0", - "date-fns": "2.0.0-beta.1", + "date-fns": "2.0.0-beta.3", "debug": "~4.1.1", "dotenv": "~8.0.0", "express": "^4.17.1", @@ -61,14 +62,30 @@ "graphql": "~14.4.2", "graphql-custom-directives": "~0.2.14", "graphql-iso-date": "~3.6.1", - "graphql-middleware": "~3.0.2", + "graphql-middleware": "~3.0.3", "graphql-shield": "~6.0.4", "graphql-tag": "~2.10.1", - "helmet": "~3.19.0", + "helmet": "~3.20.0", "jsonwebtoken": "~8.5.1", "linkifyjs": "~2.1.8", "lodash": "~4.17.14", - "merge-graphql-schemas": "^1.5.8", + "merge-graphql-schemas": "^1.6.1", + "metascraper": "^4.10.3", + "metascraper-audio": "^5.5.0", + "metascraper-author": "^5.6.3", + "metascraper-clearbit-logo": "^5.3.0", + "metascraper-date": "^5.6.3", + "metascraper-description": "^5.5.0", + "metascraper-image": "^5.6.3", + "metascraper-lang": "^5.6.3", + "metascraper-lang-detector": "^4.8.5", + "metascraper-logo": "^5.5.0", + "metascraper-publisher": "^5.6.3", + "metascraper-soundcloud": "^5.5.3", + "metascraper-title": "^5.6.3", + "metascraper-url": "^5.5.0", + "metascraper-video": "^5.6.3", + "metascraper-youtube": "^4.8.5", "neo4j-driver": "~1.7.4", "neo4j-graphql-js": "^2.6.3", "neode": "^0.2.16", @@ -83,23 +100,23 @@ "wait-on": "~3.3.0" }, "devDependencies": { - "@babel/cli": "~7.5.0", - "@babel/core": "~7.5.4", + "@babel/cli": "~7.5.5", + "@babel/core": "~7.5.5", "@babel/node": "~7.5.5", "@babel/plugin-proposal-throw-expressions": "^7.2.0", "@babel/preset-env": "~7.5.5", "@babel/register": "~7.5.5", - "apollo-server-testing": "~2.7.0", + "apollo-server-testing": "~2.8.0", "babel-core": "~7.0.0-0", "babel-eslint": "~10.0.2", "babel-jest": "~24.8.0", "chai": "~4.2.0", "cucumber": "~5.1.0", - "eslint": "~6.0.1", + "eslint": "~6.1.0", "eslint-config-prettier": "~6.0.0", "eslint-config-standard": "~12.0.0", - "eslint-plugin-import": "~2.18.0", - "eslint-plugin-jest": "~22.11.1", + "eslint-plugin-import": "~2.18.2", + "eslint-plugin-jest": "~22.14.0", "eslint-plugin-node": "~9.1.0", "eslint-plugin-prettier": "~3.1.0", "eslint-plugin-promise": "~4.2.1", @@ -110,4 +127,4 @@ "prettier": "~1.18.2", "supertest": "~4.0.2" } -} +} \ No newline at end of file diff --git a/backend/src/jest/snapshots/embeds/HumanConnectionOrg.html b/backend/src/jest/snapshots/embeds/HumanConnectionOrg.html new file mode 100644 index 000000000..ed3f96cda --- /dev/null +++ b/backend/src/jest/snapshots/embeds/HumanConnectionOrg.html @@ -0,0 +1,38 @@ + + +Human Connection - Startseite | Facebook + + + + + + + + + + + + + + + + + + + + + + + +
Mehr von Human Connection auf Facebook anzeigen
Mehr von Human Connection auf Facebook anzeigen
oder
Neues Konto erstellen
Willkommen bei Human Connection
Human Connection ist ein gemeinnütziges soziales Wissens- und Aktionsnetzwerk mit Sitz in Weilheim-T...
Mehr anzeigen
CommunityAlle ansehen
Highlights info row image
24.407 Personen gefällt das
Highlights info row image
25.652 Personen haben das abonniert
Highlights info row image
72 Besuche
Highlights info row image
Bahnhofstraße 11 (512,71 km)
73235 Weilheim an der Teck
Highlights info row image
01514 3804222
Highlights info row image
Preisklasse €
SeitentransparenzMehr anzeigen
Facebook liefert Informationen, mit denen du die Intention von Seiten besser verstehst. Hier erfährst du mehr zu den Personen, die die Seiten verwalten und Beiträge darin posten.
Seite erstellt – 21. Oktober 2015
Ähnliche Seiten
OrteWeilheim an der TeckHuman Connection
Beiträge

Human Connection soll mehr als nur ein einfacher Facebookersatz werden – nämlich vor allem lösungsorientiert und zukunftsfähig. Wir möchten mit unserem Netzwerk dazu beitragen, dass mehr Menschen aktiv werden und selbst etwas verändern. Vor allem möchten wir, dass sie nicht jede negative Neuigkeit in einem sozialen Netzwerk “schlucken” müssen. Der Gedanke man könne doch eh nichts ändern, stimmt nur dann, wenn andere Leser genauso denken. Gemeinsam ist so viel mehr möglich und... dafür braucht es zunächst erst einmal jeden Einzelnen.

Wie kann Human Connection dabei helfen?

Das erfahrt ihr im ganzen Beitrag:
https://human-connection.org/human-connection-loesungsorie…/

Mehr anzeigen
Bild könnte enthalten: Text

Human Connection ist unser Herzensprojekt, welches allerdings uns und auch euch sehr viel Geduld abfordert. Warum dauert das eigentlich so lange?

Hier erfahrt ihr die Antwort:

human-connection.org
Human Connection ist unser Herzensprojekt, welches allerdings uns und auch euch sehr viel Geduld abfordert. Warum dauert das eigentlich so lange?
Videos
Schau es an und Du weißt, was zu tun ist
10
2
Messe Fair Handeln: Human Connection beim Hackathon (Stuttgart 26.-28.04.2019)
9
1
In Nerds We Trust - Open Source - Wir lieben freie Software!
4
1
+ + + + \ No newline at end of file diff --git a/backend/src/jest/snapshots/embeds/babyLovesCat.html b/backend/src/jest/snapshots/embeds/babyLovesCat.html new file mode 100644 index 000000000..88ce2a327 --- /dev/null +++ b/backend/src/jest/snapshots/embeds/babyLovesCat.html @@ -0,0 +1,1545 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +Baby Loves Cat - YouTube + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ DE +
+
+
+ +
+
+
+

+ + + +Wird geladen... + +

+ +
+
+
+ +
+ +
+
+
+ +Du siehst YouTube auf Deutsch. +Du kannst diese Einstellung unten ändern. +
+
+ + You're viewing YouTube in German. + You can change this preference below. +
+
+
+ +
+
+ +
+
+ + +
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

+ + + + + Baby Loves Cat + + +

+
+
+ + +
+ + + + + +
+
30.160.931 Aufrufe
+
+
+
+
+
+ + + + + +
+
+ + + +
+
+
+
+

+ + + +Wird geladen... + +

+ +
+
+
+ +
+ +
+
+
+

+ + + +Wird geladen... + +

+ +
+
+
+

+Transkript +

+
+ +
+ + + +
+
+Das interaktive Transkript konnte nicht geladen werden. +
+ + +
+
+ +
+ +
+
+

+ + + +Wird geladen... + +

+ +
+
+ + +
+
+ Die Bewertungsfunktion ist nach Ausleihen des Videos verfügbar. +
+ +
+ +
+
+ Diese Funktion ist gerade nicht verfügbar. Bitte versuche es später noch einmal. +
+
+ + +
+ + +
+ + +
Am 16.08.2015 veröffentlicht

She's incapable of controlling her limbs when her kitty is around. The obsession grows every day.

Ps. That's a sleep sack she's in. Not a starfish outfit. Although I wish I were cool enough to dress my daughter in a starfish outfit.

Jukin Media Verified (Original)
*For licensing / permission to use please contact licensing(at)jukinmediadotcom

+
    +
  • +

    + Kategorie +

    + +
  • + +
+
+
+ +
+ + +
+
+
+ + +
+ Kommentare sind für dieses Video deaktiviert. +
+ +
+ + + + +
+
+
+
+ +
+ + +
+
+
+ + + +
+
+ +
+ +
+
+
+Anzeige +
+
+
+
+ + +
+
+
+
+
+ + + +Wenn Autoplay aktiviert ist, wird die Wiedergabe automatisch mit einem der aktuellen Videovorschläge fortgesetzt. + + + +
+

+ Nächstes Video +

+ + +
+
+ + +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+ +
+ +
+
+ + +
+
+ + +
+ , um dieses Video zur Playlist "Später ansehen" hinzuzufügen. + +
+
+

+Hinzufügen +

+
+
+

+ + + + Playlists werden geladen... + +

+ +
+
+ + + + + + + \ No newline at end of file diff --git a/backend/src/jest/snapshots/embeds/pr960.html b/backend/src/jest/snapshots/embeds/pr960.html new file mode 100644 index 000000000..9b564f09a --- /dev/null +++ b/backend/src/jest/snapshots/embeds/pr960.html @@ -0,0 +1,10042 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Editor embeds merge in nitro embed by mattwr18 · Pull Request #960 · Human-Connection/Human-Connection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + +
+ +
+ + +
+ +
+ + + +
+
+
+ + + + + + + + + + + + + + + +
+
+ +
    + + + + + +
  • + +
    + +
    + + + Unwatch + + +
    + Notifications +
    +
    + + + + + + + +
    +
    +
    + +
    +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    + + Fork + +
    + +

    Fork Human-Connection

    +
    +
    + +
    +

    If this dialog fails to load, you can visit the fork page directly.

    +
    +
    +
    +
    + + +
  • +
+ +

+ + /Human-Connection + + + + + + + + + +
+
+ + Select a Repo + + shift + + + z + + +
+
+
+
+ +
+
+ + +
+ Switch repository + + + + +
+ + +
+
+ +
+
+ + + +
+ Loading your repositories... +
+ + +
+
+
/Nitro +
+ + +

+ +
+ + + + +
+
+
+ + + +
+ + + + +
+ + +
+ +
+
+
+ + +
+ +

+ + Editor embeds merge in nitro embed + + #960 +

+
+ +
+
+ + + +
+
+
+ + + Open + + + +
+
+ + + wants to merge + 55 + commits into + + + + + +
+
+ + base: + master + + + + + + +
+
+ +
+ +from + + + + + +
+
+ + + +
+
+ + + + + + + +

Conversation

+
+ +
+ +
Pipelines
+ + + + + + + + +
+
+ +
+ + + + Projects + + +
+
+ Projects + +
+ +
+ +
+
+ +
+
+
+ + + + None yet + + +
+ +
Not inside a Release
+ + + +
+
+ +
+ 4 participants +
+ +
+
+ + + +
+
+ + + Lock conversation + + +
+
+ +

+ Lock conversation on this pull request +

+
+
+
    +
  • Other users can’t add new comments to this pull request.
  • +
  • + You and other members of teams with + write access + to this repository can still leave comments that others can see. +
  • +
  • You can always unlock this pull request again in the future.
  • +
+ +
+
+ +
+
+ +

+ Optionally, choose a reason for locking that others can see. Learn more about when + it’s appropriate to lock conversations. +

+
+
+
+ +
+
+
+ + + + + + +
+ +
+ +
+
+ + +
+ Move issue to another repository + + + + + +
+ + + + +
+
+ +
+
+ + +
+
+ Loading your repositories... +
+
+
+
+
+
+ + + +
+
+ + +
+ +
+
+ + +
+ + + +
+ @mattwr18 + +
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +
+

+ Pick your reaction +

+ + + +
+ + + + + + + + + + +
+
+ +
+ + + + +
+ + + + + + Copy link + + + + + + + + + + + + Report abuse + + + +
+ +
+ + + + + Member + + + + + + +

+ + + + + commented + + + 18 days ago + + + + +

+
+ + +
+ + + + + + + + + +
+

cake Pullrequest

+ +

Issues

+ + +
+
+ + + + +
+
+ +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+ +
Editor embeds merge in nitro embed hasno dependencies
+ + + + +
+ + + + +
+ + +
+

+ + + + + appinteractive + and others + added some commits + + on Dec 27, 2018 + +

+
+
+ + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + cc06d53 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + +
+ + Create README.md + + + +
+ +
+ + + +
+ +
+
+ +
+ + 3b49e9f + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + 18bfc85 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + f44121b + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + 32fad61 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + f8f0ff3 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + 8e71c27 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + +
+ + Improved readme + + + +
+ +
+ + + +
+ +
+
+ +
+ + 053cc86 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + 9ddf89d + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + +
+ + Upgraded screenshot + + + +
+ +
+ + + +
+ +
+
+ +
+ + c310644 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + 296fc5a + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-bot +
+
+ + + +
+ + Bump got from 9.5.0 to 9.6.0 + + + + + +
Bumps [got](https://github.com/sindresorhus/got) from 9.5.0 to 9.6.0.
+- [Release notes](https://github.com/sindresorhus/got/releases)
+- [Commits](sindresorhus/got@v9.5.0...v9.6.0)
+
+Signed-off-by: dependabot[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + 6461a43 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-bot +
+
+ + + +
+ + Bump metascraper from 4.8.5 to 4.10.3 + + + + + +
Bumps [metascraper](https://github.com/microlinkhq/metascraper) from 4.8.5 to 4.10.3.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v4.10.3)
+
+Signed-off-by: dependabot[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + f228eb3 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @appinteractive +
+
+ + + +
+ + Update README.md + + + +
+ +
+ + + +
+ +
+
+ +
+ + d3624ab + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-description from 4.8.5 to 5.5.0 + + + + + +
Bumps [metascraper-description](https://github.com/microlinkhq/metascraper) from 4.8.5 to 5.5.0.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v5.5.0)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + 2a81c5b + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #7 from Human-Connection/dependabot/npm_and_yarn/g… + + + + + +
…ot-9.6.0
+
+Bump got from 9.5.0 to 9.6.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + 2e66ee4 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #17 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-4.10.3
+
+Bump metascraper from 4.8.5 to 4.10.3
+ +
+ +
+ + + +
+ +
+
+ +
+ + b7e7f22 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-clearbit-logo from 4.8.5 to 5.3.0 + + + + + +
Bumps [metascraper-clearbit-logo](https://github.com/microlinkhq/metascraper-clearbit-logo) from 4.8.5 to 5.3.0.
+- [Release notes](https://github.com/microlinkhq/metascraper-clearbit-logo/releases)
+- [Commits](https://github.com/microlinkhq/metascraper-clearbit-logo/commits)
+
+Signed-off-by: dependabot[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + 4ceff96 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-video from 4.8.5 to 5.5.0 + + + + + +
Bumps [metascraper-video](https://github.com/microlinkhq/metascraper) from 4.8.5 to 5.5.0.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v5.5.0)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + 69b1a25 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-logo from 4.8.5 to 5.5.0 + + + + + +
Bumps [metascraper-logo](https://github.com/microlinkhq/metascraper) from 4.8.5 to 5.5.0.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v5.5.0)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + b7ef87e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-audio from 4.8.5 to 5.5.0 + + + + + +
Bumps [metascraper-audio](https://github.com/microlinkhq/metascraper) from 4.8.5 to 5.5.0.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v5.5.0)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + 82dcc99 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ + af8ed1c + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-description from 4.8.5 to 5.5.0 + + + + + +
Bumps [metascraper-description](https://github.com/microlinkhq/metascraper) from 4.8.5 to 5.5.0.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v5.5.0)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + d1efdad + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-url from 4.8.5 to 5.5.0 + + + + + +
Bumps [metascraper-url](https://github.com/microlinkhq/metascraper) from 4.8.5 to 5.5.0.
+- [Release notes](https://github.com/microlinkhq/metascraper/releases)
+- [Changelog](https://github.com/microlinkhq/metascraper/blob/master/CHANGELOG.md)
+- [Commits](microlinkhq/metascraper@v4.8.5...v5.5.0)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + b8725f1 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge branch 'master' of github.com:Human-Connection/Nitro-Embed into… + + + + + +
… dependabot/npm_and_yarn/metascraper-description-5.5.0
+ +
+ +
+ + +
+ +
+
+ +
+ + 05db6fe + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge branch 'dependabot/npm_and_yarn/metascraper-description-5.5.0' … + + + + + +
…of github.com:Human-Connection/Nitro-Embed into dependabot/npm_and_yarn/metascraper-description-5.5.0
+ +
+ +
+ + +
+ +
+
+ +
+ + bc9c21c + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #67 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-description-5.5.0
+
+Bump metascraper-description from 4.8.5 to 5.5.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + d633331 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #25 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-clearbit-logo-5.3.0
+
+Bump metascraper-clearbit-logo from 4.8.5 to 5.3.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + acfc956 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #69 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-logo-5.5.0
+
+Bump metascraper-logo from 4.8.5 to 5.5.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + a22edd9 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #71 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-audio-5.5.0
+
+Bump metascraper-audio from 4.8.5 to 5.5.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + 0e89f27 + +
+
+ + +
+
+
+ + +
+ + + + + +
+ + +
+

+ + + + + mattwr18 + and others + added some commits + + 19 days ago + +

+
+
+ + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #72 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-video-5.5.0
+
+Bump metascraper-video from 4.8.5 to 5.5.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + 46edb24 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @dependabot-preview +
+
+ + + +
+ + Bump metascraper-soundcloud from 4.8.5 to 5.5.3 + + + + + +
Bumps [metascraper-soundcloud](https://github.com/microlinkhq/metascraper-soundcloud) from 4.8.5 to 5.5.3.
+- [Release notes](https://github.com/microlinkhq/metascraper-soundcloud/releases)
+- [Commits](https://github.com/microlinkhq/metascraper-soundcloud/commits)
+
+Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
+ +
+ +
+ + + +
+ +
+
+ +
+ + 721c75e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge branch 'master' of github.com:Human-Connection/Nitro-Embed into… + + + + + +
… dependabot/npm_and_yarn/metascraper-url-5.5.0
+ +
+ +
+ + +
+ +
+
+ +
+ + 93e82de + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #73 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-url-5.5.0
+
+Bump metascraper-url from 4.8.5 to 5.5.0
+ +
+ +
+ + + +
+ +
+
+ +
+ + 27eb5a2 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #75 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…apollo-server-2.6.7
+
+Bump apollo-server from 2.3.1 to 2.6.7
+ +
+ +
+ + + +
+ +
+
+ +
+ + 638f1f3 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge pull request #76 from Human-Connection/dependabot/npm_and_yarn/… + + + + + +
…metascraper-soundcloud-5.5.3
+
+Bump metascraper-soundcloud from 4.8.5 to 5.5.3
+ +
+ +
+ + + +
+ +
+
+ +
+ + 5091fe5 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + + + +
+ + +
+ +
+
+ +
+ + 089b07c + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + + + +
+ + +
+ +
+
+ +
+ + cc6819e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + + + +
+ + +
+ +
+
+ +
+ + 7a3694a + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + +
+ + Merge in Nitro-Embed + + + +
+ +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + eabb58e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @mattwr18 +
+
+ + + + + +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + ed658e9 + +
+
+ + +
+
+
+ + +
+ + + +
+ + +
+ + + +
+ @codecov + +
+ + + +
+
+ + + + +
+ +
+

+ This comment has been minimized. + +

+
Show comment
+
Hide comment
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + Copy link + + + + + + + + +
+ + +
+
+ + +
+ + + + Report abuse + +
+ Block user + + + +
+ + + +
+
+ +
+ @codecov +
+

+ + + + codecov + bot + + + + 18 days ago + +

+ + + + +
+

Codecov Report

+
+

exclamation No coverage uploaded for pull request base (master@324330a). Click here to learn what that means.
+The diff coverage is n/a.

+
+
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +
+

+ Pick your reaction +

+ + + +
+ + + + + + + + + + +
+
+ +
+ + + + +
+ + + + + + Copy link + + + + + + +
+ + + Reference in new issue + + +
+ +

Reference in new issue

+
+ +
+ +
+
+
+
+
+ + + Human-Connection + + +
+ Repositories +
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+
+ + + + + + + +
+ + +
+ + + + Report abuse + +
+ Block user + + + +
+ + + +
+
+ +
+ + + + + + + + +

+ + + + + commented + + + 18 days ago + + + + +

+
+ + +
+
+ + +
+ +

Choose a reason for hiding this comment

+

The reason will be displayed to describe this comment to others. Learn more.

+
+ + + +
+ +
+ + + + + + + + + +
+

Codecov Report

+
+

exclamation No coverage uploaded for pull request base (master@324330a). Click here to learn what that means.
+The diff coverage is n/a.

+
+
+
+ + + + +
+
+ +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+ + +
+ + +
+ + + + +
+ +
+

+ + + + @mattwr18 + mattwr18 + + + referenced this pull request + + 16 days ago + +

+ + + + + Closed + + + + + + +

+ + Editor embeds + #953 +

+ + + + + + + +
+ + + +
+ + + +
+ + +
+ + + +
+ @mattwr18 + +
+ + + +
+
+ + + + +
+ +
+

+ This comment has been minimized. + +

+
Show comment
+
Hide comment
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + Copy link + + + + + + + + +
+ + +
+
+ + +
+ + + + Report abuse + + +
+
+ +
+ @mattwr18 +
+

+ + + + mattwr18 + + + + + 9 days ago + +

+ + + Member + + + + Author + + + +
+

does this look ok @roschaefer? I used tomono, but because I already had a repo with the name Human-Connection, I needed to remove it and recreate it with the merged commit history. This caused some small issues for me locally, but I think others won't face the same.

+

The files changed and commit history look good to me

+
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +
+

+ Pick your reaction +

+ + + +
+ + + + + + + + + + +
+
+ +
+ + + + +
+ + + + + + Copy link + + + + + + +
+ + + Reference in new issue + + +
+ +

Reference in new issue

+
+ +
+ +
+
+
+
+
+ + + Human-Connection + + +
+ Repositories +
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+
+ + + + + + + +
+ + +
+ + + + Report abuse + + +
+
+ +
+ + + + + Member + + + + + Author + + + + +

+ + + + + commented + + + 9 days ago + + + + +

+
+ + +
+
+ + +
+ +

Choose a reason for hiding this comment

+

The reason will be displayed to describe this comment to others. Learn more.

+
+ + + +
+ +
+ + + + + + + + + +
+

does this look ok @roschaefer? I used tomono, but because I already had a repo with the name Human-Connection, I needed to remove it and recreate it with the merged commit history. This caused some small issues for me locally, but I think others won't face the same.

+

The files changed and commit history look good to me

+
+
+ + + + +
+
+ +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+ + +
+ + +
+ + + + +
+ + +
+
+
+ + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Merge remote-tracking branch 'origin/master' into 256-editor-embeds-m… + + + + + +
…erge-in-nitro-embed
+ +
+ +
+ + +
+ +
+
+ +
+ + b745908 + +
+
+ + +
+
+
+ + +
+ + + +
+ + +
+ + + +
+ @roschaefer + +
+ + + +
+
+ + + + +
+ +
+

+ This comment has been minimized. + +

+
Show comment
+
Hide comment
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + Copy link + + + + + + + + +
+ + +
+
+ + +
+ +
+
+ +
+ @roschaefer +
+

+ + + + roschaefer + + + + + 5 days ago + +

+ + + Member + + + + +
+

@mattwr18 this looks good, but could sb. explain me why this is a separate service and not just another resolver in our backend?

+

@appinteractive maybe?

+
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +
+

+ Pick your reaction +

+ + + +
+ + + + + + + + + + +
+
+ +
+ + + + +
+ + + + + + Copy link + + + + + + +
+ + + Reference in new issue + + +
+ +

Reference in new issue

+
+ +
+ +
+
+
+
+
+ + + Human-Connection + + +
+ Repositories +
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+
+ + + + + + + +
+ + +
+ +
+
+ +
+ + + + + Member + + + + + + +

+ + + + + commented + + + 5 days ago + + + + +

+
+ + +
+
+ + +
+ +

Choose a reason for hiding this comment

+

The reason will be displayed to describe this comment to others. Learn more.

+
+ + + +
+ +
+ + + + + + + + + +
+

@mattwr18 this looks good, but could sb. explain me why this is a separate service and not just another resolver in our backend?

+

@appinteractive maybe?

+
+
+ + + + +
+
+ +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+ + +
+ + +
+ + + + +
+ + +
+ + + +
+ @mattwr18 + +
+ + + +
+
+ + + + +
+ +
+

+ This comment has been minimized. + +

+
Show comment
+
Hide comment
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + Copy link + + + + + + + + +
+ + +
+
+ + +
+ + + + Report abuse + + +
+
+ +
+ @mattwr18 +
+

+ + + + mattwr18 + + + + + 5 days ago + +

+ + + Member + + + + Author + + + +
+

I think it could be, I thought the same thing myself @roschaefer

+
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +
+

+ Pick your reaction +

+ + + +
+ + + + + + + + + + +
+
+ +
+ + + + +
+ + + + + + Copy link + + + + + + +
+ + + Reference in new issue + + +
+ +

Reference in new issue

+
+ +
+ +
+
+
+
+
+ + + Human-Connection + + +
+ Repositories +
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+
+ + + + + + + +
+ + +
+ + + + Report abuse + + +
+
+ +
+ + + + + Member + + + + + Author + + + + +

+ + + + + commented + + + 5 days ago + + + + +

+
+ + +
+
+ + +
+ +

Choose a reason for hiding this comment

+

The reason will be displayed to describe this comment to others. Learn more.

+
+ + + +
+ +
+ + + + + + + + + +
+

I think it could be, I thought the same thing myself @roschaefer

+
+
+ + + + +
+
+ +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + +

+ The content you are editing has changed. Please try again. +

+ + +
+ + + + + + + + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+ + +
+
+
+

Nothing to preview

+
+
+ +
+ +
+ + + + +
+ + +
+
+ + +
+ +
+
+ + +
+ + +
+ + + + +
+ + +
+

+ + + + + roschaefer + + added some commits + + 2 days ago + +

+
+
+ + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Merge remote-tracking branch 'origin/master' into 256-editor-embeds-m… + + + + + +
…erge-in-nitro-embed
+ +
+ +
+ + +
+ +
+
+ +
+ + b3712d9 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + + + +
+ + +
+ +
+
+ +
+ + d4c3b7a + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + + + +
+ + +
+ +
+
+ +
+ + 2e6ea62 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + + + +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + f82b2c3 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + + + +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + 17ccbce + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Fix lint + + + +
+ +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + 73e879e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Merge branch 'master' of github.com:Human-Connection/Human-Connection… + + + + + +
… into 256-editor-embeds-merge-in-nitro-embed
+ +
+ +
+ + +
+ +
+
+ +
+ + 7a9d933 + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Remove obscure `embed` attribute and remove cache + + + + + +
The cache is a possible memory leak: It grows over time and never gets
+cleaned.
+ +
+ +
+ + +
+ +
+
+ +
+ + d81c38c + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Start to mock+test embeds resolver + + + + + +
+ Put oembed providers into a file
++ Add test snapshots
++ Remove unnecessary request-native dependency
+ +
+ +
+ + +
+ +
+
+ +
+ + f5730fc + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + + + +
+ + +
+ +
+
+ +
+ + 579ec7e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Add npm script to run tests without http servers + + + + + +
Remove this script once we refactored all tests to use
+`apollo-server-testing`.
+ +
+ +
+ + +
+ +
+
+ +
+ + d7d2c2e + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + + + +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + 75743ca + +
+
+ + + + +
+ +
+ +
+ + +
+
+ + @roschaefer +
+
+ + + +
+ + Remove `metascraper-logo-favicon` altogether + + + + + +
It's doing http requests which are hard to test and hard to maintain.
+Therefore let's remove it until we really need it.
+ +
+ +
+ + +
+ +
+ +
+ + + + +
+ + +
+ +
+ + 3d7a30d + +
+
+ + +
+
+
+ + +
+ + + + + +
+
+ +
+ + +
+ +
+ + + +
+ +

Merge state

+
+

Add more commits by pushing to the 256-editor-embeds-merge-in-nitro-embed branch on Human-Connection/Human-Connection.

+ + + + + + +
+ + + +
+
+ +
+
+ +
+ + + Add your review + + +

+ Review required +

+ + + At least 1 approving review is required by reviewers with write access. + Learn more. + + + +
+ + +
+
+ +
+ +
+ + +

All checks have passed

+ 4 successful checks +
+ +
+
+
+ +
+ + + @travis-ci + + + +
+ + Travis CI - Branch + + + Successful in 18m + + — + Build Passed +
+ +
+ Required + + Details +
+ +
+
+
+ +
+ + + @travis-ci + + + +
+ + Travis CI - Pull Request + + + Successful in 17m + + — + Build Passed +
+ +
+ Required + + Details +
+ +
+
+
+ +
+ + + @codecov + + + +
+ + codecov/project/backend + + + + + — + 25.29% (+1.97%) compared to d901432 +
+ +
+ + Details +
+ +
+
+
+ +
+ + + @codecov + + + +
+ + codecov/project/webapp + + + + + — + 45.23% remains the same compared to d901432 +
+ +
+ + Details +
+ +
+ +
+
+ + +
+
+ +
+
Merging is blocked
+ Merging can be performed automatically with 1 approving review. +
+ + + +
+ + +
+
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+
+ +
+
+
+ + +

+ + + + or view . +

+ + +
+

Merging via command line

+

+ If you do not want to use the merge button or an automatic merge cannot be + performed, you can perform a manual merge on the command line. +

+ +
+
+
+ +
+ +
+ + + + + + + + +
+
+ +

Step 1: From your project repository, bring in the changes and test.

+
+
+ + + +
+
git fetch origin
+git checkout -b 256-editor-embeds-merge-in-nitro-embed origin/256-editor-embeds-merge-in-nitro-embed
+git merge master
+
+ +

Step 2: Merge the changes and update on GitHub.

+
+
+ + + +
+
git checkout master
+git merge --no-ff 256-editor-embeds-merge-in-nitro-embed
+git push origin master
+
+
+ +
+
+
+
+ + + + +
+ + + + + +
+ + + +
+ +

Couldn’t update branch

+

Oops, something went wrong.

+ +
+
+ +

Connect this pull request with an existing issue

+ +
+ @roschaefer + +
+ + + + +
+ +
+
+ + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + +
+ Select a reply + ctrl . +
+ + + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + + +

+ + + + + Attach files by dragging & dropping, selecting or pasting them. + + + Uploading your files… + + + We don’t support that file type. + + with a + GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Attaching documents requires write permission to this repository. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + We don’t support that file type. + + with a GIF, JPEG, JPG, PNG, DOCX, GZ, LOG, PDF, PPTX, TXT, XLSX or ZIP. + + + + Yowza, that’s a big file + + with a file smaller than 10MB. + + + + This file is empty. + + with a file that’s not empty. + + + + This file is hidden. + + with another file. + + + + Something went really wrong, and we can’t process that file. + + + + + + + + + + +

+ +
+
+
+ + + +
+
+

Nothing to preview

+
+
+ +
+ + + + +
+ +
+
+ + + + + + +
+ +
+
+
+
+ + ProTip! + Add .patch or .diff to the end of URLs for Git’s plaintext views. +
+
+ + +
+
+ +
+
+ + + +
+ + +
+ +
+ +
+
+ + +
+ + + + + + +
+ + + You can’t perform that action at this time. +
+ + + + + + + + + + + + + + +
+ + + + +
\ No newline at end of file diff --git a/backend/src/middleware/index.js b/backend/src/middleware/index.js index 19c72c19f..ba5b9d324 100644 --- a/backend/src/middleware/index.js +++ b/backend/src/middleware/index.js @@ -52,10 +52,12 @@ export default schema => { if (CONFIG.DISABLED_MIDDLEWARES) { const disabledMiddlewares = CONFIG.DISABLED_MIDDLEWARES.split(',') order = order.filter(key => { + if (disabledMiddlewares.includes(key)) { + /* eslint-disable-next-line no-console */ + console.log(`Warning: Disabled "${disabledMiddlewares}" middleware.`) + } return !disabledMiddlewares.includes(key) }) - /* eslint-disable-next-line no-console */ - console.log(`Warning: "${disabledMiddlewares}" middlewares have been disabled.`) } const appliedMiddlewares = order.map(key => middlewares[key]) diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index 7958e610d..a803adb64 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -136,6 +136,7 @@ const permissions = shield( Query: { '*': deny, findPosts: allow, + embed: allow, Category: allow, Tag: allow, Report: isModerator, @@ -162,6 +163,7 @@ const permissions = shield( DeletePost: isAuthor, report: isAuthenticated, CreateSocialMedia: isAuthenticated, + UpdateSocialMedia: isAuthenticated, DeleteSocialMedia: isAuthenticated, // AddBadgeRewarded: isAdmin, // RemoveBadgeRewarded: isAdmin, diff --git a/backend/src/schema/helpers.js b/backend/src/schema/helpers.js new file mode 100644 index 000000000..fe61ccf57 --- /dev/null +++ b/backend/src/schema/helpers.js @@ -0,0 +1,9 @@ +export const undefinedToNull = list => { + const resolvers = {} + list.forEach(key => { + resolvers[key] = async (parent, params, context, resolveInfo) => { + return typeof parent[key] === 'undefined' ? null : parent[key] + } + }) + return resolvers +} diff --git a/backend/src/schema/resolvers/embeds.js b/backend/src/schema/resolvers/embeds.js new file mode 100644 index 000000000..ba27f77b2 --- /dev/null +++ b/backend/src/schema/resolvers/embeds.js @@ -0,0 +1,29 @@ +import scrape from './embeds/scraper.js' +import { undefinedToNull } from '../helpers' + +export default { + Query: { + embed: async (object, { url }, context, resolveInfo) => { + return scrape(url) + }, + }, + Embed: { + ...undefinedToNull([ + 'type', + 'title', + 'author', + 'publisher', + 'date', + 'description', + 'url', + 'image', + 'audio', + 'video', + 'lang', + 'html', + ]), + sources: async (parent, params, context, resolveInfo) => { + return typeof parent.sources === 'undefined' ? [] : parent.sources + }, + }, +} diff --git a/backend/src/schema/resolvers/embeds.spec.js b/backend/src/schema/resolvers/embeds.spec.js new file mode 100644 index 000000000..348fb50b0 --- /dev/null +++ b/backend/src/schema/resolvers/embeds.spec.js @@ -0,0 +1,216 @@ +import fetch from 'node-fetch' +import fs from 'fs' +import path from 'path' +import { createTestClient } from 'apollo-server-testing' +import createServer from '../../server' +import { gql } from '../../jest/helpers' + +jest.mock('node-fetch') +const { Response } = jest.requireActual('node-fetch') + +afterEach(() => { + fetch.mockRestore() +}) + +let variables = {} + +const HumanConnectionOrg = fs.readFileSync( + path.join(__dirname, '../../jest/snapshots/embeds/HumanConnectionOrg.html'), + 'utf8', +) +const pr960 = fs.readFileSync( + path.join(__dirname, '../../jest/snapshots/embeds/pr960.html'), + 'utf8', +) +const babyLovesCat = fs.readFileSync( + path.join(__dirname, '../../jest/snapshots/embeds/babyLovesCat.html'), + 'utf8', +) + +const babyLovesCatEmbedResponse = new Response( + JSON.stringify({ + height: 270, + provider_name: 'YouTube', + title: 'Baby Loves Cat', + type: 'video', + width: 480, + thumbnail_height: 360, + provider_url: 'https://www.youtube.com/', + thumbnail_width: 480, + html: + '', + thumbnail_url: 'https://i.ytimg.com/vi/qkdXAtO40Fo/hqdefault.jpg', + version: '1.0', + author_name: 'Merkley Family', + author_url: 'https://www.youtube.com/channel/UC5P8yei950tif7UmdPpkJLQ', + }), +) + +describe('Query', () => { + describe('embed', () => { + let embedAction + + beforeEach(() => { + embedAction = async variables => { + const { server } = createServer({ + context: () => {}, + }) + const { query } = createTestClient(server) + const embed = gql` + query($url: String!) { + embed(url: $url) { + type + title + author + publisher + date + description + url + image + audio + video + lang + sources + html + } + } + ` + return query({ query: embed, variables }) + } + }) + + describe('given a video link', () => { + beforeEach(() => { + fetch + .mockReturnValueOnce(Promise.resolve(new Response(''))) + .mockReturnValueOnce(Promise.resolve(JSON.stringify({}))) + variables = { url: 'https://www.w3schools.com/html/mov_bbb.mp4' } + }) + + it('shows some default data', async () => { + const expected = expect.objectContaining({ + data: { + embed: { + audio: null, + author: null, + date: null, + description: null, + html: null, + image: null, + lang: null, + publisher: null, + sources: ['resource'], + title: null, + type: 'link', + url: 'https://www.w3schools.com/html/mov_bbb.mp4', + video: null, + }, + }, + }) + await expect(embedAction(variables)).resolves.toEqual(expected) + }) + }) + + describe('given a Facebook link', () => { + beforeEach(() => { + fetch + .mockReturnValueOnce(Promise.resolve(new Response(HumanConnectionOrg))) + .mockReturnValueOnce(Promise.resolve('invalid json')) + variables = { url: 'https://www.facebook.com/HumanConnectionOrg/' } + }) + + it('does not crash if embed provider returns invalid JSON', async () => { + const expected = expect.objectContaining({ + data: { + embed: { + audio: null, + author: null, + date: expect.any(String), + description: + 'Human Connection, Weilheim an der Teck. Gefällt 24.407 Mal. An upcoming non-profit social network focused on local and global positive change. Twitter accounts : @hc_world (EN), @hc_deutschland (GE),...', + html: null, + image: + 'https://scontent.ftxl3-1.fna.fbcdn.net/v/t1.0-1/c5.0.200.200a/p200x200/12108307_997373093648222_70057205881020137_n.jpg?_nc_cat=110&_nc_oc=AQnPPYQlR0dU556gOfl4xkXr7IPZdRIAUfQeXl3fpUv4DAsFN8T4PfgOjPwuq85GPKGZ5S5E5mWQ8IVV1UiRBAIZ&_nc_ht=scontent.ftxl3-1.fna&oh=90309adddaab38839782f16e7d4b7bcf&oe=5DEEDFE5', + lang: 'de', + publisher: 'Facebook', + sources: ['resource'], + title: 'Human Connection', + type: 'link', + url: 'https://www.facebook.com/HumanConnectionOrg/', + video: null, + }, + }, + }) + await expect(embedAction(variables)).resolves.toEqual(expected) + }) + }) + + describe('given a Github link', () => { + beforeEach(() => { + fetch + .mockReturnValueOnce(Promise.resolve(new Response(pr960))) + .mockReturnValueOnce(Promise.resolve(JSON.stringify({}))) + variables = { url: 'https://github.com/Human-Connection/Human-Connection/pull/960' } + }) + + it('returns meta data even if no embed html can be retrieved', async () => { + const expected = expect.objectContaining({ + data: { + embed: { + type: 'link', + title: + 'Editor embeds merge in nitro embed by mattwr18 · Pull Request #960 · Human-Connection/Human-Connection', + author: 'Human-Connection', + publisher: 'GitHub', + date: expect.any(String), + description: '🍰 Pullrequest Issues fixes #256', + url: 'https://github.com/Human-Connection/Human-Connection/pull/960', + image: + 'https://repository-images.githubusercontent.com/112590397/52c9a000-7e11-11e9-899d-aaa55f3a3d72', + audio: null, + video: null, + lang: 'en', + sources: ['resource'], + html: null, + }, + }, + }) + await expect(embedAction(variables)).resolves.toEqual(expected) + }) + }) + + describe('given a youtube link', () => { + beforeEach(() => { + fetch + .mockReturnValueOnce(Promise.resolve(new Response(babyLovesCat))) + .mockReturnValueOnce(Promise.resolve(babyLovesCatEmbedResponse)) + variables = { url: 'https://www.youtube.com/watch?v=qkdXAtO40Fo&t=18s' } + }) + + it('returns meta data plus youtube iframe html', async () => { + const expected = expect.objectContaining({ + data: { + embed: { + type: 'video', + title: 'Baby Loves Cat', + author: 'Merkley Family', + publisher: 'YouTube', + date: expect.any(String), + description: + 'She’s incapable of controlling her limbs when her kitty is around. The obsession grows every day. Ps. That’s a sleep sack she’s in. Not a starfish outfit. Al...', + url: 'https://www.youtube.com/watch?v=qkdXAtO40Fo', + image: 'https://i.ytimg.com/vi/qkdXAtO40Fo/maxresdefault.jpg', + audio: null, + video: null, + lang: 'de', + sources: ['resource', 'oembed'], + html: + '', + }, + }, + }) + await expect(embedAction(variables)).resolves.toEqual(expected) + }) + }) + }) +}) diff --git a/backend/src/schema/resolvers/embeds/providers.json b/backend/src/schema/resolvers/embeds/providers.json new file mode 100644 index 000000000..873ac2bf8 --- /dev/null +++ b/backend/src/schema/resolvers/embeds/providers.json @@ -0,0 +1,3014 @@ +[ + { + "provider_name": "23HQ", + "provider_url": "http:\/\/www.23hq.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.23hq.com\/*\/photo\/*" + ], + "url": "http:\/\/www.23hq.com\/23\/oembed" + } + ] + }, + { + "provider_name": "Adways", + "provider_url": "http:\/\/www.adways.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/play.adpaths.com\/experience\/*" + ], + "url": "http:\/\/play.adpaths.com\/oembed\/*" + } + ] + }, + { + "provider_name": "Alpha App Net", + "provider_url": "https:\/\/alpha.app.net\/browse\/posts\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/alpha.app.net\/*\/post\/*", + "https:\/\/photos.app.net\/*\/*" + ], + "url": "https:\/\/alpha-api.app.net\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Altru", + "provider_url": "https:\/\/www.altrulabs.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/app.altrulabs.com\/*\/*?answer_id=*" + ], + "url": "https:\/\/api.altrulabs.com\/social\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "amCharts Live Editor", + "provider_url": "https:\/\/live.amcharts.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/live.amcharts.com\/*", + "https:\/\/live.amcharts.com\/*" + ], + "url": "https:\/\/live.amcharts.com\/oembed" + } + ] + }, + { + "provider_name": "Animatron", + "provider_url": "https:\/\/www.animatron.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.animatron.com\/project\/*", + "https:\/\/animatron.com\/project\/*" + ], + "url": "https:\/\/animatron.com\/oembed\/json", + "discovery": true + } + ] + }, + { + "provider_name": "Animoto", + "provider_url": "http:\/\/animoto.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/animoto.com\/play\/*" + ], + "url": "http:\/\/animoto.com\/oembeds\/create" + } + ] + }, + { + "provider_name": "Apester", + "provider_url": "https:\/\/www.apester.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/renderer.apester.com\/v2\/*?preview=true&iframe_preview=true" + ], + "url": "https:\/\/display.apester.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Archivos", + "provider_url": "https:\/\/app.archivos.digital", + "endpoints": [ + { + "schemes": [ + "https:\/\/app.archivos.digital\/app\/view\/*" + ], + "url": "https:\/\/app.archivos.digital\/oembed\/" + } + ] + }, + { + "provider_name": "AudioClip", + "provider_url": "https:\/\/audioclip.naver.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/audioclip.naver.com\/channels\/*\/clips\/*", + "https:\/\/audioclip.naver.com\/audiobooks\/*" + ], + "url": "https:\/\/audioclip.naver.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Audiomack", + "provider_url": "https:\/\/www.audiomack.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.audiomack.com\/song\/*", + "https:\/\/www.audiomack.com\/album\/*", + "https:\/\/www.audiomack.com\/playlist\/*" + ], + "url": "https:\/\/www.audiomack.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "AudioSnaps", + "provider_url": "http:\/\/audiosnaps.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/audiosnaps.com\/k\/*" + ], + "url": "http:\/\/audiosnaps.com\/service\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Backtracks", + "provider_url": "https:\/\/backtracks.fm", + "endpoints": [ + { + "schemes": [ + "https:\/\/backtracks.fm\/*\/*\/e\/*", + "https:\/\/backtracks.fm\/*", + "http:\/\/backtracks.fm\/*" + ], + "url": "https:\/\/backtracks.fm\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Beautiful.AI", + "provider_url": "https:\/\/www.beautiful.ai\/", + "endpoints": [ + { + "url": "https:\/\/www.beautiful.ai\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Blackfire.io", + "provider_url": "https:\/\/blackfire.io", + "endpoints": [ + { + "schemes": [ + "https:\/\/blackfire.io\/profiles\/*\/graph", + "https:\/\/blackfire.io\/profiles\/compare\/*\/graph" + ], + "url": "https:\/\/blackfire.io\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Box Office Buz", + "provider_url": "http:\/\/boxofficebuz.com", + "endpoints": [ + { + "url": "http:\/\/boxofficebuz.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "BrioVR", + "provider_url": "https:\/\/view.briovr.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/view.briovr.com\/api\/v1\/worlds\/oembed\/*" + ], + "url": "https:\/\/view.briovr.com\/api\/v1\/worlds\/oembed\/" + } + ] + }, + { + "provider_name": "Buttondown", + "provider_url": "https:\/\/buttondown.email\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/buttondown.email\/*" + ], + "url": "https:\/\/buttondown.email\/embed", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "Byzart Project", + "provider_url": "https:\/\/cmc.byzart.eu", + "endpoints": [ + { + "schemes": [ + "https:\/\/cmc.byzart.eu\/files\/*" + ], + "url": "https:\/\/cmc.byzart.eu\/oembed\/", + "discovery": false + } + ] + }, + { + "provider_name": "Cacoo", + "provider_url": "https:\/\/cacoo.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/cacoo.com\/diagrams\/*" + ], + "url": "http:\/\/cacoo.com\/oembed.{format}" + } + ] + }, + { + "provider_name": "Carbon Health", + "provider_url": "https:\/\/carbonhealth.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/carbonhealth.com\/practice\/*" + ], + "url": "http:\/\/carbonhealth.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "CatBoat", + "provider_url": "http:\/\/img.catbo.at\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/img.catbo.at\/*" + ], + "url": "http:\/\/img.catbo.at\/oembed.json", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Ceros", + "provider_url": "http:\/\/www.ceros.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/view.ceros.com\/*" + ], + "url": "http:\/\/view.ceros.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "ChartBlocks", + "provider_url": "http:\/\/www.chartblocks.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/public.chartblocks.com\/c\/*" + ], + "url": "http:\/\/embed.chartblocks.com\/1.0\/oembed" + } + ] + }, + { + "provider_name": "chirbit.com", + "provider_url": "http:\/\/www.chirbit.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/chirb.it\/*" + ], + "url": "http:\/\/chirb.it\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "CircuitLab", + "provider_url": "https:\/\/www.circuitlab.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.circuitlab.com\/circuit\/*" + ], + "url": "https:\/\/www.circuitlab.com\/circuit\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Clipland", + "provider_url": "http:\/\/www.clipland.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.clipland.com\/v\/*", + "https:\/\/www.clipland.com\/v\/*" + ], + "url": "https:\/\/www.clipland.com\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Clyp", + "provider_url": "http:\/\/clyp.it\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/clyp.it\/*", + "http:\/\/clyp.it\/playlist\/*" + ], + "url": "http:\/\/api.clyp.it\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "CodeHS", + "provider_url": "http:\/\/www.codehs.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/codehs.com\/editor\/share_abacus\/*" + ], + "url": "https:\/\/codehs.com\/api\/sharedprogram\/*\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Codepen", + "provider_url": "https:\/\/codepen.io", + "endpoints": [ + { + "schemes": [ + "http:\/\/codepen.io\/*", + "https:\/\/codepen.io\/*" + ], + "url": "http:\/\/codepen.io\/api\/oembed" + } + ] + }, + { + "provider_name": "Codepoints", + "provider_url": "https:\/\/codepoints.net", + "endpoints": [ + { + "schemes": [ + "http:\/\/codepoints.net\/*", + "https:\/\/codepoints.net\/*", + "http:\/\/www.codepoints.net\/*", + "https:\/\/www.codepoints.net\/*" + ], + "url": "https:\/\/codepoints.net\/api\/v1\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "CodeSandbox", + "provider_url": "https:\/\/codesandbox.io", + "endpoints": [ + { + "schemes": [ + "https:\/\/codesandbox.io\/s\/*", + "https:\/\/codesandbox.io\/embed\/*" + ], + "url": "https:\/\/codesandbox.io\/oembed" + } + ] + }, + { + "provider_name": "CollegeHumor", + "provider_url": "http:\/\/www.collegehumor.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.collegehumor.com\/video\/*" + ], + "url": "http:\/\/www.collegehumor.com\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Commaful", + "provider_url": "https:\/\/commaful.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/commaful.com\/play\/*" + ], + "url": "https:\/\/commaful.com\/api\/oembed\/" + } + ] + }, + { + "provider_name": "Coub", + "provider_url": "http:\/\/coub.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/coub.com\/view\/*", + "http:\/\/coub.com\/embed\/*" + ], + "url": "http:\/\/coub.com\/api\/oembed.{format}" + } + ] + }, + { + "provider_name": "Crowd Ranking", + "provider_url": "http:\/\/crowdranking.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/crowdranking.com\/*\/*" + ], + "url": "http:\/\/crowdranking.com\/api\/oembed.{format}" + } + ] + }, + { + "provider_name": "Cyrano Systems", + "provider_url": "http:\/\/www.cyranosystems.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/staging.cyranosystems.com\/msg\/*", + "https:\/\/app.cyranosystems.com\/msg\/*" + ], + "url": "https:\/\/staging.cyranosystems.com\/oembed", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "Daily Mile", + "provider_url": "http:\/\/www.dailymile.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.dailymile.com\/people\/*\/entries\/*" + ], + "url": "http:\/\/api.dailymile.com\/oembed?format=json", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Dailymotion", + "provider_url": "https:\/\/www.dailymotion.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.dailymotion.com\/video\/*" + ], + "url": "https:\/\/www.dailymotion.com\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Deseretnews.com", + "provider_url": "https:\/\/www.deseretnews.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.deseretnews.com\/*" + ], + "url": "https:\/\/embed.deseretnews.com\/" + } + ] + }, + { + "provider_name": "Deviantart.com", + "provider_url": "http:\/\/www.deviantart.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.deviantart.com\/art\/*", + "http:\/\/*.deviantart.com\/*#\/d*", + "http:\/\/fav.me\/*", + "http:\/\/sta.sh\/*", + "https:\/\/*.deviantart.com\/art\/*", + "https:\/\/*.deviantart.com\/*\/art\/*", + "https:\/\/sta.sh\/*\",", + "https:\/\/*.deviantart.com\/*#\/d*\"" + ], + "url": "http:\/\/backend.deviantart.com\/oembed" + } + ] + }, + { + "provider_name": "Didacte", + "provider_url": "https:\/\/www.didacte.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.didacte.com\/a\/course\/*" + ], + "url": "https:\/\/*.didacte.com\/cards\/oembed'", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Digiteka", + "provider_url": "https:\/\/www.ultimedia.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.ultimedia.com\/central\/video\/edit\/id\/*\/topic_id\/*\/", + "https:\/\/www.ultimedia.com\/default\/index\/videogeneric\/id\/*\/showtitle\/1\/viewnc\/1", + "https:\/\/www.ultimedia.com\/default\/index\/videogeneric\/id\/*" + ], + "url": "https:\/\/www.ultimedia.com\/api\/search\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Dipity", + "provider_url": "http:\/\/www.dipity.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.dipity.com\/*\/*\/" + ], + "url": "http:\/\/www.dipity.com\/oembed\/timeline\/" + } + ] + }, + { + "provider_name": "DocDroid", + "provider_url": "https:\/\/www.docdroid.net\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.docdroid.net\/*", + "http:\/\/*.docdroid.net\/*", + "https:\/\/docdro.id\/*", + "http:\/\/docdro.id\/*" + ], + "url": "https:\/\/www.docdroid.net\/api\/oembed", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "Dotsub", + "provider_url": "http:\/\/dotsub.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/dotsub.com\/view\/*" + ], + "url": "http:\/\/dotsub.com\/services\/oembed" + } + ] + }, + { + "provider_name": "DTube", + "provider_url": "https:\/\/d.tube\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/d.tube\/v\/*" + ], + "url": "https:\/\/api.d.tube\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "edocr", + "provider_url": "http:\/\/www.edocr.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/edocr.com\/docs\/*" + ], + "url": "http:\/\/edocr.com\/api\/oembed" + } + ] + }, + { + "provider_name": "eduMedia", + "provider_url": "https:\/\/www.edumedia-sciences.com\/", + "endpoints": [ + { + "url": "https:\/\/www.edumedia-sciences.com\/oembed.json", + "discovery": true + }, + { + "url": "https:\/\/www.edumedia-sciences.com\/oembed.xml", + "discovery": true + } + ] + }, + { + "provider_name": "EgliseInfo", + "provider_url": "http:\/\/egliseinfo.catholique.fr\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/egliseinfo.catholique.fr\/*" + ], + "url": "http:\/\/egliseinfo.catholique.fr\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Embed Articles", + "provider_url": "http:\/\/embedarticles.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/embedarticles.com\/*" + ], + "url": "http:\/\/embedarticles.com\/oembed\/" + } + ] + }, + { + "provider_name": "Embedly", + "provider_url": "http:\/\/api.embed.ly\/", + "endpoints": [ + { + "url": "http:\/\/api.embed.ly\/1\/oembed" + } + ] + }, + { + "provider_name": "Ethfiddle", + "provider_url": "https:\/\/www.ethfiddle.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/ethfiddle.com\/*" + ], + "url": "https:\/\/ethfiddle.com\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Eyrie", + "provider_url": "https:\/\/eyrie.io\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/eyrie.io\/board\/*", + "https:\/\/eyrie.io\/sparkfun\/*" + ], + "url": "https:\/\/eyrie.io\/v1\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Facebook (Post)", + "provider_url": "https:\/\/www.facebook.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.facebook.com\/*\/posts\/*", + "https:\/\/www.facebook.com\/photos\/*", + "https:\/\/www.facebook.com\/*\/photos\/*", + "https:\/\/www.facebook.com\/photo.php*", + "https:\/\/www.facebook.com\/photo.php", + "https:\/\/www.facebook.com\/*\/activity\/*", + "https:\/\/www.facebook.com\/permalink.php", + "https:\/\/www.facebook.com\/media\/set?set=*", + "https:\/\/www.facebook.com\/questions\/*", + "https:\/\/www.facebook.com\/notes\/*\/*\/*" + ], + "url": "https:\/\/www.facebook.com\/plugins\/post\/oembed.json", + "discovery": true + } + ] + }, + { + "provider_name": "Facebook (Video)", + "provider_url": "https:\/\/www.facebook.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.facebook.com\/*\/videos\/*", + "https:\/\/www.facebook.com\/video.php" + ], + "url": "https:\/\/www.facebook.com\/plugins\/video\/oembed.json", + "discovery": true + } + ] + }, + { + "provider_name": "Fader", + "provider_url": "https:\/\/app.getfader.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/app.getfader.com\/projects\/*\/publish" + ], + "url": "https:\/\/app.getfader.com\/api\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Faithlife TV", + "provider_url": "https:\/\/faithlifetv.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/faithlifetv.com\/items\/*", + "https:\/\/faithlifetv.com\/items\/resource\/*\/*", + "https:\/\/faithlifetv.com\/media\/*", + "https:\/\/faithlifetv.com\/media\/assets\/*", + "https:\/\/faithlifetv.com\/media\/resource\/*\/*" + ], + "url": "https:\/\/faithlifetv.com\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "FITE", + "provider_url": "https:\/\/www.fite.tv\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.fite.tv\/watch\/*" + ], + "url": "https:\/\/www.fite.tv\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Flat", + "provider_url": "https:\/\/flat.io", + "endpoints": [ + { + "schemes": [ + "https:\/\/flat.io\/score\/*", + "https:\/\/*.flat.io\/score\/*" + ], + "url": "https:\/\/flat.io\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Flickr", + "provider_url": "https:\/\/www.flickr.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.flickr.com\/photos\/*", + "http:\/\/flic.kr\/p\/*", + "https:\/\/*.flickr.com\/photos\/*", + "https:\/\/flic.kr\/p\/*" + ], + "url": "https:\/\/www.flickr.com\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Flourish", + "provider_url": "https:\/\/flourish.studio\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/public.flourish.studio\/visualisation\/*", + "https:\/\/public.flourish.studio\/story\/*" + ], + "url": "https:\/\/app.flourish.studio\/api\/v1\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Fontself", + "provider_url": "https:\/\/www.fontself.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/catapult.fontself.com\/*" + ], + "url": "https:\/\/oembed.fontself.com\/" + } + ] + }, + { + "provider_name": "FOX SPORTS Australia", + "provider_url": "http:\/\/www.foxsports.com.au", + "endpoints": [ + { + "schemes": [ + "http:\/\/fiso.foxsports.com.au\/isomorphic-widget\/*", + "https:\/\/fiso.foxsports.com.au\/isomorphic-widget\/*" + ], + "url": "https:\/\/fiso.foxsports.com.au\/oembed" + } + ] + }, + { + "provider_name": "FrameBuzz", + "provider_url": "https:\/\/framebuzz.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/framebuzz.com\/v\/*", + "https:\/\/framebuzz.com\/v\/*" + ], + "url": "https:\/\/framebuzz.com\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "FunnyOrDie", + "provider_url": "http:\/\/www.funnyordie.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.funnyordie.com\/videos\/*" + ], + "url": "http:\/\/www.funnyordie.com\/oembed.{format}" + } + ] + }, + { + "provider_name": "Geograph Britain and Ireland", + "provider_url": "https:\/\/www.geograph.org.uk\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.geograph.org.uk\/*", + "http:\/\/*.geograph.co.uk\/*", + "http:\/\/*.geograph.ie\/*", + "http:\/\/*.wikimedia.org\/*_geograph.org.uk_*" + ], + "url": "http:\/\/api.geograph.org.uk\/api\/oembed" + } + ] + }, + { + "provider_name": "Geograph Channel Islands", + "provider_url": "http:\/\/channel-islands.geograph.org\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.geograph.org.gg\/*", + "http:\/\/*.geograph.org.je\/*", + "http:\/\/channel-islands.geograph.org\/*", + "http:\/\/channel-islands.geographs.org\/*", + "http:\/\/*.channel.geographs.org\/*" + ], + "url": "http:\/\/www.geograph.org.gg\/api\/oembed" + } + ] + }, + { + "provider_name": "Geograph Germany", + "provider_url": "http:\/\/geo-en.hlipp.de\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/geo-en.hlipp.de\/*", + "http:\/\/geo.hlipp.de\/*", + "http:\/\/germany.geograph.org\/*" + ], + "url": "http:\/\/geo.hlipp.de\/restapi.php\/api\/oembed" + } + ] + }, + { + "provider_name": "Getty Images", + "provider_url": "http:\/\/www.gettyimages.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/gty.im\/*" + ], + "url": "http:\/\/embed.gettyimages.com\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Gfycat", + "provider_url": "https:\/\/gfycat.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/gfycat.com\/*", + "http:\/\/www.gfycat.com\/*", + "https:\/\/gfycat.com\/*", + "https:\/\/www.gfycat.com\/*" + ], + "url": "https:\/\/api.gfycat.com\/v1\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Gifnote", + "provider_url": "https:\/\/www.gifnote.com\/", + "endpoints": [ + { + "url": "https:\/\/www.gifnote.com\/services\/oembed", + "schemes": [ + "https:\/\/www.gifnote.com\/play\/*" + ], + "discovery": true + } + ] + }, + { + "provider_name": "GIPHY", + "provider_url": "https:\/\/giphy.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/giphy.com\/gifs\/*", + "http:\/\/gph.is\/*", + "https:\/\/media.giphy.com\/media\/*\/giphy.gif" + ], + "url": "https:\/\/giphy.com\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "GloriaTV", + "provider_url": "https:\/\/gloria.tv\/", + "endpoints": [ + { + "url": "https:\/\/gloria.tv\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "GT Channel", + "provider_url": "https:\/\/gtchannel.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/gtchannel.com\/watch\/*" + ], + "url": "https:\/\/api.luminery.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Gyazo", + "provider_url": "https:\/\/gyazo.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/gyazo.com\/*" + ], + "url": "https:\/\/api.gyazo.com\/api\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "hearthis.at", + "provider_url": "https:\/\/hearthis.at\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/hearthis.at\/*\/*\/" + ], + "url": "https:\/\/hearthis.at\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "HuffDuffer", + "provider_url": "http:\/\/huffduffer.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/huffduffer.com\/*\/*" + ], + "url": "http:\/\/huffduffer.com\/oembed" + } + ] + }, + { + "provider_name": "Hulu", + "provider_url": "http:\/\/www.hulu.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.hulu.com\/watch\/*" + ], + "url": "http:\/\/www.hulu.com\/api\/oembed.{format}" + } + ] + }, + { + "provider_name": "iFixit", + "provider_url": "http:\/\/www.iFixit.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.ifixit.com\/Guide\/View\/*" + ], + "url": "http:\/\/www.ifixit.com\/Embed" + } + ] + }, + { + "provider_name": "IFTTT", + "provider_url": "http:\/\/www.ifttt.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/ifttt.com\/recipes\/*" + ], + "url": "http:\/\/www.ifttt.com\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Indaco", + "provider_url": "https:\/\/player.indacolive.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/player.indacolive.com\/player\/jwp\/clients\/*" + ], + "url": "https:\/\/player.indacolive.com\/services\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Infogram", + "provider_url": "https:\/\/infogr.am\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/infogr.am\/*" + ], + "url": "https:\/\/infogr.am\/oembed" + } + ] + }, + { + "provider_name": "Infoveave", + "provider_url": "https:\/\/infoveave.net\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.infoveave.net\/E\/*", + "https:\/\/*.infoveave.net\/P\/*" + ], + "url": "https:\/\/infoveave.net\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Injurymap", + "provider_url": "https:\/\/www.injurymap.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.injurymap.com\/exercises\/*" + ], + "url": "https:\/\/www.injurymap.com\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Inoreader", + "provider_url": "https:\/\/www.inoreader.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.inoreader.com\/oembed\/" + ], + "url": "https:\/\/www.inoreader.com\/oembed\/api\/", + "discovery": true + } + ] + }, + { + "provider_name": "inphood", + "provider_url": "http:\/\/inphood.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.inphood.com\/*" + ], + "url": "http:\/\/api.inphood.com\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Instagram", + "provider_url": "https:\/\/instagram.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/instagram.com\/p\/*", + "http:\/\/instagr.am\/p\/*", + "http:\/\/www.instagram.com\/p\/*", + "http:\/\/www.instagr.am\/p\/*", + "https:\/\/instagram.com\/p\/*", + "https:\/\/instagr.am\/p\/*", + "https:\/\/www.instagram.com\/p\/*", + "https:\/\/www.instagr.am\/p\/*" + ], + "url": "https:\/\/api.instagram.com\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "iSnare Articles", + "provider_url": "https:\/\/www.isnare.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.isnare.com\/*" + ], + "url": "https:\/\/www.isnare.com\/oembed\/" + } + ] + }, + { + "provider_name": "Issuu", + "provider_url": "https:\/\/issuu.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/issuu.com\/*\/docs\/*" + ], + "url": "https:\/\/issuu.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "ivlismusic", + "provider_url": "https:\/\/music.ivlis.kr\/", + "endpoints": [ + { + "url": "https:\/\/music.ivlis.kr\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "KakaoTv", + "provider_url": "https:\/\/tv.kakao.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/tv.kakao.com\/channel\/*\/cliplink\/*", + "https:\/\/tv.kakao.com\/channel\/v\/*", + "https:\/\/tv.kakao.com\/channel\/*\/livelink\/*", + "https:\/\/tv.kakao.com\/channel\/l\/*" + ], + "url": "https:\/\/tv.kakao.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Kickstarter", + "provider_url": "http:\/\/www.kickstarter.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.kickstarter.com\/projects\/*" + ], + "url": "http:\/\/www.kickstarter.com\/services\/oembed" + } + ] + }, + { + "provider_name": "Kidoju", + "provider_url": "https:\/\/www.kidoju.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.kidoju.com\/en\/x\/*\/*", + "https:\/\/www.kidoju.com\/fr\/x\/*\/*" + ], + "url": "https:\/\/www.kidoju.com\/api\/oembed" + } + ] + }, + { + "provider_name": "Kit", + "provider_url": "https:\/\/kit.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/kit.com\/*\/*", + "https:\/\/kit.com\/*\/*" + ], + "url": "https:\/\/embed.kit.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Kitchenbowl", + "provider_url": "http:\/\/www.kitchenbowl.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.kitchenbowl.com\/recipe\/*" + ], + "url": "http:\/\/www.kitchenbowl.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Knacki", + "provider_url": "http:\/\/jdr.knacki.info", + "endpoints": [ + { + "schemes": [ + "http:\/\/jdr.knacki.info\/meuh\/*", + "https:\/\/jdr.knacki.info\/meuh\/*" + ], + "url": "https:\/\/jdr.knacki.info\/oembed" + } + ] + }, + { + "provider_name": "LearningApps.org", + "provider_url": "http:\/\/learningapps.org\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/learningapps.org\/*" + ], + "url": "http:\/\/learningapps.org\/oembed.php", + "discovery": true + } + ] + }, + { + "provider_name": "Lille.Pod", + "provider_url": "https:\/\/pod.univ-lille.fr\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/pod.univ-lille.fr\/video\/*" + ], + "url": "https:\/\/pod.univ-lille.fr\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Livestream", + "provider_url": "https:\/\/livestream.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/livestream.com\/accounts\/*\/events\/*", + "https:\/\/livestream.com\/accounts\/*\/events\/*\/videos\/*", + "https:\/\/livestream.com\/*\/events\/*", + "https:\/\/livestream.com\/*\/events\/*\/videos\/*", + "https:\/\/livestream.com\/*\/*", + "https:\/\/livestream.com\/*\/*\/videos\/*" + ], + "url": "https:\/\/livestream.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Ludus", + "provider_url": "https:\/\/ludus.one", + "endpoints": [ + { + "schemes": [ + "https:\/\/app.ludus.one\/*" + ], + "url": "https:\/\/app.ludus.one\/oembed", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "MathEmbed", + "provider_url": "http:\/\/mathembed.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/mathembed.com\/latex?inputText=*", + "http:\/\/mathembed.com\/latex?inputText=*" + ], + "url": "http:\/\/mathembed.com\/oembed" + } + ] + }, + { + "provider_name": "Matterport", + "provider_url": "https:\/\/matterport.com\/", + "endpoints": [ + { + "url": "https:\/\/my.matterport.com\/api\/v1\/models\/oembed\/", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "me.me", + "provider_url": "https:\/\/me.me\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/me.me\/i\/*" + ], + "url": "https:\/\/me.me\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Medienarchiv der K\u00fcnste - Z\u00fcrcher Hochschule der K\u00fcnste", + "provider_url": "https:\/\/medienarchiv.zhdk.ch\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/medienarchiv.zhdk.ch\/entries\/*" + ], + "url": "https:\/\/medienarchiv.zhdk.ch\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Meetup", + "provider_url": "http:\/\/www.meetup.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/meetup.com\/*", + "https:\/\/www.meetup.com\/*", + "https:\/\/meetup.com\/*", + "http:\/\/meetu.ps\/*" + ], + "url": "https:\/\/api.meetup.com\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "MixCloud", + "provider_url": "https:\/\/mixcloud.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.mixcloud.com\/*\/*\/", + "https:\/\/www.mixcloud.com\/*\/*\/" + ], + "url": "https:\/\/www.mixcloud.com\/oembed\/" + } + ] + }, + { + "provider_name": "Moby Picture", + "provider_url": "http:\/\/www.mobypicture.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.mobypicture.com\/user\/*\/view\/*", + "http:\/\/moby.to\/*" + ], + "url": "http:\/\/api.mobypicture.com\/oEmbed" + } + ] + }, + { + "provider_name": "Modelo", + "provider_url": "http:\/\/modelo.io\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/beta.modelo.io\/embedded\/*" + ], + "url": "https:\/\/portal.modelo.io\/oembed", + "discovery": false + } + ] + }, + { + "provider_name": "MorphCast", + "provider_url": "https:\/\/www.morphcast.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/m-roll.morphcast.com\/mroll\/*" + ], + "url": "https:\/\/m-roll.morphcast.com\/service\/oembed", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Music Box Maniacs", + "provider_url": "https:\/\/musicboxmaniacs.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/musicboxmaniacs.com\/explore\/melody\/*" + ], + "url": "https:\/\/musicboxmaniacs.com\/embed\/", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "myBeweeg", + "provider_url": "https:\/\/mybeweeg.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/mybeweeg.com\/w\/*" + ], + "url": "https:\/\/mybeweeg.com\/services\/oembed" + } + ] + }, + { + "provider_name": "Namchey", + "provider_url": "https:\/\/namchey.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/namchey.com\/embeds\/*" + ], + "url": "https:\/\/namchey.com\/api\/oembed", + "formats": [ + "json", + "xml" + ], + "discovery": true + } + ] + }, + { + "provider_name": "nanoo.tv", + "provider_url": "https:\/\/www.nanoo.tv\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.nanoo.tv\/link\/*", + "http:\/\/nanoo.tv\/link\/*", + "http:\/\/*.nanoo.pro\/link\/*", + "http:\/\/nanoo.pro\/link\/*", + "https:\/\/*.nanoo.tv\/link\/*", + "https:\/\/nanoo.tv\/link\/*", + "https:\/\/*.nanoo.pro\/link\/*", + "https:\/\/nanoo.pro\/link\/*", + "http:\/\/media.zhdk.ch\/signatur\/*", + "http:\/\/new.media.zhdk.ch\/signatur\/*", + "https:\/\/media.zhdk.ch\/signatur\/*", + "https:\/\/new.media.zhdk.ch\/signatur\/*" + ], + "url": "https:\/\/www.nanoo.tv\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Nasjonalbiblioteket", + "provider_url": "https:\/\/www.nb.no\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.nb.no\/items\/*" + ], + "url": "https:\/\/api.nb.no\/catalog\/v1\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Natural Atlas", + "provider_url": "https:\/\/naturalatlas.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/naturalatlas.com\/*", + "https:\/\/naturalatlas.com\/*\/*", + "https:\/\/naturalatlas.com\/*\/*\/*", + "https:\/\/naturalatlas.com\/*\/*\/*\/*" + ], + "url": "https:\/\/naturalatlas.com\/oembed.{format}", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "nfb.ca", + "provider_url": "http:\/\/www.nfb.ca\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.nfb.ca\/film\/*" + ], + "url": "http:\/\/www.nfb.ca\/remote\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Odds.com.au", + "provider_url": "https:\/\/www.odds.com.au", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.odds.com.au\/*", + "https:\/\/odds.com.au\/*" + ], + "url": "https:\/\/www.odds.com.au\/api\/oembed\/" + } + ] + }, + { + "provider_name": "Official FM", + "provider_url": "http:\/\/official.fm", + "endpoints": [ + { + "schemes": [ + "http:\/\/official.fm\/tracks\/*", + "http:\/\/official.fm\/playlists\/*" + ], + "url": "http:\/\/official.fm\/services\/oembed.{format}" + } + ] + }, + { + "provider_name": "Omniscope", + "provider_url": "https:\/\/omniscope.me\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/omniscope.me\/*" + ], + "url": "https:\/\/omniscope.me\/_global_\/oembed\/json", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "On Aol", + "provider_url": "http:\/\/on.aol.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/on.aol.com\/video\/*" + ], + "url": "http:\/\/on.aol.com\/api" + } + ] + }, + { + "provider_name": "Ora TV", + "provider_url": "http:\/\/www.ora.tv\/", + "endpoints": [ + { + "discovery": true, + "url": "https:\/\/www.ora.tv\/oembed\/*?format={format}" + } + ] + }, + { + "provider_name": "Orbitvu", + "provider_url": "https:\/\/orbitvu.co", + "endpoints": [ + { + "schemes": [ + "https:\/\/orbitvu.co\/001\/*\/ov3601\/view", + "https:\/\/orbitvu.co\/001\/*\/ov3601\/*\/view", + "https:\/\/orbitvu.co\/001\/*\/ov3602\/*\/view", + "https:\/\/orbitvu.co\/001\/*\/2\/orbittour\/*\/view", + "https:\/\/orbitvu.co\/001\/*\/1\/2\/orbittour\/*\/view", + "http:\/\/orbitvu.co\/001\/*\/ov3601\/view", + "http:\/\/orbitvu.co\/001\/*\/ov3601\/*\/view", + "http:\/\/orbitvu.co\/001\/*\/ov3602\/*\/view", + "http:\/\/orbitvu.co\/001\/*\/2\/orbittour\/*\/view", + "http:\/\/orbitvu.co\/001\/*\/1\/2\/orbittour\/*\/view" + ], + "url": "http:\/\/orbitvu.co\/service\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Oumy", + "provider_url": "https:\/\/www.oumy.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.oumy.com\/v\/*" + ], + "url": "https:\/\/www.oumy.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Outplayed.tv", + "provider_url": "https:\/\/outplayed.tv\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/outplayed.tv\/media\/*" + ], + "url": "https:\/\/outplayed.tv\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Overflow", + "provider_url": "https:\/\/overflow.io", + "endpoints": [ + { + "schemes": [ + "https:\/\/overflow.io\/s\/*", + "https:\/\/overflow.io\/embed\/*" + ], + "url": "https:\/\/overflow.io\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Pastery", + "provider_url": "https:\/\/www.pastery.net", + "endpoints": [ + { + "schemes": [ + "http:\/\/pastery.net\/*", + "https:\/\/pastery.net\/*", + "http:\/\/www.pastery.net\/*", + "https:\/\/www.pastery.net\/*" + ], + "url": "https:\/\/www.pastery.net\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "PingVP", + "provider_url": "https:\/\/www.pingvp.com\/", + "endpoints": [ + { + "url": "https:\/\/beta.pingvp.com.kpnis.nl\/p\/oembed.php", + "discovery": true + } + ] + }, + { + "provider_name": "Pixdor", + "provider_url": "http:\/\/www.pixdor.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/store.pixdor.com\/place-marker-widget\/*\/show", + "https:\/\/store.pixdor.com\/map\/*\/show" + ], + "url": "https:\/\/store.pixdor.com\/oembed", + "formats": [ + "json", + "xml" + ], + "discovery": true + } + ] + }, + { + "provider_name": "Podbean", + "provider_url": "http:\/\/podbean.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.podbean.com\/e\/*", + "http:\/\/*.podbean.com\/e\/*" + ], + "url": "https:\/\/api.podbean.com\/v1\/oembed" + } + ] + }, + { + "provider_name": "Poll Daddy", + "provider_url": "http:\/\/polldaddy.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.polldaddy.com\/s\/*", + "http:\/\/*.polldaddy.com\/poll\/*", + "http:\/\/*.polldaddy.com\/ratings\/*" + ], + "url": "http:\/\/polldaddy.com\/oembed\/" + } + ] + }, + { + "provider_name": "Port", + "provider_url": "http:\/\/www.sellwithport.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/app.sellwithport.com\/#\/buyer\/*" + ], + "url": "https:\/\/api.sellwithport.com\/v1.0\/buyer\/oembed" + } + ] + }, + { + "provider_name": "Portfolium", + "provider_url": "https:\/\/portfolium.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/portfolium.com\/entry\/*" + ], + "url": "https:\/\/api.portfolium.com\/oembed" + } + ] + }, + { + "provider_name": "posiXion", + "provider_url": "https:\/\/posixion.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/posixion.com\/question\/*", + "https:\/\/posixion.com\/*\/question\/*" + ], + "url": "http:\/\/posixion.com\/services\/oembed\/" + } + ] + }, + { + "provider_name": "Quiz.biz", + "provider_url": "http:\/\/www.quiz.biz\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.quiz.biz\/quizz-*.html" + ], + "url": "http:\/\/www.quiz.biz\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Quizz.biz", + "provider_url": "http:\/\/www.quizz.biz\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.quizz.biz\/quizz-*.html" + ], + "url": "http:\/\/www.quizz.biz\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "RapidEngage", + "provider_url": "https:\/\/rapidengage.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/rapidengage.com\/s\/*" + ], + "url": "https:\/\/rapidengage.com\/api\/oembed" + } + ] + }, + { + "provider_name": "Reddit", + "provider_url": "https:\/\/reddit.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/reddit.com\/r\/*\/comments\/*\/*", + "https:\/\/www.reddit.com\/r\/*\/comments\/*\/*" + ], + "url": "https:\/\/www.reddit.com\/oembed" + } + ] + }, + { + "provider_name": "ReleaseWire", + "provider_url": "http:\/\/www.releasewire.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/rwire.com\/*" + ], + "url": "http:\/\/publisher.releasewire.com\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Replit", + "provider_url": "https:\/\/repl.it\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/repl.it\/@*\/*" + ], + "url": "https:\/\/repl.it\/data\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "RepubHub", + "provider_url": "http:\/\/repubhub.icopyright.net\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/repubhub.icopyright.net\/freePost.act?*" + ], + "url": "http:\/\/repubhub.icopyright.net\/oembed.act", + "discovery": true + } + ] + }, + { + "provider_name": "ReverbNation", + "provider_url": "https:\/\/www.reverbnation.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.reverbnation.com\/*", + "https:\/\/www.reverbnation.com\/*\/songs\/*" + ], + "url": "https:\/\/www.reverbnation.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "RiffReporter", + "provider_url": "https:\/\/www.riffreporter.de\/", + "endpoints": [ + { + "url": "https:\/\/www.riffreporter.de\/service\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Roomshare", + "provider_url": "http:\/\/roomshare.jp", + "endpoints": [ + { + "schemes": [ + "http:\/\/roomshare.jp\/post\/*", + "http:\/\/roomshare.jp\/en\/post\/*" + ], + "url": "http:\/\/roomshare.jp\/en\/oembed.{format}" + } + ] + }, + { + "provider_name": "RoosterTeeth", + "provider_url": "https:\/\/roosterteeth.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/roosterteeth.com\/*" + ], + "url": "https:\/\/roosterteeth.com\/oembed", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "Rumble", + "provider_url": "https:\/\/rumble.com\/", + "endpoints": [ + { + "url": "https:\/\/rumble.com\/api\/Media\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Sapo Videos", + "provider_url": "http:\/\/videos.sapo.pt", + "endpoints": [ + { + "schemes": [ + "http:\/\/videos.sapo.pt\/*" + ], + "url": "http:\/\/videos.sapo.pt\/oembed" + } + ] + }, + { + "provider_name": "Screen9", + "provider_url": "http:\/\/www.screen9.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/console.screen9.com\/*", + "https:\/\/*.screen9.tv\/*" + ], + "url": "https:\/\/api.screen9.com\/oembed" + } + ] + }, + { + "provider_name": "Screencast.com", + "provider_url": "http:\/\/www.screencast.com\/", + "endpoints": [ + { + "url": "https:\/\/api.screencast.com\/external\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Screenr", + "provider_url": "http:\/\/www.screenr.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.screenr.com\/*\/" + ], + "url": "http:\/\/www.screenr.com\/api\/oembed.{format}" + } + ] + }, + { + "provider_name": "ScribbleMaps", + "provider_url": "https:\/\/scribblemaps.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.scribblemaps.com\/maps\/view\/*", + "https:\/\/www.scribblemaps.com\/maps\/view\/*", + "http:\/\/scribblemaps.com\/maps\/view\/*", + "https:\/\/scribblemaps.com\/maps\/view\/*" + ], + "url": "https:\/\/scribblemaps.com\/api\/services\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Scribd", + "provider_url": "http:\/\/www.scribd.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.scribd.com\/doc\/*" + ], + "url": "http:\/\/www.scribd.com\/services\/oembed\/" + } + ] + }, + { + "provider_name": "SendtoNews", + "provider_url": "http:\/\/www.sendtonews.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/embed.sendtonews.com\/oembed\/*" + ], + "url": "https:\/\/embed.sendtonews.com\/services\/oembed", + "discovery": true, + "formats": [ + "json", + "xml" + ] + } + ] + }, + { + "provider_name": "ShortNote", + "provider_url": "https:\/\/www.shortnote.jp\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.shortnote.jp\/view\/notes\/*" + ], + "url": "https:\/\/www.shortnote.jp\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Shoudio", + "provider_url": "http:\/\/shoudio.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/shoudio.com\/*", + "http:\/\/shoud.io\/*" + ], + "url": "http:\/\/shoudio.com\/api\/oembed" + } + ] + }, + { + "provider_name": "Show the Way, actionable location info", + "provider_url": "https:\/\/showtheway.io", + "endpoints": [ + { + "schemes": [ + "https:\/\/showtheway.io\/to\/*" + ], + "url": "https:\/\/showtheway.io\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Simplecast", + "provider_url": "https:\/\/simplecast.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/simplecast.com\/s\/*" + ], + "url": "https:\/\/simplecast.com\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Sizzle", + "provider_url": "https:\/\/onsizzle.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/onsizzle.com\/i\/*" + ], + "url": "https:\/\/onsizzle.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Sketchfab", + "provider_url": "http:\/\/sketchfab.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/sketchfab.com\/models\/*", + "https:\/\/sketchfab.com\/models\/*", + "https:\/\/sketchfab.com\/*\/folders\/*" + ], + "url": "http:\/\/sketchfab.com\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "SlideShare", + "provider_url": "http:\/\/www.slideshare.net\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.slideshare.net\/*\/*", + "http:\/\/fr.slideshare.net\/*\/*", + "http:\/\/de.slideshare.net\/*\/*", + "http:\/\/es.slideshare.net\/*\/*", + "http:\/\/pt.slideshare.net\/*\/*" + ], + "url": "http:\/\/www.slideshare.net\/api\/oembed\/2", + "discovery": true + } + ] + }, + { + "provider_name": "SmashNotes", + "provider_url": "https:\/\/smashnotes.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/smashnotes.com\/p\/*", + "https:\/\/smashnotes.com\/p\/*\/e\/* - https:\/\/smashnotes.com\/p\/*\/e\/*\/s\/*" + ], + "url": "https:\/\/smashnotes.com\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "SmugMug", + "provider_url": "http:\/\/www.smugmug.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.smugmug.com\/*" + ], + "url": "http:\/\/api.smugmug.com\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "SocialExplorer", + "provider_url": "https:\/\/www.socialexplorer.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.socialexplorer.com\/*\/explore", + "https:\/\/www.socialexplorer.com\/*\/view", + "https:\/\/www.socialexplorer.com\/*\/edit", + "https:\/\/www.socialexplorer.com\/*\/embed" + ], + "url": "https:\/\/www.socialexplorer.com\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Songlink", + "provider_url": "https:\/\/song.link", + "endpoints": [ + { + "schemes": [ + "https:\/\/song.link\/*" + ], + "url": "https:\/\/song.link\/oembed", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "SoundCloud", + "provider_url": "http:\/\/soundcloud.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/soundcloud.com\/*", + "https:\/\/soundcloud.com\/*" + ], + "url": "https:\/\/soundcloud.com\/oembed" + } + ] + }, + { + "provider_name": "Soundsgood", + "provider_url": "https:\/\/soundsgood.co", + "endpoints": [ + { + "schemes": [ + "https:\/\/play.soundsgood.co\/playlist\/*", + "https:\/\/soundsgood.co\/playlist\/*" + ], + "url": "https:\/\/play.soundsgood.co\/oembed", + "discovery": true, + "formats": [ + "json", + "xml" + ] + } + ] + }, + { + "provider_name": "SpeakerDeck", + "provider_url": "https:\/\/speakerdeck.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/speakerdeck.com\/*\/*", + "https:\/\/speakerdeck.com\/*\/*" + ], + "url": "https:\/\/speakerdeck.com\/oembed.json", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Spotful", + "provider_url": "https:\/\/bespotful.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/play.bespotful.com\/*" + ], + "url": "https:\/\/api.bespotful.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Spotify", + "provider_url": "https:\/\/spotify.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.spotify.com\/*", + "spotify:*" + ], + "url": "https:\/\/embed.spotify.com\/oembed\/" + } + ] + }, + { + "provider_name": "Spreaker", + "provider_url": "https:\/\/www.spreaker.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.spreaker.com\/*", + "https:\/\/*.spreaker.com\/*" + ], + "url": "https:\/\/api.spreaker.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Stanford Digital Repository", + "provider_url": "https:\/\/purl.stanford.edu\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/purl.stanford.edu\/*" + ], + "url": "https:\/\/purl.stanford.edu\/embed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Streamable", + "provider_url": "https:\/\/streamable.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/streamable.com\/*", + "https:\/\/streamable.com\/*" + ], + "url": "https:\/\/api.streamable.com\/oembed.json", + "discovery": true + } + ] + }, + { + "provider_name": "StreamOneCloud", + "provider_url": "https:\/\/www.streamone.nl", + "endpoints": [ + { + "schemes": [ + "https:\/\/content.streamonecloud.net\/embed\/*" + ], + "url": "https:\/\/content.streamonecloud.net\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Sutori", + "provider_url": "https:\/\/www.sutori.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.sutori.com\/story\/*" + ], + "url": "https:\/\/www.sutori.com\/api\/oembed", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Sway", + "provider_url": "https:\/\/www.sway.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/sway.com\/*", + "https:\/\/www.sway.com\/*" + ], + "url": "https:\/\/sway.com\/api\/v1.0\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Ted", + "provider_url": "https:\/\/ted.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/ted.com\/talks\/*", + "https:\/\/ted.com\/talks\/*", + "https:\/\/www.ted.com\/talks\/*" + ], + "url": "https:\/\/www.ted.com\/talks\/oembed.{format}" + } + ] + }, + { + "provider_name": "The New York Times", + "provider_url": "https:\/\/www.nytimes.com", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.nytimes.com\/svc\/oembed", + "https:\/\/nytimes.com\/*", + "https:\/\/*.nytimes.com\/*" + ], + "url": "https:\/\/www.nytimes.com\/svc\/oembed\/json\/", + "discovery": true + } + ] + }, + { + "provider_name": "They Said So", + "provider_url": "https:\/\/theysaidso.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/theysaidso.com\/image\/*" + ], + "url": "https:\/\/theysaidso.com\/extensions\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "TickCounter", + "provider_url": "https:\/\/www.tickcounter.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.tickcounter.com\/countdown\/*", + "http:\/\/www.tickcounter.com\/countup\/*", + "http:\/\/www.tickcounter.com\/ticker\/*", + "http:\/\/www.tickcounter.com\/worldclock\/*", + "https:\/\/www.tickcounter.com\/countdown\/*", + "https:\/\/www.tickcounter.com\/countup\/*", + "https:\/\/www.tickcounter.com\/ticker\/*", + "https:\/\/www.tickcounter.com\/worldclock\/*" + ], + "url": "https:\/\/www.tickcounter.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Toornament", + "provider_url": "https:\/\/www.toornament.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.toornament.com\/tournaments\/*\/information", + "https:\/\/www.toornament.com\/tournaments\/*\/registration\/", + "https:\/\/www.toornament.com\/tournaments\/*\/matches\/schedule", + "https:\/\/www.toornament.com\/tournaments\/*\/stages\/*\/" + ], + "url": "https:\/\/widget.toornament.com\/oembed", + "discovery": true, + "formats": [ + "json", + "xml" + ] + } + ] + }, + { + "provider_name": "Topy", + "provider_url": "http:\/\/www.topy.se\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.topy.se\/image\/*" + ], + "url": "http:\/\/www.topy.se\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Tuxx", + "provider_url": "https:\/\/www.tuxx.be\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.tuxx.be\/*" + ], + "url": "https:\/\/www.tuxx.be\/services\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "tvcf", + "provider_url": "http:\/\/tvcf.co.kr", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.tvcf.co.kr\/v\/*" + ], + "url": "http:\/\/www.tvcf.co.kr\/services\/oembed" + } + ] + }, + { + "provider_name": "Twitch", + "provider_url": "https:\/\/www.twitch.tv", + "endpoints": [ + { + "schemes": [ + "http:\/\/clips.twitch.tv\/*", + "https:\/\/clips.twitch.tv\/*", + "http:\/\/www.twitch.tv\/*", + "https:\/\/www.twitch.tv\/*", + "http:\/\/twitch.tv\/*", + "https:\/\/twitch.tv\/*" + ], + "url": "https:\/\/api.twitch.tv\/v4\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Twitter", + "provider_url": "http:\/\/www.twitter.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/twitter.com\/*\/status\/*", + "https:\/\/*.twitter.com\/*\/status\/*" + ], + "url": "https:\/\/publish.twitter.com\/oembed" + } + ] + }, + { + "provider_name": "TypeCast", + "provider_url": "https:\/\/typecast.ai", + "endpoints": [ + { + "schemes": [ + "https:\/\/play.typecast.ai\/s\/*", + "https:\/\/play.typecast.ai\/e\/*", + "https:\/\/play.typecast.ai\/*" + ], + "url": "https:\/\/play.typecast.ai\/oembed" + } + ] + }, + { + "provider_name": "Ubideo", + "provider_url": "https:\/\/player.ubideo.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/player.ubideo.com\/*" + ], + "url": "https:\/\/player.ubideo.com\/api\/oembed.json", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "University of Cambridge Map", + "provider_url": "https:\/\/map.cam.ac.uk", + "endpoints": [ + { + "schemes": [ + "https:\/\/map.cam.ac.uk\/*" + ], + "url": "https:\/\/map.cam.ac.uk\/oembed\/" + } + ] + }, + { + "provider_name": "UOL", + "provider_url": "https:\/\/mais.uol.com.br\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.uol.com.br\/view\/*", + "https:\/\/*.uol.com.br\/video\/*" + ], + "url": "https:\/\/mais.uol.com.br\/apiuol\/v3\/oembed\/view", + "discovery": true + } + ] + }, + { + "provider_name": "Ustream", + "provider_url": "http:\/\/www.ustream.tv", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.ustream.tv\/*", + "http:\/\/*.ustream.com\/*" + ], + "url": "http:\/\/www.ustream.tv\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Utposts", + "provider_url": "https:\/\/www.utposts.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/www.utposts.com\/products\/*", + "http:\/\/www.utposts.com\/products\/*", + "https:\/\/utposts.com\/products\/*", + "http:\/\/utposts.com\/products\/*" + ], + "url": "https:\/\/www.utposts.com\/api\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Uttles", + "provider_url": "http:\/\/uttles.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/uttles.com\/uttle\/*" + ], + "url": "http:\/\/uttles.com\/api\/reply\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "VeeR VR", + "provider_url": "http:\/\/veer.tv\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/veer.tv\/videos\/*" + ], + "url": "https:\/\/api.veer.tv\/oembed", + "discovery": true + }, + { + "schemes": [ + "http:\/\/veervr.tv\/videos\/*" + ], + "url": "https:\/\/api.veervr.tv\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Verse", + "provider_url": "http:\/\/verse.com\/", + "endpoints": [ + { + "url": "http:\/\/verse.com\/services\/oembed\/" + } + ] + }, + { + "provider_name": "VEVO", + "provider_url": "http:\/\/www.vevo.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.vevo.com\/*", + "https:\/\/www.vevo.com\/*" + ], + "url": "https:\/\/www.vevo.com\/oembed", + "discovery": false + } + ] + }, + { + "provider_name": "VideoJug", + "provider_url": "http:\/\/www.videojug.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/www.videojug.com\/film\/*", + "http:\/\/www.videojug.com\/interview\/*" + ], + "url": "http:\/\/www.videojug.com\/oembed.{format}" + } + ] + }, + { + "provider_name": "Vidlit", + "provider_url": "https:\/\/vidl.it\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/vidl.it\/*" + ], + "url": "https:\/\/api.vidl.it\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Vidmizer", + "provider_url": "https:\/\/www.vidmizer.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/players.vidmizer.com\/*" + ], + "url": "https:\/\/app-v2.vidmizer.com\/api\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Vidyard", + "provider_url": "http:\/\/www.vidyard.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/embed.vidyard.com\/*", + "http:\/\/play.vidyard.com\/*", + "http:\/\/share.vidyard.com\/*", + "http:\/\/*.hubs.vidyard.com\/*" + ], + "url": "https:\/\/api.vidyard.com\/dashboard\/v1.1\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Vimeo", + "provider_url": "https:\/\/vimeo.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/vimeo.com\/*", + "https:\/\/vimeo.com\/album\/*\/video\/*", + "https:\/\/vimeo.com\/channels\/*\/*", + "https:\/\/vimeo.com\/groups\/*\/videos\/*", + "https:\/\/vimeo.com\/ondemand\/*\/*", + "https:\/\/player.vimeo.com\/video\/*" + ], + "url": "https:\/\/vimeo.com\/api\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Viziosphere", + "provider_url": "http:\/\/www.viziosphere.com", + "endpoints": [ + { + "schemes": [ + "http:\/\/viziosphere.com\/3dphoto*" + ], + "url": "http:\/\/viziosphere.com\/services\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Vlipsy", + "provider_url": "https:\/\/vlipsy.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/vlipsy.com\/*" + ], + "url": "https:\/\/vlipsy.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "VLIVE", + "provider_url": "https:\/\/www.vlive.tv", + "endpoints": [ + { + "url": "https:\/\/www.vlive.tv\/oembed", + "schemes": [ + "https:\/\/www.vlive.tv\/video\/*" + ], + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "Vlurb", + "provider_url": "https:\/\/www.vlurb.co\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/vlurb.co\/video\/*", + "https:\/\/vlurb.co\/video\/*" + ], + "url": "https:\/\/vlurb.co\/oembed.json", + "discovery": true + } + ] + }, + { + "provider_name": "VoxSnap", + "provider_url": "https:\/\/voxsnap.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/article.voxsnap.com\/*\/*" + ], + "url": "https:\/\/data.voxsnap.com\/oembed", + "discovery": true, + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "wecandeo", + "provider_url": "http:\/\/www.wecandeo.com\/", + "endpoints": [ + { + "url": "http:\/\/play.wecandeo.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "Wiredrive", + "provider_url": "https:\/\/www.wiredrive.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.wiredrive.com\/*" + ], + "url": "http:\/\/*.wiredrive.com\/present-oembed\/", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "Wistia, Inc.", + "provider_url": "https:\/\/wistia.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/fast.wistia.com\/embed\/iframe\/*", + "https:\/\/fast.wistia.com\/embed\/playlists\/*", + "https:\/\/*.wistia.com\/medias\/*" + ], + "url": "https:\/\/fast.wistia.com\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "wizer.me", + "provider_url": "http:\/\/www.wizer.me\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.wizer.me\/learn\/*", + "https:\/\/*.wizer.me\/learn\/*", + "http:\/\/*.wizer.me\/preview\/*", + "https:\/\/*.wizer.me\/preview\/*" + ], + "url": "http:\/\/app.wizer.me\/api\/oembed.{format}", + "discovery": true + } + ] + }, + { + "provider_name": "Wootled", + "provider_url": "http:\/\/www.wootled.com\/", + "endpoints": [ + { + "url": "http:\/\/www.wootled.com\/oembed" + } + ] + }, + { + "provider_name": "WordPress.com", + "provider_url": "http:\/\/wordpress.com\/", + "endpoints": [ + { + "url": "http:\/\/public-api.wordpress.com\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "Yes, I Know IT!", + "provider_url": "http:\/\/yesik.it", + "endpoints": [ + { + "schemes": [ + "http:\/\/yesik.it\/*", + "http:\/\/www.yesik.it\/*" + ], + "url": "http:\/\/yesik.it\/s\/oembed", + "formats": [ + "json" + ], + "discovery": true + } + ] + }, + { + "provider_name": "YFrog", + "provider_url": "http:\/\/yfrog.com\/", + "endpoints": [ + { + "schemes": [ + "http:\/\/*.yfrog.com\/*", + "http:\/\/yfrog.us\/*" + ], + "url": "http:\/\/www.yfrog.com\/api\/oembed", + "formats": [ + "json" + ] + } + ] + }, + { + "provider_name": "YouTube", + "provider_url": "https:\/\/www.youtube.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.youtube.com\/watch*", + "https:\/\/*.youtube.com\/v\/*", + "https:\/\/youtu.be\/*" + ], + "url": "https:\/\/www.youtube.com\/oembed", + "discovery": true + } + ] + }, + { + "provider_name": "ZnipeTV", + "provider_url": "https:\/\/www.znipe.tv\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/*.znipe.tv\/*" + ], + "url": "https:\/\/api.znipe.tv\/v3\/oembed\/", + "discovery": true + } + ] + }, + { + "provider_name": "ZProvider", + "provider_url": "https:\/\/reports.zoho.com\/", + "endpoints": [ + { + "schemes": [ + "https:\/\/reports.zoho.com\/ZDBDataSheetView.cc?OBJID=1432535000000003002&STANDALONE=true&INTERVAL=120&DATATYPESYMBOL=false&REMTOOLBAR=false&SEARCHBOX=true&INCLUDETITLE=true&INCLUDEDESC=true&SHOWHIDEOPT=true" + ], + "url": "http:\/\/api.provider.com\/oembed.json", + "discovery": true + } + ] + } +] \ No newline at end of file diff --git a/backend/src/schema/resolvers/embeds/scraper.js b/backend/src/schema/resolvers/embeds/scraper.js new file mode 100644 index 000000000..607f7aeb9 --- /dev/null +++ b/backend/src/schema/resolvers/embeds/scraper.js @@ -0,0 +1,102 @@ +import Metascraper from 'metascraper' +import fetch from 'node-fetch' +import fs from 'fs' +import path from 'path' + +import { ApolloError } from 'apollo-server' +import isEmpty from 'lodash/isEmpty' +import isArray from 'lodash/isArray' +import mergeWith from 'lodash/mergeWith' + +const error = require('debug')('embed:error') + +const metascraper = Metascraper([ + require('metascraper-author')(), + require('metascraper-date')(), + require('metascraper-description')(), + require('metascraper-image')(), + require('metascraper-lang')(), + require('metascraper-lang-detector')(), + require('metascraper-logo')(), + // require('metascraper-clearbit-logo')(), + require('metascraper-publisher')(), + require('metascraper-title')(), + require('metascraper-url')(), + require('metascraper-audio')(), + require('metascraper-soundcloud')(), + require('metascraper-video')(), + require('metascraper-youtube')(), + + // require('./rules/metascraper-embed')() +]) + +let oEmbedProvidersFile = fs.readFileSync(path.join(__dirname, './providers.json'), 'utf8') + +// some providers allow a format parameter +// we need JSON +oEmbedProvidersFile = oEmbedProvidersFile.replace('{format}', 'json') + +const oEmbedProviders = JSON.parse(oEmbedProvidersFile) + +const fetchEmbed = async url => { + const provider = oEmbedProviders.find(provider => { + return provider.provider_url.includes(url.hostname) + }) + if (!provider) return {} + const { + endpoints: [endpoint], + } = provider + const endpointUrl = new URL(endpoint.url) + endpointUrl.searchParams.append('url', url.href) + endpointUrl.searchParams.append('format', 'json') + let json + try { + const response = await fetch(endpointUrl) + json = await response.json() + } catch (err) { + error(`Error fetching embed data: ${err.message}`) + return {} + } + + return { + type: json.type, + html: json.html, + author: json.author_name, + date: json.upload_date, + sources: ['oembed'], + } +} + +const fetchResource = async url => { + const response = await fetch(url) + const html = await response.text() + const resource = await metascraper({ html, url: url.href }) + return { + sources: ['resource'], + ...resource, + } +} + +export default async function scrape(url) { + url = new URL(url) + if (url.hostname === 'youtu.be') { + // replace youtu.be to get proper results + url.hostname = 'youtube.com' + } + + const [meta, embed] = await Promise.all([fetchResource(url), fetchEmbed(url)]) + const output = mergeWith(meta, embed, (objValue, srcValue) => { + if (isArray(objValue)) { + return objValue.concat(srcValue) + } + }) + + if (isEmpty(output)) { + throw new ApolloError('Not found', 'NOT_FOUND') + } + + return { + type: 'link', + ...output, + } +} diff --git a/backend/src/schema/resolvers/socialMedia.js b/backend/src/schema/resolvers/socialMedia.js index 0bc03ea74..d28bc3fe1 100644 --- a/backend/src/schema/resolvers/socialMedia.js +++ b/backend/src/schema/resolvers/socialMedia.js @@ -3,14 +3,11 @@ import { neo4jgraphql } from 'neo4j-graphql-js' export default { Mutation: { CreateSocialMedia: async (object, params, context, resolveInfo) => { - /** - * TODO?: Creates double Nodes! - */ const socialMedia = await neo4jgraphql(object, params, context, resolveInfo, false) const session = context.driver.session() await session.run( `MATCH (owner:User {id: $userId}), (socialMedia:SocialMedia {id: $socialMediaId}) - MERGE (socialMedia)<-[:OWNED]-(owner) + MERGE (socialMedia)<-[:OWNED]-(owner) RETURN owner`, { userId: context.user.id, @@ -26,5 +23,21 @@ export default { return socialMedia }, + UpdateSocialMedia: async (object, params, context, resolveInfo) => { + const session = context.driver.session() + await session.run( + `MATCH (owner: User { id: $userId })-[:OWNED]->(socialMedia: SocialMedia { id: $socialMediaId }) + SET socialMedia.url = $socialMediaUrl + RETURN owner`, + { + userId: context.user.id, + socialMediaId: params.id, + socialMediaUrl: params.url, + }, + ) + session.close() + + return params + }, }, } diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js index 7ec35a08f..af17dbb43 100644 --- a/backend/src/schema/resolvers/socialMedia.spec.js +++ b/backend/src/schema/resolvers/socialMedia.spec.js @@ -5,9 +5,26 @@ import { host, login, gql } from '../../jest/helpers' const factory = Factory() describe('SocialMedia', () => { - let client - let headers - const mutationC = gql` + let client, headers, variables, mutation + + const ownerParams = { + email: 'owner@example.com', + password: '1234', + id: '1234', + name: 'Pippi Langstrumpf', + } + + const userParams = { + email: 'someuser@example.com', + password: 'abcd', + id: 'abcd', + name: 'Kalle Blomqvist', + } + + const url = 'https://twitter.com/pippi-langstrumpf' + const newUrl = 'https://twitter.com/bullerby' + + const createSocialMediaMutation = gql` mutation($url: String!) { CreateSocialMedia(url: $url) { id @@ -15,7 +32,15 @@ describe('SocialMedia', () => { } } ` - const mutationD = gql` + const updateSocialMediaMutation = gql` + mutation($id: ID!, $url: String!) { + UpdateSocialMedia(id: $id, url: $url) { + id + url + } + } + ` + const deleteSocialMediaMutation = gql` mutation($id: ID!) { DeleteSocialMedia(id: $id) { id @@ -24,92 +49,139 @@ describe('SocialMedia', () => { } ` beforeEach(async () => { - await factory.create('User', { - avatar: 'https://s3.amazonaws.com/uifaces/faces/twitter/jimmuirhead/128.jpg', - id: 'acb2d923-f3af-479e-9f00-61b12e864666', - name: 'Matilde Hermiston', - slug: 'matilde-hermiston', - role: 'user', - email: 'test@example.org', - password: '1234', - }) + await factory.create('User', userParams) + await factory.create('User', ownerParams) }) afterEach(async () => { await factory.cleanDatabase() }) - describe('unauthenticated', () => { - it('throws authorization error', async () => { - client = new GraphQLClient(host) - const variables = { - url: 'http://nsosp.org', - } - await expect(client.request(mutationC, variables)).rejects.toThrow('Not Authorised') + describe('create social media', () => { + beforeEach(() => { + variables = { url } + mutation = createSocialMediaMutation + }) + + describe('unauthenticated', () => { + it('throws authorization error', async () => { + client = new GraphQLClient(host) + await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised') + }) + }) + + describe('authenticated', () => { + beforeEach(async () => { + headers = await login(userParams) + client = new GraphQLClient(host, { headers }) + }) + + it('creates social media with correct URL', async () => { + await expect(client.request(mutation, variables)).resolves.toEqual( + expect.objectContaining({ + CreateSocialMedia: { + id: expect.any(String), + url: url, + }, + }), + ) + }) + + it('rejects empty string', async () => { + variables = { url: '' } + + await expect(client.request(mutation, variables)).rejects.toThrow( + '"url" is not allowed to be empty', + ) + }) + + it('rejects invalid URLs', async () => { + variables = { url: 'not-a-url' } + + await expect(client.request(createSocialMediaMutation, variables)).rejects.toThrow( + '"url" must be a valid uri', + ) + }) }) }) - describe('authenticated', () => { + describe('update social media', () => { beforeEach(async () => { - headers = await login({ - email: 'test@example.org', - password: '1234', - }) - client = new GraphQLClient(host, { - headers, - }) - }) + headers = await login(ownerParams) + client = new GraphQLClient(host, { headers }) - it('creates social media with correct URL', async () => { - const variables = { - url: 'http://nsosp.org', - } - await expect(client.request(mutationC, variables)).resolves.toEqual( - expect.objectContaining({ - CreateSocialMedia: { - id: expect.any(String), - url: 'http://nsosp.org', - }, - }), - ) - }) - - it('deletes social media', async () => { - const creationVariables = { - url: 'http://nsosp.org', - } - const { CreateSocialMedia } = await client.request(mutationC, creationVariables) + const { CreateSocialMedia } = await client.request(createSocialMediaMutation, { url }) const { id } = CreateSocialMedia - const deletionVariables = { - id, - } - const expected = { - DeleteSocialMedia: { - id: id, - url: 'http://nsosp.org', - }, - } - await expect(client.request(mutationD, deletionVariables)).resolves.toEqual(expected) + variables = { url: newUrl, id } + mutation = updateSocialMediaMutation }) - it('rejects empty string', async () => { - const variables = { - url: '', - } - await expect(client.request(mutationC, variables)).rejects.toThrow( - '"url" is not allowed to be empty', - ) + describe('unauthenticated', () => { + it('throws authorization error', async () => { + client = new GraphQLClient(host) + await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised') + }) }) - it('validates URLs', async () => { - const variables = { - url: 'not-a-url', - } + describe('authenticated as other user', () => { + // TODO: make sure it throws an authorization error + }) - await expect(client.request(mutationC, variables)).rejects.toThrow( - '"url" must be a valid uri', - ) + describe('authenticated as owner', () => { + it('updates social media', async () => { + const expected = { UpdateSocialMedia: { ...variables } } + + await expect(client.request(mutation, variables)).resolves.toEqual( + expect.objectContaining(expected), + ) + }) + + describe('given a non-existent id', () => { + // TODO: make sure it throws an error + }) + }) + }) + + describe('delete social media', () => { + beforeEach(async () => { + headers = await login(ownerParams) + client = new GraphQLClient(host, { headers }) + + const { CreateSocialMedia } = await client.request(createSocialMediaMutation, { url }) + const { id } = CreateSocialMedia + + variables = { id } + mutation = deleteSocialMediaMutation + }) + + describe('unauthenticated', () => { + it('throws authorization error', async () => { + client = new GraphQLClient(host) + + await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised') + }) + }) + + describe('authenticated as other user', () => { + // TODO: make sure it throws an authorization error + }) + + describe('authenticated as owner', () => { + beforeEach(async () => { + headers = await login(ownerParams) + client = new GraphQLClient(host, { headers }) + }) + + it('deletes social media', async () => { + const expected = { + DeleteSocialMedia: { + id: variables.id, + url: url, + }, + } + await expect(client.request(mutation, variables)).resolves.toEqual(expected) + }) }) }) }) diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index 820688a1a..610f84ae1 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -2,6 +2,7 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import fileUpload from './fileUpload' import { neode } from '../../bootstrap/neo4j' import { UserInputError } from 'apollo-server' +import { undefinedToNull } from '../helpers' const instance = neode() @@ -36,16 +37,6 @@ const count = obj => { return resolvers } -const undefinedToNull = list => { - const resolvers = {} - list.forEach(key => { - resolvers[key] = async (parent, params, context, resolveInfo) => { - return typeof parent[key] === 'undefined' ? null : parent[key] - } - }) - return resolvers -} - export const hasMany = obj => { const resolvers = {} for (const [key, connection] of Object.entries(obj)) { diff --git a/backend/src/schema/types/embed.gql b/backend/src/schema/types/embed.gql new file mode 100644 index 000000000..d59f696b2 --- /dev/null +++ b/backend/src/schema/types/embed.gql @@ -0,0 +1,19 @@ +type Embed { + type: String + title: String + author: String + publisher: String + date: String + description: String + url: String + image: String + audio: String + video: String + lang: String + html: String + sources: [String] +} + +type Query { + embed(url: String!): Embed +} diff --git a/backend/yarn.lock b/backend/yarn.lock index ac4de5313..1059095d7 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@apollographql/apollo-tools@^0.3.6": - version "0.3.7" - resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.3.7.tgz#3bc9c35b9fff65febd4ddc0c1fc04677693a3d40" - integrity sha512-+ertvzAwzkYmuUtT8zH3Zi6jPdyxZwOgnYaZHY7iLnMVJDhQKWlkyjLMF8wyzlPiEdDImVUMm5lOIBZo7LkGlg== +"@apollographql/apollo-tools@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.0.tgz#8a1a0ab7a0bb12ccc03b72e4a104cfa5d969fd5f" + integrity sha512-7wEO+S+zgz/wVe3ilFQqICufRBYYDSNUkd1V03JWvXuSydbYq2SM5EgvWmFF+04iadt+aQ0XCCsRzCzRPQODfQ== dependencies: apollo-env "0.5.1" @@ -14,16 +14,16 @@ resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz#3ce939cb127fb8aaa3ffc1e90dff9b8af9f2e3dc" integrity sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ== -"@babel/cli@~7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.5.0.tgz#f403c930692e28ecfa3bf02a9e7562b474f38271" - integrity sha512-qNH55fWbKrEsCwID+Qc/3JDPnsSGpIIiMDbppnR8Z6PxLAqMQCFNqBctkIkBrMH49Nx+qqVTrHRWUR+ho2k+qQ== +"@babel/cli@~7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.5.5.tgz#bdb6d9169e93e241a08f5f7b0265195bf38ef5ec" + integrity sha512-UHI+7pHv/tk9g6WXQKYz+kmXTI77YtuY3vqC59KIqcoWEjsJJSG6rAxKaLsgj3LDyadsPrCB929gVOKM6Hui0w== dependencies: commander "^2.8.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.17.11" + lodash "^4.17.13" mkdirp "^0.5.1" output-file-sync "^2.0.0" slash "^2.0.0" @@ -31,52 +31,34 @@ optionalDependencies: chokidar "^2.0.4" -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/code-frame@^7.5.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0", "@babel/core@~7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.4.tgz#4c32df7ad5a58e9ea27ad025c11276324e0b4ddd" - integrity sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ== +"@babel/core@^7.1.0", "@babel/core@~7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" + integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/helpers" "^7.5.4" - "@babel/parser" "^7.5.0" + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.5.5" + "@babel/helpers" "^7.5.5" + "@babel/parser" "^7.5.5" "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.0" - "@babel/types" "^7.5.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" - lodash "^4.17.11" + lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a" - integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== - dependencies: - "@babel/types" "^7.5.0" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.5.5": +"@babel/generator@^7.0.0", "@babel/generator@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== @@ -268,14 +250,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.4.tgz#2f00608aa10d460bde0ccf665d6dcf8477357cf0" - integrity sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow== +"@babel/helpers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" + integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== dependencies: "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.0" - "@babel/types" "^7.5.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" "@babel/highlight@^7.0.0": version "7.0.0" @@ -298,12 +280,7 @@ node-environment-flags "^1.0.5" v8flags "^3.1.1" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7" - integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== - -"@babel/parser@^7.5.5": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== @@ -753,22 +730,7 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" - integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.0" - "@babel/types" "^7.5.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/traverse@^7.5.5": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== @@ -783,7 +745,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.0", "@babel/types@^7.5.5": +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== @@ -983,6 +945,66 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^12.0.9" +"@kamilkisiela/graphql-tools@4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@kamilkisiela/graphql-tools/-/graphql-tools-4.0.6.tgz#6dcf4d18bedaf34f6ab1d5bad2414e530d0875d1" + integrity sha512-IPWa+dOFCE4zaCsrJrAMp7yWXnfOZLNhqoMEOmn958WkLM0mmsDc/W/Rh7/7xopIT6P0oizb6/N1iH5HnNXOUA== + dependencies: + apollo-link "^1.2.3" + apollo-utilities "^1.0.1" + deprecated-decorator "^0.1.6" + iterall "^1.1.3" + uuid "^3.1.0" + +"@metascraper/helpers@^4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-4.10.2.tgz#864e49c71468548441f3a1ab68fdb2913855821b" + integrity sha512-l2IyF2X4ytz5Mj/TaVenmjEhEZCCj+Qb1PnIbW10Kas/qg0O58x5hBAHsszkSWQSx/OvnDvT2Mpft77qcBa77g== + dependencies: + audio-extensions "0.0.0" + chrono-node "~1.3.11" + condense-whitespace "~1.0.0" + file-extension "~4.0.5" + image-extensions "~1.1.0" + is-relative-url "~2.0.0" + is-uri "~1.2.0" + iso-639-3 "~1.1.0" + isostring "0.0.1" + lodash "~4.17.11" + mime-types "~2.1.22" + normalize-url "~4.2.0" + smartquotes "~2.3.1" + title "~3.4.1" + truncate "~2.0.1" + url-regex "~4.1.1" + video-extensions "~1.1.0" + +"@metascraper/helpers@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.6.3.tgz#88d3d3a174f94ccb617145cb9f60c999b57d9b60" + integrity sha512-FWqQmh+sZI5JRxJHVPPzBjilgZCqKWDFSo/eqRIgLLW/5kB79uuX4aseSTep1JpXUAcD5F/Z0KZYQl4JTbTopA== + dependencies: + audio-extensions "0.0.0" + chrono-node "~1.3.11" + condense-whitespace "~2.0.0" + entities "~2.0.0" + file-extension "~4.0.5" + has-values "~2.0.1" + image-extensions "~1.1.0" + is-relative-url "~3.0.0" + is-uri "~1.2.0" + iso-639-3 "~1.2.0" + isostring "0.0.1" + lodash "~4.17.15" + mem "~5.1.1" + mime-types "~2.1.24" + normalize-url "~4.3.0" + smartquotes "~2.3.1" + title "~3.4.1" + truncate "~2.1.0" + url-regex "~5.0.0" + video-extensions "~1.1.0" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -1036,6 +1058,18 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + "@types/accepts@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" @@ -1121,6 +1155,15 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" +"@types/glob@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + "@types/istanbul-lib-coverage@*": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -1146,6 +1189,11 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + "@types/long@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" @@ -1156,6 +1204,11 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b" integrity sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA== +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + "@types/node@*", "@types/node@^10.1.0": version "10.12.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" @@ -1202,6 +1255,23 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== +"@typescript-eslint/experimental-utils@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + "@wry/context@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.4.0.tgz#8a8718408e4dd0514a0f8f4231bb4b87130b34e3" @@ -1294,6 +1364,22 @@ activitystreams-context@>=3.0.0, activitystreams-context@^3.0.0: resolved "https://registry.yarnpkg.com/activitystreams-context/-/activitystreams-context-3.1.0.tgz#28334e129f17cfb937e8c702c52c1bcb1d2830c7" integrity sha512-KBQ+igwf1tezMXGVw5MvRSEm0gp97JI1hTZ45I6MEkWv25lEgNoA9L6wqfaOiCX8wnMRWw9pwRsPZKypdtxAtg== +aggregate-error@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" + integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== + dependencies: + clean-stack "^2.0.0" + indent-string "^3.2.0" + +aggregate-error@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-1.0.0.tgz#888344dad0220a72e3af50906117f48771925fac" + integrity sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w= + dependencies: + clean-stack "^1.0.0" + indent-string "^3.0.0" + ajv@^6.10.0, ajv@^6.5.5, ajv@^6.9.1: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" @@ -1336,7 +1422,12 @@ ansi-regex@^4.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1356,13 +1447,13 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -apollo-cache-control@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.8.0.tgz#08b157e5f8cd86f63608b05d45222de0725ebd5a" - integrity sha512-BBnfUmSWRws5dRSDD+R56RLJCE9v6xQuob+i/1Ju9EX4LZszU5JKVmxEvnkJ1bk/BkihjoQXTnP6fJCnt6fCmA== +apollo-cache-control@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.8.1.tgz#707c0b958c02c5b47ddf49a02f60ea88a64783fb" + integrity sha512-yQy5KB/OuX90PsdztWc4vfc4R//ZmW/AxNgXKWga0xW5OzEsysdJWHAsTzb40/rkJ9VNeQ+0N5wGikiS+jSCzg== dependencies: - apollo-server-env "2.4.0" - graphql-extensions "0.8.0" + apollo-server-env "2.4.1" + graphql-extensions "0.8.1" apollo-cache-inmemory@~1.6.2: version "1.6.2" @@ -1397,13 +1488,13 @@ apollo-client@~2.6.3: tslib "^1.9.3" zen-observable "^0.8.0" -apollo-datasource@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.6.0.tgz#823d6be8a3804613b5c56d2972c07db662293fc6" - integrity sha512-DOzzYWEOReYRu2vWPKEulqlTb9Xjg67sjVCzve5MXa7GUXjfr8IKioljvfoBMlqm/PpbJVk2ci4n5NIFqoYsrQ== +apollo-datasource@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.6.1.tgz#697870f564da90bee53fa30d07875cb46c4d6b06" + integrity sha512-oy7c+9Up8PSZwJ1qTK9Idh1acDpIocvw+C0zcHg14ycvNz7qWHSwLUSaAjuQMd9SYFzB3sxfyEhyfyhIogT2+Q== dependencies: apollo-server-caching "0.5.0" - apollo-server-env "2.4.0" + apollo-server-env "2.4.1" apollo-engine-reporting-protobuf@0.4.0: version "0.4.0" @@ -1412,17 +1503,17 @@ apollo-engine-reporting-protobuf@0.4.0: dependencies: protobufjs "^6.8.6" -apollo-engine-reporting@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.4.0.tgz#3a9bd011b271593e16d7057044898d0a817b197d" - integrity sha512-NMiO3h1cuEBt6QZNGHxivwuyZQnoU/2MMx0gUA8Gyy1ERBhK6P235qoMnvoi34rLmqJuyGPX6tXcab8MpMIzYQ== +apollo-engine-reporting@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.4.2.tgz#f6c1e964c3c2c09bdb25c449f6b7ab05952ff459" + integrity sha512-Srw6Roqx38P82c5If6NmWdM/HVETLwcCGIl4x6a+DDcuPJl6n6ef+Sluoz4QAGrqQDJhMYk3jL9xOnEysgtonA== dependencies: apollo-engine-reporting-protobuf "0.4.0" apollo-graphql "^0.3.3" - apollo-server-env "2.4.0" - apollo-server-types "0.2.0" + apollo-server-env "2.4.1" + apollo-server-types "0.2.1" async-retry "^1.2.1" - graphql-extensions "0.8.0" + graphql-extensions "0.8.2" apollo-env@0.5.1: version "0.5.1" @@ -1492,27 +1583,25 @@ apollo-server-caching@0.5.0: dependencies: lru-cache "^5.0.0" -apollo-server-core@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.7.0.tgz#c444347dea11149b5b453890506e43dc7e711257" - integrity sha512-CXjXAkgcMBCJZpsZgfAY5W7f5thdxUhn75UgzeH28RTUZ2aKi/LjoCixPWRSF1lU4vuEWneAnM8Vg/KCD+29lQ== +apollo-server-core@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.8.0.tgz#0bfba3d5eb557c6ffa68ad60e77f69e2634e211d" + integrity sha512-Bilaaaol8c4mpF+8DatsAm+leKd0lbz1jS7M+WIuu8GscAXFzzfT6311dNC7zx0wT5FUNNdHdvQOry/lyCn5GA== dependencies: - "@apollographql/apollo-tools" "^0.3.6" + "@apollographql/apollo-tools" "^0.4.0" "@apollographql/graphql-playground-html" "1.6.24" "@types/ws" "^6.0.0" - apollo-cache-control "0.8.0" - apollo-datasource "0.6.0" - apollo-engine-reporting "1.4.0" - apollo-engine-reporting-protobuf "0.4.0" + apollo-cache-control "0.8.1" + apollo-datasource "0.6.1" + apollo-engine-reporting "1.4.2" apollo-server-caching "0.5.0" - apollo-server-env "2.4.0" + apollo-server-env "2.4.1" apollo-server-errors "2.3.1" - apollo-server-plugin-base "0.6.0" - apollo-server-types "0.2.0" - apollo-tracing "0.8.0" + apollo-server-plugin-base "0.6.1" + apollo-server-types "0.2.1" + apollo-tracing "0.8.1" fast-json-stable-stringify "^2.0.0" - graphql-extensions "0.8.0" - graphql-subscriptions "^1.0.0" + graphql-extensions "0.9.0" graphql-tag "^2.9.2" graphql-tools "^4.0.0" graphql-upload "^8.0.2" @@ -1520,10 +1609,10 @@ apollo-server-core@2.7.0: subscriptions-transport-ws "^0.9.11" ws "^6.0.0" -apollo-server-env@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.0.tgz#6611556c6b627a1636eed31317d4f7ea30705872" - integrity sha512-7ispR68lv92viFeu5zsRUVGP+oxsVI3WeeBNniM22Cx619maBUwcYTIC3+Y3LpXILhLZCzA1FASZwusgSlyN9w== +apollo-server-env@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.1.tgz#58264ecfeb151919e0f480320b4e3769be9f18f3" + integrity sha512-J4G1Q6qyb7KjjqvQdVM5HUH3QDb52VK1Rv+MWL0rHcstJx9Fh/NK0sS+nujrMfKw57NVUs2d4KuYtl/EnW/txg== dependencies: node-fetch "^2.1.2" util.promisify "^1.0.0" @@ -1533,10 +1622,10 @@ apollo-server-errors@2.3.1: resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.1.tgz#033cf331463ebb99a563f8354180b41ac6714eb6" integrity sha512-errZvnh0vUQChecT7M4A/h94dnBSRL213dNxpM5ueMypaLYgnp4hiCTWIEaooo9E4yMGd1qA6WaNbLDG2+bjcg== -apollo-server-express@2.7.0, apollo-server-express@^2.6.9: - version "2.7.0" - resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.7.0.tgz#c19bf56c32473a76b1eb87237d713018984f838e" - integrity sha512-TIOaLyuxD8xIECXjbPfS9HUWgHCKsG3rR4WuTpTreVEB08EsGeg+VcNGn0hmUnch18fPXTciBHWCv/fFV/YhMg== +apollo-server-express@2.8.0, apollo-server-express@^2.7.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.8.0.tgz#3815eee2fccfc9cba6d232420fa7411cda062647" + integrity sha512-7dj4CVyOMz1HeVoF8nw3aKw7QV/5D6PACiweu6k9xPRHurYf0bj3ncYkAMPNnxIAwu1I8FzMn4/84BWoKJ7ZFg== dependencies: "@apollographql/graphql-playground-html" "1.6.24" "@types/accepts" "^1.3.5" @@ -1544,55 +1633,56 @@ apollo-server-express@2.7.0, apollo-server-express@^2.6.9: "@types/cors" "^2.8.4" "@types/express" "4.17.0" accepts "^1.3.5" - apollo-server-core "2.7.0" - apollo-server-types "0.2.0" + apollo-server-core "2.8.0" + apollo-server-types "0.2.1" body-parser "^1.18.3" cors "^2.8.4" graphql-subscriptions "^1.0.0" graphql-tools "^4.0.0" + subscriptions-transport-ws "^0.9.16" type-is "^1.6.16" -apollo-server-plugin-base@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.0.tgz#4186296ea5d52cfe613961d252a8a2f9e13e6ba6" - integrity sha512-BjfyWpHyKwHOe819gk3wEFwbnVp9Xvos03lkkYTTcXS/8G7xO78aUcE65mmyAC56/ZQ0aodNFkFrhwNtWBQWUQ== +apollo-server-plugin-base@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.1.tgz#b9c209aa2102a26c6134f51bfa1e4a8307b63b11" + integrity sha512-gLLF0kz4QOOyczDGWuR2ZNDfa1nHfyFNG76ue8Es0/0ujnMT9KoSokXkx1hDh0X7FFTMj/MelYYoNEqgTH88zw== dependencies: - apollo-server-types "0.2.0" + apollo-server-types "0.2.1" -apollo-server-testing@~2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.7.0.tgz#df8f8fb0df85f9781b6822fc92ee36fdc039b024" - integrity sha512-geBTK5T8mqZ2UOscC3oHQ/QoKMINLK+Mmq5ZfZe9UhmdXi+WqQ3/6B+3HMoQ7eQ7D6bNILe8b7N2EKuyUkePdg== +apollo-server-testing@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.8.0.tgz#57c31575d51d13f09b5a14709c482b9d5986cf58" + integrity sha512-a+9OZcqNeeUkOGVDOfuSmrXsTu3LnG9NvfM/4H2XJBJWHzghiuU6xZV2yHetZSTLXsAvWw3To2j1g8+/A8Yqsg== dependencies: - apollo-server-core "2.7.0" + apollo-server-core "2.8.0" -apollo-server-types@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.2.0.tgz#270d7298f709fd8237ebfa48753249e5286df5f2" - integrity sha512-5dgiyXsM90vnfmdXO1ixHvsLn0d9NP4tWufmr3ZmjKv00r4JAQNUaUdgOSGbRIKoHELQGwxUuTySTZ/tYfGaNQ== +apollo-server-types@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.2.1.tgz#553da40ea1ad779ef0390c250ddad7eb782fdf64" + integrity sha512-ls26d6jjY7x91ctLWtbpQHGW0lcFR1LcOpDvBQUC2aCwQzuW/6yV7F3hfcEdLR9pjIxcA4yAtFQcKf5olDWVkA== dependencies: apollo-engine-reporting-protobuf "0.4.0" apollo-server-caching "0.5.0" - apollo-server-env "2.4.0" + apollo-server-env "2.4.1" -apollo-server@~2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.7.0.tgz#6a326f06ed1c5cc4e57e1731b74ec92c79237889" - integrity sha512-UKYROQqcwSgIjUEjaxAllRJQFTa3flPY+fV5Q0Kz2e3XE5QomEkuNBmO54IefIOr8LllhRU9246WmMHRuwun+w== +apollo-server@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.8.0.tgz#c57261f02f9f2865778ad8e0cdb3c6a80307beb5" + integrity sha512-WtHbP8/C7WkFBCA44V2uTiyuefgqlVSAb6di4XcCPLyopcg9XGKHYRPyp5uOOKlMDTfryNqV59DWHn5/oXkZmQ== dependencies: - apollo-server-core "2.7.0" - apollo-server-express "2.7.0" + apollo-server-core "2.8.0" + apollo-server-express "2.8.0" express "^4.0.0" graphql-subscriptions "^1.0.0" graphql-tools "^4.0.0" -apollo-tracing@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.8.0.tgz#28cd9c61a4db12b2c24dad67fdedd309806c1650" - integrity sha512-cNOtOlyZ56iJRsCjnxjM1V0SnQ2ZZttuyoeOejdat6llPfk5bfYTVOKMjdbSfDvU33LS9g9sqNJCT0MwrEPFKQ== +apollo-tracing@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.8.1.tgz#220aeac6ad598c67f9333739155b7a56bd63ccab" + integrity sha512-zhVNC7N6hg9IJEeSEXFDxcnXD5GJQAbHxaoKVBKEolcIIsz6EGd700ORdagJgFKLReVp9O65HPrZJCg66sVx7g== dependencies: - apollo-server-env "2.4.0" - graphql-extensions "0.8.0" + apollo-server-env "2.4.1" + graphql-extensions "0.8.1" apollo-utilities@1.3.2, apollo-utilities@^1.0.1, apollo-utilities@^1.3.0, apollo-utilities@^1.3.2: version "1.3.2" @@ -1609,6 +1699,11 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +arch@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1617,6 +1712,11 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arg@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/arg/-/arg-1.0.0.tgz#444d885a4e25b121640b55155ef7cd03975d6050" + integrity sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1774,11 +1874,21 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +asyncro@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" + integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +audio-extensions@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/audio-extensions/-/audio-extensions-0.0.0.tgz#d0eefe077fb9eb625898eed9985890548cf1f8d2" + integrity sha1-0O7+B3+562JYmO7ZmFiQVIzx+NI= + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2079,6 +2189,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + callsites@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" @@ -2132,6 +2255,15 @@ chai@~4.2.0: pathval "^1.1.0" type-detect "^4.0.5" +chalk@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q== + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2151,7 +2283,12 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -cheerio@~1.0.0-rc.3: +cheerio-advanced-selectors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cheerio-advanced-selectors/-/cheerio-advanced-selectors-2.0.1.tgz#fb5ec70a4599e8cec1cf669c6d9b90a3fa969c48" + integrity sha512-5wHR8bpiD5pdUtaS81A6hnJezzoDzL1TLWfK6bxnLkIgEKPV26BlOdMCcvuj3fTE7JSalsTUeNU7AOD/u6bYhw== + +cheerio@~1.0.0-rc.2, cheerio@~1.0.0-rc.3: version "1.0.0-rc.3" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== @@ -2187,6 +2324,13 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== +chrono-node@~1.3.11: + version "1.3.11" + resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-1.3.11.tgz#b86a26b7e3157edcc4fe3374e1b6f90caedc8e39" + integrity sha512-jDWRnY6nYvzfV3HPYBqo+tot7tcsUs9i3arGbMdI0TouPSXP2C2y/Ctp27rxKTQDi6yuTxAB2cw+Q6igGhOhdQ== + dependencies: + moment "2.21.0" + ci-info@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" @@ -2207,6 +2351,21 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-stack@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" + integrity sha1-noIVAa6XmYbEax1m0tQy2y/UrjE= + +clean-stack@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.1.0.tgz#9e7fec7f3f8340a2ab4f127c80273085e8fbbdd0" + integrity sha512-uQWrpRm+iZZUCAp7ZZJQbd4Za9I3AjR/3YTjmcnAtkauaIm/T5CT6U8zVI6e60T6OANqBFAzuR9/HB3NzuZCRA== + +clean-stack@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.0.0.tgz#301bfa9e8dd2d3d984c0e542f7aa67b996f63e0a" + integrity sha512-VEoL9Qh7I8s8iHnV53DaeWSt8NJ0g3khMfK6NiCPB7H657juhro+cSw2O88uo3bo0c0X5usamtXk0/Of0wXa5A== + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -2234,6 +2393,14 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +clipboardy@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.2.tgz#2ce320b9ed9be1514f79878b53ff9765420903e2" + integrity sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw== + dependencies: + arch "^2.1.0" + execa "^0.8.0" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -2243,6 +2410,13 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2253,6 +2427,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collapse-white-space@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" + integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -2317,6 +2496,16 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +condense-whitespace@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-1.0.0.tgz#8376d98ef028e6cb2cd2468e28ce42c5c65ab1a9" + integrity sha1-g3bZjvAo5sss0kaOKM5CxcZasak= + +condense-whitespace@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-2.0.0.tgz#94e9644938f66aa7be4b8849f8f0b3cec97d6b3a" + integrity sha512-Ath9o58/0rxZXbyoy3zZgrVMoIemi30sukG/btuMKCLyqfQt3dNOWc9N3EHEMa2Q3i0tXQPDJluYFLwy7pJuQw== + configstore@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" @@ -2346,10 +2535,10 @@ content-disposition@0.5.3: dependencies: safe-buffer "5.1.2" -content-security-policy-builder@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz#8749a1d542fcbe82237281ea9f716ce68b394dd2" - integrity sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w== +content-security-policy-builder@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz#0a2364d769a3d7014eec79ff7699804deb8cfcbb" + integrity sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ== content-type@~1.0.4: version "1.0.4" @@ -2443,6 +2632,14 @@ cross-fetch@2.2.2: node-fetch "2.1.2" whatwg-fetch "2.0.4" +cross-fetch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c" + integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw== + dependencies: + node-fetch "2.6.0" + whatwg-fetch "3.0.0" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2570,10 +2767,10 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@2.0.0-beta.1: - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-beta.1.tgz#6f3209ea8be559211be5160e0a6379a7eade227b" - integrity sha512-ls5W/PUZmrtck53HD3Sd0564NlnNoQtcxNCwWcIzULJMNNgAPVKHoylVXPau7vdyu5/JTd25ljtan+iWnnUKkw== +date-fns@2.0.0-beta.3: + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-beta.3.tgz#2e28f5af945930f774ddd778e184d68227101d55" + integrity sha512-z5O262BvHPhwUvA1weXH+AZodygnZUcORERw8hjwBUrRPGrAo2e/rjXfC8Ykf1OGJZGDuLnK/WXbEZBIc0exGQ== debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" @@ -2606,6 +2803,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -2623,12 +2827,17 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== +deepmerge@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" + integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== -define-properties@^1.1.2: +defer-to-connect@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" + integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== + +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2869,6 +3078,11 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +entities@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2883,18 +3097,7 @@ error-stack-parser@^2.0.1: dependencies: stackframe "^1.0.4" -es-abstract@^1.4.3: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-abstract@^1.5.1, es-abstract@^1.7.0: +es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -2906,6 +3109,17 @@ es-abstract@^1.5.1, es-abstract@^1.7.0: is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.4.3: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -3014,10 +3228,10 @@ eslint-plugin-es@^1.4.0: eslint-utils "^1.3.0" regexpp "^2.0.1" -eslint-plugin-import@~2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz#7a5ba8d32622fb35eb9c8db195c2090bd18a3678" - integrity sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig== +eslint-plugin-import@~2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: array-includes "^3.0.3" contains-path "^0.1.0" @@ -3026,15 +3240,17 @@ eslint-plugin-import@~2.18.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" + object.values "^1.1.0" read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-plugin-jest@~22.11.1: - version "22.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.11.1.tgz#04b586e2fddd07e55900a381255d6b3d9242ae87" - integrity sha512-kPF1Nmr5xMLz6DT7qEttz0TTeyx1x6SozIkNO9y4F2yxuWjHMp/e70fo742pR3y0MewgXQQMIIXeSKLB66iO7Q== +eslint-plugin-jest@~22.14.0: + version "22.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.14.0.tgz#f9b09837f665cfe360b55c08866904255294cc16" + integrity sha512-Xtc9ZTtxdYFC7vu0PHxDeQ9lOMQ8gjwMmSQq/ni83TdflgL3eVh/qg3t99I7gcDxpeXfcp+lHu9C0vN3QAhATw== + dependencies: + "@typescript-eslint/experimental-utils" "^1.13.0" eslint-plugin-node@~9.1.0: version "9.1.0" @@ -3073,7 +3289,7 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^4.0.3: +eslint-scope@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -3081,6 +3297,14 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-utils@^1.3.0, eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" @@ -3091,10 +3315,10 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@~6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.0.1.tgz#4a32181d72cb999d6f54151df7d337131f81cda7" - integrity sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w== +eslint@~6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" + integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -3102,7 +3326,7 @@ eslint@~6.0.1: cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" + eslint-scope "^5.0.0" eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" espree "^6.0.0" @@ -3110,28 +3334,29 @@ eslint@~6.0.1: esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^3.1.0" + glob-parent "^5.0.0" globals "^11.7.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" + inquirer "^6.4.1" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.11" + lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" progress "^2.0.0" regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" table "^5.2.3" text-table "^0.2.0" + v8-compile-cache "^2.0.3" espree@^6.0.0: version "6.0.0" @@ -3204,6 +3429,19 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3396,6 +3634,11 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-extension@~4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/file-extension/-/file-extension-4.0.5.tgz#ae6cef34c28e7313a92baa4aa955755cacdf0ce3" + integrity sha512-l0rOL3aKkoi6ea7MNZe6OHgqYYpn48Qfflr8Pe9G9JPPTx5A+sfboK91ZufzIs59/lPqh351l0eb6iKU9J5oGg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3502,6 +3745,13 @@ frameguard@3.1.0: resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.1.0.tgz#bd1442cca1d67dc346a6751559b6d04502103a22" integrity sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g== +franc@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/franc/-/franc-4.0.0.tgz#365951bc787b92ffbb1c63c1c492d6b76cbd3a56" + integrity sha512-4991aLWY5sLg2fsyiOPflUjye5XBKyUO4V9O4FTBbQ7xKugvnmP9x3m3LlrpD7kq1BebMThNkEXnK52HaU3ZkQ== + dependencies: + trigram-utils "^1.0.0" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3571,6 +3821,11 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= +get-src@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-src/-/get-src-1.0.1.tgz#ca11dbe4a93c7f3aa85cec95fcb0b2dfaa9539ee" + integrity sha1-yhHb5Kk8fzqoXOyV/LCy36qVOe4= + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -3581,18 +3836,32 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" +get-stream@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +get-video-id@~3.1.1: + version "3.1.4" + resolved "https://registry.yarnpkg.com/get-video-id/-/get-video-id-3.1.4.tgz#9bffb8b607aa0379f0f8a927eae7df13b5e414a3" + integrity sha512-XOZ60NZ60ozTtoWtPPpA3TC9JgDXgcd5nTfYwjBhZWAx3w48HRq6EqKp2bUJ/3F+BWgiMMHg4IkQ+acO6LxfMQ== + dependencies: + get-src "^1.0.1" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3613,10 +3882,17 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + +glob@7.1.4, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3654,6 +3930,23 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" +got@^9.3.2, got@~9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" @@ -3683,26 +3976,52 @@ graphql-custom-directives@~0.2.14: moment "^2.22.2" numeral "^2.0.6" -graphql-extensions@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.8.0.tgz#b3fe7915aa84eef5a39135840840cc4d2e700c46" - integrity sha512-zV9RefkusIXqi9ZJtl7IJ5ecjDKdb7PLAb5E3CmxX3OK1GwNCIubp0vE7Fp4fXlCUKgTB1Woubs0zj71JT8o0A== +graphql-extensions@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.8.1.tgz#f5f1fed5fe49620c4e70c5d08bdbd0039e91c402" + integrity sha512-d/L4x7/PPWhviJqi7jIWOVJPzfzagYgPizSQUpa+3hozbWhwpWEnfxwgL5/If5MnPUikBnqlkOLCyjHMNdipYA== dependencies: - "@apollographql/apollo-tools" "^0.3.6" - apollo-server-env "2.4.0" - apollo-server-types "0.2.0" + "@apollographql/apollo-tools" "^0.4.0" + apollo-server-env "2.4.1" + apollo-server-types "0.2.1" + +graphql-extensions@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.8.2.tgz#071f29b111b16b359eb9994b0a036bdeec106492" + integrity sha512-d0nbxMfMe7wxdsVdCn0OBx2rX0sbcIjo9TOud38i9OgNa9eeS23OxbNfe+ezTCkEvSVqgPzpy5DAOvM4HNDV4Q== + dependencies: + "@apollographql/apollo-tools" "^0.4.0" + apollo-server-env "2.4.1" + apollo-server-types "0.2.1" + +graphql-extensions@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.9.0.tgz#88fb3b161f84a92f4a9032b2941919113600635d" + integrity sha512-0GQjQ2t2Nkg9OIk3eS5jcvQLzFkJtVB73t4AnEl7bejPwwShtY37XzE7mOlfof1OqbvRKvKFoks+wSjus2Fhzw== + dependencies: + "@apollographql/apollo-tools" "^0.4.0" + apollo-server-env "2.4.1" + apollo-server-types "0.2.1" + +graphql-import@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223" + integrity sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw== + dependencies: + lodash "^4.17.4" + resolve-from "^4.0.0" graphql-iso-date@~3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/graphql-iso-date/-/graphql-iso-date-3.6.1.tgz#bd2d0dc886e0f954cbbbc496bbf1d480b57ffa96" integrity sha512-AwFGIuYMJQXOEAgRlJlFL4H1ncFM8n8XmoVDTNypNOZyQ8LFDG2ppMFlsS862BSTCDcSUfHp8PD3/uJhv7t59Q== -graphql-middleware@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.2.tgz#c8cdb67615eec02aec237b455e679f5fc973ddc4" - integrity sha512-sRqu1sF+77z42z1OVM1QDHKQWnWY5K3nAgqWiZwx3U4tqNZprrDuXxSChPMliV343IrVkpYdejUYq9w24Ot3FA== +graphql-middleware@~3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.3.tgz#58cbce80892fb933d72794447f33f978fc743aa5" + integrity sha512-Os8Vt25MqqwIPJUCCcHznzs6EqarGmM0kkNPUiDnMEkX6vqjA+HugCWatinP+7+fqBqecFUsJmoL4ZypdqZZkg== dependencies: - graphql-tools "^4.0.4" + graphql-tools "^4.0.5" graphql-request@~1.8.2: version "1.8.2" @@ -3733,10 +4052,29 @@ graphql-tag@^2.9.2, graphql-tag@~2.10.1: resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.1.tgz#10aa41f1cd8fae5373eaf11f1f67260a3cad5e02" integrity sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg== -graphql-tools@^4.0.0, graphql-tools@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b" - integrity sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw== +graphql-toolkit@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/graphql-toolkit/-/graphql-toolkit-0.4.1.tgz#f5a9fa225b51168dd0d0558dc59e8fc3d379e9b1" + integrity sha512-asTRlNn0381f6/wVp8F0X2vsz8GJnv4TX+KNHg1k8Ybe6Ii5HBreJTxBHJ7GXlNDhj5MGCNi09nt8Oe7Ategrg== + dependencies: + "@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" + +graphql-tools@^4.0.0, graphql-tools@^4.0.4, graphql-tools@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.5.tgz#d2b41ee0a330bfef833e5cdae7e1f0b0d86b1754" + integrity sha512-kQCh3IZsMqquDx7zfIGWBau42xe46gmqabwYkpPlCLIjcEY1XK+auP7iGRD9/205BPyoQdY8hT96MPpgERdC9Q== dependencies: apollo-link "^1.2.3" apollo-utilities "^1.0.1" @@ -3790,6 +4128,11 @@ har-validator@~5.1.0: ajv "^6.5.5" har-schema "^2.0.0" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3836,6 +4179,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has-values@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-2.0.1.tgz#3876200ff86d8a8546a9264a952c17d5fc17579d" + integrity sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w== + dependencies: + kind-of "^6.0.2" + has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3861,20 +4211,20 @@ helmet-crossdomain@0.4.0: resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA== -helmet-csp@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.1.tgz#e8e0b5186ffd4db625cfcce523758adbfadb9dca" - integrity sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ== +helmet-csp@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.8.0.tgz#746d329e24ef39c4ebc00278a48abd3c209e0378" + integrity sha512-MlCPeM0Sm3pS9RACRihx70VeTHmkQwa7sum9EK1tfw1VZyvFU0dBWym9nHh3CRkTRNlyNm/WFCMvuh9zXkOjNw== dependencies: camelize "1.0.0" - content-security-policy-builder "2.0.0" + content-security-policy-builder "2.1.0" dasherize "2.0.0" platform "1.3.5" -helmet@~3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.19.0.tgz#02c524dd69e03b0af20dce7bc9929ff951081a29" - integrity sha512-l58Q3unSpYatlurvFzkCbTRQ8oWUmdXbOs7h+pnwQbFJRhRJDjER6UMyqHxp9iFtWPcVA05VLcUGSi0EXIv7GA== +helmet@~3.20.0: + version "3.20.0" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.20.0.tgz#8a9383bf8230a461cafe8bc763423fbde110d2fc" + integrity sha512-Ob+TqmQFZ5f7WgP8kBbAzNPsbf6p1lOj5r+327/ymw/IILWih3wcx9u/u/S8Mwv5wbBkO7Li6x5s23t3COhUKw== dependencies: depd "2.0.0" dns-prefetch-control "0.2.0" @@ -3883,7 +4233,7 @@ helmet@~3.19.0: feature-policy "0.3.0" frameguard "3.1.0" helmet-crossdomain "0.4.0" - helmet-csp "2.7.1" + helmet-csp "2.8.0" hide-powered-by "1.1.0" hpkp "2.0.0" hsts "2.2.0" @@ -3950,6 +4300,11 @@ htmlparser2@^3.10.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.0.6" +http-cache-semantics@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" + integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew== + http-errors@1.7.2, http-errors@^1.7.2, http-errors@~1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -4004,6 +4359,11 @@ ignore@^5.1.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.1.tgz#2fc6b8f518aff48fef65a7f348ed85632448e4a5" integrity sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA== +image-extensions@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/image-extensions/-/image-extensions-1.1.0.tgz#b8e6bf6039df0056e333502a00b6637a3105d894" + integrity sha1-uOa/YDnfAFbjM1AqALZjejEF2JQ= + import-fresh@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" @@ -4030,7 +4390,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.1.0: +indent-string@^3.0.0, indent-string@^3.1.0, indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -4058,10 +4418,10 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" - integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== +inquirer@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== dependencies: ansi-escapes "^3.2.0" chalk "^2.4.2" @@ -4069,12 +4429,12 @@ inquirer@^6.2.2: cli-width "^2.0.0" external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.12" mute-stream "0.0.7" run-async "^2.2.0" rxjs "^6.4.0" string-width "^2.1.0" - strip-ansi "^5.0.0" + strip-ansi "^5.1.0" through "^2.3.6" insane@2.6.1: @@ -4097,11 +4457,31 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" + integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= + +ip-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.1.0.tgz#5ad62f685a14edb421abebc2fff8db94df67b455" + integrity sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA== + ipaddr.js@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.0.tgz#eb21d69df2ed8ef72a3e6f243e216563036a0913" + integrity sha512-3OkP8XrM2Xq4/IxsJnClfMp3OaM3TAatLPLKPeWcxLBTrpe6hihwtX+XZfJTcXg/FTRi4qjy0y/C5qiyNxY24g== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -4208,6 +4588,11 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4235,6 +4620,20 @@ is-generator@^1.0.2: resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM= +is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4242,13 +4641,6 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= - dependencies: - is-extglob "^2.1.1" - is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -4257,6 +4649,13 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-invalid-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" + integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ= + dependencies: + is-glob "^2.0.0" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -4293,11 +4692,31 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-port-reachable@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-2.0.1.tgz#e0778d0733beac1ade3ba72a5fe77db50a59926b" + integrity sha512-SqU55C5gkitgOhl2ccd2v23MbkbcOFa5e4aPo8h8VGqOifh7iDwG44bQBWGW/lZulTjl9AWIKP0NiUWpa+TtWA== + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-reachable@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-reachable/-/is-reachable-3.0.0.tgz#73ac3e3ff1d77af49b1dcd8d02a4bcf2721a4cec" + integrity sha512-bviQzO/xMpY1HV/4vLdLQ2waQu8D9elkNZTKsA1UOlWytU7XnLKP8Yn6GOkoZ52VEiwCCkj7biBhKGbgjtyDRg== + dependencies: + arrify "^1.0.1" + got "^9.3.2" + is-port-reachable "^2.0.0" + p-any "^1.1.0" + p-timeout "^2.0.1" + port-numbers "^4.0.4" + prepend-http "^2.0.0" + router-ips "^1.0.0" + url-parse "^1.4.4" + is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -4310,6 +4729,20 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-relative-url@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-2.0.0.tgz#72902d7fe04b3d4792e7db15f9db84b7204c9cef" + integrity sha1-cpAtf+BLPUeS59sV+duEtyBMnO8= + dependencies: + is-absolute-url "^2.0.0" + +is-relative-url@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-3.0.0.tgz#f623c8e26baa5bd3742b3b7ec074f50f3b45b3f3" + integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA== + dependencies: + is-absolute-url "^3.0.0" + is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -4332,6 +4765,21 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-uri@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-uri/-/is-uri-1.2.0.tgz#b92ff234af68c0ed97d2eed46492d01793b7d420" + integrity sha1-uS/yNK9owO2X0u7UZJLQF5O31CA= + dependencies: + parse-uri "~1.0.0" + punycode2 "~1.0.0" + +is-valid-path@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" + integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8= + dependencies: + is-invalid-path "^0.1.0" + is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4354,6 +4802,16 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +iso-639-3@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/iso-639-3/-/iso-639-3-1.1.0.tgz#83722daf55490a707c318ae18a33ba3bab06c843" + integrity sha512-l3BAnxNpyRIZA4mEzI2md/YVrxQ3hI8hiQe7TFyQknjyOh8vCzobZuAXTFHELco0FBkYRx4FkAlIqkKrHhnzgw== + +iso-639-3@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/iso-639-3/-/iso-639-3-1.2.0.tgz#eee1f5e6ca2bbb33e3ecc910857c1c12e8b295be" + integrity sha512-jNvD2P4JHNckQH7pc0R0SQ4oPCpyEtgs0nTtjB+DZCUDdygz0cOAxlcnq5KgNjjsqMHbR4Sbgwz2+DflzAZvlQ== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -4366,6 +4824,11 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isostring@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isostring/-/isostring-0.0.1.tgz#ddb608efbfc89cda86db9cb16be090a788134c7f" + integrity sha1-3bYI77/InNqG25yxa+CQp4gTTH8= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4852,6 +5315,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -4964,6 +5432,13 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5146,16 +5621,21 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + +lodash@4.17.15, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.11, lodash@~4.17.14, lodash@~4.17.15: + version "4.17.15" + 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= -lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.5, lodash@~4.17.14: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== - long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -5173,11 +5653,16 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= -lowercase-keys@^1.0.0: +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -5207,7 +5692,7 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.1: +map-age-cleaner@^0.1.1, map-age-cleaner@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== @@ -5240,6 +5725,20 @@ mem@^4.0.0: mimic-fn "^1.0.0" p-is-promise "^2.0.0" +mem@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-5.1.1.tgz#7059b67bf9ac2c924c9f1cff7155a064394adfb3" + integrity sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^2.1.0" + p-is-promise "^2.1.0" + +memoize-one@~5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.5.tgz#8cd3809555723a07684afafcd6f756072ac75d7e" + integrity sha512-ey6EpYv0tEaIbM/nTDOpHciXUvd+ackQrJgEzBwemhZZIWZjcyodqEcrmqDy2BKRTM3a65kKBV4WtLXJDt26SQ== + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -5250,14 +5749,13 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-graphql-schemas@^1.5.8: - version "1.5.8" - resolved "https://registry.yarnpkg.com/merge-graphql-schemas/-/merge-graphql-schemas-1.5.8.tgz#89457b60312aabead44d5b2b7625643f8ab9e369" - integrity sha512-0TGOKebltvmWR9h9dPYS2vAqMPThXwJ6gVz7O5MtpBp2sunAg/M25iMSNI7YhU6PDJVtGtldTfqV9a+55YhB+A== +merge-graphql-schemas@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/merge-graphql-schemas/-/merge-graphql-schemas-1.6.1.tgz#4c4744bd3f2395a876d0e6885e60c90a9a5a4568" + integrity sha512-XEgol3ThgEPo65Cj+cx8UhOFE4IuTSF1Mh0iK8AVOEM/hKrhLfNECmtg9U6HoHfa9nINLxeGZIVvq9rjoSx3cQ== dependencies: - deepmerge "^2.2.1" - glob "^7.1.3" - is-glob "^4.0.0" + graphql-toolkit "0.4.1" + tslib "1.10.0" merge-stream@^1.0.1: version "1.0.1" @@ -5266,6 +5764,133 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" +metascraper-audio@^5.5.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.6.3.tgz#f84f4e19960c698df2e14cd98212b004bac66bb9" + integrity sha512-XxO9iHVQzGa+Z7wzmnHl3dmFdBdmYfO/ozeMWH0fp/4YbU1GU3l+OlYzPaVhCEfArqzzuwf1iq8uGKdU/DOZnw== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-author@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-author/-/metascraper-author-5.6.3.tgz#8ecc0d4257be1438e9f8242b4f0c1a5137f5bb13" + integrity sha512-BNnYWjaEFOS5JX5s6KFo6MIv5M2hgnaWV47LM/EOvfHpe0a6DovVtLkGrVj6SpbPio3tzTjakouBwjQpuo1Dlg== + dependencies: + "@metascraper/helpers" "^5.6.3" + lodash "~4.17.15" + +metascraper-clearbit-logo@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/metascraper-clearbit-logo/-/metascraper-clearbit-logo-5.3.0.tgz#e4596dbaf35503635d585a705f4119c7eddc6773" + integrity sha512-Vg9m8cj2yEIUDrRjvCORvf8vgq2HLsWLVqNnIactNUPJ+Lcly5Xcxh5TcmHYp5Qx5DtNUCoKlakomYHn8mOjqg== + dependencies: + got "~9.6.0" + +metascraper-date@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-5.6.3.tgz#516fad38391a45137a58430f639a57037eee96f2" + integrity sha512-sdbY0IOu1BcZHocwVIJ8/CPkguVR8oDho13apIGNsZjyItIdMMLrziDqzOSGcJI++AXGmS3MNHW8M+bdYHVj1g== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-description@^5.5.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-5.6.3.tgz#1abfde848e8002c606e5741b9523b61ca592bb34" + integrity sha512-ATfsUS6t912hSYKEOyVUX+GrwRMcUltOcvEXtD/5ER26z3h1ab83w4UvQ7imo9F6yueQX2dB6QfqTkWF92X6Vw== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-image@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-5.6.3.tgz#1d2fa627d90d5545f45bdda6e874af421ee1c622" + integrity sha512-pDq6fU6X59642KNmE1WmJUUgJxepU4TDj1u2HDR0XCdqeiEGpskqmO/rFJSdgRFJNFUo7RJ1Er8cT4yVKCgqtg== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-lang-detector@^4.8.5: + version "4.10.2" + resolved "https://registry.yarnpkg.com/metascraper-lang-detector/-/metascraper-lang-detector-4.10.2.tgz#45744bc331125c098e8b27716d76740161b121d2" + integrity sha512-Lz1d5v/i1j08gQYz7sCdoxjOx94ArLV4UucUhGZeQpR4E6dK47V6aqfYwODRe2XAqhaU+3oLnbAipoHkOeZXiw== + dependencies: + "@metascraper/helpers" "^4.10.2" + franc "~4.0.0" + iso-639-3 "~1.1.0" + +metascraper-lang@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-lang/-/metascraper-lang-5.6.3.tgz#d2d7a20f4145b0785391fffec629e154737fc942" + integrity sha512-c13zxmREcB/hDXs7MIxio7RNfVsSzGfixk6FrfQQh3fypmiR84SpeZmQR+G/e2X/BDNwpIydJM62R7BayY709Q== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-logo@^5.5.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-5.6.3.tgz#bb18449e872815ba6199e2aa78078259c2677b98" + integrity sha512-xeqjSuTAiudXiUczj7F0+VvXdgFvL5rqyW3D+BPXrNHOUqDyyYNlHTEhambj3HbMP6EjQyoMDEvqCF5qUezmXg== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-publisher@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-5.6.3.tgz#3729cd7dac117c94f92020ff3a8397a1b965a27e" + integrity sha512-1Z+bwrTn6j4Tf85DatYL0zDmqBfoJCfYa0nNlZ9HWfjM+QWDxBeIu1v/85N3AYGYPwk5G38IdvEYBb4MpMEQvQ== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-soundcloud@^5.5.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.6.3.tgz#c2bb5904857d079a44c0d1e1511dfaf4d0f19945" + integrity sha512-v44pktX4I7pnUjThGs11YZLNpuQbuB6iY2RcYnODjasgor8t7ZHPwrJqy01b0mkTmHoRbQ84Vheq1SkAD0Vz8g== + dependencies: + "@metascraper/helpers" "^5.6.3" + memoize-one "~5.0.5" + tldts "~5.3.1" + +metascraper-title@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-5.6.3.tgz#219bf9a4da28d48ea180497a1d6d2b4fa4871cc2" + integrity sha512-sZ+SWojZhECisyw+el5fc1q2ENEAeQDzy/HabSkeA/saB3xqf3XnfqtCGIuElyxKiXS65KWzQOX+u3KseZdiAg== + dependencies: + "@metascraper/helpers" "^5.6.3" + lodash "~4.17.15" + +metascraper-url@^5.5.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-5.6.3.tgz#7e756f79ed2a5e1591682e29b665551855ddda5d" + integrity sha512-hFHff2AsWuW552CkktWR9ViVp2poZufP1YUAVJWRe7UaHC67vx2mE5hjNZkVBSi1rOoPIbNN+jPVvcKwT6tkAw== + dependencies: + "@metascraper/helpers" "^5.6.3" + +metascraper-video@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-5.6.3.tgz#4567095b52749c7e8083af6d5bd32a5ff182fcf8" + integrity sha512-ejkebLHkktvvDJ1EfPzA4X4LWlkzeJZ69KzslRC94vQJuE36PA6k+EdoorZqryOzhHPV9TaNP5j+ZXU26S731g== + dependencies: + "@metascraper/helpers" "^5.6.3" + lodash "~4.17.15" + +metascraper-youtube@^4.8.5: + version "4.10.2" + resolved "https://registry.yarnpkg.com/metascraper-youtube/-/metascraper-youtube-4.10.2.tgz#d8bd437f90f2bf40c30613c0f4fb1f56c094119a" + integrity sha512-cmW0JOCVJUsspaBS3WFM8YvMKEG0sPtB21KjPTzRN9yhYyXYy63Pw21G/KxTEdth7GWxfnuttRtiD4BnfntApg== + dependencies: + "@metascraper/helpers" "^4.10.2" + get-video-id "~3.1.1" + is-reachable "~3.0.0" + p-locate "~4.0.0" + +metascraper@^4.10.3: + version "4.10.3" + resolved "https://registry.yarnpkg.com/metascraper/-/metascraper-4.10.3.tgz#8a97ed2e914e81d1dbc1f17a5b1e64f1b804493f" + integrity sha512-wNQm5A/PIxWcahaMwI+b3rOmmXRDNmjyF6Q15dHYXEqYoGl3dFaaT4lnTTm8yntvE+fOj8+o51ON2FBdstxbsA== + dependencies: + "@metascraper/helpers" "^4.10.2" + cheerio "~1.0.0-rc.2" + cheerio-advanced-selectors "~2.0.1" + lodash "~4.17.11" + p-reduce "~2.0.0" + whoops "~4.0.2" + methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -5307,7 +5932,7 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.37.0" -mime-types@~2.1.24: +mime-types@~2.1.22, mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== @@ -5324,6 +5949,21 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "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" @@ -5381,6 +6021,11 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +moment@2.21.0: + version "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: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" @@ -5415,6 +6060,11 @@ mz@^2.4.0: object-assign "^4.0.1" thenify-all "^1.0.0" +n-gram@^1.0.0: + version "1.1.1" + 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" @@ -5534,7 +6184,7 @@ node-fetch@2.1.2: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= -node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0: +node-fetch@2.6.0, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -5645,6 +6295,16 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^4.1.0, normalize-url@~4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" + integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ== + +normalize-url@~4.2.0: + version "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== + npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" @@ -5783,6 +6443,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -5867,6 +6537,18 @@ output-file-sync@^2.0.0: is-plain-obj "^1.1.0" mkdirp "^0.5.1" +p-any@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-any/-/p-any-1.1.0.tgz#1d03835c7eed1e34b8e539c47b7b60d0d015d4e1" + integrity sha512-Ef0tVa4CZ5pTAmKn+Cg3w8ABBXh+hHO1aV8281dKOoUHfX+3tjG2EaFcC+aZyagg9b4EYGsHEjz21DnEE8Og2g== + dependencies: + p-some "^2.0.0" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -5889,6 +6571,11 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== +p-is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -5917,11 +6604,37 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.0.0.tgz#fff5d4a5dc4f89babe7d266f6efc685630038651" + integrity sha512-IvOiDT1hbCdrsFKKXs8AGjxouEfn9VVdz/edtT08IDr+RIn2U/o3Xx+Agx455+CkSRdomMs3EN5BgR2Q0LZX0g== + dependencies: + p-limit "^2.0.0" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-reduce@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.0.0.tgz#365a26916213650711124881a6bdc4e32c2bfe36" + integrity sha512-VcNNEqiYIkRCGeUHELY5dUrnQHCRwL6eIH/L9oSbl/PsvyHQXD1ws/MFwuEb+6dgH/URCfROVUqOYL37eHi2kQ== + +p-some@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-some/-/p-some-2.0.1.tgz#65d87c8b154edbcf5221d167778b6d2e150f6f06" + integrity sha1-Zdh8ixVO289SIdFnd4ttLhUPbwY= + dependencies: + aggregate-error "^1.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -5976,6 +6689,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse-uri@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-uri/-/parse-uri-1.0.0.tgz#2872dcc22f1a797acde1583d8a0ac29552ddac20" + integrity sha1-KHLcwi8aeXrN4Vg9igrClVLdrCA= + parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -6113,6 +6831,11 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +port-numbers@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/port-numbers/-/port-numbers-4.0.13.tgz#563b6c6947a92d6df7ad909b96a54de49703091b" + integrity sha512-Nu/yQsPdBZ+dsJFBs8zUZk4ZEY/yL1RN1LqnaRYWtlzALPLj7VLKh/MFUFQuzPOGZpsj9Mh5wL1gNJzWQGPKyQ== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -6137,6 +6860,11 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -6250,6 +6978,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode2@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/punycode2/-/punycode2-1.0.0.tgz#e2b4b9a9a8ff157d0b84438e203181ee7892dfd8" + integrity sha1-4rS5qaj/FX0LhEOOIDGB7niS39g= + punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -6270,6 +7003,11 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -6567,6 +7305,11 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -6601,6 +7344,13 @@ resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.5.0 dependencies: path-parse "^1.0.6" +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6631,6 +7381,11 @@ rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: dependencies: glob "^7.1.3" +router-ips@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/router-ips/-/router-ips-1.0.0.tgz#44e00858ebebc0133d58e40b2cd8a1fbb04203f5" + integrity sha1-ROAIWOvrwBM9WOQLLNih+7BCA/U= + rsvp@^3.3.3: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" @@ -6733,15 +7488,20 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0, semver@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.0.tgz#e95dc415d45ecf03f2f9f83b264a6b11f49c0cca" - integrity sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ== +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" + integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== send@0.17.1: version "0.17.1" @@ -6873,6 +7633,11 @@ slug@~1.1.0: dependencies: unicode ">= 0.3.1" +smartquotes@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/smartquotes/-/smartquotes-2.3.1.tgz#01ebb595d6c7a9e24d90e8cb95c17d0e1af49407" + integrity sha1-Aeu1ldbHqeJNkOjLlcF9Dhr0lAc= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7141,12 +7906,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - ansi-regex "^4.0.0" + ansi-regex "^4.1.0" strip-bom@^3.0.0: version "3.0.0" @@ -7158,15 +7923,20 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -subscriptions-transport-ws@^0.9.11: - version "0.9.15" - resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" - integrity sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ== +subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.16: + version "0.9.16" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec" + integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw== dependencies: backo2 "^1.0.2" eventemitter3 "^3.1.0" @@ -7198,6 +7968,13 @@ supertest@~4.0.2: methods "^1.1.2" superagent "^3.8.3" +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.2.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -7319,6 +8096,38 @@ title-case@^2.1.1: no-case "^2.2.0" upper-case "^1.0.3" +title@~3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/title/-/title-3.4.1.tgz#166177c48f52ae9b73afe9901a183f0b6c97b2e6" + integrity sha512-CoIakPr4Gi91bm4Xp6xTuZ3EENxPcKgOJzHzrhSdUatGtFMeVJa2qxI4WNhJHgz0Jak5Ck6jY2UNFM71/yBIsw== + dependencies: + arg "1.0.0" + chalk "2.3.0" + clipboardy "1.2.2" + titleize "1.0.0" + +titleize@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-1.0.0.tgz#7d350722061830ba6617631e0cfd3ea08398d95a" + integrity sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo= + +tlds@^1.187.0, tlds@^1.203.0: + version "1.203.1" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.203.1.tgz#4dc9b02f53de3315bc98b80665e13de3edfc1dfc" + integrity sha512-7MUlYyGJ6rSitEZ3r1Q1QNV8uSIzapS8SmmhSusBuIc7uIxPPwsKllEP0GRp1NS6Ik6F+fRZvnjDWm3ecv2hDw== + +tldts-core@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.3.1.tgz#040450d7148107880ba9020e77b3b28a6cc5d9db" + integrity sha512-z8C2wcT2XvSgk5p0HWapXPkvvKG7E8Jei71N+9Mpp9Eoh2/wjtQPhDeENSuzHNmjTdRz6KFIcM7aWTB+7g0OyA== + +tldts@~5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-5.3.1.tgz#39b2164b71777e69b3d05e5db5a30b5e1a5df6b7" + integrity sha512-JHG3Gonv+17qi1gyskY0KwdpjVkQfQK4pMHm52vpdKXV3y9AzEhhinDT/GfLF8w7kRLpIHhcViZ0rEsFla81lA== + dependencies: + tldts-core "^5.3.1" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7343,6 +8152,11 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -7408,11 +8222,25 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +trigram-utils@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/trigram-utils/-/trigram-utils-1.0.2.tgz#47574b7fade636e0fc06515788cbbd61786d2292" + integrity sha512-4/DmYtegpRAyTHPpL+asfLHfTdrTZ5N0FNaixyb4L6Bx3mi+g1wgsFJNixZ9Ycsjs3+FrK4zJoWW86cdMaL8RA== + dependencies: + collapse-white-space "^1.0.3" + n-gram "^1.0.0" + trim "0.0.1" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + trunc-html@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/trunc-html/-/trunc-html-1.1.2.tgz#1e97d51f67d470b67662b1a670e6d0ea7a8edafe" @@ -7427,6 +8255,16 @@ trunc-text@1.0.1: resolved "https://registry.yarnpkg.com/trunc-text/-/trunc-text-1.0.1.tgz#58f876d8ac59b224b79834bb478b8656e69622b5" integrity sha1-WPh22KxZsiS3mDS7R4uGVuaWIrU= +truncate@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/truncate/-/truncate-2.0.1.tgz#dd1a6d15630515663d8475f6f24edf2f800ebb1b" + integrity sha1-3RptFWMFFWY9hHX28k7fL4AOuxs= + +truncate@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/truncate/-/truncate-2.1.0.tgz#391183563a25cffbd4d613a1d00ae5844c9e55d3" + integrity sha512-em3E3SUDONOjTBcZ36DTm3RvDded3IRU9rX32oHwwXNt3rJD5MVaFlJTQvs8tJoHRoeYP36OuQ1eL/Q7bNEWIQ== + ts-invariant@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.2.tgz#8685131b8083e67c66d602540e78763408be9113" @@ -7434,10 +8272,10 @@ ts-invariant@^0.4.0: dependencies: tslib "^1.9.3" -tslib@^1.9.0, tslib@^1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@1.10.0, tslib@^1.9.0, tslib@^1.9.3: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tunnel-agent@^0.6.0: version "0.6.0" @@ -7594,6 +8432,37 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.4.4: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-regex@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-4.1.1.tgz#a5617b22e15e26dac57ce74c3f52088bcdfec995" + integrity sha512-ViSDgDPNKkrQHI81GLCjdDN+Rsk3tAW/uLXlBOJxtcHzWZjta58Z0APXhfXzS89YszsheMnEvXeDXsWUB53wwA== + dependencies: + ip-regex "^1.0.1" + tlds "^1.187.0" + +url-regex@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-5.0.0.tgz#8f5456ab83d898d18b2f91753a702649b873273a" + integrity sha512-O08GjTiAFNsSlrUWfqF1jH0H1W3m35ZyadHrGv5krdnmPPoxP27oDTqux/579PtaroiSGm5yma6KT1mHFH6Y/g== + dependencies: + ip-regex "^4.1.0" + tlds "^1.203.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -7634,6 +8503,11 @@ uuid@^3.1.0, uuid@^3.3.2, uuid@~3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + v8flags@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.1.tgz#42259a1461c08397e37fe1d4f1cfb59cad85a053" @@ -7641,6 +8515,11 @@ v8flags@^3.1.1: dependencies: homedir-polyfill "^1.0.1" +valid-url@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -7663,6 +8542,11 @@ verror@1.10.0, verror@^1.9.0: core-util-is "1.0.2" extsprintf "^1.2.0" +video-extensions@~1.1.0: + version "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" @@ -7774,6 +8658,11 @@ whatwg-fetch@2.0.4: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== +whatwg-fetch@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -7809,6 +8698,14 @@ which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" +whoops@~4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/whoops/-/whoops-4.0.2.tgz#60e1281d47a1600f5f5013059afaad369d83e9d4" + integrity sha512-b1ofth7xMOAkukgzMhAPKBrgieGJAgKVMyu54DXAOVLmkhpQEfNKe4wS0R7LbdxIsm6FD2CFUjBOdN7Sj+zLSg== + dependencies: + clean-stack "~2.0.0" + mimic-fn "~2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" diff --git a/cypress/integration/common/search.js b/cypress/integration/common/search.js index 1c1981581..5a3819a9d 100644 --- a/cypress/integration/common/search.js +++ b/cypress/integration/common/search.js @@ -1,73 +1,70 @@ -import { When, Then } from 'cypress-cucumber-preprocessor/steps' -When('I search for {string}', value => { - cy.get('#nav-search') +import { When, Then } from "cypress-cucumber-preprocessor/steps"; +When("I search for {string}", value => { + cy.get("#nav-search") .focus() - .type(value) -}) + .type(value); +}); -Then('I should have one post in the select dropdown', () => { - cy.get('.ds-select-dropdown').should($li => { - expect($li).to.have.length(1) - }) -}) +Then("I should have one post in the select dropdown", () => { + cy.get(".input .ds-select-dropdown").should($li => { + expect($li).to.have.length(1); + }); +}); -Then('I should see the following posts in the select dropdown:', table => { +Then("I should see the following posts in the select dropdown:", table => { table.hashes().forEach(({ title }) => { - cy.get('.ds-select-dropdown').should('contain', title) - }) -}) + cy.get(".ds-select-dropdown").should("contain", title); + }); +}); -When('I type {string} and press Enter', value => { - cy.get('#nav-search') +When("I type {string} and press Enter", value => { + cy.get("#nav-search") .focus() .type(value) - .type('{enter}', { force: true }) -}) + .type("{enter}", { force: true }); +}); -When('I type {string} and press escape', value => { - cy.get('#nav-search') +When("I type {string} and press escape", value => { + cy.get("#nav-search") .focus() .type(value) - .type('{esc}') -}) + .type("{esc}"); +}); -Then('the search field should clear', () => { - cy.get('#nav-search').should('have.text', '') -}) +Then("the search field should clear", () => { + cy.get("#nav-search").should("have.text", ""); +}); -When('I select an entry', () => { - cy.get('.ds-select-dropdown ul li') +When("I select an entry", () => { + cy.get(".input .ds-select-dropdown ul li") .first() - .trigger('click') -}) + .trigger("click"); +}); Then("I should be on the post's page", () => { - cy.location('pathname').should( - 'contain', - '/post/' - ) - cy.location('pathname').should( - 'eq', - '/post/p1/101-essays-that-will-change-the-way-you-think' - ) -}) + cy.location("pathname").should("contain", "/post/"); + cy.location("pathname").should( + "eq", + "/post/p1/101-essays-that-will-change-the-way-you-think" + ); +}); Then( - 'I should see posts with the searched-for term in the select dropdown', + "I should see posts with the searched-for term in the select dropdown", () => { - cy.get('.ds-select-dropdown').should( - 'contain', - '101 Essays that will change the way you think' - ) + cy.get(".ds-select-dropdown").should( + "contain", + "101 Essays that will change the way you think" + ); } -) +); Then( - 'I should not see posts without the searched-for term in the select dropdown', + "I should not see posts without the searched-for term in the select dropdown", () => { - cy.get('.ds-select-dropdown').should( - 'not.contain', - 'No searched for content' - ) + cy.get(".ds-select-dropdown").should( + "not.contain", + "No searched for content" + ); } -) +); diff --git a/cypress/integration/common/settings.js b/cypress/integration/common/settings.js index 664ffcff8..b32924f6a 100644 --- a/cypress/integration/common/settings.js +++ b/cypress/integration/common/settings.js @@ -79,7 +79,7 @@ Then('I should be on the {string} page', page => { }) When('I add a social media link', () => { - cy.get("input[name='social-media']") + cy.get('input#addSocialMedia') .type('https://freeradical.zone/peter-pan') .get('button') .contains('Add link') @@ -98,7 +98,7 @@ Then('the new social media link shows up on the page', () => { Given('I have added a social media link', () => { cy.openPage('/settings/my-social-media') - .get("input[name='social-media']") + .get('input#addSocialMedia') .type('https://freeradical.zone/peter-pan') .get('button') .contains('Add link') @@ -121,3 +121,34 @@ Then('it gets deleted successfully', () => { cy.get('.iziToast-message') .should('contain', 'Deleted social media') }) + +When('I start editing a social media link', () => { + cy.get("a[name='edit']") + .click() +}) + +Then('I can cancel editing', () => { + cy.get('button#cancel') + .click() + .get('input#editSocialMedia') + .should('have.length', 0) +}) + +When('I edit and save the link', () => { + cy.get('input#editSocialMedia') + .clear() + .type('https://freeradical.zone/tinkerbell') + .get('button') + .contains('Save') + .click() +}) + +Then('the new url is displayed', () => { + cy.get("a[href='https://freeradical.zone/tinkerbell']") + .should('have.length', 1) +}) + +Then('the old url is not displayed', () => { + cy.get("a[href='https://freeradical.zone/peter-pan']") + .should('have.length', 0) +}) diff --git a/cypress/integration/user_profile/SocialMedia.feature b/cypress/integration/user_profile/SocialMedia.feature index d21167c6b..e6090a0a4 100644 --- a/cypress/integration/user_profile/SocialMedia.feature +++ b/cypress/integration/user_profile/SocialMedia.feature @@ -15,7 +15,7 @@ Feature: List Social Media Accounts Then it gets saved successfully And the new social media link shows up on the page - Scenario: Other user's viewing my Social Media + Scenario: Other users viewing my Social Media Given I have added a social media link When people visit my profile page Then they should be able to see my social media links @@ -27,3 +27,16 @@ Feature: List Social Media Accounts Given I have added a social media link When I delete a social media link Then it gets deleted successfully + + Scenario: Editing Social Media + Given I am on the "settings" page + And I click on the "Social media" link + Then I should be on the "/settings/my-social-media" page + Given I have added a social media link + When I start editing a social media link + Then I can cancel editing + When I start editing a social media link + And I edit and save the link + Then it gets saved successfully + And the new url is displayed + But the old url is not displayed diff --git a/deployment/human-connection/maintenance/Dockerfile b/deployment/human-connection/maintenance/Dockerfile new file mode 100644 index 000000000..4681356ab --- /dev/null +++ b/deployment/human-connection/maintenance/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:alpine +COPY ./onourjourney.svg /usr/share/nginx/html/ +COPY ./maintenance.html /usr/share/nginx/html/index.html diff --git a/deployment/human-connection/maintenance/README.md b/deployment/human-connection/maintenance/README.md new file mode 100644 index 000000000..02bcb44e2 --- /dev/null +++ b/deployment/human-connection/maintenance/README.md @@ -0,0 +1,43 @@ +# Maintenance mode + +> Despite our best efforts, systems sometimes require downtime for a variety of reasons. + +Quote from [here](https://www.nrmitchi.com/2017/11/easy-maintenance-mode-in-kubernetes/) + +We use our maintenance mode for manual database backup and restore. Also we +bring the database into maintenance mode for manual database migrations. + +## Deploy the service + +We prepared sample configuration, so you can simply run: +```sh +# in folder deployment/ +kubectl apply -f human-connection/maintenance +``` + +This will fire up a maintenance service. + +## Bring application into maintenance mode + +Now if you want to have a controlled downtime and you want to bring your +application into maintenance mode, you can edit your global ingress server. + +E.g. in file `deployment/digital-ocean/https/ingress.yaml` change the following: +```yaml +... + + - host: nitro-staging.human-connection.org + http: + paths: + - path: / + backend: + # serviceName: nitro-web + serviceName: maintenance + # servicePort: 3000 + servicePort: 80 +``` + +Then run ` kubectl apply -f deployment/digital-ocean/https/ingress.yaml`. If you +want to deactivate the maintenance server, just undo the edit and apply the +configuration again. + diff --git a/deployment/human-connection/maintenance/deployment-maintenance.yaml b/deployment/human-connection/maintenance/deployment-maintenance.yaml new file mode 100644 index 000000000..fbbeec639 --- /dev/null +++ b/deployment/human-connection/maintenance/deployment-maintenance.yaml @@ -0,0 +1,27 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: maintenance + namespace: human-connection +spec: + selector: + matchLabels: + human-connection.org/selector: deployment-human-connection-maintenance + template: + metadata: + labels: + human-connection.org/commit: COMMIT + human-connection.org/selector: deployment-human-connection-maintenance + name: maintenance + spec: + containers: + - name: web + env: + - name: HOST + value: 0.0.0.0 + image: humanconnection/maintenance:latest + ports: + - containerPort: 80 + imagePullPolicy: Always + restartPolicy: Always + terminationGracePeriodSeconds: 30 diff --git a/deployment/human-connection/maintenance/maintenance.html b/deployment/human-connection/maintenance/maintenance.html new file mode 100644 index 000000000..906286342 --- /dev/null +++ b/deployment/human-connection/maintenance/maintenance.html @@ -0,0 +1,61 @@ + + + + +
+

+ At the moment we are doing some scheduled maintenance, please try again + later. +

+ Maintenance mode image +

+ Any Questions or concerns, send an email to
+ +

+
+ diff --git a/deployment/human-connection/maintenance/onourjourney.svg b/deployment/human-connection/maintenance/onourjourney.svg new file mode 100644 index 000000000..0950b7532 --- /dev/null +++ b/deployment/human-connection/maintenance/onourjourney.svg @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deployment/human-connection/maintenance/service-maintenance.yaml b/deployment/human-connection/maintenance/service-maintenance.yaml new file mode 100644 index 000000000..43aab9331 --- /dev/null +++ b/deployment/human-connection/maintenance/service-maintenance.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: maintenance + namespace: human-connection + labels: + human-connection.org/selector: deployment-human-connection-maintenance +spec: + ports: + - name: web + port: 80 + targetPort: 80 + selector: + human-connection.org/selector: deployment-human-connection-maintenance diff --git a/deployment/legacy-migration/maintenance-worker/.gitignore b/deployment/legacy-migration/maintenance-worker/.gitignore index 59ba63a8b..485bc00e6 100644 --- a/deployment/legacy-migration/maintenance-worker/.gitignore +++ b/deployment/legacy-migration/maintenance-worker/.gitignore @@ -1 +1,2 @@ .ssh/ +ssh/ \ No newline at end of file diff --git a/deployment/volumes/neo4j-data.yaml b/deployment/volumes/neo4j-data.yaml index f077be933..1f453a684 100644 --- a/deployment/volumes/neo4j-data.yaml +++ b/deployment/volumes/neo4j-data.yaml @@ -9,4 +9,4 @@ - ReadWriteOnce resources: requests: - storage: 1Gi + storage: 5Gi diff --git a/deployment/volumes/neo4j-offline-backup/README.md b/deployment/volumes/neo4j-offline-backup/README.md index 3638ebc89..5d773714b 100644 --- a/deployment/volumes/neo4j-offline-backup/README.md +++ b/deployment/volumes/neo4j-offline-backup/README.md @@ -23,11 +23,7 @@ So, all we have to do is edit the kubernetes deployment of our Neo4J database and set a custom `command` every time we have to carry out tasks like backup, restore, seed etc. -{% hint style="info" %} -TODO: implement maintenance mode -{% endhint %} - -First bring the application into maintenance mode to ensure there are no +First bring the application into [maintenance mode](https://github.com/Human-Connection/Human-Connection/blob/master/deployment/human-connection/maintenance/README.md) to ensure there are no database connections left and nobody can access the application. Run the following: diff --git a/docker-compose.yml b/docker-compose.yml index 93e80d9c1..bae571b86 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,6 +42,14 @@ services: context: neo4j networks: - hc-network + maintenance: + image: humanconnection/maintenance:latest + build: + context: deployment/human-connection/maintenance + networks: + - hc-network + ports: + - 80:80 networks: hc-network: diff --git a/package.json b/package.json index 87ec4e9ef..c7a78bc38 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,14 @@ "codecov": "^3.5.0", "cross-env": "^5.2.0", "cypress": "^3.4.0", - "cypress-cucumber-preprocessor": "^1.12.0", + "cypress-cucumber-preprocessor": "^1.13.0", "cypress-file-upload": "^3.3.2", "cypress-plugin-retries": "^1.2.2", "dotenv": "^8.0.0", "faker": "Marak/faker.js#master", "graphql-request": "^1.8.2", "neo4j-driver": "^1.7.5", - "neode": "^0.2.16", + "neode": "^0.2.18", "npm-run-all": "^4.1.5", "slug": "^1.1.0" } diff --git a/scripts/docker_push.sh b/scripts/docker_push.sh index c70367005..fe644c52a 100755 --- a/scripts/docker_push.sh +++ b/scripts/docker_push.sh @@ -4,7 +4,9 @@ docker build --build-arg BUILD_COMMIT=$TRAVIS_COMMIT --target production -t huma docker build --build-arg BUILD_COMMIT=$TRAVIS_COMMIT --target production -t humanconnection/nitro-web:latest $TRAVIS_BUILD_DIR/webapp docker build --build-arg BUILD_COMMIT=$TRAVIS_COMMIT -t humanconnection/neo4j:latest $TRAVIS_BUILD_DIR/neo4j docker build -t humanconnection/maintenance-worker:latest $TRAVIS_BUILD_DIR/deployment/legacy-migration/maintenance-worker +docker build -t humanconnection/maintenance:latest $TRAVIS_BUILD_DIR/deployment/human-connection/maintenance docker push humanconnection/nitro-backend:latest docker push humanconnection/nitro-web:latest docker push humanconnection/neo4j:latest -docker push humanconnection/maintenance-worker:latest \ No newline at end of file +docker push humanconnection/maintenance-worker:latest +docker push humanconnection/maintenance:latest diff --git a/webapp/Dockerfile b/webapp/Dockerfile index d3a17a3aa..cad4c171d 100644 --- a/webapp/Dockerfile +++ b/webapp/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.6-alpine as base +FROM node:12.7-alpine as base LABEL Description="Web Frontend of the Social Network Human-Connection.org" Vendor="Human-Connection gGmbH" Version="0.0.1" Maintainer="Human-Connection gGmbH (developer@human-connection.org)" EXPOSE 3000 diff --git a/webapp/components/ContributionForm/ContributionForm.spec.js b/webapp/components/ContributionForm/ContributionForm.spec.js index 3d136ff4b..3f9384d27 100644 --- a/webapp/components/ContributionForm/ContributionForm.spec.js +++ b/webapp/components/ContributionForm/ContributionForm.spec.js @@ -14,6 +14,8 @@ localVue.use(Styleguide) localVue.use(Filters) config.stubs['no-ssr'] = '' +config.stubs['nuxt-link'] = '' +config.stubs['v-popover'] = '' describe('ContributionForm.vue', () => { let wrapper @@ -24,9 +26,22 @@ describe('ContributionForm.vue', () => { let mocks let propsData const postTitle = 'this is a title for a post' + const postTitleTooShort = 'xx' + let postTitleTooLong = '' + for (let i = 0; i < 65; i++) { + postTitleTooLong += 'x' + } const postContent = 'this is a post' + const postContentTooShort = 'xx' + let postContentTooLong = '' + for (let i = 0; i < 2001; i++) { + postContentTooLong += 'x' + } const imageUpload = { - file: { filename: 'avataar.svg', previewElement: '' }, + file: { + filename: 'avataar.svg', + previewElement: '', + }, url: 'someUrlToImage', } const image = '/uploads/1562010976466-avataaars' @@ -34,22 +49,17 @@ describe('ContributionForm.vue', () => { mocks = { $t: jest.fn(), $apollo: { - mutate: jest - .fn() - .mockResolvedValueOnce({ - data: { - CreatePost: { - title: postTitle, - slug: 'this-is-a-title-for-a-post', - content: postContent, - contentExcerpt: postContent, - language: 'en', - }, + mutate: jest.fn().mockResolvedValueOnce({ + data: { + CreatePost: { + title: postTitle, + slug: 'this-is-a-title-for-a-post', + content: postContent, + contentExcerpt: postContent, + language: 'en', }, - }) - .mockRejectedValue({ - message: 'Not Authorised!', - }), + }, + }), }, $toast: { error: jest.fn(), @@ -71,6 +81,13 @@ describe('ContributionForm.vue', () => { 'editor/placeholder': () => { return 'some cool placeholder' }, + 'auth/user': () => { + return { + id: '4711', + name: 'You yourself', + slug: 'you-yourself', + } + }, } const store = new Vuex.Store({ getters, @@ -106,16 +123,53 @@ describe('ContributionForm.vue', () => { }) describe('invalid form submission', () => { - it('title required for form submission', async () => { - postTitleInput = wrapper.find('.ds-input') - postTitleInput.setValue(postTitle) - await wrapper.find('form').trigger('submit') + it('title and content should not be empty ', async () => { + wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) - it('content required for form submission', async () => { - wrapper.vm.updateEditorContent(postContent) - await wrapper.find('form').trigger('submit') + it('title should not be empty', async () => { + await wrapper.vm.updateEditorContent(postContent) + wrapper.find('.submit-button-for-test').trigger('click') + expect(mocks.$apollo.mutate).not.toHaveBeenCalled() + }) + + it('title should not be too long', async () => { + postTitleInput = wrapper.find('.ds-input') + postTitleInput.setValue(postTitleTooLong) + await wrapper.vm.updateEditorContent(postContent) + wrapper.find('.submit-button-for-test').trigger('click') + expect(mocks.$apollo.mutate).not.toHaveBeenCalled() + }) + + it('title should not be too short', async () => { + postTitleInput = wrapper.find('.ds-input') + postTitleInput.setValue(postTitleTooShort) + await wrapper.vm.updateEditorContent(postContent) + wrapper.find('.submit-button-for-test').trigger('click') + expect(mocks.$apollo.mutate).not.toHaveBeenCalled() + }) + + it('content should not be empty', async () => { + postTitleInput = wrapper.find('.ds-input') + postTitleInput.setValue(postTitle) + await wrapper.find('.submit-button-for-test').trigger('click') + expect(mocks.$apollo.mutate).not.toHaveBeenCalled() + }) + + it('content should not be too short', async () => { + postTitleInput = wrapper.find('.ds-input') + postTitleInput.setValue(postTitle) + await wrapper.vm.updateEditorContent(postContentTooShort) + wrapper.find('.submit-button-for-test').trigger('click') + expect(mocks.$apollo.mutate).not.toHaveBeenCalled() + }) + + it('content should not be too long', async () => { + postTitleInput = wrapper.find('.ds-input') + postTitleInput.setValue(postTitle) + await wrapper.vm.updateEditorContent(postContentTooLong) + wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).not.toHaveBeenCalled() }) }) @@ -136,15 +190,16 @@ describe('ContributionForm.vue', () => { } postTitleInput = wrapper.find('.ds-input') postTitleInput.setValue(postTitle) - wrapper.vm.updateEditorContent(postContent) - await wrapper.find('form').trigger('submit') + await wrapper.vm.updateEditorContent(postContent) }) it('with title and content', () => { + wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledTimes(1) }) it("sends a fallback language based on a user's locale", () => { + wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) }) @@ -152,7 +207,7 @@ describe('ContributionForm.vue', () => { expectedParams.variables.language = 'de' deutschOption = wrapper.findAll('li').at(0) deutschOption.trigger('click') - await wrapper.find('form').trigger('submit') + wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) }) @@ -160,22 +215,26 @@ describe('ContributionForm.vue', () => { const categoryIds = ['cat12', 'cat15', 'cat37'] expectedParams.variables.categoryIds = categoryIds wrapper.find(CategoriesSelect).vm.$emit('updateCategories', categoryIds) - await wrapper.find('form').trigger('submit') + await wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) }) it('supports adding a teaser image', async () => { expectedParams.variables.imageUpload = imageUpload wrapper.find(TeaserImage).vm.$emit('addTeaserImage', imageUpload) - await wrapper.find('form').trigger('submit') + await wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) }) it("pushes the user to the post's page", async () => { + wrapper.find('.submit-button-for-test').trigger('click') + await mocks.$apollo.mutate expect(mocks.$router.push).toHaveBeenCalledTimes(1) }) - it('shows a success toaster', () => { + it('shows a success toaster', async () => { + wrapper.find('.submit-button-for-test').trigger('click') + await mocks.$apollo.mutate expect(mocks.$toast.success).toHaveBeenCalledTimes(1) }) }) @@ -191,18 +250,19 @@ describe('ContributionForm.vue', () => { describe('handles errors', () => { beforeEach(async () => { jest.useFakeTimers() + mocks.$apollo.mutate = jest.fn().mockRejectedValueOnce({ + message: 'Not Authorised!', + }) wrapper = Wrapper() postTitleInput = wrapper.find('.ds-input') postTitleInput.setValue(postTitle) - wrapper.vm.updateEditorContent(postContent) - // second submission causes mutation to reject - await wrapper.find('form').trigger('submit') + await wrapper.vm.updateEditorContent(postContent) }) it('shows an error toaster when apollo mutation rejects', async () => { - await wrapper.find('form').trigger('submit') + await wrapper.find('.submit-button-for-test').trigger('click') await mocks.$apollo.mutate - expect(mocks.$toast.error).toHaveBeenCalledWith('Not Authorised!') + await expect(mocks.$toast.error).toHaveBeenCalledWith('Not Authorised!') }) }) }) @@ -217,7 +277,12 @@ describe('ContributionForm.vue', () => { content: 'auf Deutsch geschrieben', language: 'de', image, - categories: [{ id: 'cat12', name: 'Democracy & Politics' }], + categories: [ + { + id: 'cat12', + name: 'Democracy & Politics', + }, + ], }, } wrapper = Wrapper() @@ -255,7 +320,7 @@ describe('ContributionForm.vue', () => { postTitleInput = wrapper.find('.ds-input') postTitleInput.setValue(postTitle) wrapper.vm.updateEditorContent(postContent) - await wrapper.find('form').trigger('submit') + await wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) }) @@ -266,7 +331,7 @@ describe('ContributionForm.vue', () => { wrapper.vm.updateEditorContent(postContent) expectedParams.variables.categoryIds = categoryIds wrapper.find(CategoriesSelect).vm.$emit('updateCategories', categoryIds) - await wrapper.find('form').trigger('submit') + await wrapper.find('.submit-button-for-test').trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) }) }) diff --git a/webapp/components/ContributionForm/ContributionForm.vue b/webapp/components/ContributionForm/ContributionForm.vue index 593ff2dc6..dca23a882 100644 --- a/webapp/components/ContributionForm/ContributionForm.vue +++ b/webapp/components/ContributionForm/ContributionForm.vue @@ -1,5 +1,5 @@