ghost 4.30.0 → 4.32.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 (59) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/content/themes/casper/assets/built/screen.css +1 -1
  4. package/content/themes/casper/assets/built/screen.css.map +1 -1
  5. package/content/themes/casper/assets/css/screen.css +110 -43
  6. package/content/themes/casper/package.json +1 -1
  7. package/core/built/assets/{chunk.3.e54be01b5124e4e27958.js → chunk.3.4906cf0b01d6d8e33374.js} +134 -130
  8. package/core/built/assets/ghost-dark-67f6ba8347be37f997b3a7e430b29f72.css +1 -0
  9. package/core/built/assets/ghost.min-2d5f48403647d1e11805691cc7ad0835.css +1 -0
  10. package/core/built/assets/{ghost.min-884660873d56fcc3d2a3b9fe94c9f022.js → ghost.min-7535b70693bcefde1665bdf621087cbe.js} +1066 -1129
  11. package/core/built/assets/{vendor.min-987af30228885bce50f05c4723fe6f53.css → vendor.min-0e0334a490951ab747706621f9ccd8b6.css} +18 -10
  12. package/core/built/assets/{vendor.min-a2fd1e62ce6da8911fee8e812d8c6ceb.js → vendor.min-45e83041aeba4ea7b184f669b20a2b23.js} +1059 -1024
  13. package/core/frontend/apps/amp/lib/views/amp.hbs +134 -0
  14. package/core/frontend/helpers/get.js +4 -0
  15. package/core/frontend/meta/description.js +3 -3
  16. package/core/frontend/services/sitemap/base-generator.js +21 -18
  17. package/core/frontend/services/sitemap/handler.js +13 -4
  18. package/core/frontend/services/sitemap/index-generator.js +20 -10
  19. package/core/frontend/services/sitemap/manager.js +8 -5
  20. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +1 -6
  21. package/core/frontend/src/cards/css/audio.css +5 -0
  22. package/core/frontend/src/cards/css/before-after.css +45 -11
  23. package/core/frontend/src/cards/css/bookmark.css +5 -0
  24. package/core/frontend/src/cards/css/button.css +5 -0
  25. package/core/frontend/src/cards/css/callout.css +11 -1
  26. package/core/frontend/src/cards/css/file.css +14 -3
  27. package/core/frontend/src/cards/css/gallery.css +10 -3
  28. package/core/frontend/src/cards/css/header.css +233 -0
  29. package/core/frontend/src/cards/css/nft.css +5 -0
  30. package/core/frontend/src/cards/css/product.css +7 -5
  31. package/core/frontend/src/cards/css/toggle.css +6 -0
  32. package/core/frontend/src/cards/css/video.css +4 -0
  33. package/core/frontend/src/cards/js/before-after.js +10 -15
  34. package/core/frontend/views/unsubscribe.hbs +12 -7
  35. package/core/frontend/web/site.js +2 -3
  36. package/core/server/models/single-use-token.js +1 -1
  37. package/core/server/services/mail/templates/invite-user.html +1 -1
  38. package/core/server/services/mail/templates/reset-password.html +1 -1
  39. package/core/server/services/mail/templates/welcome.html +1 -1
  40. package/core/server/services/mega/template.js +113 -3
  41. package/core/server/services/members/emails/signin.js +1 -1
  42. package/core/server/services/members/emails/signup-paid.js +1 -1
  43. package/core/server/services/members/emails/signup.js +1 -1
  44. package/core/server/services/members/emails/subscribe.js +1 -1
  45. package/core/server/services/members/emails/updateEmail.js +1 -1
  46. package/core/server/services/members/service.js +9 -0
  47. package/core/server/services/themes/activation-bridge.js +3 -10
  48. package/core/server/services/themes/index.js +0 -21
  49. package/core/server/services/twitter-embed.js +1 -2
  50. package/core/server/web/admin/views/default-prod.html +5 -5
  51. package/core/server/web/admin/views/default.html +5 -5
  52. package/core/server/web/api/canary/admin/routes.js +2 -6
  53. package/core/shared/config/defaults.json +2 -2
  54. package/core/shared/config/overrides.json +11 -1
  55. package/core/shared/labs.js +1 -14
  56. package/package.json +26 -26
  57. package/yarn.lock +2265 -2511
  58. package/core/built/assets/ghost-dark-1594d07a0716e0253a78234c8e42d765.css +0 -1
  59. package/core/built/assets/ghost.min-c21fea11c3f431994a8ee7c47a8ed145.css +0 -1
