ghost 5.119.3 → 5.120.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 (129) hide show
  1. package/components/tryghost-i18n-5.120.0.tgz +0 -0
  2. package/core/boot.js +0 -2
  3. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +7555 -7216
  4. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-60ce658c.mjs → CodeEditorView-1c5b0683.mjs} +2 -2
  5. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +2 -2
  6. package/core/built/admin/assets/admin-x-settings/{index-8480baa8.mjs → index-14e518a7.mjs} +3 -3
  7. package/core/built/admin/assets/admin-x-settings/{index-a2648c61.mjs → index-fc9f985b.mjs} +2 -2
  8. package/core/built/admin/assets/admin-x-settings/{modals-6900c1d5.mjs → modals-15bc6a0f.mjs} +7192 -6656
  9. package/core/built/admin/assets/{chunk.137.c9bf40f01afeeadb4660.js → chunk.383.25fca2f09b4896656125.js} +76 -59
  10. package/core/built/admin/assets/chunk.524.1657b12c0ab25dd9fb79.js +28 -0
  11. package/core/built/admin/assets/{chunk.582.2697b46a5652693fc674.js → chunk.582.09869b1f1a3cc0ab81f6.js} +19 -26
  12. package/core/built/admin/assets/{ghost-843572e9507d099162ae744d791daba1.js → ghost-b3b44421acca3b3eec76bfbb6ba0e81b.js} +3 -3
  13. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +12578 -12352
  14. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +423 -211
  15. package/core/built/admin/assets/posts/posts.js +13680 -13671
  16. package/core/built/admin/assets/stats/stats.js +16457 -16635
  17. package/core/built/admin/assets/{vendor-8f805740fee4db959a5b2119001a56b1.js → vendor-4ce6d282a2a00fe486a0951e0591da19.js} +11 -9
  18. package/core/built/admin/index.html +5 -5
  19. package/core/frontend/helpers/match.js +6 -0
  20. package/core/frontend/services/routing/ParentRouter.js +1 -1
  21. package/core/frontend/services/routing/controllers/email-post.js +0 -2
  22. package/core/frontend/services/routing/controllers/previews.js +0 -3
  23. package/core/frontend/web/middleware/frontend-caching.js +2 -2
  24. package/core/server/api/endpoints/authentication.js +37 -73
  25. package/core/server/api/endpoints/authors-public.js +8 -9
  26. package/core/server/api/endpoints/db.js +34 -35
  27. package/core/server/api/endpoints/emails.js +8 -10
  28. package/core/server/api/endpoints/integrations.js +20 -18
  29. package/core/server/api/endpoints/invites.js +8 -10
  30. package/core/server/api/endpoints/labels.js +19 -23
  31. package/core/server/api/endpoints/notifications.js +3 -4
  32. package/core/server/api/endpoints/pages-public.js +8 -10
  33. package/core/server/api/endpoints/pages.js +14 -18
  34. package/core/server/api/endpoints/posts-public.js +8 -10
  35. package/core/server/api/endpoints/posts.js +6 -8
  36. package/core/server/api/endpoints/previews.js +8 -10
  37. package/core/server/api/endpoints/redirects.js +7 -8
  38. package/core/server/api/endpoints/schedules.js +5 -7
  39. package/core/server/api/endpoints/slugs.js +7 -9
  40. package/core/server/api/endpoints/snippets.js +16 -20
  41. package/core/server/api/endpoints/tags-public.js +8 -10
  42. package/core/server/api/endpoints/tags.js +19 -23
  43. package/core/server/api/endpoints/themes.js +6 -8
  44. package/core/server/api/endpoints/users.js +31 -36
  45. package/core/server/api/endpoints/utils/permissions.js +10 -10
  46. package/core/server/api/endpoints/utils/serializers/output/roles.js +9 -10
  47. package/core/server/api/endpoints/utils/validators/input/images.js +43 -52
  48. package/core/server/api/endpoints/utils/validators/input/invites.js +6 -8
  49. package/core/server/api/endpoints/webhooks.js +38 -42
  50. package/core/server/data/migrations/versions/5.120/2025-05-07-14-57-38-add-newsletters-button-corners-column.js +8 -0
  51. package/core/server/data/migrations/versions/5.120/2025-05-13-17-36-56-add-newsletters-button-style-column.js +8 -0
  52. package/core/server/data/migrations/versions/5.120/2025-05-14-20-00-15-add-newsletters-setting-columns.js +22 -0
  53. package/core/server/data/schema/schema.js +6 -1
  54. package/core/server/lib/image/Gravatar.js +12 -13
  55. package/core/server/lib/lexical.js +3 -1
  56. package/core/server/models/newsletter.js +6 -1
  57. package/core/server/services/api-version-compatibility/index.js +1 -33
  58. package/core/server/services/auth/session/emails/signin.js +3 -3
  59. package/core/server/services/email-address/EmailAddressParser.js +52 -0
  60. package/core/server/services/email-address/EmailAddressParser.js.d.ts +13 -0
  61. package/core/server/services/email-address/EmailAddressService.js +142 -0
  62. package/core/server/services/email-address/EmailAddressService.ts +183 -0
  63. package/core/server/services/email-address/EmailAddressServiceWrapper.js +2 -4
  64. package/core/server/services/email-analytics/EmailAnalyticsService.js +1 -1
  65. package/core/server/services/email-analytics/EmailAnalyticsServiceWrapper.js +2 -1
  66. package/core/server/services/email-service/BatchSendingService.js +703 -0
  67. package/core/server/services/email-service/EmailBodyCache.js +20 -0
  68. package/core/server/services/email-service/EmailController.js +94 -0
  69. package/core/server/services/email-service/EmailEventProcessor.js +267 -0
  70. package/core/server/services/email-service/EmailEventStorage.js +187 -0
  71. package/core/server/services/email-service/EmailRenderer.js +1263 -0
  72. package/core/server/services/email-service/EmailSegmenter.js +74 -0
  73. package/core/server/services/email-service/EmailService.js +310 -0
  74. package/core/server/services/email-service/EmailServiceWrapper.js +9 -2
  75. package/core/server/services/email-service/MailgunEmailProvider.js +191 -0
  76. package/core/server/services/email-service/SendingService.js +173 -0
  77. package/core/server/services/email-service/email-templates/partials/feedback-button.hbs +7 -0
  78. package/core/server/services/email-service/email-templates/partials/latest-posts.hbs +39 -0
  79. package/core/server/services/email-service/email-templates/partials/paywall.hbs +20 -0
  80. package/core/server/services/email-service/email-templates/partials/styles.hbs +2348 -0
  81. package/core/server/services/email-service/email-templates/template.hbs +238 -0
  82. package/core/server/services/email-service/events/EmailBouncedEvent.js +63 -0
  83. package/core/server/services/email-service/events/EmailDeliveredEvent.js +49 -0
  84. package/core/server/services/email-service/events/EmailOpenedEvent.js +49 -0
  85. package/core/server/services/email-service/events/EmailTemporaryBouncedEvent.js +63 -0
  86. package/core/server/services/email-service/events/EmailUnsubscribedEvent.js +42 -0
  87. package/core/server/services/email-service/events/SpamComplaintEvent.js +42 -0
  88. package/core/server/services/email-service/helpers/register-helpers.js +59 -0
  89. package/core/server/services/email-suppression-list/MailgunEmailSuppressionList.js +2 -1
  90. package/core/server/services/explore-ping/index.js +2 -1
  91. package/core/server/services/mail/GhostMailer.js +1 -1
  92. package/core/server/services/media-inliner/ExternalMediaInliner.js +2 -1
  93. package/core/server/services/members/api.js +15 -15
  94. package/core/server/services/members/emails/signin.js +4 -4
  95. package/core/server/services/members/emails/signup-paid.js +3 -4
  96. package/core/server/services/members/emails/signup.js +3 -3
  97. package/core/server/services/members/emails/subscribe.js +3 -3
  98. package/core/server/services/members/members-api/repositories/MemberRepository.js +92 -92
  99. package/core/server/services/members-events/LastSeenAtUpdater.js +1 -1
  100. package/core/server/services/settings-helpers/SettingsHelpers.js +1 -1
  101. package/core/server/services/staff/StaffServiceEmails.js +1 -1
  102. package/core/server/services/stats/PostsStatsService.js +28 -7
  103. package/core/server/web/api/app.js +0 -1
  104. package/core/server/web/api/endpoints/admin/app.js +0 -2
  105. package/core/server/web/api/endpoints/content/app.js +0 -2
  106. package/core/server/web/api/middleware/upload.js +2 -2
  107. package/core/shared/custom-theme-settings-cache/CustomThemeSettingsService.js +2 -1
  108. package/package.json +39 -97
  109. package/tsconfig.tsbuildinfo +1 -1
  110. package/yarn.lock +385 -517
  111. package/components/tryghost-api-framework-5.119.3.tgz +0 -0
  112. package/components/tryghost-custom-fonts-5.119.3.tgz +0 -0
  113. package/components/tryghost-domain-events-5.119.3.tgz +0 -0
  114. package/components/tryghost-email-addresses-5.119.3.tgz +0 -0
  115. package/components/tryghost-email-service-5.119.3.tgz +0 -0
  116. package/components/tryghost-html-to-plaintext-5.119.3.tgz +0 -0
  117. package/components/tryghost-i18n-5.119.3.tgz +0 -0
  118. package/components/tryghost-job-manager-5.119.3.tgz +0 -0
  119. package/components/tryghost-members-csv-5.119.3.tgz +0 -0
  120. package/components/tryghost-mw-error-handler-5.119.3.tgz +0 -0
  121. package/components/tryghost-mw-vhost-5.119.3.tgz +0 -0
  122. package/components/tryghost-prometheus-metrics-5.119.3.tgz +0 -0
  123. package/components/tryghost-security-5.119.3.tgz +0 -0
  124. package/core/built/admin/assets/chunk.524.c86e2e1b3e94d7cb1e4c.js +0 -35
  125. package/core/server/services/api-version-compatibility/APIVersionCompatibilityService.js +0 -99
  126. package/core/server/services/api-version-compatibility/VersionNotificationsDataService.js +0 -80
  127. package/core/server/services/api-version-compatibility/extract-api-key.js +0 -57
  128. package/core/server/services/api-version-compatibility/mw-api-version-mismatch.js +0 -31
  129. /package/core/built/admin/assets/{chunk.137.c9bf40f01afeeadb4660.js.LICENSE.txt → chunk.383.25fca2f09b4896656125.js.LICENSE.txt} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "5.119.3",
