diff --git a/backend/package.json b/backend/package.json
index ab9f20f43..159e3f724 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",
@@ -69,6 +70,22 @@
"linkifyjs": "~2.1.8",
"lodash": "~4.17.14",
"merge-graphql-schemas": "^1.6.1",
+ "metascraper": "^4.10.3",
+ "metascraper-audio": "^5.5.0",
+ "metascraper-author": "^4.8.5",
+ "metascraper-clearbit-logo": "^5.3.0",
+ "metascraper-date": "^4.8.5",
+ "metascraper-description": "^5.5.0",
+ "metascraper-image": "^4.8.5",
+ "metascraper-lang": "^4.8.5",
+ "metascraper-lang-detector": "^4.8.5",
+ "metascraper-logo": "^5.5.0",
+ "metascraper-publisher": "^4.8.5",
+ "metascraper-soundcloud": "^5.5.3",
+ "metascraper-title": "^4.8.5",
+ "metascraper-url": "^5.5.0",
+ "metascraper-video": "^4.8.5",
+ "metascraper-youtube": "^4.8.5",
"neo4j-driver": "~1.7.4",
"neo4j-graphql-js": "^2.6.3",
"neode": "^0.2.16",
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
Willkommen bei Human Connection
Human Connection ist ein gemeinnütziges soziales Wissens- und Aktionsnetzwerk mit Sitz in Weilheim-T...
Mehr anzeigen 24.407 Personen gefällt das
25.652 Personen haben das abonniert
Bahnhofstraße 11 (512,71 km) 73235 Weilheim an der Teck
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
Seiten, die dieser Seite gefallen
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
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 ist unser Herzensprojekt, welches allerdings uns und auch euch sehr viel Geduld abfordert. Warum dauert das eigentlich so lange?
Schau es an und Du weißt, was zu tun ist
Messe Fair Handeln: Human Connection beim Hackathon (Stuttgart 26.-28.04.2019)
In Nerds We Trust - Open Source - Wir lieben freie Software!
+
+
+
+
\ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wähle deine Sprache aus.
+
+
+
Schließen
+
+
+
+
+
+
+
+
+
+
+ Dieses Video ist nicht verfügbar.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wiedergabeliste
+
+
+
Wiedergabeliste
+
+
+__count__/__total__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mehr ansehen
+
Weniger anzeigen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Wird geladen...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wird verarbeitet...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Melde dich an , um dieses Video zur Playlist "Später ansehen" hinzuzufügen.
+
+
+
+
+
+
+
+
+
+
\ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Conversation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Verified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Closed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Merge state
+
+
Add more commits by pushing to the 256-editor-embeds-merge-in-nitro-embed branch on Human-Connection/Human-Connection .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hide all checks
+ Show all checks
+
+
+
All checks have passed
+ 4 successful checks
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Travis CI - Branch
+
+
+ Successful in 18m
+
+ —
+ Build Passed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Travis CI - Pull Request
+
+
+ Successful in 17m
+
+ —
+ Build Passed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ codecov/project/backend
+
+
+
+
+ —
+ 25.29% (+1.97%) compared to d901432
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ codecov/project/webapp
+
+
+
+
+ —
+ 45.23% remains the same compared to d901432
+
+
+
+
+
+
+
+
+
+
+
+
+
Merging is blocked
+
Merging can be performed automatically with 1 approving review.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ or view command line instructions .
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Try again
+
+
Couldn’t update branch
+
Oops, something went wrong.
+
+
+
+
+
Connect this pull request with an existing issue
+
+
+
+
+
+
+
+
+
+
+
Add this suggestion to a batch that can be applied as a single commit.
+
This suggestion is invalid because no changes were made to the code.
+
Suggestions cannot be applied while the pull request is closed.
+
Suggestions cannot be applied while viewing a subset of changes.
+
Only one suggestion per line can be applied in a batch.
+
Add this suggestion to a batch that can be applied as a single commit.
+
Applying suggestions on deleted lines is not supported.
+
You must change the existing code in this line in order to create a valid suggestion.
+
+
This suggestion has been applied or marked resolved.
+
Suggestions cannot be applied from pending reviews.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You can’t perform that action at this time.
+
+
+
+
+
+
+
+
+
+
+
+
+
You signed in with another tab or window. Reload to refresh your session.
+
You signed out in another tab or window. Reload to refresh your session.
+
+
+
+
+
+
+
+
+
+
+
\ 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..d24bbcc9f 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,
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:
+ 'VIDEO ',
+ 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:
+ 'VIDEO ',
+ },
+ },
+ })
+ 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/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 4b8fd985d..5ce8ac94c 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -956,6 +956,55 @@
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"
@@ -1009,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"
@@ -1289,6 +1350,14 @@ aggregate-error@3.0.0:
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"
@@ -1331,7 +1400,7 @@ 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-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==
@@ -1604,6 +1673,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"
@@ -1612,6 +1686,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"
@@ -1779,6 +1858,11 @@ atob@^2.1.1:
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 +2163,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 +2229,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 +2257,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 +2298,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,11 +2325,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"
@@ -2239,6 +2367,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"
@@ -2248,6 +2384,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"
@@ -2258,6 +2401,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"
@@ -2322,6 +2470,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"
@@ -2619,6 +2777,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"
@@ -2641,6 +2806,11 @@ deepmerge@4.0.0:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09"
integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==
+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:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -2882,6 +3052,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"
@@ -3217,6 +3392,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"
@@ -3409,6 +3597,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"
@@ -3515,6 +3708,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"
@@ -3584,6 +3784,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"
@@ -3594,18 +3799,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"
@@ -3679,6 +3898,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"
@@ -3842,6 +4078,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"
@@ -3888,6 +4129,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"
@@ -4002,6 +4250,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"
@@ -4056,6 +4309,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"
@@ -4082,7 +4340,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.2.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=
@@ -4149,11 +4407,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"
@@ -4371,11 +4649,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"
@@ -4388,6 +4686,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"
@@ -4410,6 +4722,14 @@ 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"
@@ -4439,6 +4759,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"
@@ -4451,6 +4781,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"
@@ -4937,6 +5272,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"
@@ -5049,6 +5389,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"
@@ -5231,7 +5578,7 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-lodash@4.17.15, lodash@^4.17.4:
+lodash@4.17.15, lodash@^4.17.4, lodash@~4.17.11, 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==
@@ -5263,11 +5610,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"
@@ -5297,7 +5649,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==
@@ -5330,6 +5682,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"
@@ -5355,6 +5721,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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-author/-/metascraper-author-4.10.2.tgz#4047799a3f21110363ea90a19b3473983e61167f"
+ integrity sha512-mQwBhe5oMqMMo/95ilag/kbNFgTt1WBnqgsjCiQOl1l82SbuUo0yU4aLSUP2SEMIWp/zbtGo734q7oAbdhXVHw==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+ lodash "~4.17.11"
+
+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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-4.10.2.tgz#fe60510cb6481ad68e9a9d76e287bc41ac887ef1"
+ integrity sha512-BdX5JJXQxErOZBlc2pJfU8a/suyu3G2omXrrjcrI+OCPfFD7CAXgZU43iou7HMnXiviQ33x7wT6DDsj7sSg5Nw==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+
+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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-4.10.2.tgz#84e2e3317017936d1f743a2ac80ae9eca16d5af9"
+ integrity sha512-ANelQVENmI8xpmsincBkNexVVohQcgk4eeKTZwBfT5/9nmMhtdJIV+obsKwL0eVHgMRj2iDphLMoAnFtcWXvdA==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+
+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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-lang/-/metascraper-lang-4.10.2.tgz#36cb11958fa8b341946cb2d8d58dff328d76d992"
+ integrity sha512-+fCh5CqPqN94sa82afwVBIyvTp3/QIgxUSmti5AN0p1fVExAdO7BUiQbs3jO+0I++xJQzTZ2LH/yYZgBc+IyQA==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+
+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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-4.10.2.tgz#f65f44f14b9f6b00467b26a242c1f58177c713e0"
+ integrity sha512-mKHcMJBPvtCGGdNtE7+InQ/4ntTzoWfMMpa0O2JKH4Odd5tZ9wtJF/Y59n261qgML5d3MtloN7eSfsLZNcmaQA==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+
+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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-4.10.2.tgz#8c0235beb2fe3ab9261dd117e864372f61e21ec8"
+ integrity sha512-wPjqI36Hcq7FYjbbV60sDwZOcauNi9GFhg2cM8cEKCSBlV1+rf5EgJ+L85Z0ClhPO4z/ulJXtcGTieqOqTwIkg==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+ lodash "~4.17.11"
+
+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@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-4.10.2.tgz#6378f3ac6bf0a2e11a27096545464cf6a19e1e74"
+ integrity sha512-cM8Tq9j6sKUMJxomd0TP619khJrn89zh0A1T7HC9tjGvaF+RGdpjpBq8xbpPDrXbeqDl4BVTX9VQ4MDU3+UuQA==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+ lodash "~4.17.11"
+
+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"
@@ -5396,7 +5889,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==
@@ -5413,6 +5906,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"
@@ -5470,6 +5978,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"
@@ -5504,6 +6017,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"
@@ -5734,6 +6252,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"
@@ -5956,6 +6484,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"
@@ -5978,6 +6518,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"
@@ -6006,11 +6551,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"
@@ -6065,6 +6636,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"
@@ -6202,6 +6778,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"
@@ -6226,6 +6807,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"
@@ -6339,6 +6925,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"
@@ -6359,6 +6950,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"
@@ -6656,6 +7252,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"
@@ -6690,6 +7291,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"
@@ -6720,6 +7328,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"
@@ -6962,6 +7575,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"
@@ -7287,6 +7905,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"
@@ -7408,6 +8033,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"
@@ -7432,6 +8089,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"
@@ -7497,11 +8159,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"
@@ -7516,6 +8192,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"
@@ -7683,6 +8369,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"
@@ -7757,6 +8474,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"
@@ -7908,6 +8630,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/docker-compose.yml b/docker-compose.yml
index 93e80d9c1..a8ce871ec 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -42,6 +42,5 @@ services:
context: neo4j
networks:
- hc-network
-
networks:
hc-network:
diff --git a/webapp/styleguide/src/system/icons/svg/bold.svg b/webapp/styleguide/src/system/icons/svg/bold.svg
deleted file mode 100755
index c3516808d..000000000
--- a/webapp/styleguide/src/system/icons/svg/bold.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-bold
-
-
diff --git a/webapp/styleguide/src/system/icons/svg/italic.svg b/webapp/styleguide/src/system/icons/svg/italic.svg
deleted file mode 100755
index 81d29483c..000000000
--- a/webapp/styleguide/src/system/icons/svg/italic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-italic
-
-
diff --git a/webapp/styleguide/src/system/icons/svg/list-ol.svg b/webapp/styleguide/src/system/icons/svg/list-ol.svg
deleted file mode 100755
index f3fb101ac..000000000
--- a/webapp/styleguide/src/system/icons/svg/list-ol.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-list-ol
-
-
diff --git a/webapp/styleguide/src/system/icons/svg/list-ul.svg b/webapp/styleguide/src/system/icons/svg/list-ul.svg
deleted file mode 100755
index d565a8064..000000000
--- a/webapp/styleguide/src/system/icons/svg/list-ul.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-list-ul
-
-
diff --git a/webapp/styleguide/src/system/icons/svg/paragraph.svg b/webapp/styleguide/src/system/icons/svg/paragraph.svg
deleted file mode 100755
index 26365f984..000000000
--- a/webapp/styleguide/src/system/icons/svg/paragraph.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-paragraph
-
-
diff --git a/webapp/styleguide/src/system/icons/svg/quote-right.svg b/webapp/styleguide/src/system/icons/svg/quote-right.svg
deleted file mode 100755
index 4e6469624..000000000
--- a/webapp/styleguide/src/system/icons/svg/quote-right.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-quote-right
-
-