@@ -1,6 +1,5 @@
1
1
  const debug = require('@tryghost/debug')('themes');
2
2
  const bridge = require('../../../bridge');
3
- const labs = require('../../../shared/labs');
4
3
  const customThemeSettings = require('../custom-theme-settings');
5
4
 
6
5
  /**
@@ -11,25 +10,19 @@ module.exports = {
11
10
  activateFromBoot: async (themeName, theme, checkedTheme) => {
12
11
  debug('Activating theme (method A on boot)', themeName);
13
12
  // TODO: probably a better place for this to happen - after successful activation / when reloading site?
14
- if (labs.isSet('customThemeSettings')) {
15
- await customThemeSettings.api.activateTheme(themeName, checkedTheme);
16
- }
13
+ await customThemeSettings.api.activateTheme(themeName, checkedTheme);
17
14
  await bridge.activateTheme(theme, checkedTheme);
18
15
  },
19
16
  activateFromAPI: async (themeName, theme, checkedTheme) => {
20
17
  debug('Activating theme (method B on API "activate")', themeName);
21
18
  // TODO: probably a better place for this to happen - after successful activation / when reloading site?
22
- if (labs.isSet('customThemeSettings')) {
23
- await customThemeSettings.api.activateTheme(themeName, checkedTheme);
24
- }
19
+ await customThemeSettings.api.activateTheme(themeName, checkedTheme);
25
20
  await bridge.activateTheme(theme, checkedTheme);
26
21
  },
27
22
  activateFromAPIOverride: async (themeName, theme, checkedTheme) => {
28
23
  debug('Activating theme (method C on API "override")', themeName);
29
24
  // TODO: probably a better place for this to happen - after successful activation / when reloading site?
30
- if (labs.isSet('customThemeSettings')) {
31
- await customThemeSettings.api.activateTheme(themeName, checkedTheme);
32
- }
25
+ await customThemeSettings.api.activateTheme(themeName, checkedTheme);
33
26
  await bridge.activateTheme(theme, checkedTheme);
34
27
  }
35
28
  };
@@ -6,12 +6,6 @@ const installer = require('./installer');
6
6
 
7
7
  const settingsCache = require('../../../shared/settings-cache');
8
8
 
9
- // Needed for theme re-activation after customThemeSettings flag is toggled
10
- // @TODO: remove when customThemeSettings flag is removed
11
- const labs = require('../../../shared/labs');
12
- const events = require('../../lib/common/events');
13
- let _lastLabsValue;
14
-
15
9
  module.exports = {
16
10
  /*
17
11
  * Load the currently active theme
@@ -19,21 +13,6 @@ module.exports = {
19
13
  init: async () => {
20
14
  const themeName = settingsCache.get('active_theme');
21
15
 
22
- /**
23
- * When customThemeSettings labs flag is toggled we need to re-validate and activate
24
- * the active theme so that it's settings are read and synced
25
- *
26
- * @TODO: remove when customThemeSettings labs flag is removed
27
- */
28
- _lastLabsValue = labs.isSet('customThemeSettings');
29
- events.on('settings.labs.edited', () => {
30
- if (labs.isSet('customThemeSettings') !== _lastLabsValue) {
31
- _lastLabsValue = labs.isSet('customThemeSettings');
32
-
33
- activate.activate(settingsCache.get('active_theme'));
34
- }
35
- });
36
-
37
16
  return activate.loadAndActivate(themeName);
38
17
  },
39
18
  /**
@@ -1,6 +1,5 @@
1
1
  const {extract} = require('oembed-parser');
2
2
  const logging = require('@tryghost/logging');
3
- const labs = require('../../shared/labs');
4
3
 
5
4
  /**
6
5
  * @typedef {import('./oembed').ICustomProvider} ICustomProvider
@@ -43,7 +42,7 @@ class TwitterOEmbedProvider {
43
42
  /** @type {object} */
44
43
  const oembedData = await extract(url.href);
45
44
 