3
+ "version": "5.120.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -43,7 +43,7 @@
43
43
  "test:browser:setup": "npx playwright install",
44
44
  "test:ci:e2e": "c8 -c ./.c8rc.e2e.json -o coverage-e2e yarn test:e2e -b",
45
45
  "test:ci:regression": "yarn test:regression -b",
46
- "test:ci:integration": "c8 -c ./.c8rc.e2e.json -o coverage-integration --lines 52 --functions 47 --branches 74 --statements 52 yarn test:integration -b",
46
+ "test:ci:integration": "c8 -c ./.c8rc.e2e.json -o coverage-integration --lines 52 --functions 47 --branches 73 --statements 52 yarn test:integration -b",
47
47
  "test:unit:slow": "yarn test:unit --reporter=mocha-slow-test-reporter",
48
48
  "test:int:slow": "yarn test:integration --reporter=mocha-slow-test-reporter",
49
49
  "test:e2e:slow": "yarn test:e2e --reporter=mocha-slow-test-reporter",
@@ -67,53 +67,51 @@
67
67
  "@isaacs/ttlcache": "1.4.1",
68
68
  "@sentry/node": "7.120.3",
69
69
  "@slack/webhook": "7.0.5",
70
- "@tryghost/adapter-base-cache": "0.1.13",
71
- "@tryghost/admin-api-schema": "4.5.6",
72
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.119.3.tgz",
70
+ "@tryghost/adapter-base-cache": "0.1.15",
71
+ "@tryghost/admin-api-schema": "4.5.8",
72
+ "@tryghost/api-framework": "1.0.1",
73
73
  "@tryghost/bookshelf-plugins": "0.6.26",
