ghost 4.43.1 → 4.46.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 (120) hide show
  1. package/Gruntfile.js +1 -1
  2. package/core/boot.js +2 -0
  3. package/core/built/assets/{chunk.3.6e2ed2d00856e12bd81a.js → chunk.3.52b444495dfcf50afb0b.js} +20 -20
  4. package/core/built/assets/ghost-dark-155e039c0d991b7af75dea8cd3846b11.css +1 -0
  5. package/core/built/assets/{ghost.min-2a278873d60d6a13a4c05a396e5bed5e.js → ghost.min-30e597cb65b62b31a9422ca9c0eb2890.js} +845 -670
  6. package/core/built/assets/ghost.min-bd8cd0185fd5dfc8291502f801e443e6.css +1 -0
  7. package/core/built/assets/icons/clock.svg +1 -1
  8. package/core/built/assets/icons/email-at.svg +1 -0
  9. package/core/built/assets/icons/email-body.svg +1 -0
  10. package/core/built/assets/icons/email-footer.svg +1 -0
  11. package/core/built/assets/icons/email-header.svg +1 -0
  12. package/core/built/assets/icons/email-member.svg +1 -0
  13. package/core/built/assets/icons/email-name.svg +1 -0
  14. package/core/built/assets/icons/member.svg +1 -3
  15. package/core/built/assets/icons/send-email.svg +1 -1
  16. package/core/built/assets/img/abstract-2-2937e2902b64360d0cbe4cec8bd8479b.jpg +0 -0
  17. package/core/built/assets/img/abstract-c52b2f4208e7fd2e7b8abd8b1eec4f7b.jpg +0 -0
  18. package/core/built/assets/img/community-background-3f501ff1d764d0cb81f7c2cbacfc6503.jpg +0 -0
  19. package/core/built/assets/img/community-be8c1dcecfb157f2bfba5cababc8e686.jpg +0 -0
  20. package/core/built/assets/img/newsletter-1-197ae8063dfb2e22278d355198029c9e.jpg +0 -0
  21. package/core/built/assets/img/newsletter-2-5a2c7693ea9380d4282061302c01267a.jpg +0 -0
  22. package/core/built/assets/img/resource-1-722f202795856e4a5596c8a3b7bedc43.jpg +0 -0
  23. package/core/built/assets/{vendor.min-21f79c68a284acb1b70039f3f63e5507.js → vendor.min-97fd438f4772c5ec6bb30ad779b8530e.js} +868 -523
  24. package/core/frontend/apps/amp/lib/helpers/amp_content.js +2 -3
  25. package/core/frontend/apps/amp/lib/views/amp.hbs +5 -3
  26. package/core/frontend/helpers/get.js +1 -1
  27. package/core/frontend/services/routing/controllers/unsubscribe.js +22 -0
  28. package/core/frontend/web/middleware/cors.js +56 -0
  29. package/core/frontend/web/middleware/index.js +1 -0
  30. package/core/frontend/web/middleware/static-theme.js +8 -8
  31. package/core/frontend/web/site.js +1 -48
  32. package/core/server/api/canary/authentication.js +2 -2
  33. package/core/server/api/canary/members.js +3 -0
  34. package/core/server/api/canary/newsletters.js +86 -4
  35. package/core/server/api/canary/posts.js +1 -0
  36. package/core/server/api/canary/stats.js +11 -2
  37. package/core/server/api/canary/utils/serializers/input/members.js +22 -0
  38. package/core/server/api/canary/utils/serializers/output/mappers/pages.js +1 -0
  39. package/core/server/api/canary/utils/serializers/output/mappers/posts.js +2 -0
  40. package/core/server/api/canary/utils/serializers/output/members.js +13 -2
  41. package/core/server/api/shared/http.js +1 -1
  42. package/core/server/api/v2/utils/serializers/output/utils/mapper.js +2 -0
  43. package/core/server/api/v3/utils/serializers/output/utils/mapper.js +3 -0
  44. package/core/server/data/importer/importers/data/settings.js +0 -3
  45. package/core/server/data/migrations/utils.js +40 -0
  46. package/core/server/data/migrations/versions/4.43/2022-03-28-19-26-recreate-newsletter-table.js +5 -5
  47. package/core/server/data/migrations/versions/4.44/2022-04-06-15-22-populate-type-column-for-paid-subscription-events.js +21 -0
  48. package/core/server/data/migrations/versions/4.44/2022-04-08-11-54-add-cancelled-events.js +51 -0
  49. package/core/server/data/migrations/versions/4.44/2022-04-11-08-24-add-newsletter-permissions.js +33 -0
  50. package/core/server/data/migrations/versions/4.44/2022-04-11-10-54-add-mrr-to-subscriptions.js +8 -0
  51. package/core/server/data/migrations/versions/4.44/2022-04-12-07-33-fill-mrr.js +29 -0
  52. package/core/server/data/migrations/versions/4.44/2022-04-13-12-00-remove-newsletter-sender-name-not-null-constraint.js +33 -0
  53. package/core/server/data/migrations/versions/4.44/2022-04-15-07-53-add-offer-id-to-subscriptions.js +9 -0
  54. package/core/server/data/migrations/versions/4.45/2022-04-19-12-23-backfill-subscriptions-offers.js +60 -0
  55. package/core/server/data/migrations/versions/4.45/2022-04-20-11-25-add-newsletter-read-permission.js +9 -0
  56. package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +8 -0
  57. package/core/server/data/migrations/versions/4.46/2022-04-13-12-00-add-created-at-newsletters.js +6 -0
  58. package/core/server/data/migrations/versions/4.46/2022-04-13-12-01-add-updated-at-newsletters.js +6 -0
  59. package/core/server/data/migrations/versions/4.46/2022-04-13-12-02-fill-created-at-newsletters.js +19 -0
  60. package/core/server/data/migrations/versions/4.46/2022-04-13-12-03-drop-nullable-created-at-newsletters.js +3 -0
  61. package/core/server/data/migrations/versions/4.46/2022-04-13-12-08-newsletters-show-header-name.js +7 -0
  62. package/core/server/data/migrations/versions/4.46/2022-04-13-12-57-add-uuid-column-to-newsletters.js +8 -0
  63. package/core/server/data/migrations/versions/4.46/2022-04-13-12-58-fill-uuid-for-newsletters.js +19 -0
  64. package/core/server/data/migrations/versions/4.46/2022-04-13-12-59-drop-nullable-uuid-newsletters.js +3 -0
  65. package/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js +85 -0
  66. package/core/server/data/migrations/versions/4.46/2022-04-20-08-39-map-subscribers-to-default-newsletter.js +66 -0
  67. package/core/server/data/migrations/versions/4.46/2022-04-22-07-43-add-newsletter-id-to-subscribe-events.js +9 -0
  68. package/core/server/data/migrations/versions/4.46/2022-04-27-07-59-set-newsletter-id-subscribe-events.js +31 -0
  69. package/core/server/data/schema/commands.js +14 -0
  70. package/core/server/data/schema/default-settings/default-settings.json +4 -0
  71. package/core/server/data/schema/fixtures/fixtures.json +32 -1
  72. package/core/server/data/schema/schema.js +15 -8
  73. package/core/server/models/base/plugins/generate-slug.js +2 -2
  74. package/core/server/models/email.js +4 -0
  75. package/core/server/models/label.js +1 -1
  76. package/core/server/models/member-subscribe-event.js +4 -0
  77. package/core/server/models/member.js +29 -0
  78. package/core/server/models/newsletter.js +101 -11
  79. package/core/server/models/post.js +15 -5
  80. package/core/server/models/role.js +1 -1
  81. package/core/server/models/stripe-customer-subscription.js +4 -0
  82. package/core/server/models/tag.js +1 -1
  83. package/core/server/models/user.js +1 -1
  84. package/core/server/services/api-version-compatibility/index.js +29 -0
  85. package/core/server/services/auth/members/index.js +1 -1
  86. package/core/server/services/auth/setup.js +17 -7
  87. package/core/server/services/mega/email-preview.js +4 -1
  88. package/core/server/services/mega/mega.js +86 -27
  89. package/core/server/services/mega/post-email-serializer.js +17 -14
  90. package/core/server/services/mega/template.js +24 -3
  91. package/core/server/services/members/api.js +2 -2
  92. package/core/server/services/members/middleware.js +69 -2
  93. package/core/server/services/members/service.js +7 -12
  94. package/core/server/services/newsletters/emails/verify-email.js +166 -0
  95. package/core/server/services/newsletters/index.js +14 -7
  96. package/core/server/services/newsletters/service.js +237 -6
  97. package/core/server/services/posts/posts-service.js +18 -1
  98. package/core/server/services/stats/service.js +2 -6
  99. package/core/server/services/users.js +20 -20
  100. package/core/server/web/admin/views/default-prod.html +4 -4
  101. package/core/server/web/admin/views/default.html +4 -4
  102. package/core/server/web/api/app.js +3 -0
  103. package/core/server/web/api/canary/admin/app.js +3 -0
  104. package/core/server/web/api/canary/admin/routes.js +3 -0
  105. package/core/server/web/api/canary/content/app.js +3 -0
  106. package/core/server/web/api/middleware/cors.js +1 -1
  107. package/core/server/web/api/v2/admin/app.js +3 -0
  108. package/core/server/web/api/v2/content/app.js +3 -0
  109. package/core/server/web/api/v3/admin/app.js +3 -0
  110. package/core/server/web/api/v3/content/app.js +3 -0
  111. package/core/server/web/members/app.js +5 -0
  112. package/core/shared/config/defaults.json +2 -2
  113. package/core/shared/labs.js +4 -2
  114. package/core/shared/settings-cache/public.js +1 -1
  115. package/package.json +82 -78
  116. package/yarn.lock +1062 -679
  117. package/core/built/assets/ghost-dark-1933079797e24ccb8839657020830be5.css +0 -1
  118. package/core/built/assets/ghost.min-38f3c38c0c6a1864f57079b068a0b0ce.css +0 -1
  119. package/core/server/services/stats/lib/members-stats-service.js +0 -161
  120. package/core/server/services/stats/lib/mrr-stats-service.js +0 -154
