ghost 4.32.0 → 4.33.0

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 (80) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/core/boot.js +3 -0
  4. package/core/built/assets/{chunk.3.8f95b516d88ff4eec64c.js → chunk.3.4906cf0b01d6d8e33374.js} +134 -130
  5. package/core/built/assets/{ghost-dark-43f5faa616791819b3ae91e128ec41f0.css → ghost-dark-661a50922267648a0362c3d367a22013.css} +1 -1
  6. package/core/built/assets/{ghost.min-c3f7cbabcc1a69476534453c6c747ee3.css → ghost.min-1f0218f33e08f8d69b2159977d0c9318.css} +1 -1
  7. package/core/built/assets/{ghost.min-2b20489c79323b165909749382adc158.js → ghost.min-501554f903f29164473a5dc620caaddb.js} +719 -726
  8. package/core/built/assets/img/apple-touch-icon-74680e326a7e87b159d366c7d4fb3d4b.png +0 -0
  9. package/core/built/assets/img/large-ac90af7c93a4b47e8d956fa9fef31d9d.png +0 -0
  10. package/core/built/assets/img/medium-fef07013cffd5c45a655a250912a0ad7.png +0 -0
  11. package/core/built/assets/img/small-b90396925485f17b2ca82c31be42de5f.png +0 -0
  12. package/core/built/assets/img/touch-icon-ipad-2e78629d62ad05746f980f14623dfadb.png +0 -0
  13. package/core/built/assets/img/touch-icon-iphone-93ed4382d391be9180093fd77ce8f410.png +0 -0
  14. package/core/built/assets/{vendor.min-987af30228885bce50f05c4723fe6f53.css → vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css} +1 -1
  15. package/core/built/assets/{vendor.min-992a9b07f7d0a67b5a4afd91319edf8b.js → vendor.min-d43620e98444a46441495445f4c155f8.js} +1407 -1455
  16. package/core/frontend/apps/amp/lib/views/amp.hbs +4 -4
  17. package/core/frontend/helpers/date.js +3 -4
  18. package/core/frontend/meta/description.js +3 -3
  19. package/core/frontend/services/routing/config/canary.js +1 -1
  20. package/core/frontend/services/routing/config/v4.js +1 -1
  21. package/core/frontend/services/sitemap/base-generator.js +21 -18
  22. package/core/frontend/services/sitemap/handler.js +13 -4
  23. package/core/frontend/services/sitemap/index-generator.js +20 -10
  24. package/core/frontend/services/sitemap/manager.js +8 -5
  25. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +3 -1
  26. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +1 -6
  27. package/core/frontend/src/cards/css/audio.css +5 -0
  28. package/core/frontend/src/cards/css/bookmark.css +5 -0
  29. package/core/frontend/src/cards/css/button.css +5 -0
  30. package/core/frontend/src/cards/css/callout.css +5 -0
  31. package/core/frontend/src/cards/css/file.css +6 -1
  32. package/core/frontend/src/cards/css/gallery.css +5 -0
  33. package/core/frontend/src/cards/css/header.css +5 -0
  34. package/core/frontend/src/cards/css/nft.css +5 -0
  35. package/core/frontend/src/cards/css/product.css +5 -0
  36. package/core/frontend/src/cards/css/toggle.css +5 -0
  37. package/core/frontend/src/cards/css/video.css +4 -0
  38. package/core/frontend/views/unsubscribe.hbs +12 -7
  39. package/core/frontend/web/site.js +7 -4
  40. package/core/server/api/canary/settings.js +2 -1
  41. package/core/server/api/canary/utils/serializers/output/products.js +4 -0
  42. package/core/server/data/db/info.js +4 -0
  43. package/core/server/data/migrations/versions/4.33/2022-01-14-11-50-add-type-column-to-products.js +12 -0
  44. package/core/server/data/migrations/versions/4.33/2022-01-14-11-51-add-default-free-tier.js +37 -0
  45. package/core/server/data/migrations/versions/4.33/2022-01-18-09-07-remove-duplicate-offer-redemptions.js +46 -0
  46. package/core/server/data/migrations/versions/4.33/2022-01-19-10-43-add-active-column-to-products-table.js +7 -0
  47. package/core/server/data/schema/default-settings.json +1 -1
  48. package/core/server/data/schema/fixtures/fixtures.json +9 -1
  49. package/core/server/data/schema/schema.js +2 -0
  50. package/core/server/models/base/plugins/data-manipulation.js +3 -2
  51. package/core/server/models/product.js +4 -0
  52. package/core/server/models/single-use-token.js +1 -1
  53. package/core/server/models/tag.js +8 -0
  54. package/core/server/services/mega/template.js +4 -2
  55. package/core/server/services/members/api.js +2 -16
  56. package/core/server/services/members/config.js +1 -9
  57. package/core/server/services/members/middleware.js +5 -3
  58. package/core/server/services/members/service.js +19 -46
  59. package/core/server/services/offers/service.js +1 -4
  60. package/core/server/services/public-config/config.js +3 -2
  61. package/core/server/services/stripe/config.js +24 -9
  62. package/core/server/services/stripe/index.js +36 -28
  63. package/core/server/services/themes/activation-bridge.js +3 -10
  64. package/core/server/services/themes/index.js +0 -21
  65. package/core/server/services/twitter-embed.js +1 -2
  66. package/core/server/update-check.js +2 -1
  67. package/core/server/web/admin/views/default-prod.html +10 -13
  68. package/core/server/web/admin/views/default.html +10 -13
  69. package/core/server/web/api/canary/admin/routes.js +2 -6
  70. package/core/server/web/members/app.js +3 -2
  71. package/core/server/web/shared/middleware/cache-control.js +12 -0
  72. package/core/shared/config/defaults.json +2 -2
  73. package/core/shared/labs.js +2 -14
  74. package/package.json +71 -69
  75. package/yarn.lock +2577 -2997
  76. package/core/built/assets/img/large-bf46e150380a4979a7389b45f5bb479d.png +0 -0
  77. package/core/built/assets/img/medium-7359075af28d69523987ff4c0e2067c5.png +0 -0
  78. package/core/built/assets/img/small-42ff134f320b8b5a6eca3781c4e4b2db.png +0 -0
  79. package/core/built/assets/img/touch-icon-ipad-3117c0fa950d0fc43c95becef61f4167.png +0 -0
  80. package/core/built/assets/img/touch-icon-iphone-d2790931c3477664981061ed9fa5242e.png +0 -0