74
- "@tryghost/color-utils": "0.2.3",
75
- "@tryghost/config-url-helpers": "1.0.13",
76
- "@tryghost/custom-fonts": "file:components/tryghost-custom-fonts-5.119.3.tgz",
74
+ "@tryghost/color-utils": "0.2.5",
75
+ "@tryghost/config-url-helpers": "1.0.15",
76
+ "@tryghost/custom-fonts": "1.0.0",
77
77
  "@tryghost/database-info": "0.3.29",
78
78
  "@tryghost/debug": "0.1.34",
79
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.119.3.tgz",
80
- "@tryghost/email-addresses": "file:components/tryghost-email-addresses-5.119.3.tgz",
79
+ "@tryghost/domain-events": "1.0.0",
81
80
  "@tryghost/email-mock-receiver": "0.3.10",
82
- "@tryghost/email-service": "file:components/tryghost-email-service-5.119.3.tgz",
83
81
  "@tryghost/errors": "1.3.7",
84
- "@tryghost/helpers": "1.1.91",
85
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.119.3.tgz",
82
+ "@tryghost/helpers": "1.1.93",
83
+ "@tryghost/html-to-plaintext": "1.0.2",
86
84
  "@tryghost/http-cache-utils": "0.1.19",
87
- "@tryghost/i18n": "file:components/tryghost-i18n-5.119.3.tgz",
88
- "@tryghost/image-transform": "1.4.1",
89
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.119.3.tgz",
90
- "@tryghost/kg-card-factory": "5.1.0",
91
- "@tryghost/kg-converters": "1.1.0",
85
+ "@tryghost/i18n": "file:components/tryghost-i18n-5.120.0.tgz",
86
+ "@tryghost/image-transform": "1.4.3",
87
+ "@tryghost/job-manager": "1.0.0",
88
+ "@tryghost/kg-card-factory": "5.1.1",
89
+ "@tryghost/kg-converters": "1.1.3",
92
90
  "@tryghost/kg-default-atoms": "5.1.0",
