ghost 4.25.1 → 4.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/content/themes/casper/assets/built/screen.css +1 -1
  2. package/content/themes/casper/assets/built/screen.css.map +1 -1
  3. package/content/themes/casper/assets/css/screen.css +54 -10
  4. package/content/themes/casper/package.json +1 -1
  5. package/core/app.js +8 -4
  6. package/core/boot.js +50 -23
  7. package/core/built/assets/{chunk.3.8f95b516d88ff4eec64c.js → chunk.3.e54be01b5124e4e27958.js} +7 -7
  8. package/core/built/assets/ghost-dark-ae67fe157509b6e82c607ba560fc52e9.css +1 -0
  9. package/core/built/assets/{ghost.min-3441c3282e390002626a2dc1d7586185.js → ghost.min-2d534cce15c43c646814b26f4beefb78.js} +131 -128
  10. package/core/built/assets/ghost.min-b1e58e098721e467388682a85a7c187d.css +1 -0
  11. package/core/built/assets/{vendor.min-6fc912d1248c906f95efad2cb3eebb7d.js → vendor.min-e433aa7d5620e7837f30e170cd43f84e.js} +569 -539
  12. package/core/frontend/apps/amp/lib/views/amp.hbs +8 -3
  13. package/core/frontend/helpers/ghost_head.js +1 -1
  14. package/core/frontend/src/cards/css/audio.css +258 -0
  15. package/core/frontend/src/cards/css/blockquote.css +13 -19
  16. package/core/frontend/src/cards/css/product.css +101 -0
  17. package/core/frontend/src/cards/css/toggle.css +20 -7
  18. package/core/frontend/src/cards/js/audio.js +147 -0
  19. package/core/server/notify.js +1 -2
  20. package/core/server/services/mega/template.js +21 -10
  21. package/core/server/services/members/api.js +2 -2
  22. package/core/server/services/members/emails/signup-paid.js +4 -4
  23. package/core/server/services/nft-oembed.js +1 -1
  24. package/core/server/services/twitter-embed.js +3 -1
  25. package/core/server/web/admin/views/default-prod.html +4 -4
  26. package/core/server/web/admin/views/default.html +4 -4
  27. package/core/server/web/parent/app.js +2 -22
  28. package/core/server/web/parent/backend.js +2 -0
  29. package/core/shared/express.js +1 -1
  30. package/core/shared/labs.js +6 -5
  31. package/package.json +16 -16
  32. package/yarn.lock +229 -326
  33. package/core/built/assets/ghost-dark-f67240a9636407594be38571c615629c.css +0 -1
  34. package/core/built/assets/ghost.min-ee5bd95a831378b4c8ccefb37d26eac0.css +0 -1