@@ -4,6 +4,7 @@ const api = require('./api');
4
4
  const config = require('../shared/config');
5
5
  const urlUtils = require('./../shared/url-utils');
6
6
  const jobsService = require('./services/jobs');
7
+ const databaseInfo = require('./data/db/info');
7
8
 
8
9
  const request = require('@tryghost/request');
9
10
  const ghostVersion = require('@tryghost/version');
@@ -44,7 +45,7 @@ module.exports = async () => {
44
45
  config: {
45
46
  mail: config.get('mail'),
46
47
  env: config.get('env'),
47
- databaseType: config.get('database').client,
48
+ databaseType: databaseInfo.getEngine(),
48
49
  checkEndpoint: config.get('updateCheck:url'),
49
50
  isPrivacyDisabled: config.isPrivacyDisabled('useUpdateCheck'),
50
51
  notificationGroups: config.get('notificationGroups'),
@@ -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.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%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.33%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%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" />
@@ -21,16 +21,13 @@
21
21
  <meta name="apple-mobile-web-app-title" content="Ghost" />
22
22
 
23
23
  <link rel="shortcut icon" href="assets/img/favicon.ico" />
24
- <link rel="apple-touch-icon-precomposed" href="assets/img/touch-icon-iphone-d2790931c3477664981061ed9fa5242e.png" />
25
- <link rel="apple-touch-icon-precomposed" sizes="76x76" href="assets/img/touch-icon-ipad-3117c0fa950d0fc43c95becef61f4167.png" />
26
- <link rel="apple-touch-icon-precomposed" sizes="120x120" href="assets/img/small-42ff134f320b8b5a6eca3781c4e4b2db.png" />
27
- <link rel="apple-touch-icon-precomposed" sizes="152x152" href="assets/img/medium-7359075af28d69523987ff4c0e2067c5.png" />
24
+ <link rel="apple-touch-icon" href="assets/img/apple-touch-icon-74680e326a7e87b159d366c7d4fb3d4b.png" />
28
25
 
29
26
  <meta name="application-name" content="Ghost" />
30
- <meta name="msapplication-TileColor" content="#ffffff" />
31
- <meta name="msapplication-square70x70logo" content="assets/img/small-42ff134f320b8b5a6eca3781c4e4b2db.png" />
32
- <meta name="msapplication-square150x150logo" content="assets/img/medium-7359075af28d69523987ff4c0e2067c5.png" />
33
- <meta name="msapplication-square310x310logo" content="assets/img/large-bf46e150380a4979a7389b45f5bb479d.png" />
27
+ <meta name="msapplication-TileColor" content="#15171A" />
28
+ <meta name="msapplication-square70x70logo" content="assets/img/small-b90396925485f17b2ca82c31be42de5f.png" />
29
+ <meta name="msapplication-square150x150logo" content="assets/img/medium-fef07013cffd5c45a655a250912a0ad7.png" />
30
+ <meta name="msapplication-square310x310logo" content="assets/img/large-ac90af7c93a4b47e8d956fa9fef31d9d.png" />
34
31
 
35
32
  <!-- variables that we don't want postcss-custom-properties to remove -->
36
33
  <style>
@@ -40,8 +37,8 @@
40
37
  </style>
41
38
 
42
39
 
43
- <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-c3f7cbabcc1a69476534453c6c747ee3.css" title="light">
40
+ <link rel="stylesheet" href="assets/vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css">
41
+ <link rel="stylesheet" href="assets/ghost.min-1f0218f33e08f8d69b2159977d0c9318.css" title="light">
45
42
 
46
43
 
47
44
 
@@ -59,8 +56,8 @@
59
56
  <div id="ember-basic-dropdown-wormhole"></div>
60
57
 
61
58
 
62
- <script src="assets/vendor.min-992a9b07f7d0a67b5a4afd91319edf8b.js"></script>
63
- <script src="assets/ghost.min-2b20489c79323b165909749382adc158.js"></script>
59
+ <script src="assets/vendor.min-d43620e98444a46441495445f4c155f8.js"></script>
60
+ <script src="assets/ghost.min-501554f903f29164473a5dc620caaddb.js"></script>
64
61
 
65
62
  </body>
66
63
  </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.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%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.33%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%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" />
@@ -21,16 +21,13 @@
21
21
  <meta name="apple-mobile-web-app-title" content="Ghost" />
22
22
 
23
23
  <link rel="shortcut icon" href="assets/img/favicon.ico" />
24
- <link rel="apple-touch-icon-precomposed" href="assets/img/touch-icon-iphone-d2790931c3477664981061ed9fa5242e.png" />
25
- <link rel="apple-touch-icon-precomposed" sizes="76x76" href="assets/img/touch-icon-ipad-3117c0fa950d0fc43c95becef61f4167.png" />
26
- <link rel="apple-touch-icon-precomposed" sizes="120x120" href="assets/img/small-42ff134f320b8b5a6eca3781c4e4b2db.png" />
27
- <link rel="apple-touch-icon-precomposed" sizes="152x152" href="assets/img/medium-7359075af28d69523987ff4c0e2067c5.png" />
24
+ <link rel="apple-touch-icon" href="assets/img/apple-touch-icon-74680e326a7e87b159d366c7d4fb3d4b.png" />
28
25
 
29
26
  <meta name="application-name" content="Ghost" />
30
- <meta name="msapplication-TileColor" content="#ffffff" />
31
- <meta name="msapplication-square70x70logo" content="assets/img/small-42ff134f320b8b5a6eca3781c4e4b2db.png" />
32
- <meta name="msapplication-square150x150logo" content="assets/img/medium-7359075af28d69523987ff4c0e2067c5.png" />
33
- <meta name="msapplication-square310x310logo" content="assets/img/large-bf46e150380a4979a7389b45f5bb479d.png" />
27
+ <meta name="msapplication-TileColor" content="#15171A" />
28
+ <meta name="msapplication-square70x70logo" content="assets/img/small-b90396925485f17b2ca82c31be42de5f.png" />
29
+ <meta name="msapplication-square150x150logo" content="assets/img/medium-fef07013cffd5c45a655a250912a0ad7.png" />
30
+ <meta name="msapplication-square310x310logo" content="assets/img/large-ac90af7c93a4b47e8d956fa9fef31d9d.png" />
34
31
 
35
32
  <!-- variables that we don't want postcss-custom-properties to remove -->
36
33
  <style>
@@ -40,8 +37,8 @@
40
37
  </style>
41
38
 
42
39
 
43
- <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-c3f7cbabcc1a69476534453c6c747ee3.css" title="light">
40
+ <link rel="stylesheet" href="assets/vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css">
41
+ <link rel="stylesheet" href="assets/ghost.min-1f0218f33e08f8d69b2159977d0c9318.css" title="light">
45
42
 
46
43
 
47
44
 
@@ -59,8 +56,8 @@
59
56
  <div id="ember-basic-dropdown-wormhole"></div>
60
57
 
61
58
 
62
- <script src="assets/vendor.min-992a9b07f7d0a67b5a4afd91319edf8b.js"></script>
63
- <script src="assets/ghost.min-2b20489c79323b165909749382adc158.js"></script>
59
+ <script src="assets/vendor.min-d43620e98444a46441495445f4c155f8.js"></script>
60
+ <script src="assets/ghost.min-501554f903f29164473a5dc620caaddb.js"></script>
64
61
 
65
62
  </body>
66
63
  </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
  };
@@ -6,6 +6,7 @@ const express = require('../../../shared/express');
6
6
  const urlUtils = require('../../../shared/url-utils');
7
7
  const sentry = require('../../../shared/sentry');
8
8
  const membersService = require('../../services/members');
9
+ const stripeService = require('../../services/stripe');
9
10
  const middleware = membersService.middleware;
10
11
  const shared = require('../shared');
11
12
  const labs = require('../../../shared/labs');
@@ -28,7 +29,7 @@ module.exports = function setupMembersApp() {
28
29
  // Routing
29
30
 
30
31
  // Webhooks
31
- membersApp.post('/webhooks/stripe', middleware.stripeWebhooks);
32
+ membersApp.post('/webhooks/stripe', bodyParser.raw({type: 'application/json'}), stripeService.webhookController.handle.bind(stripeService.webhookController));
32
33
 
33
34
  // Initializes members specific routes as well as assigns members specific data to the req/res objects
34
35
  // We don't want to add global bodyParser middleware as that interfers with stripe webhook requests on - `/webhooks`.
@@ -38,7 +39,7 @@ module.exports = function setupMembersApp() {
38
39
  membersApp.get('/api/session', middleware.getIdentityToken);
39
40
  membersApp.get('/api/offers/:id', middleware.getOfferData);
40
41
  membersApp.delete('/api/session', middleware.deleteSession);
41
- membersApp.get('/api/site', middleware.getMemberSiteData);
42
+ membersApp.get('/api/site', shared.middleware.cacheControl('public', {maxAge: 30}), middleware.getMemberSiteData);
42
43
 
43
44
  // NOTE: this is wrapped in a function to ensure we always go via the getter
44
45
  membersApp.post('/api/send-magic-link', bodyParser.json(), shared.middleware.brute.membersAuth, (req, res, next) => membersService.api.middleware.sendMagicLink(req, res, next));
@@ -8,6 +8,11 @@
8
8
 
9
9
  const isString = require('lodash/isString');
10
10
 
11
+ /**
12
+ * @param {'public'|'private'} profile Use "private" if you do not want caching
13
+ * @param {object} [options]
14
+ * @param {number} [options.maxAge] The max-age in seconds to use when profile is "public"
15
+ */
11
16
  const cacheControl = (profile, options = {maxAge: 0}) => {
12
17
  const profiles = {
13
18
  public: `public, max-age=${options.maxAge}`,
@@ -20,6 +25,13 @@ const cacheControl = (profile, options = {maxAge: 0}) => {
20
25
  output = profiles[profile];
21
26
  }
22
27
 
28
+ /**
29
+ * @param {import('express').Request} req
30
+ * @param {import('express').Response} res
31
+ * @param {() => void} next
32
+ *
33
+ * @returns {void}
34
+ */
23
35
  return function cacheControlHeaders(req, res, next) {
24
36
  if (output) {
25
37
  res.set({'Cache-Control': output});
@@ -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.14.0/umd/portal.min.js",
131
+ "version": "1.14"
132
132
  },
133
133
  "tenor": {
134
134
  "publicReadOnlyApiKey": null,
@@ -15,19 +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
- 'fileCard',
30
- 'headerCard'
31
18
  ];
32
19
 
33
20
  // NOTE: this allowlist is meant to be used to filter out any unexpected
@@ -43,7 +30,8 @@ const ALPHA_FEATURES = [
43
30
  'cardSettingsPanel',
44
31
  'urlCache',
45
32
  'beforeAfterCard',
46
- 'tweetGridCard'
33
+ 'tweetGridCard',
34
+ 'membersActivityFeed'
47
35
  ];
48
36
 
49
37
  module.exports.GA_KEYS = [...GA_FEATURES];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "4.32.0",
3
+ "version": "4.33.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -55,56 +55,58 @@
55
55
  "dependencies": {
56
56
  "@nexes/nql": "0.6.0",
57
57
  "@sentry/node": "6.16.1",
58
- "@tryghost/adapter-manager": "0.2.26",
59
- "@tryghost/admin-api-schema": "2.6.1",
60
- "@tryghost/bookshelf-plugins": "0.3.5",
61
- "@tryghost/bootstrap-socket": "0.2.15",
62
- "@tryghost/color-utils": "0.1.5",
63
- "@tryghost/config-url-helpers": "0.1.3",
64
- "@tryghost/constants": "1.0.0",
58
+ "@tryghost/adapter-manager": "0.2.27",
59
+ "@tryghost/admin-api-schema": "2.7.0",
60
+ "@tryghost/bookshelf-plugins": "0.3.6",
61
+ "@tryghost/bootstrap-socket": "0.2.16",
62
+ "@tryghost/color-utils": "0.1.6",
63
+ "@tryghost/config-url-helpers": "0.1.4",
64
+ "@tryghost/constants": "1.0.1",
65
65
  "@tryghost/custom-theme-settings-service": "0.3.1",
66
- "@tryghost/debug": "0.1.9",
66
+ "@tryghost/database-info": "0.1.0",
67
+ "@tryghost/debug": "0.1.10",
67
68
  "@tryghost/email-analytics-provider-mailgun": "1.0.7",
68
69
  "@tryghost/email-analytics-service": "1.0.5",
69
- "@tryghost/errors": "1.2.0",
70
- "@tryghost/express-dynamic-redirects": "0.2.2",
71
- "@tryghost/helpers": "1.1.54",
72
- "@tryghost/image-transform": "1.0.26",
73
- "@tryghost/job-manager": "0.8.17",
74
- "@tryghost/kg-card-factory": "3.1.0",
75
- "@tryghost/kg-default-atoms": "3.1.0",
76
- "@tryghost/kg-default-cards": "5.15.11",
77
- "@tryghost/kg-markdown-html-renderer": "5.1.0",
78
- "@tryghost/kg-mobiledoc-html-renderer": "5.3.1",
79
- "@tryghost/limit-service": "1.0.8",
80
- "@tryghost/logging": "2.0.0",
81
- "@tryghost/magic-link": "1.0.14",
82
- "@tryghost/members-api": "2.8.7",
83
- "@tryghost/members-csv": "1.2.0",
84
- "@tryghost/members-importer": "0.3.5",
85
- "@tryghost/members-offers": "0.10.3",
86
- "@tryghost/members-ssr": "1.0.16",
87
- "@tryghost/metrics": "1.0.1",
88
- "@tryghost/minifier": "0.1.9",
89
- "@tryghost/mw-error-handler": "0.1.1",
90
- "@tryghost/mw-session-from-token": "0.1.26",
91
- "@tryghost/nodemailer": "0.3.8",
92
- "@tryghost/package-json": "1.0.14",
93
- "@tryghost/promise": "0.1.13",
94
- "@tryghost/request": "0.1.10",
95
- "@tryghost/root-utils": "0.3.7",
96
- "@tryghost/security": "0.2.13",
97
- "@tryghost/session-service": "0.1.36",
98
- "@tryghost/settings-path-manager": "0.1.2",
99
- "@tryghost/social-urls": "0.1.27",
100
- "@tryghost/string": "0.1.21",
101
- "@tryghost/tpl": "0.1.8",
70
+ "@tryghost/errors": "1.2.1",
71
+ "@tryghost/express-dynamic-redirects": "0.2.4",
72
+ "@tryghost/helpers": "1.1.55",
73
+ "@tryghost/image-transform": "1.0.27",
74
+ "@tryghost/job-manager": "0.8.18",
75
+ "@tryghost/kg-card-factory": "3.1.1",
76
+ "@tryghost/kg-default-atoms": "3.1.1",
77
+ "@tryghost/kg-default-cards": "5.15.12",
78
+ "@tryghost/kg-markdown-html-renderer": "5.1.1",
79
+ "@tryghost/kg-mobiledoc-html-renderer": "5.3.2",
80
+ "@tryghost/limit-service": "1.0.9",
81
+ "@tryghost/logging": "2.0.1",
82
+ "@tryghost/magic-link": "1.0.15",
83
+ "@tryghost/members-api": "4.4.1",
84
+ "@tryghost/members-csv": "1.2.3",
85
+ "@tryghost/members-importer": "0.4.1",
86
+ "@tryghost/members-offers": "0.10.5",
87
+ "@tryghost/members-ssr": "1.0.18",
88
+ "@tryghost/members-stripe-service": "0.6.3",
89
+ "@tryghost/metrics": "1.0.2",
90
+ "@tryghost/minifier": "0.1.10",
91
+ "@tryghost/mw-error-handler": "0.1.2",
92
+ "@tryghost/mw-session-from-token": "0.1.27",
93
+ "@tryghost/nodemailer": "0.3.9",
94
+ "@tryghost/package-json": "1.0.15",
95
+ "@tryghost/promise": "0.1.14",
96
+ "@tryghost/request": "0.1.11",
97
+ "@tryghost/root-utils": "0.3.8",
98
+ "@tryghost/security": "0.2.14",
99
+ "@tryghost/session-service": "0.1.37",
100
+ "@tryghost/settings-path-manager": "0.1.3",
101
+ "@tryghost/social-urls": "0.1.28",
102
+ "@tryghost/string": "0.1.22",
103
+ "@tryghost/tpl": "0.1.9",
102
104
  "@tryghost/update-check-service": "0.3.0",
103
- "@tryghost/url-utils": "2.0.4",
104
- "@tryghost/validator": "0.1.9",
105
- "@tryghost/version": "0.1.7",
106
- "@tryghost/vhost-middleware": "1.0.19",
107
- "@tryghost/zip": "1.1.18",
105
+ "@tryghost/url-utils": "2.0.5",
106
+ "@tryghost/validator": "0.1.10",
107
+ "@tryghost/version": "0.1.8",
108
+ "@tryghost/vhost-middleware": "1.0.20",
109
+ "@tryghost/zip": "1.1.19",
108
110
  "amperize": "0.6.1",
109
111
  "analytics-node": "6.0.0",
110
112
  "bluebird": "3.7.2",
@@ -112,7 +114,7 @@
112
114
  "bookshelf": "1.2.0",
113
115
  "bookshelf-relations": "2.3.0",
114
116
  "brute-knex": "4.0.1",
115
- "bson-objectid": "2.0.1",
117
+ "bson-objectid": "2.0.2",
116
118
  "bthreads": "0.5.1",
117
119
  "cheerio": "0.22.0",
118
120
  "compression": "1.7.4",
@@ -131,9 +133,9 @@
131
133
  "ghost-storage-base": "1.0.0",
132
134
  "glob": "7.2.0",
133
135
  "got": "9.6.0",
134
- "gscan": "4.20.0",
136
+ "gscan": "4.22.0",
135
137
  "html-to-text": "5.1.1",
136
- "image-size": "1.0.0",
138
+ "image-size": "1.0.1",
137
139
  "intl": "1.2.5",
138
140
  "intl-messageformat": "5.4.3",
139
141
  "js-yaml": "4.1.0",
@@ -144,17 +146,17 @@
144
146
  "knex": "0.21.21",
145
147
  "knex-migrator": "4.1.3",
146
148
  "lodash": "4.17.21",
147
- "luxon": "2.2.0",
149
+ "luxon": "2.3.0",
148
150
  "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",
151
+ "metascraper": "5.25.7",
152
+ "metascraper-author": "5.25.7",
153
+ "metascraper-description": "5.25.7",
154
+ "metascraper-image": "5.25.7",
155
+ "metascraper-logo": "5.25.7",
156
+ "metascraper-logo-favicon": "5.25.7",
157
+ "metascraper-publisher": "5.25.7",
158
+ "metascraper-title": "5.25.7",
159
+ "metascraper-url": "5.25.7",
158
160
  "moment": "2.24.0",
159
161
  "moment-timezone": "0.5.23",
160
162
  "multer": "1.4.4",
@@ -175,19 +177,19 @@
175
177
  "xml": "1.0.1"
176
178
  },
177
179
  "optionalDependencies": {
178
- "@tryghost/html-to-mobiledoc": "1.8.2",
180
+ "@tryghost/html-to-mobiledoc": "1.8.3",
179
181
  "sqlite3": "5.0.2"
180
182
  },
181
183
  "devDependencies": {
182
184
  "@ethanresnick/chai-jest-snapshot": "3.0.0",
183
185
  "@lodder/grunt-postcss": "3.1.1",
184
- "c8": "7.10.0",
186
+ "c8": "7.11.0",
185
187
  "chai": "4.3.4",
186
188
  "coffeescript": "2.6.1",
187
- "cssnano": "5.0.13",
189
+ "cssnano": "5.0.15",
188
190
  "eslint": "7.32.0",
189
- "eslint-plugin-ghost": "2.11.0",
190
- "expect": "27.4.2",
191
+ "eslint-plugin-ghost": "2.12.0",
192
+ "expect": "27.4.6",
191
193
  "grunt": "1.4.1",
192
194
  "grunt-bg-shell": "2.3.3",
193
195
  "grunt-contrib-clean": "2.0.0",
@@ -200,20 +202,20 @@
200
202
  "grunt-subgrunt": "1.3.0",
201
203
  "grunt-update-submodules": "0.4.1",
202
204
  "jwks-rsa": "2.0.5",
203
- "mocha": "9.1.3",
205
+ "mocha": "9.1.4",
204
206
  "mocha-slow-test-reporter": "0.1.2",
205
207
  "mock-knex": "0.4.10",
206
- "nock": "13.2.1",
208
+ "nock": "13.2.2",
207
209
  "papaparse": "5.3.1",
208
210
  "postcss": "8.4.5",
209
211
  "rewire": "5.0.0",
210
212
  "should": "13.2.3",
211
213
  "sinon": "11.1.2",
212
- "supertest": "6.1.6",
214
+ "supertest": "6.2.2",
213
215
  "tmp": "0.2.1"
214
216
  },
215
217
  "resolutions": {
216
- "@tryghost/logging": "2.0.0",
218
+ "@tryghost/logging": "2.0.1",
217
219
  "moment": "2.24.0",
218
220
  "moment-timezone": "0.5.23"
219
221
  }