93
- "@tryghost/kg-default-cards": "10.1.1",
94
- "@tryghost/kg-default-nodes": "1.4.7",
95
- "@tryghost/kg-html-to-lexical": "1.2.7",
96
- "@tryghost/kg-lexical-html-renderer": "1.3.7",
97
- "@tryghost/kg-mobiledoc-html-renderer": "7.1.1",
98
- "@tryghost/limit-service": "1.2.15",
91
+ "@tryghost/kg-default-cards": "10.1.2",
92
+ "@tryghost/kg-default-nodes": "1.4.12",
93
+ "@tryghost/kg-html-to-lexical": "1.2.12",
94
+ "@tryghost/kg-lexical-html-renderer": "1.3.12",
95
+ "@tryghost/kg-mobiledoc-html-renderer": "7.1.2",
96
+ "@tryghost/limit-service": "1.2.17",
99
97
  "@tryghost/logging": "2.4.21",
100
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.119.3.tgz",
98
+ "@tryghost/members-csv": "2.0.2",
101
99
  "@tryghost/metrics": "1.0.37",
102
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.119.3.tgz",
103
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.119.3.tgz",
100
+ "@tryghost/mw-error-handler": "1.0.6",
101
+ "@tryghost/mw-vhost": "1.0.0",
104
102
  "@tryghost/nodemailer": "0.3.47",
105
103
  "@tryghost/nql": "0.12.7",
106
104
  "@tryghost/pretty-cli": "1.2.46",
107
- "@tryghost/prometheus-metrics": "file:components/tryghost-prometheus-metrics-5.119.3.tgz",
105
+ "@tryghost/prometheus-metrics": "1.0.0",
108
106
  "@tryghost/promise": "0.3.14",
109
- "@tryghost/referrer-parser": "0.1.2",
107
+ "@tryghost/referrer-parser": "0.1.4",
110
108
  "@tryghost/request": "1.0.10",
111
109
  "@tryghost/root-utils": "0.3.32",
112
- "@tryghost/security": "file:components/tryghost-security-5.119.3.tgz",
113
- "@tryghost/social-urls": "0.1.47",
114
- "@tryghost/string": "0.2.13",
110
+ "@tryghost/security": "1.0.0",
111
+ "@tryghost/social-urls": "0.1.49",
112
+ "@tryghost/string": "0.2.15",
115
113
  "@tryghost/tpl": "0.1.34",
116
- "@tryghost/url-utils": "4.4.9",
114
+ "@tryghost/url-utils": "4.4.11",
117
115
  "@tryghost/validator": "0.2.16",
118
116
  "@tryghost/version": "0.1.32",
119
117
  "@tryghost/zip": "1.1.48",
@@ -194,6 +192,7 @@
194
192
  "nconf": "0.13.0",
195
193
  "node-fetch": "2.7.0",
196
194
  "node-jose": "2.2.0",
195
+ "nodemailer": "6.10.1",
197
196
  "otplib": "12.0.1",
198
197
  "papaparse": "5.3.2",
199
198
  "path-match": "1.2.4",
@@ -201,13 +200,13 @@
201
200
  "probe-image-size": "7.2.3",
202
201
  "rss": "1.2.2",
203
202
  "sanitize-html": "2.16.0",
204
- "semver": "7.7.1",
203
+ "semver": "7.7.2",
205
204
  "simple-dom": "1.4.0",
206
205
  "stoppable": "1.1.0",
207
206
  "stripe": "8.222.0",
208
207
  "superagent": "5.3.1",
209
208
  "superagent-throttle": "1.0.1",
210
- "terser": "5.39.0",
209
+ "terser": "5.39.2",
211
210
  "tiny-glob": "0.2.9",
212
211
  "tough-cookie": "4.1.4",
213
212
  "ua-parser-js": "1.0.40",
@@ -215,7 +214,7 @@
215
214
  "xml": "1.0.1"
216
215
  },
217
216
  "optionalDependencies": {
218
- "@tryghost/html-to-mobiledoc": "3.2.3",
217
+ "@tryghost/html-to-mobiledoc": "3.2.4",
219
218
  "sqlite3": "5.1.7"
220
219
  },