@@ -98,9 +98,9 @@ function createApiInstance(config) {
98
98
  `;
99
99
  case 'signup-paid':
100
100
  return `
101
- Thank you for subscribing to ${siteTitle}!
101
+ Hey there!
102
102
 
103
- Tap the link below to be automatically signed in:
103
+ Thank you for subscribing to ${siteTitle}. Tap the link below to be automatically signed in:
104
104
 
105
105
  ${url}
106
106
 
@@ -107,7 +107,7 @@ module.exports = ({siteTitle, email, url, accentColor = '#15212A', siteDomain, s
107
107
  <div class="content" style="box-sizing: border-box; display: block; margin: 0 auto; max-width: 600px; padding: 30px 20px;">
108
108
 
109
109
  <!-- START CENTERED WHITE CONTAINER -->
110
- <span class="preheader" style="color: transparent; display: none; height: 0; max-height: 0; max-width: 0; opacity: 0; overflow: hidden; mso-hide: all; visibility: hidden; width: 0;">Complete signup for ${siteTitle}!</span>
110
+ <span class="preheader" style="color: transparent; display: none; height: 0; max-height: 0; max-width: 0; opacity: 0; overflow: hidden; mso-hide: all; visibility: hidden; width: 0;">Thank you for subscribing to ${siteTitle}.</span>
111
111
  <table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 8px;">
112
112
 
113
113
  <!-- START MAIN CONTENT AREA -->
@@ -116,8 +116,8 @@ module.exports = ({siteTitle, email, url, accentColor = '#15212A', siteDomain, s
116
116
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
117
117
  <tr>
118
118
  <td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top;">
119
- <p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 20px; color: #15212A; font-weight: bold; line-height: 25px; margin: 0; margin-bottom: 15px;">Thank you for subscribing to ${siteTitle}</p>
120
- <p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; color: #3A464C; font-weight: normal; line-height: 25px; margin: 0; margin-bottom: 32px;">Tap the link below to be automatically signed in:</p>
119
+ <p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 20px; color: #15212A; font-weight: bold; line-height: 25px; margin: 0; margin-bottom: 15px;">Hey there!</p>
120
+ <p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; color: #3A464C; font-weight: normal; line-height: 25px; margin: 0; margin-bottom: 32px;">Thank you for subscribing to ${siteTitle}. Tap the link below to be automatically signed in:</p>
121
121
  <table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
122
122
  <tbody>
123
123
  <tr>
@@ -125,7 +125,7 @@ module.exports = ({siteTitle, email, url, accentColor = '#15212A', siteDomain, s
125
125
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
126
126
  <tbody>
127
127
  <tr>
128
- <td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; background-color: ${accentColor}; border-radius: 5px; text-align: center;"> <a href="${url}" target="_blank" style="display: inline-block; color: #ffffff; background-color: ${accentColor}; border: solid 1px ${accentColor}; border-radius: 5px; box-sizing: border-box; cursor: pointer; text-decoration: none; font-size: 16px; font-weight: normal; margin: 0; padding: 9px 22px 10px; border-color: ${accentColor};">Confirm signup</a> </td>
128
+ <td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; background-color: ${accentColor}; border-radius: 5px; text-align: center;"> <a href="${url}" target="_blank" style="display: inline-block; color: #ffffff; background-color: ${accentColor}; border: solid 1px ${accentColor}; border-radius: 5px; box-sizing: border-box; cursor: pointer; text-decoration: none; font-size: 16px; font-weight: normal; margin: 0; padding: 9px 22px 10px; border-color: ${accentColor};">Sign in</a> </td>
129
129
  </tr>
130
130
  </tbody>
131
131
  </table>
@@ -46,7 +46,7 @@ class NFTOEmbedProvider {
46
46
  return {
47
47
  version: '1.0',
48
48
  type: 'nft',
49
- title: result.body.name,
49
+ title: result.body.name ? result.body.name : `#${result.body.token_id}`,
50
50
  author_name: result.body.creator.user.username,
51
51
  author_url: `https://opensea.io/${result.body.creator.user.username}`,
52
52
  provider_name: 'OpenSea',
@@ -1,4 +1,5 @@
1
1
  const {extract} = require('oembed-parser');
2
+ const labs = require('../../shared/labs');
2
3
 
3
4
  /**
4
5
  * @typedef {import('./oembed').ICustomProvider} ICustomProvider
@@ -41,7 +42,7 @@ class TwitterOEmbedProvider {
41
42
  /** @type {object} */
42
43
  const oembedData = await extract(url.href);
43
44
 
44
- if (this.dependencies.config.bearerToken) {
45
+ if (this.dependencies.config.bearerToken && labs.isSet('richTwitterNewsletters')) {
45
46
  const query = {
46
47
  expansions: ['attachments.poll_ids', 'attachments.media_keys', 'author_id', 'entities.mentions.username', 'geo.place_id', 'in_reply_to_user_id', 'referenced_tweets.id', 'referenced_tweets.id.author_id'],
47
48
  'media.fields': ['duration_ms', 'height', 'media_key', 'preview_image_url', 'type', 'url', 'width', 'public_metrics', 'alt_text'],
@@ -66,6 +67,7 @@ class TwitterOEmbedProvider {
66
67
  const body = JSON.parse(result.body);
67
68
 
68
69
  oembedData.tweet_data = body.data;
70
+ oembedData.tweet_data.includes = body.includes;
69
71
  } catch (err) {
70
72
  this.dependencies.logging.error(err);
71
73
  }
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.25%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.27%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -41,7 +41,7 @@
41
41
 
42
42
 
43
43
  <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-ee5bd95a831378b4c8ccefb37d26eac0.css" title="light">
44
+ <link rel="stylesheet" href="assets/ghost.min-b1e58e098721e467388682a85a7c187d.css" title="light">
45
45
 
46
46
 
47
47
 
@@ -59,8 +59,8 @@
59
59
  <div id="ember-basic-dropdown-wormhole"></div>
60
60
 
61
61
 
62
- <script src="assets/vendor.min-6fc912d1248c906f95efad2cb3eebb7d.js"></script>
63
- <script src="assets/ghost.min-3441c3282e390002626a2dc1d7586185.js"></script>
62
+ <script src="assets/vendor.min-e433aa7d5620e7837f30e170cd43f84e.js"></script>
63
+ <script src="assets/ghost.min-2d534cce15c43c646814b26f4beefb78.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.25%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.27%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -41,7 +41,7 @@
41
41
 
42
42
 
43
43
  <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-ee5bd95a831378b4c8ccefb37d26eac0.css" title="light">
44
+ <link rel="stylesheet" href="assets/ghost.min-b1e58e098721e467388682a85a7c187d.css" title="light">
45
45
 
46
46
 
47
47
 
@@ -59,8 +59,8 @@
59
59
  <div id="ember-basic-dropdown-wormhole"></div>
60
60
 
61
61
 
62
- <script src="assets/vendor.min-6fc912d1248c906f95efad2cb3eebb7d.js"></script>
63
- <script src="assets/ghost.min-3441c3282e390002626a2dc1d7586185.js"></script>
62
+ <script src="assets/vendor.min-e433aa7d5620e7837f30e170cd43f84e.js"></script>
63
+ <script src="assets/ghost.min-2d534cce15c43c646814b26f4beefb78.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
@@ -3,22 +3,15 @@ const config = require('../../../shared/config');
3
3
  const express = require('../../../shared/express');
4
4
  const compress = require('compression');
5
5
  const mw = require('./middleware');
6
- const vhost = require('@tryghost/vhost-middleware');
7
6
 
8
- /**
9
- * @param {Object} options
10
- * @param {Boolean} [options.start]
11
- * @param {Boolean} [options.backend]
12
- * @param {Boolean} [options.frontend]
13
- */
14
- module.exports = function setupParentApp({start, frontend = true, backend = true}) {
7
+ module.exports = function setupParentApp() {
15
8
  debug('ParentApp setup start');
16
9
  const parentApp = express('parent');
17
10
 
18
11
  parentApp.use(mw.requestId);
19
12
  parentApp.use(mw.logRequest);
20
13
 
21
- // Register event emmiter on req/res to trigger cache invalidation webhook event
14
+ // Register event emitter on req/res to trigger cache invalidation webhook event
22
15
  parentApp.use(mw.emitEvents);
23
16
 
24
17
  // enabled gzip compression by default
@@ -30,19 +23,6 @@ module.exports = function setupParentApp({start, frontend = true, backend = true
30
23
  // @TODO: figure out if this is really needed everywhere? Is it not frontend only...
31
24
  parentApp.use(mw.ghostLocals);
32
25
 
33
- // Mount the express apps on the parentApp
34
-
35
- if (backend) {
36
- debug('Mounting bakcend: ADMIN + API');
37
- const backendApp = require('./backend')();
38
- parentApp.use(vhost(config.getBackendMountPath(), backendApp));
39
- }
40
-
41
- if (frontend) {
42
- debug('Mounting frontend: SITE + MEMBERS');
43
- const frontendApp = require('./frontend')({start});
44
- parentApp.use(vhost(config.getFrontendMountPath(), frontendApp));
45
- }
46
26
  debug('ParentApp setup end');
47
27
 
48
28
  return parentApp;
@@ -10,9 +10,11 @@ module.exports = () => {
10
10
  // BACKEND
11
11
  // Wrap the admin and API apps into a single express app for use with vhost
12
12
  const backendApp = express('backend');
13
+
13
14
  backendApp.lazyUse('/ghost/api', require('../api'));
14
15
  backendApp.lazyUse('/ghost/oauth', require('../oauth'));
15
16
  backendApp.lazyUse('/ghost/.well-known', require('../well-known'));
17
+
16
18
  backendApp.use('/ghost', require('../../services/auth/session').createSessionFromToken, require('../admin')());
17
19
 
18
20
  return backendApp;
@@ -29,7 +29,7 @@ module.exports = (name) => {
29
29
  };
30
30
 
31
31
  // Wrap the main express router call
32
- // This is mostly an experiement, and can likely be removed soon
32
+ // This is mostly an experiment, and can likely be removed soon
33
33
  module.exports.Router = (name, options) => {
34
34
  debug('new Router start', name);
35
35
  const router = express.Router(options);
@@ -16,7 +16,10 @@ const messages = {
16
16
  // flags in this list always return `true`, allows quick global enable prior to full flag removal
17
17
  const GA_FEATURES = [
18
18
  'customThemeSettings',
19
- 'nftCard'
19
+ 'nftCard',
20
+ 'calloutCard',
21
+ 'accordionCard',
22
+ 'richTwitterNewsletters'
20
23
  ];
21
24
 
22
25
  // NOTE: this allowlist is meant to be used to filter out any unexpected
@@ -34,14 +37,12 @@ const ALPHA_FEATURES = [
34
37
  'mediaAPI',
35
38
  'filesAPI',
36
39
  'membersAutoLogin',
37
- 'calloutCard',
38
- 'accordionCard',
39
40
  'fileCard',
40
41
  'audioCard',
41
42
  'videoCard',
42
43
  'productCard',
43
- 'quoteStyles',
44
- 'beforeAfterCard'
44
+ 'beforeAfterCard',
45
+ 'tweetGridCard'
45
46
  ];
46
47
 
47
48
  module.exports.GA_KEYS = [...GA_FEATURES];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "4.25.1",
3
+ "version": "4.27.1",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "@nexes/nql": "0.6.0",
57
- "@sentry/node": "6.15.0",
57
+ "@sentry/node": "6.16.0",
58
58
  "@tryghost/adapter-manager": "0.2.24",
59
59
  "@tryghost/admin-api-schema": "2.6.1",
60
60
  "@tryghost/bookshelf-plugins": "0.3.5",
@@ -73,9 +73,9 @@
73
73
  "@tryghost/job-manager": "0.8.16",
74
74
  "@tryghost/kg-card-factory": "3.1.0",
75
75
  "@tryghost/kg-default-atoms": "3.1.0",
76
- "@tryghost/kg-default-cards": "5.9.2",
76
+ "@tryghost/kg-default-cards": "5.11.5",
77
77
  "@tryghost/kg-markdown-html-renderer": "5.1.0",
78
- "@tryghost/kg-mobiledoc-html-renderer": "5.3.0",
78
+ "@tryghost/kg-mobiledoc-html-renderer": "5.3.1",
79
79
  "@tryghost/limit-service": "1.0.6",
80
80
  "@tryghost/logging": "1.0.2",
81
81
  "@tryghost/magic-link": "1.0.14",
@@ -130,7 +130,7 @@
130
130
  "ghost-storage-base": "1.0.0",
131
131
  "glob": "7.2.0",
132
132
  "got": "9.6.0",
133
- "gscan": "4.15.2",
133
+ "gscan": "4.16.0",
134
134
  "html-to-text": "5.1.1",
135
135
  "image-size": "1.0.0",
136
136
  "intl": "1.2.5",
@@ -145,18 +145,18 @@
145
145
  "lodash": "4.17.21",
146
146
  "luxon": "2.1.1",
147
147
  "mailgun-js": "0.22.0",
148
- "metascraper": "5.25.4",
149
- "metascraper-author": "5.25.4",
150
- "metascraper-description": "5.25.4",
151
- "metascraper-image": "5.25.4",
152
- "metascraper-logo": "5.25.4",
153
- "metascraper-logo-favicon": "5.25.4",
154
- "metascraper-publisher": "5.25.4",
155
- "metascraper-title": "5.25.4",
156
- "metascraper-url": "5.25.4",
148
+ "metascraper": "5.25.5",
149
+ "metascraper-author": "5.25.5",
150
+ "metascraper-description": "5.25.5",
151
+ "metascraper-image": "5.25.5",
152
+ "metascraper-logo": "5.25.5",
153
+ "metascraper-logo-favicon": "5.25.5",
154
+ "metascraper-publisher": "5.25.5",
155
+ "metascraper-title": "5.25.5",
156
+ "metascraper-url": "5.25.5",
157
157
  "moment": "2.24.0",
158
158
  "moment-timezone": "0.5.23",
159
- "multer": "1.4.3",
159
+ "multer": "1.4.4",
160
160
  "mysql": "2.18.1",
161
161
  "nconf": "0.11.3",
162
162
  "node-jose": "2.0.0",
@@ -174,7 +174,7 @@
174
174
  "xml": "1.0.1"
175
175
  },
176
176
  "optionalDependencies": {
177
- "@tryghost/html-to-mobiledoc": "1.4.1",
177
+ "@tryghost/html-to-mobiledoc": "1.5.0",
178
178
  "sqlite3": "5.0.2"
179
179
  },
180
180
  "devDependencies": {