ghost 5.4.0 → 5.6.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 (116) hide show
  1. package/PRIVACY.md +3 -2
  2. package/components/tryghost-adapter-manager-0.0.0.tgz +0 -0
  3. package/components/tryghost-api-version-compatibility-service-0.0.0.tgz +0 -0
  4. package/components/tryghost-bootstrap-socket-0.0.0.tgz +0 -0
  5. package/components/tryghost-constants-0.0.0.tgz +0 -0
  6. package/components/tryghost-custom-theme-settings-service-0.0.0.tgz +0 -0
  7. package/components/tryghost-domain-events-0.0.0.tgz +0 -0
  8. package/components/tryghost-email-analytics-provider-mailgun-0.0.0.tgz +0 -0
  9. package/components/tryghost-email-analytics-service-0.0.0.tgz +0 -0
  10. package/components/tryghost-email-content-generator-0.0.0.tgz +0 -0
  11. package/components/tryghost-express-dynamic-redirects-0.0.0.tgz +0 -0
  12. package/components/tryghost-extract-api-key-0.0.0.tgz +0 -0
  13. package/components/tryghost-job-manager-0.0.0.tgz +0 -0
  14. package/components/tryghost-magic-link-0.0.0.tgz +0 -0
  15. package/components/tryghost-member-analytics-service-0.0.0.tgz +0 -0
  16. package/components/tryghost-member-events-0.0.0.tgz +0 -0
  17. package/components/tryghost-members-analytics-ingress-0.0.0.tgz +0 -0
  18. package/components/tryghost-members-api-0.0.0.tgz +0 -0
  19. package/components/tryghost-members-csv-0.0.0.tgz +0 -0
  20. package/components/tryghost-members-events-service-0.0.0.tgz +0 -0
  21. package/components/tryghost-members-importer-0.0.0.tgz +0 -0
  22. package/components/tryghost-members-offers-0.0.0.tgz +0 -0
  23. package/components/tryghost-members-payments-0.0.0.tgz +0 -0
  24. package/components/tryghost-members-ssr-0.0.0.tgz +0 -0
  25. package/components/tryghost-members-stripe-service-0.0.0.tgz +0 -0
  26. package/components/tryghost-minifier-0.0.0.tgz +0 -0
  27. package/components/tryghost-mw-api-version-mismatch-0.0.0.tgz +0 -0
  28. package/components/tryghost-mw-error-handler-0.0.0.tgz +0 -0
  29. package/components/tryghost-mw-session-from-token-0.0.0.tgz +0 -0
  30. package/components/tryghost-mw-update-user-last-seen-0.0.0.tgz +0 -0
  31. package/components/tryghost-mw-vhost-0.0.0.tgz +0 -0
  32. package/components/tryghost-package-json-0.0.0.tgz +0 -0
  33. package/components/tryghost-security-0.0.0.tgz +0 -0
  34. package/components/tryghost-session-service-0.0.0.tgz +0 -0
  35. package/components/tryghost-settings-path-manager-0.0.0.tgz +0 -0
  36. package/components/tryghost-update-check-service-0.0.0.tgz +0 -0
  37. package/components/tryghost-verification-trigger-0.0.0.tgz +0 -0
  38. package/components/tryghost-version-notifications-data-service-0.0.0.tgz +0 -0
  39. package/content/themes/casper/assets/built/global.css +1 -1
  40. package/content/themes/casper/assets/built/global.css.map +1 -1
  41. package/content/themes/casper/assets/built/screen.css +1 -1
  42. package/content/themes/casper/assets/built/screen.css.map +1 -1
  43. package/content/themes/casper/assets/css/screen.css +9 -1
  44. package/content/themes/casper/gulpfile.js +1 -1
  45. package/content/themes/casper/package.json +9 -9
  46. package/content/themes/casper/yarn.lock +1154 -1249
  47. package/core/boot.js +6 -1
  48. package/core/built/assets/{chunk.3.dc389a0f93cb5fabd695.js → chunk.3.33097bb5eb150719bdd2.js} +19 -19
  49. package/core/built/assets/fonts/Inter.ttf +0 -0
  50. package/core/built/assets/ghost-dark-1bdd57aba1fa4a23388121740454dab2.css +1 -0
  51. package/core/built/assets/{ghost.min-36b64813b14c45075770658269d4b478.js → ghost.min-31bd482d1bcfe706448bc6f401481a28.js} +3001 -2874
  52. package/core/built/assets/ghost.min-b0576e0e36343533e70992f3e5bb02bb.css +1 -0
  53. package/core/built/assets/icons/event-comment.svg +3 -0
  54. package/core/built/assets/{vendor.min-be0129c9c6897c9f10425e2402881d77.js → vendor.min-3dd40d3052381526f38fd290d13baa47.js} +2394 -924
  55. package/core/frontend/helpers/comments.js +39 -14
  56. package/core/frontend/helpers/ghost_head.js +22 -4
  57. package/core/frontend/utils/frontend-apps.js +33 -0
  58. package/core/server/api/endpoints/{comments-comments.js → comments-members.js} +24 -43
  59. package/core/server/api/endpoints/index.js +2 -6
  60. package/core/server/api/endpoints/utils/serializers/output/config.js +2 -1
  61. package/core/server/api/endpoints/utils/serializers/output/mappers/activity-feed-events.js +17 -0
  62. package/core/server/api/endpoints/utils/serializers/output/mappers/comments.js +18 -0
  63. package/core/server/api/endpoints/utils/serializers/output/mappers/index.js +1 -0
  64. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +11 -0
  65. package/core/server/api/endpoints/utils/serializers/output/members.js +12 -1
  66. package/core/server/api/endpoints/utils/serializers/output/utils/clean.js +4 -0
  67. package/core/server/data/exporter/table-lists.js +2 -1
  68. package/core/server/data/migrations/versions/5.3/2022-07-06-09-17-add-ghost-explore-integration.js +0 -1
  69. package/core/server/data/migrations/versions/5.3/2022-07-06-09-26-add-ghost-explore-integration-api-key.js +0 -1
  70. package/core/server/data/migrations/versions/5.5/2022-07-18-14-29-add-comment-reporting-permissions.js +10 -0
  71. package/core/server/data/migrations/versions/5.5/2022-07-18-14-31-drop-reports-reason.js +3 -0
  72. package/core/server/data/migrations/versions/5.5/2022-07-18-14-32-drop-nullable-member-id-from-likes.js +4 -0
  73. package/core/server/data/migrations/versions/5.5/2022-07-18-14-33-fix-comments-on-delete-foreign-keys.js +119 -0
  74. package/core/server/data/migrations/versions/5.5/2022-07-21-08-56-add-jobs-table.js +11 -0
  75. package/core/server/data/migrations/versions/5.6/2022-07-27-13-40-change-explore-type.js +24 -0
  76. package/core/server/data/schema/commands.js +7 -2
  77. package/core/server/data/schema/fixtures/fixtures.json +6 -1
  78. package/core/server/data/schema/schema.js +12 -4
  79. package/core/server/ghost-server.js +0 -22
  80. package/core/server/models/comment-report.js +34 -0
  81. package/core/server/models/comment.js +8 -7
  82. package/core/server/models/job.js +9 -0
  83. package/core/server/services/bulk-email/bulk-email-processor.js +6 -0
  84. package/core/server/services/comments/controller.js +82 -0
  85. package/core/server/services/comments/email-templates/new-comment-reply.hbs +2 -2
  86. package/core/server/services/comments/email-templates/new-comment-reply.txt.js +7 -8
  87. package/core/server/services/comments/email-templates/new-comment.hbs +2 -2
  88. package/core/server/services/comments/email-templates/new-comment.txt.js +7 -6
  89. package/core/server/services/comments/email-templates/report.hbs +199 -0
  90. package/core/server/services/comments/email-templates/report.txt.js +16 -0
  91. package/core/server/services/comments/emails.js +57 -1
  92. package/core/server/services/comments/index.js +6 -1
  93. package/core/server/services/comments/service.js +291 -9
  94. package/core/server/services/jobs/job-service.js +24 -1
  95. package/core/server/services/mail/GhostMailer.js +1 -0
  96. package/core/server/services/mega/email-preview.js +5 -1
  97. package/core/server/services/mega/mega.js +2 -4
  98. package/core/server/services/mega/post-email-serializer.js +97 -2
  99. package/core/server/services/mega/segment-parser.js +10 -1
  100. package/core/server/services/members/api.js +2 -1
  101. package/core/server/services/members/service.js +9 -4
  102. package/core/server/services/public-config/config.js +2 -1
  103. package/core/server/services/settings/settings-bread-service.js +1 -1
  104. package/core/server/services/stripe/service.js +9 -1
  105. package/core/server/web/admin/views/default-prod.html +4 -4
  106. package/core/server/web/admin/views/default.html +4 -4
  107. package/core/server/web/api/testmode/jobs/graceful-job.js +2 -2
  108. package/core/server/web/api/testmode/routes.js +14 -0
  109. package/core/server/web/comments/routes.js +10 -8
  110. package/core/shared/config/defaults.json +12 -7
  111. package/core/shared/config/env/config.testing.json +3 -2
  112. package/core/shared/labs.js +3 -1
  113. package/package.json +92 -59
  114. package/yarn.lock +1821 -2011
  115. package/core/built/assets/ghost-dark-739c1f5546bd048eeeb253965ef36712.css +0 -1
  116. package/core/built/assets/ghost.min-5211776b9497f36fac8c9e5f2584cbcc.css +0 -1