221
220
  "devDependencies": {
@@ -226,8 +225,9 @@
226
225
  "@types/bookshelf": "1.2.9",
227
226
  "@types/common-tags": "1.8.4",
228
227
  "@types/jsonwebtoken": "9.0.9",
229
- "@types/node": "22.15.8",
228
+ "@types/node": "22.15.18",
230
229
  "@types/node-jose": "1.1.13",
230
+ "@types/nodemailer": "6.4.17",
231
231
  "@types/sinon": "17.0.4",
232
232
  "@types/supertest": "6.0.3",
233
233
  "c8": "8.0.1",
@@ -238,6 +238,7 @@
238
238
  "expect": "29.7.0",
239
239
  "find-root": "1.1.0",
240
240
  "form-data": "4.0.2",
241
+ "html-validate": "8.29.0",
241
242
  "inquirer": "8.2.6",
242
243
  "jwk-to-pem": "2.0.7",
243
244
  "jwks-rsa": "3.2.0",
@@ -264,26 +265,13 @@
264
265
  "jackspeak": "2.3.6",
265
266
  "moment": "2.24.0",
266
267
  "moment-timezone": "0.5.45",
267
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.119.3.tgz",
268
- "@tryghost/custom-fonts": "file:components/tryghost-custom-fonts-5.119.3.tgz",
269
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.119.3.tgz",
270
- "@tryghost/email-addresses": "file:components/tryghost-email-addresses-5.119.3.tgz",
271
- "@tryghost/email-service": "file:components/tryghost-email-service-5.119.3.tgz",
272
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.119.3.tgz",
273
- "@tryghost/i18n": "file:components/tryghost-i18n-5.119.3.tgz",
274
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.119.3.tgz",
275
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.119.3.tgz",
276
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.119.3.tgz",
277
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.119.3.tgz",
278
- "@tryghost/prometheus-metrics": "file:components/tryghost-prometheus-metrics-5.119.3.tgz",
279
- "@tryghost/security": "file:components/tryghost-security-5.119.3.tgz"
268
+ "@tryghost/i18n": "file:components/tryghost-i18n-5.120.0.tgz"
280
269
  },
281
270
  "nx": {
282
271
  "targets": {
283
272
  "archive": {
284
273
  "dependsOn": [
285
274
  "build:assets",
286
- "^build:ts",
287
275
  "build:tsc",
288
276
  {
289
277
  "projects": [
@@ -295,82 +283,36 @@
295
283
  },
296
284
  "dev": {
297
285
  "dependsOn": [
298
- "^build:ts",
299
286
  "build:assets"
300
287
  ]
301
288
  },
302
- "test": {
303
- "dependsOn": [
304
- "^build:ts"
305
- ]
306
- },
307
- "test:single": {
308
- "dependsOn": [
309
- "^build:ts"
310
- ]
311
- },
312
289
  "test:all": {
313
290
  "dependsOn": [
314
- "^build:ts",
315
291
  "build:assets"
316
292
  ]
317
293
  },
318
294
  "test:unit": {
319
295
  "dependsOn": [
320
- "^build:ts",
321
296
  "build:assets"
322
297
  ]
323
298
  },
324
- "test:integration": {
325
- "dependsOn": [
326
- "^build:ts"
327
- ]
328
- },
329
- "test:regression": {
330
- "dependsOn": [
331
- "^build:ts"
332
- ]
333
- },
334
299
  "test:browser": {
335
300
  "dependsOn": [
336
- "^build:ts",
337
301
  "build:assets",
338
302
  "ghost-admin:build"
339
303
  ]
340
304
  },
341
305
  "test:browser:admin": {
342
306
  "dependsOn": [
343
- "^build:ts",
344
307
  "build:assets",
345
308
  "ghost-admin:build"
346
309
  ]
347
310
  },
348
311
  "test:browser:portal": {
349
312
  "dependsOn": [
350
- "^build:ts",
351
313
  "build:assets",
352
314
  "ghost-admin:build"
353
315
  ]
354
- },
355
- "test:e2e": {
356
- "dependsOn": [
357
- "^build:ts"
358
- ]
359
- },
360
- "test:ci:e2e": {
361
- "dependsOn": [
362
- "^build:ts"
363
- ]
364
- },
365
- "test:ci:regression": {
366
- "dependsOn": [
367
- "^build:ts"
368
- ]
369
- },
370
- "test:ci:integration": {
371
- "dependsOn": [
372
- "^build:ts"
373
- ]
374
316
  }
375
317
  }
376
318
  }