46
- if (this.dependencies.config.bearerToken && labs.isSet('richTwitterNewsletters')) {
45
+ if (this.dependencies.config.bearerToken) {
47
46
  const query = {
48
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'],
49
48
  'media.fields': ['duration_ms', 'height', 'media_key', 'preview_image_url', 'type', 'url', 'width', 'public_metrics', 'alt_text'],
@@ -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.30%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.32%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%2C%22propagation%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" />
@@ -40,8 +40,8 @@
40
40
  </style>
41
41
 
42
42
 
43
- <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-c21fea11c3f431994a8ee7c47a8ed145.css" title="light">
43
+ <link rel="stylesheet" href="assets/vendor.min-0e0334a490951ab747706621f9ccd8b6.css">
44
+ <link rel="stylesheet" href="assets/ghost.min-2d5f48403647d1e11805691cc7ad0835.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-a2fd1e62ce6da8911fee8e812d8c6ceb.js"></script>
63
- <script src="assets/ghost.min-884660873d56fcc3d2a3b9fe94c9f022.js"></script>
62
+ <script src="assets/vendor.min-45e83041aeba4ea7b184f669b20a2b23.js"></script>
63
+ <script src="assets/ghost.min-7535b70693bcefde1665bdf621087cbe.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.30%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.32%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%2C%22propagation%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" />
@@ -40,8 +40,8 @@
40
40
  </style>
41
41
 
42
42
 
43
- <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-c21fea11c3f431994a8ee7c47a8ed145.css" title="light">
43
+ <link rel="stylesheet" href="assets/vendor.min-0e0334a490951ab747706621f9ccd8b6.css">
44
+ <link rel="stylesheet" href="assets/ghost.min-2d5f48403647d1e11805691cc7ad0835.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-a2fd1e62ce6da8911fee8e812d8c6ceb.js"></script>
63
- <script src="assets/ghost.min-884660873d56fcc3d2a3b9fe94c9f022.js"></script>
62
+ <script src="assets/vendor.min-45e83041aeba4ea7b184f669b20a2b23.js"></script>
63
+ <script src="assets/ghost.min-7535b70693bcefde1665bdf621087cbe.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
@@ -4,7 +4,6 @@ const apiMw = require('../../middleware');
4
4
  const mw = require('./middleware');
5
5
 
6
6
  const shared = require('../../../shared');
7
- const labs = require('../../../../../shared/labs');
8
7
 
9
8
  module.exports = function apiRoutes() {
10
9
  const router = express.Router('canary admin');
@@ -238,14 +237,12 @@ module.exports = function apiRoutes() {
238
237
 
239
238
  // ## media
240
239
  router.post('/media/upload',
241
- labs.enabledMiddleware('mediaAPI'),
242
240
  mw.authAdminApi,
243
241
  apiMw.upload.media('file', 'thumbnail'),
244
242
  apiMw.upload.mediaValidation({type: 'media'}),
245
243
  http(api.media.upload)
246
244
  );
247
245
  router.put('/media/thumbnail/upload',
248
- labs.enabledMiddleware('mediaAPI'),
249
246
  mw.authAdminApi,
250
247
  apiMw.upload.single('file'),
251
248
  apiMw.upload.validation({type: 'images'}),
@@ -254,7 +251,6 @@ module.exports = function apiRoutes() {
254
251
 
255
252
  // ## files
256
253
  router.post('/files/upload',
257
- labs.enabledMiddleware('filesAPI'),
258
254
  mw.authAdminApi,
259
255
  apiMw.upload.single('file'),
260
256
  http(api.files.upload)
@@ -303,8 +299,8 @@ module.exports = function apiRoutes() {
303
299
  router.del('/snippets/:id', mw.authAdminApi, http(api.snippets.destroy));
304
300
 
305
301
  // ## Custom theme settings
306
- router.get('/custom_theme_settings', mw.authAdminApi, labs.enabledMiddleware('customThemeSettings'), http(api.customThemeSettings.browse));
307
- router.put('/custom_theme_settings', mw.authAdminApi, labs.enabledMiddleware('customThemeSettings'), http(api.customThemeSettings.edit));
302
+ router.get('/custom_theme_settings', mw.authAdminApi, http(api.customThemeSettings.browse));
303
+ router.put('/custom_theme_settings', mw.authAdminApi, http(api.customThemeSettings.edit));
308
304
 
309
305
  return router;
310
306
  };
@@ -127,8 +127,8 @@
127
127
  "emailAnalytics": true
128
128
  },
129
129
  "portal": {
130
- "url": "https://unpkg.com/@tryghost/portal@~1.12.0/umd/portal.min.js",
131
- "version": "1.12"
130
+ "url": "https://unpkg.com/@tryghost/portal@~1.13.0/umd/portal.min.js",
131
+ "version": "1.13"
132
132
  },
133
133
  "tenor": {
134
134
  "publicReadOnlyApiKey": null,
@@ -32,7 +32,17 @@
32
32
  },
33
33
  "media": {
34
34
  "extensions": [".mp4",".webm", ".ogv", ".mp3", ".wav", ".ogg"],
35
- "contentTypes": ["video/mp4", "video/webm", "video/ogg", "audio/mpeg", "audio/vnd.wav", "audio/ogg"]
35
+ "contentTypes": [
36
+ "video/mp4",
37
+ "video/webm",
38
+ "video/ogg",
39
+ "audio/mpeg",
40
+ "audio/vnd.wav",
41
+ "audio/wave",
42
+ "audio/wav",
43
+ "audio/x-wav",
44
+ "audio/ogg"
45
+ ]
36
46
  },
37
47
  "thumbnails": {
38
48
  "extensions": [".jpg", ".jpeg", ".gif", ".png", ".svg", ".svgz", ".ico", ".webp"],
@@ -15,17 +15,6 @@ const messages = {
15
15
 
16
16
  // flags in this list always return `true`, allows quick global enable prior to full flag removal
17
17
  const GA_FEATURES = [
18
- 'customThemeSettings',
19
- 'nftCard',
20
- 'calloutCard',
21
- 'videoCard',
22
- 'accordionCard',
23
- 'productCard',
24
- 'richTwitterNewsletters',
25
- 'audioCard',
26
- 'mediaAPI',
27
- 'membersAutoLogin',
28
- 'filesAPI'
29
18
  ];
30
19
 
31
20
  // NOTE: this allowlist is meant to be used to filter out any unexpected
@@ -40,10 +29,8 @@ const ALPHA_FEATURES = [
40
29
  'membersActivity',
41
30
  'cardSettingsPanel',
42
31
  'urlCache',
43
- 'fileCard',
44
32
  'beforeAfterCard',
45
- 'tweetGridCard',
46
- 'headerCard'
33
+ 'tweetGridCard'
47
34
  ];
48
35
 
49
36
  module.exports.GA_KEYS = [...GA_FEATURES];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "4.30.0",
3
+ "version": "4.32.1",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -55,7 +55,7 @@
55
55
  "dependencies": {
56
56
  "@nexes/nql": "0.6.0",
57
57
  "@sentry/node": "6.16.1",
58
- "@tryghost/adapter-manager": "0.2.25",
58
+ "@tryghost/adapter-manager": "0.2.26",
59
59
  "@tryghost/admin-api-schema": "2.6.1",
60
60
  "@tryghost/bookshelf-plugins": "0.3.5",
61
61
  "@tryghost/bootstrap-socket": "0.2.15",
@@ -69,32 +69,32 @@
69
69
  "@tryghost/errors": "1.2.0",
70
70
  "@tryghost/express-dynamic-redirects": "0.2.2",
71
71
  "@tryghost/helpers": "1.1.54",
72
- "@tryghost/image-transform": "1.0.25",
72
+ "@tryghost/image-transform": "1.0.26",
73
73
  "@tryghost/job-manager": "0.8.17",
74
74
  "@tryghost/kg-card-factory": "3.1.0",
75
75
  "@tryghost/kg-default-atoms": "3.1.0",
76
- "@tryghost/kg-default-cards": "5.14.7",
76
+ "@tryghost/kg-default-cards": "5.15.11",
77
77
  "@tryghost/kg-markdown-html-renderer": "5.1.0",
78
78
  "@tryghost/kg-mobiledoc-html-renderer": "5.3.1",
79
- "@tryghost/limit-service": "1.0.7",
79
+ "@tryghost/limit-service": "1.0.8",
80
80
  "@tryghost/logging": "2.0.0",
81
81
  "@tryghost/magic-link": "1.0.14",
82
- "@tryghost/members-api": "2.8.6",
82
+ "@tryghost/members-api": "2.8.8",
83
83
  "@tryghost/members-csv": "1.2.0",
84
84
  "@tryghost/members-importer": "0.3.5",
85
85
  "@tryghost/members-offers": "0.10.3",
86
86
  "@tryghost/members-ssr": "1.0.16",
87
87
  "@tryghost/metrics": "1.0.1",
88
- "@tryghost/minifier": "0.1.8",
88
+ "@tryghost/minifier": "0.1.9",
89
89
  "@tryghost/mw-error-handler": "0.1.1",
90
90
  "@tryghost/mw-session-from-token": "0.1.26",
91
91
  "@tryghost/nodemailer": "0.3.8",
92
- "@tryghost/package-json": "1.0.13",
92
+ "@tryghost/package-json": "1.0.14",
93
93
  "@tryghost/promise": "0.1.13",
94
94
  "@tryghost/request": "0.1.10",
95
95
  "@tryghost/root-utils": "0.3.7",
96
96
  "@tryghost/security": "0.2.13",
97
- "@tryghost/session-service": "0.1.35",
97
+ "@tryghost/session-service": "0.1.36",
98
98
  "@tryghost/settings-path-manager": "0.1.2",
99
99
  "@tryghost/social-urls": "0.1.27",
100
100
  "@tryghost/string": "0.1.21",
@@ -120,7 +120,7 @@
120
120
  "cookie-session": "1.4.0",
121
121
  "cors": "2.8.5",
122
122
  "downsize": "0.0.8",
123
- "express": "4.17.1",
123
+ "express": "4.17.2",
124
124
  "express-brute": "1.0.1",
125
125
  "express-hbs": "2.4.0",
126
126
  "express-jwt": "6.1.0",
@@ -131,7 +131,7 @@
131
131
  "ghost-storage-base": "1.0.0",
132
132
  "glob": "7.2.0",
133
133
  "got": "9.6.0",
134
- "gscan": "4.19.0",
134
+ "gscan": "4.20.2",
135
135
  "html-to-text": "5.1.1",
136
136
  "image-size": "1.0.0",
137
137
  "intl": "1.2.5",
@@ -144,17 +144,17 @@
144
144
  "knex": "0.21.21",
145
145
  "knex-migrator": "4.1.3",
146
146
  "lodash": "4.17.21",
147
- "luxon": "2.2.0",
147
+ "luxon": "2.3.0",
148
148
  "mailgun-js": "0.22.0",
149
- "metascraper": "5.25.5",
150
- "metascraper-author": "5.25.5",
151
- "metascraper-description": "5.25.5",
152
- "metascraper-image": "5.25.5",
153
- "metascraper-logo": "5.25.5",
154
- "metascraper-logo-favicon": "5.25.5",
155
- "metascraper-publisher": "5.25.5",
156
- "metascraper-title": "5.25.5",
157
- "metascraper-url": "5.25.5",
149
+ "metascraper": "5.25.7",
150
+ "metascraper-author": "5.25.7",
151
+ "metascraper-description": "5.25.7",
152
+ "metascraper-image": "5.25.7",
153
+ "metascraper-logo": "5.25.7",
154
+ "metascraper-logo-favicon": "5.25.7",
155
+ "metascraper-publisher": "5.25.7",
156
+ "metascraper-title": "5.25.7",
157
+ "metascraper-url": "5.25.7",
158
158
  "moment": "2.24.0",
159
159
  "moment-timezone": "0.5.23",
160
160
  "multer": "1.4.4",
@@ -162,7 +162,7 @@
162
162
  "nconf": "0.11.3",
163
163
  "node-jose": "2.0.0",
164
164
  "oembed-parser": "1.4.9",
165
- "passport": "0.5.0",
165
+ "passport": "0.5.2",
166
166
  "passport-google-oauth": "2.0.0",
167
167
  "path-match": "1.2.4",
168
168
  "probe-image-size": "5.0.0",
@@ -175,19 +175,19 @@
175
175
  "xml": "1.0.1"
176
176
  },
177
177
  "optionalDependencies": {
178
- "@tryghost/html-to-mobiledoc": "1.5.2",
178
+ "@tryghost/html-to-mobiledoc": "1.8.2",
179
179
  "sqlite3": "5.0.2"
180
180
  },
181
181
  "devDependencies": {
182
182
  "@ethanresnick/chai-jest-snapshot": "3.0.0",
183
183
  "@lodder/grunt-postcss": "3.1.1",
184
- "c8": "7.10.0",
184
+ "c8": "7.11.0",
185
185
  "chai": "4.3.4",
186
186
  "coffeescript": "2.6.1",
187
- "cssnano": "5.0.12",
187
+ "cssnano": "5.0.14",
188
188
  "eslint": "7.32.0",
189
189
  "eslint-plugin-ghost": "2.11.0",
190
- "expect": "27.4.2",
190
+ "expect": "27.4.6",
191
191
  "grunt": "1.4.1",
192
192
  "grunt-bg-shell": "2.3.3",
193
193
  "grunt-contrib-clean": "2.0.0",