@@ -189,7 +189,8 @@ function createApiInstance(config) {
189
189
  StripeProduct: models.StripeProduct,
190
190
  StripePrice: models.StripePrice,
191
191
  Product: models.Product,
192
- Settings: models.Settings
192
+ Settings: models.Settings,
193
+ Comment: models.Comment
193
194
  },
194
195
  stripeAPIService: stripeService.api,
195
196
  offersAPI: offersService.api,
@@ -148,10 +148,15 @@ module.exports = {
148
148
  }
149
149
  })();
150
150
 
151
- try {
152
- await stripeService.migrations.execute();
153
- } catch (err) {
154
- logging.error(err);
151
+ const membersMigrationJobName = 'members-migrations';
152
+ if (!(await jobsService.hasExecutedSuccessfully(membersMigrationJobName))) {
153
+ jobsService.addOneOffJob({
154
+ name: membersMigrationJobName,
155
+ offloaded: false,
156
+ job: stripeService.migrations.execute.bind(stripeService.migrations)
157
+ });
158
+
159
+ await jobsService.awaitCompletion(membersMigrationJobName);
155
160
  }
156
161
  },
157
162
  contentGating: require('./content-gating'),
@@ -18,7 +18,8 @@ module.exports = function getConfigProperties() {
18
18
  mailgunIsConfigured: !!(config.get('bulkEmail') && config.get('bulkEmail').mailgun),
19
19
  emailAnalytics: config.get('emailAnalytics'),
20
20
  hostSettings: config.get('hostSettings'),
21
- tenor: config.get('tenor')
21
+ tenor: config.get('tenor'),
22
+ editor: config.get('editor')
22
23
  };