@@ -140,6 +140,7 @@ module.exports = function apiRoutes() {
140
140
  // ## Stats
141
141
  router.get('/stats/member_count', mw.authAdminApi, http(api.stats.memberCountHistory));
142
142
  router.get('/stats/mrr', mw.authAdminApi, http(api.stats.mrr));
143
+ router.get('/stats/subscriptions', mw.authAdminApi, http(api.stats.subscriptions));
143
144
 
144
145
  // ## Labels
145
146
  router.get('/labels', mw.authAdminApi, http(api.labels.browse));
@@ -313,7 +314,9 @@ module.exports = function apiRoutes() {
313
314
  router.put('/custom_theme_settings', mw.authAdminApi, http(api.customThemeSettings.edit));
314
315
 
315
316
  router.get('/newsletters', mw.authAdminApi, http(api.newsletters.browse));
317
+ router.get('/newsletters/:id', mw.authAdminApi, http(api.newsletters.read));
316
318
  router.post('/newsletters', mw.authAdminApi, http(api.newsletters.add));
319
+ router.put('/newsletters/verifications/', mw.authAdminApi, http(api.newsletters.verifyPropertyUpdate));
317
320
  router.put('/newsletters/:id', mw.authAdminApi, http(api.newsletters.edit));
318
321
 
319
322
  return router;
@@ -6,6 +6,8 @@ const sentry = require('../../../../../shared/sentry');
6
6
  const shared = require('../../../shared');
7
7
  const routes = require('./routes');
8
8
  const errorHandler = require('@tryghost/mw-error-handler');
9
+ const versionMissmatchHandler = require('@tryghost/mw-api-version-mismatch');
10
+ const {APIVersionCompatibilityServiceInstance} = require('../../../../services/api-version-compatibility');
9
11
 
10
12
  module.exports = function setupApiApp() {
11
13
  debug('Content API canary setup start');
@@ -27,6 +29,7 @@ module.exports = function setupApiApp() {
27
29
 
28
30
  // API error handling
29
31
  apiApp.use(errorHandler.resourceNotFound);
32
+ apiApp.use(versionMissmatchHandler(APIVersionCompatibilityServiceInstance));
30
33
  apiApp.use(errorHandler.handleJSONResponse(sentry));
31
34
 
32
35
  debug('Content API canary setup end');
@@ -72,7 +72,7 @@ function handleCORS(req, cb) {
72
72
  return cb(null, DISABLE_CORS);
73
73
  }
74
74
 
75
- // Origin matches whitelist
75
+ // Origin matches allowlist
76
76
  if (getAllowlist().indexOf(url.parse(origin).hostname) > -1) {
77
77
  return cb(null, ENABLE_CORS);
78
78
  }
@@ -7,6 +7,8 @@ const shared = require('../../../shared');
7
7
  const apiMw = require('../../middleware');
8
8
  const routes = require('./routes');
9
9
  const errorHandler = require('@tryghost/mw-error-handler');
10
+ const versionMissmatchHandler = require('@tryghost/mw-api-version-mismatch');
11
+ const {APIVersionCompatibilityServiceInstance} = require('../../../../services/api-version-compatibility');
10
12
 
11
13
  module.exports = function setupApiApp() {
12
14
  debug('Admin API v2 setup start');
@@ -33,6 +35,7 @@ module.exports = function setupApiApp() {
33
35
 
34
36
  // API error handling
35
37
  apiApp.use(errorHandler.resourceNotFound);
38
+ apiApp.use(versionMissmatchHandler(APIVersionCompatibilityServiceInstance));
36
39
  apiApp.use(errorHandler.handleJSONResponseV2(sentry));
37
40
 
38
41
  debug('Admin API v2 setup end');
@@ -6,6 +6,8 @@ const sentry = require('../../../../../shared/sentry');
6
6
  const shared = require('../../../shared');
7
7
  const routes = require('./routes');
8
8
  const errorHandler = require('@tryghost/mw-error-handler');
9
+ const versionMissmatchHandler = require('@tryghost/mw-api-version-mismatch');
10
+ const {APIVersionCompatibilityServiceInstance} = require('../../../../services/api-version-compatibility');
9
11
 
10
12
  module.exports = function setupApiApp() {
11
13
  debug('Content API v2 setup start');
@@ -27,6 +29,7 @@ module.exports = function setupApiApp() {
27
29
 
28
30
  // API error handling
29
31
  apiApp.use(errorHandler.resourceNotFound);
32
+ apiApp.use(versionMissmatchHandler(APIVersionCompatibilityServiceInstance));
30
33
  apiApp.use(errorHandler.handleJSONResponse(sentry));
31
34
 
32
35
  debug('Content API v2 setup end');
@@ -7,6 +7,8 @@ const shared = require('../../../shared');
7
7
  const apiMw = require('../../middleware');
8
8
  const routes = require('./routes');
9
9
  const errorHandler = require('@tryghost/mw-error-handler');
10
+ const versionMissmatchHandler = require('@tryghost/mw-api-version-mismatch');
11
+ const {APIVersionCompatibilityServiceInstance} = require('../../../../services/api-version-compatibility');
10
12
 
11
13
  module.exports = function setupApiApp() {
12
14
  debug('Admin API v3 setup start');
@@ -33,6 +35,7 @@ module.exports = function setupApiApp() {
33
35
 
34
36
  // API error handling
35
37
  apiApp.use(errorHandler.resourceNotFound);
38
+ apiApp.use(versionMissmatchHandler(APIVersionCompatibilityServiceInstance));
36
39
  apiApp.use(errorHandler.handleJSONResponseV2(sentry));
37
40
 
38
41
  debug('Admin API v3 setup end');
@@ -6,6 +6,8 @@ const sentry = require('../../../../../shared/sentry');
6
6
  const shared = require('../../../shared');
7
7
  const routes = require('./routes');
8
8
  const errorHandler = require('@tryghost/mw-error-handler');
9
+ const versionMissmatchHandler = require('@tryghost/mw-api-version-mismatch');
10
+ const {APIVersionCompatibilityServiceInstance} = require('../../../../services/api-version-compatibility');
9
11
 
10
12
  module.exports = function setupApiApp() {
11
13
  debug('Content API v3 setup start');
@@ -27,6 +29,7 @@ module.exports = function setupApiApp() {
27
29
 
28
30
  // API error handling
29
31
  apiApp.use(errorHandler.resourceNotFound);
32
+ apiApp.use(versionMissmatchHandler(APIVersionCompatibilityServiceInstance));
30
33
  apiApp.use(errorHandler.handleJSONResponse(sentry));
31
34
 
32
35
  debug('Content API v3 setup end');
@@ -33,6 +33,11 @@ module.exports = function setupMembersApp() {
33
33
 
34
34
  // Initializes members specific routes as well as assigns members specific data to the req/res objects
35
35
  // We don't want to add global bodyParser middleware as that interfers with stripe webhook requests on - `/webhooks`.
36
+
37
+ // Manage newsletter subscription via unsubscribe link
38
+ membersApp.get('/api/member/newsletters', middleware.getMemberNewsletters);
39
+ membersApp.put('/api/member/newsletters', bodyParser.json({limit: '1mb'}), middleware.updateMemberNewsletters);
40
+
36
41
  membersApp.get('/api/member', middleware.getMemberData);
37
42
  membersApp.put('/api/member', bodyParser.json({limit: '1mb'}), middleware.updateMemberData);
38
43
  membersApp.post('/api/member/email', bodyParser.json({limit: '1mb'}), (req, res) => membersService.api.middleware.updateEmailAddress(req, res));
@@ -128,8 +128,8 @@
128
128
  "emailAnalytics": true
129
129
  },
130
130
  "portal": {
131
- "url": "https://unpkg.com/@tryghost/portal@~1.19.0/umd/portal.min.js",
132
- "version": "1.19"
131
+ "url": "https://unpkg.com/@tryghost/portal@~1.22.0/umd/portal.min.js",
132
+ "version": "1.20"
133
133
  },
134
134
  "tenor": {
135
135
  "publicReadOnlyApiKey": null,
@@ -21,12 +21,14 @@ const GA_FEATURES = [
21
21
  'selectablePortalLinks',
22
22
  'membersTableStatus',
23
23
  'improvedOnboarding',
24
+ 'multipleNewsletters',
24
25
  'membersActivityFeed'
25
26
  ];
26
27
 
27
28
  // NOTE: this allowlist is meant to be used to filter out any unexpected
28
29
  // input for the "labs" setting value
29
30
  const BETA_FEATURES = [
31
+ 'multipleNewslettersUI',
30
32
  'activitypub'
31
33
  ];
32
34
 
@@ -36,8 +38,8 @@ const ALPHA_FEATURES = [
36
38
  'urlCache',
37
39
  'beforeAfterCard',
38
40
  'tweetGridCard',
39
- 'multipleNewsletters',
40
- 'dashboardV5'
41
+ 'dashboardV5',
42
+ 'publishingFlow'
41
43
  ];
42
44
 
43
45
  module.exports.GA_KEYS = [...GA_FEATURES];
@@ -3,7 +3,7 @@
3
3
  * This has been misused - unsplash and slack are incorrectly stored there
4
4
  * https://github.com/TryGhost/Ghost/issues/10318
5
5
  *
6
- * This file acts as a new whitelist for "public" settings
6
+ * This file acts as an allowlist for "public" settings
7
7
  */
8
8
 
9
9
  module.exports = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "4.43.1",
3
+ "version": "4.46.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -51,67 +51,71 @@
51
51
  "fix": "yarn fix:client && yarn fix:server"
52
52
  },
53
53
  "engines": {
54
- "node": "^12.22.1 || ^14.17.0 || ^16.13.0",
54
+ "node": "^14.17.0 || ^16.13.0",
55
55
  "cli": "^1.17.0"
56
56
  },
57
57
  "dependencies": {
58
- "@sentry/node": "6.19.6",
59
- "@tryghost/adapter-manager": "0.2.28",
60
- "@tryghost/admin-api-schema": "2.13.0",
61
- "@tryghost/bookshelf-plugins": "0.3.18",
62
- "@tryghost/bootstrap-socket": "0.2.17",
63
- "@tryghost/color-utils": "0.1.12",
64
- "@tryghost/config-url-helpers": "0.1.5",
65
- "@tryghost/constants": "1.0.2",
58
+ "@sentry/node": "6.19.7",
59
+ "@tryghost/adapter-manager": "0.2.29",
60
+ "@tryghost/admin-api-schema": "2.14.0",
61
+ "@tryghost/api-version-compatibility-service": "0.1.1",
62
+ "@tryghost/bookshelf-plugins": "0.4.1",
63
+ "@tryghost/bootstrap-socket": "0.2.18",
64
+ "@tryghost/color-utils": "0.1.13",
65
+ "@tryghost/config-url-helpers": "0.1.6",
66
+ "@tryghost/constants": "1.0.3",
66
67
  "@tryghost/custom-theme-settings-service": "0.3.2",
67
- "@tryghost/database-info": "0.3.1",
68
- "@tryghost/debug": "0.1.14",
69
- "@tryghost/domain-events": "0.1.9",
68
+ "@tryghost/database-info": "0.3.3",
69
+ "@tryghost/debug": "0.1.16",
70
+ "@tryghost/domain-events": "0.1.10",
70
71
  "@tryghost/email-analytics-provider-mailgun": "1.0.8",
71
72
  "@tryghost/email-analytics-service": "1.0.6",
72
- "@tryghost/errors": "1.2.10",
73
- "@tryghost/express-dynamic-redirects": "0.2.8",
74
- "@tryghost/helpers": "1.1.62",
75
- "@tryghost/image-transform": "1.0.29",
76
- "@tryghost/job-manager": "0.8.21",
73
+ "@tryghost/errors": "1.2.12",
74
+ "@tryghost/express-dynamic-redirects": "0.2.9",
75
+ "@tryghost/helpers": "1.1.64",
76
+ "@tryghost/image-transform": "1.0.30",
77
+ "@tryghost/job-manager": "0.8.22",
77
78
  "@tryghost/kg-card-factory": "3.1.3",
78
79
  "@tryghost/kg-default-atoms": "3.1.2",
79
80
  "@tryghost/kg-default-cards": "5.16.2",
80
81
  "@tryghost/kg-markdown-html-renderer": "5.1.5",
81
82
  "@tryghost/kg-mobiledoc-html-renderer": "5.3.5",
82
- "@tryghost/limit-service": "1.0.10",
83
- "@tryghost/logging": "2.1.5",
84
- "@tryghost/magic-link": "1.0.21",
85
- "@tryghost/member-events": "0.4.1",
86
- "@tryghost/members-api": "5.6.1",
87
- "@tryghost/members-events-service": "0.3.3",
88
- "@tryghost/members-importer": "0.5.7",
89
- "@tryghost/members-offers": "0.10.9",
90
- "@tryghost/members-ssr": "1.0.23",
91
- "@tryghost/members-stripe-service": "0.9.4",
92
- "@tryghost/metrics": "1.0.8",
93
- "@tryghost/minifier": "0.1.12",
94
- "@tryghost/mw-error-handler": "0.2.0",
95
- "@tryghost/mw-session-from-token": "0.1.28",
96
- "@tryghost/nodemailer": "0.3.20",
97
- "@tryghost/nql": "0.9.1",
98
- "@tryghost/package-json": "1.0.18",
99
- "@tryghost/promise": "0.1.15",
100
- "@tryghost/request": "0.1.24",
101
- "@tryghost/root-utils": "0.3.12",
102
- "@tryghost/security": "0.2.15",
103
- "@tryghost/session-service": "0.1.38",
104
- "@tryghost/settings-path-manager": "0.1.4",
83
+ "@tryghost/limit-service": "1.1.0",
84
+ "@tryghost/logging": "2.1.8",
85
+ "@tryghost/magic-link": "1.0.22",
86
+ "@tryghost/member-events": "0.4.2",
87
+ "@tryghost/members-api": "6.2.3",
88
+ "@tryghost/members-events-service": "0.3.4",
89
+ "@tryghost/members-importer": "0.5.10",
90
+ "@tryghost/members-offers": "0.11.2",
91
+ "@tryghost/members-ssr": "1.0.24",
92
+ "@tryghost/members-stripe-service": "0.10.1",
93
+ "@tryghost/metrics": "1.0.11",
94
+ "@tryghost/minifier": "0.1.13",
95
+ "@tryghost/mw-api-version-mismatch": "0.1.1",
96
+ "@tryghost/mw-error-handler": "0.2.2",
97
+ "@tryghost/mw-session-from-token": "0.1.30",
98
+ "@tryghost/nodemailer": "0.3.22",
99
+ "@tryghost/nql": "0.9.2",
100
+ "@tryghost/package-json": "1.0.19",
101
+ "@tryghost/promise": "0.1.16",
102
+ "@tryghost/request": "0.1.26",
103
+ "@tryghost/root-utils": "0.3.14",
104
+ "@tryghost/security": "0.2.16",
105
+ "@tryghost/session-service": "0.1.40",
106
+ "@tryghost/settings-path-manager": "0.1.5",
105
107
  "@tryghost/social-urls": "0.1.29",
108
+ "@tryghost/stats-service": "0.2.1",
106
109
  "@tryghost/string": "0.1.23",
107
- "@tryghost/tpl": "0.1.14",
110
+ "@tryghost/tpl": "0.1.16",
108
111
  "@tryghost/update-check-service": "0.3.2",
109
112
  "@tryghost/url-utils": "2.1.0",
110
- "@tryghost/validator": "0.1.22",
111
- "@tryghost/verification-trigger": "0.1.6",
112
- "@tryghost/version": "0.1.12",
113
- "@tryghost/vhost-middleware": "1.0.22",
114
- "@tryghost/zip": "1.1.22",
113
+ "@tryghost/validator": "0.1.24",
114
+ "@tryghost/verification-trigger": "0.2.1",
115
+ "@tryghost/version": "0.1.14",
116
+ "@tryghost/version-notifications-data-service": "0.1.0",
117
+ "@tryghost/vhost-middleware": "1.0.24",
118
+ "@tryghost/zip": "1.1.23",
115
119
  "amperize": "0.6.1",
116
120
  "analytics-node": "6.0.0",
117
121
  "bluebird": "3.7.2",
@@ -127,16 +131,16 @@
127
131
  "cookie-session": "2.0.0",
128
132
  "cors": "2.8.5",
129
133
  "downsize": "0.0.8",
130
- "express": "4.17.3",
134
+ "express": "4.18.0",
131
135
  "express-brute": "1.0.1",
132
136
  "express-hbs": "2.4.0",
133
- "express-jwt": "6.1.1",
137
+ "express-jwt": "7.5.2",
134
138
  "express-lazy-router": "1.0.4",
135
139
  "express-query-boolean": "2.0.0",
136
140
  "express-session": "1.17.2",
137
- "fs-extra": "10.0.1",
141
+ "fs-extra": "10.1.0",
138
142
  "ghost-storage-base": "1.0.0",
139
- "glob": "7.2.0",
143
+ "glob": "8.0.1",
140
144
  "got": "9.6.0",
141
145
  "gscan": "4.27.0",
142
146
  "html-to-text": "5.1.1",
@@ -148,25 +152,25 @@
148
152
  "jsonwebtoken": "8.5.1",
149
153
  "juice": "8.0.0",
150
154
  "keypair": "1.0.4",
151
- "knex": "1.0.5",
152
- "knex-migrator": "4.2.6",
155
+ "knex": "2.0.0",
156
+ "knex-migrator": "4.2.8",
153
157
  "lodash": "4.17.21",
154
- "luxon": "2.3.1",
158
+ "luxon": "2.3.2",
155
159
  "mailgun-js": "0.22.0",
156
- "metascraper": "5.29.0",
157
- "metascraper-author": "5.29.0",
158
- "metascraper-description": "5.29.0",
159
- "metascraper-image": "5.29.0",
160
- "metascraper-logo": "5.29.0",
161
- "metascraper-logo-favicon": "5.29.0",
162
- "metascraper-publisher": "5.29.0",
163
- "metascraper-title": "5.29.0",
164
- "metascraper-url": "5.29.0",
160
+ "metascraper": "5.29.3",
161
+ "metascraper-author": "5.29.3",
162
+ "metascraper-description": "5.29.3",
163
+ "metascraper-image": "5.29.3",
164
+ "metascraper-logo": "5.29.3",
165
+ "metascraper-logo-favicon": "5.29.3",
166
+ "metascraper-publisher": "5.29.3",
167
+ "metascraper-title": "5.29.3",
168
+ "metascraper-url": "5.29.3",
165
169
  "moment": "2.24.0",
166
170
  "moment-timezone": "0.5.23",
167
171
  "multer": "1.4.4",
168
172
  "mysql2": "2.3.3",
169
- "nconf": "0.11.3",
173
+ "nconf": "0.12.0",
170
174
  "node-jose": "2.1.1",
171
175
  "oembed-parser": "1.4.9",
172
176
  "passport": "0.5.2",
@@ -175,7 +179,7 @@
175
179
  "probe-image-size": "7.2.3",
176
180
  "rss": "1.2.2",
177
181
  "sanitize-html": "2.7.0",
178
- "semver": "7.3.6",
182
+ "semver": "7.3.7",
179
183
  "stoppable": "1.1.0",
180
184
  "tough-cookie": "4.0.0",
181
185
  "uuid": "8.3.2",
@@ -183,20 +187,20 @@
183
187
  },
184
188
  "optionalDependencies": {
185
189
  "@tryghost/html-to-mobiledoc": "1.8.6",
186
- "@vscode/sqlite3": "5.0.8"
190
+ "sqlite3": "5.0.6"
187
191
  },
188
192
  "devDependencies": {
189
193
  "@lodder/grunt-postcss": "3.1.1",
190
- "@playwright/test": "1.20.2",
191
- "@tryghost/express-test": "0.8.3",
192
- "c8": "7.11.0",
193
- "coffeescript": "2.6.1",
194
+ "@playwright/test": "1.21.1",
195
+ "@tryghost/express-test": "0.10.0",
196
+ "c8": "7.11.2",
197
+ "coffeescript": "2.7.0",
194
198
  "cssnano": "5.1.7",
195
- "eslint": "8.12.0",
199
+ "eslint": "8.14.0",
196
200
  "eslint-plugin-ghost": "2.13.0",
197
- "grunt": "1.4.1",
201
+ "grunt": "1.5.2",
198
202
  "grunt-bg-shell": "2.3.3",
199
- "grunt-contrib-clean": "2.0.0",
203
+ "grunt-contrib-clean": "2.0.1",
200
204
  "grunt-contrib-compress": "2.0.0",
201
205
  "grunt-contrib-copy": "1.0.0",
202
206
  "grunt-contrib-symlink": "1.0.0",
@@ -205,21 +209,21 @@
205
209
  "grunt-shell": "4.0.0",
206
210
  "grunt-subgrunt": "1.3.0",
207
211
  "grunt-update-submodules": "0.4.1",
208
- "jwks-rsa": "2.0.5",
212
+ "jwks-rsa": "2.1.0",
209
213
  "mocha": "9.2.2",
210
214
  "mocha-slow-test-reporter": "0.1.2",
211
- "mock-knex": "TryGhost/mock-knex#master",
215
+ "mock-knex": "TryGhost/mock-knex#8ecb8c227bf463c991c3d820d33f59efc3ab9682",
212
216
  "nock": "13.2.4",
213
217
  "papaparse": "5.3.2",
214
218
  "postcss": "8.4.12",
215
219
  "rewire": "6.0.0",
216
220
  "should": "13.2.3",
217
- "sinon": "13.0.1",
218
- "supertest": "6.2.2",
221
+ "sinon": "13.0.2",
222
+ "supertest": "6.2.3",
219
223
  "tmp": "0.2.1"
220
224
  },
221
225
  "resolutions": {
222
- "@tryghost/logging": "2.1.5",
226
+ "@tryghost/logging": "2.1.8",
223
227
  "moment": "2.24.0",
224
228
  "moment-timezone": "0.5.23"
225
229
  }