diff --git a/.codecov.yml b/.codecov.yml
index 2767ed675..82b50aba3 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -95,7 +95,7 @@ coverage:
# - master
#flags:
# - integration
- paths:
+ paths:
- backend/ # only include coverage in "backend/" folder
webapp: # declare a new status context "frontend"
against: parent
@@ -127,7 +127,7 @@ coverage:
# - integration
# paths:
# - folder
-
+
#changes:
# default:
# against: parent
@@ -150,20 +150,8 @@ coverage:
#ignore: # files and folders for processing
# - tests/*
-
+
#fixes:
# - "old_path::new_path"
-comment:
- # layout options are quite limited in v4.x - there have been way more options in v1.0
- layout: reach, diff, flags, files # mostly old options: header, diff, uncovered, reach, files, tree, changes, sunburst, flags
- behavior: new # default = posts once then update, posts new if delete
- # once = post once then updates
- # new = delete old, post new
- # spammy = post new
- require_changes: false # if true: only post the comment if coverage changes
- require_base: no # [yes :: must have a base report to post]
- require_head: no # [yes :: must have a head report to post]
- branches: null # branch names that can post comment
- flags: null
- paths: null
\ No newline at end of file
+comment: off
diff --git a/.travis.yml b/.travis.yml
index 593b83e5f..3c1208496 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,7 +11,6 @@ addons:
before_install:
- yarn global add wait-on
# Install Codecov
- - yarn global add codecov
- yarn install
- cp cypress.env.template.json cypress.env.json
@@ -40,7 +39,7 @@ script:
# Fullstack
- yarn run cypress:run
# Coverage
- - codecov
+ - yarn run codecov
after_success:
- wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh
diff --git a/backend/package.json b/backend/package.json
index a253419c2..6e841d73f 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",
@@ -34,7 +35,6 @@
"!**/src/**/?(*.)+(spec|test).js?(x)"
],
"coverageReporters": [
- "text",
"lcov"
],
"testMatch": [
@@ -48,59 +48,75 @@
"apollo-client": "~2.6.3",
"apollo-link-context": "~1.0.18",
"apollo-link-http": "~1.5.15",
- "apollo-server": "~2.6.8",
+ "apollo-server": "~2.7.0",
+ "apollo-server-express": "^2.6.9",
"bcryptjs": "~2.4.3",
"cheerio": "~1.0.0-rc.3",
"cors": "~2.8.5",
"cross-env": "~5.2.0",
- "date-fns": "2.0.0-beta.1",
+ "date-fns": "2.0.0-beta.3",
"debug": "~4.1.1",
"dotenv": "~8.0.0",
- "express": "~4.17.1",
+ "express": "^4.17.1",
"faker": "Marak/faker.js#master",
"graphql": "~14.4.2",
"graphql-custom-directives": "~0.2.14",
"graphql-iso-date": "~3.6.1",
"graphql-middleware": "~3.0.2",
- "graphql-shield": "~6.0.3",
+ "graphql-shield": "~6.0.4",
"graphql-tag": "~2.10.1",
- "graphql-yoga": "~1.18.0",
- "helmet": "~3.18.0",
+ "helmet": "~3.19.0",
"jsonwebtoken": "~8.5.1",
"linkifyjs": "~2.1.8",
"lodash": "~4.17.14",
- "merge-graphql-schemas": "^1.5.8",
+ "merge-graphql-schemas": "^1.6.1",
+ "metascraper": "^4.10.3",
+ "metascraper-audio": "^5.5.0",
+ "metascraper-author": "^5.6.3",
+ "metascraper-clearbit-logo": "^5.3.0",
+ "metascraper-date": "^5.6.3",
+ "metascraper-description": "^5.5.0",
+ "metascraper-image": "^5.6.3",
+ "metascraper-lang": "^5.6.3",
+ "metascraper-lang-detector": "^4.8.5",
+ "metascraper-logo": "^5.5.0",
+ "metascraper-publisher": "^5.6.3",
+ "metascraper-soundcloud": "^5.5.3",
+ "metascraper-title": "^5.6.3",
+ "metascraper-url": "^5.5.0",
+ "metascraper-video": "^4.8.5",
+ "metascraper-youtube": "^4.8.5",
"neo4j-driver": "~1.7.4",
"neo4j-graphql-js": "^2.6.3",
"neode": "^0.2.16",
"node-fetch": "~2.6.0",
- "nodemailer": "^6.2.1",
+ "nodemailer": "^6.3.0",
"npm-run-all": "~4.1.5",
"request": "~2.88.0",
"sanitize-html": "~1.20.1",
"slug": "~1.1.0",
"trunc-html": "~1.1.2",
"uuid": "~3.3.2",
- "wait-on": "~3.2.0"
+ "wait-on": "~3.3.0"
},
"devDependencies": {
- "@babel/cli": "~7.5.0",
- "@babel/core": "~7.5.4",
- "@babel/node": "~7.5.0",
+ "@babel/cli": "~7.5.5",
+ "@babel/core": "~7.5.5",
+ "@babel/node": "~7.5.5",
"@babel/plugin-proposal-throw-expressions": "^7.2.0",
- "@babel/preset-env": "~7.5.4",
- "@babel/register": "~7.4.4",
- "apollo-server-testing": "~2.6.8",
+ "@babel/preset-env": "~7.5.5",
+ "@babel/register": "~7.5.5",
+ "apollo-server-testing": "~2.7.0",
"babel-core": "~7.0.0-0",
"babel-eslint": "~10.0.2",
"babel-jest": "~24.8.0",
"chai": "~4.2.0",
"cucumber": "~5.1.0",
- "eslint": "~6.0.1",
+ "eslint": "~6.1.0",
"eslint-config-prettier": "~6.0.0",
"eslint-config-standard": "~12.0.0",
- "eslint-plugin-import": "~2.18.0",
- "eslint-plugin-jest": "~22.7.2",
+ "eslint-plugin-import": "~2.18.2",
+ "eslint-plugin-jest": "~22.13.6",
"eslint-plugin-node": "~9.1.0",
"eslint-plugin-prettier": "~3.1.0",
"eslint-plugin-promise": "~4.2.1",
diff --git a/backend/src/index.js b/backend/src/index.js
index f28e58947..0e7fc233c 100644
--- a/backend/src/index.js
+++ b/backend/src/index.js
@@ -1,18 +1,8 @@
import createServer from './server'
-import ActivityPub from './activitypub/ActivityPub'
import CONFIG from './config'
-const serverConfig = {
- port: CONFIG.GRAPHQL_PORT,
- // cors: {
- // credentials: true,
- // origin: [CONFIG.CLIENT_URI] // your frontend url.
- // }
-}
-
-const server = createServer()
-server.start(serverConfig, options => {
+const { app } = createServer()
+app.listen({ port: CONFIG.GRAPHQL_PORT }, () => {
/* eslint-disable-next-line no-console */
console.log(`GraphQLServer ready at ${CONFIG.GRAPHQL_URI} 🚀`)
- ActivityPub.init(server)
})
diff --git a/backend/src/jest/helpers.js b/backend/src/jest/helpers.js
index e50f30c64..380aedd16 100644
--- a/backend/src/jest/helpers.js
+++ b/backend/src/jest/helpers.js
@@ -15,3 +15,9 @@ export async function login(variables) {
authorization: `Bearer ${response.login}`,
}
}
+
+//* This is a fake ES2015 template string, just to benefit of syntax
+// highlighting of `gql` template strings in certain editors.
+export function gql(strings) {
+ return strings.join('')
+}
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/email/templates/signup.js b/backend/src/middleware/email/templates/signup.js
index 1a9c0de91..7751f0e67 100644
--- a/backend/src/middleware/email/templates/signup.js
+++ b/backend/src/middleware/email/templates/signup.js
@@ -11,6 +11,7 @@ export const signupTemplate = options => {
} = options
const actionUrl = new URL('/registration/create-user-account', CONFIG.CLIENT_URI)
actionUrl.searchParams.set('nonce', nonce)
+ actionUrl.searchParams.set('email', email)
return {
to: email,
diff --git a/backend/src/middleware/handleHtmlContent/handleContentData.spec.js b/backend/src/middleware/handleHtmlContent/handleContentData.spec.js
index aa281e6d7..f2e3c2303 100644
--- a/backend/src/middleware/handleHtmlContent/handleContentData.spec.js
+++ b/backend/src/middleware/handleHtmlContent/handleContentData.spec.js
@@ -1,6 +1,5 @@
import { GraphQLClient } from 'graphql-request'
-import gql from 'graphql-tag'
-import { host, login } from '../../jest/helpers'
+import { host, login, gql } from '../../jest/helpers'
import Factory from '../../seed/factories'
const factory = Factory()
diff --git a/backend/src/middleware/index.js b/backend/src/middleware/index.js
index fd631256d..ba5b9d324 100644
--- a/backend/src/middleware/index.js
+++ b/backend/src/middleware/index.js
@@ -1,4 +1,6 @@
+import { applyMiddleware } from 'graphql-middleware'
import CONFIG from './../config'
+
import activityPub from './activityPubMiddleware'
import softDelete from './softDeleteMiddleware'
import sluggify from './sluggifyMiddleware'
@@ -50,11 +52,14 @@ 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.`)
}
- return order.map(key => middlewares[key])
+ const appliedMiddlewares = order.map(key => middlewares[key])
+ return applyMiddleware(schema, ...appliedMiddlewares)
}
diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js
index a6b6ef0da..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,
@@ -146,6 +147,7 @@ const permissions = shield(
Comment: allow,
User: or(noEmailFilter, isAdmin),
isLoggedIn: allow,
+ Badge: allow,
},
Mutation: {
'*': deny,
@@ -160,9 +162,6 @@ const permissions = shield(
UpdatePost: isAuthor,
DeletePost: isAuthor,
report: isAuthenticated,
- CreateBadge: isAdmin,
- UpdateBadge: isAdmin,
- DeleteBadge: isAdmin,
CreateSocialMedia: isAuthenticated,
DeleteSocialMedia: isAuthenticated,
// AddBadgeRewarded: isAdmin,
@@ -178,6 +177,7 @@ const permissions = shield(
enable: isModerator,
disable: isModerator,
CreateComment: isAuthenticated,
+ UpdateComment: isAuthor,
DeleteComment: isAuthor,
DeleteUser: isDeletingOwnAccount,
requestPasswordReset: allow,
diff --git a/backend/src/middleware/validation/index.js b/backend/src/middleware/validation/index.js
deleted file mode 100644
index ca7a6b338..000000000
--- a/backend/src/middleware/validation/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { UserInputError } from 'apollo-server'
-
-const validateUrl = async (resolve, root, args, context, info) => {
- const { url } = args
- const isValid = url.match(/^(?:https?:\/\/)(?:[^@\n])?(?:www\.)?([^:/\n?]+)/g)
- if (isValid) {
- /* eslint-disable-next-line no-return-await */
- return await resolve(root, args, context, info)
- } else {
- throw new UserInputError('Input is not a URL')
- }
-}
-
-export default {
- Mutation: {
- CreateSocialMedia: validateUrl,
- },
-}
diff --git a/backend/src/middleware/validation/validationMiddleware.js b/backend/src/middleware/validation/validationMiddleware.js
index 9ac15a60f..319a9a6c0 100644
--- a/backend/src/middleware/validation/validationMiddleware.js
+++ b/backend/src/middleware/validation/validationMiddleware.js
@@ -1,6 +1,9 @@
import { UserInputError } from 'apollo-server'
import Joi from '@hapi/joi'
+const COMMENT_MIN_LENGTH = 1
+const NO_POST_ERR_MESSAGE = 'Comment cannot be created without a post!'
+
const validate = schema => {
return async (resolve, root, args, context, info) => {
const validation = schema.validate(args)
@@ -15,8 +18,47 @@ const socialMediaSchema = Joi.object().keys({
.required(),
})
+const validateCommentCreation = async (resolve, root, args, context, info) => {
+ const content = args.content.replace(/<(?:.|\n)*?>/gm, '').trim()
+ const { postId } = args
+
+ if (!args.content || content.length < COMMENT_MIN_LENGTH) {
+ throw new UserInputError(`Comment must be at least ${COMMENT_MIN_LENGTH} character long!`)
+ }
+ const session = context.driver.session()
+ const postQueryRes = await session.run(
+ `
+ MATCH (post:Post {id: $postId})
+ RETURN post`,
+ {
+ postId,
+ },
+ )
+ const [post] = postQueryRes.records.map(record => {
+ return record.get('post')
+ })
+
+ if (!post) {
+ throw new UserInputError(NO_POST_ERR_MESSAGE)
+ } else {
+ return resolve(root, args, context, info)
+ }
+}
+
+const validateUpdateComment = async (resolve, root, args, context, info) => {
+ const COMMENT_MIN_LENGTH = 1
+ const content = args.content.replace(/<(?:.|\n)*?>/gm, '').trim()
+ if (!args.content || content.length < COMMENT_MIN_LENGTH) {
+ throw new UserInputError(`Comment must be at least ${COMMENT_MIN_LENGTH} character long!`)
+ }
+
+ return resolve(root, args, context, info)
+}
+
export default {
Mutation: {
CreateSocialMedia: validate(socialMediaSchema),
+ CreateComment: validateCommentCreation,
+ UpdateComment: validateUpdateComment,
},
}
diff --git a/backend/src/models/Badge.js b/backend/src/models/Badge.js
new file mode 100644
index 000000000..6968a056b
--- /dev/null
+++ b/backend/src/models/Badge.js
@@ -0,0 +1,7 @@
+module.exports = {
+ id: { type: 'string', primary: true, lowercase: true },
+ status: { type: 'string', valid: ['permanent', 'temporary'] },
+ type: { type: 'string', valid: ['role', 'crowdfunding'] },
+ icon: { type: 'string', required: true },
+ createdAt: { type: 'string', isoDate: true, default: () => new Date().toISOString() },
+}
diff --git a/backend/src/models/EmailAddress.js b/backend/src/models/EmailAddress.js
index ddd56c297..6afccd1ed 100644
--- a/backend/src/models/EmailAddress.js
+++ b/backend/src/models/EmailAddress.js
@@ -8,5 +8,6 @@ module.exports = {
relationship: 'BELONGS_TO',
target: 'User',
direction: 'out',
+ eager: true,
},
}
diff --git a/backend/src/models/User.js b/backend/src/models/User.js
index d8f768ae9..cac8fd7a6 100644
--- a/backend/src/models/User.js
+++ b/backend/src/models/User.js
@@ -4,7 +4,6 @@ module.exports = {
id: { type: 'string', primary: true, default: uuid }, // TODO: should be type: 'uuid' but simplified for our tests
actorId: { type: 'string', allow: [null] },
name: { type: 'string', min: 3 },
- email: { type: 'string', lowercase: true, email: true },
slug: 'string',
encryptedPassword: 'string',
avatar: { type: 'string', allow: [null] },
@@ -43,6 +42,12 @@ module.exports = {
target: 'User',
direction: 'in',
},
+ rewarded: {
+ type: 'relationship',
+ relationship: 'REWARDED',
+ target: 'Badge',
+ direction: 'in',
+ },
invitedBy: { type: 'relationship', relationship: 'INVITED', target: 'User', direction: 'in' },
createdAt: { type: 'string', isoDate: true, default: () => new Date().toISOString() },
updatedAt: {
diff --git a/backend/src/models/index.js b/backend/src/models/index.js
index 0e6ae5864..09d1dbbeb 100644
--- a/backend/src/models/index.js
+++ b/backend/src/models/index.js
@@ -1,6 +1,7 @@
// NOTE: We cannot use `fs` here to clean up the code. Cypress breaks on any npm
// module that is not browser-compatible. Node's `fs` module is server-side only
export default {
+ Badge: require('./Badge.js'),
User: require('./User.js'),
InvitationCode: require('./InvitationCode.js'),
EmailAddress: require('./EmailAddress.js'),
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/index.js b/backend/src/schema/index.js
index 8fbb5cfda..0f724d9b5 100644
--- a/backend/src/schema/index.js
+++ b/backend/src/schema/index.js
@@ -12,11 +12,25 @@ export default applyScalars(
resolvers,
config: {
query: {
- exclude: ['InvitationCode', 'EmailAddress', 'Notfication', 'Statistics', 'LoggedInUser'],
+ exclude: [
+ 'Badge',
+ 'InvitationCode',
+ 'EmailAddress',
+ 'Notfication',
+ 'Statistics',
+ 'LoggedInUser',
+ ],
// add 'User' here as soon as possible
},
mutation: {
- exclude: ['InvitationCode', 'EmailAddress', 'Notfication', 'Statistics', 'LoggedInUser'],
+ exclude: [
+ 'Badge',
+ 'InvitationCode',
+ 'EmailAddress',
+ 'Notfication',
+ 'Statistics',
+ 'LoggedInUser',
+ ],
// add 'User' here as soon as possible
},
debug: CONFIG.DEBUG,
diff --git a/backend/src/schema/resolvers/badges.js b/backend/src/schema/resolvers/badges.js
new file mode 100644
index 000000000..19bc24fd6
--- /dev/null
+++ b/backend/src/schema/resolvers/badges.js
@@ -0,0 +1,9 @@
+import { neo4jgraphql } from 'neo4j-graphql-js'
+
+export default {
+ Query: {
+ Badge: async (object, args, context, resolveInfo) => {
+ return neo4jgraphql(object, args, context, resolveInfo, false)
+ },
+ },
+}
diff --git a/backend/src/schema/resolvers/badges.spec.js b/backend/src/schema/resolvers/badges.spec.js
deleted file mode 100644
index a0dbafe00..000000000
--- a/backend/src/schema/resolvers/badges.spec.js
+++ /dev/null
@@ -1,200 +0,0 @@
-import { GraphQLClient } from 'graphql-request'
-import Factory from '../../seed/factories'
-import { host, login } from '../../jest/helpers'
-
-const factory = Factory()
-let client
-
-describe('badges', () => {
- beforeEach(async () => {
- await factory.create('User', {
- email: 'user@example.org',
- role: 'user',
- password: '1234',
- })
- await factory.create('User', {
- id: 'u2',
- role: 'moderator',
- email: 'moderator@example.org',
- })
- await factory.create('User', {
- id: 'u3',
- role: 'admin',
- email: 'admin@example.org',
- })
- })
-
- afterEach(async () => {
- await factory.cleanDatabase()
- })
-
- describe('CreateBadge', () => {
- const variables = {
- id: 'b1',
- key: 'indiegogo_en_racoon',
- type: 'crowdfunding',
- status: 'permanent',
- icon: '/img/badges/indiegogo_en_racoon.svg',
- }
-
- const mutation = `
- mutation(
- $id: ID
- $key: String!
- $type: BadgeType!
- $status: BadgeStatus!
- $icon: String!
- ) {
- CreateBadge(id: $id, key: $key, type: $type, status: $status, icon: $icon) {
- id,
- key,
- type,
- status,
- icon
- }
- }
- `
-
- describe('unauthenticated', () => {
- it('throws authorization error', async () => {
- client = new GraphQLClient(host)
- await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised')
- })
- })
-
- describe('authenticated admin', () => {
- beforeEach(async () => {
- const headers = await login({ email: 'admin@example.org', password: '1234' })
- client = new GraphQLClient(host, { headers })
- })
- it('creates a badge', async () => {
- const expected = {
- CreateBadge: {
- icon: '/img/badges/indiegogo_en_racoon.svg',
- id: 'b1',
- key: 'indiegogo_en_racoon',
- status: 'permanent',
- type: 'crowdfunding',
- },
- }
- await expect(client.request(mutation, variables)).resolves.toEqual(expected)
- })
- })
-
- describe('authenticated moderator', () => {
- beforeEach(async () => {
- const headers = await login({ email: 'moderator@example.org', password: '1234' })
- client = new GraphQLClient(host, { headers })
- })
-
- it('throws authorization error', async () => {
- await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised')
- })
- })
- })
-
- describe('UpdateBadge', () => {
- beforeEach(async () => {
- await factory.authenticateAs({ email: 'admin@example.org', password: '1234' })
- await factory.create('Badge', { id: 'b1' })
- })
- const variables = {
- id: 'b1',
- key: 'whatever',
- }
-
- const mutation = `
- mutation($id: ID!, $key: String!) {
- UpdateBadge(id: $id, key: $key) {
- id
- key
- }
- }
- `
-
- describe('unauthenticated', () => {
- it('throws authorization error', async () => {
- client = new GraphQLClient(host)
- await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised')
- })
- })
-
- describe('authenticated moderator', () => {
- beforeEach(async () => {
- const headers = await login({ email: 'moderator@example.org', password: '1234' })
- client = new GraphQLClient(host, { headers })
- })
-
- it('throws authorization error', async () => {
- await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised')
- })
- })
-
- describe('authenticated admin', () => {
- beforeEach(async () => {
- const headers = await login({ email: 'admin@example.org', password: '1234' })
- client = new GraphQLClient(host, { headers })
- })
- it('updates a badge', async () => {
- const expected = {
- UpdateBadge: {
- id: 'b1',
- key: 'whatever',
- },
- }
- await expect(client.request(mutation, variables)).resolves.toEqual(expected)
- })
- })
- })
-
- describe('DeleteBadge', () => {
- beforeEach(async () => {
- await factory.authenticateAs({ email: 'admin@example.org', password: '1234' })
- await factory.create('Badge', { id: 'b1' })
- })
- const variables = {
- id: 'b1',
- }
-
- const mutation = `
- mutation($id: ID!) {
- DeleteBadge(id: $id) {
- id
- }
- }
- `
-
- describe('unauthenticated', () => {
- it('throws authorization error', async () => {
- client = new GraphQLClient(host)
- await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised')
- })
- })
-
- describe('authenticated moderator', () => {
- beforeEach(async () => {
- const headers = await login({ email: 'moderator@example.org', password: '1234' })
- client = new GraphQLClient(host, { headers })
- })
-
- it('throws authorization error', async () => {
- await expect(client.request(mutation, variables)).rejects.toThrow('Not Authorised')
- })
- })
-
- describe('authenticated admin', () => {
- beforeEach(async () => {
- const headers = await login({ email: 'admin@example.org', password: '1234' })
- client = new GraphQLClient(host, { headers })
- })
- it('deletes a badge', async () => {
- const expected = {
- DeleteBadge: {
- id: 'b1',
- },
- }
- await expect(client.request(mutation, variables)).resolves.toEqual(expected)
- })
- })
- })
-})
diff --git a/backend/src/schema/resolvers/comments.js b/backend/src/schema/resolvers/comments.js
index 7aef63c59..31219d6d9 100644
--- a/backend/src/schema/resolvers/comments.js
+++ b/backend/src/schema/resolvers/comments.js
@@ -1,40 +1,15 @@
import { neo4jgraphql } from 'neo4j-graphql-js'
-import { UserInputError } from 'apollo-server'
-
-const COMMENT_MIN_LENGTH = 1
-const NO_POST_ERR_MESSAGE = 'Comment cannot be created without a post!'
export default {
Mutation: {
CreateComment: async (object, params, context, resolveInfo) => {
- const content = params.content.replace(/<(?:.|\n)*?>/gm, '').trim()
const { postId } = params
// Adding relationship from comment to post by passing in the postId,
// but we do not want to create the comment with postId as an attribute
// because we use relationships for this. So, we are deleting it from params
// before comment creation.
delete params.postId
-
- if (!params.content || content.length < COMMENT_MIN_LENGTH) {
- throw new UserInputError(`Comment must be at least ${COMMENT_MIN_LENGTH} character long!`)
- }
-
const session = context.driver.session()
- const postQueryRes = await session.run(
- `
- MATCH (post:Post {id: $postId})
- RETURN post`,
- {
- postId,
- },
- )
- const [post] = postQueryRes.records.map(record => {
- return record.get('post')
- })
-
- if (!post) {
- throw new UserInputError(NO_POST_ERR_MESSAGE)
- }
const commentWithoutRelationships = await neo4jgraphql(
object,
params,
diff --git a/backend/src/schema/resolvers/comments.spec.js b/backend/src/schema/resolvers/comments.spec.js
index 7f17539dc..890ba5feb 100644
--- a/backend/src/schema/resolvers/comments.spec.js
+++ b/backend/src/schema/resolvers/comments.spec.js
@@ -1,7 +1,6 @@
-import gql from 'graphql-tag'
import { GraphQLClient } from 'graphql-request'
import Factory from '../../seed/factories'
-import { host, login } from '../../jest/helpers'
+import { host, login, gql } from '../../jest/helpers'
const factory = Factory()
let client
@@ -10,7 +9,28 @@ let createPostVariables
let createCommentVariablesSansPostId
let createCommentVariablesWithNonExistentPost
let userParams
-let authorParams
+let headers
+
+const createPostMutation = gql`
+ mutation($id: ID!, $title: String!, $content: String!) {
+ CreatePost(id: $id, title: $title, content: $content) {
+ id
+ }
+ }
+`
+const createCommentMutation = gql`
+ mutation($id: ID, $postId: ID!, $content: String!) {
+ CreateComment(id: $id, postId: $postId, content: $content) {
+ id
+ content
+ }
+ }
+`
+createPostVariables = {
+ id: 'p1',
+ title: 'post to comment on',
+ content: 'please comment on me',
+}
beforeEach(async () => {
userParams = {
@@ -26,21 +46,6 @@ afterEach(async () => {
})
describe('CreateComment', () => {
- const createCommentMutation = gql`
- mutation($postId: ID!, $content: String!) {
- CreateComment(postId: $postId, content: $content) {
- id
- content
- }
- }
- `
- const createPostMutation = gql`
- mutation($id: ID!, $title: String!, $content: String!) {
- CreatePost(id: $id, title: $title, content: $content) {
- id
- }
- }
- `
describe('unauthenticated', () => {
it('throws authorization error', async () => {
createCommentVariables = {
@@ -55,7 +60,6 @@ describe('CreateComment', () => {
})
describe('authenticated', () => {
- let headers
beforeEach(async () => {
headers = await login(userParams)
client = new GraphQLClient(host, {
@@ -65,11 +69,6 @@ describe('CreateComment', () => {
postId: 'p1',
content: "I'm authorised to comment",
}
- createPostVariables = {
- id: 'p1',
- title: 'post to comment on',
- content: 'please comment on me',
- }
await client.request(createPostMutation, createPostVariables)
})
@@ -188,19 +187,8 @@ describe('CreateComment', () => {
})
})
-describe('DeleteComment', () => {
- const deleteCommentMutation = gql`
- mutation($id: ID!) {
- DeleteComment(id: $id) {
- id
- }
- }
- `
-
- let deleteCommentVariables = {
- id: 'c1',
- }
-
+describe('ManageComments', () => {
+ let authorParams
beforeEach(async () => {
authorParams = {
email: 'author@example.org',
@@ -214,51 +202,178 @@ describe('DeleteComment', () => {
content: 'Post to be commented',
})
await asAuthor.create('Comment', {
- id: 'c1',
+ id: 'c456',
postId: 'p1',
content: 'Comment to be deleted',
})
})
- describe('unauthenticated', () => {
- it('throws authorization error', async () => {
- client = new GraphQLClient(host)
- await expect(client.request(deleteCommentMutation, deleteCommentVariables)).rejects.toThrow(
- 'Not Authorised',
- )
- })
- })
-
- describe('authenticated but not the author', () => {
- beforeEach(async () => {
- let headers
- headers = await login(userParams)
- client = new GraphQLClient(host, { headers })
- })
-
- it('throws authorization error', async () => {
- await expect(client.request(deleteCommentMutation, deleteCommentVariables)).rejects.toThrow(
- 'Not Authorised',
- )
- })
- })
-
- describe('authenticated as author', () => {
- beforeEach(async () => {
- let headers
- headers = await login(authorParams)
- client = new GraphQLClient(host, { headers })
- })
-
- it('deletes the comment', async () => {
- const expected = {
- DeleteComment: {
- id: 'c1',
- },
+ describe('UpdateComment', () => {
+ const updateCommentMutation = gql`
+ mutation($content: String!, $id: ID!) {
+ UpdateComment(content: $content, id: $id) {
+ id
+ content
+ }
}
- await expect(client.request(deleteCommentMutation, deleteCommentVariables)).resolves.toEqual(
- expected,
- )
+ `
+
+ let updateCommentVariables = {
+ id: 'c456',
+ content: 'The comment is updated',
+ }
+
+ describe('unauthenticated', () => {
+ it('throws authorization error', async () => {
+ client = new GraphQLClient(host)
+ await expect(client.request(updateCommentMutation, updateCommentVariables)).rejects.toThrow(
+ 'Not Authorised',
+ )
+ })
+ })
+
+ describe('authenticated but not the author', () => {
+ beforeEach(async () => {
+ headers = await login({
+ email: 'test@example.org',
+ password: '1234',
+ })
+ client = new GraphQLClient(host, {
+ headers,
+ })
+ })
+
+ it('throws authorization error', async () => {
+ await expect(client.request(updateCommentMutation, updateCommentVariables)).rejects.toThrow(
+ 'Not Authorised',
+ )
+ })
+ })
+
+ describe('authenticated as author', () => {
+ beforeEach(async () => {
+ headers = await login(authorParams)
+ client = new GraphQLClient(host, {
+ headers,
+ })
+ })
+
+ it('updates the comment', async () => {
+ const expected = {
+ UpdateComment: {
+ id: 'c456',
+ content: 'The comment is updated',
+ },
+ }
+ await expect(
+ client.request(updateCommentMutation, updateCommentVariables),
+ ).resolves.toEqual(expected)
+ })
+
+ it('throw an error if an empty string is sent from the editor as content', async () => {
+ updateCommentVariables = {
+ id: 'c456',
+ content: '
',
+ }
+
+ await expect(client.request(updateCommentMutation, updateCommentVariables)).rejects.toThrow(
+ 'Comment must be at least 1 character long!',
+ )
+ })
+
+ it('throws an error if a comment sent from the editor does not contain a single letter character', async () => {
+ updateCommentVariables = {
+ id: 'c456',
+ content: '
',
+ }
+
+ await expect(client.request(updateCommentMutation, updateCommentVariables)).rejects.toThrow(
+ 'Comment must be at least 1 character long!',
+ )
+ })
+
+ it('throws an error if commentId is sent as an empty string', async () => {
+ updateCommentVariables = {
+ id: '',
+ content: 'Hello
',
+ }
+
+ await expect(client.request(updateCommentMutation, updateCommentVariables)).rejects.toThrow(
+ 'Not Authorised!',
+ )
+ })
+
+ it('throws an error if the comment does not exist in the database', async () => {
+ updateCommentVariables = {
+ id: 'c1000',
+ content: 'Hello
',
+ }
+
+ await expect(client.request(updateCommentMutation, updateCommentVariables)).rejects.toThrow(
+ 'Not Authorised!',
+ )
+ })
+ })
+ })
+
+ describe('DeleteComment', () => {
+ const deleteCommentMutation = gql`
+ mutation($id: ID!) {
+ DeleteComment(id: $id) {
+ id
+ }
+ }
+ `
+
+ let deleteCommentVariables = {
+ id: 'c456',
+ }
+
+ describe('unauthenticated', () => {
+ it('throws authorization error', async () => {
+ client = new GraphQLClient(host)
+ await expect(client.request(deleteCommentMutation, deleteCommentVariables)).rejects.toThrow(
+ 'Not Authorised',
+ )
+ })
+ })
+
+ describe('authenticated but not the author', () => {
+ beforeEach(async () => {
+ headers = await login({
+ email: 'test@example.org',
+ password: '1234',
+ })
+ client = new GraphQLClient(host, {
+ headers,
+ })
+ })
+
+ it('throws authorization error', async () => {
+ await expect(client.request(deleteCommentMutation, deleteCommentVariables)).rejects.toThrow(
+ 'Not Authorised',
+ )
+ })
+ })
+
+ describe('authenticated as author', () => {
+ beforeEach(async () => {
+ headers = await login(authorParams)
+ client = new GraphQLClient(host, {
+ headers,
+ })
+ })
+
+ it('deletes the comment', async () => {
+ const expected = {
+ DeleteComment: {
+ id: 'c456',
+ },
+ }
+ await expect(
+ client.request(deleteCommentMutation, deleteCommentVariables),
+ ).resolves.toEqual(expected)
+ })
})
})
})
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/passwordReset.js b/backend/src/schema/resolvers/passwordReset.js
index 415eb6f21..88d82846a 100644
--- a/backend/src/schema/resolvers/passwordReset.js
+++ b/backend/src/schema/resolvers/passwordReset.js
@@ -5,7 +5,7 @@ export async function createPasswordReset(options) {
const { driver, code, email, issuedAt = new Date() } = options
const session = driver.session()
const cypher = `
- MATCH (u:User) WHERE u.email = $email
+ MATCH (u:User)-[:PRIMARY_EMAIL]->(e:EmailAddress {email:$email})
CREATE(pr:PasswordReset {code: $code, issuedAt: datetime($issuedAt), usedAt: NULL})
MERGE (u)-[:REQUESTED]->(pr)
RETURN u
@@ -35,7 +35,7 @@ export default {
const encryptedNewPassword = await bcrypt.hashSync(newPassword, 10)
const cypher = `
MATCH (pr:PasswordReset {code: $code})
- MATCH (u:User {email: $email})-[:REQUESTED]->(pr)
+ MATCH (e:EmailAddress {email: $email})<-[:PRIMARY_EMAIL]-(u:User)-[:REQUESTED]->(pr)
WHERE duration.between(pr.issuedAt, datetime()).days <= 0 AND pr.usedAt IS NULL
SET pr.usedAt = datetime()
SET u.encryptedPassword = $encryptedNewPassword
diff --git a/backend/src/schema/resolvers/posts.spec.js b/backend/src/schema/resolvers/posts.spec.js
index 2e5069de7..233be450a 100644
--- a/backend/src/schema/resolvers/posts.spec.js
+++ b/backend/src/schema/resolvers/posts.spec.js
@@ -18,10 +18,11 @@ const createPostWithCategoriesMutation = `
mutation($title: String!, $content: String!, $categoryIds: [ID]) {
CreatePost(title: $title, content: $content, categoryIds: $categoryIds) {
id
+ title
}
}
`
-const creatPostWithCategoriesVariables = {
+const createPostWithCategoriesVariables = {
title: postTitle,
content: postContent,
categoryIds: ['cat9', 'cat4', 'cat15'],
@@ -35,6 +36,26 @@ const postQueryWithCategories = `
}
}
`
+const createPostWithoutCategoriesVariables = {
+ title: 'This is a post without categories',
+ content: 'I should be able to filter it out',
+ categoryIds: null,
+}
+const postQueryFilteredByCategory = `
+query Post($filter: _PostFilter) {
+ Post(filter: $filter) {
+ title
+ id
+ categories {
+ id
+ }
+ }
+ }
+`
+const postCategoriesFilterParam = { categories_some: { id_in: ['cat4'] } }
+const postQueryFilteredByCategoryVariables = {
+ filter: postCategoriesFilterParam,
+}
beforeEach(async () => {
userParams = {
name: 'TestUser',
@@ -133,7 +154,8 @@ describe('CreatePost', () => {
})
describe('categories', () => {
- it('allows a user to set the categories of the post', async () => {
+ let postWithCategories
+ beforeEach(async () => {
await Promise.all([
factory.create('Category', {
id: 'cat9',
@@ -151,18 +173,39 @@ describe('CreatePost', () => {
icon: 'shopping-cart',
}),
])
- const expected = [{ id: 'cat9' }, { id: 'cat4' }, { id: 'cat15' }]
- const postWithCategories = await client.request(
+ postWithCategories = await client.request(
createPostWithCategoriesMutation,
- creatPostWithCategoriesVariables,
+ createPostWithCategoriesVariables,
)
+ })
+
+ it('allows a user to set the categories of the post', async () => {
+ const expected = [{ id: 'cat9' }, { id: 'cat4' }, { id: 'cat15' }]
const postQueryWithCategoriesVariables = {
id: postWithCategories.CreatePost.id,
}
+
await expect(
client.request(postQueryWithCategories, postQueryWithCategoriesVariables),
).resolves.toEqual({ Post: [{ categories: expect.arrayContaining(expected) }] })
})
+
+ it('allows a user to filter for posts by category', async () => {
+ await client.request(createPostWithCategoriesMutation, createPostWithoutCategoriesVariables)
+ const categoryIds = [{ id: 'cat4' }, { id: 'cat15' }, { id: 'cat9' }]
+ const expected = {
+ Post: [
+ {
+ title: postTitle,
+ id: postWithCategories.CreatePost.id,
+ categories: expect.arrayContaining(categoryIds),
+ },
+ ],
+ }
+ await expect(
+ client.request(postQueryFilteredByCategory, postQueryFilteredByCategoryVariables),
+ ).resolves.toEqual(expected)
+ })
})
})
})
@@ -260,7 +303,7 @@ describe('UpdatePost', () => {
])
postWithCategories = await client.request(
createPostWithCategoriesMutation,
- creatPostWithCategoriesVariables,
+ createPostWithCategoriesVariables,
)
updatePostVariables = {
id: postWithCategories.CreatePost.id,
diff --git a/backend/src/schema/resolvers/registration.js b/backend/src/schema/resolvers/registration.js
index 3c8243d8a..20c54a49b 100644
--- a/backend/src/schema/resolvers/registration.js
+++ b/backend/src/schema/resolvers/registration.js
@@ -12,8 +12,8 @@ const instance = neode()
*/
const checkEmailDoesNotExist = async ({ email }) => {
email = email.toLowerCase()
- const users = await instance.all('User', { email })
- if (users.length > 0) throw new UserInputError('User account with this email already exists.')
+ const emails = await instance.all('EmailAddress', { email })
+ if (emails.length > 0) throw new UserInputError('User account with this email already exists.')
}
export default {
diff --git a/backend/src/schema/resolvers/registration.spec.js b/backend/src/schema/resolvers/registration.spec.js
index 2cbce9a36..dc2e96348 100644
--- a/backend/src/schema/resolvers/registration.spec.js
+++ b/backend/src/schema/resolvers/registration.spec.js
@@ -166,11 +166,12 @@ describe('SignupByInvitation', () => {
await expect(action()).rejects.toThrow('"email" must be a valid email')
})
- it('creates no EmailAddress node', async done => {
+ it('creates no additional EmailAddress node', async done => {
try {
await action()
} catch (e) {
- const emailAddresses = await instance.all('EmailAddress')
+ let emailAddresses = await instance.all('EmailAddress')
+ emailAddresses = await emailAddresses.toJson
expect(emailAddresses).toHaveLength(0)
done()
}
@@ -191,16 +192,16 @@ describe('SignupByInvitation', () => {
describe('creates a EmailAddress node', () => {
it('with a `createdAt` attribute', async () => {
await action()
- const emailAddresses = await instance.all('EmailAddress')
- const emailAddress = await emailAddresses.first().toJson()
+ let emailAddress = await instance.first('EmailAddress', { email: 'someuser@example.org' })
+ emailAddress = await emailAddress.toJson()
expect(emailAddress.createdAt).toBeTruthy()
expect(Date.parse(emailAddress.createdAt)).toEqual(expect.any(Number))
})
it('with a cryptographic `nonce`', async () => {
await action()
- const emailAddresses = await instance.all('EmailAddress')
- const emailAddress = await emailAddresses.first().toJson()
+ let emailAddress = await instance.first('EmailAddress', { email: 'someuser@example.org' })
+ emailAddress = await emailAddress.toJson()
expect(emailAddress.nonce).toEqual(expect.any(String))
})
@@ -220,6 +221,7 @@ describe('SignupByInvitation', () => {
it('rejects because codes can be used only once', async done => {
await action()
try {
+ variables.email = 'yetanotheremail@example.org'
await action()
} catch (e) {
expect(e.message).toMatch(/Invitation code already used/)
@@ -282,8 +284,8 @@ describe('Signup', () => {
it('creates a Signup with a cryptographic `nonce`', async () => {
await action()
- const emailAddresses = await instance.all('EmailAddress')
- const emailAddress = await emailAddresses.first().toJson()
+ let emailAddress = await instance.first('EmailAddress', { email: 'someuser@example.org' })
+ emailAddress = await emailAddress.toJson()
expect(emailAddress.nonce).toEqual(expect.any(String))
})
})
diff --git a/backend/src/schema/resolvers/rewards.js b/backend/src/schema/resolvers/rewards.js
index ec5043da3..f7a759aa4 100644
--- a/backend/src/schema/resolvers/rewards.js
+++ b/backend/src/schema/resolvers/rewards.js
@@ -1,47 +1,47 @@
+import { neode } from '../../bootstrap/neo4j'
+import { UserInputError } from 'apollo-server'
+
+const instance = neode()
+
+const getUserAndBadge = async ({ badgeKey, userId }) => {
+ let user = await instance.first('User', 'id', userId)
+ const badge = await instance.first('Badge', 'id', badgeKey)
+ if (!user) throw new UserInputError("Couldn't find a user with that id")
+ if (!badge) throw new UserInputError("Couldn't find a badge with that id")
+ return { user, badge }
+}
+
export default {
Mutation: {
reward: async (_object, params, context, _resolveInfo) => {
- const { fromBadgeId, toUserId } = params
- const session = context.driver.session()
-
- let transactionRes = await session.run(
- `MATCH (badge:Badge {id: $badgeId}), (rewardedUser:User {id: $rewardedUserId})
- MERGE (badge)-[:REWARDED]->(rewardedUser)
- RETURN rewardedUser {.id}`,
- {
- badgeId: fromBadgeId,
- rewardedUserId: toUserId,
- },
- )
-
- const [rewardedUser] = transactionRes.records.map(record => {
- return record.get('rewardedUser')
- })
-
- session.close()
-
- return rewardedUser.id
+ const { user, badge } = await getUserAndBadge(params)
+ await user.relateTo(badge, 'rewarded')
+ return user.toJson()
},
unreward: async (_object, params, context, _resolveInfo) => {
- const { fromBadgeId, toUserId } = params
+ const { badgeKey, userId } = params
+ const { user } = await getUserAndBadge(params)
const session = context.driver.session()
-
- let transactionRes = await session.run(
- `MATCH (badge:Badge {id: $badgeId})-[reward:REWARDED]->(rewardedUser:User {id: $rewardedUserId})
- DELETE reward
- RETURN rewardedUser {.id}`,
- {
- badgeId: fromBadgeId,
- rewardedUserId: toUserId,
- },
- )
- const [rewardedUser] = transactionRes.records.map(record => {
- return record.get('rewardedUser')
- })
- session.close()
-
- return rewardedUser.id
+ try {
+ // silly neode cannot remove relationships
+ await session.run(
+ `
+ MATCH (badge:Badge {id: $badgeKey})-[reward:REWARDED]->(rewardedUser:User {id: $userId})
+ DELETE reward
+ RETURN rewardedUser
+ `,
+ {
+ badgeKey,
+ userId,
+ },
+ )
+ } catch (err) {
+ throw err
+ } finally {
+ session.close()
+ }
+ return user.toJson()
},
},
}
diff --git a/backend/src/schema/resolvers/rewards.spec.js b/backend/src/schema/resolvers/rewards.spec.js
index 2bdd9a39b..3b94e93aa 100644
--- a/backend/src/schema/resolvers/rewards.spec.js
+++ b/backend/src/schema/resolvers/rewards.spec.js
@@ -1,12 +1,19 @@
import { GraphQLClient } from 'graphql-request'
import Factory from '../../seed/factories'
-import { host, login } from '../../jest/helpers'
+import { host, login, gql } from '../../jest/helpers'
const factory = Factory()
+let user
+let badge
describe('rewards', () => {
+ const variables = {
+ from: 'indiegogo_en_rhino',
+ to: 'u1',
+ }
+
beforeEach(async () => {
- await factory.create('User', {
+ user = await factory.create('User', {
id: 'u1',
role: 'user',
email: 'user@example.org',
@@ -22,9 +29,8 @@ describe('rewards', () => {
role: 'admin',
email: 'admin@example.org',
})
- await factory.create('Badge', {
- id: 'b6',
- key: 'indiegogo_en_rhino',
+ badge = await factory.create('Badge', {
+ id: 'indiegogo_en_rhino',
type: 'crowdfunding',
status: 'permanent',
icon: '/img/badges/indiegogo_en_rhino.svg',
@@ -35,21 +41,19 @@ describe('rewards', () => {
await factory.cleanDatabase()
})
- describe('RewardBadge', () => {
- const mutation = `
- mutation(
- $from: ID!
- $to: ID!
- ) {
- reward(fromBadgeId: $from, toUserId: $to)
+ describe('reward', () => {
+ const mutation = gql`
+ mutation($from: ID!, $to: ID!) {
+ reward(badgeKey: $from, userId: $to) {
+ id
+ badges {
+ id
+ }
+ }
}
`
describe('unauthenticated', () => {
- const variables = {
- from: 'b6',
- to: 'u1',
- }
let client
it('throws authorization error', async () => {
@@ -65,74 +69,95 @@ describe('rewards', () => {
client = new GraphQLClient(host, { headers })
})
+ describe('badge for id does not exist', () => {
+ it('rejects with a telling error message', async () => {
+ await expect(
+ client.request(mutation, {
+ ...variables,
+ from: 'bullshit',
+ }),
+ ).rejects.toThrow("Couldn't find a badge with that id")
+ })
+ })
+
+ describe('user for id does not exist', () => {
+ it('rejects with a telling error message', async () => {
+ await expect(
+ client.request(mutation, {
+ ...variables,
+ to: 'bullshit',
+ }),
+ ).rejects.toThrow("Couldn't find a user with that id")
+ })
+ })
+
it('rewards a badge to user', async () => {
- const variables = {
- from: 'b6',
- to: 'u1',
- }
const expected = {
- reward: 'u1',
+ reward: {
+ id: 'u1',
+ badges: [{ id: 'indiegogo_en_rhino' }],
+ },
}
await expect(client.request(mutation, variables)).resolves.toEqual(expected)
})
+
it('rewards a second different badge to same user', async () => {
await factory.create('Badge', {
- id: 'b1',
- key: 'indiegogo_en_racoon',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_racoon',
icon: '/img/badges/indiegogo_en_racoon.svg',
})
- const variables = {
- from: 'b1',
- to: 'u1',
- }
+ const badges = [{ id: 'indiegogo_en_racoon' }, { id: 'indiegogo_en_rhino' }]
const expected = {
- reward: 'u1',
+ reward: {
+ id: 'u1',
+ badges: expect.arrayContaining(badges),
+ },
}
- await expect(client.request(mutation, variables)).resolves.toEqual(expected)
+ await client.request(mutation, variables)
+ await expect(
+ client.request(mutation, {
+ ...variables,
+ from: 'indiegogo_en_racoon',
+ }),
+ ).resolves.toEqual(expected)
})
+
it('rewards the same badge as well to another user', async () => {
- const variables1 = {
- from: 'b6',
- to: 'u1',
- }
- await client.request(mutation, variables1)
-
- const variables2 = {
- from: 'b6',
- to: 'u2',
- }
const expected = {
- reward: 'u2',
+ reward: {
+ id: 'u2',
+ badges: [{ id: 'indiegogo_en_rhino' }],
+ },
}
- await expect(client.request(mutation, variables2)).resolves.toEqual(expected)
+ await expect(
+ client.request(mutation, {
+ ...variables,
+ to: 'u2',
+ }),
+ ).resolves.toEqual(expected)
})
- it('returns the original reward if a reward is attempted a second time', async () => {
- const variables = {
- from: 'b6',
- to: 'u1',
- }
+
+ it('creates no duplicate reward relationships', async () => {
await client.request(mutation, variables)
await client.request(mutation, variables)
- const query = `{
- User( id: "u1" ) {
- badgesCount
+ const query = gql`
+ {
+ User(id: "u1") {
+ badgesCount
+ badges {
+ id
+ }
+ }
}
- }
`
- const expected = { User: [{ badgesCount: 1 }] }
+ const expected = { User: [{ badgesCount: 1, badges: [{ id: 'indiegogo_en_rhino' }] }] }
await expect(client.request(query)).resolves.toEqual(expected)
})
})
describe('authenticated moderator', () => {
- const variables = {
- from: 'b6',
- to: 'u1',
- }
let client
beforeEach(async () => {
const headers = await login({ email: 'moderator@example.org', password: '1234' })
@@ -147,27 +172,41 @@ describe('rewards', () => {
})
})
- describe('RemoveReward', () => {
+ describe('unreward', () => {
beforeEach(async () => {
- await factory.relate('User', 'Badges', { from: 'b6', to: 'u1' })
+ await user.relateTo(badge, 'rewarded')
})
- const variables = {
- from: 'b6',
- to: 'u1',
- }
- const expected = {
- unreward: 'u1',
- }
+ const expected = { unreward: { id: 'u1', badges: [] } }
- const mutation = `
- mutation(
- $from: ID!
- $to: ID!
- ) {
- unreward(fromBadgeId: $from, toUserId: $to)
+ const mutation = gql`
+ mutation($from: ID!, $to: ID!) {
+ unreward(badgeKey: $from, userId: $to) {
+ id
+ badges {
+ id
+ }
+ }
}
`
+ describe('check test setup', () => {
+ it('user has one badge', async () => {
+ const query = gql`
+ {
+ User(id: "u1") {
+ badgesCount
+ badges {
+ id
+ }
+ }
+ }
+ `
+ const expected = { User: [{ badgesCount: 1, badges: [{ id: 'indiegogo_en_rhino' }] }] }
+ const client = new GraphQLClient(host)
+ await expect(client.request(query)).resolves.toEqual(expected)
+ })
+ })
+
describe('unauthenticated', () => {
let client
@@ -188,12 +227,9 @@ describe('rewards', () => {
await expect(client.request(mutation, variables)).resolves.toEqual(expected)
})
- it('fails to remove a not existing badge from user', async () => {
+ it('does not crash when unrewarding multiple times', async () => {
await client.request(mutation, variables)
-
- await expect(client.request(mutation, variables)).rejects.toThrow(
- "Cannot read property 'id' of undefined",
- )
+ await expect(client.request(mutation, variables)).resolves.toEqual(expected)
})
})
diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js
index bacc86fbe..7ec35a08f 100644
--- a/backend/src/schema/resolvers/socialMedia.spec.js
+++ b/backend/src/schema/resolvers/socialMedia.spec.js
@@ -1,7 +1,6 @@
-import gql from 'graphql-tag'
import { GraphQLClient } from 'graphql-request'
import Factory from '../../seed/factories'
-import { host, login } from '../../jest/helpers'
+import { host, login, gql } from '../../jest/helpers'
const factory = Factory()
diff --git a/backend/src/schema/resolvers/user_management.js b/backend/src/schema/resolvers/user_management.js
index b62f9a609..7ed84586b 100644
--- a/backend/src/schema/resolvers/user_management.js
+++ b/backend/src/schema/resolvers/user_management.js
@@ -2,6 +2,9 @@ import encode from '../../jwt/encode'
import bcrypt from 'bcryptjs'
import { AuthenticationError } from 'apollo-server'
import { neo4jgraphql } from 'neo4j-graphql-js'
+import { neode } from '../../bootstrap/neo4j'
+
+const instance = neode()
export default {
Query: {
@@ -21,8 +24,8 @@ export default {
// }
const session = driver.session()
const result = await session.run(
- 'MATCH (user:User {email: $userEmail}) ' +
- 'RETURN user {.id, .slug, .name, .avatar, .email, .encryptedPassword, .role, .disabled} as user LIMIT 1',
+ 'MATCH (user:User)-[:PRIMARY_EMAIL]->(e:EmailAddress {email: $userEmail})' +
+ 'RETURN user {.id, .slug, .name, .avatar, .encryptedPassword, .role, .disabled, email:e.email} as user LIMIT 1',
{
userEmail: email,
},
@@ -46,41 +49,24 @@ export default {
}
},
changePassword: async (_, { oldPassword, newPassword }, { driver, user }) => {
- const session = driver.session()
- let result = await session.run(
- `MATCH (user:User {email: $userEmail})
- RETURN user {.id, .email, .encryptedPassword}`,
- {
- userEmail: user.email,
- },
- )
+ let currentUser = await instance.find('User', user.id)
- const [currentUser] = result.records.map(function(record) {
- return record.get('user')
- })
-
- if (!(await bcrypt.compareSync(oldPassword, currentUser.encryptedPassword))) {
+ const encryptedPassword = currentUser.get('encryptedPassword')
+ if (!(await bcrypt.compareSync(oldPassword, encryptedPassword))) {
throw new AuthenticationError('Old password is not correct')
}
- if (await bcrypt.compareSync(newPassword, currentUser.encryptedPassword)) {
+ if (await bcrypt.compareSync(newPassword, encryptedPassword)) {
throw new AuthenticationError('Old password and new password should be different')
- } else {
- const newEncryptedPassword = await bcrypt.hashSync(newPassword, 10)
- session.run(
- `MATCH (user:User {email: $userEmail})
- SET user.encryptedPassword = $newEncryptedPassword
- RETURN user
- `,
- {
- userEmail: user.email,
- newEncryptedPassword,
- },
- )
- session.close()
-
- return encode(currentUser)
}
+
+ const newEncryptedPassword = await bcrypt.hashSync(newPassword, 10)
+ await currentUser.update({
+ encryptedPassword: newEncryptedPassword,
+ updatedAt: new Date().toISOString(),
+ })
+
+ return encode(await currentUser.toJson())
},
},
}
diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js
index 2d9282b60..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)) {
@@ -65,6 +56,13 @@ export const hasOne = obj => {
export default {
Query: {
User: async (object, args, context, resolveInfo) => {
+ const { email } = args
+ if (email) {
+ const e = await instance.first('EmailAddress', { email })
+ let user = e.get('belongsTo')
+ user = await user.toJson()
+ return [user.node]
+ }
return neo4jgraphql(object, args, context, resolveInfo, false)
},
},
@@ -104,6 +102,14 @@ export default {
},
},
User: {
+ email: async (parent, params, context, resolveInfo) => {
+ if (typeof parent.email !== 'undefined') return parent.email
+ const { id } = parent
+ const statement = `MATCH(u:User {id: {id}})-[:PRIMARY_EMAIL]->(e:EmailAddress) RETURN e`
+ const result = await instance.cypher(statement, { id })
+ let [{ email }] = result.records.map(r => r.get('e').properties)
+ return email
+ },
...undefinedToNull([
'actorId',
'avatar',
@@ -139,7 +145,7 @@ export default {
organizationsCreated: '-[:CREATED_ORGA]->(related:Organization)',
organizationsOwned: '-[:OWNING_ORGA]->(related:Organization)',
categories: '-[:CATEGORIZED]->(related:Category)',
- badges: '-[:REWARDED]->(related:Badge)',
+ badges: '<-[:REWARDED]-(related:Badge)',
}),
},
}
diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js
index 6f9b6dd3d..fff6acadb 100644
--- a/backend/src/schema/resolvers/users.spec.js
+++ b/backend/src/schema/resolvers/users.spec.js
@@ -1,7 +1,6 @@
import { GraphQLClient } from 'graphql-request'
-import { login, host } from '../../jest/helpers'
import Factory from '../../seed/factories'
-import gql from 'graphql-tag'
+import { host, login, gql } from '../../jest/helpers'
const factory = Factory()
let client
@@ -147,7 +146,7 @@ describe('users', () => {
}
`
beforeEach(async () => {
- asAuthor = await factory.create('User', {
+ await factory.create('User', {
email: 'test@example.org',
password: '1234',
id: 'u343',
@@ -191,6 +190,7 @@ describe('users', () => {
describe('attempting to delete my own account', () => {
let expectedResponse
beforeEach(async () => {
+ asAuthor = Factory()
await asAuthor.authenticateAs({
email: 'test@example.org',
password: '1234',
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/src/schema/types/enum/BadgeStatus.gql b/backend/src/schema/types/enum/BadgeStatus.gql
deleted file mode 100644
index b109663b3..000000000
--- a/backend/src/schema/types/enum/BadgeStatus.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-enum BadgeStatus {
- permanent
- temporary
-}
\ No newline at end of file
diff --git a/backend/src/schema/types/enum/BadgeType.gql b/backend/src/schema/types/enum/BadgeType.gql
deleted file mode 100644
index eccf2e661..000000000
--- a/backend/src/schema/types/enum/BadgeType.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-enum BadgeType {
- role
- crowdfunding
-}
\ No newline at end of file
diff --git a/backend/src/schema/types/schema.gql b/backend/src/schema/types/schema.gql
index 261501600..492dd3966 100644
--- a/backend/src/schema/types/schema.gql
+++ b/backend/src/schema/types/schema.gql
@@ -28,8 +28,6 @@ type Mutation {
report(id: ID!, description: String): Report
disable(id: ID!): ID
enable(id: ID!): ID
- reward(fromBadgeId: ID!, toUserId: ID!): ID
- unreward(fromBadgeId: ID!, toUserId: ID!): ID
# Shout the given Type and ID
shout(id: ID!, type: ShoutTypeEnum): Boolean!
# Unshout the given Type and ID
diff --git a/backend/src/schema/types/schema_full.gql_ b/backend/src/schema/types/schema_full.gql_
deleted file mode 100644
index a581d287c..000000000
--- a/backend/src/schema/types/schema_full.gql_
+++ /dev/null
@@ -1,324 +0,0 @@
-scalar Upload
-
-type Query {
- isLoggedIn: Boolean!
- # Get the currently logged in User based on the given JWT Token
- currentUser: User
- # Get the latest Network Statistics
- statistics: Statistics!
- findPosts(filter: String!, limit: Int = 10): [Post]! @cypher(
- statement: """
- CALL db.index.fulltext.queryNodes('full_text_search', $filter)
- YIELD node as post, score
- MATCH (post)<-[:WROTE]-(user:User)
- WHERE score >= 0.2
- AND NOT user.deleted = true AND NOT user.disabled = true
- AND NOT post.deleted = true AND NOT post.disabled = true
- RETURN post
- LIMIT $limit
- """
- )
- CommentByPost(postId: ID!): [Comment]!
-}
-
-type Mutation {
- # Get a JWT Token for the given Email and password
- login(email: String!, password: String!): String!
- signup(email: String!, password: String!): Boolean!
- changePassword(oldPassword:String!, newPassword: String!): String!
- report(id: ID!, description: String): Report
- disable(id: ID!): ID
- enable(id: ID!): ID
- reward(fromBadgeId: ID!, toUserId: ID!): ID
- unreward(fromBadgeId: ID!, toUserId: ID!): ID
- # Shout the given Type and ID
- shout(id: ID!, type: ShoutTypeEnum): Boolean!
- # Unshout the given Type and ID
- unshout(id: ID!, type: ShoutTypeEnum): Boolean!
- # Follow the given Type and ID
- follow(id: ID!, type: FollowTypeEnum): Boolean!
- # Unfollow the given Type and ID
- unfollow(id: ID!, type: FollowTypeEnum): Boolean!
-}
-
-type Statistics {
- countUsers: Int!
- countPosts: Int!
- countComments: Int!
- countNotifications: Int!
- countOrganizations: Int!
- countProjects: Int!
- countInvites: Int!
- countFollows: Int!
- countShouts: Int!
-}
-
-type Notification {
- id: ID!
- read: Boolean,
- user: User @relation(name: "NOTIFIED", direction: "OUT")
- post: Post @relation(name: "NOTIFIED", direction: "IN")
- createdAt: String
-}
-
-scalar Date
-scalar Time
-scalar DateTime
-
-enum VisibilityEnum {
- public
- friends
- private
-}
-
-enum UserGroupEnum {
- admin
- moderator
- user
-}
-
-type Location {
- id: ID!
- name: String!
- nameEN: String
- nameDE: String
- nameFR: String
- nameNL: String
- nameIT: String
- nameES: String
- namePT: String
- namePL: String
- type: String!
- lat: Float
- lng: Float
- parent: Location @cypher(statement: "MATCH (this)-[:IS_IN]->(l:Location) RETURN l")
-}
-
-type User {
- id: ID!
- actorId: String
- name: String
- email: String!
- slug: String
- password: String!
- avatar: String
- avatarUpload: Upload
- deleted: Boolean
- disabled: Boolean
- disabledBy: User @relation(name: "DISABLED", direction: "IN")
- role: UserGroupEnum
- publicKey: String
- privateKey: String
-
- location: Location @cypher(statement: "MATCH (this)-[:IS_IN]->(l:Location) RETURN l")
- locationName: String
- about: String
- socialMedia: [SocialMedia]! @relation(name: "OWNED", direction: "OUT")
-
- createdAt: String
- updatedAt: String
-
- notifications(read: Boolean): [Notification]! @relation(name: "NOTIFIED", direction: "IN")
-
- friends: [User]! @relation(name: "FRIENDS", direction: "BOTH")
- friendsCount: Int! @cypher(statement: "MATCH (this)<-[:FRIENDS]->(r:User) RETURN COUNT(DISTINCT r)")
-
- following: [User]! @relation(name: "FOLLOWS", direction: "OUT")
- followingCount: Int! @cypher(statement: "MATCH (this)-[:FOLLOWS]->(r:User) RETURN COUNT(DISTINCT r)")
-
- followedBy: [User]! @relation(name: "FOLLOWS", direction: "IN")
- followedByCount: Int! @cypher(statement: "MATCH (this)<-[:FOLLOWS]-(r:User) RETURN COUNT(DISTINCT r)")
-
- # Is the currently logged in user following that user?
- followedByCurrentUser: Boolean! @cypher(
- statement: """
- MATCH (this)<-[:FOLLOWS]-(u:User {id: $cypherParams.currentUserId})
- RETURN COUNT(u) >= 1
- """
- )
-
- #contributions: [WrittenPost]!
- #contributions2(first: Int = 10, offset: Int = 0): [WrittenPost2]!
- # @cypher(
- # statement: "MATCH (this)-[w:WROTE]->(p:Post) RETURN p as Post, w.timestamp as timestamp"
- # )
- contributions: [Post]! @relation(name: "WROTE", direction: "OUT")
- contributionsCount: Int! @cypher(
- statement: """
- MATCH (this)-[:WROTE]->(r:Post)
- WHERE (NOT exists(r.deleted) OR r.deleted = false)
- AND (NOT exists(r.disabled) OR r.disabled = false)
- RETURN COUNT(r)
- """
- )
-
- comments: [Comment]! @relation(name: "WROTE", direction: "OUT")
- commentsCount: Int! @cypher(statement: "MATCH (this)-[:WROTE]->(r:Comment) WHERE NOT r.deleted = true AND NOT r.disabled = true RETURN COUNT(r)")
-
- shouted: [Post]! @relation(name: "SHOUTED", direction: "OUT")
- shoutedCount: Int! @cypher(statement: "MATCH (this)-[:SHOUTED]->(r:Post) WHERE NOT r.deleted = true AND NOT r.disabled = true RETURN COUNT(DISTINCT r)")
-
- organizationsCreated: [Organization] @relation(name: "CREATED_ORGA", direction: "OUT")
- organizationsOwned: [Organization] @relation(name: "OWNING_ORGA", direction: "OUT")
-
- blacklisted: [User]! @relation(name: "BLACKLISTED", direction: "OUT")
-
- categories: [Category]! @relation(name: "CATEGORIZED", direction: "OUT")
-
- badges: [Badge]! @relation(name: "REWARDED", direction: "IN")
- badgesCount: Int! @cypher(statement: "MATCH (this)<-[:REWARDED]-(r:Badge) RETURN COUNT(r)")
-}
-
-type Post {
- id: ID!
- activityId: String
- objectId: String
- author: User @relation(name: "WROTE", direction: "IN")
- title: String!
- slug: String
- content: String!
- contentExcerpt: String
- image: String
- imageUpload: Upload
- visibility: VisibilityEnum
- deleted: Boolean
- disabled: Boolean
- disabledBy: User @relation(name: "DISABLED", direction: "IN")
- createdAt: String
- updatedAt: String
-
- relatedContributions: [Post]! @cypher(
- statement: """
- MATCH (this)-[:TAGGED|CATEGORIZED]->(categoryOrTag)<-[:TAGGED|CATEGORIZED]-(post:Post)
- RETURN DISTINCT post
- LIMIT 10
- """
- )
-
- tags: [Tag]! @relation(name: "TAGGED", direction: "OUT")
- categories: [Category]! @relation(name: "CATEGORIZED", direction: "OUT")
-
- comments: [Comment]! @relation(name: "COMMENTS", direction: "IN")
- commentsCount: Int! @cypher(statement: "MATCH (this)<-[:COMMENTS]-(r:Comment) WHERE NOT r.deleted = true AND NOT r.disabled = true RETURN COUNT(r)")
-
- shoutedBy: [User]! @relation(name: "SHOUTED", direction: "IN")
- shoutedCount: Int! @cypher(statement: "MATCH (this)<-[:SHOUTED]-(r:User) WHERE NOT r.deleted = true AND NOT r.disabled = true RETURN COUNT(DISTINCT r)")
-
- # Has the currently logged in user shouted that post?
- shoutedByCurrentUser: Boolean! @cypher(
- statement: """
- MATCH (this)<-[:SHOUTED]-(u:User {id: $cypherParams.currentUserId})
- RETURN COUNT(u) >= 1
- """
- )
-}
-
-type Comment {
- id: ID!
- activityId: String
- postId: ID
- author: User @relation(name: "WROTE", direction: "IN")
- content: String!
- contentExcerpt: String
- post: Post @relation(name: "COMMENTS", direction: "OUT")
- createdAt: String
- updatedAt: String
- deleted: Boolean
- disabled: Boolean
- disabledBy: User @relation(name: "DISABLED", direction: "IN")
-}
-
-type Report {
- id: ID!
- submitter: User @relation(name: "REPORTED", direction: "IN")
- description: String
- type: String! @cypher(statement: "MATCH (resource)<-[:REPORTED]-(this) RETURN labels(resource)[0]")
- createdAt: String
- comment: Comment @relation(name: "REPORTED", direction: "OUT")
- post: Post @relation(name: "REPORTED", direction: "OUT")
- user: User @relation(name: "REPORTED", direction: "OUT")
-}
-
-type Category {
- id: ID!
- name: String!
- slug: String
- icon: String!
- posts: [Post]! @relation(name: "CATEGORIZED", direction: "IN")
- postCount: Int! @cypher(statement: "MATCH (this)<-[:CATEGORIZED]-(r:Post) RETURN COUNT(r)")
-}
-
-type Badge {
- id: ID!
- key: String!
- type: BadgeTypeEnum!
- status: BadgeStatusEnum!
- icon: String!
-
- rewarded: [User]! @relation(name: "REWARDED", direction: "OUT")
-}
-
-enum BadgeTypeEnum {
- role
- crowdfunding
-}
-enum BadgeStatusEnum {
- permanent
- temporary
-}
-enum ShoutTypeEnum {
- Post
- Organization
- Project
-}
-enum FollowTypeEnum {
- User
- Organization
- Project
-}
-
-type Reward {
- id: ID!
- user: User @relation(name: "REWARDED", direction: "IN")
- rewarderId: ID
- createdAt: String
- badge: Badge @relation(name: "REWARDED", direction: "OUT")
-}
-
-type Organization {
- id: ID!
- createdBy: User @relation(name: "CREATED_ORGA", direction: "IN")
- ownedBy: [User] @relation(name: "OWNING_ORGA", direction: "IN")
- name: String!
- slug: String
- description: String!
- descriptionExcerpt: String
- deleted: Boolean
- disabled: Boolean
-
- tags: [Tag]! @relation(name: "TAGGED", direction: "OUT")
- categories: [Category]! @relation(name: "CATEGORIZED", direction: "OUT")
-}
-
-type Tag {
- id: ID!
- name: String!
- taggedPosts: [Post]! @relation(name: "TAGGED", direction: "IN")
- taggedOrganizations: [Organization]! @relation(name: "TAGGED", direction: "IN")
- taggedCount: Int! @cypher(statement: "MATCH (this)<-[:TAGGED]-(p) RETURN COUNT(DISTINCT p)")
- taggedCountUnique: Int! @cypher(statement: "MATCH (this)<-[:TAGGED]-(p)<-[:WROTE]-(u:User) RETURN COUNT(DISTINCT u)")
- deleted: Boolean
- disabled: Boolean
-}
-
-type SharedInboxEndpoint {
- id: ID!
- uri: String
-}
-
-type SocialMedia {
- id: ID!
- url: String
- ownedBy: [User]! @relation(name: "OWNED", direction: "IN")
-}
-
diff --git a/backend/src/schema/types/type/Badge.gql b/backend/src/schema/types/type/Badge.gql
index 68c5d5707..99015a518 100644
--- a/backend/src/schema/types/type/Badge.gql
+++ b/backend/src/schema/types/type/Badge.gql
@@ -1,6 +1,5 @@
type Badge {
id: ID!
- key: String!
type: BadgeType!
status: BadgeStatus!
icon: String!
@@ -10,4 +9,23 @@ type Badge {
updatedAt: String
rewarded: [User]! @relation(name: "REWARDED", direction: "OUT")
-}
\ No newline at end of file
+}
+
+enum BadgeStatus {
+ permanent
+ temporary
+}
+
+enum BadgeType {
+ role
+ crowdfunding
+}
+
+type Query {
+ Badge: [Badge]
+}
+
+type Mutation {
+ reward(badgeKey: ID!, userId: ID!): User
+ unreward(badgeKey: ID!, userId: ID!): User
+}
diff --git a/backend/src/schema/types/type/Comment.gql b/backend/src/schema/types/type/Comment.gql
index 441fba179..4abebcba6 100644
--- a/backend/src/schema/types/type/Comment.gql
+++ b/backend/src/schema/types/type/Comment.gql
@@ -24,7 +24,7 @@ type Mutation {
): Comment
UpdateComment(
id: ID!
- content: String
+ content: String!
contentExcerpt: String
deleted: Boolean
disabled: Boolean
diff --git a/backend/src/schema/types/type/User.gql b/backend/src/schema/types/type/User.gql
index e5c43aad4..81bf3e782 100644
--- a/backend/src/schema/types/type/User.gql
+++ b/backend/src/schema/types/type/User.gql
@@ -2,7 +2,7 @@ type User {
id: ID!
actorId: String
name: String
- email: String!
+ email: String! @cypher(statement: "MATCH (this)-[:PRIMARY_EMAIL]->(e:EmailAddress) RETURN e.email")
slug: String!
avatar: String
coverImg: String
@@ -81,6 +81,9 @@ type User {
input _UserFilter {
AND: [_UserFilter!]
OR: [_UserFilter!]
+ name_contains: String
+ about_contains: String
+ slug_contains: String
id: ID
id_not: ID
id_in: [ID!]
diff --git a/backend/src/seed/factories/badges.js b/backend/src/seed/factories/badges.js
index 6414e9f36..5f0482460 100644
--- a/backend/src/seed/factories/badges.js
+++ b/backend/src/seed/factories/badges.js
@@ -1,28 +1,15 @@
-import uuid from 'uuid/v4'
-
-export default function(params) {
- const {
- id = uuid(),
- key = '',
- type = 'crowdfunding',
- status = 'permanent',
- icon = '/img/badges/indiegogo_en_panda.svg',
- } = params
-
+export default function create() {
return {
- mutation: `
- mutation(
- $id: ID
- $key: String!
- $type: BadgeType!
- $status: BadgeStatus!
- $icon: String!
- ) {
- CreateBadge(id: $id, key: $key, type: $type, status: $status, icon: $icon) {
- id
- }
+ factory: async ({ args, neodeInstance }) => {
+ const defaults = {
+ type: 'crowdfunding',
+ status: 'permanent',
}
- `,
- variables: { id, key, type, status, icon },
+ args = {
+ ...defaults,
+ ...args,
+ }
+ return neodeInstance.create('Badge', args)
+ },
}
}
diff --git a/backend/src/seed/factories/index.js b/backend/src/seed/factories/index.js
index b2cf2de45..e841b0beb 100644
--- a/backend/src/seed/factories/index.js
+++ b/backend/src/seed/factories/index.js
@@ -73,6 +73,7 @@ export default function Factory(options = {}) {
const { factory, mutation, variables } = this.factories[node](args)
if (factory) {
this.lastResponse = await factory({ args, neodeInstance })
+ return this.lastResponse
} else {
this.lastResponse = await this.graphQLClient.request(mutation, variables)
}
diff --git a/backend/src/seed/factories/users.js b/backend/src/seed/factories/users.js
index ffe8e7a39..af1699253 100644
--- a/backend/src/seed/factories/users.js
+++ b/backend/src/seed/factories/users.js
@@ -3,7 +3,7 @@ import uuid from 'uuid/v4'
import encryptPassword from '../../helpers/encryptPassword'
import slugify from 'slug'
-export default function create(params) {
+export default function create() {
return {
factory: async ({ args, neodeInstance }) => {
const defaults = {
@@ -22,7 +22,10 @@ export default function create(params) {
}
args = await encryptPassword(args)
const user = await neodeInstance.create('User', args)
- return user.toJson()
+ const email = await neodeInstance.create('EmailAddress', { email: args.email })
+ await user.relateTo(email, 'primaryEmail')
+ await email.relateTo(user, 'belongsTo')
+ return user
},
}
}
diff --git a/backend/src/seed/seed-db.js b/backend/src/seed/seed-db.js
index 18eefb76f..8f693cfd3 100644
--- a/backend/src/seed/seed-db.js
+++ b/backend/src/seed/seed-db.js
@@ -5,52 +5,42 @@ import Factory from './factories'
;(async function() {
try {
const f = Factory()
- await Promise.all([
+ const [racoon, rabbit, wolf, bear, turtle, rhino] = await Promise.all([
f.create('Badge', {
- id: 'b1',
- key: 'indiegogo_en_racoon',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_racoon',
icon: '/img/badges/indiegogo_en_racoon.svg',
}),
f.create('Badge', {
- id: 'b2',
- key: 'indiegogo_en_rabbit',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_rabbit',
icon: '/img/badges/indiegogo_en_rabbit.svg',
}),
f.create('Badge', {
- id: 'b3',
- key: 'indiegogo_en_wolf',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_wolf',
icon: '/img/badges/indiegogo_en_wolf.svg',
}),
f.create('Badge', {
- id: 'b4',
- key: 'indiegogo_en_bear',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_bear',
icon: '/img/badges/indiegogo_en_bear.svg',
}),
f.create('Badge', {
- id: 'b5',
- key: 'indiegogo_en_turtle',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_turtle',
icon: '/img/badges/indiegogo_en_turtle.svg',
}),
f.create('Badge', {
- id: 'b6',
- key: 'indiegogo_en_rhino',
- type: 'crowdfunding',
- status: 'permanent',
+ id: 'indiegogo_en_rhino',
icon: '/img/badges/indiegogo_en_rhino.svg',
}),
])
- await Promise.all([
+ const [
+ peterLustig,
+ bobDerBaumeister,
+ jennyRostock,
+ tick, // eslint-disable-line no-unused-vars
+ trick, // eslint-disable-line no-unused-vars
+ track, // eslint-disable-line no-unused-vars
+ dagobert,
+ ] = await Promise.all([
f.create('User', {
id: 'u1',
name: 'Peter Lustig',
@@ -123,30 +113,16 @@ import Factory from './factories'
])
await Promise.all([
- f.relate('User', 'Badges', {
- from: 'b6',
- to: 'u1',
- }),
- f.relate('User', 'Badges', {
- from: 'b5',
- to: 'u2',
- }),
- f.relate('User', 'Badges', {
- from: 'b4',
- to: 'u3',
- }),
- f.relate('User', 'Badges', {
- from: 'b3',
- to: 'u4',
- }),
- f.relate('User', 'Badges', {
- from: 'b2',
- to: 'u5',
- }),
- f.relate('User', 'Badges', {
- from: 'b1',
- to: 'u6',
- }),
+ peterLustig.relateTo(racoon, 'rewarded'),
+ peterLustig.relateTo(rhino, 'rewarded'),
+ peterLustig.relateTo(wolf, 'rewarded'),
+ bobDerBaumeister.relateTo(racoon, 'rewarded'),
+ bobDerBaumeister.relateTo(turtle, 'rewarded'),
+ jennyRostock.relateTo(bear, 'rewarded'),
+ dagobert.relateTo(rabbit, 'rewarded'),
+ ])
+
+ await Promise.all([
f.relate('User', 'Friends', {
from: 'u1',
to: 'u2',
@@ -707,6 +683,13 @@ import Factory from './factories'
to: 'o3',
}),
])
+
+ await Promise.all(
+ [...Array(30).keys()].map(i => {
+ return f.create('User')
+ }),
+ )
+
/* eslint-disable-next-line no-console */
console.log('Seeded Data...')
process.exit(0)
diff --git a/backend/src/server.js b/backend/src/server.js
index 7692f0d2c..d58ecd277 100644
--- a/backend/src/server.js
+++ b/backend/src/server.js
@@ -1,6 +1,6 @@
import express from 'express'
import helmet from 'helmet'
-import { GraphQLServer } from 'graphql-yoga'
+import { ApolloServer } from 'apollo-server-express'
import CONFIG, { requiredConfigs } from './config'
import mocks from './mocks'
import middleware from './middleware'
@@ -20,28 +20,30 @@ const driver = getDriver()
const createServer = options => {
const defaults = {
- context: async ({ request }) => {
- const user = await decode(driver, request.headers.authorization)
+ context: async ({ req }) => {
+ const user = await decode(driver, req.headers.authorization)
return {
driver,
user,
- req: request,
+ req,
cypherParams: {
currentUserId: user ? user.id : null,
},
}
},
- schema,
+ schema: middleware(schema),
debug: CONFIG.DEBUG,
tracing: CONFIG.DEBUG,
- middlewares: middleware(schema),
mocks: CONFIG.MOCKS ? mocks : false,
}
- const server = new GraphQLServer(Object.assign({}, defaults, options))
+ const server = new ApolloServer(Object.assign({}, defaults, options))
- server.express.use(helmet())
- server.express.use(express.static('public'))
- return server
+ const app = express()
+ app.use(helmet())
+ app.use(express.static('public'))
+ server.applyMiddleware({ app, path: '/' })
+
+ return { server, app }
}
export default createServer
diff --git a/backend/src/server.spec.js b/backend/src/server.spec.js
new file mode 100644
index 000000000..6d4ef546d
--- /dev/null
+++ b/backend/src/server.spec.js
@@ -0,0 +1,43 @@
+import { createTestClient } from 'apollo-server-testing'
+import createServer from './server'
+
+/**
+ * This file is for demonstration purposes. It does not really test the
+ * `isLoggedIn` query but demonstrates how we can use `apollo-server-testing`.
+ * All we need to do is to get an instance of `ApolloServer` and maybe we want
+ * stub out `context` as shown below.
+ *
+ */
+
+let user
+let action
+describe('isLoggedIn', () => {
+ beforeEach(() => {
+ action = async () => {
+ const { server } = createServer({
+ context: () => {
+ return {
+ user,
+ }
+ },
+ })
+ const { query } = createTestClient(server)
+
+ const isLoggedIn = `{ isLoggedIn }`
+ return query({ query: isLoggedIn })
+ }
+ })
+
+ it('returns false', async () => {
+ const expected = expect.objectContaining({ data: { isLoggedIn: false } })
+ await expect(action()).resolves.toEqual(expected)
+ })
+
+ describe('when authenticated', () => {
+ it('returns true', async () => {
+ user = { id: '123' }
+ const expected = expect.objectContaining({ data: { isLoggedIn: true } })
+ await expect(action()).resolves.toEqual(expected)
+ })
+ })
+})
diff --git a/backend/yarn.lock b/backend/yarn.lock
index d34e05c38..b210239bc 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -9,21 +9,21 @@
dependencies:
apollo-env "0.5.1"
-"@apollographql/graphql-playground-html@1.6.20":
- version "1.6.20"
- resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.20.tgz#bf9f2acdf319c0959fad8ec1239741dd2ead4e8d"
- integrity sha512-3LWZa80HcP70Pl+H4KhLDJ7S0px+9/c8GTXdl6SpunRecUaB27g/oOQnAjNHLHdbWuGE0uyqcuGiTfbKB3ilaQ==
+"@apollographql/graphql-playground-html@1.6.24":
+ version "1.6.24"
+ resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz#3ce939cb127fb8aaa3ffc1e90dff9b8af9f2e3dc"
+ integrity sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ==
-"@babel/cli@~7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.5.0.tgz#f403c930692e28ecfa3bf02a9e7562b474f38271"
- integrity sha512-qNH55fWbKrEsCwID+Qc/3JDPnsSGpIIiMDbppnR8Z6PxLAqMQCFNqBctkIkBrMH49Nx+qqVTrHRWUR+ho2k+qQ==
+"@babel/cli@~7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.5.5.tgz#bdb6d9169e93e241a08f5f7b0265195bf38ef5ec"
+ integrity sha512-UHI+7pHv/tk9g6WXQKYz+kmXTI77YtuY3vqC59KIqcoWEjsJJSG6rAxKaLsgj3LDyadsPrCB929gVOKM6Hui0w==
dependencies:
commander "^2.8.1"
convert-source-map "^1.1.0"
fs-readdir-recursive "^1.1.0"
glob "^7.0.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
mkdirp "^0.5.1"
output-file-sync "^2.0.0"
slash "^2.0.0"
@@ -31,41 +31,41 @@
optionalDependencies:
chokidar "^2.0.4"
-"@babel/code-frame@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
- integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+ integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
dependencies:
"@babel/highlight" "^7.0.0"
-"@babel/core@^7.1.0", "@babel/core@~7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.4.tgz#4c32df7ad5a58e9ea27ad025c11276324e0b4ddd"
- integrity sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ==
+"@babel/core@^7.1.0", "@babel/core@~7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
+ integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/generator" "^7.5.0"
- "@babel/helpers" "^7.5.4"
- "@babel/parser" "^7.5.0"
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
+ "@babel/helpers" "^7.5.5"
+ "@babel/parser" "^7.5.5"
"@babel/template" "^7.4.4"
- "@babel/traverse" "^7.5.0"
- "@babel/types" "^7.5.0"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
convert-source-map "^1.1.0"
debug "^4.1.0"
json5 "^2.1.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.0.0", "@babel/generator@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a"
- integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==
+"@babel/generator@^7.0.0", "@babel/generator@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
+ integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
dependencies:
- "@babel/types" "^7.5.0"
+ "@babel/types" "^7.5.5"
jsesc "^2.5.1"
- lodash "^4.17.11"
+ lodash "^4.17.13"
source-map "^0.5.0"
trim-right "^1.0.1"
@@ -93,14 +93,14 @@
"@babel/traverse" "^7.4.4"
"@babel/types" "^7.4.4"
-"@babel/helper-define-map@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a"
- integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==
+"@babel/helper-define-map@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
+ integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
dependencies:
"@babel/helper-function-name" "^7.1.0"
- "@babel/types" "^7.4.4"
- lodash "^4.17.11"
+ "@babel/types" "^7.5.5"
+ lodash "^4.17.13"
"@babel/helper-explode-assignable-expression@^7.1.0":
version "7.1.0"
@@ -133,12 +133,12 @@
dependencies:
"@babel/types" "^7.4.4"
-"@babel/helper-member-expression-to-functions@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
- integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
+"@babel/helper-member-expression-to-functions@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
+ integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.5.5"
"@babel/helper-module-imports@^7.0.0":
version "7.0.0"
@@ -208,25 +208,15 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.0.0"
-"@babel/helper-replace-supers@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362"
- integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==
+"@babel/helper-replace-supers@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
+ integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-member-expression-to-functions" "^7.5.5"
"@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
-
-"@babel/helper-replace-supers@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27"
- integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==
- dependencies:
- "@babel/helper-member-expression-to-functions" "^7.0.0"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
"@babel/helper-simple-access@^7.1.0":
version "7.1.0"
@@ -260,14 +250,14 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.2.0"
-"@babel/helpers@^7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.4.tgz#2f00608aa10d460bde0ccf665d6dcf8477357cf0"
- integrity sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow==
+"@babel/helpers@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e"
+ integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==
dependencies:
"@babel/template" "^7.4.4"
- "@babel/traverse" "^7.5.0"
- "@babel/types" "^7.5.0"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
"@babel/highlight@^7.0.0":
version "7.0.0"
@@ -278,22 +268,22 @@
esutils "^2.0.2"
js-tokens "^4.0.0"
-"@babel/node@~7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.5.0.tgz#bcc5a286317ad771703889fb658e1f768c0a2a2e"
- integrity sha512-VBlCrbJp7HDrKt4HRbtfq4Rs/XjBokvkfxXRQs4qA1C6eV3JycSOMELx4BFTPFRd9QnNA4PsIRfnvJqe/3tHow==
+"@babel/node@~7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.5.5.tgz#5db48a3bcee64d9eda6474f2a0a55b235d0438b5"
+ integrity sha512-xsW6il+yY+lzXMsQuvIJNA7tU8ix/f4G6bDt4DrnCkVpsR6clk9XgEbp7QF+xGNDdoD7M7QYokCH83pm+UjD0w==
dependencies:
"@babel/polyfill" "^7.0.0"
- "@babel/register" "^7.0.0"
+ "@babel/register" "^7.5.5"
commander "^2.8.1"
- lodash "^4.17.11"
+ lodash "^4.17.13"
node-environment-flags "^1.0.5"
v8flags "^3.1.1"
-"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7"
- integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA==
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
+ integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
"@babel/plugin-proposal-async-generator-functions@^7.2.0":
version "7.2.0"
@@ -320,10 +310,10 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-json-strings" "^7.2.0"
-"@babel/plugin-proposal-object-rest-spread@^7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz#250de35d867ce8260a31b1fdac6c4fc1baa99331"
- integrity sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA==
+"@babel/plugin-proposal-object-rest-spread@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58"
+ integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-object-rest-spread" "^7.2.0"
@@ -418,25 +408,25 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-block-scoping@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d"
- integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==
+"@babel/plugin-transform-block-scoping@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce"
+ integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
-"@babel/plugin-transform-classes@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6"
- integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==
+"@babel/plugin-transform-classes@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
+ integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-define-map" "^7.4.4"
+ "@babel/helper-define-map" "^7.5.5"
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-optimise-call-expression" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.4.4"
+ "@babel/helper-replace-supers" "^7.5.5"
"@babel/helper-split-export-declaration" "^7.4.4"
globals "^11.1.0"
@@ -557,13 +547,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-object-super@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598"
- integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==
+"@babel/plugin-transform-object-super@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
+ integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.1.0"
+ "@babel/helper-replace-supers" "^7.5.5"
"@babel/plugin-transform-parameters@^7.4.4":
version "7.4.4"
@@ -649,17 +639,17 @@
core-js "^2.5.7"
regenerator-runtime "^0.12.0"
-"@babel/preset-env@~7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.4.tgz#64bc15041a3cbb0798930319917e70fcca57713d"
- integrity sha512-hFnFnouyRNiH1rL8YkX1ANCNAUVC8Djwdqfev8i1415tnAG+7hlA5zhZ0Q/3Q5gkop4HioIPbCEWAalqcbxRoQ==
+"@babel/preset-env@~7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a"
+ integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-proposal-async-generator-functions" "^7.2.0"
"@babel/plugin-proposal-dynamic-import" "^7.5.0"
"@babel/plugin-proposal-json-strings" "^7.2.0"
- "@babel/plugin-proposal-object-rest-spread" "^7.5.4"
+ "@babel/plugin-proposal-object-rest-spread" "^7.5.5"
"@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
"@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
"@babel/plugin-syntax-async-generators" "^7.2.0"
@@ -670,8 +660,8 @@
"@babel/plugin-transform-arrow-functions" "^7.2.0"
"@babel/plugin-transform-async-to-generator" "^7.5.0"
"@babel/plugin-transform-block-scoped-functions" "^7.2.0"
- "@babel/plugin-transform-block-scoping" "^7.4.4"
- "@babel/plugin-transform-classes" "^7.4.4"
+ "@babel/plugin-transform-block-scoping" "^7.5.5"
+ "@babel/plugin-transform-classes" "^7.5.5"
"@babel/plugin-transform-computed-properties" "^7.2.0"
"@babel/plugin-transform-destructuring" "^7.5.0"
"@babel/plugin-transform-dotall-regex" "^7.4.4"
@@ -687,7 +677,7 @@
"@babel/plugin-transform-modules-umd" "^7.2.0"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5"
"@babel/plugin-transform-new-target" "^7.4.4"
- "@babel/plugin-transform-object-super" "^7.2.0"
+ "@babel/plugin-transform-object-super" "^7.5.5"
"@babel/plugin-transform-parameters" "^7.4.4"
"@babel/plugin-transform-property-literals" "^7.2.0"
"@babel/plugin-transform-regenerator" "^7.4.5"
@@ -698,21 +688,21 @@
"@babel/plugin-transform-template-literals" "^7.4.4"
"@babel/plugin-transform-typeof-symbol" "^7.2.0"
"@babel/plugin-transform-unicode-regex" "^7.4.4"
- "@babel/types" "^7.5.0"
+ "@babel/types" "^7.5.5"
browserslist "^4.6.0"
core-js-compat "^3.1.1"
invariant "^2.2.2"
js-levenshtein "^1.1.3"
semver "^5.5.0"
-"@babel/register@^7.0.0", "@babel/register@~7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23"
- integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==
+"@babel/register@^7.5.5", "@babel/register@~7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.5.5.tgz#40fe0d474c8c8587b28d6ae18a03eddad3dac3c1"
+ integrity sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==
dependencies:
core-js "^3.0.0"
find-cache-dir "^2.0.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
mkdirp "^0.5.1"
pirates "^4.0.0"
source-map-support "^0.5.9"
@@ -740,28 +730,28 @@
"@babel/parser" "^7.4.4"
"@babel/types" "^7.4.4"
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485"
- integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
+ integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/generator" "^7.5.0"
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.5.0"
- "@babel/types" "^7.5.0"
+ "@babel/parser" "^7.5.5"
+ "@babel/types" "^7.5.5"
debug "^4.1.0"
globals "^11.1.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab"
- integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
+ integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
dependencies:
esutils "^2.0.2"
- lodash "^4.17.11"
+ lodash "^4.17.13"
to-fast-properties "^2.0.0"
"@cnakazawa/watch@^1.0.3":
@@ -787,7 +777,7 @@
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.0.1.tgz#9712fa2ad124ac64668ab06ba847b1eaf83a03fd"
integrity sha512-cctMYH5RLbElaUpZn3IJaUj9QNQD8iXDnl7xNY6KB1aFD2ciJrwpo3kvZowIT75uA+silJFDnSR2kGakALUymg==
-"@hapi/joi@^15.1.0":
+"@hapi/joi@^15.0.3", "@hapi/joi@^15.1.0":
version "15.1.0"
resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.0.tgz#940cb749b5c55c26ab3b34ce362e82b6162c8e7a"
integrity sha512-n6kaRQO8S+kepUTbXL9O/UOL788Odqs38/VOfoCrATDtTvyfiO3fgjlSRaNkHabpTLgM7qru9ifqXlXbXk8SeQ==
@@ -955,6 +945,66 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^12.0.9"
+"@kamilkisiela/graphql-tools@4.0.6":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@kamilkisiela/graphql-tools/-/graphql-tools-4.0.6.tgz#6dcf4d18bedaf34f6ab1d5bad2414e530d0875d1"
+ integrity sha512-IPWa+dOFCE4zaCsrJrAMp7yWXnfOZLNhqoMEOmn958WkLM0mmsDc/W/Rh7/7xopIT6P0oizb6/N1iH5HnNXOUA==
+ dependencies:
+ apollo-link "^1.2.3"
+ apollo-utilities "^1.0.1"
+ deprecated-decorator "^0.1.6"
+ iterall "^1.1.3"
+ uuid "^3.1.0"
+
+"@metascraper/helpers@^4.10.2":
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-4.10.2.tgz#864e49c71468548441f3a1ab68fdb2913855821b"
+ integrity sha512-l2IyF2X4ytz5Mj/TaVenmjEhEZCCj+Qb1PnIbW10Kas/qg0O58x5hBAHsszkSWQSx/OvnDvT2Mpft77qcBa77g==
+ dependencies:
+ audio-extensions "0.0.0"
+ chrono-node "~1.3.11"
+ condense-whitespace "~1.0.0"
+ file-extension "~4.0.5"
+ image-extensions "~1.1.0"
+ is-relative-url "~2.0.0"
+ is-uri "~1.2.0"
+ iso-639-3 "~1.1.0"
+ isostring "0.0.1"
+ lodash "~4.17.11"
+ mime-types "~2.1.22"
+ normalize-url "~4.2.0"
+ smartquotes "~2.3.1"
+ title "~3.4.1"
+ truncate "~2.0.1"
+ url-regex "~4.1.1"
+ video-extensions "~1.1.0"
+
+"@metascraper/helpers@^5.6.3":
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.6.3.tgz#88d3d3a174f94ccb617145cb9f60c999b57d9b60"
+ integrity sha512-FWqQmh+sZI5JRxJHVPPzBjilgZCqKWDFSo/eqRIgLLW/5kB79uuX4aseSTep1JpXUAcD5F/Z0KZYQl4JTbTopA==
+ dependencies:
+ audio-extensions "0.0.0"
+ chrono-node "~1.3.11"
+ condense-whitespace "~2.0.0"
+ entities "~2.0.0"
+ file-extension "~4.0.5"
+ has-values "~2.0.1"
+ image-extensions "~1.1.0"
+ is-relative-url "~3.0.0"
+ is-uri "~1.2.0"
+ iso-639-3 "~1.2.0"
+ isostring "0.0.1"
+ lodash "~4.17.15"
+ mem "~5.1.1"
+ mime-types "~2.1.24"
+ normalize-url "~4.3.0"
+ smartquotes "~2.3.1"
+ title "~3.4.1"
+ truncate "~2.1.0"
+ url-regex "~5.0.0"
+ video-extensions "~1.1.0"
+
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -1008,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"
@@ -1084,7 +1146,7 @@
"@types/node" "*"
"@types/range-parser" "*"
-"@types/express@*", "@types/express@4.17.0", "@types/express@^4.11.1":
+"@types/express@*", "@types/express@4.17.0":
version "4.17.0"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287"
integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==
@@ -1093,15 +1155,14 @@
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
-"@types/graphql-deduplicator@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@types/graphql-deduplicator/-/graphql-deduplicator-2.0.0.tgz#9e577b8f3feb3d067b0ca756f4a1fb356d533922"
- integrity sha512-swUwj5hWF1yFzbUXStLJrUa0ksAt11B8+SwhsAjQAX0LYJ1LLioAyuDcJ9bovWbsNzIXJYXLvljSPQw8nR728w==
-
-"@types/graphql@^14.0.0":
- version "14.0.3"
- resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.3.tgz#389e2e5b83ecdb376d9f98fae2094297bc112c1c"
- integrity sha512-TcFkpEjcQK7w8OcrQcd7iIBPjU0rdyi3ldj6d0iJ4PPSzbWqPBvXj9KSwO14hTOX2dm9RoiH7VuxksJLNYdXUQ==
+"@types/glob@7.1.1":
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+ integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+ dependencies:
+ "@types/events" "*"
+ "@types/minimatch" "*"
+ "@types/node" "*"
"@types/istanbul-lib-coverage@*":
version "2.0.1"
@@ -1128,6 +1189,11 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
+"@types/json-schema@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
+ integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+
"@types/long@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
@@ -1138,6 +1204,11 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b"
integrity sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==
+"@types/minimatch@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
"@types/node@*", "@types/node@^10.1.0":
version "10.12.18"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
@@ -1174,21 +1245,33 @@
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0"
integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA==
-"@types/yup@0.26.21":
- version "0.26.21"
- resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.26.21.tgz#bfca27a02a0631495bfd25b6c63647a125e6944e"
- integrity sha512-1C45M7hZrVsl8bXxYV01bitRp0r35djt+eX5HWFH3NdH+8ejqta3KM7rmQLRLrupkhF7jRkAtXl2EgDsriIqwA==
-
-"@types/zen-observable@^0.5.3":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.4.tgz#b863a4191e525206819e008097ebf0fb2e3a1cdc"
- integrity sha512-sW6xN96wUak4tgc89d0tbTg7QDGYhGv5hvQIS6h4mRCd8h2btiZ80loPU8cyLwsBbA4ZeQt0FjvUhJ4rNhdsGg==
+"@types/yup@0.26.22":
+ version "0.26.22"
+ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.26.22.tgz#66da181bfddaf797192f5fc2795583e033568407"
+ integrity sha512-AhUPifCc7j2BEfp+wye3Mj7v3mMhbtu5BbO7n0zpwC/NVSETc8+MHENRmoxjE8wLC8AmFr5+uEhg5cvqusaRFQ==
"@types/zen-observable@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
+"@typescript-eslint/experimental-utils@^1.13.0":
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e"
+ integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "1.13.0"
+ eslint-scope "^4.0.0"
+
+"@typescript-eslint/typescript-estree@1.13.0":
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e"
+ integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==
+ dependencies:
+ lodash.unescape "4.0.1"
+ semver "5.5.0"
+
"@wry/context@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.4.0.tgz#8a8718408e4dd0514a0f8f4231bb4b87130b34e3"
@@ -1281,6 +1364,22 @@ activitystreams-context@>=3.0.0, activitystreams-context@^3.0.0:
resolved "https://registry.yarnpkg.com/activitystreams-context/-/activitystreams-context-3.1.0.tgz#28334e129f17cfb937e8c702c52c1bcb1d2830c7"
integrity sha512-KBQ+igwf1tezMXGVw5MvRSEm0gp97JI1hTZ45I6MEkWv25lEgNoA9L6wqfaOiCX8wnMRWw9pwRsPZKypdtxAtg==
+aggregate-error@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79"
+ integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^3.2.0"
+
+aggregate-error@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-1.0.0.tgz#888344dad0220a72e3af50906117f48771925fac"
+ integrity sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w=
+ dependencies:
+ clean-stack "^1.0.0"
+ indent-string "^3.0.0"
+
ajv@^6.10.0, ajv@^6.5.5, ajv@^6.9.1:
version "6.10.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
@@ -1323,7 +1422,12 @@ ansi-regex@^4.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9"
integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -1343,20 +1447,13 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
-apollo-cache-control@0.7.4:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.7.4.tgz#0cb5c7be0e0dd0c44b1257144cd7f9f2a3c374e6"
- integrity sha512-TVACHwcEF4wfHo5H9FLnoNjo0SLDo2jPW+bXs9aw0Y4Z2UisskSAPnIYOqUPnU8SoeNvs7zWgbLizq11SRTJtg==
+apollo-cache-control@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.8.0.tgz#08b157e5f8cd86f63608b05d45222de0725ebd5a"
+ integrity sha512-BBnfUmSWRws5dRSDD+R56RLJCE9v6xQuob+i/1Ju9EX4LZszU5JKVmxEvnkJ1bk/BkihjoQXTnP6fJCnt6fCmA==
dependencies:
apollo-server-env "2.4.0"
- graphql-extensions "0.7.4"
-
-apollo-cache-control@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171"
- integrity sha512-XJQs167e9u+e5ybSi51nGYr70NPBbswdvTEHtbtXbwkZ+n9t0SLPvUcoqceayOSwjK1XYOdU/EKPawNdb3rLQA==
- dependencies:
- graphql-extensions "^0.0.x"
+ graphql-extensions "0.8.0"
apollo-cache-inmemory@~1.6.2:
version "1.6.2"
@@ -1391,32 +1488,32 @@ apollo-client@~2.6.3:
tslib "^1.9.3"
zen-observable "^0.8.0"
-apollo-datasource@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.5.0.tgz#7a8c97e23da7b9c15cb65103d63178ab19eca5e9"
- integrity sha512-SVXxJyKlWguuDjxkY/WGlC/ykdsTmPxSF0z8FenagcQ91aPURXzXP1ZDz5PbamY+0iiCRubazkxtTQw4GWTFPg==
+apollo-datasource@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.6.0.tgz#823d6be8a3804613b5c56d2972c07db662293fc6"
+ integrity sha512-DOzzYWEOReYRu2vWPKEulqlTb9Xjg67sjVCzve5MXa7GUXjfr8IKioljvfoBMlqm/PpbJVk2ci4n5NIFqoYsrQ==
dependencies:
- apollo-server-caching "0.4.0"
+ apollo-server-caching "0.5.0"
apollo-server-env "2.4.0"
-apollo-engine-reporting-protobuf@0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.1.tgz#a581257fa8e3bb115ce38bf1b22e052d1475ad69"
- integrity sha512-Ui3nPG6BSZF8BEqxFs6EkX6mj2OnFLMejxEHSOdM82bakyeouCGd7J0fiy8AD6liJoIyc4X7XfH4ZGGMvMh11A==
+apollo-engine-reporting-protobuf@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.0.tgz#e34c192d86493b33a73181fd6be75721559111ec"
+ integrity sha512-cXHZSienkis8v4RhqB3YG3DkaksqLpcxApRLTpRMs7IXNozgV7CUPYGFyFBEra1ZFgUyHXx4G9MpelV+n2cCfA==
dependencies:
protobufjs "^6.8.6"
-apollo-engine-reporting@1.3.5:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.3.5.tgz#075424d39dfe77a20f96e8e33b7ae52d58c38e1e"
- integrity sha512-pSwjPgXK/elFsR22LXALtT3jI4fpEpeTNTHgNwLVLohaolusMYgBc/9FnVyFWFfMFS9k+3RmfeQdHhZ6T7WKFQ==
+apollo-engine-reporting@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.4.0.tgz#3a9bd011b271593e16d7057044898d0a817b197d"
+ integrity sha512-NMiO3h1cuEBt6QZNGHxivwuyZQnoU/2MMx0gUA8Gyy1ERBhK6P235qoMnvoi34rLmqJuyGPX6tXcab8MpMIzYQ==
dependencies:
- apollo-engine-reporting-protobuf "0.3.1"
+ apollo-engine-reporting-protobuf "0.4.0"
apollo-graphql "^0.3.3"
- apollo-server-core "2.6.7"
apollo-server-env "2.4.0"
+ apollo-server-types "0.2.0"
async-retry "^1.2.1"
- graphql-extensions "0.7.6"
+ graphql-extensions "0.8.0"
apollo-env@0.5.1:
version "0.5.1"
@@ -1479,31 +1576,33 @@ apollo-link@^1.0.0, apollo-link@^1.2.12, apollo-link@^1.2.3:
tslib "^1.9.3"
zen-observable-ts "^0.8.19"
-apollo-server-caching@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz#e82917590d723c0adc1fa52900e79e93ad65e4d9"
- integrity sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ==
+apollo-server-caching@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.5.0.tgz#446a37ce2d4e24c81833e276638330a634f7bd46"
+ integrity sha512-l7ieNCGxUaUAVAAp600HjbUJxVaxjJygtPV0tPTe1Q3HkPy6LEWoY6mNHV7T268g1hxtPTxcdRu7WLsJrg7ufw==
dependencies:
lru-cache "^5.0.0"
-apollo-server-core@2.6.7:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.6.7.tgz#85b0310f40cfec43a702569c73af16d88776a6f0"
- integrity sha512-HfOGLvEwPgDWTvd3ZKRPEkEnICKb7xadn1Mci4+auMTsL/NVkfpjPa8cdzubi/kS2/MvioIn7Bg74gmiSLghGQ==
+apollo-server-core@2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.7.0.tgz#c444347dea11149b5b453890506e43dc7e711257"
+ integrity sha512-CXjXAkgcMBCJZpsZgfAY5W7f5thdxUhn75UgzeH28RTUZ2aKi/LjoCixPWRSF1lU4vuEWneAnM8Vg/KCD+29lQ==
dependencies:
"@apollographql/apollo-tools" "^0.3.6"
- "@apollographql/graphql-playground-html" "1.6.20"
+ "@apollographql/graphql-playground-html" "1.6.24"
"@types/ws" "^6.0.0"
- apollo-cache-control "0.7.4"
- apollo-datasource "0.5.0"
- apollo-engine-reporting "1.3.5"
- apollo-server-caching "0.4.0"
+ apollo-cache-control "0.8.0"
+ apollo-datasource "0.6.0"
+ apollo-engine-reporting "1.4.0"
+ apollo-engine-reporting-protobuf "0.4.0"
+ apollo-server-caching "0.5.0"
apollo-server-env "2.4.0"
- apollo-server-errors "2.3.0"
- apollo-server-plugin-base "0.5.6"
- apollo-tracing "0.7.3"
+ apollo-server-errors "2.3.1"
+ apollo-server-plugin-base "0.6.0"
+ apollo-server-types "0.2.0"
+ apollo-tracing "0.8.0"
fast-json-stable-stringify "^2.0.0"
- graphql-extensions "0.7.6"
+ graphql-extensions "0.8.0"
graphql-subscriptions "^1.0.0"
graphql-tag "^2.9.2"
graphql-tools "^4.0.0"
@@ -1512,41 +1611,6 @@ apollo-server-core@2.6.7:
subscriptions-transport-ws "^0.9.11"
ws "^6.0.0"
-apollo-server-core@2.6.8:
- version "2.6.8"
- resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.6.8.tgz#c8758b5f26b5f3b9fef51b911265b80a9ce5251d"
- integrity sha512-Jxw+6R/2I2LiZ6kjRFTzPpdjw7HfuVLfNU+svgNlxioLducxBH/wqUs3qYTf4eVUUtWy+nSS/BUf/Ullo+Ur0Q==
- dependencies:
- "@apollographql/apollo-tools" "^0.3.6"
- "@apollographql/graphql-playground-html" "1.6.20"
- "@types/ws" "^6.0.0"
- apollo-cache-control "0.7.4"
- apollo-datasource "0.5.0"
- apollo-engine-reporting "1.3.5"
- apollo-server-caching "0.4.0"
- apollo-server-env "2.4.0"
- apollo-server-errors "2.3.0"
- apollo-server-plugin-base "0.5.7"
- apollo-tracing "0.7.3"
- fast-json-stable-stringify "^2.0.0"
- graphql-extensions "0.7.6"
- graphql-subscriptions "^1.0.0"
- graphql-tag "^2.9.2"
- graphql-tools "^4.0.0"
- graphql-upload "^8.0.2"
- sha.js "^2.4.11"
- subscriptions-transport-ws "^0.9.11"
- ws "^6.0.0"
-
-apollo-server-core@^1.3.6, apollo-server-core@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592"
- integrity sha512-BP1Vh39krgEjkQxbjTdBURUjLHbFq1zeOChDJgaRsMxGtlhzuLWwwC6lLdPatN8jEPbeHq8Tndp9QZ3iQZOKKA==
- dependencies:
- apollo-cache-control "^0.1.0"
- apollo-tracing "^0.1.0"
- graphql-extensions "^0.0.x"
-
apollo-server-env@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.0.tgz#6611556c6b627a1636eed31317d4f7ea30705872"
@@ -1555,102 +1619,71 @@ apollo-server-env@2.4.0:
node-fetch "^2.1.2"
util.promisify "^1.0.0"
-apollo-server-errors@2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz#700622b66a16dffcad3b017e4796749814edc061"
- integrity sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw==
+apollo-server-errors@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.1.tgz#033cf331463ebb99a563f8354180b41ac6714eb6"
+ integrity sha512-errZvnh0vUQChecT7M4A/h94dnBSRL213dNxpM5ueMypaLYgnp4hiCTWIEaooo9E4yMGd1qA6WaNbLDG2+bjcg==
-apollo-server-express@2.6.8:
- version "2.6.8"
- resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.6.8.tgz#9f3e29f7087af669f05d75dfd335b4a9383ba48e"
- integrity sha512-LQzVHknQDkHWffc2qK9dr/qNxQ/WecSKiye5/w10tXrOy3aruTFe67ysG/vMnFZ/puroqiZ2njHzhHZztqQ4sA==
+apollo-server-express@2.7.0, apollo-server-express@^2.6.9:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.7.0.tgz#c19bf56c32473a76b1eb87237d713018984f838e"
+ integrity sha512-TIOaLyuxD8xIECXjbPfS9HUWgHCKsG3rR4WuTpTreVEB08EsGeg+VcNGn0hmUnch18fPXTciBHWCv/fFV/YhMg==
dependencies:
- "@apollographql/graphql-playground-html" "1.6.20"
+ "@apollographql/graphql-playground-html" "1.6.24"
"@types/accepts" "^1.3.5"
"@types/body-parser" "1.17.0"
"@types/cors" "^2.8.4"
"@types/express" "4.17.0"
accepts "^1.3.5"
- apollo-server-core "2.6.8"
+ apollo-server-core "2.7.0"
+ apollo-server-types "0.2.0"
body-parser "^1.18.3"
cors "^2.8.4"
graphql-subscriptions "^1.0.0"
graphql-tools "^4.0.0"
type-is "^1.6.16"
-apollo-server-express@^1.3.6:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.4.0.tgz#7d7c58d6d6f9892b83fe575669093bb66738b125"
- integrity sha512-zkH00nxhLnJfO0HgnNPBTfZw8qI5ILaPZ5TecMCI9+Y9Ssr2b0bFr9pBRsXy9eudPhI+/O4yqegSUsnLdF/CPw==
+apollo-server-plugin-base@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.0.tgz#4186296ea5d52cfe613961d252a8a2f9e13e6ba6"
+ integrity sha512-BjfyWpHyKwHOe819gk3wEFwbnVp9Xvos03lkkYTTcXS/8G7xO78aUcE65mmyAC56/ZQ0aodNFkFrhwNtWBQWUQ==
dependencies:
- apollo-server-core "^1.4.0"
- apollo-server-module-graphiql "^1.4.0"
+ apollo-server-types "0.2.0"
-apollo-server-lambda@1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/apollo-server-lambda/-/apollo-server-lambda-1.3.6.tgz#bdaac37f143c6798e40b8ae75580ba673cea260e"
- integrity sha1-varDfxQ8Z5jkC4rnVYC6ZzzqJg4=
+apollo-server-testing@~2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.7.0.tgz#df8f8fb0df85f9781b6822fc92ee36fdc039b024"
+ integrity sha512-geBTK5T8mqZ2UOscC3oHQ/QoKMINLK+Mmq5ZfZe9UhmdXi+WqQ3/6B+3HMoQ7eQ7D6bNILe8b7N2EKuyUkePdg==
dependencies:
- apollo-server-core "^1.3.6"
- apollo-server-module-graphiql "^1.3.4"
+ apollo-server-core "2.7.0"
-apollo-server-module-graphiql@^1.3.4, apollo-server-module-graphiql@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz#c559efa285578820709f1769bb85d3b3eed3d8ec"
- integrity sha512-GmkOcb5he2x5gat+TuiTvabnBf1m4jzdecal3XbXBh/Jg+kx4hcvO3TTDFQ9CuTprtzdcVyA11iqG7iOMOt7vA==
-
-apollo-server-plugin-base@0.5.6:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.5.6.tgz#3a7128437a0f845e7d873fa43ef091ff7bf27975"
- integrity sha512-wJvcPqfm/kiBwY5JZT85t2A4pcHv24xdQIpWMNt1zsnx77lIZqJmhsc22eSUSrlnYqUMXC4XMVgSUfAO4oI9wg==
-
-apollo-server-plugin-base@0.5.7:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.5.7.tgz#267faeb5c2de7fa8d3be469cb99f82f601be7aed"
- integrity sha512-HeEwEZ92c2XYRV+0CFLbstW3vUJ4idCxR9E9Q3wwvhXrq8gaGzqyDoC8EzAzRxCJUKcEn7xQOpT/AUTC/KtkRA==
-
-apollo-server-testing@~2.6.8:
- version "2.6.8"
- resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.6.8.tgz#e75364df7fdc2d6a11023f8a0f72a14309b90800"
- integrity sha512-pch2I+8QhdXBMnGDctVth4BcZ5hocwY/ogtBMoQuv7H2HBnlDOz7dCM9BH4TW3+Tk6cFgvLTaDtLJ+NxMCtyVA==
+apollo-server-types@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.2.0.tgz#270d7298f709fd8237ebfa48753249e5286df5f2"
+ integrity sha512-5dgiyXsM90vnfmdXO1ixHvsLn0d9NP4tWufmr3ZmjKv00r4JAQNUaUdgOSGbRIKoHELQGwxUuTySTZ/tYfGaNQ==
dependencies:
- apollo-server-core "2.6.8"
+ apollo-engine-reporting-protobuf "0.4.0"
+ apollo-server-caching "0.5.0"
+ apollo-server-env "2.4.0"
-apollo-server@~2.6.8:
- version "2.6.8"
- resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.6.8.tgz#5f3cf5cf4f2feccbded0cb03fa37dcd8260e5c6a"
- integrity sha512-BxwaGxnD3GPuZAAqsexVHFvDlF/s2X8pILgYQ4x+VhUkMeQ12DHQtKPuxn2v2GYwH0U/GDXNohkgwxF/5eTDsQ==
+apollo-server@~2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.7.0.tgz#6a326f06ed1c5cc4e57e1731b74ec92c79237889"
+ integrity sha512-UKYROQqcwSgIjUEjaxAllRJQFTa3flPY+fV5Q0Kz2e3XE5QomEkuNBmO54IefIOr8LllhRU9246WmMHRuwun+w==
dependencies:
- apollo-server-core "2.6.8"
- apollo-server-express "2.6.8"
+ apollo-server-core "2.7.0"
+ apollo-server-express "2.7.0"
express "^4.0.0"
graphql-subscriptions "^1.0.0"
graphql-tools "^4.0.0"
-apollo-tracing@0.7.3:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.7.3.tgz#8533e3e2dca2d5a25e8439ce498ea33ff4d159ee"
- integrity sha512-H6fSC+awQGnfDyYdGIB0UQUhcUC3n5Vy+ujacJ0bY6R+vwWeZOQvu7wRHNjk/rbOSTLCo9A0OcVX7huRyu9SZg==
+apollo-tracing@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.8.0.tgz#28cd9c61a4db12b2c24dad67fdedd309806c1650"
+ integrity sha512-cNOtOlyZ56iJRsCjnxjM1V0SnQ2ZZttuyoeOejdat6llPfk5bfYTVOKMjdbSfDvU33LS9g9sqNJCT0MwrEPFKQ==
dependencies:
apollo-server-env "2.4.0"
- graphql-extensions "0.7.4"
-
-apollo-tracing@^0.1.0:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7"
- integrity sha512-Uv+1nh5AsNmC3m130i2u3IqbS+nrxyVV3KYimH5QKsdPjxxIQB3JAT+jJmpeDxBel8gDVstNmCh82QSLxLSIdQ==
- dependencies:
- graphql-extensions "~0.0.9"
-
-apollo-upload-server@^7.0.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-7.1.0.tgz#21e07b52252b3749b913468599813e13cfca805f"
- integrity sha512-cD9ReCeyurYwZyEDqJYb5TOc9dt8yhPzS+MtrY3iJdqw+pqiiyPngAvVXHjN+Ca7Lajvom4/AT/PBrYVDMM3Kw==
- dependencies:
- busboy "^0.2.14"
- fs-capacitor "^1.0.0"
- http-errors "^1.7.0"
- object-path "^0.11.4"
+ graphql-extensions "0.8.0"
apollo-utilities@1.3.2, apollo-utilities@^1.0.1, apollo-utilities@^1.3.0, apollo-utilities@^1.3.2:
version "1.3.2"
@@ -1667,6 +1700,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"
@@ -1675,6 +1713,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"
@@ -1832,34 +1875,20 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+asyncro@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e"
+ integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==
+
atob@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-aws-lambda@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-0.1.2.tgz#19b1585075df31679597b976a5f1def61f12ccee"
- integrity sha1-GbFYUHXfMWeVl7l2pfHe9h8SzO4=
- dependencies:
- aws-sdk "^*"
- commander "^2.5.0"
- dotenv "^0.4.0"
-
-aws-sdk@^*:
- version "2.373.0"
- resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.373.0.tgz#fcc5606634b3b11d80810ad252d1b52b3733d780"
- integrity sha512-NZYXwXGtFt9jxaKXc+PJsLPnpbD03t0MAZRxh93g36kbFMuRXtY8CDqHYNQ0ZcrgQpXbCQiz1fxT5/wu5Cu70g==
- dependencies:
- buffer "4.9.1"
- events "1.1.1"
- ieee754 "1.1.8"
- jmespath "0.15.0"
- querystring "0.2.0"
- sax "1.2.1"
- url "0.10.3"
- uuid "3.1.0"
- xml2js "0.4.19"
+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"
@@ -1950,11 +1979,6 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-base64-js@^1.0.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
- integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
-
base@^0.11.1:
version "0.11.2"
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
@@ -2023,14 +2047,7 @@ bn.js@^2.0.0:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.2.0.tgz#12162bc2ae71fc40a5626c33438f3a875cd37625"
integrity sha1-EhYrwq5x/EClYmwzQ486h1zTdiU=
-body-parser-graphql@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/body-parser-graphql/-/body-parser-graphql-1.1.0.tgz#80a80353c7cb623562fd375750dfe018d75f0f7c"
- integrity sha512-bOBF4n1AnUjcY1SzLeibeIx4XOuYqEkjn/Lm4yKhnN6KedoXMv4hVqgcKHGRnxOMJP64tErqrQU+4cihhpbJXg==
- dependencies:
- body-parser "^1.18.2"
-
-body-parser@1.19.0, body-parser@^1.18.2, body-parser@^1.18.3:
+body-parser@1.19.0, body-parser@^1.18.3:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
@@ -2141,28 +2158,11 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-buffer@4.9.1:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
- integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
-busboy@^0.2.14:
- version "0.2.14"
- resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"
- integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=
- dependencies:
- dicer "0.2.5"
- readable-stream "1.1.x"
-
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -2190,6 +2190,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"
@@ -2243,6 +2256,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"
@@ -2262,7 +2284,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==
@@ -2298,6 +2325,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"
@@ -2318,6 +2352,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"
@@ -2345,6 +2394,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"
@@ -2354,6 +2411,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"
@@ -2364,6 +2428,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"
@@ -2396,7 +2465,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
-commander@^2.5.0, commander@^2.8.1, commander@^2.9.0:
+commander@^2.8.1, commander@^2.9.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
@@ -2428,6 +2497,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"
@@ -2508,17 +2587,12 @@ core-js-pure@3.1.2:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.2.tgz#62fc435f35b7374b9b782013cdcb2f97e9f6dffa"
integrity sha512-5ckIdBF26B3ldK9PM177y2ZcATP2oweam9RskHSoqfZCrJ2As6wVg8zJ1zTriFsZf6clj/N1ThDFRGaomMsh9w==
-core-js@^2.4.0, core-js@^2.5.3, core-js@^2.5.7:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.2.tgz#267988d7268323b349e20b4588211655f0e83944"
- integrity sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==
+core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.5:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
+ integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
-core-js@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957"
- integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==
-
-core-js@^3.0.1:
+core-js@^3.0.0, core-js@^3.0.1:
version "3.1.3"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.3.tgz#95700bca5f248f5f78c0ec63e784eca663ec4138"
integrity sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA==
@@ -2559,6 +2633,14 @@ cross-fetch@2.2.2:
node-fetch "2.1.2"
whatwg-fetch "2.0.4"
+cross-fetch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c"
+ integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==
+ dependencies:
+ node-fetch "2.6.0"
+ whatwg-fetch "3.0.0"
+
cross-spawn@^5.0.1:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -2686,10 +2768,10 @@ data-urls@^1.0.0:
whatwg-mimetype "^2.2.0"
whatwg-url "^7.0.0"
-date-fns@2.0.0-beta.1:
- version "2.0.0-beta.1"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-beta.1.tgz#6f3209ea8be559211be5160e0a6379a7eade227b"
- integrity sha512-ls5W/PUZmrtck53HD3Sd0564NlnNoQtcxNCwWcIzULJMNNgAPVKHoylVXPau7vdyu5/JTd25ljtan+iWnnUKkw==
+date-fns@2.0.0-beta.3:
+ version "2.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-beta.3.tgz#2e28f5af945930f774ddd778e184d68227101d55"
+ integrity sha512-z5O262BvHPhwUvA1weXH+AZodygnZUcORERw8hjwBUrRPGrAo2e/rjXfC8Ykf1OGJZGDuLnK/WXbEZBIc0exGQ==
debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
@@ -2722,6 +2804,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"
@@ -2739,12 +2828,17 @@ deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-deepmerge@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
- integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
+deepmerge@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09"
+ integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==
-define-properties@^1.1.2:
+defer-to-connect@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e"
+ integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==
+
+define-properties@^1.1.2, define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
@@ -2813,14 +2907,6 @@ detect-newline@^2.1.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
-dicer@0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
- integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=
- dependencies:
- readable-stream "1.1.x"
- streamsearch "0.1.2"
-
dicer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
@@ -2838,10 +2924,10 @@ diff@^3.0.0:
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
-dns-prefetch-control@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz#60ddb457774e178f1f9415f0cabb0e85b0b300b2"
- integrity sha1-YN20V3dOF48flBXwyrsOhbCzALI=
+dns-prefetch-control@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz#73988161841f3dcc81f47686d539a2c702c88624"
+ integrity sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q==
doctrine@1.5.0:
version "1.5.0"
@@ -2901,10 +2987,10 @@ domutils@^1.5.1:
dom-serializer "0"
domelementtype "1"
-dont-sniff-mimetype@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz#5932890dc9f4e2f19e5eb02a20026e5e5efc8f58"
- integrity sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=
+dont-sniff-mimetype@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz#c7d0427f8bcb095762751252af59d148b0a623b2"
+ integrity sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==
dot-prop@^4.1.0:
version "4.2.0"
@@ -2913,11 +2999,6 @@ dot-prop@^4.1.0:
dependencies:
is-obj "^1.0.0"
-dotenv@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-0.4.0.tgz#f6fb351363c2d92207245c737802c9ab5ae1495a"
- integrity sha1-9vs1E2PC2SIHJFxzeALJq1rhSVo=
-
dotenv@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
@@ -2998,6 +3079,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"
@@ -3012,18 +3098,7 @@ error-stack-parser@^2.0.1:
dependencies:
stackframe "^1.0.4"
-es-abstract@^1.4.3:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
- integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
- dependencies:
- es-to-primitive "^1.1.1"
- function-bind "^1.1.1"
- has "^1.0.1"
- is-callable "^1.1.3"
- is-regex "^1.0.4"
-
-es-abstract@^1.5.1, es-abstract@^1.7.0:
+es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
@@ -3035,6 +3110,17 @@ es-abstract@^1.5.1, es-abstract@^1.7.0:
is-regex "^1.0.4"
object-keys "^1.0.12"
+es-abstract@^1.4.3:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
+ integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
es-to-primitive@^1.1.1, es-to-primitive@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
@@ -3143,10 +3229,10 @@ eslint-plugin-es@^1.4.0:
eslint-utils "^1.3.0"
regexpp "^2.0.1"
-eslint-plugin-import@~2.18.0:
- version "2.18.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz#7a5ba8d32622fb35eb9c8db195c2090bd18a3678"
- integrity sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig==
+eslint-plugin-import@~2.18.2:
+ version "2.18.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6"
+ integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==
dependencies:
array-includes "^3.0.3"
contains-path "^0.1.0"
@@ -3155,15 +3241,17 @@ eslint-plugin-import@~2.18.0:
eslint-import-resolver-node "^0.3.2"
eslint-module-utils "^2.4.0"
has "^1.0.3"
- lodash "^4.17.11"
minimatch "^3.0.4"
+ object.values "^1.1.0"
read-pkg-up "^2.0.0"
resolve "^1.11.0"
-eslint-plugin-jest@~22.7.2:
- version "22.7.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.7.2.tgz#7ab118a66a34e46ae5e16a128b5d24fd28b43dca"
- integrity sha512-Aecqe3ulBVI7amgOycVI8ZPL8o0SnGHOf3zn2/Ciu8TXyXDHcjtwD3hOs3ss/Qh/VAwlW/DMcuiXg5btgF+XMA==
+eslint-plugin-jest@~22.13.6:
+ version "22.13.6"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.13.6.tgz#85630e7709fe1ecbe0099956590af32d5e157448"
+ integrity sha512-wn3n9Djj+Dyi8AS1kvGOXpzUJfs9SJYhoZxIb49y4cwHRPaSgDHzSJPZX3sliZ3k8l6bYVeEGW76QvvqoOjSEw==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^1.13.0"
eslint-plugin-node@~9.1.0:
version "9.1.0"
@@ -3202,7 +3290,7 @@ eslint-scope@3.7.1:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-eslint-scope@^4.0.3:
+eslint-scope@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
@@ -3210,6 +3298,14 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0"
estraverse "^4.1.1"
+eslint-scope@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
eslint-utils@^1.3.0, eslint-utils@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
@@ -3220,10 +3316,10 @@ eslint-visitor-keys@^1.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
-eslint@~6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.0.1.tgz#4a32181d72cb999d6f54151df7d337131f81cda7"
- integrity sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w==
+eslint@~6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646"
+ integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
@@ -3231,7 +3327,7 @@ eslint@~6.0.1:
cross-spawn "^6.0.5"
debug "^4.0.1"
doctrine "^3.0.0"
- eslint-scope "^4.0.3"
+ eslint-scope "^5.0.0"
eslint-utils "^1.3.1"
eslint-visitor-keys "^1.0.0"
espree "^6.0.0"
@@ -3239,28 +3335,29 @@ eslint@~6.0.1:
esutils "^2.0.2"
file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1"
- glob-parent "^3.1.0"
+ glob-parent "^5.0.0"
globals "^11.7.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
- inquirer "^6.2.2"
+ inquirer "^6.4.1"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0"
- lodash "^4.17.11"
+ lodash "^4.17.14"
minimatch "^3.0.4"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
optionator "^0.8.2"
progress "^2.0.0"
regexpp "^2.0.1"
- semver "^5.5.1"
- strip-ansi "^4.0.0"
- strip-json-comments "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
table "^5.2.3"
text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
espree@^6.0.0:
version "6.0.0"
@@ -3315,11 +3412,6 @@ eventemitter3@^3.1.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
-events@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
- integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
-
exec-sh@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
@@ -3338,6 +3430,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"
@@ -3386,7 +3491,7 @@ expect@^24.8.0:
jest-message-util "^24.8.0"
jest-regex-util "^24.3.0"
-express@^4.0.0, express@^4.16.3, express@~4.17.1:
+express@^4.0.0, express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
@@ -3530,6 +3635,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"
@@ -3636,16 +3746,18 @@ 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"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-fs-capacitor@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0"
- integrity sha512-XdZK0Q78WP29Vm3FGgJRhRhrBm51PagovzWtW2kJ3Q6cYJbGtZqWSGTSPwvtEkyjIirFd7b8Yes/dpOYjt4RRQ==
-
fs-capacitor@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-2.0.4.tgz#5a22e72d40ae5078b4fe64fe4d08c0d3fc88ad3c"
@@ -3710,6 +3822,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"
@@ -3720,18 +3837,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"
@@ -3752,10 +3883,17 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+glob-parent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954"
+ integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@7.1.4, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -3793,6 +3931,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"
@@ -3822,34 +3977,16 @@ graphql-custom-directives@~0.2.14:
moment "^2.22.2"
numeral "^2.0.6"
-graphql-deduplicator@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/graphql-deduplicator/-/graphql-deduplicator-2.0.2.tgz#d8608161cf6be97725e178df0c41f6a1f9f778f3"
- integrity sha512-0CGmTmQh4UvJfsaTPppJAcHwHln8Ayat7yXXxdnuWT+Mb1dBzkbErabCWzjXyKh/RefqlGTTA7EQOZHofMaKJA==
-
-graphql-extensions@0.7.4:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.7.4.tgz#78327712822281d5778b9210a55dc59c93a9c184"
- integrity sha512-Ly+DiTDU+UtlfPGQkqmBX2SWMr9OT3JxMRwpB9K86rDNDBTJtG6AE2kliQKKE+hg1+945KAimO7Ep+YAvS7ywg==
+graphql-extensions@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.8.0.tgz#b3fe7915aa84eef5a39135840840cc4d2e700c46"
+ integrity sha512-zV9RefkusIXqi9ZJtl7IJ5ecjDKdb7PLAb5E3CmxX3OK1GwNCIubp0vE7Fp4fXlCUKgTB1Woubs0zj71JT8o0A==
dependencies:
"@apollographql/apollo-tools" "^0.3.6"
+ apollo-server-env "2.4.0"
+ apollo-server-types "0.2.0"
-graphql-extensions@0.7.6:
- version "0.7.6"
- resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.7.6.tgz#80cdddf08b0af12525529d1922ee2ea0d0cc8ecf"
- integrity sha512-RV00O3YFD1diehvdja180BlKOGWgeigr/8/Wzr6lXwLcFtk6FecQC/7nf6oW1qhuXczHyNjt/uCr0WWbWq6mYg==
- dependencies:
- "@apollographql/apollo-tools" "^0.3.6"
-
-graphql-extensions@^0.0.x, graphql-extensions@~0.0.9:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d"
- integrity sha512-TnQueqUDCYzOSrpQb3q1ngDSP2otJSF+9yNLrQGPzkMsvnQ+v6e2d5tl+B35D4y+XpmvVnAn4T3ZK28mkILveA==
- dependencies:
- core-js "^2.5.3"
- source-map-support "^0.5.1"
-
-graphql-import@^0.7.0:
+graphql-import@0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.7.1.tgz#4add8d91a5f752d764b0a4a7a461fcd93136f223"
integrity sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==
@@ -3862,32 +3999,13 @@ graphql-iso-date@~3.6.1:
resolved "https://registry.yarnpkg.com/graphql-iso-date/-/graphql-iso-date-3.6.1.tgz#bd2d0dc886e0f954cbbbc496bbf1d480b57ffa96"
integrity sha512-AwFGIuYMJQXOEAgRlJlFL4H1ncFM8n8XmoVDTNypNOZyQ8LFDG2ppMFlsS862BSTCDcSUfHp8PD3/uJhv7t59Q==
-graphql-middleware@3.0.2, graphql-middleware@~3.0.2:
+graphql-middleware@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-3.0.2.tgz#c8cdb67615eec02aec237b455e679f5fc973ddc4"
integrity sha512-sRqu1sF+77z42z1OVM1QDHKQWnWY5K3nAgqWiZwx3U4tqNZprrDuXxSChPMliV343IrVkpYdejUYq9w24Ot3FA==
dependencies:
graphql-tools "^4.0.4"
-graphql-playground-html@1.6.12:
- version "1.6.12"
- resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz#8b3b34ab6013e2c877f0ceaae478fafc8ca91b85"
- integrity sha512-yOYFwwSMBL0MwufeL8bkrNDgRE7eF/kTHiwrqn9FiR9KLcNIl1xw9l9a+6yIRZM56JReQOHpbQFXTZn1IuSKRg==
-
-graphql-playground-middleware-express@1.7.11:
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.11.tgz#bbffd784a37133bfa7165bdd8f429081dbf4bcf6"
- integrity sha512-sKItB4s3FxqlwCgXdMfwRAfssSoo31bcFsGAAg/HzaZLicY6CDlofKXP8G5iPDerB6NaoAcAaBLutLzl9sd4fQ==
- dependencies:
- graphql-playground-html "1.6.12"
-
-graphql-playground-middleware-lambda@1.7.12:
- version "1.7.12"
- resolved "https://registry.yarnpkg.com/graphql-playground-middleware-lambda/-/graphql-playground-middleware-lambda-1.7.12.tgz#1b06440a288dbcd53f935b43e5b9ca2738a06305"
- integrity sha512-fJ1Y0Ck5ctmfaQFoWv7vNnVP7We19P3miVmOT85YPrjpzbMYv0wPfxm4Zjt8nnqXr0KU9nGW53tz3K7/Lvzxtw==
- dependencies:
- graphql-playground-html "1.6.12"
-
graphql-request@~1.8.2:
version "1.8.2"
resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.8.2.tgz#398d10ae15c585676741bde3fc01d5ca948f8fbe"
@@ -3895,23 +4013,16 @@ graphql-request@~1.8.2:
dependencies:
cross-fetch "2.2.2"
-graphql-shield@~6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/graphql-shield/-/graphql-shield-6.0.3.tgz#a79ca8b2fe58fb9558ffc0e64fa8aa19f63af1b3"
- integrity sha512-+yVT/dRWsRqeJOTHcEElJVfvIRPrhBqPlg5FHLmSkWNdGMR4AFqAQGrJteuZuNDvJ3bt380CZ96Bvf4J9hUpKA==
+graphql-shield@~6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/graphql-shield/-/graphql-shield-6.0.4.tgz#f7c5b4e09ddcf5483ef7e653176b5d67d2a24518"
+ integrity sha512-0atSTooJcIcRv/qqIdhAkD8XPYCuwJqeAzoYwdLUp7LFmsSWK6wmHHmYSPcCscBZMI+8f2T0I8eA6yuv5SAvOA==
dependencies:
- "@types/yup" "0.26.21"
+ "@types/yup" "0.26.22"
lightercollective "^0.3.0"
object-hash "^1.3.1"
yup "^0.27.0"
-graphql-subscriptions@^0.5.8:
- version "0.5.8"
- resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7"
- integrity sha512-0CaZnXKBw2pwnIbvmVckby5Ge5e2ecmjofhYCdyeACbCly2j3WXDP/pl+s+Dqd2GQFC7y99NB+53jrt55CKxYQ==
- dependencies:
- iterall "^1.2.1"
-
graphql-subscriptions@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz#475267694b3bd465af6477dbab4263a3f62702b8"
@@ -3924,6 +4035,25 @@ graphql-tag@^2.9.2, graphql-tag@~2.10.1:
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.1.tgz#10aa41f1cd8fae5373eaf11f1f67260a3cad5e02"
integrity sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==
+graphql-toolkit@0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/graphql-toolkit/-/graphql-toolkit-0.4.1.tgz#f5a9fa225b51168dd0d0558dc59e8fc3d379e9b1"
+ integrity sha512-asTRlNn0381f6/wVp8F0X2vsz8GJnv4TX+KNHg1k8Ybe6Ii5HBreJTxBHJ7GXlNDhj5MGCNi09nt8Oe7Ategrg==
+ dependencies:
+ "@kamilkisiela/graphql-tools" "4.0.6"
+ "@types/glob" "7.1.1"
+ aggregate-error "3.0.0"
+ asyncro "^3.0.0"
+ cross-fetch "^3.0.4"
+ deepmerge "4.0.0"
+ glob "7.1.4"
+ graphql-import "0.7.1"
+ is-glob "4.0.1"
+ is-valid-path "0.1.1"
+ lodash "4.17.15"
+ tslib "^1.9.3"
+ valid-url "1.0.9"
+
graphql-tools@^4.0.0, graphql-tools@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b"
@@ -3935,7 +4065,7 @@ graphql-tools@^4.0.0, graphql-tools@^4.0.4:
iterall "^1.1.3"
uuid "^3.1.0"
-graphql-upload@^8.0.0, graphql-upload@^8.0.2:
+graphql-upload@^8.0.2:
version "8.0.7"
resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-8.0.7.tgz#8644264e241529552ea4b3797e7ee15809cf01a3"
integrity sha512-gi2yygbDPXbHPC7H0PNPqP++VKSoNoJO4UrXWq4T0Bi4IhyUd3Ycop/FSxhx2svWIK3jdXR/i0vi91yR1aAF0g==
@@ -3945,35 +4075,7 @@ graphql-upload@^8.0.0, graphql-upload@^8.0.2:
http-errors "^1.7.2"
object-path "^0.11.4"
-graphql-yoga@~1.18.0:
- version "1.18.0"
- resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-1.18.0.tgz#2668278e94a0bd1b2ff8c60f928c4e18d62e381a"
- integrity sha512-WEibitQA2oFTmD7XBO8/ps8DWeVpkzOzgbB3EvtM2oIpyGhPCzRZYrC7OS9MmijvRwLRXsgHImHWUm82ZrIOWA==
- dependencies:
- "@types/cors" "^2.8.4"
- "@types/express" "^4.11.1"
- "@types/graphql" "^14.0.0"
- "@types/graphql-deduplicator" "^2.0.0"
- "@types/zen-observable" "^0.5.3"
- apollo-server-express "^1.3.6"
- apollo-server-lambda "1.3.6"
- apollo-upload-server "^7.0.0"
- aws-lambda "^0.1.2"
- body-parser-graphql "1.1.0"
- cors "^2.8.4"
- express "^4.16.3"
- graphql "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0"
- graphql-deduplicator "^2.0.1"
- graphql-import "^0.7.0"
- graphql-middleware "3.0.2"
- graphql-playground-middleware-express "1.7.11"
- graphql-playground-middleware-lambda "1.7.12"
- graphql-subscriptions "^0.5.8"
- graphql-tools "^4.0.0"
- graphql-upload "^8.0.0"
- subscriptions-transport-ws "^0.9.8"
-
-"graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", graphql@^14.2.1, graphql@~14.4.2:
+graphql@^14.2.1, graphql@~14.4.2:
version "14.4.2"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.4.2.tgz#553a7d546d524663eda49ed6df77577be3203ae3"
integrity sha512-6uQadiRgnpnSS56hdZUSvFrVcQ6OF9y6wkxJfKquFtHlnl7+KSuWwSJsdwiK1vybm1HgcdbpGkCpvhvsVQ0UZQ==
@@ -4009,6 +4111,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"
@@ -4055,6 +4162,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"
@@ -4075,10 +4189,10 @@ he@0.5.0:
resolved "https://registry.yarnpkg.com/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2"
integrity sha1-LAX/rvkLaOhg8/0rVO9YCYknfuI=
-helmet-crossdomain@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz#707e2df930f13ad61f76ed08e1bb51ab2b2e85fa"
- integrity sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==
+helmet-crossdomain@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e"
+ integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==
helmet-csp@2.7.1:
version "2.7.1"
@@ -4090,31 +4204,31 @@ helmet-csp@2.7.1:
dasherize "2.0.0"
platform "1.3.5"
-helmet@~3.18.0:
- version "3.18.0"
- resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.18.0.tgz#37666f7c861bd1ff3015e0cdb903a43501e3da3e"
- integrity sha512-TsKlGE5UVkV0NiQ4PllV9EVfZklPjyzcMEMjWlyI/8S6epqgRT+4s4GHVgc25x0TixsKvp3L7c91HQQt5l0+QA==
+helmet@~3.19.0:
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.19.0.tgz#02c524dd69e03b0af20dce7bc9929ff951081a29"
+ integrity sha512-l58Q3unSpYatlurvFzkCbTRQ8oWUmdXbOs7h+pnwQbFJRhRJDjER6UMyqHxp9iFtWPcVA05VLcUGSi0EXIv7GA==
dependencies:
depd "2.0.0"
- dns-prefetch-control "0.1.0"
- dont-sniff-mimetype "1.0.0"
+ dns-prefetch-control "0.2.0"
+ dont-sniff-mimetype "1.1.0"
expect-ct "0.2.0"
feature-policy "0.3.0"
frameguard "3.1.0"
- helmet-crossdomain "0.3.0"
+ helmet-crossdomain "0.4.0"
helmet-csp "2.7.1"
- hide-powered-by "1.0.0"
+ hide-powered-by "1.1.0"
hpkp "2.0.0"
hsts "2.2.0"
ienoopen "1.1.0"
nocache "2.1.0"
referrer-policy "1.2.0"
- x-xss-protection "1.1.0"
+ x-xss-protection "1.2.0"
-hide-powered-by@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz#4a85ad65881f62857fc70af7174a1184dccce32b"
- integrity sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=
+hide-powered-by@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.1.0.tgz#be3ea9cab4bdb16f8744be873755ca663383fa7a"
+ integrity sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==
hoek@5.x.x:
version "5.0.4"
@@ -4169,6 +4283,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"
@@ -4180,17 +4299,6 @@ http-errors@1.7.2, http-errors@^1.7.2, http-errors@~1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
-http-errors@^1.7.0:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027"
- integrity sha512-jWEUgtZWGSMba9I1N3gc1HmvpBUaNC9vDdA46yScAdp+C5rdEuKWUBLWTQpW9FwSWSbYYs++b6SDCxf9UEJzfw==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.0"
- statuses ">= 1.5.0 < 2"
- toidentifier "1.0.0"
-
http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
@@ -4207,16 +4315,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
dependencies:
safer-buffer ">= 2.1.2 < 3"
-ieee754@1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
- integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
-
-ieee754@^1.1.4:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
- integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
-
ienoopen@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.1.0.tgz#411e5d530c982287dbdc3bb31e7a9c9e32630974"
@@ -4244,6 +4342,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"
@@ -4270,7 +4373,7 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-indent-string@^3.1.0:
+indent-string@^3.0.0, indent-string@^3.1.0, indent-string@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
@@ -4283,7 +4386,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
@@ -4298,10 +4401,10 @@ ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-inquirer@^6.2.2:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406"
- integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==
+inquirer@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42"
+ integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==
dependencies:
ansi-escapes "^3.2.0"
chalk "^2.4.2"
@@ -4309,12 +4412,12 @@ inquirer@^6.2.2:
cli-width "^2.0.0"
external-editor "^3.0.3"
figures "^2.0.0"
- lodash "^4.17.11"
+ lodash "^4.17.12"
mute-stream "0.0.7"
run-async "^2.2.0"
rxjs "^6.4.0"
string-width "^2.1.0"
- strip-ansi "^5.0.0"
+ strip-ansi "^5.1.0"
through "^2.3.6"
insane@2.6.1:
@@ -4337,11 +4440,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"
@@ -4448,6 +4571,11 @@ is-extendable@^1.0.1:
dependencies:
is-plain-object "^2.0.4"
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
is-extglob@^2.1.0, is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -4475,6 +4603,20 @@ is-generator@^1.0.2:
resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3"
integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=
+is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-glob@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
is-glob@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -4482,13 +4624,6 @@ is-glob@^3.1.0:
dependencies:
is-extglob "^2.1.0"
-is-glob@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
- integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
- dependencies:
- is-extglob "^2.1.1"
-
is-installed-globally@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
@@ -4497,6 +4632,13 @@ is-installed-globally@^0.1.0:
global-dirs "^0.1.0"
is-path-inside "^1.0.0"
+is-invalid-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34"
+ integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=
+ dependencies:
+ is-glob "^2.0.0"
+
is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
@@ -4533,11 +4675,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"
@@ -4550,6 +4712,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"
@@ -4572,16 +4748,26 @@ is-typedarray@~1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+is-uri@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-uri/-/is-uri-1.2.0.tgz#b92ff234af68c0ed97d2eed46492d01793b7d420"
+ integrity sha1-uS/yNK9owO2X0u7UZJLQF5O31CA=
+ dependencies:
+ parse-uri "~1.0.0"
+ punycode2 "~1.0.0"
+
+is-valid-path@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df"
+ integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=
+ dependencies:
+ is-invalid-path "^0.1.0"
+
is-windows@^1.0.0, is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
- integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -4599,6 +4785,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"
@@ -4611,6 +4807,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"
@@ -5018,12 +5219,7 @@ jest@~24.8.0:
import-local "^2.0.0"
jest-cli "^24.8.0"
-jmespath@0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217"
- integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=
-
-joi@^13.0.0, joi@^13.7.0:
+joi@^13.7.0:
version "13.7.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f"
integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==
@@ -5102,6 +5298,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"
@@ -5214,6 +5415,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"
@@ -5396,16 +5604,21 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash@4.17.15, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.11, lodash@~4.17.14, lodash@~4.17.15:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
lodash@=3.10.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
-lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.14:
- version "4.17.14"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
- integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==
-
long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@@ -5423,11 +5636,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"
@@ -5457,7 +5675,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==
@@ -5490,6 +5708,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"
@@ -5500,14 +5732,13 @@ merge-descriptors@1.0.1:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-merge-graphql-schemas@^1.5.8:
- version "1.5.8"
- resolved "https://registry.yarnpkg.com/merge-graphql-schemas/-/merge-graphql-schemas-1.5.8.tgz#89457b60312aabead44d5b2b7625643f8ab9e369"
- integrity sha512-0TGOKebltvmWR9h9dPYS2vAqMPThXwJ6gVz7O5MtpBp2sunAg/M25iMSNI7YhU6PDJVtGtldTfqV9a+55YhB+A==
+merge-graphql-schemas@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/merge-graphql-schemas/-/merge-graphql-schemas-1.6.1.tgz#4c4744bd3f2395a876d0e6885e60c90a9a5a4568"
+ integrity sha512-XEgol3ThgEPo65Cj+cx8UhOFE4IuTSF1Mh0iK8AVOEM/hKrhLfNECmtg9U6HoHfa9nINLxeGZIVvq9rjoSx3cQ==
dependencies:
- deepmerge "^2.2.1"
- glob "^7.1.3"
- is-glob "^4.0.0"
+ graphql-toolkit "0.4.1"
+ tslib "1.10.0"
merge-stream@^1.0.1:
version "1.0.1"
@@ -5516,6 +5747,133 @@ merge-stream@^1.0.1:
dependencies:
readable-stream "^2.0.1"
+metascraper-audio@^5.5.0:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.6.3.tgz#f84f4e19960c698df2e14cd98212b004bac66bb9"
+ integrity sha512-XxO9iHVQzGa+Z7wzmnHl3dmFdBdmYfO/ozeMWH0fp/4YbU1GU3l+OlYzPaVhCEfArqzzuwf1iq8uGKdU/DOZnw==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-author@^5.6.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-author/-/metascraper-author-5.6.3.tgz#8ecc0d4257be1438e9f8242b4f0c1a5137f5bb13"
+ integrity sha512-BNnYWjaEFOS5JX5s6KFo6MIv5M2hgnaWV47LM/EOvfHpe0a6DovVtLkGrVj6SpbPio3tzTjakouBwjQpuo1Dlg==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+ lodash "~4.17.15"
+
+metascraper-clearbit-logo@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/metascraper-clearbit-logo/-/metascraper-clearbit-logo-5.3.0.tgz#e4596dbaf35503635d585a705f4119c7eddc6773"
+ integrity sha512-Vg9m8cj2yEIUDrRjvCORvf8vgq2HLsWLVqNnIactNUPJ+Lcly5Xcxh5TcmHYp5Qx5DtNUCoKlakomYHn8mOjqg==
+ dependencies:
+ got "~9.6.0"
+
+metascraper-date@^5.6.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-5.6.3.tgz#516fad38391a45137a58430f639a57037eee96f2"
+ integrity sha512-sdbY0IOu1BcZHocwVIJ8/CPkguVR8oDho13apIGNsZjyItIdMMLrziDqzOSGcJI++AXGmS3MNHW8M+bdYHVj1g==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-description@^5.5.0:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-5.6.3.tgz#1abfde848e8002c606e5741b9523b61ca592bb34"
+ integrity sha512-ATfsUS6t912hSYKEOyVUX+GrwRMcUltOcvEXtD/5ER26z3h1ab83w4UvQ7imo9F6yueQX2dB6QfqTkWF92X6Vw==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-image@^5.6.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-5.6.3.tgz#1d2fa627d90d5545f45bdda6e874af421ee1c622"
+ integrity sha512-pDq6fU6X59642KNmE1WmJUUgJxepU4TDj1u2HDR0XCdqeiEGpskqmO/rFJSdgRFJNFUo7RJ1Er8cT4yVKCgqtg==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-lang-detector@^4.8.5:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/metascraper-lang-detector/-/metascraper-lang-detector-4.10.2.tgz#45744bc331125c098e8b27716d76740161b121d2"
+ integrity sha512-Lz1d5v/i1j08gQYz7sCdoxjOx94ArLV4UucUhGZeQpR4E6dK47V6aqfYwODRe2XAqhaU+3oLnbAipoHkOeZXiw==
+ dependencies:
+ "@metascraper/helpers" "^4.10.2"
+ franc "~4.0.0"
+ iso-639-3 "~1.1.0"
+
+metascraper-lang@^5.6.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-lang/-/metascraper-lang-5.6.3.tgz#d2d7a20f4145b0785391fffec629e154737fc942"
+ integrity sha512-c13zxmREcB/hDXs7MIxio7RNfVsSzGfixk6FrfQQh3fypmiR84SpeZmQR+G/e2X/BDNwpIydJM62R7BayY709Q==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-logo@^5.5.0:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-5.6.3.tgz#bb18449e872815ba6199e2aa78078259c2677b98"
+ integrity sha512-xeqjSuTAiudXiUczj7F0+VvXdgFvL5rqyW3D+BPXrNHOUqDyyYNlHTEhambj3HbMP6EjQyoMDEvqCF5qUezmXg==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-publisher@^5.6.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-5.6.3.tgz#3729cd7dac117c94f92020ff3a8397a1b965a27e"
+ integrity sha512-1Z+bwrTn6j4Tf85DatYL0zDmqBfoJCfYa0nNlZ9HWfjM+QWDxBeIu1v/85N3AYGYPwk5G38IdvEYBb4MpMEQvQ==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-soundcloud@^5.5.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.6.3.tgz#c2bb5904857d079a44c0d1e1511dfaf4d0f19945"
+ integrity sha512-v44pktX4I7pnUjThGs11YZLNpuQbuB6iY2RcYnODjasgor8t7ZHPwrJqy01b0mkTmHoRbQ84Vheq1SkAD0Vz8g==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+ memoize-one "~5.0.5"
+ tldts "~5.3.1"
+
+metascraper-title@^5.6.3:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-5.6.3.tgz#219bf9a4da28d48ea180497a1d6d2b4fa4871cc2"
+ integrity sha512-sZ+SWojZhECisyw+el5fc1q2ENEAeQDzy/HabSkeA/saB3xqf3XnfqtCGIuElyxKiXS65KWzQOX+u3KseZdiAg==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+ lodash "~4.17.15"
+
+metascraper-url@^5.5.0:
+ version "5.6.3"
+ resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-5.6.3.tgz#7e756f79ed2a5e1591682e29b665551855ddda5d"
+ integrity sha512-hFHff2AsWuW552CkktWR9ViVp2poZufP1YUAVJWRe7UaHC67vx2mE5hjNZkVBSi1rOoPIbNN+jPVvcKwT6tkAw==
+ dependencies:
+ "@metascraper/helpers" "^5.6.3"
+
+metascraper-video@^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"
@@ -5557,7 +5915,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==
@@ -5574,6 +5932,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"
@@ -5631,6 +6004,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"
@@ -5665,6 +6043,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"
@@ -5784,7 +6167,7 @@ node-fetch@2.1.2:
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
-node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0:
+node-fetch@2.6.0, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
@@ -5837,10 +6220,10 @@ node-releases@^1.1.19:
dependencies:
semver "^5.3.0"
-nodemailer@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.2.1.tgz#20d773925eb8f7a06166a0b62c751dc8290429f3"
- integrity sha512-TagB7iuIi9uyNgHExo8lUDq3VK5/B0BpbkcjIgNvxbtVrjNqq0DwAOTuzALPVkK76kMhTSzIgHqg8X1uklVs6g==
+nodemailer@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.3.0.tgz#a89b0c62d3937bdcdeecbf55687bd7911b627e12"
+ integrity sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw==
nodemon@~1.19.1:
version "1.19.1"
@@ -5895,6 +6278,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"
@@ -6033,6 +6426,16 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
+object.values@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+ integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.12.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -6117,6 +6520,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"
@@ -6139,6 +6554,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"
@@ -6167,11 +6587,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"
@@ -6226,6 +6672,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"
@@ -6363,6 +6814,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"
@@ -6387,6 +6843,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"
@@ -6500,10 +6961,10 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
- integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+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"
@@ -6525,10 +6986,10 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
- integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+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"
@@ -6614,16 +7075,6 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
-readable-stream@1.1.x:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.3, readable-stream@^2.3.5:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
@@ -6837,6 +7288,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"
@@ -6871,6 +7327,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"
@@ -6901,6 +7364,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"
@@ -6973,11 +7441,6 @@ sanitize-html@~1.20.1:
srcset "^1.0.0"
xtend "^4.0.1"
-sax@1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
- integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o=
-
sax@>=0.6.0, sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -7008,15 +7471,20 @@ semver-diff@^2.0.0:
dependencies:
semver "^5.0.3"
-"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0:
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
version "5.7.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-semver@^6.0.0, semver@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.0.tgz#e95dc415d45ecf03f2f9f83b264a6b11f49c0cca"
- integrity sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==
+semver@5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+ integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+semver@^6.0.0, semver@^6.1.0, semver@^6.1.2:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db"
+ integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==
send@0.17.1:
version "0.17.1"
@@ -7077,11 +7545,6 @@ set-value@^2.0.0:
is-plain-object "^2.0.3"
split-string "^3.0.1"
-setprototypeof@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
- integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-
setprototypeof@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
@@ -7153,6 +7616,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"
@@ -7194,7 +7662,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@^0.5.1, source-map-support@^0.5.6, source-map-support@^0.5.9:
+source-map-support@^0.5.6, source-map-support@^0.5.9:
version "0.5.9"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==
@@ -7400,11 +7868,6 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.1.0"
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
- integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -7426,12 +7889,12 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
-strip-ansi@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f"
- integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
dependencies:
- ansi-regex "^4.0.0"
+ ansi-regex "^4.1.0"
strip-bom@^3.0.0:
version "3.0.0"
@@ -7443,12 +7906,17 @@ strip-eof@^1.0.0:
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+strip-json-comments@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
+strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.8:
+subscriptions-transport-ws@^0.9.11:
version "0.9.15"
resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d"
integrity sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==
@@ -7483,6 +7951,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"
@@ -7604,6 +8079,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"
@@ -7628,6 +8135,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"
@@ -7693,11 +8205,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"
@@ -7712,6 +8238,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"
@@ -7719,10 +8255,10 @@ ts-invariant@^0.4.0:
dependencies:
tslib "^1.9.3"
-tslib@^1.9.0, tslib@^1.9.3:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
- integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+tslib@1.10.0, tslib@^1.9.0, tslib@^1.9.3:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
tunnel-agent@^0.6.0:
version "0.6.0"
@@ -7879,13 +8415,36 @@ url-parse-lax@^1.0.0:
dependencies:
prepend-http "^1.0.1"
-url@0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64"
- integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=
+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:
- punycode "1.3.2"
- querystring "0.2.0"
+ 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"
@@ -7922,16 +8481,16 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-uuid@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
- integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==
-
uuid@^3.1.0, uuid@^3.3.2, uuid@~3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+v8-compile-cache@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+
v8flags@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.1.tgz#42259a1461c08397e37fe1d4f1cfb59cad85a053"
@@ -7939,6 +8498,11 @@ v8flags@^3.1.1:
dependencies:
homedir-polyfill "^1.0.1"
+valid-url@1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
+ integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=
+
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -7961,6 +8525,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"
@@ -8037,13 +8606,13 @@ w3c-hr-time@^1.0.1:
dependencies:
browser-process-hrtime "^0.1.2"
-wait-on@~3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-3.2.0.tgz#c83924df0fc42a675c678324c49c769d378bcb85"
- integrity sha512-QUGNKlKLDyY6W/qHdxaRlXUAgLPe+3mLL/tRByHpRNcHs/c7dZXbu+OnJWGNux6tU1WFh/Z8aEwvbuzSAu79Zg==
+wait-on@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-3.3.0.tgz#9940981d047a72a9544a97b8b5fca45b2170a082"
+ integrity sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ==
dependencies:
- core-js "^2.5.7"
- joi "^13.0.0"
+ "@hapi/joi" "^15.0.3"
+ core-js "^2.6.5"
minimist "^1.2.0"
request "^2.88.0"
rx "^4.1.0"
@@ -8072,6 +8641,11 @@ whatwg-fetch@2.0.4:
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
+whatwg-fetch@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
+
whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
@@ -8107,6 +8681,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"
@@ -8183,10 +8765,10 @@ ws@^6.0.0:
dependencies:
async-limiter "~1.0.0"
-x-xss-protection@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.1.0.tgz#4f1898c332deb1e7f2be1280efb3e2c53d69c1a7"
- integrity sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==
+x-xss-protection@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.2.0.tgz#3170498ff8e7e8159f4896b27fa4d4810c2ff486"
+ integrity sha512-xN0kV+8XfOQM2OPPBdEbGtbvJNNP1pvZR7sE6d44cjJFQG4OiGDdienPg5iOUGswBTiGbBvtYDURd30BMJwwqg==
xdg-basedir@^3.0.0:
version "3.0.0"
@@ -8198,7 +8780,7 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-xml2js@0.4.19, xml2js@^0.4.17:
+xml2js@^0.4.17:
version "0.4.19"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
diff --git a/cypress/integration/administration/TagsAndCategories.feature b/cypress/integration/administration/TagsAndCategories.feature
index e55535ea9..96196be01 100644
--- a/cypress/integration/administration/TagsAndCategories.feature
+++ b/cypress/integration/administration/TagsAndCategories.feature
@@ -22,16 +22,16 @@ Feature: Tags and Categories
When I navigate to the administration dashboard
And I click on the menu item "Categories"
Then I can see the following table:
- | | Name | Posts |
- | | Just For Fun | 2 |
- | | Happyness & Values | 1 |
- | | Health & Wellbeing | 0 |
+ | | Name | Posts |
+ | | Just For Fun | 2 |
+ | | Happyness & Values | 1 |
+ | | Health & Wellbeing | 0 |
Scenario: See an overview of tags
When I navigate to the administration dashboard
And I click on the menu item "Tags"
Then I can see the following table:
- | | Name | Users | Posts |
- | 1 | Democracy | 3 | 4 |
- | 2 | Nature | 2 | 3 |
- | 3 | Ecology | 1 | 1 |
+ | | Name | Users | Posts |
+ | 1 | Democracy | 3 | 4 |
+ | 2 | Nature | 2 | 3 |
+ | 3 | Ecology | 1 | 1 |
diff --git a/cypress/integration/common/profile.js b/cypress/integration/common/profile.js
index 1df1e2652..b1bf9e4e0 100644
--- a/cypress/integration/common/profile.js
+++ b/cypress/integration/common/profile.js
@@ -1,36 +1,36 @@
-import { When, Then } from 'cypress-cucumber-preprocessor/steps'
+import { When, Then } from "cypress-cucumber-preprocessor/steps";
/* global cy */
-When('I visit my profile page', () => {
- cy.openPage('profile/peter-pan')
-})
+When("I visit my profile page", () => {
+ cy.openPage("profile/peter-pan");
+});
-Then('I should be able to change my profile picture', () => {
- const avatarUpload = 'onourjourney.png'
+Then("I should be able to change my profile picture", () => {
+ const avatarUpload = "onourjourney.png";
- cy.fixture(avatarUpload, 'base64').then(fileContent => {
- cy.get('#customdropzone').upload(
- { fileContent, fileName: avatarUpload, mimeType: 'image/png' },
- { subjectType: 'drag-n-drop' }
- )
- })
- cy.get('.profile-avatar img')
- .should('have.attr', 'src')
- .and('contains', 'onourjourney')
- cy.contains('.iziToast-message', 'Upload successful').should(
- 'have.length',
+ cy.fixture(avatarUpload, "base64").then(fileContent => {
+ cy.get("#customdropzone").upload(
+ { fileContent, fileName: avatarUpload, mimeType: "image/png" },
+ { subjectType: "drag-n-drop", force: true }
+ );
+ });
+ cy.get(".profile-avatar img")
+ .should("have.attr", "src")
+ .and("contains", "onourjourney");
+ cy.contains(".iziToast-message", "Upload successful").should(
+ "have.length",
1
- )
-})
+ );
+});
When("I visit another user's profile page", () => {
- cy.openPage('profile/peter-pan')
-})
+ cy.openPage("profile/peter-pan");
+});
-Then('I cannot upload a picture', () => {
- cy.get('.ds-card-content')
+Then("I cannot upload a picture", () => {
+ cy.get(".ds-card-content")
.children()
- .should('not.have.id', 'customdropzone')
- .should('have.class', 'ds-avatar')
-})
+ .should("not.have.id", "customdropzone")
+ .should("have.class", "ds-avatar");
+});
diff --git a/cypress/support/factories.js b/cypress/support/factories.js
index dd16e8198..825f65b83 100644
--- a/cypress/support/factories.js
+++ b/cypress/support/factories.js
@@ -23,24 +23,27 @@ Cypress.Commands.add('factory', () => {
Cypress.Commands.add(
'create',
{ prevSubject: true },
- (factory, node, properties) => {
- return factory.create(node, properties)
+ async (factory, node, properties) => {
+ await factory.create(node, properties)
+ return factory
}
)
Cypress.Commands.add(
'relate',
{ prevSubject: true },
- (factory, node, relationship, properties) => {
- return factory.relate(node, relationship, properties)
+ async (factory, node, relationship, properties) => {
+ await factory.relate(node, relationship, properties)
+ return factory
}
)
Cypress.Commands.add(
'mutate',
{ prevSubject: true },
- (factory, mutation, variables) => {
- return factory.mutate(mutation, variables)
+ async (factory, mutation, variables) => {
+ await factory.mutate(mutation, variables)
+ return factory
}
)
diff --git a/deployment/human-connection/templates/configmap.template.yaml b/deployment/human-connection/templates/configmap.template.yaml
index 2b7ffeeb8..1e8b37b06 100644
--- a/deployment/human-connection/templates/configmap.template.yaml
+++ b/deployment/human-connection/templates/configmap.template.yaml
@@ -4,14 +4,10 @@
data:
SMTP_HOST: "mailserver.human-connection"
SMTP_PORT: "25"
- SMTP_USERNAME: ""
- SMTP_PASSWORD: ""
GRAPHQL_PORT: "4000"
GRAPHQL_URI: "http://nitro-backend.human-connection:4000"
MOCKS: "false"
NEO4J_URI: "bolt://nitro-neo4j.human-connection:7687"
- NEO4J_USERNAME: "neo4j"
- NEO4J_PASSWORD: "neo4j"
NEO4J_AUTH: "none"
CLIENT_URI: "https://nitro-staging.human-connection.org"
metadata:
diff --git a/deployment/human-connection/templates/secrets.template.yaml b/deployment/human-connection/templates/secrets.template.yaml
index 9f59b948a..6a6206189 100644
--- a/deployment/human-connection/templates/secrets.template.yaml
+++ b/deployment/human-connection/templates/secrets.template.yaml
@@ -5,11 +5,10 @@ data:
MONGODB_PASSWORD: "TU9OR09EQl9QQVNTV09SRA=="
PRIVATE_KEY_PASSPHRASE: "YTdkc2Y3OHNhZGc4N2FkODdzZmFnc2FkZzc4"
MAPBOX_TOKEN: "cGsuZXlKMUlqb2lhSFZ0WVc0dFkyOXVibVZqZEdsdmJpSXNJbUVpT2lKamFqbDBjbkJ1Ykdvd2VUVmxNM1Z3WjJsek5UTnVkM1p0SW4wLktaOEtLOWw3MG9talhiRWtrYkhHc1EK"
- SMTP_HOST:
- SMTP_PORT: 587
SMTP_USERNAME:
SMTP_PASSWORD:
- SMTP_IGNORE_TLS:
+ NEO4J_USERNAME:
+ NEO4J_PASSWORD:
metadata:
name: human-connection
namespace: human-connection
diff --git a/deployment/legacy-migration/maintenance-worker/migration/neo4j/badges/badges.cql b/deployment/legacy-migration/maintenance-worker/migration/neo4j/badges/badges.cql
index 027cea019..adf63dc1f 100644
--- a/deployment/legacy-migration/maintenance-worker/migration/neo4j/badges/badges.cql
+++ b/deployment/legacy-migration/maintenance-worker/migration/neo4j/badges/badges.cql
@@ -25,7 +25,7 @@
[?] type: String, // in nitro this is a defined enum - seems good for now
[X] required: true
},
-[X] key: {
+[X] id: {
[X] type: String,
[X] required: true
},
@@ -43,7 +43,7 @@
CALL apoc.load.json("file:${IMPORT_CHUNK_PATH_CQL_FILE}") YIELD value as badge
MERGE(b:Badge {id: badge._id["$oid"]})
ON CREATE SET
-b.key = badge.key,
+b.id = badge.key,
b.type = badge.type,
b.icon = replace(badge.image.path, 'https://api-alpha.human-connection.org', ''),
b.status = badge.status,
diff --git a/deployment/legacy-migration/maintenance-worker/migration/neo4j/users/users.cql b/deployment/legacy-migration/maintenance-worker/migration/neo4j/users/users.cql
index 4d7c9aa9f..7574fd3b2 100644
--- a/deployment/legacy-migration/maintenance-worker/migration/neo4j/users/users.cql
+++ b/deployment/legacy-migration/maintenance-worker/migration/neo4j/users/users.cql
@@ -101,7 +101,7 @@ ON CREATE SET
u.name = user.name,
u.slug = user.slug,
u.email = user.email,
-u.password = user.password,
+u.encryptedPassword = user.password,
u.avatar = replace(user.avatar, 'https://api-alpha.human-connection.org', ''),
u.coverImg = replace(user.coverImg, 'https://api-alpha.human-connection.org', ''),
u.wasInvited = user.wasInvited,
@@ -111,6 +111,13 @@ u.createdAt = user.createdAt.`$date`,
u.updatedAt = user.updatedAt.`$date`,
u.deleted = user.deletedAt IS NOT NULL,
u.disabled = false
+MERGE (e:EmailAddress {
+ email: user.email,
+ createdAt: toString(datetime()),
+ verifiedAt: toString(datetime())
+})
+MERGE (e)-[:BELONGS_TO]->(u)
+MERGE (u)<-[:PRIMARY_EMAIL]-(e)
WITH u, user, user.badgeIds AS badgeIds
UNWIND badgeIds AS badgeId
MATCH (b:Badge {id: badgeId})
diff --git a/docker-compose.travis.yml b/docker-compose.travis.yml
index bc627a67a..0c6576ca7 100644
--- a/docker-compose.travis.yml
+++ b/docker-compose.travis.yml
@@ -26,9 +26,4 @@ services:
ports:
- 4001:4001
- 4123:4123
- neo4j:
- environment:
- - NEO4J_AUTH=none
- ports:
- - 7687:7687
- - 7474:7474
+
diff --git a/docker-compose.yml b/docker-compose.yml
index 86d3d4b2a..bae571b86 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -12,6 +12,7 @@ services:
networks:
- hc-network
environment:
+ - NUXT_BUILD=.nuxt-dist
- HOST=0.0.0.0
- GRAPHQL_URI=http://backend:4000
- MAPBOX_TOKEN="pk.eyJ1IjoiaHVtYW4tY29ubmVjdGlvbiIsImEiOiJjajl0cnBubGoweTVlM3VwZ2lzNTNud3ZtIn0.bZ8KK9l70omjXbEkkbHGsQ"
diff --git a/neo4j/db_setup.sh b/neo4j/db_setup.sh
index 21ed54571..d4c7b9af8 100755
--- a/neo4j/db_setup.sh
+++ b/neo4j/db_setup.sh
@@ -34,6 +34,8 @@ CREATE CONSTRAINT ON (p:Post) ASSERT p.slug IS UNIQUE;
CREATE CONSTRAINT ON (c:Category) ASSERT c.slug IS UNIQUE;
CREATE CONSTRAINT ON (u:User) ASSERT u.slug IS UNIQUE;
CREATE CONSTRAINT ON (o:Organization) ASSERT o.slug IS UNIQUE;
+
+CREATE CONSTRAINT ON (e:EmailAddress) ASSERT e.email IS UNIQUE;
' | cypher-shell
echo '
diff --git a/package.json b/package.json
index b93b154ac..c7a78bc38 100644
--- a/package.json
+++ b/package.json
@@ -23,14 +23,14 @@
"codecov": "^3.5.0",
"cross-env": "^5.2.0",
"cypress": "^3.4.0",
- "cypress-cucumber-preprocessor": "^1.12.0",
- "cypress-file-upload": "^3.2.0",
+ "cypress-cucumber-preprocessor": "^1.13.0",
+ "cypress-file-upload": "^3.3.2",
"cypress-plugin-retries": "^1.2.2",
"dotenv": "^8.0.0",
"faker": "Marak/faker.js#master",
"graphql-request": "^1.8.2",
"neo4j-driver": "^1.7.5",
- "neode": "^0.2.16",
+ "neode": "^0.2.18",
"npm-run-all": "^4.1.5",
"slug": "^1.1.0"
}
diff --git a/webapp/.gitignore b/webapp/.gitignore
index f8c980f7c..bc179d78a 100644
--- a/webapp/.gitignore
+++ b/webapp/.gitignore
@@ -61,6 +61,8 @@ typings/
# nuxt.js build output
.nuxt
+# also the build output in docker container
+.nuxt-dist
# Nuxt generate
dist
diff --git a/webapp/components/Badges.vue b/webapp/components/Badges.vue
index 42ac23e4d..936d13adb 100644
--- a/webapp/components/Badges.vue
+++ b/webapp/components/Badges.vue
@@ -1,6 +1,6 @@
-
diff --git a/webapp/components/CategoriesSelect/CategoriesSelect.vue b/webapp/components/CategoriesSelect/CategoriesSelect.vue
index 163f31419..94276a958 100644
--- a/webapp/components/CategoriesSelect/CategoriesSelect.vue
+++ b/webapp/components/CategoriesSelect/CategoriesSelect.vue
@@ -27,7 +27,7 @@
diff --git a/webapp/components/FilterPosts/FilterPostsMenuItems.vue b/webapp/components/FilterPosts/FilterPostsMenuItems.vue
new file mode 100644
index 000000000..593781cdb
--- /dev/null
+++ b/webapp/components/FilterPosts/FilterPostsMenuItems.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webapp/components/comments/CommentForm/index.vue b/webapp/components/comments/CommentForm/index.vue
index 14dcace43..e0e0058e5 100644
--- a/webapp/components/comments/CommentForm/index.vue
+++ b/webapp/components/comments/CommentForm/index.vue
@@ -1,5 +1,5 @@
-
+
@@ -27,6 +27,7 @@ import gql from 'graphql-tag'
import HcEditor from '~/components/Editor/Editor'
import PostCommentsQuery from '~/graphql/PostCommentsQuery.js'
import CommentMutations from '~/graphql/CommentMutations.js'
+import { mapGetters } from 'vuex'
export default {
components: {
@@ -46,6 +47,11 @@ export default {
users: [],
}
},
+ computed: {
+ ...mapGetters({
+ editPending: 'editor/editPending',
+ }),
+ },
methods: {
updateEditorContent(value) {
const content = value.replace(/<(?:.|\n)*?>/gm, '').trim()
diff --git a/webapp/components/comments/CommentForm/spec.js b/webapp/components/comments/CommentForm/spec.js
index c3622151c..8420c97ba 100644
--- a/webapp/components/comments/CommentForm/spec.js
+++ b/webapp/components/comments/CommentForm/spec.js
@@ -40,6 +40,7 @@ describe('CommentForm.vue', () => {
'editor/placeholder': () => {
return 'some cool placeholder'
},
+ 'editor/editPending': () => false,
}
const store = new Vuex.Store({
getters,
diff --git a/webapp/components/comments/CommentList/index.vue b/webapp/components/comments/CommentList/index.vue
index ab5916629..e1996809f 100644
--- a/webapp/components/comments/CommentList/index.vue
+++ b/webapp/components/comments/CommentList/index.vue
@@ -16,11 +16,12 @@
-