23
24
 
24
25
  const billingUrl = config.get('hostSettings:billing:enabled') ? config.get('hostSettings:billing:url') : '';
@@ -297,7 +297,7 @@ class SettingsBREADService {
297
297
  if (EMAIL_KEYS.includes(setting.key)) {
298
298
  const email = setting.value;
299
299
  const key = setting.key;
300
- const hasChanged = getSetting(setting) !== email;
300
+ const hasChanged = getSetting(setting).value !== email;
301
301
 
302
302
  if (await this.requiresEmailVerification({email, hasChanged})) {
303
303
  emailsToVerify.push({email, key});
@@ -25,7 +25,15 @@ const debouncedConfigureApi = _.debounce(() => {
25
25
 
26
26
  module.exports = new StripeService({
27
27
  membersService,
28
- models: _.pick(models, ['Product', 'StripePrice', 'StripeCustomerSubscription', 'StripeProduct', 'MemberStripeCustomer', 'Offer', 'Settings']),
28
+ models: _.pick(models, [
29
+ 'Product',
30
+ 'StripePrice',
31
+ 'StripeCustomerSubscription',
32
+ 'StripeProduct',
33
+ 'MemberStripeCustomer',
34
+ 'Offer',
35
+ 'Settings'
36
+ ]),
29
37
  StripeWebhook: {
30
38
  async get() {
31
39
  return {
@@ -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%225.4%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" />
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%225.6%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" />
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
  <link rel="stylesheet" href="assets/vendor.min-4a6661c574707ceca220aa2e76558995.css">
41
- <link rel="stylesheet" href="assets/ghost.min-5211776b9497f36fac8c9e5f2584cbcc.css" title="light">
41
+ <link rel="stylesheet" href="assets/ghost.min-b0576e0e36343533e70992f3e5bb02bb.css" title="light">
42
42
 
43
43
 
44
44
 
@@ -56,8 +56,8 @@
56
56
  <div id="ember-basic-dropdown-wormhole"></div>
57
57
 
58
58
 
59
- <script src="assets/vendor.min-be0129c9c6897c9f10425e2402881d77.js"></script>
60
- <script src="assets/ghost.min-36b64813b14c45075770658269d4b478.js"></script>
59
+ <script src="assets/vendor.min-3dd40d3052381526f38fd290d13baa47.js"></script>
60
+ <script src="assets/ghost.min-31bd482d1bcfe706448bc6f401481a28.js"></script>
61
61
 
62
62
  </body>
63
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%225.4%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" />
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%225.6%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" />
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
  <link rel="stylesheet" href="assets/vendor.min-4a6661c574707ceca220aa2e76558995.css">
41
- <link rel="stylesheet" href="assets/ghost.min-5211776b9497f36fac8c9e5f2584cbcc.css" title="light">
41
+ <link rel="stylesheet" href="assets/ghost.min-b0576e0e36343533e70992f3e5bb02bb.css" title="light">
42
42
 
43
43
 
44
44
 
@@ -56,8 +56,8 @@
56
56
  <div id="ember-basic-dropdown-wormhole"></div>
57
57
 
58
58
 
59
- <script src="assets/vendor.min-be0129c9c6897c9f10425e2402881d77.js"></script>
60
- <script src="assets/ghost.min-36b64813b14c45075770658269d4b478.js"></script>
59
+ <script src="assets/vendor.min-3dd40d3052381526f38fd290d13baa47.js"></script>
60
+ <script src="assets/ghost.min-31bd482d1bcfe706448bc6f401481a28.js"></script>
61
61
 
62
62
  </body>
63
63
  </html>
@@ -37,7 +37,7 @@ const internalContext = {context: {internal: true}};
37
37
 
38
38
  if (shutdown) {
39
39
  postParentPortMessage(`Job shutting down gracefully`);
40
- process.exit(0);
40
+ parentPort.postMessage('done');
41
41
  }
42
42
 
43
43
  postParentPortMessage(`Fetching posts`);
@@ -46,5 +46,5 @@ const internalContext = {context: {internal: true}};
46
46
  postParentPortMessage(`Found ${posts.data.length} posts. First one: ${posts.data[0].toJSON().slug}`);
47
47
  postParentPortMessage('Graceful job has completed!');
48
48
 
49
- process.exit(0);
49
+ parentPort.postMessage('done');
50
50
  })();
@@ -44,6 +44,20 @@ module.exports = function testRoutes() {
44
44
  res.sendStatus(202);
45
45
  });
46
46
 
47
+ router.get('/oneoff/:name', (req, res) => {
48
+ logging.info('Create Slow Job with timeout of', req.params.name);
49
+
50
+ const options = {};
51
+
52
+ options.solo = true;
53
+ options.name = req.params.name;
54
+ options.job = path.resolve(__dirname, 'jobs', `${options.name}.js`);
55
+
56
+ jobsService.addOneOffJob(options);
57
+
58
+ res.sendStatus(202);
59
+ });
60
+
47
61
  router.get('/schedule/:schedule/:name*?', (req, res) => {
48
62
  if (!req.params.schedule) {
49
63
  return res.sendStatus(400, 'schedule parameter cannot be mepty');
@@ -13,16 +13,18 @@ module.exports = function apiRoutes() {
13
13
  // Global handling for member session, ensures a member is logged in to the frontend
14
14
  router.use(membersService.middleware.loadMemberSession);
15
15
 
16
- router.post('/counts', http(api.commentsComments.counts));
16
+ router.post('/counts', http(api.commentsMembers.counts));
17
17
 
18
- router.get('/', http(api.commentsComments.browse));
19
- router.get('/:id', http(api.commentsComments.read));
20
- router.post('/', http(api.commentsComments.add));
21
- router.put('/:id', http(api.commentsComments.edit));
22
- router.delete('/:id', http(api.commentsComments.destroy));
18
+ router.get('/', http(api.commentsMembers.browse));
19
+ router.get('/:id', http(api.commentsMembers.read));
20
+ router.post('/', http(api.commentsMembers.add));
21
+ router.put('/:id', http(api.commentsMembers.edit));
22
+ router.delete('/:id', http(api.commentsMembers.destroy));
23
23
 
24
- router.post('/:id/like', http(api.commentsComments.like));
25
- router.delete('/:id/like', http(api.commentsComments.unlike));
24
+ router.post('/:id/like', http(api.commentsMembers.like));
25
+ router.delete('/:id/like', http(api.commentsMembers.unlike));
26
+
27
+ router.post('/:id/report', http(api.commentsMembers.report));
26
28
 
27
29
  return router;
28
30
  };
@@ -133,12 +133,21 @@
133
133
  "emailAnalytics": true
134
134
  },
135
135
  "portal": {
136
- "url": "https://unpkg.com/@tryghost/portal@~2.3.0/umd/portal.min.js",
136
+ "url": "https://cdn.jsdelivr.net/npm/@tryghost/portal@~{version}/umd/portal.min.js",
137
137
  "version": "2.3"
138
138
  },
139
139
  "sodoSearch": {
140
- "url": "https://unpkg.com/@tryghost/sodo-search@~1.0.0/umd/sodo-search.min.js",
141
- "version": "1.0.0"
140
+ "url": "https://cdn.jsdelivr.net/npm/@tryghost/sodo-search@~{version}/umd/sodo-search.min.js",
141
+ "styles": "https://cdn.jsdelivr.net/npm/@tryghost/sodo-search@~{version}/umd/main.css",
142
+ "version": "1.1"
143
+ },
144
+ "comments": {
145
+ "url": "https://cdn.jsdelivr.net/npm/@tryghost/comments-ui@~{version}/umd/comments-ui.min.js",
146
+ "styles": "https://cdn.jsdelivr.net/npm/@tryghost/comments-ui@~{version}/umd/main.css",
147
+ "version": "0.2"
148
+ },
149
+ "editor": {
150
+ "url": "https://cdn.jsdelivr.net/npm/@tryghost/koenig-react/dist/umd/koenig-react.min.js"
142
151
  },
143
152
  "tenor": {
144
153
  "publicReadOnlyApiKey": null,
@@ -152,9 +161,5 @@
152
161
  },
153
162
  "gravatar": {
154
163
  "url": "https://www.gravatar.com/avatar/{hash}?s={size}&r={rating}&d={_default}"
155
- },
156
- "comments": {
157
- "url": "https://unpkg.com/@tryghost/comments-ui@~0.1.0/umd/comments-ui.min.js",
158
- "version": "0.1.0"
159
164
  }
160
165
  }
@@ -56,7 +56,8 @@
56
56
  "urlCache": "test/utils/fixtures/urls"
57
57
  },
58
58
  "sodoSearch": {
59
- "url": "https://unpkg.com/@tryghost/sodo-search@~0.1.0/umd/sodo-search.min.js",
60
- "version": "0.1.0"
59
+ "url": "https://cdn.jsdelivr.net/npm/@tryghost/sodo-search@~{version}/umd/sodo-search.min.js",
60
+ "styles": "https://cdn.jsdelivr.net/npm/@tryghost/sodo-search@~{version}/umd/main.css",
61
+ "version": "1.0"
61
62
  }
62
63
  }
@@ -25,7 +25,9 @@ const BETA_FEATURES = [
25
25
  const ALPHA_FEATURES = [
26
26
  'urlCache',
27
27
  'beforeAfterCard',
28
- 'comments'
28
+ 'comments',
29
+ 'newsletterPaywall',
30
+ 'explore'
29
31
  ];
30
32
 
31
33
  module.exports.GA_KEYS = [...GA_FEATURES];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "5.4.0",
3
+ "version": "5.6.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -23,16 +23,16 @@
23
23
  "start": "node index",
24
24
  "dev": "grunt dev",
25
25
  "dev:debug": "DEBUG=ghost:* grunt dev",
26
- "setup": "yarn install && knex-migrator init && grunt symlink && grunt init || (exit 0)",
27
- "main": "grunt shell:main && grunt subgrunt:init",
26
+ "setup": "knex-migrator init && grunt symlink && grunt init || (exit 0)",
28
27
  "build": "grunt build",
29
- "test": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js --timeout=60000",
28
+ "test": "yarn test:unit",
29
+ "test:single": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js --timeout=60000",
30
30
  "test:all": "yarn test:unit && yarn test:integration && yarn test:e2e && yarn lint",
31
31
  "test:debug": "DEBUG=ghost:test* yarn test",
32
32
  "test:unit": "c8 yarn test:unit:base",
33
33
  "test:unit:base": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/unit' --timeout=2000",
34
34
  "test:integration": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/integration' --timeout=5000",
35
- "test:e2e": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/e2e-api' './test/e2e-frontend' './test/e2e-server' './test/e2e-webhooks' --timeout=10000",
35
+ "test:e2e": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/e2e-api' './test/e2e-frontend' './test/e2e-server' './test/e2e-webhooks' --timeout=15000",
36
36
  "test:regression": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/regression' --timeout=60000",
37
37
  "test:browser": "playwright test --browser=all test/e2e-browser",
38
38
  "test:ci": "yarn test:e2e -b && yarn test:integration -b && yarn test:regression -b",
@@ -46,77 +46,75 @@
46
46
  "lint:test": "eslint -c test/.eslintrc.js --ignore-path test/.eslintignore 'test/**/*.js'",
47
47
  "lint:code": "yarn lint:server && yarn lint:shared && yarn lint:frontend",
48
48
  "lint": "yarn lint:server && yarn lint:shared && yarn lint:frontend && yarn lint:test",
49
- "fix:admin": "yarn cache clean && cd core/admin && rm -rf node_modules tmp dist && yarn && cd ../../",
50
- "fix:server": "yarn cache clean && rm -rf node_modules && yarn",
51
- "fix": "yarn fix:admin && yarn fix:server"
49
+ "prepack": "grunt release"
52
50
  },
53
51
  "engines": {
54
52
  "node": "^14.17.0 || ^16.13.0",
55
53
  "cli": "^1.17.0"
56
54
  },
57
55
  "dependencies": {
58
- "@sentry/node": "7.6.0",
59
- "@tryghost/adapter-manager": "0.2.32",
56
+ "@sentry/node": "7.8.0",
57
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-0.0.0.tgz",
60
58
  "@tryghost/admin-api-schema": "4.0.0",
61
- "@tryghost/api-version-compatibility-service": "0.4.3",
59
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-0.0.0.tgz",
62
60
  "@tryghost/bookshelf-plugins": "0.4.3",
63
- "@tryghost/bootstrap-socket": "0.2.21",
61
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-0.0.0.tgz",
64
62
  "@tryghost/color-utils": "0.1.19",
65
- "@tryghost/config-url-helpers": "1.0.1",
66
- "@tryghost/constants": "1.0.6",
67
- "@tryghost/custom-theme-settings-service": "0.3.3",
68
- "@tryghost/database-info": "0.3.7",
63
+ "@tryghost/config-url-helpers": "1.0.2",
64
+ "@tryghost/constants": "file:components/tryghost-constants-0.0.0.tgz",
65
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-0.0.0.tgz",
66
+ "@tryghost/database-info": "0.3.8",
69
67
  "@tryghost/debug": "0.1.17",
70
- "@tryghost/domain-events": "0.1.14",
71
- "@tryghost/email-analytics-provider-mailgun": "1.0.9",
72
- "@tryghost/email-analytics-service": "1.0.7",
73
- "@tryghost/email-content-generator": "0.1.3",
68
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-0.0.0.tgz",
69
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-0.0.0.tgz",
70
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-0.0.0.tgz",
71
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-0.0.0.tgz",
74
72
  "@tryghost/errors": "1.2.14",
75
- "@tryghost/express-dynamic-redirects": "0.2.13",
73
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-0.0.0.tgz",
76
74
  "@tryghost/helpers": "1.1.71",
77
75
  "@tryghost/image-transform": "1.1.0",
78
- "@tryghost/job-manager": "0.8.25",
76
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-0.0.0.tgz",
79
77
  "@tryghost/kg-card-factory": "3.1.3",
80
78
  "@tryghost/kg-default-atoms": "3.1.2",
81
79
  "@tryghost/kg-default-cards": "5.16.2",
82
80
  "@tryghost/kg-markdown-html-renderer": "5.1.5",
83
81
  "@tryghost/kg-mobiledoc-html-renderer": "5.3.5",
84
- "@tryghost/limit-service": "1.2.1",
82
+ "@tryghost/limit-service": "1.2.2",
85
83
  "@tryghost/logging": "2.2.3",
86
- "@tryghost/magic-link": "1.1.0",
87
- "@tryghost/member-events": "0.4.6",
88
- "@tryghost/members-api": "8.3.0",
89
- "@tryghost/members-events-service": "0.4.3",
90
- "@tryghost/members-importer": "0.5.16",
91
- "@tryghost/members-offers": "0.11.6",
92
- "@tryghost/members-ssr": "1.0.28",
93
- "@tryghost/members-stripe-service": "0.10.6",
84
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-0.0.0.tgz",
85
+ "@tryghost/member-events": "file:components/tryghost-member-events-0.0.0.tgz",
86
+ "@tryghost/members-api": "file:components/tryghost-members-api-0.0.0.tgz",
87
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-0.0.0.tgz",
88
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-0.0.0.tgz",
89
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-0.0.0.tgz",
90
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-0.0.0.tgz",
91
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-0.0.0.tgz",
94
92
  "@tryghost/metrics": "1.0.14",
95
- "@tryghost/minifier": "0.1.16",
96
- "@tryghost/mw-api-version-mismatch": "0.2.2",
97
- "@tryghost/mw-error-handler": "1.0.3",
98
- "@tryghost/mw-session-from-token": "0.1.33",
93
+ "@tryghost/minifier": "file:components/tryghost-minifier-0.0.0.tgz",
94
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-0.0.0.tgz",
95
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-0.0.0.tgz",
96
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-0.0.0.tgz",
97
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-0.0.0.tgz",
99
98
  "@tryghost/nodemailer": "0.3.24",
100
99
  "@tryghost/nql": "0.9.2",
101
- "@tryghost/package-json": "1.0.22",
102
- "@tryghost/pretty-cli": "1.2.28",
103
- "@tryghost/promise": "0.1.19",
100
+ "@tryghost/package-json": "file:components/tryghost-package-json-0.0.0.tgz",
101
+ "@tryghost/pretty-cli": "1.2.29",
102
+ "@tryghost/promise": "0.1.20",
104
103
  "@tryghost/request": "0.1.28",
105
104
  "@tryghost/root-utils": "0.3.15",
106
- "@tryghost/security": "0.3.2",
107
- "@tryghost/session-service": "0.1.43",
108
- "@tryghost/settings-path-manager": "0.1.8",
105
+ "@tryghost/security": "file:components/tryghost-security-0.0.0.tgz",
106
+ "@tryghost/session-service": "file:components/tryghost-session-service-0.0.0.tgz",
107
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-0.0.0.tgz",
109
108
  "@tryghost/social-urls": "0.1.32",
110
109
  "@tryghost/stats-service": "0.3.0",
111
110
  "@tryghost/string": "0.1.26",
112
111
  "@tryghost/tpl": "0.1.17",
113
- "@tryghost/update-check-service": "0.3.4",
112
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-0.0.0.tgz",
114
113
  "@tryghost/url-utils": "4.0.2",
115
114
  "@tryghost/validator": "0.1.26",
116
- "@tryghost/verification-trigger": "0.2.5",
115
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-0.0.0.tgz",
117
116
  "@tryghost/version": "0.1.15",
118
- "@tryghost/vhost-middleware": "1.0.26",
119
- "@tryghost/zip": "1.1.26",
117
+ "@tryghost/zip": "1.1.27",
120
118
  "amperize": "0.6.1",
121
119
  "analytics-node": "6.1.0",
122
120
  "bluebird": "3.7.2",
@@ -144,7 +142,7 @@
144
142
  "ghost-storage-base": "1.0.0",
145
143
  "glob": "8.0.3",
146
144
  "got": "9.6.0",
147
- "gscan": "4.31.2",
145
+ "gscan": "4.32.0",
148
146
  "html-to-text": "8.2.0",
149
147
  "human-number": "2.0.0",
150
148
  "image-size": "1.0.2",
@@ -155,17 +153,17 @@
155
153
  "jsonwebtoken": "8.5.1",
156
154
  "juice": "8.0.0",
157
155
  "keypair": "1.0.4",
158
- "knex": "2.1.0",
159
- "knex-migrator": "5.0.1",
156
+ "knex": "2.2.0",
157
+ "knex-migrator": "5.0.3",
160
158
  "lodash": "4.17.21",
161
159
  "luxon": "2.5.0",
162
160
  "mailgun-js": "0.22.0",
163
- "metascraper": "5.29.15",
161
+ "metascraper": "5.29.18",
164
162
  "metascraper-author": "5.29.15",
165
163
  "metascraper-description": "5.29.15",
166
164
  "metascraper-image": "5.29.15",
167
165
  "metascraper-logo": "5.29.15",
168
- "metascraper-logo-favicon": "5.29.15",
166
+ "metascraper-logo-favicon": "5.30.0",
169
167
  "metascraper-publisher": "5.29.15",
170
168
  "metascraper-title": "5.29.15",
171
169
  "metascraper-url": "5.29.15",
@@ -179,7 +177,7 @@
179
177
  "path-match": "1.2.4",
180
178
  "probe-image-size": "7.2.3",
181
179
  "rss": "1.2.2",
182
- "sanitize-html": "2.7.0",
180
+ "sanitize-html": "2.7.1",
183
181
  "semver": "7.3.7",
184
182
  "stoppable": "1.1.0",
185
183
  "tough-cookie": "4.0.0",
@@ -188,28 +186,26 @@
188
186
  },
189
187
  "optionalDependencies": {
190
188
  "@tryghost/html-to-mobiledoc": "1.8.6",
191
- "sqlite3": "5.0.9"
189
+ "sqlite3": "5.0.11"
192
190
  },
193
191
  "devDependencies": {
194
192
  "@lodder/grunt-postcss": "3.1.1",
195
- "@playwright/test": "1.23.3",
193
+ "@playwright/test": "1.24.2",
196
194
  "@tryghost/express-test": "0.11.1",
197
195
  "@tryghost/webhook-mock-receiver": "0.1.1",
198
- "c8": "7.11.3",
196
+ "c8": "7.12.0",
199
197
  "cli-progress": "3.11.2",
200
198
  "coffeescript": "2.7.0",
201
199
  "cssnano": "5.1.12",
202
- "eslint": "8.19.0",
200
+ "eslint": "8.21.0",
203
201
  "eslint-plugin-ghost": "2.14.0",
204
202
  "grunt": "1.5.3",
205
203
  "grunt-bg-shell": "2.3.3",
206
204
  "grunt-contrib-clean": "2.0.1",
207
- "grunt-contrib-compress": "2.0.0",
208
205
  "grunt-contrib-copy": "1.0.0",
209
206
  "grunt-contrib-symlink": "1.0.0",
210
207
  "grunt-contrib-watch": "1.1.0",
211
208
  "grunt-express-server": "0.5.4",
212
- "grunt-shell": "4.0.0",
213
209
  "grunt-subgrunt": "1.3.0",
214
210
  "grunt-update-submodules": "0.4.1",
215
211
  "inquirer": "8.2.4",
@@ -217,7 +213,7 @@
217
213
  "mocha": "10.0.0",
218
214
  "mocha-slow-test-reporter": "0.1.2",
219
215
  "mock-knex": "TryGhost/mock-knex#8ecb8c227bf463c991c3d820d33f59efc3ab9682",
220
- "nock": "13.2.8",
216
+ "nock": "13.2.9",
221
217
  "papaparse": "5.3.2",
222
218
  "postcss": "8.4.14",
223
219
  "rewire": "6.0.0",
@@ -229,6 +225,43 @@
229
225
  "resolutions": {
230
226
  "@tryghost/logging": "2.2.3",
231
227
  "moment": "2.24.0",
232
- "moment-timezone": "0.5.23"
228
+ "moment-timezone": "0.5.23",
229
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-0.0.0.tgz",
230
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-0.0.0.tgz",
231
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-0.0.0.tgz",
232
+ "@tryghost/constants": "file:components/tryghost-constants-0.0.0.tgz",
233
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-0.0.0.tgz",
234
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-0.0.0.tgz",
235
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-0.0.0.tgz",
236
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-0.0.0.tgz",
237
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-0.0.0.tgz",
238
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-0.0.0.tgz",
239
+ "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-0.0.0.tgz",
240
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-0.0.0.tgz",
241
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-0.0.0.tgz",
242
+ "@tryghost/member-analytics-service": "file:components/tryghost-member-analytics-service-0.0.0.tgz",
243
+ "@tryghost/member-events": "file:components/tryghost-member-events-0.0.0.tgz",
244
+ "@tryghost/members-analytics-ingress": "file:components/tryghost-members-analytics-ingress-0.0.0.tgz",
245
+ "@tryghost/members-api": "file:components/tryghost-members-api-0.0.0.tgz",
246
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-0.0.0.tgz",
247
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-0.0.0.tgz",
248
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-0.0.0.tgz",
249
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-0.0.0.tgz",
250
+ "@tryghost/minifier": "file:components/tryghost-minifier-0.0.0.tgz",
251
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-0.0.0.tgz",
252
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-0.0.0.tgz",
253
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-0.0.0.tgz",
254
+ "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-0.0.0.tgz",
255
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-0.0.0.tgz",
256
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-0.0.0.tgz",
257
+ "@tryghost/package-json": "file:components/tryghost-package-json-0.0.0.tgz",
258
+ "@tryghost/members-payments": "file:components/tryghost-members-payments-0.0.0.tgz",
259
+ "@tryghost/security": "file:components/tryghost-security-0.0.0.tgz",
260
+ "@tryghost/session-service": "file:components/tryghost-session-service-0.0.0.tgz",
261
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-0.0.0.tgz",
262
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-0.0.0.tgz",
263
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-0.0.0.tgz",
264
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-0.0.0.tgz",
265
+ "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-0.0.0.tgz"
233
266
  }
234
267
  }